diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 3b40c3fd07be90..6fb93b7fef45a6 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -31,7 +31,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -44,7 +44,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@v3 # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun @@ -57,6 +57,6 @@ jobs: # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 with: category: '/language:${{matrix.language}}' diff --git a/.rubocop.yml b/.rubocop.yml index 61cb1164b4d406..8832e28f6e9113 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -74,14 +74,12 @@ Metrics/ModuleLength: Metrics/AbcSize: Exclude: - 'lib/mastodon/cli/*.rb' - - db/*migrate/**/* # Reason: Currently disabled in .rubocop_todo.yml # https://docs.rubocop.org/rubocop/cops_metrics.html#metricscyclomaticcomplexity Metrics/CyclomaticComplexity: Exclude: - lib/mastodon/cli/*.rb - - db/*migrate/**/* # Reason: # https://docs.rubocop.org/rubocop/cops_metrics.html#metricsparameterlists diff --git a/.yarn/patches/compression-webpack-plugin-npm-6.1.1-3a2a65987e.patch b/.yarn/patches/compression-webpack-plugin-npm-6.1.1-3a2a65987e.patch deleted file mode 100644 index 30d5db27391e24..00000000000000 --- a/.yarn/patches/compression-webpack-plugin-npm-6.1.1-3a2a65987e.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/dist/index.js b/dist/index.js -index 57e375592d984e9a429bcd9f800fa2d15cd662e4..0c47d96df3608e23adfd77d887a8f72abbd501c0 100644 ---- a/dist/index.js -+++ b/dist/index.js -@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", { - }); - exports.default = void 0; - --var _crypto = _interopRequireDefault(require("crypto")); -+var _createHash = _interopRequireDefault(require("webpack/lib/util/createHash")); - - var _path = _interopRequireDefault(require("path")); - -@@ -227,7 +227,7 @@ class CompressionPlugin { - originalAlgorithm: this.options.algorithm, - compressionOptions: this.options.compressionOptions, - name, -- contentHash: _crypto.default.createHash("md4").update(input).digest("hex") -+ contentHash: _createHash.default("md4").update(input).digest("hex") - }; - } else { - cacheData.name = (0, _serializeJavascript.default)({ diff --git a/Dockerfile b/Dockerfile index 4d5bd57f1180e3..96f8b5cd279a96 100644 --- a/Dockerfile +++ b/Dockerfile @@ -103,6 +103,7 @@ RUN \ procps \ tini \ tzdata \ + wget \ ; \ # Patch Ruby to use jemalloc patchelf --add-needed libjemalloc.so.2 /usr/local/bin/ruby; \ diff --git a/Gemfile.lock b/Gemfile.lock index 9b78ca733e1f84..295461bd35fc46 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -131,16 +131,16 @@ GEM attr_required (1.0.1) awrence (1.2.1) aws-eventstream (1.3.0) - aws-partitions (1.860.0) - aws-sdk-core (3.189.0) + aws-partitions (1.873.0) + aws-sdk-core (3.190.1) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.8) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.74.0) + aws-sdk-kms (1.75.0) aws-sdk-core (~> 3, >= 3.188.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.141.0) + aws-sdk-s3 (1.142.0) aws-sdk-core (~> 3, >= 3.189.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.8) @@ -175,7 +175,8 @@ GEM blurhash (0.1.7) bootsnap (1.17.0) msgpack (~> 1.2) - brakeman (6.1.0) + brakeman (6.1.1) + racc browser (5.3.1) brpoplpush-redis_script (0.1.3) concurrent-ruby (~> 1.0, >= 1.0.5) @@ -301,7 +302,7 @@ GEM faraday_middleware (1.2.0) faraday (~> 1.0) fast_blank (1.0.1) - fastimage (2.2.7) + fastimage (2.3.0) ffi (1.15.5) ffi-compiler (1.0.1) ffi (>= 1.0.0) @@ -456,9 +457,9 @@ GEM azure-storage-blob (~> 2.0.1) hashie (~> 5.0) memory_profiler (1.0.1) - mime-types (3.5.1) + mime-types (3.5.2) mime-types-data (~> 3.2015) - mime-types-data (3.2023.1003) + mime-types-data (3.2023.1205) mini_mime (1.1.5) mini_portile2 (2.8.5) minitest (5.20.0) @@ -481,7 +482,7 @@ GEM net-smtp (0.4.0) net-protocol nio4r (2.5.9) - nokogiri (1.15.5) + nokogiri (1.16.0) mini_portile2 (~> 2.8.2) racc (~> 1.4) oj (3.16.3) @@ -510,7 +511,7 @@ GEM validate_email validate_url webfinger (~> 1.2) - openssl (3.1.0) + openssl (3.2.0) openssl-signature_algorithm (1.3.0) openssl (> 2.0) orm_adapter (0.5.0) @@ -543,7 +544,7 @@ GEM psych (5.1.2) stringio public_suffix (5.0.4) - puma (6.4.0) + puma (6.4.1) nio4r (~> 2.0) pundit (2.3.1) activesupport (>= 3.0.0) @@ -679,10 +680,10 @@ GEM rubocop (~> 1.41) rubocop-factory_bot (2.24.0) rubocop (~> 1.33) - rubocop-performance (1.20.0) + rubocop-performance (1.20.1) rubocop (>= 1.48.1, < 2.0) rubocop-ast (>= 1.30.0, < 2.0) - rubocop-rails (2.23.0) + rubocop-rails (2.23.1) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.33.0, < 2.0) @@ -782,7 +783,7 @@ GEM unf (~> 0.1.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - tzinfo-data (1.2023.3) + tzinfo-data (1.2023.4) tzinfo (>= 1.0.0) unf (0.1.4) unf_ext @@ -797,7 +798,7 @@ GEM public_suffix warden (1.2.9) rack (>= 2.0.9) - webauthn (3.0.0) + webauthn (3.1.0) android_key_attestation (~> 0.3.0) awrence (~> 1.1) bindata (~> 2.4) diff --git a/SECURITY.md b/SECURITY.md index 954ff73a247425..81472b01b4306f 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -13,10 +13,8 @@ A "vulnerability in Mastodon" is a vulnerability in the code distributed through ## Supported Versions -| Version | Supported | -| ------- | ---------------- | -| 4.2.x | Yes | -| 4.1.x | Yes | -| 4.0.x | No | -| 3.5.x | Until 2023-12-31 | -| < 3.5 | No | +| Version | Supported | +| ------- | --------- | +| 4.2.x | Yes | +| 4.1.x | Yes | +| < 4.1 | No | diff --git a/app/controllers/admin/export_domain_blocks_controller.rb b/app/controllers/admin/export_domain_blocks_controller.rb index 433b8a158787a7..ffc4478172634d 100644 --- a/app/controllers/admin/export_domain_blocks_controller.rb +++ b/app/controllers/admin/export_domain_blocks_controller.rb @@ -68,7 +68,7 @@ def export_headers def export_data CSV.generate(headers: export_headers, write_headers: true) do |content| - DomainBlock.with_limitations.each do |instance| + DomainBlock.with_limitations.order(id: :asc).each do |instance| content << [instance.domain, instance.severity, instance.reject_media, instance.reject_reports, instance.public_comment, instance.obfuscate] end end diff --git a/app/controllers/api/v1/streaming_controller.rb b/app/controllers/api/v1/streaming_controller.rb index 0cdd00d62f7ef5..0cb6e856f2b5ad 100644 --- a/app/controllers/api/v1/streaming_controller.rb +++ b/app/controllers/api/v1/streaming_controller.rb @@ -13,7 +13,9 @@ def index def streaming_api_url Addressable::URI.parse(request.url).tap do |uri| - uri.host = Addressable::URI.parse(Rails.configuration.x.streaming_api_base_url).host + base_url = Addressable::URI.parse(Rails.configuration.x.streaming_api_base_url) + uri.host = base_url.host + uri.port = base_url.port end.to_s end end diff --git a/app/controllers/concerns/signature_verification.rb b/app/controllers/concerns/signature_verification.rb index f0a344f1c97d64..35391e64c44390 100644 --- a/app/controllers/concerns/signature_verification.rb +++ b/app/controllers/concerns/signature_verification.rb @@ -91,14 +91,23 @@ def signed_request_actor raise SignatureVerificationError, "Public key not found for key #{signature_params['keyId']}" if actor.nil? signature = Base64.decode64(signature_params['signature']) - compare_signed_string = build_signed_string + compare_signed_string = build_signed_string(include_query_string: true) return actor unless verify_signature(actor, signature, compare_signed_string).nil? + # Compatibility quirk with older Mastodon versions + compare_signed_string = build_signed_string(include_query_string: false) + return actor unless verify_signature(actor, signature, compare_signed_string).nil? + actor = stoplight_wrap_request { actor_refresh_key!(actor) } raise SignatureVerificationError, "Could not refresh public key #{signature_params['keyId']}" if actor.nil? + compare_signed_string = build_signed_string(include_query_string: true) + return actor unless verify_signature(actor, signature, compare_signed_string).nil? + + # Compatibility quirk with older Mastodon versions + compare_signed_string = build_signed_string(include_query_string: false) return actor unless verify_signature(actor, signature, compare_signed_string).nil? fail_with! "Verification failed for #{actor.to_log_human_identifier} #{actor.uri} using rsa-sha256 (RSASSA-PKCS1-v1_5 with SHA-256)", signed_string: compare_signed_string, signature: signature_params['signature'] @@ -180,11 +189,18 @@ def verify_signature(actor, signature, compare_signed_string) nil end - def build_signed_string + def build_signed_string(include_query_string: true) signed_headers.map do |signed_header| case signed_header when Request::REQUEST_TARGET - "#{Request::REQUEST_TARGET}: #{request.method.downcase} #{request.path}" + if include_query_string + "#{Request::REQUEST_TARGET}: #{request.method.downcase} #{request.original_fullpath}" + else + # Current versions of Mastodon incorrectly omit the query string from the (request-target) pseudo-header. + # Therefore, temporarily support such incorrect signatures for compatibility. + # TODO: remove eventually some time after release of the fixed version + "#{Request::REQUEST_TARGET}: #{request.method.downcase} #{request.path}" + end when '(created)' raise SignatureVerificationError, 'Invalid pseudo-header (created) for rsa-sha256' unless signature_algorithm == 'hs2019' raise SignatureVerificationError, 'Pseudo-header (created) used but corresponding argument missing' if signature_params['created'].blank? diff --git a/app/javascript/flavours/glitch/components/media_attachments.jsx b/app/javascript/flavours/glitch/components/media_attachments.jsx index 4e777437a034c2..9dd3fcfd959a66 100644 --- a/app/javascript/flavours/glitch/components/media_attachments.jsx +++ b/app/javascript/flavours/glitch/components/media_attachments.jsx @@ -15,7 +15,7 @@ export default class MediaAttachments extends ImmutablePureComponent { lang: PropTypes.string, height: PropTypes.number, width: PropTypes.number, - revealed: PropTypes.bool, + visible: PropTypes.bool, }; static defaultProps = { @@ -52,7 +52,7 @@ export default class MediaAttachments extends ImmutablePureComponent { }; render () { - const { status, width, height, revealed } = this.props; + const { status, width, height, visible } = this.props; const mediaAttachments = status.get('media_attachments'); const language = status.getIn(['language', 'translation']) || status.get('language') || this.props.lang; @@ -100,7 +100,7 @@ export default class MediaAttachments extends ImmutablePureComponent { height={height} inline sensitive={status.get('sensitive')} - revealed={revealed} + visible={visible} onOpenVideo={noop} /> )} @@ -115,7 +115,7 @@ export default class MediaAttachments extends ImmutablePureComponent { lang={language} sensitive={status.get('sensitive')} defaultWidth={width} - revealed={revealed} + visible={visible} height={height} onOpenMedia={noop} /> diff --git a/app/javascript/flavours/glitch/features/report/components/status_check_box.jsx b/app/javascript/flavours/glitch/features/report/components/status_check_box.jsx index a368c41ce62a33..5fe6888dc5e4d6 100644 --- a/app/javascript/flavours/glitch/features/report/components/status_check_box.jsx +++ b/app/javascript/flavours/glitch/features/report/components/status_check_box.jsx @@ -45,7 +45,7 @@ class StatusCheckBox extends PureComponent { - } /> + } /> ); diff --git a/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.jsx b/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.jsx index 4230c6dd9a319d..169f72f97ae575 100644 --- a/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.jsx @@ -221,7 +221,7 @@ class FocalPointModal extends ImmutablePureComponent { const worker = createWorker({ workerPath: tesseractWorkerPath, corePath: tesseractCorePath, - langPath: `${assetHost}/ocr/lang-data/`, + langPath: `${assetHost}/ocr/lang-data`, logger: ({ status, progress }) => { if (status === 'recognizing text') { this.setState({ ocrStatus: 'detecting', progress }); diff --git a/app/javascript/flavours/glitch/reducers/accounts_map.js b/app/javascript/flavours/glitch/reducers/accounts_map.js index d5ecad7dbfaddf..9053dcc9c0528b 100644 --- a/app/javascript/flavours/glitch/reducers/accounts_map.js +++ b/app/javascript/flavours/glitch/reducers/accounts_map.js @@ -2,8 +2,13 @@ import { Map as ImmutableMap } from 'immutable'; import { ACCOUNT_LOOKUP_FAIL } from '../actions/accounts'; import { importAccounts } from '../actions/accounts_typed'; +import { domain } from '../initial_state'; -export const normalizeForLookup = str => str.toLowerCase(); +export const normalizeForLookup = str => { + str = str.toLowerCase(); + const trailingIndex = str.indexOf(`@${domain.toLowerCase()}`); + return (trailingIndex > 0) ? str.slice(0, trailingIndex) : str; +}; const initialState = ImmutableMap(); diff --git a/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss b/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss index 456252750b9861..740d7222f8f986 100644 --- a/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss +++ b/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss @@ -296,10 +296,15 @@ html { } &__item { + color: $darker-text-color; + + &--dangerous { + color: $error-value-color; + } + a, button { background: $white; - color: $darker-text-color; } } } @@ -311,9 +316,9 @@ html { .privacy-dropdown__option.active .privacy-dropdown__option__content strong, .privacy-dropdown__option:hover .privacy-dropdown__option__content, .privacy-dropdown__option:hover .privacy-dropdown__option__content strong, -.dropdown-menu__item a:active, -.dropdown-menu__item a:focus, -.dropdown-menu__item a:hover, +.dropdown-menu__item:not(.dropdown-menu__item--dangerous) a:active, +.dropdown-menu__item:not(.dropdown-menu__item--dangerous) a:focus, +.dropdown-menu__item:not(.dropdown-menu__item--dangerous) a:hover, .actions-modal ul li:not(:empty) a.active, .actions-modal ul li:not(:empty) a.active button, .actions-modal ul li:not(:empty) a:active, diff --git a/app/javascript/mastodon/components/media_attachments.jsx b/app/javascript/mastodon/components/media_attachments.jsx index 7b945a0ea22f67..63fe3e67f9aef1 100644 --- a/app/javascript/mastodon/components/media_attachments.jsx +++ b/app/javascript/mastodon/components/media_attachments.jsx @@ -15,6 +15,7 @@ export default class MediaAttachments extends ImmutablePureComponent { lang: PropTypes.string, height: PropTypes.number, width: PropTypes.number, + visible: PropTypes.bool, }; static defaultProps = { @@ -51,7 +52,7 @@ export default class MediaAttachments extends ImmutablePureComponent { }; render () { - const { status, width, height } = this.props; + const { status, width, height, visible } = this.props; const mediaAttachments = status.get('media_attachments'); const language = status.getIn(['language', 'translation']) || status.get('language') || this.props.lang; @@ -99,6 +100,7 @@ export default class MediaAttachments extends ImmutablePureComponent { height={height} inline sensitive={status.get('sensitive')} + visible={visible} onOpenVideo={noop} /> )} @@ -113,6 +115,7 @@ export default class MediaAttachments extends ImmutablePureComponent { lang={language} sensitive={status.get('sensitive')} defaultWidth={width} + visible={visible} height={height} onOpenMedia={noop} /> diff --git a/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx b/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx index 9b26e2d75360aa..ed86d19f5c0a1b 100644 --- a/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx +++ b/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx @@ -179,7 +179,7 @@ class Footer extends ImmutablePureComponent { if (status.get('in_reply_to_id', null) === null) { replyIcon = 'reply'; - replyIconComponent = RepeatIcon; + replyIconComponent = ReplyIcon; replyTitle = intl.formatMessage(messages.reply); } else { replyIcon = 'reply-all'; diff --git a/app/javascript/mastodon/features/report/components/status_check_box.jsx b/app/javascript/mastodon/features/report/components/status_check_box.jsx index 8bee76e591944c..481ee3e5edd049 100644 --- a/app/javascript/mastodon/features/report/components/status_check_box.jsx +++ b/app/javascript/mastodon/features/report/components/status_check_box.jsx @@ -47,7 +47,7 @@ class StatusCheckBox extends PureComponent { - + ); diff --git a/app/javascript/mastodon/features/ui/components/focal_point_modal.jsx b/app/javascript/mastodon/features/ui/components/focal_point_modal.jsx index 5353ebdb8aa404..91dca26718ac18 100644 --- a/app/javascript/mastodon/features/ui/components/focal_point_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/focal_point_modal.jsx @@ -222,7 +222,7 @@ class FocalPointModal extends ImmutablePureComponent { const worker = createWorker({ workerPath: tesseractWorkerPath, corePath: tesseractCorePath, - langPath: `${assetHost}/ocr/lang-data/`, + langPath: `${assetHost}/ocr/lang-data`, logger: ({ status, progress }) => { if (status === 'recognizing text') { this.setState({ ocrStatus: 'detecting', progress }); diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 8a6d6040d66c7e..7ee3c868ae1f16 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -32,6 +32,7 @@ "account.featured_tags.last_status_never": "Няма публикации", "account.featured_tags.title": "Главни хаштагове на {name}", "account.follow": "Последване", + "account.follow_back": "Последване взаимно", "account.followers": "Последователи", "account.followers.empty": "Още никой не следва потребителя.", "account.followers_counter": "{count, plural, one {{counter} последовател} other {{counter} последователи}}", @@ -52,6 +53,7 @@ "account.mute_notifications_short": "Заглушаване на известията", "account.mute_short": "Заглушаване", "account.muted": "Заглушено", + "account.mutual": "Взаимни", "account.no_bio": "Няма представен опис.", "account.open_original_page": "Отваряне на първообразната страница", "account.posts": "Публикации", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 86f1fb47650cb7..290b364a5233f1 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -32,7 +32,7 @@ "account.featured_tags.last_status_never": "No hi ha tuts", "account.featured_tags.title": "etiquetes destacades de {name}", "account.follow": "Segueix", - "account.follow_back": "Segueix", + "account.follow_back": "Segueix tu també", "account.followers": "Seguidors", "account.followers.empty": "A aquest usuari encara no el segueix ningú.", "account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} Seguidors}}", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 17133631a5ed98..04b39904e48136 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -21,6 +21,7 @@ "account.blocked": "Blociwyd", "account.browse_more_on_origin_server": "Pori mwy ar y proffil gwreiddiol", "account.cancel_follow_request": "Tynnu cais i ddilyn", + "account.copy": "Copïo dolen i'r proffil", "account.direct": "Crybwyll yn breifat @{name}", "account.disable_notifications": "Stopiwch fy hysbysu pan fydd @{name} yn postio", "account.domain_blocked": "Parth wedi ei flocio", @@ -31,6 +32,7 @@ "account.featured_tags.last_status_never": "Dim postiadau", "account.featured_tags.title": "Prif hashnodau {name}", "account.follow": "Dilyn", + "account.follow_back": "Dilyn yn ôl", "account.followers": "Dilynwyr", "account.followers.empty": "Does neb yn dilyn y defnyddiwr hwn eto.", "account.followers_counter": "{count, plural, one {Dilynwr: {counter}} other {Dilynwyr: {counter}}}", @@ -51,6 +53,7 @@ "account.mute_notifications_short": "Distewi hysbysiadau", "account.mute_short": "Tewi", "account.muted": "Wedi anwybyddu", + "account.mutual": "Cydgydnabod", "account.no_bio": "Dim disgrifiad wedi'i gynnig.", "account.open_original_page": "Agor y dudalen wreiddiol", "account.posts": "Postiadau", @@ -168,9 +171,9 @@ "confirmations.delete.confirm": "Dileu", "confirmations.delete.message": "Ydych chi'n sicr eich bod eisiau dileu y post hwn?", "confirmations.delete_list.confirm": "Dileu", - "confirmations.delete_list.message": "Ydych chi'n siŵr eich bod eisiau dileu y rhestr hwn am byth?", + "confirmations.delete_list.message": "Ydych chi'n siŵr eich bod eisiau dileu'r rhestr hwn am byth?", "confirmations.discard_edit_media.confirm": "Dileu", - "confirmations.discard_edit_media.message": "Mae gennych newidiadau heb eu cadw i'r disgrifiad cyfryngau neu'r rhagolwg, eu taflu beth bynnag?", + "confirmations.discard_edit_media.message": "Mae gennych newidiadau heb eu cadw i'r disgrifiad cyfryngau neu'r rhagolwg - eu dileu beth bynnag?", "confirmations.domain_block.confirm": "Blocio parth cyfan", "confirmations.domain_block.message": "Ydych chi wir, wir eisiau blocio'r holl {domain}? Fel arfer, mae blocio neu dewi pobl penodol yn broses mwy effeithiol. Fyddwch chi ddim yn gweld cynnwys o'r parth hwnnw mewn ffrydiau cyhoeddus neu yn eich hysbysiadau. Bydd eich dilynwyr o'r parth hwnnw yn cael eu ddileu.", "confirmations.edit.confirm": "Golygu", @@ -481,12 +484,15 @@ "onboarding.follows.title": "Yn boblogaidd ar Mastodon", "onboarding.profile.discoverable": "Gwnewch fy mhroffil yn un y gellir ei ddarganfod", "onboarding.profile.discoverable_hint": "Pan fyddwch yn optio i mewn i ddarganfodadwyedd ar Mastodon, gall eich postiadau ymddangos mewn canlyniadau chwilio a thueddiadau, ac efallai y bydd eich proffil yn cael ei awgrymu i bobl sydd â diddordebau tebyg i chi.", + "onboarding.profile.display_name": "Enw dangos", "onboarding.profile.display_name_hint": "Eich enw llawn neu'ch enw hwyl…", + "onboarding.profile.lead": "Gallwch chi bob amser gwblhau hyn yn ddiweddarach yn y gosodiadau, lle mae hyd yn oed mwy o ddewisiadau cyfaddasu ar gael.", "onboarding.profile.note": "Bywgraffiad", "onboarding.profile.note_hint": "Gallwch @grybwyll pobl eraill neu #hashnodau…", "onboarding.profile.save_and_continue": "Cadw a pharhau", "onboarding.profile.title": "Gosodiad proffil", "onboarding.profile.upload_avatar": "Llwytho llun proffil", + "onboarding.profile.upload_header": "Llwytho pennyn proffil", "onboarding.share.lead": "Cofiwch ddweud wrth bobl sut y gallan nhw ddod o hyd i chi ar Mastodon!", "onboarding.share.message": "Fi yw {username} ar #Mastodon! Dewch i'm dilyn i yn {url}", "onboarding.share.next_steps": "Camau nesaf posib:", @@ -601,6 +607,7 @@ "search.quick_action.status_search": "Postiadau sy'n cyfateb i {x}", "search.search_or_paste": "Chwilio neu gludo URL", "search_popout.full_text_search_disabled_message": "Ddim ar gael ar {domain}.", + "search_popout.full_text_search_logged_out_message": "Dim ond ar gael pan wedi mewngofnodi.", "search_popout.language_code": "Cod iaith ISO", "search_popout.options": "Dewisiadau chwilio", "search_popout.quick_actions": "Gweithredoedd cyflym", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 83a986ba4e15bf..17a0c9d4da2f58 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -17,9 +17,11 @@ "account.badges.group": "Ομάδα", "account.block": "Αποκλεισμός @{name}", "account.block_domain": "Αποκλεισμός τομέα {domain}", + "account.block_short": "Αποκλεισμός", "account.blocked": "Αποκλεισμένος/η", "account.browse_more_on_origin_server": "Δες περισσότερα στο αρχικό προφίλ", "account.cancel_follow_request": "Απόσυρση αιτήματος παρακολούθησης", + "account.copy": "Αντιγραφή συνδέσμου προφίλ", "account.direct": "Ιδιωτική αναφορά @{name}", "account.disable_notifications": "Σταμάτα να με ειδοποιείς όταν δημοσιεύει ο @{name}", "account.domain_blocked": "Ο τομέας αποκλείστηκε", @@ -30,6 +32,7 @@ "account.featured_tags.last_status_never": "Καμία ανάρτηση", "account.featured_tags.title": "προβεβλημένες ετικέτες του/της {name}", "account.follow": "Ακολούθησε", + "account.follow_back": "Ακολούθησε και εσύ", "account.followers": "Ακόλουθοι", "account.followers.empty": "Κανείς δεν ακολουθεί αυτόν τον χρήστη ακόμα.", "account.followers_counter": "{count, plural, one {{counter} Ακόλουθος} other {{counter} Ακόλουθοι}}", @@ -47,7 +50,11 @@ "account.mention": "Ανάφερε @{name}", "account.moved_to": "Ο/Η {name} έχει υποδείξει ότι ο νέος λογαριασμός του/της είναι τώρα:", "account.mute": "Σώπασε τον @{name}", + "account.mute_notifications_short": "Σίγαση ειδοποιήσεων", + "account.mute_short": "Σίγαση", "account.muted": "Αποσιωπημένος/η", + "account.mutual": "Αμοιβαίοι", + "account.no_bio": "Δεν υπάρχει περιγραφή.", "account.open_original_page": "Ανοικτό", "account.posts": "Τουτ", "account.posts_with_replies": "Τουτ και απαντήσεις", @@ -63,6 +70,7 @@ "account.unendorse": "Να μην παρέχεται στο προφίλ", "account.unfollow": "Άρση ακολούθησης", "account.unmute": "Διακοπή σίγασης @{name}", + "account.unmute_notifications_short": "Σίγαση ειδοποιήσεων", "account.unmute_short": "Κατάργηση σίγασης", "account_note.placeholder": "Κάνε κλικ για να προσθέσεις σημείωση", "admin.dashboard.daily_retention": "Ποσοστό χρηστών που παραμένουν μετά την εγγραφή, ανά ημέρα", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 4daa699dcf5a8c..643329ba993215 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -32,6 +32,7 @@ "account.featured_tags.last_status_never": "Neniu afiŝo", "account.featured_tags.title": "Rekomendataj kradvortoj de {name}", "account.follow": "Sekvi", + "account.follow_back": "Sekvu reen", "account.followers": "Sekvantoj", "account.followers.empty": "Ankoraŭ neniu sekvas ĉi tiun uzanton.", "account.followers_counter": "{count, plural, one{{counter} Sekvanto} other {{counter} Sekvantoj}}", @@ -52,6 +53,7 @@ "account.mute_notifications_short": "Silentigu Sciigojn", "account.mute_short": "Silentigu", "account.muted": "Silentigita", + "account.mutual": "Reciproka", "account.no_bio": "Neniu priskribo estas provizita.", "account.open_original_page": "Malfermi la originalan paĝon", "account.posts": "Afiŝoj", @@ -509,6 +511,8 @@ "onboarding.tips.2fa": "Ĉu vi scias? Vi povas sekurigi vian konton per efektivigi dufaktora autentigo en via kontoagordoj.", "onboarding.tips.accounts_from_other_servers": "Ĉu vi scias? Ĉar Mastodon estas sencentra, kelkaj profiloj kiujn vi trovi estas gastigitaj ĉe aliaj serviloj kiuj ne estas via.", "onboarding.tips.migration": "Ĉu vi scias? Se vi sentas ke {domain} ne estas bona servilelekto por vi en la estonteco, vi povas translokiĝi al alia servilo de Mastodon sen malgajni viajn sekvantojn.", + "onboarding.tips.verification": "Ĉu vi sciis? Vi povas kontroli vian konton metante ligilon al via Mastodon-profilo en via propra retejo kaj aldonante la retejon al via profilo. Neniuj kotizoj aŭ dokumentoj necesaj!", + "password_confirmation.exceeds_maxlength": "Pasvorto-konfirmo superas la maksimuman pasvortan longon", "password_confirmation.mismatching": "Pasvorto konfirmo ne kongruas", "picture_in_picture.restore": "Remetu ĝin", "poll.closed": "Finita", @@ -532,6 +536,7 @@ "privacy.unlisted.short": "Nelistigita", "privacy_policy.last_updated": "Laste ĝisdatigita en {date}", "privacy_policy.title": "Politiko de privateco", + "recommended": "Rekomendita", "refresh": "Refreŝigu", "regeneration_indicator.label": "Ŝargado…", "regeneration_indicator.sublabel": "Via abonfluo estas preparata!", @@ -549,6 +554,7 @@ "reply_indicator.cancel": "Nuligi", "report.block": "Bloki", "report.block_explanation": "Vi ne vidos iliajn afiŝojn. Ili ne povos vidi viajn afiŝojn, nek sekvi vin. Ili ne scios, ke vi blokas ilin.", + "report.categories.legal": "Laŭleĝa", "report.categories.other": "Aliaj", "report.categories.spam": "Trudmesaĝo", "report.categories.violation": "Enhavo malobservas unu aŭ plurajn servilajn regulojn", @@ -587,6 +593,7 @@ "report.unfollow": "Malsekvi @{name}", "report.unfollow_explanation": "Vi sekvas ĉi tiun konton. Por ne plu vidi ĝiajn afiŝojn en via hejma templinio, ĉesu sekvi ĝin.", "report_notification.attached_statuses": "{count, plural, one {{count} afiŝo almetita} other {{count} afiŝoj almetitaj}}", + "report_notification.categories.legal": "Laŭleĝa", "report_notification.categories.other": "Alia", "report_notification.categories.spam": "Trudmesaĝo", "report_notification.categories.violation": "Malobservo de la regulo", @@ -599,13 +606,19 @@ "search.quick_action.open_url": "Malfermi URL en Mastodono", "search.quick_action.status_search": "Afiŝoj kiuj kongruas kun {x}", "search.search_or_paste": "Serĉu aŭ algluu URL-on", + "search_popout.full_text_search_disabled_message": "Ne havebla sur {domain}.", + "search_popout.full_text_search_logged_out_message": "Disponebla nur kiam ensalutinte.", + "search_popout.language_code": "ISO-lingva kodo", + "search_popout.options": "Serĉaj opcioj", "search_popout.quick_actions": "Rapidaj agoj", "search_popout.recent": "Lastaj serĉoj", + "search_popout.specific_date": "specifa dato", "search_popout.user": "uzanto", "search_results.accounts": "Profiloj", "search_results.all": "Ĉiuj", "search_results.hashtags": "Kradvortoj", "search_results.nothing_found": "Povis trovi nenion por ĉi tiuj serĉaj terminoj", + "search_results.see_all": "Vidu ĉiujn", "search_results.statuses": "Afiŝoj", "search_results.title": "Serĉ-rezultoj por {q}", "server_banner.about_active_users": "Personoj uzantaj ĉi tiun servilon dum la lastaj 30 tagoj (Aktivaj Uzantoj Monate)", @@ -616,6 +629,8 @@ "server_banner.server_stats": "Statistikoj de la servilo:", "sign_in_banner.create_account": "Krei konton", "sign_in_banner.sign_in": "Saluti", + "sign_in_banner.sso_redirect": "Ensalutu aŭ Registriĝi", + "sign_in_banner.text": "Ensalutu por sekvi profilojn aŭ haŝetikedojn, ŝatatajn, dividi kaj respondi afiŝojn. Vi ankaŭ povas interagi de via konto sur alia servilo.", "status.admin_account": "Malfermi fasadon de moderigado por @{name}", "status.admin_domain": "Malfermu moderigan interfacon por {domain}", "status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco", @@ -632,6 +647,7 @@ "status.edited": "Redaktita {date}", "status.edited_x_times": "Redactita {count, plural, one {{count} fojon} other {{count} fojojn}}", "status.embed": "Enkorpigi", + "status.favourite": "Ŝatata", "status.filter": "Filtri ĉi tiun afiŝon", "status.filtered": "Filtrita", "status.hide": "Kaŝi mesaĝon", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index eb6c0f3e4fa079..7c2e4f0d49894d 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -32,7 +32,7 @@ "account.featured_tags.last_status_never": "Sin mensajes", "account.featured_tags.title": "Etiquetas destacadas de {name}", "account.follow": "Seguir", - "account.follow_back": "Seguir también", + "account.follow_back": "Seguir", "account.followers": "Seguidores", "account.followers.empty": "Todavía nadie sigue a este usuario.", "account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} seguidores}}", @@ -53,7 +53,7 @@ "account.mute_notifications_short": "Silenciar notificaciones", "account.mute_short": "Silenciar", "account.muted": "Silenciado", - "account.mutual": "Mutuo", + "account.mutual": "Seguimiento mutuo", "account.no_bio": "Sin descripción provista.", "account.open_original_page": "Abrir página original", "account.posts": "Mensajes", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index c397334109229d..26657d402e6dc3 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -32,6 +32,7 @@ "account.featured_tags.last_status_never": "Postitusi pole", "account.featured_tags.title": "{name} esiletõstetud sildid", "account.follow": "Jälgi", + "account.follow_back": "Jälgi vastu", "account.followers": "Jälgijad", "account.followers.empty": "Keegi ei jälgi veel seda kasutajat.", "account.followers_counter": "{count, plural, one {{counter} jälgija} other {{counter} jälgijat}}", @@ -52,6 +53,7 @@ "account.mute_notifications_short": "Vaigista teavitused", "account.mute_short": "Vaigista", "account.muted": "Vaigistatud", + "account.mutual": "Ühine", "account.no_bio": "Kirjeldust pole lisatud.", "account.open_original_page": "Ava algne leht", "account.posts": "Postitused", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index a93d0f66176753..9f3201ca786709 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -13,7 +13,7 @@ "about.rules": "قوانین کارساز", "account.account_note_header": "یادداشت", "account.add_or_remove_from_list": "افزودن یا برداشتن از سیاهه‌ها", - "account.badges.bot": "روبات", + "account.badges.bot": "خودکار", "account.badges.group": "گروه", "account.block": "انسداد ‎@{name}", "account.block_domain": "انسداد دامنهٔ {domain}", @@ -32,6 +32,7 @@ "account.featured_tags.last_status_never": "بدون فرسته", "account.featured_tags.title": "برچسب‌های برگزیدهٔ {name}", "account.follow": "پی‌گرفتن", + "account.follow_back": "دنبال کردن متقابل", "account.followers": "پی‌گیرندگان", "account.followers.empty": "هنوز کسی پی‌گیر این کاربر نیست.", "account.followers_counter": "{count, plural, one {{counter} پی‌گیرنده} other {{counter} پی‌گیرنده}}", @@ -52,6 +53,7 @@ "account.mute_notifications_short": "خموشی آگاهی‌ها", "account.mute_short": "خموشی", "account.muted": "خموش", + "account.mutual": "دوطرفه", "account.no_bio": "شرحی فراهم نشده.", "account.open_original_page": "گشودن صفحهٔ اصلی", "account.posts": "فرسته", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index dab7eac1e9cee9..004898651baf55 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -607,7 +607,7 @@ "search.quick_action.status_search": "Julkaisut haulla {x}", "search.search_or_paste": "Hae tai liitä URL-osoite", "search_popout.full_text_search_disabled_message": "Ei saatavilla palvelimella {domain}.", - "search_popout.full_text_search_logged_out_message": "Saatavilla vain sisäänkirjautuneena.", + "search_popout.full_text_search_logged_out_message": "Käytettävissä vain sisäänkirjautuneena.", "search_popout.language_code": "ISO-kielikoodi", "search_popout.options": "Hakuvalinnat", "search_popout.quick_actions": "Pikatoiminnot", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index bfd20a46739346..48bbb6b3077fa9 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -32,6 +32,7 @@ "account.featured_tags.last_status_never": "Sen publicacións", "account.featured_tags.title": "Cancelos destacados de {name}", "account.follow": "Seguir", + "account.follow_back": "Seguir tamén", "account.followers": "Seguidoras", "account.followers.empty": "Aínda ninguén segue esta usuaria.", "account.followers_counter": "{count, plural, one {{counter} Seguidora} other {{counter} Seguidoras}}", @@ -52,6 +53,7 @@ "account.mute_notifications_short": "Silenciar notificacións", "account.mute_short": "Acalar", "account.muted": "Acalada", + "account.mutual": "Mutuo", "account.no_bio": "Sen descrición.", "account.open_original_page": "Abrir páxina orixinal", "account.posts": "Publicacións", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 658e16b8560353..67584572733f22 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -32,7 +32,7 @@ "account.featured_tags.last_status_never": "אין חצרוצים", "account.featured_tags.title": "התגיות המועדפות של {name}", "account.follow": "לעקוב", - "account.follow_back": "החזרת עוקב", + "account.follow_back": "לעקוב בחזרה", "account.followers": "עוקבים", "account.followers.empty": "אף אחד לא עוקב אחר המשתמש הזה עדיין.", "account.followers_counter": "{count, plural,one {עוקב אחד} other {{counter} עוקבים}}", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 654991a0f9dcee..c535f1affc6bf4 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -1,8 +1,15 @@ { "about.blocks": "Moderirani poslužitelji", "about.contact": "Kontakt:", + "about.disclaimer": "Mastodon je besplatan softver otvorenog koda i zaštitni znak tvrtke Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Razlog nije dostupan", + "about.domain_blocks.preamble": "Mastodon vam općenito omogućuje pregled sadržaja i interakciju s korisnicima s bilo kojeg drugog poslužitelja u fediverse. Ovo su iznimke napravljene na ovom poslužitelju.", + "about.domain_blocks.silenced.explanation": "Obično nećete vidjeti profile i sadržaj s ovog poslužitelja, osim ako ga izričito ne potražite ili uključite u njega slijedeći ga.", + "about.domain_blocks.silenced.title": "Ograničen", + "about.domain_blocks.suspended.explanation": "Podatci s ovog poslužitelja neće se obrađivati, pohranjivati ili razmjenjivati, što onemogućuje bilo kakvu interakciju ili komunikaciju s korisnicima s ovog poslužitelja.", "about.domain_blocks.suspended.title": "Suspendiran", + "about.not_available": "Te informacije nisu dostupne na ovom poslužitelju.", + "about.powered_by": "Decentralizirani društveni mediji koje pokreće {mastodon}", "about.rules": "Pravila servera", "account.account_note_header": "Bilješka", "account.add_or_remove_from_list": "Dodaj ili ukloni s liste", @@ -14,6 +21,8 @@ "account.blocked": "Blokirano", "account.browse_more_on_origin_server": "Pogledajte više na izvornom profilu", "account.cancel_follow_request": "Withdraw follow request", + "account.copy": "Kopiraj vezu u profil", + "account.direct": "Privatno spomeni @{name}", "account.disable_notifications": "Nemoj me obavjestiti kada @{name} napravi objavu", "account.domain_blocked": "Domena je blokirana", "account.edit_profile": "Uredi profil", @@ -21,7 +30,9 @@ "account.endorse": "Istakni na profilu", "account.featured_tags.last_status_at": "Zadnji post {date}", "account.featured_tags.last_status_never": "Nema postova", + "account.featured_tags.title": "Istaknuti hashtagovi {name}", "account.follow": "Prati", + "account.follow_back": "Slijedi natrag", "account.followers": "Pratitelji", "account.followers.empty": "Nitko još ne prati korisnika/cu.", "account.followers_counter": "{count, plural, one {{counter} pratitelj} other {{counter} pratitelja}}", @@ -32,6 +43,7 @@ "account.hide_reblogs": "Sakrij boostove od @{name}", "account.in_memoriam": "U sjećanje.", "account.joined_short": "Pridružen", + "account.languages": "Promjeni pretplaćene jezike", "account.link_verified_on": "Vlasništvo ove poveznice provjereno je {date}", "account.locked_info": "Status privatnosti ovog računa postavljen je na zaključano. Vlasnik ručno pregledava tko ih može pratiti.", "account.media": "Medijski sadržaj", @@ -40,11 +52,14 @@ "account.mute_notifications_short": "Utišaj obavijesti", "account.mute_short": "Utišaj", "account.muted": "Utišano", + "account.mutual": "Uzajamno", + "account.no_bio": "Nije dan opis.", "account.open_original_page": "Otvori originalnu stranicu", "account.posts": "Objave", "account.posts_with_replies": "Objave i odgovori", "account.report": "Prijavi @{name}", "account.requested": "Čekanje na potvrdu. Kliknite za poništavanje zahtjeva za praćenje", + "account.requested_follow": "{name} zatražio/la je praćenje", "account.share": "Podijeli profil @{name}", "account.show_reblogs": "Prikaži boostove od @{name}", "account.statuses_counter": "{count, plural, one {{counter} toot} other {{counter} toota}}", @@ -54,11 +69,18 @@ "account.unendorse": "Ne ističi na profilu", "account.unfollow": "Prestani pratiti", "account.unmute": "Poništi utišavanje @{name}", + "account.unmute_notifications_short": "Uključi utišane obavijesti", "account.unmute_short": "Poništi utišavanje", "account_note.placeholder": "Kliknite za dodavanje bilješke", + "admin.dashboard.daily_retention": "Stopa zadržavanja korisnika po danu nakon prijave", + "admin.dashboard.monthly_retention": "Stopa zadržavanja korisnika po mjesecu nakon prijave", "admin.dashboard.retention.average": "Prosječno", "admin.dashboard.retention.cohort": "Mjesec prijave", "admin.dashboard.retention.cohort_size": "Novi korisnici", + "admin.impact_report.instance_accounts": "Profili računa koji bi ovo izbrisali", + "admin.impact_report.instance_followers": "Sljedbenici koje bi izgubili naši korisnici", + "admin.impact_report.instance_follows": "Sljedbenici koje bi izgubili njihovi korisnici", + "admin.impact_report.title": "Sažetak učinka", "alert.rate_limited.message": "Molimo pokušajte nakon {retry_time, time, medium}.", "alert.rate_limited.title": "Ograničenje učestalosti", "alert.unexpected.message": "Dogodila se neočekivana greška.", @@ -68,10 +90,14 @@ "audio.hide": "Sakrij audio", "autosuggest_hashtag.per_week": "{count} tjedno", "boost_modal.combo": "Možete pritisnuti {combo} kako biste preskočili ovo sljedeći put", + "bundle_column_error.copy_stacktrace": "Kopiraj izvješće o pogrešci", + "bundle_column_error.error.body": "Zaraženu stranicu nije moguće prikazati. To bi moglo biti zbog pogreške u našem kodu ili problema s kompatibilnošću preglednika.", "bundle_column_error.error.title": "Oh, ne!", + "bundle_column_error.network.body": "Došlo je do pogreške prilikom pokušaja učitavanja ove stranice. Razlog može biti privremeni problem s internetskom vezom ili ovim poslužiteljem.", "bundle_column_error.network.title": "Greška mreže", "bundle_column_error.retry": "Pokušajte ponovno", "bundle_column_error.return": "Na glavnu", + "bundle_column_error.routing.body": "Traženu stranicu nije moguće pronaći. Jeste li sigurni da je URL u adresnoj traci točan?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Zatvori", "bundle_modal_error.message": "Nešto je pošlo po zlu tijekom učitavanja ove komponente.", @@ -171,6 +197,7 @@ "embed.instructions": "Embed this status on your website by copying the code below.", "embed.preview": "Evo kako će izgledati:", "emoji_button.activity": "Aktivnost", + "emoji_button.clear": "Obriši", "emoji_button.custom": "Prilagođeno", "emoji_button.flags": "Zastave", "emoji_button.food": "Hrana i piće", @@ -211,6 +238,7 @@ "explore.trending_links": "Novosti", "explore.trending_statuses": "Objave", "explore.trending_tags": "Hashtagovi", + "filter_modal.added.context_mismatch_title": "Nepodudaranje konteksta!", "filter_modal.added.review_and_configure_title": "Postavke filtara", "filter_modal.added.title": "Filtar dodan!", "filter_modal.select_filter.prompt_new": "Nova kategorija: {name}", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index 917a0346670c68..35397b8e12f747 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -1,23 +1,84 @@ { "account.add_or_remove_from_list": "Adder o remover ab listas", + "account.badges.group": "Gruppo", + "account.block": "Blocar @{name}", + "account.block_short": "Blocar", + "account.blocked": "Blocate", "account.copy": "Copiar ligamine a profilo", + "account.edit_profile": "Modificar profilo", + "account.go_to_profile": "Vader al profilo", + "account.moved_to": "{name} indicava que lor nove conto ora es:", + "account.share": "Compartir profilo de @{name}", + "account.unblock": "Disblocar @{name}", + "account.unblock_short": "Disblocar", + "account.unendorse": "Non evidentiar sur le profilo", + "account_note.placeholder": "Clicca pro adder un nota", + "admin.dashboard.retention.cohort_size": "Nove usatores", + "audio.hide": "Celar audio", + "autosuggest_hashtag.per_week": "{count} per septimana", "bundle_column_error.network.title": "Error de rete", + "bundle_column_error.retry": "Tentar novemente", + "bundle_column_error.return": "Retornar al initio", "bundle_modal_error.close": "Clauder", + "bundle_modal_error.retry": "Tentar novemente", + "column.blocks": "Usatores blocate", + "column.directory": "Navigar profilos", + "column.favourites": "Favoritos", "column.home": "Initio", + "column.lists": "Listas", + "column.notifications": "Notificationes", + "column_header.hide_settings": "Celar le parametros", + "column_header.show_settings": "Monstrar le parametros", "column_subheading.settings": "Parametros", + "compose.language.change": "Cambiar le lingua", "compose.language.search": "Cercar linguas...", "compose.published.open": "Aperir", + "compose_form.poll.add_option": "Adder un option", + "compose_form.poll.remove_option": "Remover iste option", "confirmation_modal.cancel": "Cancellar", + "confirmations.delete.confirm": "Deler", + "confirmations.delete_list.confirm": "Deler", "confirmations.logout.confirm": "Clauder le session", + "copy_icon_button.copied": "Copiate al area de transferentia", "copypaste.copy_to_clipboard": "Copiar al area de transferentia", + "disabled_account_banner.account_settings": "Parametros de conto", "dismissable_banner.dismiss": "Dimitter", + "emoji_button.activity": "Activitate", + "emoji_button.custom": "Personalisate", + "emoji_button.search_results": "Resultatos de recerca", + "empty_column.account_unavailable": "Profilo non disponibile", + "errors.unexpected_crash.report_issue": "Signalar un defecto", + "explore.search_results": "Resultatos de recerca", + "explore.trending_links": "Novas", + "firehose.all": "Toto", "firehose.local": "Iste servitor", + "firehose.remote": "Altere servitores", "footer.about": "A proposito de", + "footer.directory": "Directorio de profilos", + "footer.privacy_policy": "Politica de confidentialitate", + "footer.source_code": "Vider le codice fonte", + "footer.status": "Stato", "home.pending_critical_update.link": "Vider actualisationes", "keyboard_shortcuts.my_profile": "Aperir tu profilo", "lightbox.close": "Clauder", "lightbox.next": "Sequente", "link_preview.author": "Per {name}", "lists.account.add": "Adder al lista", - "navigation_bar.about": "A proposito de" + "mute_modal.duration": "Duration", + "mute_modal.hide_notifications": "Celar notificationes de iste usator?", + "navigation_bar.about": "A proposito de", + "navigation_bar.advanced_interface": "Aperir in un interfacie web avantiate", + "navigation_bar.blocks": "Usatores blocate", + "navigation_bar.favourites": "Favoritos", + "navigation_bar.lists": "Listas", + "navigation_bar.logout": "Clauder le session", + "navigation_bar.preferences": "Preferentias", + "navigation_bar.security": "Securitate", + "notifications.column_settings.alert": "Notificationes de scriptorio", + "notifications.column_settings.filter_bar.advanced": "Monstrar tote le categorias", + "notifications.column_settings.sound": "Reproducer sono", + "notifications.filter.all": "Toto", + "onboarding.compose.template": "Salute #Mastodon!", + "onboarding.profile.save_and_continue": "Salvar e continuar", + "onboarding.share.title": "Compartir tu profilo" } diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json index a7cf1caab4aa0d..8579fc89c65604 100644 --- a/app/javascript/mastodon/locales/ie.json +++ b/app/javascript/mastodon/locales/ie.json @@ -32,6 +32,7 @@ "account.featured_tags.last_status_never": "Null postas", "account.featured_tags.title": "Recomandat hashtags de {name}", "account.follow": "Sequer", + "account.follow_back": "Sequer reciprocmen", "account.followers": "Sequitores", "account.followers.empty": "Ancor nequi seque ti-ci usator.", "account.followers_counter": "{count, plural, one {{counter} Sequitor} other {{counter} Sequitor}}", @@ -52,6 +53,7 @@ "account.mute_notifications_short": "Silentiar notificationes", "account.mute_short": "Silentiar", "account.muted": "Silentiat", + "account.mutual": "Reciproc", "account.no_bio": "Null descrition providet.", "account.open_original_page": "Aperter li págine original", "account.posts": "Postas", @@ -191,7 +193,9 @@ "conversation.mark_as_read": "Marcar quam leet", "conversation.open": "Vider conversation", "conversation.with": "Con {names}", + "copy_icon_button.copied": "Copiat al Paperiere", "copypaste.copied": "Copiat", + "copypaste.copy_to_clipboard": "Copiar al Paperiere", "directory.federated": "Del conosset fediverse", "directory.local": "De solmen {domain}", "directory.new_arrivals": "Nov arivantes", @@ -246,6 +250,7 @@ "error.unexpected_crash.explanation_addons": "Ti-ci págine ne posset esser monstrat correctmen. Li error es probabilmen causat de un extension al navigator o instrumentes por automatic traduction.", "error.unexpected_crash.next_steps": "Prova recargar li págine. Si to ne auxilia, tu fórsan posse usar Mastodon per un diferent navigator o aplication.", "error.unexpected_crash.next_steps_addons": "Prova desactivisar les e recargar li págine. Si to ne auxilia, tu fórsan posse usar Mastodon per un diferent navigator o aplication.", + "errors.unexpected_crash.copy_stacktrace": "Copiar cumul-tracie a paperiere", "errors.unexpected_crash.report_issue": "Raportar un problema", "explore.search_results": "Resultates de sercha", "explore.suggested_follows": "Gente", @@ -280,6 +285,7 @@ "footer.directory": "Profilarium", "footer.get_app": "Obtener li aplication", "footer.invite": "Invitar gente", + "footer.keyboard_shortcuts": "Rapid-tastes", "footer.privacy_policy": "Politica pri privatie", "footer.source_code": "Vider li fonte-code", "footer.status": "Statu", @@ -342,7 +348,10 @@ "keyboard_shortcuts.favourite": "Favoritisar posta", "keyboard_shortcuts.favourites": "Aperter li liste de favorites", "keyboard_shortcuts.federated": "Aperter li federat témpor-linea", + "keyboard_shortcuts.heading": "Rapid-tastes", "keyboard_shortcuts.home": "Aperter li hemal témpor-linea", + "keyboard_shortcuts.hotkey": "Rapid clave", + "keyboard_shortcuts.legend": "Monstrar ti-ci legende", "keyboard_shortcuts.local": "Aperter li local témpor-linea", "keyboard_shortcuts.mention": "Mentionar li autor", "keyboard_shortcuts.muted": "Aperter li lista de silentiat usatores", @@ -599,6 +608,7 @@ "search.search_or_paste": "Serchar o glutinar URL", "search_popout.full_text_search_disabled_message": "Ne disponibil che {domain}.", "search_popout.full_text_search_logged_out_message": "Solmen disponibil con session initiat.", + "search_popout.language_code": "Code de lingue ISO", "search_popout.options": "Sercha-parametres", "search_popout.quick_actions": "Rapid actiones", "search_popout.recent": "Recent serchas", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 46e83b4dbffab0..fb839503e97e5c 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -32,6 +32,7 @@ "account.featured_tags.last_status_never": "Engar færslur", "account.featured_tags.title": "Myllumerki hjá {name} með aukið vægi", "account.follow": "Fylgjast með", + "account.follow_back": "Fylgjast með til baka", "account.followers": "Fylgjendur", "account.followers.empty": "Ennþá fylgist enginn með þessum notanda.", "account.followers_counter": "{count, plural, one {Fylgjandi: {counter}} other {Fylgjendur: {counter}}}", @@ -52,6 +53,7 @@ "account.mute_notifications_short": "Þagga í tilkynningum", "account.mute_short": "Þagga niður", "account.muted": "Þaggaður", + "account.mutual": "Sameiginlegir", "account.no_bio": "Engri lýsingu útvegað.", "account.open_original_page": "Opna upprunalega síðu", "account.posts": "Færslur", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index e0e047ba14c1cf..97b1991803272c 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -17,6 +17,7 @@ "account.badges.group": "Топ", "account.block": "@{name} дегенді бұғаттау", "account.block_domain": "{domain} доменін бұғаттау", + "account.block_short": "Бұғаттау", "account.blocked": "Бұғатталған", "account.browse_more_on_origin_server": "Бастапқы профильден шолу", "account.cancel_follow_request": "Withdraw follow request", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 5746ab67a5c7ca..264781baa35726 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -240,7 +240,7 @@ "empty_column.follow_requests": "아직 팔로우 요청이 없습니다. 요청을 받았을 때 여기에 나타납니다.", "empty_column.followed_tags": "아직 아무 해시태그도 팔로우하고 있지 않습니다. 해시태그를 팔로우하면, 여기에 표시됩니다.", "empty_column.hashtag": "이 해시태그는 아직 사용되지 않았습니다.", - "empty_column.home": "당신의 홈 타임라인은 비어있습니다! 더 많은 사람을 팔로우하여 채워보세요. {suggestions}", + "empty_column.home": "당신의 홈 타임라인은 비어있습니다! 더 많은 사람을 팔로우하여 채워보세요.", "empty_column.list": "리스트에 아직 아무것도 없습니다. 리스트의 누군가가 게시물을 올리면 여기에 나타납니다.", "empty_column.lists": "아직 리스트가 없습니다. 리스트를 만들면 여기에 나타납니다.", "empty_column.mutes": "아직 아무도 뮤트하지 않았습니다.", @@ -659,7 +659,7 @@ "status.media_hidden": "미디어 숨겨짐", "status.mention": "@{name} 님에게 멘션", "status.more": "자세히", - "status.mute": "@{name} 님을 뮤트하기", + "status.mute": "@{name} 뮤트", "status.mute_conversation": "이 대화를 뮤트", "status.open": "상세 정보 표시", "status.pin": "고정", @@ -674,7 +674,7 @@ "status.replied_to": "{name} 님에게", "status.reply": "답장", "status.replyAll": "글타래에 답장", - "status.report": "{name} 님을 신고하기", + "status.report": "@{name} 신고하기", "status.sensitive_warning": "민감한 내용", "status.share": "공유", "status.show_filter_reason": "그냥 표시하기", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index c54ed2a7e9fa6a..ce6cb564730ef6 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -482,12 +482,14 @@ "onboarding.profile.discoverable": "Faz ke mi profil apareska en bushkedas", "onboarding.profile.display_name": "Nombre amostrado", "onboarding.profile.display_name_hint": "Tu nombre para amostrar.", + "onboarding.profile.lead": "Siempre puedes kompletar esto mas tadre en las preferensyas, ande tambien ay mas opsyones de personalizasyon.", "onboarding.profile.note": "Tu deskripsyon", "onboarding.profile.note_hint": "Puedes @enmentar a otra djente o #etiketas…", "onboarding.profile.save_and_continue": "Guadra i kontinua", "onboarding.profile.title": "Konfigurasyon de profil", "onboarding.profile.upload_avatar": "Karga imaje de profil", "onboarding.profile.upload_header": "Karga kavesera de profil", + "onboarding.share.lead": "Informe a otros komo toparte en Mastodon!", "onboarding.share.message": "Soy {username} en #Mastodon! Segidme en {url}", "onboarding.share.next_steps": "Posivles sigientes pasos:", "onboarding.share.title": "Partaja tu profil", @@ -497,6 +499,7 @@ "onboarding.steps.follow_people.title": "Personaliza tu linya prinsipala", "onboarding.steps.publish_status.title": "Eskrive tu primera publikasyon", "onboarding.steps.setup_profile.title": "Personaliza tu profil", + "onboarding.steps.share_profile.body": "Informe a tus amigos komo toparte en Mastodon", "onboarding.steps.share_profile.title": "Partaja tu profil de Mastodon", "picture_in_picture.restore": "Restora", "poll.closed": "Serrado", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 82f1669b1a2da2..ec0d30363c7f5b 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -2,7 +2,7 @@ "about.blocks": "Prižiūrimi serveriai", "about.contact": "Kontaktuoti:", "about.disclaimer": "Mastodon – nemokama atvirojo kodo programa ir Mastodon gGmbH prekės ženklas.", - "about.domain_blocks.no_reason_available": "Priežastis nežinoma", + "about.domain_blocks.no_reason_available": "Priežastis nepateikta", "about.domain_blocks.preamble": "Mastodon paprastai leidžia peržiūrėti turinį ir bendrauti su naudotojais iš bet kurio kito fediverse esančio serverio. Šios yra išimtys, kurios buvo padarytos šiame konkrečiame serveryje.", "about.domain_blocks.silenced.explanation": "Paprastai nematysi profilių ir turinio iš šio serverio, nebent jį aiškiai ieškosi arba pasirinksi jį sekdamas (-a).", "about.domain_blocks.silenced.title": "Ribota", @@ -35,7 +35,7 @@ "account.follow_back": "Sekti atgal", "account.followers": "Sekėjai", "account.followers.empty": "Šio naudotojo dar niekas neseka.", - "account.followers_counter": "{count, plural, one {{counter} sekėjas (-a)} few {{counter} sekėjai} many {{counter} sekėjo} other {{counter} sekėjų}}", + "account.followers_counter": "{count, plural, one {{counter} sekėjas} few {{counter} sekėjai} many {{counter} sekėjo} other {{counter} sekėjų}}", "account.following": "Seka", "account.following_counter": "{count, plural, one {{counter} Seka} few {{counter} Seka} many {{counter} Seka} other {{counter} Seka}}", "account.follows.empty": "Šis (-i) naudotojas (-a) dar nieko neseka.", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 3ef2f80eaf78f1..e5b1d2b3780e63 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -482,6 +482,7 @@ "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.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.", @@ -534,6 +535,7 @@ "privacy.unlisted.short": "Uoppført", "privacy_policy.last_updated": "Sist oppdatert {date}", "privacy_policy.title": "Personvernsreglar", + "recommended": "Anbefalt", "refresh": "Oppdater", "regeneration_indicator.label": "Lastar…", "regeneration_indicator.sublabel": "Heimetidslina di vert førebudd!", @@ -604,6 +606,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 ved innlogging.", "search_popout.language_code": "ISO-språkkode", "search_popout.options": "Søkjealternativ", "search_popout.quick_actions": "Hurtighandlinger", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 29eaeddff59cef..c0f50283acbdd9 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -32,6 +32,7 @@ "account.featured_tags.last_status_never": "Ingen Innlegg", "account.featured_tags.title": "{name} sine fremhevede emneknagger", "account.follow": "Følg", + "account.follow_back": "Følg tilbake", "account.followers": "Følgere", "account.followers.empty": "Ingen følger denne brukeren ennå.", "account.followers_counter": "{count, plural, one {{counter} følger} other {{counter} følgere}}", @@ -52,6 +53,7 @@ "account.mute_notifications_short": "Demp varsler", "account.mute_short": "Demp", "account.muted": "Dempet", + "account.mutual": "Gjensidig", "account.no_bio": "Ingen beskrivelse oppgitt.", "account.open_original_page": "Gå til originalsiden", "account.posts": "Innlegg", @@ -66,7 +68,7 @@ "account.unblock_domain": "Opphev blokkering av {domain}", "account.unblock_short": "Opphev blokkering", "account.unendorse": "Ikke vis frem på profilen", - "account.unfollow": "Avfølg", + "account.unfollow": "Slutt å følge", "account.unmute": "Opphev demping av @{name}", "account.unmute_notifications_short": "Opphev demping av varsler", "account.unmute_short": "Opphev demping", @@ -480,6 +482,7 @@ "onboarding.follows.empty": "Dessverre kan ingen resultater vises akkurat nå. Du kan prøve å bruke søk eller bla gjennom utforske-siden for å finne folk å følge, eller prøve igjen senere.", "onboarding.follows.lead": "Hjem-skjermen din er den viktigste måten å oppleve Mastodon på. Jo flere du følger, jo mer aktiv og interessant blir det. For å komme i gang, er her noen forslag:", "onboarding.follows.title": "Populært på Mastodon", + "onboarding.profile.discoverable": "Gjør min profil synlig", "onboarding.profile.display_name": "Visningsnavn", "onboarding.profile.display_name_hint": "Ditt fulle navn eller ditt morsomme navn…", "onboarding.profile.lead": "Du kan alltid fullføre dette senere i innstillingene, der enda flere tilpasningsalternativer er tilgjengelige.", @@ -532,6 +535,7 @@ "privacy.unlisted.short": "Uoppført", "privacy_policy.last_updated": "Sist oppdatert {date}", "privacy_policy.title": "Personvernregler", + "recommended": "Anbefalt", "refresh": "Oppfrisk", "regeneration_indicator.label": "Laster…", "regeneration_indicator.sublabel": "Dine tidslinje blir gjort klar!", @@ -602,6 +606,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": "Ikke tilgjengelig på {domain}.", + "search_popout.full_text_search_logged_out_message": "Bare tilgjengelig ved innlogging.", "search_popout.language_code": "ISO språkkode", "search_popout.options": "Alternativer for søk", "search_popout.quick_actions": "Hurtighandlinger", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 37a8328c98edc3..a8ff90cc003b1b 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -32,6 +32,7 @@ "account.featured_tags.last_status_never": "Нет постов", "account.featured_tags.title": "Избранные хэштеги {name}", "account.follow": "Подписаться", + "account.follow_back": "Подписаться в ответ", "account.followers": "Подписчики", "account.followers.empty": "На этого пользователя пока никто не подписан.", "account.followers_counter": "{count, plural, one {{counter} подписчик} many {{counter} подписчиков} other {{counter} подписчика}}", @@ -52,6 +53,7 @@ "account.mute_notifications_short": "Отключить уведомления", "account.mute_short": "Немой", "account.muted": "Игнорируется", + "account.mutual": "Взаимно", "account.no_bio": "Описание не предоставлено.", "account.open_original_page": "Открыть исходную страницу", "account.posts": "Посты", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 02425d73e0fa17..3e41a2035a0046 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -21,7 +21,7 @@ "account.blocked": "Blokovaný/á", "account.browse_more_on_origin_server": "Prehľadávaj viac na pôvodnom profile", "account.cancel_follow_request": "Zruš žiadosť o sledovanie", - "account.copy": "Skopíruj odkaz pre profil", + "account.copy": "Skopíruj odkaz na profil", "account.direct": "Spomeň @{name} súkromne", "account.disable_notifications": "Prestaň mi oznamovať, keď má @{name} príspevky", "account.domain_blocked": "Doména skrytá", @@ -32,6 +32,7 @@ "account.featured_tags.last_status_never": "Žiadne príspevky", "account.featured_tags.title": "Odporúčané hashtagy používateľa {name}", "account.follow": "Sleduj", + "account.follow_back": "Nasleduj späť", "account.followers": "Sledovatelia", "account.followers.empty": "Tohto používateľa ešte nikto nenasleduje.", "account.followers_counter": "{count, plural, one {{counter} Sledujúci} few {{counter} Sledujúci} many {{counter} Sledujúcich} other {{counter} Sledujúcich}}", @@ -52,6 +53,7 @@ "account.mute_notifications_short": "Stíš oznámenia", "account.mute_short": "Stíš", "account.muted": "Stíšený", + "account.mutual": "Spoločné", "account.no_bio": "Nie je uvedený žiadny popis.", "account.open_original_page": "Otvor pôvodnú stránku", "account.posts": "Príspevky", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 59ad0ae84ea81c..77c262e9571293 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -32,6 +32,7 @@ "account.featured_tags.last_status_never": "Nema objava", "account.featured_tags.title": "Istaknute heš oznake korisnika {name}", "account.follow": "Prati", + "account.follow_back": "Uzvrati praćenje", "account.followers": "Pratioci", "account.followers.empty": "Još uvek niko ne prati ovog korisnika.", "account.followers_counter": "{count, plural, one {{counter} pratilac} few {{counter} pratioca} other {{counter} pratilaca}}", @@ -52,6 +53,7 @@ "account.mute_notifications_short": "Isključi obaveštenja", "account.mute_short": "Isključi", "account.muted": "Ignorisan", + "account.mutual": "Zajednički", "account.no_bio": "Nema opisa.", "account.open_original_page": "Otvori originalnu stranicu", "account.posts": "Objave", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 79786b8d4428df..85e7567bf42166 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -32,6 +32,7 @@ "account.featured_tags.last_status_never": "Нема објава", "account.featured_tags.title": "Истакнуте хеш ознаке корисника {name}", "account.follow": "Прати", + "account.follow_back": "Узврати праћење", "account.followers": "Пратиоци", "account.followers.empty": "Још увек нико не прати овог корисника.", "account.followers_counter": "{count, plural, one {{counter} пратилац} few {{counter} пратиоца} other {{counter} пратилаца}}", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 6b2332d5b8a308..5290e13ff4cdfa 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -10,6 +10,7 @@ "account.badges.group": "குழு", "account.block": "@{name} -ஐத் தடு", "account.block_domain": "{domain} யில் இருந்து வரும் எல்லாவற்றையும் மறை", + "account.block_short": "தடு", "account.blocked": "முடக்கப்பட்டது", "account.browse_more_on_origin_server": "மேலும் உலாவ சுயவிவரத்திற்குச் செல்க", "account.cancel_follow_request": "Withdraw follow request", @@ -18,20 +19,26 @@ "account.edit_profile": "சுயவிவரத்தை மாற்று", "account.enable_notifications": "@{name} பதிவிட்டல் எனக்குத் தெரியப்படுத்தவும்", "account.endorse": "சுயவிவரத்தில் வெளிப்படுத்து", + "account.featured_tags.last_status_never": "இடுகைகள் இல்லை", "account.follow": "பின்தொடர்", + "account.follow_back": "பின்தொடரு", "account.followers": "பின்தொடர்பவர்கள்", "account.followers.empty": "இதுவரை யாரும் இந்த பயனரைப் பின்தொடரவில்லை.", "account.followers_counter": "{count, plural, one {{counter} வாசகர்} other {{counter} வாசகர்கள்}}", "account.following": "பின்தொடரும்", "account.following_counter": "{count, plural,one {{counter} சந்தா} other {{counter} சந்தாக்கள்}}", "account.follows.empty": "இந்த பயனர் இதுவரை யாரையும் பின்தொடரவில்லை.", + "account.go_to_profile": "சுயவிவரத்திற்குச் செல்லவும்", "account.hide_reblogs": "இருந்து ஊக்கியாக மறை @{name}", "account.link_verified_on": "இந்த இணைப்பை உரிமையாளர் சரிபார்க்கப்பட்டது {date}", "account.locked_info": "இந்தக் கணக்கு தனியுரிமை நிலை பூட்டப்பட்டுள்ளது. அவர்களைப் பின்தொடர்பவர் யார் என்பதை உரிமையாளர் கைமுறையாக மதிப்பாய்வு செய்கிறார்.", "account.media": "ஊடகங்கள்", "account.mention": "குறிப்பிடு @{name}", "account.mute": "ஊமையான @{name}", + "account.mute_notifications_short": "அறிவிப்புகளை ஒலியடக்கு", + "account.mute_short": "அமைதியாக்கு", "account.muted": "முடக்கியது", + "account.no_bio": "விளக்கம் எதுவும் வழங்கப்படவில்லை.", "account.posts": "டூட்டுகள்", "account.posts_with_replies": "Toots மற்றும் பதில்கள்", "account.report": "@{name} -ஐப் புகாரளி", @@ -61,15 +68,29 @@ "audio.hide": "ஆடியோவை மறை", "autosuggest_hashtag.per_week": "ஒவ்வொரு வாரம் {count}", "boost_modal.combo": "நீங்கள் இதை அடுத்தமுறை தவிர்க்க {combo} வை அழுத்தவும்", + "bundle_column_error.error.title": "அடடே!", + "bundle_column_error.network.body": "இந்தப் பக்கத்தைத் திறக்கும்பொழுது ஒரு பிழை ஏற்பட்டுவிட்டது. இது உங்கள் இணைய தொடர்பில் அல்லது இப்பத்தின் வழங்க்கியில் ஏற்பட்டுள்ள ஒரு தற்காலிக பிரச்சணையாக இருக்கலாம்.", + "bundle_column_error.network.title": "பிணையப் பிழை", "bundle_column_error.retry": "மீண்டும் முயற்சிக்கவும்", + "bundle_column_error.return": "முகப்பிற்கு செல்லவும்", + "bundle_column_error.routing.body": "கேட்கப்பட்ட பக்கத்தைக் காணவில்லை. நீங்கள் உள்ளிட்ட முகவரி சரியனதா?", + "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "மூடுக", "bundle_modal_error.message": "இக்கூற்றை ஏற்றம் செய்யும்பொழுது ஏதோ தவறு ஏற்பட்டுள்ளது.", "bundle_modal_error.retry": "மீண்டும் முயற்சி செய்", + "closed_registrations.other_server_instructions": "மேச்டடான் இரு பரவலாக்கப்பட்ட மென்பொருள் என்பதால், நீங்கள் வேரு ஒரு வழங்கியில் கணக்கை உருவாக்கியிருந்தாலும் இந்த வழங்கியில் பயன்படுத்தலாம்.", + "closed_registrations_modal.description": "{domain} இல் இப்பொழுது கணக்குகள் உருவாக்க முடியாது. நீங்கள் மேச்டடான் பயன்படுத்த, குறிப்பாக {domain} முகவரியில் கணக்கைத் துவங்க வேண்டும் என்ற அவசியமில்லை என்பதை மனதில் வைத்துக் கொள்ளவும்.", + "closed_registrations_modal.find_another_server": "வேறொரு வழங்கியைக் கண்டுபிடி", + "closed_registrations_modal.preamble": "மேச்டடான் ஒரு பரவலாக்கப்பட்ட மென்பொருள். ஆதனால் நீங்கள் எங்குக் கணக்கை உருவாக்கினாலும் இந்த வழங்கியில் உள்ள யாருடன் வேண்டும் என்றாலும் உரவாடலாம். நீங்களே கூட ஒரு வழங்கியை நிறுவலாம்!", + "closed_registrations_modal.title": "மேச்டடான் கணக்கு துவங்கப்படுகிறது", + "column.about": "பற்றி", "column.blocks": "தடுக்கப்பட்ட பயனர்கள்", "column.bookmarks": "அடையாளக்குறிகள்", "column.community": "சுய நிகழ்வு காலவரிசை", + "column.direct": "தனிப்பட்ட குறிப்புகள்", "column.directory": "சுயவிவரங்களை உலாவு", "column.domain_blocks": "மறைந்திருக்கும் திரளங்கள்", + "column.favourites": "பிடித்தவை", "column.follow_requests": "பின்தொடர அனுமதிகள்", "column.home": "முகப்பு", "column.lists": "பட்டியல்கள்", @@ -90,6 +111,9 @@ "community.column_settings.remote_only": "தொலைவிலிருந்து மட்டுமே", "compose.language.change": "மொழியை மாற்று", "compose.language.search": "தேடல் மொழிகள்...", + "compose.published.body": "பதிவிடப்பட்டது.", + "compose.published.open": "திற", + "compose.saved.body": "பதிவு சேமிக்கப்பட்டது.", "compose_form.direct_message_warning_learn_more": "மேலும் அறிய", "compose_form.encryption_warning": "Mastodonல் உள்ள பதிவுகள் முறையாக என்க்ரிப்ட்(encrypt) செய்யபடவில்லை. அதனால் முக்கிய தகவல்களை இங்கே பகிர வேண்டாம்.", "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.", @@ -180,6 +204,10 @@ "error.unexpected_crash.next_steps": "பக்கத்தைப் புதுப்பித்துப் பார்க்கவும். அப்படியும் வேலை செய்யவில்லை எனில், மாஸ்டடானை வேறு ஒரு உலாவியின் மூலமோ, அல்லது பொருத்தமான செயலியின் மூலமோ பயன்படுத்திப் பார்க்கவும்.", "errors.unexpected_crash.copy_stacktrace": "Stacktrace-ஐ clipboard-ல் நகலெடு", "errors.unexpected_crash.report_issue": "புகாரளி", + "explore.title": "உலாவு", + "explore.trending_links": "செய்திகள்", + "explore.trending_statuses": "பதிவுகள்", + "explore.trending_tags": "ஹேஷ்டேக்குகள்", "follow_request.authorize": "அனுமதியளி", "follow_request.reject": "நிராகரி", "follow_requests.unlocked_explanation": "உங்கள் கணக்கு பூட்டப்படவில்லை என்றாலும், இந்தக் கணக்குகளிலிருந்து உங்களைப் பின்தொடர விரும்பும் கோரிக்கைகளை நீங்கள் பரீசீலிப்பது நலம் என்று {domain} ஊழியர் எண்ணுகிறார்.", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index d14e37517d5734..b108e581a4aef5 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -53,6 +53,7 @@ "account.mute_notifications_short": "ซ่อนการแจ้งเตือน", "account.mute_short": "ซ่อน", "account.muted": "ซ่อนอยู่", + "account.mutual": "คนที่มีร่วมกัน", "account.no_bio": "ไม่ได้ให้คำอธิบาย", "account.open_original_page": "เปิดหน้าดั้งเดิม", "account.posts": "โพสต์", @@ -203,7 +204,7 @@ "disabled_account_banner.text": "มีการปิดใช้งานบัญชีของคุณ {disabledAccount} ในปัจจุบัน", "dismissable_banner.community_timeline": "นี่คือโพสต์สาธารณะล่าสุดจากผู้คนที่บัญชีได้รับการโฮสต์โดย {domain}", "dismissable_banner.dismiss": "ปิด", - "dismissable_banner.explore_links": "นี่คือเรื่องข่าวที่ได้รับการแบ่งปันมากที่สุดในเว็บสังคมวันนี้ เรื่องข่าวที่ใหม่กว่าที่ได้รับการโพสต์โดยผู้คนต่าง ๆ มากกว่าจะได้รับการจัดอันดับที่สูงกว่า", + "dismissable_banner.explore_links": "นี่เป็นเรื่องข่าวที่ได้รับการแชร์มากที่สุดในเว็บสังคมวันนี้ เรื่องข่าวที่ใหม่กว่าที่มีคนโพสต์มากกว่าจะได้รับการจัดอันดับที่สูงกว่า", "dismissable_banner.explore_statuses": "นี่คือโพสต์จากทั่วทั้งเว็บสังคมที่กำลังได้รับความสนใจวันนี้ โพสต์ที่ใหม่กว่าที่มีการดันและรายการโปรดมากกว่าจะได้รับการจัดอันดับที่สูงกว่า", "dismissable_banner.explore_tags": "นี่คือแฮชแท็กที่กำลังได้รับความสนใจในเว็บสังคมวันนี้ แฮชแท็กที่มีการใช้โดยผู้คนต่าง ๆ มากกว่าจะได้รับการจัดอันดับที่สูงกว่า", "dismissable_banner.public_timeline": "นี่คือโพสต์สาธารณะล่าสุดจากผู้คนในเว็บสังคมที่ผู้คนใน {domain} ติดตาม", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 92eacaad144ef5..5ec0da599b28a9 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -32,6 +32,7 @@ "account.featured_tags.last_status_never": "Немає дописів", "account.featured_tags.title": "{name} виділяє хештеґи", "account.follow": "Підписатися", + "account.follow_back": "Підписатися взаємно", "account.followers": "Підписники", "account.followers.empty": "Ніхто ще не підписаний на цього користувача.", "account.followers_counter": "{count, plural, one {{counter} підписник} few {{counter} підписники} many {{counter} підписників} other {{counter} підписники}}", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 721c7cd4ad10a9..03c6502651a7e5 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -32,6 +32,7 @@ "account.featured_tags.last_status_never": "Chưa có tút", "account.featured_tags.title": "Hashtag của {name}", "account.follow": "Theo dõi", + "account.follow_back": "Theo dõi lại", "account.followers": "Người theo dõi", "account.followers.empty": "Chưa có người theo dõi nào.", "account.followers_counter": "{count, plural, one {{counter} Người theo dõi} other {{counter} Người theo dõi}}", @@ -52,6 +53,7 @@ "account.mute_notifications_short": "Ẩn thông báo", "account.mute_short": "Ẩn", "account.muted": "Đã ẩn", + "account.mutual": "Đang theo dõi nhau", "account.no_bio": "Chưa có miêu tả.", "account.open_original_page": "Mở trang gốc", "account.posts": "Tút", diff --git a/app/javascript/mastodon/reducers/accounts_map.js b/app/javascript/mastodon/reducers/accounts_map.js index d5ecad7dbfaddf..9053dcc9c0528b 100644 --- a/app/javascript/mastodon/reducers/accounts_map.js +++ b/app/javascript/mastodon/reducers/accounts_map.js @@ -2,8 +2,13 @@ import { Map as ImmutableMap } from 'immutable'; import { ACCOUNT_LOOKUP_FAIL } from '../actions/accounts'; import { importAccounts } from '../actions/accounts_typed'; +import { domain } from '../initial_state'; -export const normalizeForLookup = str => str.toLowerCase(); +export const normalizeForLookup = str => { + str = str.toLowerCase(); + const trailingIndex = str.indexOf(`@${domain.toLowerCase()}`); + return (trailingIndex > 0) ? str.slice(0, trailingIndex) : str; +}; const initialState = ImmutableMap(); diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss index 3777fccbfb83ca..3a27c974ad8978 100644 --- a/app/javascript/styles/mastodon-light/diff.scss +++ b/app/javascript/styles/mastodon-light/diff.scss @@ -300,10 +300,15 @@ html { } &__item { + color: $darker-text-color; + + &--dangerous { + color: $error-value-color; + } + a, button { background: $white; - color: $darker-text-color; } } } @@ -315,9 +320,9 @@ html { .privacy-dropdown__option.active .privacy-dropdown__option__content strong, .privacy-dropdown__option:hover .privacy-dropdown__option__content, .privacy-dropdown__option:hover .privacy-dropdown__option__content strong, -.dropdown-menu__item a:active, -.dropdown-menu__item a:focus, -.dropdown-menu__item a:hover, +.dropdown-menu__item:not(.dropdown-menu__item--dangerous) a:active, +.dropdown-menu__item:not(.dropdown-menu__item--dangerous) a:focus, +.dropdown-menu__item:not(.dropdown-menu__item--dangerous) a:hover, .actions-modal ul li:not(:empty) a.active, .actions-modal ul li:not(:empty) a.active button, .actions-modal ul li:not(:empty) a:active, diff --git a/app/lib/request.rb b/app/lib/request.rb index 5f128af734c1e9..8d4120868d4feb 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -77,6 +77,7 @@ def initialize(verb, url, **options) @url = Addressable::URI.parse(url).normalize @http_client = options.delete(:http_client) @allow_local = options.delete(:allow_local) + @full_path = options.delete(:with_query_string) @options = options.merge(socket_class: use_proxy? || @allow_local ? ProxySocket : Socket) @options = @options.merge(timeout_class: PerOperationWithDeadline, timeout_options: TIMEOUT) @options = @options.merge(proxy_url) if use_proxy? @@ -146,7 +147,7 @@ def http_client private def set_common_headers! - @headers[REQUEST_TARGET] = "#{@verb} #{@url.path}" + @headers[REQUEST_TARGET] = request_target @headers['User-Agent'] = Mastodon::Version.user_agent @headers['Host'] = @url.host @headers['Date'] = Time.now.utc.httpdate @@ -157,6 +158,14 @@ def set_digest! @headers['Digest'] = "SHA-256=#{Digest::SHA256.base64digest(@options[:body])}" end + def request_target + if @url.query.nil? || !@full_path + "#{@verb} #{@url.path}" + else + "#{@verb} #{@url.path}?#{@url.query}" + end + end + def signature algorithm = 'rsa-sha256' signature = Base64.strict_encode64(@keypair.sign(OpenSSL::Digest.new('SHA256'), signed_string)) diff --git a/app/models/announcement.rb b/app/models/announcement.rb index 2cd7c1d5ed9813..83a8d3682c3b24 100644 --- a/app/models/announcement.rb +++ b/app/models/announcement.rb @@ -28,8 +28,8 @@ class Announcement < ApplicationRecord has_many :announcement_reactions, dependent: :destroy validates :text, presence: true - validates :starts_at, presence: true, if: -> { ends_at.present? } - validates :ends_at, presence: true, if: -> { starts_at.present? } + validates :starts_at, presence: true, if: :ends_at? + validates :ends_at, presence: true, if: :starts_at? before_validation :set_published, on: :create @@ -46,7 +46,7 @@ def unpublish! end def time_range? - starts_at.present? && ends_at.present? + starts_at? && ends_at? end def mentions diff --git a/app/models/concerns/remotable.rb b/app/models/concerns/remotable.rb index 6118e204a1e90a..8382c9159968d8 100644 --- a/app/models/concerns/remotable.rb +++ b/app/models/concerns/remotable.rb @@ -46,7 +46,7 @@ def remotable_attachment(attachment_name, limit, suppress_errors: true, download public_send(:"download_#{attachment_name}!", url) if download_on_assign end - alias_method(:"reset_#{attachment_name}!", "download_#{attachment_name}!") + alias_method(:"reset_#{attachment_name}!", :"download_#{attachment_name}!") end end end diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb index 5a53e73ba88793..9c936fed392b27 100644 --- a/app/models/custom_filter.rb +++ b/app/models/custom_filter.rb @@ -17,8 +17,23 @@ class CustomFilter < ApplicationRecord self.ignored_columns += %w(whole_word irreversible) - alias_attribute :title, :phrase - alias_attribute :filter_action, :action + # NOTE: We previously used `alias_attribute` but this does not play nicely + # with cache + def title + phrase + end + + def title=(value) + self.phrase = value + end + + def filter_action + action + end + + def filter_action=(value) + self.action = value + end VALID_CONTEXTS = %w( home diff --git a/app/models/custom_filter_keyword.rb b/app/models/custom_filter_keyword.rb index 3158b3b79a04f5..1812a430818f20 100644 --- a/app/models/custom_filter_keyword.rb +++ b/app/models/custom_filter_keyword.rb @@ -17,7 +17,15 @@ class CustomFilterKeyword < ApplicationRecord validates :keyword, presence: true - alias_attribute :phrase, :keyword + # NOTE: We previously used `alias_attribute` but this does not play nicely + # with cache + def phrase + keyword + end + + def phrase=(value) + self.keyword = value + end before_save :prepare_cache_invalidation! before_destroy :prepare_cache_invalidation! diff --git a/config/initializers/1_hosts.rb b/config/initializers/1_hosts.rb index 6ff0845c4665cf..5c59e28bd12764 100644 --- a/config/initializers/1_hosts.rb +++ b/config/initializers/1_hosts.rb @@ -23,7 +23,7 @@ if Rails.env.production? "ws#{https ? 's' : ''}://#{web_host}" else - "ws://#{ENV['REMOTE_DEV'] == 'true' ? host.split(':').first : 'localhost'}:4000" + "ws://#{host.split(':').first}:4000" end end diff --git a/config/locales/activerecord.ie.yml b/config/locales/activerecord.ie.yml index 0c63299e04e97a..588105ae96f36f 100644 --- a/config/locales/activerecord.ie.yml +++ b/config/locales/activerecord.ie.yml @@ -6,4 +6,52 @@ ie: expires_at: Cludent date options: Optiones user: + agreement: Acorde de servicie + email: E-posta + locale: Local password: Passa-parol + user/account: + username: Nómine del usator + user/invite_request: + text: Rason + errors: + models: + account: + attributes: + username: + reserved: es reservat + admin/webhook: + attributes: + url: + invalid: ne es un valid URL + doorkeeper/application: + attributes: + website: + invalid: ne es un valid URL + import: + attributes: + data: + malformed: es malformat + status: + attributes: + reblog: + taken: de posta ja existe + user: + attributes: + email: + unreachable: sembla ne exister + role_id: + elevated: ne posse esser plu alt quam tui actual rol + user_role: + attributes: + permissions_as_keys: + dangerous: include permissones ne secur por li rol de base + elevated: ne posse includer permissiones ne possedet de tui rol actual + own_role: ne posse esser changeat con tui actual rol + position: + elevated: ne posse esser plu alt quam tui actual rol + own_role: ne posse esser changeat con tui actual rol + webhook: + attributes: + events: + invalid_permissions: ne posse includer evenimentes por queles tu ne have li yures diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 7f60e934221c1e..9dd533b2ad48ed 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -659,6 +659,7 @@ cy: created_at: Adroddwyd delete_and_resolve: Dileu postiadau forwarded: Wedi'i anfon ymlaen + forwarded_replies_explanation: Mae'r adroddiad hwn gan ddefnyddiwr o weinydd arall ac am gynnwys pell. Mae wedi ei anfon ymlaen atoch chi oherwydd bod y cynnwys sy'n cael ei adrodd yn ateb i un o'ch defnyddwyr. forwarded_to: Wedi'i anfon ymlaen i %{domain} mark_as_resolved: Nodi fel wedi'i ddatrys mark_as_sensitive: Marcio fel sensitif diff --git a/config/locales/devise.ie.yml b/config/locales/devise.ie.yml index 0cf0fbe1fe2316..e4f2e6fb190f17 100644 --- a/config/locales/devise.ie.yml +++ b/config/locales/devise.ie.yml @@ -1,6 +1,8 @@ --- ie: devise: + confirmations: + confirmed: Tui e-mail adresse ha esset confirmat successosimen. failure: already_authenticated: Tu ha ja intrat. inactive: Tui conto ancor ne ha esset activat. @@ -13,13 +15,26 @@ ie: unauthenticated: Tu deve intrar o registrar te ante continuar. unconfirmed: Tu deve confirmar tui e-posta ante continuar. mailer: + confirmation_instructions: + action: Verificar e-posta + action_with_app: Confirma e retorna a%{app} + explanation: Tu ha creat un conto sur %{host} con ti-ci e-posta, quel tu posse activar per un sol clicc. Si it ne esset tu qui creat li conto, ples ignorar ti-ci missage. + explanation_when_pending: Tu ha demandat un invitation a %{host} con ti-ci e-posta. Pos confirmation de tui adresse, noi va inspecter tui aplication. Tu posse inloggar por changear detallies o deleter li conto, ma li pluparte del functiones va restar ínusabil til quande tui conto es aprobat. Tui data va esser deletet si tui conto es rejectet, e in ti casu tu ne besona far quelcunc cose. Si it ne esset tu qui creat li conto, ples ignorar ti-ci missage. + title: Verificar e-posta email_changed: + explanation: 'Li e-mail adresse de tui es changeat a:' extra: Si tu ne changeat tui email-adresse, it es probabil que alqui ha ganiat accesse a tui conto. Ples changear tui passa-parol strax o contacter li administrator del servitor si tu ne posse intrar tui conto. + subject: 'Mastodon: E-posta changeat' + title: Nov adresse de e-posta password_change: explanation: Li passa-parol de tui conto ha esset changeat. extra: Si tu ne changeat tui passa-parol, it es probabil que alqui ha ganiat accesse a tui conto. Ples changear tui passa-parol strax o contacter li administrator del servitor si tu ne posse intrar tui conto. subject: 'Mastodon: Passa-parol changeat' title: Passa-parol changeat + reconfirmation_instructions: + explanation: Confirmar li nov adresse por changeat tui e-posta. + subject: 'Mastodon: E-posta de confirmation por %{instance}' + title: Verificar e-posta reset_password_instructions: action: Changear passa-parol explanation: Tu demandat un nov passa-parol por tui conto. @@ -28,6 +43,18 @@ ie: title: Reiniciar passa-parol two_factor_disabled: explanation: 2-factor autentication por tui conto ha esset desactivisat. Aperter session nu es possibil solmen per email-adresse e passa-parol. + title: 2FA desvalidat + two_factor_enabled: + title: 2FA permisset + unlock_instructions: + subject: 'Mastodon: Desserral instructiones' + webauthn_credential: + added: + subject: 'Mastodon: Nov clave de securitá' + title: Un nov clave de securitá ha esset adjuntet + webauthn_disabled: + subject: 'Mastodon: Autentication con claves de securitá desactivisat' + title: Claves de securitá desactivisat omniauth_callbacks: failure: Ne posset autenticar te de %{kind} pro "%{reason}". passwords: @@ -38,3 +65,15 @@ ie: updated_not_active: Tui passa-parol ha esset changeat successosimen. registrations: signed_up: Benevenit! Tu ha successat registrar te. + updated: Tui conto ha esset actualisat successosimen. + sessions: + already_signed_out: Exeat successosimen. + signed_in: Intrat successosimen. + signed_out: Exeat successosimen. + errors: + messages: + already_confirmed: esset ja confirmat, ples prova intrar + confirmation_period_expired: besona esser confirmat intra %{period}, ples demanda un nov + expired: ha expirat, ples demandar un nov + not_found: ne trovat + not_locked: ne esset serrat diff --git a/config/locales/devise.ko.yml b/config/locales/devise.ko.yml index 3ab7c11a5cbae8..65f660f1050317 100644 --- a/config/locales/devise.ko.yml +++ b/config/locales/devise.ko.yml @@ -2,7 +2,7 @@ ko: devise: confirmations: - confirmed: 이메일이 성공적으로 승인 되었습니다. + confirmed: 이메일이 성공적으로 확인 되었습니다. send_instructions: 몇 분 이내로 확인 이메일이 발송 됩니다. 이메일을 받지 못 한 경우, 스팸 폴더를 확인하세요. send_paranoid_instructions: 이메일 주소가 저희 데이터베이스에 있는 경우, 몇 분 내에 이메일 주소를 확인하는 방법에 대한 안내가 포함된 이메일을 받을 수 있습니다. 이 이메일을 받지 못했다면 스팸 폴더를 확인해 주세요. failure: diff --git a/config/locales/doorkeeper.ie.yml b/config/locales/doorkeeper.ie.yml index 83c9cc564f8f39..86a5de7b37ecca 100644 --- a/config/locales/doorkeeper.ie.yml +++ b/config/locales/doorkeeper.ie.yml @@ -1,11 +1,162 @@ --- ie: + activerecord: + attributes: + doorkeeper/application: + name: Nómine de aplication + redirect_uri: URI de redirection + website: Situ web de aplication + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: ne posse contener un fragment. + invalid_uri: deve esser un URI valid. + relative_uri: deve esser un URI absolut. + secured_uri: deve esser un URI de HTTPS/SSL. doorkeeper: + applications: + buttons: + authorize: Autorisar + cancel: Anullar + destroy: Destructer + edit: Redacter + submit: Submisser + confirmations: + destroy: Es tu cert? + edit: + title: Modificar aplication + help: + redirect_uri: Usar un linea per URI + index: + application: Aplication + delete: Deleter + empty: Tu have null aplicationes. + name: Nómine + new: Nov aplication + show: Monstrar + title: Tui aplicationes + new: + title: Nov aplication + show: + actions: Actiones + application_id: Clave de client + secret: Secrete de client + title: 'Aplication: %{name}' + authorizations: + buttons: + authorize: Autorisar + deny: Negar + error: + title: Alquo ha errat + new: + title: Autorisation besonat + authorized_applications: + buttons: + revoke: Revocar + confirmations: + revoke: Es tu cert? + index: + authorized_at: Autorisat ye %{date} + last_used_at: Ultimmen usat ye %{date} + never_used: Nequande usat + scopes: Permissiones + superapp: Intern + title: Tui autorisat aplicationes + errors: + messages: + invalid_client: Fallit autentification pro ínconosset client, manca de client-autentification, o ne subtenet metode de autentification. + invalid_redirect_uri: Li uri de redirection includet ne es valid. + invalid_request: + unknown: Li petition manca un postulat parametre, include un ne apoyat parametre-valore, o es altrimen mal format. + invalid_token: + expired: Li access-clave expirat + revoked: Li access-clave esset revocat + unknown: Li accesse-clave es ínvalid + unsupported_grant_type: Li tip de autorisation concedet ne es subtenet per li autorisant servitor. + unsupported_response_type: Li autorisant servitor ne subtene ti-ci tip de response. + flash: + applications: + create: + notice: Aplication creat. + destroy: + notice: Aplication deletet. + update: + notice: Aplication actualisat. + authorized_applications: + destroy: + notice: Aplication revocat. grouped_scopes: + access: + read: Accesse solmen por leer + read/write: Accesse por leer e scrir + write: Accesse solmen por scrir title: + accounts: Contos + admin/accounts: Administration de contos + admin/all: Omni functiones administrativ + admin/reports: Administration de raportes + all: Plen accesse a tui conto Mastodon + blocks: Bloccas + bookmarks: Marcatores + conversations: Conversationes + favourites: Favorites + filters: Filtres follow: Seques, silentias e bloccas + follows: Seque + lists: Listes + media: Medie-atachamentes mutes: Silentias + notifications: Notificationes + push: Notificationes push + reports: Raportes + search: Serchar + statuses: Postas + layouts: + admin: + nav: + applications: Aplicationes scopes: + admin:read: leer li tot data sur li servitor + admin:read:accounts: leer sensitiv information de omni contos + admin:read:domain_allows: leer sensitiv information pri omni permisses de dominia + admin:read:domain_blocks: leer sensitiv information pri omni bloccas de dominia + admin:read:email_domain_blocks: leer sensitiv information pri omni bloccas de dominia basat sur e-posta + admin:read:ip_blocks: leer sensitiv information pri omni bloccas de IP + admin:read:reports: leer sensitiv information pri omni raportes e raportat contos + admin:write: modificar li tot data sur li servitor + admin:write:accounts: far moderatori actiones sur contos + admin:write:canonical_email_blocks: far moderatori actiones sur canonic bloccas de e-posta + admin:write:domain_allows: far actiones de moderation sur permisses de dominia + admin:write:domain_blocks: far actiones de moderation sur bloccas de dominia + admin:write:email_domain_blocks: far actiones de moderation sur bloccas de dominia basat sur e-posta + admin:write:ip_blocks: fa moderatori actiones sur bloccas de IP + admin:write:reports: far moderatori actiones sur raportes + follow: modifica li relationes del conto + read: lee omni datas de tui conto + read:accounts: vide li informationes pri li conto + read:blocks: vider tui bloccas + read:bookmarks: vider tui marcatores + read:favourites: vider tui favorites + read:filters: vider tui filtres + read:follows: vider tui sequitores + read:lists: vider tui listes read:mutes: vider tui silentias + read:notifications: vider tui notificationes + read:reports: vider tui raportes + read:search: serchar in tui nómine + read:statuses: vider omni postas + write: modificar li tot data de tui conto + write:accounts: modifica tui profile + write:blocks: bloccar contos e dominias write:conversations: silentiar e deleter conversationes + write:favourites: favorit postas + write:filters: crea filtres + write:follows: sequer homes + write:lists: crear listes + write:media: adcargar files de medie write:mutes: silentiar persones e conversationes + write:notifications: aclarar tui notificationes + write:reports: raportar altri persones + write:statuses: publicar postas diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 9ae59539439c10..8a0033ee6aaaf4 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -1260,11 +1260,20 @@ eo: overwrite_long: Anstataŭigi la nunajn registrojn per la novaj preface: Vi povas importi datumojn, kiujn vi eksportis el alia servilo, kiel liston de homoj, kiujn vi sekvas aŭ blokas. success: Viaj datumoj estis sukcese alŝutitaj kaj estos traktitaj kiel planite + titles: + following: Importado de sekvaj kontoj + lists: Importi listojn + muting: Importado de silentigitaj kontoj + type: Importi tipon + type_groups: + constructive: Sekvoj & Legosignoj + destructive: Blokas kaj silentigas types: blocking: Listo de blokitoj bookmarks: Legosignoj domain_blocking: Listo de blokitaj domajnoj following: Listo de sekvatoj + lists: Listoj muting: Listo de silentigitoj upload: Alŝuti invites: @@ -1279,6 +1288,7 @@ eo: '86400': 1 tago expires_in_prompt: Neniam generate: Krei + invalid: Ĉi tiu invito ne validas invited_by: 'Vi estis invitita de:' max_uses: one: 1 uzo @@ -1305,6 +1315,18 @@ eo: title: Aŭtentiga historio mail_subscriptions: unsubscribe: + action: Jes, malabonu + complete: Malabonita + confirmation_html: Ĉu vi certas, ke vi volas malaboni por ricevi %{type} por Mastodon ĉe %{domain} al via retpoŝto ĉe %{email}? Vi ĉiam povas reaboni de viaj retpoŝtaj sciigaj agordoj. + emails: + notification_emails: + favourite: plej ŝatataj sciigaj retpoŝtoj + follow: sekvu sciigajn retmesaĝojn + follow_request: sekvu petajn retpoŝtojn + mention: menciu sciigajn retmesaĝojn + reblog: plifortigi sciigajn retpoŝtojn + resubscribe_html: Se vi malabonis erare, vi povas reaboni de viaj retpoŝtaj sciigaj agordoj. + success_html: Vi ne plu ricevos %{type} por Mastodon sur %{domain} al via retpoŝto ĉe %{email}. title: Malaboni media_attachments: validations: @@ -1385,6 +1407,7 @@ eo: update: subject: "%{name} redaktis afiŝon" notifications: + administration_emails: Admin retpoŝtaj sciigoj email_events: Eventoj por retpoŝtaj sciigoj email_events_hint: 'Elekti la eventojn pri kioj vi volas ricevi sciigojn:' other_settings: Aliaj agordoj de sciigoj @@ -1421,6 +1444,7 @@ eo: expired: La enketo jam finiĝis invalid_choice: La elektita voĉdono ne ekzistas over_character_limit: ne povas esti po pli longa ol %{max} signoj + self_vote: Vi ne povas voĉdoni en viaj propraj balotenketoj too_few_options: devas enhavi pli da unu propono too_many_options: ne povas enhavi pli da %{max} proponoj preferences: @@ -1428,7 +1452,14 @@ eo: posting_defaults: Afiŝaj defaŭltoj public_timelines: Publikaj templinioj privacy: + hint_html: "Agordu kiel vi volas ke via profilo kaj viaj afiŝoj estu trovitaj. Diversaj funkcioj en Mastodon povas helpi vin atingi pli larĝan publikon kiam ĝi estas ebligita. Prenu momenton por revizii ĉi tiujn agordojn por certigi, ke ili taŭgas por via uzokazo." privacy: Privateco + privacy_hint_html: Kontrolu kiom vi volas malkaŝi por la avantaĝo de aliaj. Homoj malkovras interesajn profilojn kaj bonegajn apojn foliumante la sekvaĵojn de aliaj homoj kaj vidante de kiuj aplikaĵoj ili afiŝas, sed vi eble preferas konservi ĝin kaŝita. + reach: Atingo + reach_hint_html: Kontrolu ĉu vi volas esti malkovrita kaj sekvita de novaj homoj. Ĉu vi volas ke viaj afiŝoj aperu sur la ekrano Esplori? Ĉu vi volas ke aliaj homoj vidu vin en siaj sekvaj rekomendoj? Ĉu vi volas akcepti ĉiujn novajn sekvantojn aŭtomate, aŭ havi granulan kontrolon pri ĉiu? + search: Serĉu + search_hint_html: Kontrolu kiel vi volas esti trovita. Ĉu vi volas, ke homoj trovu vin laŭ tio, pri kio vi publike afiŝis? Ĉu vi volas, ke homoj ekster Mastodonto trovu vian profilon dum serĉado en la reto? Bonvolu memori, ke totala ekskludo de ĉiuj serĉiloj ne povas esti garantiita por publika informo. + title: Privateco kaj atingo privacy_policy: title: Privateca politiko reactions: @@ -1470,6 +1501,9 @@ eo: over_daily_limit: Vi transpasis la limigon al %{limit} samtage planitaj mesaĝoj over_total_limit: Vi transpasis la limigon al %{limit} planitaj mesaĝoj too_soon: La planita dato devas esti en la estonteco + self_destruct: + lead_html: Bedaŭrinde, %{domain} konstante fermiĝas. Se vi havis konton tie, vi ne povos daŭrigi uzi ĝin, sed vi ankoraŭ povas peti sekurkopion de viaj datumoj. + title: Ĉi tiu servilo fermiĝas sessions: activity: Lasta ago browser: Retumilo @@ -1638,6 +1672,10 @@ eo: default: "%Y.%b.%d, %H:%M" month: "%b %Y" time: "%H:%M" + translation: + errors: + quota_exceeded: La tutservila uzkvoto por la tradukservo estas superita. + too_many_requests: Lastatempe estis tro multaj petoj al la tradukservo. two_factor_authentication: add: Aldoni disable: Malebligi 2FA-n @@ -1717,6 +1755,7 @@ eo: title: Bonvenon, %{name}! users: follow_limit_reached: Vi ne povas sekvi pli ol %{limit} homo(j) + go_to_sso_account_settings: Iru al la agordoj de la konto de via identeca provizanto invalid_otp_token: Nevalida kodo de dufaktora aŭtentigo otp_lost_help_html: Se vi perdas aliron al ambaŭ, vi povas kontakti %{email} seamless_external_login: Vi estas ensalutinta per ekstera servo, do pasvortaj kaj retadresaj agordoj ne estas disponeblaj. diff --git a/config/locales/fi.yml b/config/locales/fi.yml index d48653edcc90b4..93545b6a1b4621 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1559,7 +1559,7 @@ fi: last_active: Viimeksi aktiivinen most_recent: Viimeisimmät moved: Muuttaneet - mutual: Molemmat + mutual: Seuraatte toisianne primary: Ensisijaiset relationship: Suhde remove_selected_domains: Poista kaikki seuraajat valituista verkkotunnuksista diff --git a/config/locales/ie.yml b/config/locales/ie.yml index 6013923e3fec3e..87aa1c41cc1a5e 100644 --- a/config/locales/ie.yml +++ b/config/locales/ie.yml @@ -72,6 +72,7 @@ ie: enabled_msg: Successosimen desgelat li conto de %{username} followers: Sequitores follows: Seque + header: Cap-image inbox_url: Inbuxe URL invite_request_text: Rason por adhesion invited_by: Invitat de @@ -111,6 +112,7 @@ ie: promote: Promoer protocol: Protocol public: Public + push_subscription_expires: Subscrition a PuSH expira redownload: Recargar li profil redownloaded_msg: Successosimen recargat li profil de %{username} del original fonte reject: Rejecter @@ -118,6 +120,7 @@ ie: remote_suspension_irreversible: Li data de ti-ci conto ha esset deletet ínreversibilmen. remote_suspension_reversible_hint_html: Li conto ha esset suspendet che su servitor, e li data va esser completmen removet ye %{date}. Til tande, li lontan servitor posse restaurar ti conto sin quelcunc mal efectes. Si tu vole remover omni data del conto ínmediatmen, tu posse far it in infra. remove_avatar: Remover li avatar + remove_header: Remover cap-image removed_avatar_msg: Successosimen removet li avatar-image de %{username} removed_header_msg: Successosimen removet li cap-image de %{username} resend_confirmation: @@ -287,6 +290,7 @@ ie: deleted_account: deletet conto filter_by_action: Filtrar per action filter_by_user: Filtrar per usator + title: Jurnale de audit announcements: destroyed_msg: Proclamation deletet successosimen! edit: @@ -330,6 +334,7 @@ ie: no_emoji_selected: Null emoji esset changeat pro que null esset selectet not_permitted: Tu ne es permisset far ti action overwrite: Remplazzar + shortcode: Curt-code shortcode_hint: Adminim 2 carácteres, solmen lítteres, ciffres e sublineas title: Customisat emoji uncategorized: Íncategorisat @@ -461,6 +466,10 @@ ie: unsuppress: Restaurar seque-recomandation instances: availability: + failure_threshold_reached: Límite de falliment atinget ye %{date}. + failures_recorded: + one: Fallit prova por %{count} die. + other: Fallit provas por %{count} dies. no_failures_recorded: Null fallimentes registrat. title: Disponibilitá warning: Li ultim prova conexer a ti servitor ha esset ínsuccessosi @@ -471,6 +480,8 @@ ie: confirm_purge: Vole tu vermen permanentmen deleter data de ti dominia? content_policies: comment: Internal nota + description_html: Tu posse definar planes de contenete a aplicar sur omni contos de ti-ci dominia e omni su subdominias. + limited_federation_mode_description_html: Tu posse selecter ca permisser federation a ti-ci dominia. policies: reject_media: Rejecter medie reject_reports: Rejecter raportes @@ -485,6 +496,8 @@ ie: instance_followers_measure: nor sequitores ta instance_follows_measure: lor sequitores ci instance_languages_dimension: Max grand lingues + instance_media_attachments_measure: salvat medie-atachamentes + instance_reports_measure: raportes pri les instance_statuses_measure: salvat postas delivery: all: Omni @@ -565,6 +578,7 @@ ie: notes: one: "%{count} nota" other: "%{count} notas" + action_log: Jurnale de audit action_taken_by: Action fat de actions: delete_description_html: Li raportat postas va esser deletet e un admoniment va esser registrat por auxiliar te escalar si hay futuri infractiones del sam conto. @@ -670,30 +684,42 @@ ie: manage_announcements: Tractar proclamationes manage_announcements_description: Permisse usatores tractar proclamationes sur li servitor manage_appeals: Gerer Apelles + manage_appeals_description: Permisse que usatores inspecte apelles contra actiones de moderatores manage_blocks: Gerer Bloccas manage_blocks_description: Permisse que usatores blocca provisores de e-posta e IP-adresses manage_custom_emojis: Gerer Customisat Emojis manage_custom_emojis_description: Permisse que usatores gere customisat emojis sur li servitor manage_federation: Gerer Federation - manage_federation_description: Permisse que usatores sive blocca sive permisse federation con altri domenes, e controla liverabilitá + manage_federation_description: Permisse que usatores sive blocca sive permisse federation con altri dominias, e controla liverabilitá manage_invites: Gerer Invitationes + manage_invites_description: Permisse que usatores naviga e deactiva ligamentes de invitation manage_reports: Gerer Raportes + manage_reports_description: Permisse que usatores inspecte raportes e fa actiones de moderation contra les manage_roles: Gerer Roles + manage_roles_description: Permisse que usatores gere e assigna roles sub li lores manage_rules: Gerer Regules manage_rules_description: Permisse que usatores changea regules del servitor manage_settings: Gerer Parametres manage_settings_description: Permisse que usatores changea parametres del situ manage_taxonomies: Gerer Taxonomies + manage_taxonomies_description: Permisse que usatores inspecte contenete de tendentie e actualisar parametres de hashtags manage_user_access: Gerer Usator-Accesse manage_user_access_description: Permisse usatores desactivisar li 2-factor autentication de altri usatores, changear lor email-adresses, e reiniciar lor passa-paroles manage_users: Gerer usatores - manage_webhooks: Gerer Web-crocs + manage_users_description: Permisse que usatores vide detallies de altri usatores e fa actiones de moderation contra les + manage_webhooks: Gerer Webcrocs + manage_webhooks_description: Permisse que usatores configura webcrocs por evenimentes administrativ + view_audit_log: Vider li Jurnale de Audit view_audit_log_description: Permisse que usatores vide li historie de administrativ actiones sur li servitor + view_dashboard: Vider Panel de Control + view_dashboard_description: Permisse que usatores usa li panel de control e varie metricas view_devops: DevOps + view_devops_description: Permise que usatores usa paneles de control de Sidekiq e pgHero title: Roles rules: add_new: Adjunter un regule delete: Deleter + description_html: Benque li pluparte di que ili ha leet e acorda con li termines de servicie, presc nequi perlee les til quande un problema eveni. Tu posse facilitar li perletura del regules de tui servitor per dar les sur un liste de plat balle-punctus. Li índividual regules posse esser curt e simplic, ma mem un liste de micri punctus posse esser tro exigent por li letor si it es tro grand. edit: Redacter regul empty: Ancor null regules de servitor ha esset definit. title: Regules del servitor @@ -704,6 +730,13 @@ ie: appearance: preamble: Customisar li interfacie web de Mastodon. title: Aspecte + branding: + title: Marca + captcha_enabled: + desc_html: To ci usa extern scrites de hCaptcha, quel posse esser ínquietant pro rasones de securitá e privatie. In plu, it posse far li processu de registration mult plu desfacil (particularimen por tis con deshabilitás). Pro ti rasones, ples considerar alternativ mesuras, tales quam registration per aprobation o invitation. + title: Exige que nov usatores solue un CAPTCHA por confirmar lor conto + content_retention: + title: Retention de contenete discovery: follow_recommendations: Seque-recomandationes preamble: Exposir interessant contenete es importantissim por incorporar nov usatores qui fórsan conosse nequi che Mastodon. Decider qualmen diferent utensiles de decovrition functiona che vor servitor. @@ -740,6 +773,9 @@ ie: documentation_link: Aprender plu title: Actualisationes disponibil type: Specie + types: + major: Majori lansament + minor: Minori lansament version: Version statuses: account: Autor @@ -781,16 +817,39 @@ ie: system_checks: database_schema_check: message_html: Hay pendent migrationes de database. Ples far les por far cert que li aplication functiona quam expectat + elasticsearch_health_red: + message_html: Li cluster Elasticsearch es ínsalubri (statu rubi), functiones por serchar ne disponibil + elasticsearch_health_yellow: + message_html: Li cluster Elasticsearch es ínsalubri (statu yelb); investigar li rason vell esser un bon idé elasticsearch_preset: action: Vider li documentation + message_html: Tui cluster Elasticsearch have plu quam un node, ma Mastodon ne es configurat por usar les. elasticsearch_preset_single_node: action: Vider li documentation + message_html: Tui cluster Elasticsearch have solmen un node, ples configurar ES_PRESET quam single_node_cluster. + elasticsearch_running_check: + message_html: Ne posset conexer a Elasticsearch. Ples confirmar que it ha esset executet, o desactivar serchada de plen textu + elasticsearch_version_check: + message_html: 'Version de Elasticsearch íncompatibil: %{value}' + version_comparison: Elasticsearch %{running_version} executet ma %{required_version} postulat rules_check: action: Gerer regules de servitor + message_html: Tu ancor ne ha definit quelcunc regules de servitor. software_version_critical_check: + action: Vider actualisationes disponibil message_html: Un critical actualisation por Mastodon es disposibil, ples actualisar tam rapidmen possibil. software_version_patch_check: action: Vider actualisationes disponibil + message_html: Un actualisation por Mastodon quel fixa problemas es disponibil. + upload_check_privacy_error: + action: Vider ci por plu information + message_html: "Vor web-servitor es misconfigurat. Li privatie de vor usatores es in risca." + upload_check_privacy_error_object_storage: + action: Cliccar ci por plu information + message_html: "Vor inmagasinage de objectes es misconfigurat. Li privatie de vor usatores es in risca." + tags: + review: Statu de revision + updated_msg: Parametres pri hashtags actualisat successosimen title: Administration trends: allow: Permisser @@ -805,9 +864,13 @@ ie: no_link_selected: Null ligamentes esset changeat pro que null esset selectet publishers: no_publisher_selected: Null editores esset changeat pro que necun esset selectet + shared_by_over_week: + one: Partit de un person durant li ultim semane + other: Partit de %{count} persones durant li ultim semane title: Ligamentes in tendentie usage_comparison: Partit %{today} vezes hodie, in comparation a %{yesterday} yer not_allowed_to_trend: Ne permisset esser in tendentie + only_allowed: Solmen li permissetes pending_review: Sub inspection preview_card_providers: allowed: Ligamentes de ti-ci editor posse esser in tendentie @@ -859,10 +922,50 @@ ie: empty: Vu ancor ha definit null prefigurationes de avise. title: Modificar prefigurationes de avise webhooks: + add_new: Adjunter punctu terminal + delete: Deleter + disable: Desactivisar + disabled: Desactivisat + edit: Redacter punctu terminal + empty: Tu ancor ne have quelcunc configurat punctus terminal por webcrocs. + enable: Activisar enabled: Activ + enabled_events: + one: 1 eveniment activisat + other: "%{count} evenimentes activisat" events: Evenimentes + new: Nov webcroc + rotate_secret: Rotar secrete + secret: Secrete de signation status: Statu + title: Webcrocs + webhook: Webcroc admin_mailer: + new_appeal: + actions: + delete_statuses: deleter su postas + disable: gelar su conto + mark_statuses_as_sensitive: marcar su postas quam sensitiv + none: un admoniment + sensitive: marcar su conto quam sensitiv + silence: limitar su conto + suspend: suspender su conto + body: "%{target} apella un moderatori decision fat de %{action_taken_by} ye %{date}, quel esset %{type}. Ilu scrit:" + next_steps: Tu posse aprobar li apelle por desfar li decision moderatori, o ignorar it. + subject: "%{username} apella un moderatori decision che %{instance}" + new_critical_software_updates: + body: Nov critic versiones de Mastodon ha esset lansat, vu fórsan vole actualisar tam tost quam es possibil! + subject: Critic actualisationes por Mastodon es disponibil por %{instance}! + new_pending_account: + body: Li detallies del nov conto es in-infra. Vu posse aprobar o rejecter ti aplication. + subject: Nov conto por tractation che %{instance} (%{username}) + new_report: + body: "%{reporter} ha raportet %{target}" + body_remote: Alqui de %{domain} ha raportet %{target} + subject: Nov raporte por %{instance} (#%{id}) + new_software_updates: + body: Nov versiones de Mastodon ha esset lansat, vu fórsan vole actualisar! + subject: Nov versiones Mastodon es disponibil por %{instance}! new_trends: new_trending_links: title: Populari ligamentes @@ -1282,12 +1385,50 @@ ie: media_attachments: validations: images_and_video: On ne posse atachar un video a un posta quel ja contene images + too_many: Ne posse atachar plu quam 4 files migrations: acct: Translocat a + cancel: Anullar redirection + cancelled_msg: Anullat redirection con successe. + errors: + already_moved: es li sam conto a equel tu ha ja translocat + missing_also_known_as: ne es un alias de ti-ci conto + move_to_self: ne posse esser li conto actual + not_found: ne posset esser trovat + followers_count: Sequitores al témpor de translocation + incoming_migrations: Translocant de un conto diferent + on_cooldown: Tu ha recentmen migrat tui conto. Ti function va esser disponibil denov pos %{count} dies. + past_migrations: Passat migrationes + proceed_with_move: Translocar sequitores + redirected_msg: Tui conto nu have un redirection a %{acct}. + redirecting_to: Tui conto redirecte a %{acct}. set_redirect: Configurar un redirection + warning: + backreference_required: Li nov conto deve in prim esser configurat por retroreferentiar ti-ci conto + before: 'Ante proceder, ples leer ti notas cuidosimen:' + other_data: Necun altri data va esser translocat automaticmen + moderation: + title: Moderation move_handler: + carry_blocks_over_text: Ti usator translocat se de %{acct}, quel tu hat bloccat. carry_mutes_over_text: Ti-ci usator movet se de %{acct}, quel tu hat silentiat. + copy_account_note_text: 'Vi tui notas pri ti usator qui translocat se de %{acct}:' + navigation: + toggle_menu: Changear menú notification_mailer: + admin: + report: + subject: "%{name} inviat un raporte" + sign_up: + subject: "%{name} adheret" + favourite: + body: 'Tui posta esset favoritisat de %{name}:' + subject: "%{name} favoritisat tui posta" + title: Nov favoritisation + follow: + body: "%{name} nu seque te!" + subject: "%{name} nu seque te" + title: Nov sequitor follow_request: action: Tractar petitiones de sequer body: "%{name} ha petit sequer te" @@ -1295,6 +1436,8 @@ ie: title: Nov petition de sequer mention: action: Responder + body: 'Tu esset mentionat de %{name} in:' + subject: Tu esset mentionat de %{name} title: Nov mention poll: subject: Un balotation de %{name} ha finit @@ -1314,6 +1457,7 @@ ie: number: human: decimal_units: + format: "%n%u" units: billion: B million: M @@ -1346,6 +1490,7 @@ ie: too_many_options: ne posse contener plu quam %{max} optiones preferences: other: Altri + posting_defaults: Predefinitiones por postar public_timelines: Public témpor-lineas privacy: hint_html: "Customisa qualmen tu vole que tui profil e tui postas posse esser trovat. Mastodon have un varietá de manieres por auxiliar te atinger un auditorie plu grand quande activisat. Prende un moment por reviser ti parametres por far cert que ili concorda tui casu de usation." @@ -1383,6 +1528,11 @@ ie: remove_selected_followers: Remover selectet sequitores remove_selected_follows: Dessequer selectet usatores status: Statu del conto + remote_follow: + missing_resource: Ne posset trovar li besonat URL de redirection por tui conto + reports: + errors: + invalid_rules: ne refere valid regules rss: content_warning: 'Avise pri li contenete:' descriptions: @@ -1476,9 +1626,16 @@ ie: one: "%{count} video" other: "%{count} videos" boosted_from_html: Boostat de %{acct_link} + content_warning: 'Avise de contenete: %{warning}' default_language: Sam quam li lingue del interfacie + disallowed_hashtags: + one: 'contenet un ínpermisset hashtag: %{tags}' + other: 'contenet li ínpermisset hashtags: %{tags}' edited_at_html: Modificat ye %{date} + errors: + in_reply_not_found: Li posta a quel tu prova responder ne sembla exister. open_in_web: Aperter in web + over_character_limit: límite de carácteres de %{max} transpassat pin_errors: direct: On ne posse pinglar postas queles es visibil solmen a mentionat usatores limit: Tu ja ha pinglat li maxim númere de postas @@ -1495,8 +1652,11 @@ ie: show_more: Monstrar plu show_newer: Monstrar plu nov show_older: Monstrar plu old + show_thread: Monstrar fil title: "%{name}: «%{quote}»" visibilities: + direct: Direct + private: Solmen por sequitores private_long: Monstrar solmen a sequitores public: Public public_long: Omnes posse vider @@ -1508,17 +1668,37 @@ ie: exceptions: Exceptiones explanation: Deletion de postas es un operation expensiv, e pro to es efectuat lentmen quande li servitor ne es ocupat. Pro to, on posse deleter tui postas un cert témpor pos atinger un cert etá. ignore_favs: Ignorar favorites + ignore_reblogs: Ignorar boosts interaction_exceptions: Exceptiones basat sur interactiones + interaction_exceptions_explanation: Nota que it ne es garantit que un posta va esser deletet si su númere de favoritisationes o boosts descresce sub li sill pos que it ha esset súper it. keep_direct: Retener missages direct keep_direct_hint: Ne delete quelcunc de tui direct missages + keep_media: Conservar postas con medie-atachamentes + keep_media_hint: Ne delete quelcunc de tui postas quel have medie-atachamentes keep_pinned: Conservar pinglat postas keep_pinned_hint: Delete null de tui pinglat postas keep_polls: Conservar balotationes keep_polls_hint: Delete null de tui balotationes + keep_self_bookmark: Conservar postas queles tu ha marcat + keep_self_bookmark_hint: Ne delete tui propri postas si tu ha marcat les keep_self_fav: Retener postas favorit de te + keep_self_fav_hint: Ne delete tui propri postas si tu ha favoritisat les min_age: '1209600': 2 semanes + '15778476': 6 mensus + '2629746': 1 mensu '31556952': 1 annu + '5259492': 2 mensus + '604800': 1 semane + '63113904': 2 annus + '7889238': 3 mensus + min_age_label: Sill de etá + min_favs: Conservar postas favoritisat adminim + min_favs_hint: Ne delete quelcunc de tui postas quel ha recivet adminim ti-ci númere de favoritisationes. Lassar vacui por deleter postas sin egard a su númere de favoritisationes + min_reblogs: Conservar postas boostat adminim + min_reblogs_hint: Ne delete quelcunc de tui postas quel ha recivet adminim ti-ci númere de boosts. Lassar vacui por deleter postas sin egard a su númere de boosts + stream_entries: + sensitive_content: Sensitiv contenete strikes: errors: too_late: It es tro tard por apellar ti admoniment @@ -1595,22 +1775,37 @@ ie: mark_statuses_as_sensitive: Tui postas che %{acct} ha esset marcat quam sensitiv none: Admoniment por %{acct} sensitive: Tui postas che %{acct} ve esser marcat quam sensitiv pos nu + silence: Tui conto %{acct} ha esset limitat + suspend: Tui conto %{acct} ha esset suspendet title: delete_statuses: Postas efaciat + disable: Conto gelat + mark_statuses_as_sensitive: Postas marcat quam sensitiv + none: Admoniment sensitive: Conto marcat quam sensitiv silence: Conto limitat suspend: Conto suspendet welcome: edit_profile_action: Configuration de profil + edit_profile_step: Tu posse personalisar tui profil por cargar un profil-image, changear tui monstrat nómine e plu. Tu posse optar tractar nov sequitores ante que ili es permisset sequer te. explanation: Vi quelc suggestiones por que tu mey comensar final_action: Comensar postar + final_step: 'Comensa a postar! Mem sin sequitores, tui public postas posse esser videt de altres, per exemple in li local témpor-linea o in hashtags. Tu fórsan vole introducter te per li hashtag #introductions.' + full_handle: Tui plen usator-nómine + full_handle_hint: Ti-ci es ti quel tu vell dir a tui amics por que ili mey inviar missages a te o sequer te de un altri servitor. subject: Benevenit a Mastodon title: Benevenit, %{name}! users: + follow_limit_reached: Tu ne posse sequer plu quam %{limit} persones + go_to_sso_account_settings: Ear al parametres de conto de tui provisor de identification + invalid_otp_token: Ínvalid 2-factor code + otp_lost_help_html: Si tu perdit accesse a ambis, tu posse contacter %{email} seamless_external_login: Tu ha intrat per un servicie external, dunc parametres pri tui passa-parol e email-adresse ne es disponibil. + signed_in_as: 'Session apertet quam:' verification: extra_instructions_html: 'Nota: Li ligament in tui websitu posse esser ínvisibil. Li important parte es rel="me" quel prevente fals self-identification in websitus con contenete generat de usatores. Tu posse mem usar un link element in li cap-section del págine vice a, ma li HTML code deve esser accessibil sin executer JavaScript.' here_is_how: Vide qualmen + instructions_html: Copiar e collar li code ci infra in li HTML de tui web-situ. Poy adjunter li adresse de tui web-situ ad-in un del aditional campes sur tui profil ex li section "Modificar profil" e salvar li changes. verification: Verification verified_links: Tui verificat ligamentes webauthn_credentials: @@ -1620,3 +1815,9 @@ ie: success: Tui clave de securitá esset adjuntet con successe. delete: Deleter delete_confirmation: Vole tu vermen deleter ti-ci clave de securitá? + destroy: + success: Tui clave de securitá esset successosimen deletet. + invalid_credential: Ínvalid clave de securitá + not_enabled: Tu ancor ne ha possibilisat WebAuthn + not_supported: Ti-ci navigator ne subtene claves de securitá + registered_on: Adheret ye %{date} diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 471b830a3e70b1..5c541d9f999423 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -333,6 +333,7 @@ lad: not_permitted: No tienes permiso para realizar esta aksyon overwrite: Sobreskrive shortcode: Kodiche kurto + shortcode_hint: Al menos 2 karakteres, solo karakteres alfanumerikos i sulinyados title: Emojis personalizados uncategorized: No kategorizado unlist: No lista @@ -525,6 +526,7 @@ lad: total_reported: Raportos sovre eyos total_storage: Aneksos de multimedia totals_time_period_hint_html: Los totales amostrados a kontinuasyon inkluyen datos para todo el tiempo. + unknown_instance: Por agora no ay dingun rejistro en este domeno en este sirvidor. invites: deactivate_all: Dezaktiva todos filter: @@ -705,27 +707,41 @@ lad: manage_users: Administra utilizadores manage_users_description: Permete a los utilizadores ver los peratim de otros utilizadores i realizar aksyones de moderasyon kontra eyos manage_webhooks: Administrar webhooks + view_audit_log: Mostra defter de revisyon + view_audit_log_description: Permete a los utilizadores ver una estoria de aksyones administrativas en el sirvidor view_dashboard: Ve pano + view_dashboard_description: Permete a los utilizadores akseder al panel de kontrolo i varias metrikas view_devops: DevOps + view_devops_description: Permete a los utilizadores akseder a los paneles de kontrolo Sidekiq i pgHero title: Rolos rules: add_new: Adjusta regla delete: Efasa + description_html: Aunke la majorita afirma aver meldado i estar de akodro kon los terminos de servisyo, la djente normalmente no los melda asta dempues de ke surja algun problema. Az ke sea mas kolay ver las normas de tu sirvidor de un vistazo estipulándolas en una lista de puntos. Aprova ke kada norma sea corta i kolay, ama sin estar divididas en munchos puntos. edit: Edita regla + empty: Dinguna regla del sirvidor tiene sido definida. title: Reglas del sirvidor settings: about: manage_rules: Administra reglas del sirvidor + preamble: Mete aki enformasyon detalyada sovre komo el sirvidor es operado, moderado i finansyado. + rules_hint: Ay una area dedikada para las reglas a las ke se aspera ke tus utilizadores sigan. title: Sovre esto appearance: preamble: Personaliza la enterfaz web de Mastodon. title: Aparensya branding: + preamble: La marka de tu sirvidor lo desferensia de otros sirvidores de la red. Esta enformasyon puede amostrarse por una varieta de entornos, komo en la enterfaz web de Mastodon, en aplikasyones nativas, en previsualizasiones de atadijos en otros sitios internetikos i en aplikasyones de mesajes, etc. Por esta razon, es mijor mantener esta enformasyon klara, breve i konsiza. title: Marka content_retention: + preamble: Kontrola komo el kontenido jenerado por el utilizador se magazina en Mastodon. title: Retensyon de kontenido + default_noindex: + desc_html: Afekta a todos los utilizadores ke no trokaron esta preferensya eyos mezmos + title: Ekskluye utilizadores de la indeksasyon de los bushkadores komo preferensya predeterminada discovery: follow_recommendations: Rekomendasyones de kuentos + preamble: Ekspone kontenido enteresante a la superfisie es fundamental para inkorporar muevos utilizadores ke pueden no koneser a dinguno Mastodon. Kontrola komo fonksionan varias opsiones de diskuvrimiento en tu sirvidor. profile_directory: Katalogo de profiles public_timelines: Linyas de tiempo publikas publish_discovered_servers: Publika sirvidores diskuviertos @@ -816,6 +832,7 @@ lad: software_version_patch_check: action: Amostra aktualizasyones desponivles upload_check_privacy_error: + action: Klika aki para mas enformasyon message_html: "Tu sirvidor de web es mal konfigurado. La privasita de tus utilizadores esta en riziko." upload_check_privacy_error_object_storage: action: Ve aki para mas enformasyon @@ -837,6 +854,9 @@ lad: no_link_selected: No se troko dingun atadijo porke no eskojites dinguno publishers: no_publisher_selected: No se troko dingun publikador porke no eskojites dinguno + shared_by_over_week: + one: Partajado por una persona durante la ultima semana + other: Partajado por %{count} personas durante la ultima semana title: Atadijos en trend usage_comparison: Partajado %{today} vezes oy, komparado kon %{yesterday} ayer not_allowed_to_trend: Sin permiso para estar en trendes @@ -874,6 +894,7 @@ lad: not_listable: No seran rekomendadas not_trendable: No aperesera en trendes not_usable: No se pueden uzar + peaked_on_and_decaying: Alkanso el piko en %{date}, agora dekresiendo title: Etiketas en trend trendable: Pueden apareser en trendes trending_rank: Trend n.º %{rank} @@ -943,16 +964,23 @@ lad: title: Publikasyones en trend new_trending_tags: title: Etiketas en trend + subject: Muevo trend para revizion en %{instance} aliases: add_new: Kriya un alias + created_msg: Tienes kriyado djustamente el muevo alias. Agora puedes ampesar la movida dizde el kuento viejo. + deleted_msg: El alias fue supremido djustamente. La movida de akel kuento a esta ya no sera posivle. empty: No tienes aliases. + hint_html: Si keres migrar de otro kuento a este, aki puedes kriyar un alias, kale proseder antes de ampesar a mover suivantes del kuento anterior a este. Esta aksion por si mezma es inofensiva i reversivle. La migrasyon del kuento se inisya dizde el kuento viejo. remove: Dezata alias appearance: advanced_web_interface: Enterfaz web avanzada + advanced_web_interface_hint: 'Si keres utilizar todo el ancho de ekran, la enterfaz web avanzada te permete konfigurar varias kolumnas desferentes para ver tanta enformasyon al mezmo tiempo komo keras: Linya prinsipala, avizos, linya de tiempo federada, kualkier numero de listas i etiketas.' animations_and_accessibility: Animasyones i aksesivilita confirmation_dialogs: Dialogos de konfirmasyon discovery: Diskuvrimiento localization: + body: Mastodon es trezladado por volontarios. + guide_link: https://crowdin.com/project/mastodon guide_link_text: Todos pueden kontribuir. sensitive_content: Kontenido sensivle application_mailer: @@ -1067,15 +1095,27 @@ lad: x_months: "%{count} me" x_seconds: "%{count} s" deletes: + challenge_not_passed: Los datos introdusidos son yerrados + confirm_password: Eskrive tu kod aktual para demostrar tu identita + confirm_username: Eskrive tu nombre de utilizador para konfirmar proceed: Efasa kuento success_msg: Tu kuento fue efasado kon reusho warning: before: 'Antes de kontinuar, por favor melda kon atensyon las sigientes notas:' + caches: El kontenido ke tiene sido magazinado en kashe por otros sirvidores puede persistir + data_removal: Tus publikasyones i el resto de datos se supremiran definitivamente + email_change_html: Puedes trokar tu adreso de posta elektronika sin supremir tu kuento + email_contact_html: Si ainda no te tiene parvenido, puedes eskrivir a %{email} para pider ayuda + email_reconfirmation_html: Si no te tiene parvenido la posta de konfirmasyon, puedes retornar a solisitarlo + irreversible: No podras restaurar ni reaktivar tu kuento + more_details_html: Para mas detalyos, ver la politika de privasita. + username_available: Tu nombre de utilizador retornara a estar desponivle username_unavailable: Tu nombre de utilizador no estara desponivle disputes: strikes: action_taken: Aksyon tomada appeal: Apela + appeal_approved: Este amonestamiento fue apelado kon sukseso i ya no es valido appeal_rejected: La apelasyon fue refuzada appeal_submitted_at: Apelasyon embiada appealed_msg: Tu apelasyon fue embiada. Si la achetamos, se te avizara. @@ -1143,6 +1183,7 @@ lad: add_new: Adjusta muevo errors: limit: Tienes alkansado el karar maksimo de etiketas + hint_html: "Avalia tus etiketas mas importantes en tu profil. Se amostran de forma prominente en tu profil publiko i permeten a los utilizadores navigar por tus publikasyones publikas espesifikamente basho akeyas etiketas." filters: contexts: account: Profiles @@ -1154,7 +1195,11 @@ lad: add_keyword: Adjusta biervo yave keywords: Biervos yaves statuses: Publikasyones individualas + statuses_hint_html: Este filtro se aplika a las publikasyones individualas eskojidas endependientemente de si koensidan kon los biervos yave a kontinuasyon. Revize o suprema publikasyones del filtro. title: Edita filtro + errors: + deprecated_api_multiple_keywords: Estos parametros no se pueden trokar dizde esta aplikasyon porke se aplikan a mas de un biervo yave de filtro. Utiliza una aplikasyon mas reziente o la enterfaz web. + invalid_context: Se suminstro un konteksto malato o vazyo index: contexts: Filtros en %{contexts} delete: Efasa @@ -1191,7 +1236,13 @@ lad: none: Dinguno order_by: Ordena por save_changes: Guadra trokamientos + select_all_matching_items: + one: Eskoje %{count} elemento ke koensida kon tu bushkeda. + other: Eskoje todos los %{count} elementos ke koensidan kon tu bushkeda. today: oy + validation_errors: + one: Algo no esta bien! Por favor, reviza el yerro mas abasho + other: Algo no esta bien! Por favor, reviza %{count} yerros mas abasho imports: errors: empty: Dosya CSV vaziya @@ -1208,6 +1259,7 @@ lad: recent_imports: Importasyones resyentes states: finished: Finalizado + in_progress: En progreso scheduled: Programado unconfirmed: Sin konfirmasyon status: Estado @@ -1250,6 +1302,7 @@ lad: one: 1 uzo other: "%{count} uzos" max_uses_prompt: Sin limito + prompt: Djenera i partaja atadijos kon otros para darles akseso a este sirvidor table: expires_at: Kaduka uses: Uzos @@ -1314,8 +1367,16 @@ lad: disabled_account: Tu kuento aktual no sera kompletamente utilizable dempues. Portanto, tendras akseso a la eksportasyon de datos ansi komo a la reaktivasyon. followers: Esta aksion migrara a todos los suivantes del kuento aktual al muevo kuento only_redirect_html: Alternativamente, solo puedes poner un readreso en tu profil. + other_data: No se moveran otros datos otomatikamente + redirect: El profil de tu kuento aktual se aktualizara kon un avizo de readreso i sera eskluido de las bushkedas moderation: title: Moderasyon + move_handler: + carry_blocks_over_text: Este utilizador se movio dizde %{acct}, ke blokates. + carry_mutes_over_text: Este utilizador se movio dizde %{acct}, ke silensiates. + copy_account_note_text: 'Este utilizador se movio dizde %{acct}, aki estavan tus notas anteriores sovre el:' + navigation: + toggle_menu: Alterna menu notification_mailer: admin: report: @@ -1353,6 +1414,7 @@ lad: notifications: administration_emails: Avizos de administrasyon por posta email_events: Evenimyentos para avizos por posta + email_events_hint: 'Eskoje los evenimientos para los kualos keres risivir avizos:' other_settings: Otras preferensyas de avizos number: human: @@ -1365,6 +1427,8 @@ lad: thousand: K trillion: T otp_authentication: + code_hint: Introduse el kodiche jenerado por tu aplikasyon de autentifikasyon para konfirmar + description_html: Si kapasitas autentifikasyon en dos pasos kon una aplikasyon de autentifikasyon, la entrada rekerira ke estes en posesyon de tu telefon, ke djenerara kodiches para ke entres. enable: Kapasita instructions_html: "Eskanea este kodiche QR dizde Google Authenticator o una aplikasyon similar en tu telefon. A partir de agora, esta aplikasyon djenerara kodiches ke tendras ke ingresar kuando keras konektarte kon tu kuento." manual_instructions: 'Si no puedes eskanear el kodiche QR i nesesitas introdusirlo manualmente, este es el sekreto en teksto plano:' @@ -1418,14 +1482,24 @@ lad: mutual: Mutual primary: Prinsipal relationship: Relasyon + remove_selected_domains: Kita todos los suivantes de los domenos eskojidos remove_selected_followers: Kita a los suivantes eskojidos remove_selected_follows: Desige a los utilizadores eskojidos status: Estado del kuento + remote_follow: + missing_resource: No se pudo topar el URL del readreso rekerido para tu kuento + reports: + errors: + invalid_rules: no faze referensia a reglas validas rss: content_warning: 'Avertensya de kontenido:' descriptions: account: Publikasyones publikas de @%{acct} tag: 'Publikasyones publikas etiketadas kon #%{hashtag}' + scheduled_statuses: + over_daily_limit: Tienes superado el limito de %{limit} publikasyones programadas para akel diya + over_total_limit: Tienes superado el limito de %{limit} publikasyones programadas + too_soon: La data programada deve estar en el avenir self_destruct: title: Este sirvidor esta serrando sessions: @@ -1453,6 +1527,7 @@ lad: weibo: Weibo current_session: Sesyon aktuala description: "%{browser} en %{platform}" + explanation: Estos son los navigadores internetikos konektados aktualmente kon tu kuento de Mastodon. ip: IP platforms: adobe_air: Adobe Air @@ -1543,11 +1618,16 @@ lad: public: Publiko public_long: Todos pueden ver unlisted: No listado + unlisted_long: Todos pueden ver, ama no esta listado en las linyas de tiempo publikas statuses_cleanup: enabled: Otomatikamente efasa publikasyones viejas + enabled_hint: Supreme otomatikamente tus publikasyones kuando alkansen un limito de tiempo espesifikado, a manko ke koensiden kon alguna de las eksepsiones detalyadas debasho exceptions: Eksepsiones + explanation: Porke la efasasion de mesajes es una operasyon kostoza, esto se faze avagar, a lo longo de un tiempo, kuando el sirvidor no esta okupado. Por esta razon, puede ser ke tus publikasyones sean efasadas un tiempo dempues de ke alkansen el limito de tiempo espesifikado. ignore_favs: Ignora favoritos ignore_reblogs: Ignora repartajasyones + interaction_exceptions: Eksepsiones bazadas en enteraksyones + interaction_exceptions_explanation: Akodrate ke no ay garantiya de ke se supremen las publikasyones ke estan por debasho de los limitos de favoritos o de repartajasiones si los tienen superado en algun momento. keep_direct: Manten enmentaduras privadas keep_direct_hint: No efasa dingunos mesajes privados keep_media: Manten publikasyones kon atamientos @@ -1569,8 +1649,11 @@ lad: '604800': 1 semana '63113904': 2 anyos '7889238': 3 mezes + min_age_label: Limito de tiempo min_favs: Manten publikasyones favoritadas a lo manko + min_favs_hint: No efasa dinguna de las publikasyones ke plazgan a mas de esta kantita de personas. Desha en blanko para supremir publikasyones sin importar el numero de personas a las ke plazen las publikasyones min_reblogs: Manten publikasyones repartajadas a lo manko + min_reblogs_hint: No efasa dinguna de las publikasyones ke ayan sido repartajadas mas de este numero de vezes. Desha en blanko para supremir publikasyones sin importar el numero de repartajasiones stream_entries: sensitive_content: Kontenido sensivle strikes: @@ -1635,6 +1718,8 @@ lad: disable: Ya no puedes uzar tu kuento, ama tu profil i el resto de datos permanesen intactos. Puedes solisitar una kopia de sigurita de tus datos, trokar la konfigurasyon de tu kuento o supremirlo. mark_statuses_as_sensitive: Algunas de tus publikasyones an sido markados komo sensivles por los moderadores de %{instance}. Esto sinyifika ke la djente tendra ke pulsar los dosyas multimedia en las publikasyones antes de ke se amostre una vista previa. Puedes markar los dosyas multimedia komo sensivles tu mezmo kuando publikes en el avenir. sensitive: A partir de agora todas los dosyas multimedia ke subas seran markados komo sensivles i eskondidos tras una avertensya. + silence: Ainda puedes uzar tu kuento, ama solo las personas ke te estan sigiendo veran tus publikasyones en este sirvidor, i puedes ser eskluido de varias fonksionalitas de diskuvrimiento. Portanto, otros kuentos podran ampesar a segirte manualmente. + suspend: Ya no puedes utilizar tu kuento, i tu profil i el resto de datos ya no son aksesivles. Ainda puedes inisyar sesion para solisitar una kopia de sigurita de tus datos, asta ke estos sean supremidos por kompleto en unos 30 diyas, aunke konservaremos algunos datos bazikos para impedir ke evitas la suspensyon. reason: 'Razon:' statuses: 'Publikasyones relevantes:' subject: @@ -1655,7 +1740,12 @@ lad: suspend: Kuento suspendido welcome: edit_profile_action: Konfigurasyon de profil + edit_profile_step: Puedes personalizar tu profil kargando una foto de profil, trokando tu nombre de utilizador i muncho mas. Puedes optar por revizar a los muevos suivantes antes de ke puedan segirte. + explanation: Aki ay algunos konsejos para ampesar final_action: Ampesa a publikar + final_step: 'Ampesa a publikar! Inkluzo sin suivantes, tus publikasyones publikas pueden ser vistas por otros, por enshemplo en la linya de tiempo lokal o en etiketas. Tal vez keras aprezentarte kon la etiketa de #introduksiones.' + full_handle: Tu sovrenombre kompleto + full_handle_hint: Esto es lo ke le dirias a tus haverim para ke eyos puedan embiarte mesajes o segirte dizde otra instansya. subject: Bienvenido a Mastodon title: Bienvenido, %{name}! users: @@ -1668,10 +1758,12 @@ lad: webauthn_credentials: add: Adjusta mueva yave de sigurita create: + error: Uvo un problem al adjustar tu yave de sigurita. Por favor aprova de muevo. success: Tu yave de sigurita fue adjustada kon sukseso. delete: Efasa delete_confirmation: Estas siguro ke keres efasar esta yave de sigurita? destroy: + error: Uvo un problem al efasar tu yave de sigurita. Por favor aprova de muevo. success: Tu yave de sigurita fue efasada kon sukseso. invalid_credential: Yave de sigurita no valida nickname_hint: Introduska el sovrenombre de tu mueva yave de sigurita diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index 5ff495a54023ba..23fbc43b07ec33 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -162,7 +162,7 @@ fa: defaults: autofollow: دعوت از دیگران برای عضو شدن و پیگیری حساب شما avatar: تصویر نمایه - bot: این حساب یک ربات است + bot: این یک حساب خودکار شده است chosen_languages: جدا کردن زبان‌ها confirm_new_password: تأیید گذرواژه تازه confirm_password: تأیید گذرواژه diff --git a/config/locales/simple_form.ie.yml b/config/locales/simple_form.ie.yml index 672ff9d0039ba6..bde52e2a783ea0 100644 --- a/config/locales/simple_form.ie.yml +++ b/config/locales/simple_form.ie.yml @@ -3,11 +3,21 @@ ie: simple_form: hints: account: + discoverable: Tui public postas e profil posse esser recomandat in multiplic areas de Mastodon e tui profil posse esser suggestat a altri usatores. + display_name: Tui complet nómine o tui amusant nómine. + fields: Tui websitu, pronómines, etá, quocunc quel tu vole. + indexable: Tui public postas posse aparir in sercha-resultates sur Mastodon. E in omni casu, tis qui ha interactet con tui postas va posser serchar e trovar les. + note: 'Tu posse @mentionar altri persones o #hashtags.' unlocked: Persones va posser sequer te sin petir aprobation. Desselecte si tu vole manualmen tractar petitiones de sequer e decider ca acceptar o rejecter nov sequitores. + account_alias: + acct: Specificar li usatornomine@dominia del conto ex quel tu vole translocar + account_migration: + acct: Specificar li usatornomine@dominia del conto a quel tu vole translocar account_warning_preset: text: Tu posse usar posta-sintaxe, quam URLs, hashtags e mentiones title: Ínobligatori. Ne visibil al recipiente admin_account_action: + include_statuses: Li usator va posser vider quel postas ha causat li moderatori action o admonition send_email_notification: Li usator va reciver un explication de ti quel evenit con su conto text_html: Ínobligatori. Tu posse usar posta-sintaxe. Tu posse adjunter preconfigurationes de avises por sparar témpor type_html: Selecte quo far con %{acct} @@ -48,32 +58,76 @@ ie: setting_display_media_default: Celar medie marcat quam sensitiv setting_display_media_hide_all: Sempre celar medie setting_display_media_show_all: Sempre monstrar medie + featured_tag: + name: 'Vi quelc hashtags usat max recentmen de te:' + filters: + action: Selecter quel action a far quande un posta egala un filtre + actions: + hide: Celar completmen li contenete filtrat, quam si it ne existe + warn: Celar li contenete filtrat detra un avise mentionant li titul del filtre form_admin_settings: + backups_retention_period: Mantener usator-generat archives por li specificat quantitá de dies. bootstrap_timeline_accounts: Ti-ci contos va esser pinglat al parte superiori del recomandationes por nov usatores. + mascot: Substitue li ilustration in li avansat interfacie web. + peers_api_enabled: Un liste de nómines de dominia queles ti-ci servitor ha incontrat in li fediverse. Ci null data es includet pri ca tu confedera con un cert servitor o ne; it indica solmen que tui servitor conosse it. Usat per servicies colectent general statisticas pri federation. + profile_directory: Li profilarium monstra omni usatores volent esser decovribil. + site_contact_email: Qualmen on posse contacter te por inquestes legal o de apoy. site_contact_username: Qualmen li gente posse atinger te sur Mastodon. + site_short_description: Un curt descrition por auxiliar identificar tui servitor. Qui gere it, por qual persones it es? + site_title: Quant persones posse aluder a tui servitor ultra su nómine de dominia. + status_page_url: URL de un págine monstrant li statu de ti-ci servitor durant un ruptura de servicie theme: Li dessine quel ínregistrat visitantes e nov usatores vide. + thumbnail: Un image de dimensiones circa 2:1 monstrat along tui servitor-information. timeline_preview: Ínregistrat visitantes va posser vider li max recent public postas disponibil che li servitor. + trends: Tendenties monstra quel postas, hashtags e novas es ganiant atention sur tui servitor. trends_as_landing_page: Monstrar populari contenete a ínregistrat visitantes vice un description del servitor. Besona que tendenties es activisat. form_challenge: current_password: Tu nu intra un area secur ip_block: + comment: Facultativ. Ne obliviar pro quo tu adjuntet ti-ci regul. + expires_in: IP-adresses es un ressurse finit, quelcvez partit e transferet de manu a manu. Pro to, un índefinit bloccada de IP ne es recomandat. severities: + no_access: Bloccar accesse a omni ressurses sign_up_block: Nov registrationes ne va esser possibil sign_up_requires_approval: Nov registrationes va besonar tui aprobation + severity: Selecter quo va evenir con demandes ex ti-ci IP + rule: + text: Descrir un regul o postulation por usatores sur ti-ci servitor. Prova scrir un descrition curt e simplic + user: + role: Permissiones de usator decidet per su rol + user_role: + color: Color a usar por li rol tra li UI, quam RGB (rubi-verdi-blu) in formate hex + highlighted: Va far li rol publicmen visibil + name: Public nómine del rol, si li rol va esser monstrat quam signe + permissions_as_keys: Usatores con ti-ci rol va haver accesse a... webhook: events: Selecter evenimentes a misser + template: Composir tui propri carga JSON usant interpolation de variabiles. Lassa blanc por JSON predefinit. url: Ad u misser evenimentes labels: account: + discoverable: Monstrar profil e postas in algoritmes de decovrition fields: + name: Etiquette value: Contenete indexable: Includer public postas in resultates de sercha + account_alias: + acct: Usator-nómine del anteyan conto + account_migration: + acct: Usator-nómine del nov conto account_warning_preset: text: Textu prefigurat title: Titul admin_account_action: send_email_notification: Notificar li usator per e-posta + text: Admonition customisat type: Action + types: + disable: Gelar + none: Misser un admonition + sensitive: Sensitiv + silence: Limitar + suspend: Suspender warning_preset_id: Usar un prefiguration de avise announcement: all_day: Eveniment del tot die @@ -81,7 +135,12 @@ ie: scheduled_at: Planar publication starts_at: Comense del eveniment text: Proclamation + appeal: + text: Explicar pro que ti-ci decision mey esser renversat defaults: + autofollow: Invitar a sequer tui conto + avatar: Foto de profil + bot: Ti-ci conto es automatisat chosen_languages: Filtrar lingues confirm_new_password: Confirmar nov passa-parol confirm_password: Confirmar passa-parol @@ -91,28 +150,107 @@ ie: display_name: Nómine a monstrar email: E-posta expires_in: Expirar pos + fields: Campes aditional + header: Cap-image honeypot: "%{label} (ne plenar)" + irreversible: Lassar cader vice celar locale: Lingue del interfacie + max_uses: Max grand númere de usas new_password: Nov passa-parol note: Biografie password: Passa-parol + phrase: Clave-parol o frase + setting_advanced_layout: Possibilisar web-interfacie avansat + setting_always_send_emails: Sempre misser notificationes de e-posta setting_default_language: Lingue in quel postar setting_default_privacy: Privatie de postada setting_default_sensitive: Sempre marcar medie quam sensitiv setting_display_media_default: Predefinitiones setting_display_media_hide_all: Celar omno setting_display_media_show_all: Monstrar omno + setting_expand_spoilers: Sempre expander postas marcat con admonitiones de contenete + setting_system_font_ui: Usar predefinit fonte de sistema setting_theme: Tema de situ setting_trends: Monstrar li hodial tendenties setting_unfollow_modal: Monstrar dialog de confirmation ante dessequer alquem setting_use_pending_items: Mode lent + severity: Severitá + sign_in_token_attempt: Code de securitá + title: Titul + type: Specie de importation + username: Nómine de usator + whole_word: Plen parol + featured_tag: + name: Hashtag + filters: + actions: + hide: Celar completmen + warn: Celar con un admonition form_admin_settings: + backups_retention_period: Periode de retener archives de usator + bootstrap_timeline_accounts: Sempre recomandar ti-ci contos a nov usatores + closed_registrations_message: Customisat missage quande registration ne disponibil + custom_css: Custom CSS + profile_directory: Possibilisar profilarium registrations_mode: Qui posse registrar se + show_domain_blocks: Vider bloccas de dominia + show_domain_blocks_rationale: Monstrar pro quo cert dominias esset bloccat + site_contact_email: Contact e-mail adresse + site_contact_username: Usator-nómine de contact + site_extended_description: Extendet descrition + site_title: Nómine de servitor theme: Predefenit tema + trendable_by_default: Possibilisar tendenties sin priori inspection trends: Possibilisar tendenties trends_as_landing_page: Usar tendenties quam frontispicie + invite: + comment: Comentar + invite_request: + text: Pro quo tu vole adherer? + ip_block: + comment: Comentar + ip: IP + severities: + no_access: Bloccar accesse + sign_up_block: Bloccar usator-registrationes + sign_up_requires_approval: Limitar usator-registrationes + severity: Regul notification_emails: + favourite: Alqui favoritisat tui posta + follow: Alqui sequet te follow_request: Alqui petit sequer te + mention: Alqui mentionat te + pending_account: Nov conto besonant inspection + report: Nov raporte es submisset + software_updates: + all: Notificar pri omni nov actualisationes + critical: Notificar solmen pri critical actualisationes + label: Un nov version de Mastodon es disponibil trending_tag: Nov tendentie besonant inspection + rule: + text: Regul tag: + name: Hashtag trendable: Permisse que ti-ci hashtag apari sub tendenties + user: + role: Rol + time_zone: Zone temporal + user_role: + color: Color del insignie + name: Nómine + permissions_as_keys: Permissiones + position: Prioritá + webhook: + events: Evenimentes activisat + url: URL de punctu terminal + 'no': 'No' + not_recommended: Ne recomandat + overridden: Substituet + recommended: Recomandat + required: + mark: "*" + text: besonat + title: + sessions: + webauthn: Usar un de tui claves de securitá por intrar + 'yes': 'Yes' diff --git a/config/locales/simple_form.lad.yml b/config/locales/simple_form.lad.yml index aeac5f1c586287..c23960e07d120e 100644 --- a/config/locales/simple_form.lad.yml +++ b/config/locales/simple_form.lad.yml @@ -3,10 +3,13 @@ lad: simple_form: hints: account: + discoverable: Tus publikasyones publikas i profil pueden ser avaliadas o rekomendadas en varias partes de Mastodon i tu profil puede ser sujerido a otros utilizadores. display_name: Tu nombre para amostrar. fields: Tu deskripsyon, pronombres, edad, todo lo ke keras. + indexable: Tus publikasyones publikas pueden apareser en rezultados de bushkeda en Mastodon. Personas ke enteraktuaron kon tus publikasyones syempre pueden bushkarlas inkluzo si trokes esta preferensya. note: 'Puedes @enmentar a otra djente o #etiketas.' show_collections: Otra djente podra ver tus segidos i suivantes. Personas a las kualas siges siempre podran ver que las estas sigiendo. + unlocked: Djente va poder segirte sin solisitar tu achetasyon. Deseleksyona si keres revizar solisitasyones de segimyento i dechidir si keres achetar o refuzar a muevos suivantes. account_alias: acct: Espesifika tu nombre de utilizador@domeno del kuento de ande keres migrar account_migration: @@ -118,6 +121,7 @@ lad: otp: 'Introduse el kodiche de autentifikasyon de dos pasos djenerado por tu aplikasyon de telefon o uza uno de tus kodiches de recuperasyon:' webauthn: Si es una yave USB, asigurete de insertarla y, si es necesario, pulsala. settings: + indexable: Tu pajina de profil puede apareser en rezultados de bushkeda en Google, Bing i otros. show_application: Tu siempre podras ver dizde kuala aplikasyon publikates tu publikasyon. tag: name: Solo se puede trokar la kapitalizasyon de las letras, por enshemplo, para ke sea mas meldable @@ -132,9 +136,11 @@ lad: position: Un rolo mas alto deside la rezolusyon de konfliktos en algunas situasyones. Algunas aksyones solo pueden levarse por rolos kon menor priorita webhook: events: Eskoje evenimientos para embiar + template: Kriya tu propio JSON uzando interpolasyon de las variavlas. Deshalo en blanko para el JSON predeterminado. url: Ande los evenimientos seran embiados labels: account: + discoverable: Avalia profil i publikasyones en algoritmos de deskuvrimyento fields: name: Etiketa value: Kontenido @@ -183,6 +189,9 @@ lad: expires_in: Kaduka dempues de fields: Datos adisyonales header: Imaje de kavesera + honeypot: "%{label} (no inche)" + inbox_url: URL del kuti de relevo + irreversible: Refuza en lugar de eskonder locale: Lingua de enterfaz max_uses: Maksimo numero de uzos new_password: Muevo kod @@ -190,17 +199,27 @@ lad: otp_attempt: Kodiche de dos pasos password: Kod phrase: Biervo yave o fraza + setting_advanced_layout: Kapasita la enterfaz web avanzada setting_aggregate_reblogs: Agrupa repartajasyones en linyas setting_always_send_emails: Siempre embia avizos por posta setting_auto_play_gif: Siempre reproduse los GIFs animados + setting_boost_modal: Amostra ventana de konfirmasyon antes de repartajar setting_default_language: Lingua de publikasyones setting_default_privacy: Privasita de publikasyones + setting_default_sensitive: Syempre marka multimedia komo sensivles + setting_delete_modal: Mostra dialogo de konfirmasyon antes de efasar una publikasyon + setting_disable_swiping: Inkapasita movimyentos de arresvalamiento + setting_display_media: Vizualizasyon de multimedia setting_display_media_default: Predeterminado setting_display_media_hide_all: Eskonde todo setting_display_media_show_all: Amostra todo + setting_expand_spoilers: Siempre espande las publikasyones markadas kon avertensyas de kontenido + setting_hide_network: Eskonde tu red sosyala setting_reduce_motion: Reduse el movimyento en animasyones setting_system_font_ui: Uza el font predeterminado del sistem + setting_theme: Tema del sitio setting_trends: Amostra los trendes de oy + setting_unfollow_modal: Mostra dialogo de konfirmasyon antes de desegir a alguno setting_use_blurhash: Amostra gradientes koloridos para kontenido multimedia eskondido setting_use_pending_items: Modo lento severity: Severita @@ -263,6 +282,8 @@ lad: sign_up_requires_approval: Limita enrejistrasyones severity: Regla notification_emails: + appeal: Alguno tiene apelado una dechizyon de moderasyon + digest: Embia rezumen de posta elektronika favourite: A alguno le plaze tu publikasyon follow: Alguno te ampeso a segir follow_request: Alguno tiene solisitado segirte @@ -276,25 +297,38 @@ lad: label: Mueva version de Mastodon esta desponivle none: Nunkua avizame de aktualizasyones (no rekomendado) patch: Avizame de aktualizasyones de yerros + trending_tag: Un muevo trend nesesita revizyon rule: text: Regla settings: indexable: Inkluye la pajina de profil en los bushkadores + show_application: Amostra aplikasyon uzada para adjustar publikasyones tag: + listable: Permite ke esta etiketa apareska en bushkedas i sujestyones name: Etiketa + trendable: Permite ke esta etiketa apareska en trendes + usable: Permite ke publikasyones uzen esta etiketa user: role: Rolo + time_zone: Zona de tiempo user_role: + color: Kolor de insinya + highlighted: Mostra rolo komo insinya en profiles de utilizadores name: Nombre permissions_as_keys: Permisos position: Priorita webhook: events: Evenimientos kapasitados + template: Modelo de kontenido url: URL de Endpoint 'no': 'No' not_recommended: No rekomendado + overridden: Sovreskrive recommended: Rekomendado required: mark: "*" text: rekerido + title: + sessions: + webauthn: Uza una de tus yaves de sigurita para konektarte 'yes': Si diff --git a/config/locales/sk.yml b/config/locales/sk.yml index ab2bc5155323b6..feb84ea9845848 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -435,6 +435,7 @@ sk: delivery: all: Všetko failing: Zlyhávajúce + stop: Zastav doručenie unavailable: Nedostupné delivery_available: Je v dosahu doručovania empty: Nenájdené žiadne domény. @@ -573,12 +574,14 @@ sk: manage_announcements: Spravuj oboznámenia manage_appeals: Spravuj námietky manage_blocks: Spravuj blokovania + manage_custom_emojis: Spravuj vlastné emotikony manage_federation: Spravuj federáciu manage_invites: Spravuj pozvánky manage_reports: Spravuj hlásenia manage_roles: Spravuj postavenia manage_rules: Spravuj pravidlá manage_settings: Spravuj nastavenia + manage_user_access: Spravuj užívateľský prístup manage_users: Spravuj užívateľov title: Postavenia rules: @@ -621,9 +624,11 @@ sk: software_updates: critical_update: Kritické — prosím aktualizuj rýchlo documentation_link: Zisti viac + release_notes: Poznámky k vydaniu title: Dostupné aktualizácie types: major: Hlavné vydanie + patch: Opravné vydanie - opravy a jednoducho uplatniteľné zmeny version: Verzia statuses: account: Autor @@ -692,7 +697,10 @@ sk: title: Populárne príspevky tags: dashboard: + tag_accounts_measure: unikátnych použití + tag_servers_measure: iné servery tag_uses_measure: užívateľov celkovo + not_usable: Nemôže byť použitý title: Populárne štítky trending_rank: 'Populárne #%{rank}' usable: Môže byť použitý @@ -708,7 +716,11 @@ sk: disable: Vypni disabled: Vypnuté enable: Povoľ + status: Stav admin_mailer: + new_appeal: + actions: + none: varovanie new_pending_account: body: Podrobnosti o novom účte sú uvedené nižšie. Môžeš túto registračnú požiadavku buď prijať, alebo zamietnúť. subject: Nový účet očakáva preverenie na %{instance} (%{username}) @@ -757,6 +769,9 @@ sk: apply_for_account: Vyžiadaj si účet captcha_confirmation: title: Bezpečnostná kontrola + confirmations: + login_link: prihlás sa + welcome_title: Vitaj, %{name}! delete_account: Vymaž účet delete_account_html: Pokiaľ chceš svoj účet odtiaľto vymazať, môžeš tak urobiť tu. Budeš požiadaný/á o potvrdenie tohto kroku. description: @@ -786,6 +801,9 @@ sk: setup: link_not_received: Nedostal/a si odkaz? title: Skontroluj svoju schránku + sign_in: + preamble_html: Prihlás sa so svojimi údajmi pre %{domain}. Pokiaľ je tvoj účet hostovaný na inom serveri, nebudeš sa môcť prihlásiť tu. + title: Prihlás sa na %{domain} status: account_status: Stav účtu confirming: Čaká sa na dokončenie potvrdenia emailom. @@ -841,6 +859,9 @@ sk: silence: Obmedzenie účtu domain_validator: invalid_domain: nieje správny tvar domény + edit_profile: + basic_information: Základné informácie + other: Ostatné errors: '400': Požiadavka, ktorú si odoslal/a, bola buď nesprávna, alebo znehodnotená. '403': Nemáš povolenie pre zobrazenie tejto stránky. @@ -885,22 +906,28 @@ sk: public: Verejné osi thread: Konverzácie edit: + add_keyword: Pridaj kľúčové slovo + keywords: Kľúčové slová title: Uprav triedenie errors: invalid_context: Nebola poskytnutá žiadna, alebo ide o neplatnú súvislosť index: delete: Vymaž empty: Nemáš žiadné filtrovanie. + expires_on: Expiruje dňa %{date} title: Triedenia new: title: Pridaj nové triedenie generic: all: Všetko + cancel: Zruš changes_saved_msg: Zmeny boli úspešne uložené! + confirm: Potvrď copy: Kopíruj delete: Vymaž order_by: Zoraď podľa save_changes: Ulož zmeny + today: dnes validation_errors: few: Niečo ešte nieje celkom v poriadku! Prosím skontroluj %{count} chýb uvedených nižšie many: Niečo ešte nieje celkom v poriadku! Prosím skontroluj %{count} chýb uvedených nižšie @@ -923,6 +950,7 @@ sk: bookmarks: Záložky domain_blocking: Zoznam blokovaných domén following: Zoznam sledovaných + lists: Zoznamy muting: Zoznam ignorovaných upload: Nahraj invites: @@ -1182,6 +1210,7 @@ sk: keep_pinned: Ponechaj pripnuté príspevky keep_pinned_hint: Nevymaže žiadne s tvojich pripnutých príspevkov keep_self_bookmark: Ponechaj príspevky, ktoré sú záložkami + keep_self_fav: Ponechať príspevky, ktoré si si obľúbil/a stream_entries: sensitive_content: Senzitívny obsah tags: diff --git a/db/post_migrate/20221101190723_backfill_admin_action_logs.rb b/db/post_migrate/20221101190723_backfill_admin_action_logs.rb index 6476f4b13a740e..1d8d983b3a4b4b 100644 --- a/db/post_migrate/20221101190723_backfill_admin_action_logs.rb +++ b/db/post_migrate/20221101190723_backfill_admin_action_logs.rb @@ -77,90 +77,135 @@ class AdminActionLog < ApplicationRecord def up safety_assured do - AdminActionLog.includes(:account).where(target_type: 'Account', human_identifier: nil).find_each do |log| - next if log.account.nil? + process_logs_for_account + process_logs_for_user + process_logs_for_report + process_logs_for_domain_block + process_logs_for_domain_allow + process_logs_for_email_domain_block + process_logs_for_unavailable_domain + process_logs_for_status + process_logs_for_account_warning + process_logs_for_announcement + process_logs_for_ip_block + process_logs_for_custom_emoji + process_logs_for_canonical_email_block + process_logs_for_appeal + end + end - log.update_attribute('human_identifier', log.account.acct) - end + def down; end - AdminActionLog.includes(user: :account).where(target_type: 'User', human_identifier: nil).find_each do |log| - next if log.user.nil? + private - log.update_attribute('human_identifier', log.user.account.acct) - log.update_attribute('route_param', log.user.account_id) - end + def process_logs_for_account + AdminActionLog.includes(:account).where(target_type: 'Account', human_identifier: nil).find_each do |log| + next if log.account.nil? - AdminActionLog.where(target_type: 'Report', human_identifier: nil).in_batches.update_all('human_identifier = target_id::text') + log.update_attribute('human_identifier', log.account.acct) + end + end - AdminActionLog.includes(:domain_block).where(target_type: 'DomainBlock').find_each do |log| - next if log.domain_block.nil? + def process_logs_for_user + AdminActionLog.includes(user: :account).where(target_type: 'User', human_identifier: nil).find_each do |log| + next if log.user.nil? - log.update_attribute('human_identifier', log.domain_block.domain) - end + log.update_attribute('human_identifier', log.user.account.acct) + log.update_attribute('route_param', log.user.account_id) + end + end - AdminActionLog.includes(:domain_allow).where(target_type: 'DomainAllow').find_each do |log| - next if log.domain_allow.nil? + def process_logs_for_report + AdminActionLog.where(target_type: 'Report', human_identifier: nil).in_batches.update_all('human_identifier = target_id::text') + end - log.update_attribute('human_identifier', log.domain_allow.domain) - end + def process_logs_for_domain_block + AdminActionLog.includes(:domain_block).where(target_type: 'DomainBlock').find_each do |log| + next if log.domain_block.nil? - AdminActionLog.includes(:email_domain_block).where(target_type: 'EmailDomainBlock').find_each do |log| - next if log.email_domain_block.nil? + log.update_attribute('human_identifier', log.domain_block.domain) + end + end - log.update_attribute('human_identifier', log.email_domain_block.domain) - end + def process_logs_for_domain_allow + AdminActionLog.includes(:domain_allow).where(target_type: 'DomainAllow').find_each do |log| + next if log.domain_allow.nil? - AdminActionLog.includes(:unavailable_domain).where(target_type: 'UnavailableDomain').find_each do |log| - next if log.unavailable_domain.nil? + log.update_attribute('human_identifier', log.domain_allow.domain) + end + end - log.update_attribute('human_identifier', log.unavailable_domain.domain) - end + def process_logs_for_email_domain_block + AdminActionLog.includes(:email_domain_block).where(target_type: 'EmailDomainBlock').find_each do |log| + next if log.email_domain_block.nil? - AdminActionLog.includes(status: :account).where(target_type: 'Status', human_identifier: nil).find_each do |log| - next if log.status.nil? + log.update_attribute('human_identifier', log.email_domain_block.domain) + end + end - log.update_attribute('human_identifier', log.status.account.acct) - log.update_attribute('permalink', log.status.uri) - end + def process_logs_for_unavailable_domain + AdminActionLog.includes(:unavailable_domain).where(target_type: 'UnavailableDomain').find_each do |log| + next if log.unavailable_domain.nil? - AdminActionLog.includes(account_warning: :account).where(target_type: 'AccountWarning', human_identifier: nil).find_each do |log| - next if log.account_warning.nil? + log.update_attribute('human_identifier', log.unavailable_domain.domain) + end + end - log.update_attribute('human_identifier', log.account_warning.account.acct) - end + def process_logs_for_status + AdminActionLog.includes(status: :account).where(target_type: 'Status', human_identifier: nil).find_each do |log| + next if log.status.nil? - AdminActionLog.includes(:announcement).where(target_type: 'Announcement', human_identifier: nil).find_each do |log| - next if log.announcement.nil? + log.update_attribute('human_identifier', log.status.account.acct) + log.update_attribute('permalink', log.status.uri) + end + end - log.update_attribute('human_identifier', log.announcement.text) - end + def process_logs_for_account_warning + AdminActionLog.includes(account_warning: :account).where(target_type: 'AccountWarning', human_identifier: nil).find_each do |log| + next if log.account_warning.nil? - AdminActionLog.includes(:ip_block).where(target_type: 'IpBlock', human_identifier: nil).find_each do |log| - next if log.ip_block.nil? + log.update_attribute('human_identifier', log.account_warning.account.acct) + end + end - log.update_attribute('human_identifier', "#{log.ip_block.ip}/#{log.ip_block.ip.prefix}") - end + def process_logs_for_announcement + AdminActionLog.includes(:announcement).where(target_type: 'Announcement', human_identifier: nil).find_each do |log| + next if log.announcement.nil? - AdminActionLog.includes(:custom_emoji).where(target_type: 'CustomEmoji', human_identifier: nil).find_each do |log| - next if log.custom_emoji.nil? + log.update_attribute('human_identifier', log.announcement.text) + end + end - log.update_attribute('human_identifier', log.custom_emoji.shortcode) - end + def process_logs_for_ip_block + AdminActionLog.includes(:ip_block).where(target_type: 'IpBlock', human_identifier: nil).find_each do |log| + next if log.ip_block.nil? - AdminActionLog.includes(:canonical_email_block).where(target_type: 'CanonicalEmailBlock', human_identifier: nil).find_each do |log| - next if log.canonical_email_block.nil? + log.update_attribute('human_identifier', "#{log.ip_block.ip}/#{log.ip_block.ip.prefix}") + end + end - log.update_attribute('human_identifier', log.canonical_email_block.canonical_email_hash) - end + def process_logs_for_custom_emoji + AdminActionLog.includes(:custom_emoji).where(target_type: 'CustomEmoji', human_identifier: nil).find_each do |log| + next if log.custom_emoji.nil? - AdminActionLog.includes(appeal: :account).where(target_type: 'Appeal', human_identifier: nil).find_each do |log| - next if log.appeal.nil? + log.update_attribute('human_identifier', log.custom_emoji.shortcode) + end + end - log.update_attribute('human_identifier', log.appeal.account.acct) - log.update_attribute('route_param', log.appeal.account_warning_id) - end + def process_logs_for_canonical_email_block + AdminActionLog.includes(:canonical_email_block).where(target_type: 'CanonicalEmailBlock', human_identifier: nil).find_each do |log| + next if log.canonical_email_block.nil? + + log.update_attribute('human_identifier', log.canonical_email_block.canonical_email_hash) end end - def down; end + def process_logs_for_appeal + AdminActionLog.includes(appeal: :account).where(target_type: 'Appeal', human_identifier: nil).find_each do |log| + next if log.appeal.nil? + + log.update_attribute('human_identifier', log.appeal.account.acct) + log.update_attribute('route_param', log.appeal.account_warning_id) + end + end end diff --git a/db/post_migrate/20221206114142_backfill_admin_action_logs_again.rb b/db/post_migrate/20221206114142_backfill_admin_action_logs_again.rb index 3c68470a7f3812..c080e77ecfd09a 100644 --- a/db/post_migrate/20221206114142_backfill_admin_action_logs_again.rb +++ b/db/post_migrate/20221206114142_backfill_admin_action_logs_again.rb @@ -77,90 +77,135 @@ class AdminActionLog < ApplicationRecord def up safety_assured do - AdminActionLog.includes(:account).where(target_type: 'Account', human_identifier: nil).find_each do |log| - next if log.account.nil? + process_logs_for_account + process_logs_for_user + process_logs_for_report + process_logs_for_domain_block + process_logs_for_domain_allow + process_logs_for_email_domain_block + process_logs_for_unavailable_domain + process_logs_for_status + process_logs_for_account_warning + process_logs_for_announcement + process_logs_for_ip_block + process_logs_for_custom_emoji + process_logs_for_canonical_email_block + process_logs_for_appeal + end + end - log.update_attribute('human_identifier', log.account.acct) - end + def down; end - AdminActionLog.includes(user: :account).where(target_type: 'User', human_identifier: nil).find_each do |log| - next if log.user.nil? + private - log.update_attribute('human_identifier', log.user.account.acct) - log.update_attribute('route_param', log.user.account_id) - end + def process_logs_for_account + AdminActionLog.includes(:account).where(target_type: 'Account', human_identifier: nil).find_each do |log| + next if log.account.nil? - AdminActionLog.where(target_type: 'Report', human_identifier: nil).in_batches.update_all('human_identifier = target_id::text') + log.update_attribute('human_identifier', log.account.acct) + end + end - AdminActionLog.includes(:domain_block).where(target_type: 'DomainBlock').find_each do |log| - next if log.domain_block.nil? + def process_logs_for_user + AdminActionLog.includes(user: :account).where(target_type: 'User', human_identifier: nil).find_each do |log| + next if log.user.nil? - log.update_attribute('human_identifier', log.domain_block.domain) - end + log.update_attribute('human_identifier', log.user.account.acct) + log.update_attribute('route_param', log.user.account_id) + end + end - AdminActionLog.includes(:domain_allow).where(target_type: 'DomainAllow').find_each do |log| - next if log.domain_allow.nil? + def process_logs_for_report + AdminActionLog.where(target_type: 'Report', human_identifier: nil).in_batches.update_all('human_identifier = target_id::text') + end - log.update_attribute('human_identifier', log.domain_allow.domain) - end + def process_logs_for_domain_block + AdminActionLog.includes(:domain_block).where(target_type: 'DomainBlock').find_each do |log| + next if log.domain_block.nil? - AdminActionLog.includes(:email_domain_block).where(target_type: 'EmailDomainBlock').find_each do |log| - next if log.email_domain_block.nil? + log.update_attribute('human_identifier', log.domain_block.domain) + end + end - log.update_attribute('human_identifier', log.email_domain_block.domain) - end + def process_logs_for_domain_allow + AdminActionLog.includes(:domain_allow).where(target_type: 'DomainAllow').find_each do |log| + next if log.domain_allow.nil? - AdminActionLog.includes(:unavailable_domain).where(target_type: 'UnavailableDomain').find_each do |log| - next if log.unavailable_domain.nil? + log.update_attribute('human_identifier', log.domain_allow.domain) + end + end - log.update_attribute('human_identifier', log.unavailable_domain.domain) - end + def process_logs_for_email_domain_block + AdminActionLog.includes(:email_domain_block).where(target_type: 'EmailDomainBlock').find_each do |log| + next if log.email_domain_block.nil? - AdminActionLog.includes(status: :account).where(target_type: 'Status', human_identifier: nil).find_each do |log| - next if log.status.nil? + log.update_attribute('human_identifier', log.email_domain_block.domain) + end + end - log.update_attribute('human_identifier', log.status.account.acct) - log.update_attribute('permalink', log.status.uri) - end + def process_logs_for_unavailable_domain + AdminActionLog.includes(:unavailable_domain).where(target_type: 'UnavailableDomain').find_each do |log| + next if log.unavailable_domain.nil? - AdminActionLog.includes(account_warning: :account).where(target_type: 'AccountWarning', human_identifier: nil).find_each do |log| - next if log.account_warning.nil? + log.update_attribute('human_identifier', log.unavailable_domain.domain) + end + end - log.update_attribute('human_identifier', log.account_warning.account.acct) - end + def process_logs_for_status + AdminActionLog.includes(status: :account).where(target_type: 'Status', human_identifier: nil).find_each do |log| + next if log.status.nil? - AdminActionLog.includes(:announcement).where(target_type: 'Announcement', human_identifier: nil).find_each do |log| - next if log.announcement.nil? + log.update_attribute('human_identifier', log.status.account.acct) + log.update_attribute('permalink', log.status.uri) + end + end - log.update_attribute('human_identifier', log.announcement.text) - end + def process_logs_for_account_warning + AdminActionLog.includes(account_warning: :account).where(target_type: 'AccountWarning', human_identifier: nil).find_each do |log| + next if log.account_warning.nil? - AdminActionLog.includes(:ip_block).where(target_type: 'IpBlock', human_identifier: nil).find_each do |log| - next if log.ip_block.nil? + log.update_attribute('human_identifier', log.account_warning.account.acct) + end + end - log.update_attribute('human_identifier', "#{log.ip_block.ip}/#{log.ip_block.ip.prefix}") - end + def process_logs_for_announcement + AdminActionLog.includes(:announcement).where(target_type: 'Announcement', human_identifier: nil).find_each do |log| + next if log.announcement.nil? - AdminActionLog.includes(:custom_emoji).where(target_type: 'CustomEmoji', human_identifier: nil).find_each do |log| - next if log.custom_emoji.nil? + log.update_attribute('human_identifier', log.announcement.text) + end + end - log.update_attribute('human_identifier', log.custom_emoji.shortcode) - end + def process_logs_for_ip_block + AdminActionLog.includes(:ip_block).where(target_type: 'IpBlock', human_identifier: nil).find_each do |log| + next if log.ip_block.nil? - AdminActionLog.includes(:canonical_email_block).where(target_type: 'CanonicalEmailBlock', human_identifier: nil).find_each do |log| - next if log.canonical_email_block.nil? + log.update_attribute('human_identifier', "#{log.ip_block.ip}/#{log.ip_block.ip.prefix}") + end + end - log.update_attribute('human_identifier', log.canonical_email_block.canonical_email_hash) - end + def process_logs_for_custom_emoji + AdminActionLog.includes(:custom_emoji).where(target_type: 'CustomEmoji', human_identifier: nil).find_each do |log| + next if log.custom_emoji.nil? - AdminActionLog.includes(appeal: :account).where(target_type: 'Appeal', human_identifier: nil).find_each do |log| - next if log.appeal.nil? + log.update_attribute('human_identifier', log.custom_emoji.shortcode) + end + end - log.update_attribute('human_identifier', log.appeal.account.acct) - log.update_attribute('route_param', log.appeal.account_warning_id) - end + def process_logs_for_canonical_email_block + AdminActionLog.includes(:canonical_email_block).where(target_type: 'CanonicalEmailBlock', human_identifier: nil).find_each do |log| + next if log.canonical_email_block.nil? + + log.update_attribute('human_identifier', log.canonical_email_block.canonical_email_hash) end end - def down; end + def process_logs_for_appeal + AdminActionLog.includes(appeal: :account).where(target_type: 'Appeal', human_identifier: nil).find_each do |log| + next if log.appeal.nil? + + log.update_attribute('human_identifier', log.appeal.account.acct) + log.update_attribute('route_param', log.appeal.account_warning_id) + end + end end diff --git a/lib/mastodon/cli/base.rb b/lib/mastodon/cli/base.rb index 32aff2fcc50451..8c222bbb2b3040 100644 --- a/lib/mastodon/cli/base.rb +++ b/lib/mastodon/cli/base.rb @@ -4,6 +4,7 @@ require_relative '../../../config/environment' require 'thor' +require 'pastel' require_relative 'progress_helper' module Mastodon diff --git a/lib/mastodon/cli/federation.rb b/lib/mastodon/cli/federation.rb index 1b4cb467a571bb..4a4dde36868a55 100644 --- a/lib/mastodon/cli/federation.rb +++ b/lib/mastodon/cli/federation.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'tty-prompt' - module Mastodon::CLI module Federation extend ActiveSupport::Concern @@ -30,45 +28,39 @@ module Federation LONG_DESC def self_destruct if SelfDestructHelper.self_destruct? - prompt.ok('Self-destruct mode is already enabled for this Mastodon server') + say('Self-destruct mode is already enabled for this Mastodon server', :green) pending_accounts = Account.local.without_suspended.count + Account.local.suspended.joins(:deletion_request).count sidekiq_stats = Sidekiq::Stats.new if pending_accounts.positive? - prompt.warn("#{pending_accounts} accounts are still pending deletion.") + say("#{pending_accounts} accounts are still pending deletion.", :yellow) elsif sidekiq_stats.enqueued.positive? - prompt.warn('Deletion notices are still being processed') + say('Deletion notices are still being processed', :yellow) elsif sidekiq_stats.retry_size.positive? - prompt.warn('At least one delivery attempt for each deletion notice has been made, but some have failed and are scheduled for retry') + say('At least one delivery attempt for each deletion notice has been made, but some have failed and are scheduled for retry', :yellow) else - prompt.ok('Every deletion notice has been sent! You can safely delete all data and decomission your servers!') + say('Every deletion notice has been sent! You can safely delete all data and decomission your servers!', :green) end exit(0) end - exit(1) unless prompt.ask('Type in the domain of the server to confirm:', required: true) == Rails.configuration.x.local_domain + exit(1) unless ask('Type in the domain of the server to confirm:') == Rails.configuration.x.local_domain - prompt.warn('This operation WILL NOT be reversible.') - prompt.warn('While the data won\'t be erased locally, the server will be in a BROKEN STATE afterwards.') - prompt.warn('The deletion process itself may take a long time, and will be handled by Sidekiq, so do not shut it down until it has finished (you will be able to re-run this command to see the state of the self-destruct process).') + say('This operation WILL NOT be reversible.', :yellow) + say('While the data won\'t be erased locally, the server will be in a BROKEN STATE afterwards.', :yellow) + say('The deletion process itself may take a long time, and will be handled by Sidekiq, so do not shut it down until it has finished (you will be able to re-run this command to see the state of the self-destruct process).', :yellow) - exit(1) if prompt.no?('Are you sure you want to proceed?') + exit(1) if no?('Are you sure you want to proceed?') self_destruct_value = Rails.application.message_verifier('self-destruct').generate(Rails.configuration.x.local_domain) - prompt.ok('To switch Mastodon to self-destruct mode, add the following variable to your evironment (e.g. by adding a line to your `.env.production`) and restart all Mastodon processes:') - prompt.ok(" SELF_DESTRUCT=#{self_destruct_value}") - prompt.ok("\nYou can re-run this command to see the state of the self-destruct process.") - rescue TTY::Reader::InputInterrupt + say('To switch Mastodon to self-destruct mode, add the following variable to your evironment (e.g. by adding a line to your `.env.production`) and restart all Mastodon processes:', :green) + say(" SELF_DESTRUCT=#{self_destruct_value}", :green) + say("\nYou can re-run this command to see the state of the self-destruct process.", :green) + rescue Interrupt exit(1) end - - private - - def prompt - @prompt ||= TTY::Prompt.new - end end end end diff --git a/lib/mastodon/cli/preview_cards.rb b/lib/mastodon/cli/preview_cards.rb index 2df3d095da0f2a..9b20a0cbb8662d 100644 --- a/lib/mastodon/cli/preview_cards.rb +++ b/lib/mastodon/cli/preview_cards.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'tty-prompt' require_relative 'base' module Mastodon::CLI diff --git a/package.json b/package.json index 39c7b9a34278a9..b791eba465a2d3 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "classnames": "^2.3.2", "cocoon-js-vanilla": "^1.3.0", "color-blend": "^4.0.0", - "compression-webpack-plugin": "patch:compression-webpack-plugin@npm%3A6.1.1#~/.yarn/patches/compression-webpack-plugin-npm-6.1.1-3a2a65987e.patch", + "compression-webpack-plugin": "^6.1.2", "core-js": "^3.30.2", "cross-env": "^7.0.3", "css-loader": "^5.2.7", @@ -169,7 +169,7 @@ "@types/react-dom": "^18.2.4", "@types/react-helmet": "^6.1.6", "@types/react-immutable-proptypes": "^2.1.0", - "@types/react-motion": "^0.0.39", + "@types/react-motion": "^0.0.40", "@types/react-overlays": "^3.1.0", "@types/react-router": "^5.1.20", "@types/react-router-dom": "^5.3.3", @@ -184,7 +184,7 @@ "@types/webpack": "^4.41.33", "@types/yargs": "^17.0.24", "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", + "@typescript-eslint/parser": "^6.17.0", "babel-jest": "^29.5.0", "eslint": "^8.41.0", "eslint-config-prettier": "^9.0.0", @@ -192,7 +192,7 @@ "eslint-import-resolver-typescript": "^3.5.5", "eslint-plugin-formatjs": "^4.10.1", "eslint-plugin-import": "~2.29.0", - "eslint-plugin-jsdoc": "^46.1.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", diff --git a/spec/lib/mastodon/cli/main_spec.rb b/spec/lib/mastodon/cli/main_spec.rb index 59f1fc47841954..081cd2dd47df0a 100644 --- a/spec/lib/mastodon/cli/main_spec.rb +++ b/spec/lib/mastodon/cli/main_spec.rb @@ -20,4 +20,157 @@ .to output_results(Mastodon::Version.to_s) end end + + describe '#self_destruct' do + let(:action) { :self_destruct } + + context 'with self destruct mode enabled' do + before do + allow(SelfDestructHelper).to receive(:self_destruct?).and_return(true) + end + + context 'with pending accounts' do + before { Fabricate(:account) } + + it 'reports about pending accounts' do + expect { subject } + .to output_results( + 'already enabled', + 'still pending deletion' + ) + .and raise_error(SystemExit) + end + end + + context 'with sidekiq notices being processed' do + before do + Account.delete_all + stats_double = instance_double(Sidekiq::Stats, enqueued: 5) + allow(Sidekiq::Stats).to receive(:new).and_return(stats_double) + end + + it 'reports about notices' do + expect { subject } + .to output_results( + 'already enabled', + 'notices are still being' + ) + .and raise_error(SystemExit) + end + end + + context 'with sidekiq failed deliveries' do + before do + Account.delete_all + stats_double = instance_double(Sidekiq::Stats, enqueued: 0, retry_size: 10) + allow(Sidekiq::Stats).to receive(:new).and_return(stats_double) + end + + it 'reports about notices' do + expect { subject } + .to output_results( + 'already enabled', + 'some have failed and are scheduled' + ) + .and raise_error(SystemExit) + end + end + + context 'with self descruct mode ready' do + before do + Account.delete_all + stats_double = instance_double(Sidekiq::Stats, enqueued: 0, retry_size: 0) + allow(Sidekiq::Stats).to receive(:new).and_return(stats_double) + end + + it 'reports about notices' do + expect { subject } + .to output_results( + 'already enabled', + 'can safely delete all data' + ) + .and raise_error(SystemExit) + end + end + end + + context 'with self destruct mode disabled' do + before do + allow(SelfDestructHelper).to receive(:self_destruct?).and_return(false) + end + + context 'with an incorrect response to hostname' do + before do + answer_hostname_incorrectly + end + + it 'exits silently' do + expect { subject } + .to raise_error(SystemExit) + end + end + + context 'with a correct response to hostname but no to proceed' do + before do + answer_hostname_correctly + decline_proceed + end + + it 'passes first step but stops before instructions' do + expect { subject } + .to output_results('operation WILL NOT') + .and raise_error(SystemExit) + end + end + + context 'with a correct response to hostname and yes to proceed' do + before do + answer_hostname_correctly + accept_proceed + end + + it 'instructs to set the appropriate environment variable' do + expect { subject } + .to output_results( + 'operation WILL NOT', + 'the following variable' + ) + end + end + + private + + def answer_hostname_incorrectly + allow(cli.shell) + .to receive(:ask) + .with('Type in the domain of the server to confirm:') + .and_return('wrong.host') + .once + end + + def answer_hostname_correctly + allow(cli.shell) + .to receive(:ask) + .with('Type in the domain of the server to confirm:') + .and_return(Rails.configuration.x.local_domain) + .once + end + + def decline_proceed + allow(cli.shell) + .to receive(:no?) + .with('Are you sure you want to proceed?') + .and_return(true) + .once + end + + def accept_proceed + allow(cli.shell) + .to receive(:no?) + .with('Are you sure you want to proceed?') + .and_return(false) + .once + end + end + end end diff --git a/spec/lib/mastodon/cli/media_spec.rb b/spec/lib/mastodon/cli/media_spec.rb index 24e1467a3ca8c9..071bcd9e34a98f 100644 --- a/spec/lib/mastodon/cli/media_spec.rb +++ b/spec/lib/mastodon/cli/media_spec.rb @@ -184,4 +184,58 @@ end end end + + describe '#remove_orphans' do + let(:action) { :remove_orphans } + + before do + FileUtils.mkdir_p Rails.public_path.join('system') + end + + context 'without any options' do + it 'runs without error' do + expect { subject } + .to output_results('Removed', 'orphans (approx') + end + end + + context 'when in azure mode' do + before do + allow(Paperclip::Attachment).to receive(:default_options).and_return(storage: :azure) + end + + it 'warns about usage and exits' do + expect { subject } + .to output_results('azure storage driver is not supported') + .and raise_error(SystemExit) + end + end + + context 'when in fog mode' do + before do + allow(Paperclip::Attachment).to receive(:default_options).and_return(storage: :fog) + end + + it 'warns about usage and exits' do + expect { subject } + .to output_results('fog storage driver is not supported') + .and raise_error(SystemExit) + end + end + + context 'when in filesystem mode' do + before do + allow(File).to receive(:delete).and_return(true) + media_attachment.delete + end + + let(:media_attachment) { Fabricate(:media_attachment) } + + it 'removes the unlinked files' do + expect { subject } + .to output_results('Removed', 'orphans (approx') + expect(File).to have_received(:delete).with(media_attachment.file.path) + end + end + end end diff --git a/spec/requests/content_security_policy_spec.rb b/spec/requests/content_security_policy_spec.rb index 7610e698cdf4cd..d4cc40bce5d976 100644 --- a/spec/requests/content_security_policy_spec.rb +++ b/spec/requests/content_security_policy_spec.rb @@ -20,7 +20,7 @@ "form-action 'self'", "child-src 'self' blob: https://cb6e6126.ngrok.io", "worker-src 'self' blob: https://cb6e6126.ngrok.io", - "connect-src 'self' data: blob: https://cb6e6126.ngrok.io ws://localhost:4000", + "connect-src 'self' data: blob: https://cb6e6126.ngrok.io ws://cb6e6126.ngrok.io:4000", "script-src 'self' https://cb6e6126.ngrok.io 'wasm-unsafe-eval'" ) end diff --git a/spec/requests/signature_verification_spec.rb b/spec/requests/signature_verification_spec.rb index b753750b840595..401828c4a3c5d1 100644 --- a/spec/requests/signature_verification_spec.rb +++ b/spec/requests/signature_verification_spec.rb @@ -94,6 +94,72 @@ end end + context 'with a valid signature on a GET request that has a query string' do + let(:signature_header) do + 'keyId="https://remote.domain/users/bob#main-key",algorithm="rsa-sha256",headers="date host (request-target)",signature="SDMa4r/DQYMXYxVgYO2yEqGWWUXugKjVuz0I8dniQAk+aunzBaF2aPu+4grBfawAshlx1Xytl8lhb0H2MllEz16/tKY7rUrb70MK0w8ohXgpb0qs3YvQgdj4X24L1x2MnkFfKHR/J+7TBlnivq0HZqXm8EIkPWLv+eQxu8fbowLwHIVvRd/3t6FzvcfsE0UZKkoMEX02542MhwSif6cu7Ec/clsY9qgKahb9JVGOGS1op9Lvg/9y1mc8KCgD83U5IxVygYeYXaVQ6gixA9NgZiTCwEWzHM5ELm7w5hpdLFYxYOHg/3G3fiqJzpzNQAcCD4S4JxfE7hMI0IzVlNLT6A=="' # rubocop:disable Layout/LineLength + end + + it 'successfuly verifies signature', :aggregate_failures do + expect(signature_header).to eq build_signature_string(actor_keypair, 'https://remote.domain/users/bob#main-key', 'get /activitypub/success?foo=42', { 'Date' => 'Wed, 20 Dec 2023 10:00:00 GMT', 'Host' => 'www.example.com' }) + + get '/activitypub/success?foo=42', headers: { + 'Host' => 'www.example.com', + 'Date' => 'Wed, 20 Dec 2023 10:00:00 GMT', + 'Signature' => signature_header, + } + + expect(response).to have_http_status(200) + expect(body_as_json).to match( + signed_request: true, + signature_actor_id: actor.id.to_s + ) + end + end + + context 'when the query string is missing from the signature verification (compatibility quirk)' do + let(:signature_header) do + 'keyId="https://remote.domain/users/bob#main-key",algorithm="rsa-sha256",headers="date host (request-target)",signature="Z8ilar3J7bOwqZkMp7sL8sRs4B1FT+UorbmvWoE+A5UeoOJ3KBcUmbsh+k3wQwbP5gMNUrra9rEWabpasZGphLsbDxfbsWL3Cf0PllAc7c1c7AFEwnewtExI83/qqgEkfWc2z7UDutXc2NfgAx89Ox8DXU/fA2GG0jILjB6UpFyNugkY9rg6oI31UnvfVi3R7sr3/x8Ea3I9thPvqI2byF6cojknSpDAwYzeKdngX3TAQEGzFHz3SDWwyp3jeMWfwvVVbM38FxhvAnSumw7YwWW4L7M7h4M68isLimoT3yfCn2ucBVL5Dz8koBpYf/40w7QidClAwCafZQFC29yDOg=="' # rubocop:disable Layout/LineLength + end + + it 'successfuly verifies signature', :aggregate_failures do + expect(signature_header).to eq build_signature_string(actor_keypair, 'https://remote.domain/users/bob#main-key', 'get /activitypub/success', { 'Date' => 'Wed, 20 Dec 2023 10:00:00 GMT', 'Host' => 'www.example.com' }) + + get '/activitypub/success?foo=42', headers: { + 'Host' => 'www.example.com', + 'Date' => 'Wed, 20 Dec 2023 10:00:00 GMT', + 'Signature' => signature_header, + } + + expect(response).to have_http_status(200) + expect(body_as_json).to match( + signed_request: true, + signature_actor_id: actor.id.to_s + ) + end + end + + context 'with mismatching query string' do + let(:signature_header) do + 'keyId="https://remote.domain/users/bob#main-key",algorithm="rsa-sha256",headers="date host (request-target)",signature="SDMa4r/DQYMXYxVgYO2yEqGWWUXugKjVuz0I8dniQAk+aunzBaF2aPu+4grBfawAshlx1Xytl8lhb0H2MllEz16/tKY7rUrb70MK0w8ohXgpb0qs3YvQgdj4X24L1x2MnkFfKHR/J+7TBlnivq0HZqXm8EIkPWLv+eQxu8fbowLwHIVvRd/3t6FzvcfsE0UZKkoMEX02542MhwSif6cu7Ec/clsY9qgKahb9JVGOGS1op9Lvg/9y1mc8KCgD83U5IxVygYeYXaVQ6gixA9NgZiTCwEWzHM5ELm7w5hpdLFYxYOHg/3G3fiqJzpzNQAcCD4S4JxfE7hMI0IzVlNLT6A=="' # rubocop:disable Layout/LineLength + end + + it 'fails to verify signature', :aggregate_failures do + expect(signature_header).to eq build_signature_string(actor_keypair, 'https://remote.domain/users/bob#main-key', 'get /activitypub/success?foo=42', { 'Date' => 'Wed, 20 Dec 2023 10:00:00 GMT', 'Host' => 'www.example.com' }) + + get '/activitypub/success?foo=43', headers: { + 'Host' => 'www.example.com', + 'Date' => 'Wed, 20 Dec 2023 10:00:00 GMT', + 'Signature' => signature_header, + } + + expect(body_as_json).to match( + signed_request: true, + signature_actor_id: nil, + error: anything + ) + end + end + context 'with a mismatching path' do it 'fails to verify signature', :aggregate_failures do get '/activitypub/alternative-path', headers: { diff --git a/streaming/Dockerfile b/streaming/Dockerfile index 6e0a84771c1798..241009fe893899 100644 --- a/streaming/Dockerfile +++ b/streaming/Dockerfile @@ -69,6 +69,7 @@ RUN \ ca-certificates \ curl \ tzdata \ + wget \ ; # Set /opt/mastodon as working directory @@ -101,4 +102,4 @@ USER mastodon # Expose default Streaming ports EXPOSE 4000 # Run streaming when started -CMD [ node ./streaming/index.js ] \ No newline at end of file +CMD [ node ./streaming/index.js ] diff --git a/yarn.lock b/yarn.lock index 2f3a53dedbc4ab..42c279cecd4e57 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,10 +12,10 @@ __metadata: languageName: node linkType: hard -"@adobe/css-tools@npm:^4.3.1": - version: 4.3.1 - resolution: "@adobe/css-tools@npm:4.3.1" - checksum: 05672719b544cc0c21ae3ed0eb6349bf458e9d09457578eeeb07cf0f696469ac6417e9c9be1b129e5d6a18098a061c1db55b2275591760ef30a79822436fcbfa +"@adobe/css-tools@npm:^4.3.2": + version: 4.3.2 + resolution: "@adobe/css-tools@npm:4.3.2" + checksum: 296a03dd29f227c60500d2da8c7f64991fecf1d8b456ce2b4adb8cec7363d9c08b5b03f1463673fc8cbfe54b538745588e7a13c736d2dd14a80c01a20f127f39 languageName: node linkType: hard @@ -60,25 +60,25 @@ __metadata: linkType: hard "@babel/core@npm:^7.10.4, @babel/core@npm:^7.11.1, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1": - version: 7.23.6 - resolution: "@babel/core@npm:7.23.6" + version: 7.23.7 + resolution: "@babel/core@npm:7.23.7" dependencies: "@ampproject/remapping": "npm:^2.2.0" "@babel/code-frame": "npm:^7.23.5" "@babel/generator": "npm:^7.23.6" "@babel/helper-compilation-targets": "npm:^7.23.6" "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helpers": "npm:^7.23.6" + "@babel/helpers": "npm:^7.23.7" "@babel/parser": "npm:^7.23.6" "@babel/template": "npm:^7.22.15" - "@babel/traverse": "npm:^7.23.6" + "@babel/traverse": "npm:^7.23.7" "@babel/types": "npm:^7.23.6" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: a02bae7d916029b70706dc301535e1b31e5d216f55d4ee6f64a15825c6b69ee2c14c52a213d1497ec414e925ed4e9d897d41fb0d75df9fea28ed2c0008790e31 + checksum: 38c9934973d384ed83369712978453eac91dc3f22167404dbdb272b64f602e74728a6f37012c53ee57e521b8ae2da60097f050497d9b6a212d28b59cdfb2cd1d languageName: node linkType: hard @@ -167,9 +167,9 @@ __metadata: languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.4.3": - version: 0.4.3 - resolution: "@babel/helper-define-polyfill-provider@npm:0.4.3" +"@babel/helper-define-polyfill-provider@npm:^0.4.4": + version: 0.4.4 + resolution: "@babel/helper-define-polyfill-provider@npm:0.4.4" dependencies: "@babel/helper-compilation-targets": "npm:^7.22.6" "@babel/helper-plugin-utils": "npm:^7.22.5" @@ -178,7 +178,7 @@ __metadata: resolve: "npm:^1.14.2" peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 0007035157e0d32ee9cb4ca319b89d6f3705523383efe52a59eb3d4dfa2ed08c5147e49c10a6e6d69c15221d89c76c8e5875475d6710fb44a5c37b8e69388e40 + checksum: 60126f5f719b9e2114df62e3bf3ac0797b71d8dc733db60192eb169b004fde72ee309fa5848c5fdfe98b8e8863c46f55e16da5aa8a4e420b4d2670cd0c5dd708 languageName: node linkType: hard @@ -342,14 +342,14 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.23.6": - version: 7.23.6 - resolution: "@babel/helpers@npm:7.23.6" +"@babel/helpers@npm:^7.23.7": + version: 7.23.7 + resolution: "@babel/helpers@npm:7.23.7" dependencies: "@babel/template": "npm:^7.22.15" - "@babel/traverse": "npm:^7.23.6" + "@babel/traverse": "npm:^7.23.7" "@babel/types": "npm:^7.23.6" - checksum: df1cf6607676ad36f52f652ec03536f2732d70aef5e76dba5c964e34d49f3c2d3dcf9fb3740db359f53071d74b64606a833d5ba156f79f437f71bfe06e2e7e19 + checksum: f74a61ad28a1bc1fdd9133ad571c07787b66d6db017c707b87c203b0cd06879cea8b33e9c6a8585765a4949efa5df3cc9e19b710fe867f11be38ee29fd4a0488 languageName: node linkType: hard @@ -397,15 +397,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.23.3" +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.23.7": + version: 7.23.7 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.23.7" dependencies: "@babel/helper-environment-visitor": "npm:^7.22.20" "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0 - checksum: 0f43b74741d50e637ba4dcef2786621126fe4da6ccf4ee2e94423ee23f6a04ecd91d458e59764c43e4968be139e5197ee43be8a2fea2c09f0b202a3391e548cc + checksum: 355746e21ad7f43e4f4daef54cfe2ef461ecd19446b2afedd53c39df1bf9aa2eeeeaabee2279b1321de89a97c9360e4f76e9ba950fee50ff1676c25f6929d625 languageName: node linkType: hard @@ -661,9 +661,9 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.23.4" +"@babel/plugin-transform-async-generator-functions@npm:^7.23.7": + version: 7.23.7 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.23.7" dependencies: "@babel/helper-environment-visitor": "npm:^7.22.20" "@babel/helper-plugin-utils": "npm:^7.22.5" @@ -671,7 +671,7 @@ __metadata: "@babel/plugin-syntax-async-generators": "npm:^7.8.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f2eef4de609975a3f7da7832576b5ffc93e43c80f87e1a99e886b0f8591096cfc4c37e2d5f52fdeaa2a9c09a25a59f3e621159abaca75d3193922a5c0e4cbe0c + checksum: 63d314edc9fbeaf2700745ca0e19bf9840e87f2d7d1f6c5638e06d2aec3e7418d0d7493ed09087e2fe369cc15e9d96c113fb2cd367cb5e3ff922e3712c27b7d4 languageName: node linkType: hard @@ -1201,18 +1201,18 @@ __metadata: linkType: hard "@babel/plugin-transform-runtime@npm:^7.22.4": - version: 7.23.6 - resolution: "@babel/plugin-transform-runtime@npm:7.23.6" + version: 7.23.7 + resolution: "@babel/plugin-transform-runtime@npm:7.23.7" dependencies: "@babel/helper-module-imports": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" - babel-plugin-polyfill-corejs2: "npm:^0.4.6" - babel-plugin-polyfill-corejs3: "npm:^0.8.5" - babel-plugin-polyfill-regenerator: "npm:^0.5.3" + babel-plugin-polyfill-corejs2: "npm:^0.4.7" + babel-plugin-polyfill-corejs3: "npm:^0.8.7" + babel-plugin-polyfill-regenerator: "npm:^0.5.4" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 94a7ee92f073df53fd8bebf9ed391a95553716077da1c6c3a57f10f042358c938495d55e6b09b4b50544c01f03560c4770c17698e1c24817a15d3668e8231249 + checksum: 0d5038462a5762c3a88d820785f685ce1b659075527a3ad538647fd9ce486052777d5aea3d62e626639d60441a04dd0ded2ed32c86b92cf8afbdbd3d54460c13 languageName: node linkType: hard @@ -1334,8 +1334,8 @@ __metadata: linkType: hard "@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.22.4": - version: 7.23.6 - resolution: "@babel/preset-env@npm:7.23.6" + version: 7.23.7 + resolution: "@babel/preset-env@npm:7.23.7" dependencies: "@babel/compat-data": "npm:^7.23.5" "@babel/helper-compilation-targets": "npm:^7.23.6" @@ -1343,7 +1343,7 @@ __metadata: "@babel/helper-validator-option": "npm:^7.23.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.23.3" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.23.7" "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators": "npm:^7.8.4" "@babel/plugin-syntax-class-properties": "npm:^7.12.13" @@ -1364,7 +1364,7 @@ __metadata: "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" "@babel/plugin-transform-arrow-functions": "npm:^7.23.3" - "@babel/plugin-transform-async-generator-functions": "npm:^7.23.4" + "@babel/plugin-transform-async-generator-functions": "npm:^7.23.7" "@babel/plugin-transform-async-to-generator": "npm:^7.23.3" "@babel/plugin-transform-block-scoped-functions": "npm:^7.23.3" "@babel/plugin-transform-block-scoping": "npm:^7.23.4" @@ -1412,14 +1412,14 @@ __metadata: "@babel/plugin-transform-unicode-regex": "npm:^7.23.3" "@babel/plugin-transform-unicode-sets-regex": "npm:^7.23.3" "@babel/preset-modules": "npm:0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2: "npm:^0.4.6" - babel-plugin-polyfill-corejs3: "npm:^0.8.5" - babel-plugin-polyfill-regenerator: "npm:^0.5.3" + babel-plugin-polyfill-corejs2: "npm:^0.4.7" + babel-plugin-polyfill-corejs3: "npm:^0.8.7" + babel-plugin-polyfill-regenerator: "npm:^0.5.4" core-js-compat: "npm:^3.31.0" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 5b24d179af52f082d04b9b98cc4777e37bf31a97cef5a91d8917e996dbd75f2f743c88c40f80744cb8529355bb674619d150c0260c32d834aa4067e21d0c8962 + checksum: ac9def873cec52ee02a550bde6e22eced16d1ae331bb8ebc82c03e4c91c12ac17e3e4027647e61612937bcc25ac46e71370aaf99dc2e85dbd11f7777ffeed54e languageName: node linkType: hard @@ -1484,11 +1484,11 @@ __metadata: linkType: hard "@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.22.3, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.23.6 - resolution: "@babel/runtime@npm:7.23.6" + version: 7.23.7 + resolution: "@babel/runtime@npm:7.23.7" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: d886954e985ef8e421222f7a2848884d96a752e0020d3078b920dd104e672fdf23bcc6f51a44313a048796319f1ac9d09c2c88ec8cbb4e1f09174bcd3335b9ff + checksum: 3e304133ee55b0750e03e53cb4efb47fb2bdcdb5795f85bbffa10595196c34b9be60eb65bd6d833c87f49fc827f0365f86f95f51d85b188004d3128bb5129c93 languageName: node linkType: hard @@ -1503,9 +1503,9 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:7, @babel/traverse@npm:^7.23.6": - version: 7.23.6 - resolution: "@babel/traverse@npm:7.23.6" +"@babel/traverse@npm:7, @babel/traverse@npm:^7.23.7": + version: 7.23.7 + resolution: "@babel/traverse@npm:7.23.7" dependencies: "@babel/code-frame": "npm:^7.23.5" "@babel/generator": "npm:^7.23.6" @@ -1517,7 +1517,7 @@ __metadata: "@babel/types": "npm:^7.23.6" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 5b4ebb94a00a7e1daf111e4b0b45a7998d5b7598637a14e75e855e88cc1b702789e09a958726b5d599a003be1e9032dbdfde4b88ea6061332228738950d5582d + checksum: e32fceb4249beec2bde83968ddffe17444221c1ee5cd18c543a2feaf94e3ca83f2a4dfbc2dcca87cf226e0105973e0fe3717063a21e982a9de9945615ab3f3f5 languageName: node linkType: hard @@ -1539,38 +1539,38 @@ __metadata: languageName: node linkType: hard -"@csstools/css-parser-algorithms@npm:^2.3.2": - version: 2.3.2 - resolution: "@csstools/css-parser-algorithms@npm:2.3.2" +"@csstools/css-parser-algorithms@npm:^2.4.0": + version: 2.5.0 + resolution: "@csstools/css-parser-algorithms@npm:2.5.0" peerDependencies: - "@csstools/css-tokenizer": ^2.2.1 - checksum: ccae373a3ab5c10716418b69ce1f6db10a26d3a2d60b65df5fe69099afe4fb1d3192925f3c0f93c3b17c3ab1964b0f39ad2b0e97312ec4a51caa55d6b6a31672 + "@csstools/css-tokenizer": ^2.2.3 + checksum: 31b4a523d956e204af9842183678cca5a88ad76551d54dcb6083f8a6f2dfd8fdec6c09bca5410842af54b90997308bebee7593c17dbc1a4e951453b54bd3f024 languageName: node linkType: hard -"@csstools/css-tokenizer@npm:^2.2.1": - version: 2.2.1 - resolution: "@csstools/css-tokenizer@npm:2.2.1" - checksum: 0c6901d291e99c567893846a47068057c2a28b3edc4219b6da589a530f55f51ddd4675f906f707b393bfe7a508ab2604bf3f75708f064db857bb277636bd5a44 +"@csstools/css-tokenizer@npm:^2.2.2": + version: 2.2.3 + resolution: "@csstools/css-tokenizer@npm:2.2.3" + checksum: 557266ec52e8b36c19008a5bbd7151effba085cdd6d68270c01afebf914981caac698eda754b2a530a8a9947a3dd70e3f3a39a5e037c4170bb2a055a92754acb languageName: node linkType: hard -"@csstools/media-query-list-parser@npm:^2.1.5": - version: 2.1.5 - resolution: "@csstools/media-query-list-parser@npm:2.1.5" +"@csstools/media-query-list-parser@npm:^2.1.6": + version: 2.1.7 + resolution: "@csstools/media-query-list-parser@npm:2.1.7" peerDependencies: - "@csstools/css-parser-algorithms": ^2.3.2 - "@csstools/css-tokenizer": ^2.2.1 - checksum: ae0692c6f92cdc82053291c7a50028b692094dfed795f0259571c5eb40f4b3fa580182ac3701e56c2834e40a62a122ea6639299e43ae88b3a835ae4c869a1a12 + "@csstools/css-parser-algorithms": ^2.5.0 + "@csstools/css-tokenizer": ^2.2.3 + checksum: 433aef06b00f1d402fd24074a1919b8e2de94245a3b780da6466c8cc9e0f3cc93d2db930f0fce36c7d6908cd50b626cd61e803d3f62dddad79eeb742858028ef languageName: node linkType: hard -"@csstools/selector-specificity@npm:^3.0.0": - version: 3.0.0 - resolution: "@csstools/selector-specificity@npm:3.0.0" +"@csstools/selector-specificity@npm:^3.0.1": + version: 3.0.1 + resolution: "@csstools/selector-specificity@npm:3.0.1" peerDependencies: postcss-selector-parser: ^6.0.13 - checksum: 6f0e2fa9a3c5dcbc7a446fd827d3eb85ca775cc884f73f0bbb119ab49b4f5f0af8763dd23a37d423f4e7989069c09bb977e7e5f017db296e1417abb1fba75c30 + checksum: 4280f494726d5e38de74e28dee2ff74ec86244560dff4edeec3ddff3ac73c774c19535bd1bb70cad77949bfb359cf87e977d0ec3264591e3b7260342a20dd84f languageName: node linkType: hard @@ -2323,7 +2323,7 @@ __metadata: "@types/react-dom": "npm:^18.2.4" "@types/react-helmet": "npm:^6.1.6" "@types/react-immutable-proptypes": "npm:^2.1.0" - "@types/react-motion": "npm:^0.0.39" + "@types/react-motion": "npm:^0.0.40" "@types/react-overlays": "npm:^3.1.0" "@types/react-router": "npm:^5.1.20" "@types/react-router-dom": "npm:^5.3.3" @@ -2338,7 +2338,7 @@ __metadata: "@types/webpack": "npm:^4.41.33" "@types/yargs": "npm:^17.0.24" "@typescript-eslint/eslint-plugin": "npm:^6.0.0" - "@typescript-eslint/parser": "npm:^6.0.0" + "@typescript-eslint/parser": "npm:^6.17.0" arrow-key-navigation: "npm:^1.2.0" async-mutex: "npm:^0.4.0" atrament: "npm:0.2.4" @@ -2355,7 +2355,7 @@ __metadata: classnames: "npm:^2.3.2" cocoon-js-vanilla: "npm:^1.3.0" color-blend: "npm:^4.0.0" - compression-webpack-plugin: "patch:compression-webpack-plugin@npm%3A6.1.1#~/.yarn/patches/compression-webpack-plugin-npm-6.1.1-3a2a65987e.patch" + compression-webpack-plugin: "npm:^6.1.2" core-js: "npm:^3.30.2" cross-env: "npm:^7.0.3" css-loader: "npm:^5.2.7" @@ -2369,7 +2369,7 @@ __metadata: 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:^46.1.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" @@ -2588,7 +2588,7 @@ __metadata: languageName: node linkType: hard -"@pkgr/utils@npm:^2.3.1": +"@pkgr/utils@npm:^2.4.2": version: 2.4.2 resolution: "@pkgr/utils@npm:2.4.2" dependencies: @@ -2897,10 +2897,10 @@ __metadata: linkType: hard "@testing-library/jest-dom@npm:^6.0.0": - version: 6.1.5 - resolution: "@testing-library/jest-dom@npm:6.1.5" + version: 6.1.6 + resolution: "@testing-library/jest-dom@npm:6.1.6" dependencies: - "@adobe/css-tools": "npm:^4.3.1" + "@adobe/css-tools": "npm:^4.3.2" "@babel/runtime": "npm:^7.9.2" aria-query: "npm:^5.0.0" chalk: "npm:^3.0.0" @@ -2922,7 +2922,7 @@ __metadata: optional: true vitest: optional: true - checksum: f3643a56fcd970b5c7e8fd10faf3c4817d8ab0e74fb1198d726643bdc5ac675ceaac3b0068c5b4fbad254470e8f98ed50028741de875a29ceaa2f854570979c9 + checksum: f98f79f3e470517469c86947d0ff1bb83ac2e59fd2a29728ab306eca5fba63c948084ec06b7b531642e6002d1f0211d918c298c628f0d386c0ef63ba881c47ba languageName: node linkType: hard @@ -3382,12 +3382,12 @@ __metadata: languageName: node linkType: hard -"@types/react-motion@npm:^0.0.39": - version: 0.0.39 - resolution: "@types/react-motion@npm:0.0.39" +"@types/react-motion@npm:^0.0.40": + version: 0.0.40 + resolution: "@types/react-motion@npm:0.0.40" dependencies: "@types/react": "npm:*" - checksum: 0dfcde777576b3c3289b4dbf2a5085decf71aba6d543697f4c1069d02ed3b543792a253692bd98870af04112c92469328a4fdb93988f93af2e099de8f2c9bc2e + checksum: 8a560051be917833fdbe051185b53aeafbe8657968ac8e073ac874b9a55c6f16e3793748b13cfb9bd6d9a3d27aba116d6f8f296ec1950f4175dc94d17c5e8470 languageName: node linkType: hard @@ -3485,13 +3485,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.45 - resolution: "@types/react@npm:18.2.45" + version: 18.2.46 + resolution: "@types/react@npm:18.2.46" dependencies: "@types/prop-types": "npm:*" "@types/scheduler": "npm:*" csstype: "npm:^3.0.2" - checksum: 4cc650c47ffb88baac29fb7a74e842e4af4a55f437086ef70250fdc75f0a5f2fcf8adc272d05ab2e00b1de6e14613296881271caee037dadf9130fdeb498c59e + checksum: 814cc67107e5e69501d65bfc371cc2c716665d2a3608d395a2f81e24c3a2875db28e2cad717dfb17017eabcffd1d68ee2c9e09ecaba3f7108d5b7fbb9888ebab languageName: node linkType: hard @@ -3672,14 +3672,14 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^6.0.0": - version: 6.14.0 - resolution: "@typescript-eslint/eslint-plugin@npm:6.14.0" + version: 6.16.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.16.0" dependencies: "@eslint-community/regexpp": "npm:^4.5.1" - "@typescript-eslint/scope-manager": "npm:6.14.0" - "@typescript-eslint/type-utils": "npm:6.14.0" - "@typescript-eslint/utils": "npm:6.14.0" - "@typescript-eslint/visitor-keys": "npm:6.14.0" + "@typescript-eslint/scope-manager": "npm:6.16.0" + "@typescript-eslint/type-utils": "npm:6.16.0" + "@typescript-eslint/utils": "npm:6.16.0" + "@typescript-eslint/visitor-keys": "npm:6.16.0" debug: "npm:^4.3.4" graphemer: "npm:^1.4.0" ignore: "npm:^5.2.4" @@ -3692,44 +3692,54 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 6360efb0e142ed91de5e9bddcd041f769feeedd256332733be08f7a74c8ae637cbfb78c6b85d747c73231bbb95cef95ed2d2854ab7d43aebfbedb3a191f447f1 + checksum: c8a68e0953d8b94f6b85d3a82090e61e670bcb0945cbee4d741321c56db727429ad47c48b8403ad1dab3b0842689bd2d4b85c99b76c51ac4f5be7f5f61c4c314 languageName: node linkType: hard -"@typescript-eslint/parser@npm:^6.0.0": - version: 6.14.0 - resolution: "@typescript-eslint/parser@npm:6.14.0" +"@typescript-eslint/parser@npm:^6.17.0": + version: 6.17.0 + resolution: "@typescript-eslint/parser@npm:6.17.0" dependencies: - "@typescript-eslint/scope-manager": "npm:6.14.0" - "@typescript-eslint/types": "npm:6.14.0" - "@typescript-eslint/typescript-estree": "npm:6.14.0" - "@typescript-eslint/visitor-keys": "npm:6.14.0" + "@typescript-eslint/scope-manager": "npm:6.17.0" + "@typescript-eslint/types": "npm:6.17.0" + "@typescript-eslint/typescript-estree": "npm:6.17.0" + "@typescript-eslint/visitor-keys": "npm:6.17.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 0344f7f640374e7e5a5b50e9c90fbd161611b3f455132e541ef9116eef7bd3acf364db64bd38d4b6b4fe148414494620c9df660f8ddce036019c38ae8e146585 + checksum: 66b53159688083eb48259de5b4daf076f3de284ac3b4d2618bda3f7ab2d8ee27b01ae851b08e8487047e33ff3668424f17d677d66413164cb231f1519dcff82f languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/scope-manager@npm:6.14.0" +"@typescript-eslint/scope-manager@npm:6.16.0": + version: 6.16.0 + resolution: "@typescript-eslint/scope-manager@npm:6.16.0" dependencies: - "@typescript-eslint/types": "npm:6.14.0" - "@typescript-eslint/visitor-keys": "npm:6.14.0" - checksum: 8c59a215af3d7d24d8d0b21c28a858263de471650829f288a941e0eb8af8a054798da5c7594b7f39370219718270c18464b5edb96f451457e5f080a33ba57c2c + "@typescript-eslint/types": "npm:6.16.0" + "@typescript-eslint/visitor-keys": "npm:6.16.0" + checksum: 3b275e528d19f4f36c4acd6cb872b5f004175512dce30cef0ac7a9121bb23d21e5e0f4b62658dbfea2b15851e7fa930372696f25a6c87492f863171ab56f5364 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/type-utils@npm:6.14.0" +"@typescript-eslint/scope-manager@npm:6.17.0": + version: 6.17.0 + resolution: "@typescript-eslint/scope-manager@npm:6.17.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:6.14.0" - "@typescript-eslint/utils": "npm:6.14.0" + "@typescript-eslint/types": "npm:6.17.0" + "@typescript-eslint/visitor-keys": "npm:6.17.0" + checksum: b7ac7d9c39515c2a1b3844577fab967bf126ec25ccf28076240748b3f42d60ab3e64131bfffee61f66251bdf2d59e50e39f5cb0bee7987c85c49140c75d26b5f + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:6.16.0": + version: 6.16.0 + resolution: "@typescript-eslint/type-utils@npm:6.16.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:6.16.0" + "@typescript-eslint/utils": "npm:6.16.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.0.1" peerDependencies: @@ -3737,59 +3747,96 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 836a6e84be5a245b07c76968c98e2f3bae064767dde720080fe8f33e226188510778dbca4199b7e42ef675ec3fd6d0ab522ec1c77d6e2a9b50e8e275fe7c72c9 + checksum: a5339cc1375d12411fcb242249143b28401fb18890bb2a1cff5275ba946affb4a2066cd8203e83ac383bd9d791a79ea6ee1cbf7a30deed5c832ed002897bbf82 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:6.16.0": + version: 6.16.0 + resolution: "@typescript-eslint/types@npm:6.16.0" + checksum: 74d9a8b7fd1b85fd1824295c92bc2f506148e450c9897f65ddaa089091017df4e25676c5b098b75c8f00529b84492f303a6b1870bb0ffee83997081325891d53 languageName: node linkType: hard -"@typescript-eslint/types@npm:6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/types@npm:6.14.0" - checksum: d59306a7a441982a4dcee7d775928fd5086aba9331f7a238f915723a0dc785df0e43af562a30a7c2f1b056a1e49fd64863a8d2450d31706193add0ade87334a4 +"@typescript-eslint/types@npm:6.17.0": + version: 6.17.0 + resolution: "@typescript-eslint/types@npm:6.17.0" + checksum: c458d985b9ab4f369018536bcb88f0aedafb0c8c4b22ffd376e0c0c768a44e3956475c85ebeef40ae44238841c8df268893477b85873aa2621995c37e738e37e languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.14.0" +"@typescript-eslint/typescript-estree@npm:6.16.0": + version: 6.16.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.16.0" dependencies: - "@typescript-eslint/types": "npm:6.14.0" - "@typescript-eslint/visitor-keys": "npm:6.14.0" + "@typescript-eslint/types": "npm:6.16.0" + "@typescript-eslint/visitor-keys": "npm:6.16.0" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" + minimatch: "npm:9.0.3" semver: "npm:^7.5.4" ts-api-utils: "npm:^1.0.1" peerDependenciesMeta: typescript: optional: true - checksum: 767c3309987b8ad053a2403605a9bd7c4eb3283dece864a741a7531a1c28eea4d85acaa4613141b64e194f9f6c4cbc5bc762c9b9f3a67c6202aa8cbb18b180d2 + checksum: c7109e90b40b3c8f1042beb7f1a7a97eeba3b6a903acd82df4947900d68bd31d04b530a190c099666c5ca4886efc162de7b42de754a44b189e41237210797d9e languageName: node linkType: hard -"@typescript-eslint/utils@npm:6.14.0, @typescript-eslint/utils@npm:^6.5.0": - version: 6.14.0 - resolution: "@typescript-eslint/utils@npm:6.14.0" +"@typescript-eslint/typescript-estree@npm:6.17.0": + version: 6.17.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.17.0" + dependencies: + "@typescript-eslint/types": "npm:6.17.0" + "@typescript-eslint/visitor-keys": "npm:6.17.0" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + minimatch: "npm:9.0.3" + semver: "npm:^7.5.4" + ts-api-utils: "npm:^1.0.1" + peerDependenciesMeta: + typescript: + optional: true + checksum: 5a858288bb05f45a2a45b04394115826ff19f85555144bfb67dc281d4e75fc3a1e1aceb3dee68022e86b91f199d1310c15bda3100a4890004b8e474d86afad51 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:6.16.0, @typescript-eslint/utils@npm:^6.5.0": + version: 6.16.0 + resolution: "@typescript-eslint/utils@npm:6.16.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" "@types/json-schema": "npm:^7.0.12" "@types/semver": "npm:^7.5.0" - "@typescript-eslint/scope-manager": "npm:6.14.0" - "@typescript-eslint/types": "npm:6.14.0" - "@typescript-eslint/typescript-estree": "npm:6.14.0" + "@typescript-eslint/scope-manager": "npm:6.16.0" + "@typescript-eslint/types": "npm:6.16.0" + "@typescript-eslint/typescript-estree": "npm:6.16.0" semver: "npm:^7.5.4" peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: 72689b2897b89e1bd1c71c1c2ae436d0ccfbcfffabf3be4378de74ad8138b2ecdbeeda7c1720e2f1754569e773f2fc7216f704335e1e56c38c7601ee1d190aeb + checksum: 586c4c0e1ca249daf9958f0d88df3af010a7592a19db1a7dc198754542b584314896536fe56ea9c93dd0ddd531154e7697002643d46e24a8d3a459721a626e91 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.14.0" +"@typescript-eslint/visitor-keys@npm:6.16.0": + version: 6.16.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.16.0" dependencies: - "@typescript-eslint/types": "npm:6.14.0" + "@typescript-eslint/types": "npm:6.16.0" eslint-visitor-keys: "npm:^3.4.1" - checksum: 0e2363f9f1986ebdb41507c54a666fa1c336eb6beb383dc342a10844d3c42c89067b21c3f158851fa6f0825e1e451a5470b5454fde70a6fc33b4b0259462d954 + checksum: 13c4d90355e288eac432d2845e37bb2acc03dab6d8568564558c1914a9aa44352f2a7ff29d0f50e0b3e68d66cca5f27b2732af5ff193b82571b4366309842880 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:6.17.0": + version: 6.17.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.17.0" + dependencies: + "@typescript-eslint/types": "npm:6.17.0" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 75a48f5810c6a69bc1c082b07d2b840c40895807b1b4ecf9d3ab9eb783176eeb3e7b11eb89d652e8331da79d604f82300f315ffc21cd937819197a8601b48d1d languageName: node linkType: hard @@ -4641,13 +4688,13 @@ __metadata: linkType: hard "axios@npm:^1.4.0": - version: 1.6.2 - resolution: "axios@npm:1.6.2" + version: 1.6.3 + resolution: "axios@npm:1.6.3" dependencies: follow-redirects: "npm:^1.15.0" form-data: "npm:^4.0.0" proxy-from-env: "npm:^1.1.0" - checksum: 9b77e030e85e4f9cbcba7bb52fbff67d6ce906c92d213e0bd932346a50140faf83733bf786f55bd58301bd92f9973885c7b87d6348023e10f7eaf286d0791a1d + checksum: dcc6d982353db33e6893ef01cdf81d0a0548dbd8fba0cb046dc4aee1a6a16226721faa4c2a13b2673d47130509629cdb93bb991b3a2bd4ef17a5ac27a8bba0da languageName: node linkType: hard @@ -4773,39 +4820,39 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs2@npm:^0.4.6": - version: 0.4.6 - resolution: "babel-plugin-polyfill-corejs2@npm:0.4.6" +"babel-plugin-polyfill-corejs2@npm:^0.4.7": + version: 0.4.7 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.7" dependencies: "@babel/compat-data": "npm:^7.22.6" - "@babel/helper-define-polyfill-provider": "npm:^0.4.3" + "@babel/helper-define-polyfill-provider": "npm:^0.4.4" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 64a98811f343492aa6970ab253760194e389c0417e5b830522f944009c1f0c78e1251975fd1b9869cd48cc4623111b20a3389cf6732a1d10ba0d19de6fa5114f + checksum: f80f7284ec72c63e7dd751e0bdf25e9978df195a79e0887470603bfdea13ee518d62573cf360bb1bc01b80819e54915dd5edce9cff14c52d0af5f984aa3d36a3 languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.8.5": - version: 0.8.5 - resolution: "babel-plugin-polyfill-corejs3@npm:0.8.5" +"babel-plugin-polyfill-corejs3@npm:^0.8.7": + version: 0.8.7 + resolution: "babel-plugin-polyfill-corejs3@npm:0.8.7" dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.4.3" - core-js-compat: "npm:^3.32.2" + "@babel/helper-define-polyfill-provider": "npm:^0.4.4" + core-js-compat: "npm:^3.33.1" peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 577a072971bda2929a87655c816ad14b6a8f7276e6914851b98a6465bdb56f7f2e3db6136c8b8607bd6ba4cde3cd9cbde21f0078250cd93aee3df977c0a731d0 + checksum: 094e40f4ab9f131408202063964d63740609fd4fdb70a5b6332b371761921b540ffbcee7a434c0199b8317dfb2ba4675eef674867215fd3b85e24054607c1501 languageName: node linkType: hard -"babel-plugin-polyfill-regenerator@npm:^0.5.3": - version: 0.5.3 - resolution: "babel-plugin-polyfill-regenerator@npm:0.5.3" +"babel-plugin-polyfill-regenerator@npm:^0.5.4": + version: 0.5.4 + resolution: "babel-plugin-polyfill-regenerator@npm:0.5.4" dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.4.3" + "@babel/helper-define-polyfill-provider": "npm:^0.4.4" peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: cc32313b9ebbf1d7bedc33524a861136b9e5d3b6e9be317ac360a1c2a59ae5ed1b465a6c68b2715cdefb089780ddfb0c11f4a148e49827a947beee76e43da598 + checksum: 0b903f5fe2f8c487b4260935dfe60bd9a95bcaee7ae63958f063045093b16d4e8288c232199d411261300aa21f6b106a3cb83c42cc996de013b337f5825a79fe languageName: node linkType: hard @@ -5160,7 +5207,7 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.21.10, browserslist@npm:^4.21.4, browserslist@npm:^4.22.1, browserslist@npm:^4.22.2": +"browserslist@npm:^4.0.0, browserslist@npm:^4.21.10, browserslist@npm:^4.21.4, browserslist@npm:^4.22.2": version: 4.22.2 resolution: "browserslist@npm:4.22.2" dependencies: @@ -5540,9 +5587,9 @@ __metadata: linkType: hard "classnames@npm:^2.2.5, classnames@npm:^2.3.2": - version: 2.3.2 - resolution: "classnames@npm:2.3.2" - checksum: cd50ead57b4f97436aaa9f9885c6926323efc7c2bea8e3d4eb10e4e972aa6a1cfca1c7a0e06f8a199ca7498d4339e30bb6002e589e61c9f21248cbf3e8b0b18d + version: 2.5.1 + resolution: "classnames@npm:2.5.1" + checksum: afff4f77e62cea2d79c39962980bf316bacb0d7c49e13a21adaadb9221e1c6b9d3cdb829d8bb1b23c406f4e740507f37e1dcf506f7e3b7113d17c5bab787aa69 languageName: node linkType: hard @@ -5790,9 +5837,9 @@ __metadata: languageName: node linkType: hard -"compression-webpack-plugin@npm:6.1.1": - version: 6.1.1 - resolution: "compression-webpack-plugin@npm:6.1.1" +"compression-webpack-plugin@npm:^6.1.2": + version: 6.1.2 + resolution: "compression-webpack-plugin@npm:6.1.2" dependencies: cacache: "npm:^15.0.5" find-cache-dir: "npm:^3.3.1" @@ -5801,22 +5848,7 @@ __metadata: webpack-sources: "npm:^1.4.3" peerDependencies: webpack: ^4.0.0 || ^5.0.0 - checksum: 2f2ac6ba8f3cf48b523efc5d8e50e0172f4676f47bf5d62f2365185a6d37e96c2dc090e74f5f30ddf4be092e2400c5c7e1fb34301f3f939acf4c9944e1356525 - languageName: node - linkType: hard - -"compression-webpack-plugin@patch:compression-webpack-plugin@npm%3A6.1.1#~/.yarn/patches/compression-webpack-plugin-npm-6.1.1-3a2a65987e.patch": - version: 6.1.1 - resolution: "compression-webpack-plugin@patch:compression-webpack-plugin@npm%3A6.1.1#~/.yarn/patches/compression-webpack-plugin-npm-6.1.1-3a2a65987e.patch::version=6.1.1&hash=129d4d" - dependencies: - cacache: "npm:^15.0.5" - find-cache-dir: "npm:^3.3.1" - schema-utils: "npm:^3.0.0" - serialize-javascript: "npm:^5.0.1" - webpack-sources: "npm:^1.4.3" - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - checksum: 68d130bcf7dcc3fd13a286dc57426640732593db4a2f326a4b159c7c32e856e2752e4d43e5f44dc42d07a0e477ad08c08d9aba029a958ad57e71f06deb42784f + checksum: 966b1417bbeaa55af8d4b7911cf4435a187adbaaff34d3e9f2ef2b7ff747877469ff965d5b653a2211eaecfd0ce8b3c834d3a8f5519aa15dd79e68bbfea0b69e languageName: node linkType: hard @@ -5921,12 +5953,12 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.32.2": - version: 3.33.1 - resolution: "core-js-compat@npm:3.33.1" +"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.33.1": + version: 3.35.0 + resolution: "core-js-compat@npm:3.35.0" dependencies: - browserslist: "npm:^4.22.1" - checksum: 9c7361b370eac30756e6ec52469988d62c6110759efa1c85edd15e6b30f05ace8319a9cc0671bf596a98e7e81c67ad693ceaab2691b85cb62c636da1afe8feb9 + browserslist: "npm:^4.22.2" + checksum: 8c4379240b8decb94b21e81d5ba6f768418721061923b28c9dfc97574680c35d778d39c010207402fc7c8308a68a4cf6d5e02bcbcb96e931c52e6e0dce29a68c languageName: node linkType: hard @@ -5938,9 +5970,9 @@ __metadata: linkType: hard "core-js@npm:^3.30.2": - version: 3.34.0 - resolution: "core-js@npm:3.34.0" - checksum: 408a77898abe03bf3e5dec2a451c36f4745081cca9022f8bdf9b817d57bb6d3a534d555f47a4b95e1daa5e21dbc79122eac2402e25720d425f5925127e55dcd8 + version: 3.35.0 + resolution: "core-js@npm:3.35.0" + checksum: 1d545ff4406f2afa5e681f44b45ed5f7f119d158b380234d5aa7787ce7e47fc7a635b98b74c28c766ba8191e3db8c2316ad6ab4ff1ddecbc3fd618413a52c29c languageName: node linkType: hard @@ -7385,9 +7417,9 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jsdoc@npm:^46.1.0": - version: 46.9.1 - resolution: "eslint-plugin-jsdoc@npm:46.9.1" +"eslint-plugin-jsdoc@npm:^48.0.0": + version: 48.0.1 + resolution: "eslint-plugin-jsdoc@npm:48.0.1" dependencies: "@es-joy/jsdoccomment": "npm:~0.41.0" are-docs-informative: "npm:^0.0.2" @@ -7399,8 +7431,8 @@ __metadata: semver: "npm:^7.5.4" spdx-expression-parse: "npm:^4.0.0" peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - checksum: d15d68797e85bb7b6fdcfc1170653683c16ab1d62c2e9c537101e774cb3231913e2bc4781f2bb808d074adce5699e5b545e450c6801b637c6434587d226ad6ac + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + checksum: 9b211cfb2e07e076dad12681cd2045c65766dd24fe9399fd0adeaf6f8785f9a4dd58608f1183195f63d3c6c91013aa1cf9edc9101580cff9cb60e1e688f456f9 languageName: node linkType: hard @@ -7431,21 +7463,22 @@ __metadata: linkType: hard "eslint-plugin-prettier@npm:^5.0.0": - version: 5.0.1 - resolution: "eslint-plugin-prettier@npm:5.0.1" + version: 5.1.2 + resolution: "eslint-plugin-prettier@npm:5.1.2" dependencies: prettier-linter-helpers: "npm:^1.0.0" - synckit: "npm:^0.8.5" + 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: 08e2c7bed93d9f7c86e9aa0bd4f5cc51f65233a446ddfda11e821f12819e1e4be62cfbc2a4e17169c76fded1c4de7371e37e5f2525e81695decaf6c652a41fb0 + checksum: e16c9fbb0e9f8da45bdbb1cf6e4a190266235c3686deede3815196d2604bbe2bac531d1fc9adc3c0b9a03d88b55bd3bfaa4f9d85e34e73dc040d545a1931fab9 languageName: node linkType: hard @@ -7977,12 +8010,12 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^7.0.2": - version: 7.0.2 - resolution: "file-entry-cache@npm:7.0.2" +"file-entry-cache@npm:^8.0.0": + version: 8.0.0 + resolution: "file-entry-cache@npm:8.0.0" dependencies: - flat-cache: "npm:^3.2.0" - checksum: 822664e35c3e295e6a8ca7ec490d8d8077017607f41f94b29922f1f49c6dd07025048e3ed528e2909a1439eba66d60f802c0774aa612cf6ee053ee4ecc16c8c5 + flat-cache: "npm:^4.0.0" + checksum: 9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638 languageName: node linkType: hard @@ -8116,7 +8149,7 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^3.0.4, flat-cache@npm:^3.2.0": +"flat-cache@npm:^3.0.4": version: 3.2.0 resolution: "flat-cache@npm:3.2.0" dependencies: @@ -8127,6 +8160,17 @@ __metadata: languageName: node linkType: hard +"flat-cache@npm:^4.0.0": + version: 4.0.0 + resolution: "flat-cache@npm:4.0.0" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.4" + rimraf: "npm:^5.0.5" + checksum: 8f99e27bb3de94e91e7b4ca5120488cdc2b7f8cd952a538f1a566101963057eb42ca318e9fac0d36987dcca34316ff04b61c1dc3dcc8084f6f5e801a52a8e547 + languageName: node + linkType: hard + "flat@npm:^5.0.2": version: 5.0.2 resolution: "flat@npm:5.0.2" @@ -10774,7 +10818,7 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^4.5.3": +"keyv@npm:^4.5.3, keyv@npm:^4.5.4": version: 4.5.4 resolution: "keyv@npm:4.5.4" dependencies: @@ -11302,10 +11346,10 @@ __metadata: languageName: node linkType: hard -"meow@npm:^12.1.1": - version: 12.1.1 - resolution: "meow@npm:12.1.1" - checksum: a125ca99a32e2306e2f4cbe651a0d27f6eb67918d43a075f6e80b35e9bf372ebf0fc3a9fbc201cbbc9516444b6265fb3c9f80c5b7ebd32f548aa93eb7c28e088 +"meow@npm:^13.0.0": + version: 13.0.0 + resolution: "meow@npm:13.0.0" + checksum: fab0f91578154c048e792a81704f3f28099ffff900f364df8a85f6e770a57e1c124859a25e186186e149dad30692c7893af0dfd71517bea343bfe5d749b1fa04 languageName: node linkType: hard @@ -11462,6 +11506,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:9.0.3, minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac + languageName: node + linkType: hard + "minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -11480,15 +11533,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.1": - version: 9.0.3 - resolution: "minimatch@npm:9.0.3" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac - languageName: node - linkType: hard - "minimist@npm:^1.2.0, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -13653,8 +13697,8 @@ __metadata: linkType: hard "react-redux-loading-bar@npm:^5.0.4": - version: 5.0.5 - resolution: "react-redux-loading-bar@npm:5.0.5" + version: 5.0.7 + resolution: "react-redux-loading-bar@npm:5.0.7" dependencies: prop-types: "npm:^15.7.2" react-lifecycles-compat: "npm:^3.0.4" @@ -13663,7 +13707,7 @@ __metadata: react-dom: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 react-redux: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 redux: ^3.0.0 || ^4.0.0 || ^5.0.0 - checksum: 0dbac046c5b8b6bd209ccfc25ccc55dc9158cd737b42b68fd1900dfe46a59c9c7e2b0082d8901b749e7cf2d7e23074590aae74f350a814f205105f47895a6214 + checksum: 45333093e7d28df923a657ad89ffe4673d7bd135ef57c0143fb4d868f21b57aeb9044691f553f7d2afbcc9080a1f8cd3cec5b274c80cb57faf0e87a70f7a2cce languageName: node linkType: hard @@ -14381,7 +14425,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^5.0.1": +"rimraf@npm:^5.0.1, rimraf@npm:^5.0.5": version: 5.0.5 resolution: "rimraf@npm:5.0.5" dependencies: @@ -14534,15 +14578,15 @@ __metadata: linkType: hard "sass@npm:^1.62.1": - version: 1.69.5 - resolution: "sass@npm:1.69.5" + version: 1.69.7 + resolution: "sass@npm:1.69.7" dependencies: chokidar: "npm:>=3.0.0 <4.0.0" immutable: "npm:^4.0.0" source-map-js: "npm:>=0.6.2 <2.0.0" bin: sass: sass.js - checksum: a9003a9482f2e467fc412cfe58ba4fa14fb78bef7e1283ce5d64a065f8a31114ec3bbf5d4e724f94eb8512c32c768a6f91f228c7f16a26a300bbf4db293b5608 + checksum: 773d0938e7d4ff3972d3fda3132f34fe98a2f712e028a58e28fecd615434795eff3266eddc38d5e13f03b90c0d6360d0e737b30bff2949a47280c64a18e0fb18 languageName: node linkType: hard @@ -15646,13 +15690,13 @@ __metadata: linkType: hard "stylelint@npm:^16.0.2": - version: 16.0.2 - resolution: "stylelint@npm:16.0.2" + version: 16.1.0 + resolution: "stylelint@npm:16.1.0" dependencies: - "@csstools/css-parser-algorithms": "npm:^2.3.2" - "@csstools/css-tokenizer": "npm:^2.2.1" - "@csstools/media-query-list-parser": "npm:^2.1.5" - "@csstools/selector-specificity": "npm:^3.0.0" + "@csstools/css-parser-algorithms": "npm:^2.4.0" + "@csstools/css-tokenizer": "npm:^2.2.2" + "@csstools/media-query-list-parser": "npm:^2.1.6" + "@csstools/selector-specificity": "npm:^3.0.1" balanced-match: "npm:^2.0.0" colord: "npm:^2.9.3" cosmiconfig: "npm:^9.0.0" @@ -15661,7 +15705,7 @@ __metadata: debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" fastest-levenshtein: "npm:^1.0.16" - file-entry-cache: "npm:^7.0.2" + file-entry-cache: "npm:^8.0.0" global-modules: "npm:^2.0.0" globby: "npm:^11.1.0" globjoin: "npm:^0.1.4" @@ -15671,7 +15715,7 @@ __metadata: is-plain-object: "npm:^5.0.0" known-css-properties: "npm:^0.29.0" mathml-tag-names: "npm:^2.1.3" - meow: "npm:^12.1.1" + meow: "npm:^13.0.0" micromatch: "npm:^4.0.5" normalize-path: "npm:^3.0.0" picocolors: "npm:^1.0.0" @@ -15689,7 +15733,7 @@ __metadata: write-file-atomic: "npm:^5.0.1" bin: stylelint: bin/stylelint.mjs - checksum: 5ec755e209beb1877ff40d50f18c1ebb05bf251925da1f98f28fb3911e4031195eb86adaf641ac5cdb01ba973f4c999bc0c6b0270d08c1d5c070adbdd9e734cf + checksum: 765eea0b07319d1e7989502c07b8b5794938e5a8542bec00990b09ec10c3f7006891689930099e948d06c9ef9982066edb98b1ea64a435138a6b0f0905eb2b87 languageName: node linkType: hard @@ -15821,13 +15865,13 @@ __metadata: languageName: node linkType: hard -"synckit@npm:^0.8.5": - version: 0.8.5 - resolution: "synckit@npm:0.8.5" +"synckit@npm:^0.8.6": + version: 0.8.6 + resolution: "synckit@npm:0.8.6" dependencies: - "@pkgr/utils": "npm:^2.3.1" - tslib: "npm:^2.5.0" - checksum: 9827f828cabc404b3a147c38f824c8d5b846eb6f65189d965aa0b71ea8ecda5048f8f50b4bdfd8813148844175233cff56c6bc8d87a7118cf10707df870519f4 + "@pkgr/utils": "npm:^2.4.2" + tslib: "npm:^2.6.2" + checksum: 200528062e3915a0190a4c6b1e01436fcfdf812e2e8d977746746f3998bb4182d758af760e51b06a64f8323e705735aff7b4b3efc4a0ab5f75eaccc044a8cfcc languageName: node linkType: hard @@ -16165,7 +16209,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.6.2, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.0": +"tslib@npm:2.6.2, tslib@npm:^2.4.0, tslib@npm:^2.6.0, tslib@npm:^2.6.2": version: 2.6.2 resolution: "tslib@npm:2.6.2" checksum: e03a8a4271152c8b26604ed45535954c0a45296e32445b4b87f8a5abdb2421f40b59b4ca437c4346af0f28179780d604094eb64546bee2019d903d01c6c19bdb @@ -17533,8 +17577,8 @@ __metadata: linkType: hard "ws@npm:^8.11.0, ws@npm:^8.12.1, ws@npm:^8.14.2": - version: 8.15.1 - resolution: "ws@npm:8.15.1" + version: 8.16.0 + resolution: "ws@npm:8.16.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -17543,7 +17587,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 9964360dd5ab35c7376bd7c4295a3c8bd44ea0838c9413742548a6fb3ec371fc6c18552d5b8e76bdc21536db1909765612815bae072674b5ec69971605395a96 + checksum: a7783bb421c648b1e622b423409cb2a58ac5839521d2f689e84bc9dc41d59379c692dd405b15a997ea1d4c0c2e5314ad707332d0c558f15232d2bc07c0b4618a languageName: node linkType: hard