diff --git a/.env.production.sample b/.env.production.sample index fa75a70c57..15bf9da4e0 100644 --- a/.env.production.sample +++ b/.env.production.sample @@ -73,6 +73,16 @@ DB_PORT=5432 SECRET_KEY_BASE= OTP_SECRET= +# Encryption secrets +# ------------------ +# Must be available (and set to same values) for all server processes +# These are private/secret values, do not share outside hosting environment +# Use `bin/rails db:encryption:init` to generate fresh secrets +# Do not change these secrets once in use, as this would cause data loss and other issues +# ------------------ +# ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY= +# ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT= +# ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY= # Web Push # -------- diff --git a/.github/ISSUE_TEMPLATE/1.web_bug_report.yml b/.github/ISSUE_TEMPLATE/1.web_bug_report.yml index 20e27d103c..f897a7d7da 100644 --- a/.github/ISSUE_TEMPLATE/1.web_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/1.web_bug_report.yml @@ -1,6 +1,7 @@ name: Bug Report (Web Interface) -description: If you are using Mastodon's web interface and something is not working as expected -labels: [bug, 'status/to triage', 'area/web interface'] +description: There is a problem using Mastodon's web interface. +labels: ['status/to triage', 'area/web interface'] +type: Bug body: - type: markdown attributes: @@ -47,8 +48,8 @@ body: attributes: label: Mastodon version description: | - This is displayed at the bottom of the About page, eg. `v4.1.2+nightly-20230627` - placeholder: v4.1.2 + This is displayed at the bottom of the About page, eg. `v4.4.0-alpha.1` + placeholder: v4.3.0 validations: required: true - type: input @@ -56,7 +57,7 @@ body: label: Browser name and version description: | What browser are you using when getting this bug? Please specify the version as well. - placeholder: Firefox 105.0.3 + placeholder: Firefox 131.0.0 validations: required: true - type: input @@ -64,7 +65,7 @@ body: label: Operating system description: | What OS are you running? Please specify the version as well. - placeholder: macOS 13.4.1 + placeholder: macOS 15.0.1 validations: required: true - type: textarea diff --git a/.github/ISSUE_TEMPLATE/2.server_bug_report.yml b/.github/ISSUE_TEMPLATE/2.server_bug_report.yml index 49d5f57209..a66f5c1076 100644 --- a/.github/ISSUE_TEMPLATE/2.server_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/2.server_bug_report.yml @@ -1,7 +1,8 @@ name: Bug Report (server / API) description: | - If something is not working as expected, but is not from using the web interface. -labels: [bug, 'status/to triage'] + There is a problem with the HTTP server, REST API, ActivityPub interaction, etc. +labels: ['status/to triage'] +type: 'Bug' body: - type: markdown attributes: @@ -48,8 +49,8 @@ body: attributes: label: Mastodon version description: | - This is displayed at the bottom of the About page, eg. `v4.1.2+nightly-20230627` - placeholder: v4.1.2 + This is displayed at the bottom of the About page, eg. `v4.4.0-alpha.1` + placeholder: v4.3.0 validations: required: false - type: textarea @@ -59,7 +60,7 @@ body: Any additional technical details you may have, like logs or error traces value: | If this is happening on your own Mastodon server, please fill out those: - - Ruby version: (from `ruby --version`, eg. v3.1.2) - - Node.js version: (from `node --version`, eg. v18.16.0) + - Ruby version: (from `ruby --version`, eg. v3.3.5) + - Node.js version: (from `node --version`, eg. v20.18.0) validations: required: false diff --git a/.github/ISSUE_TEMPLATE/3.troubleshooting.yml b/.github/ISSUE_TEMPLATE/3.troubleshooting.yml new file mode 100644 index 0000000000..eeb74b160b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/3.troubleshooting.yml @@ -0,0 +1,74 @@ +name: Deployment troubleshooting +description: | + You are a server administrator and you are encountering a technical issue during installation, upgrade or operations of Mastodon. +labels: ['status/to triage'] +type: 'Troubleshooting' +body: + - type: markdown + attributes: + value: | + Make sure that you are submitting a new bug that was not previously reported or already fixed. + + Please use a concise and distinct title for the issue. + - type: textarea + attributes: + label: Steps to reproduce the problem + description: What were you trying to do? + value: | + 1. + 2. + 3. + ... + validations: + required: true + - type: input + attributes: + label: Expected behaviour + description: What should have happened? + validations: + required: true + - type: input + attributes: + label: Actual behaviour + description: What happened? + validations: + required: true + - type: textarea + attributes: + label: Detailed description + validations: + required: false + - type: input + attributes: + label: Mastodon instance + description: The address of the Mastodon instance where you experienced the issue + placeholder: mastodon.social + validations: + required: true + - type: input + attributes: + label: Mastodon version + description: | + This is displayed at the bottom of the About page, eg. `v4.4.0-alpha.1` + placeholder: v4.3.0 + validations: + required: false + - type: textarea + attributes: + label: Environment + description: | + Details about your environment, like how Mastodon is deployed, if containers are used, version numbers, etc. + value: | + Please at least include those informations: + - Operating system: (eg. Ubuntu 22.04) + - Ruby version: (from `ruby --version`, eg. v3.3.5) + - Node.js version: (from `node --version`, eg. v20.18.0) + validations: + required: false + - type: textarea + attributes: + label: Technical details + description: | + Any additional technical details you may have, like logs or error traces + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/3.feature_request.yml b/.github/ISSUE_TEMPLATE/4.feature_request.yml similarity index 96% rename from .github/ISSUE_TEMPLATE/3.feature_request.yml rename to .github/ISSUE_TEMPLATE/4.feature_request.yml index 2cabcf61e0..7146b4f8a3 100644 --- a/.github/ISSUE_TEMPLATE/3.feature_request.yml +++ b/.github/ISSUE_TEMPLATE/4.feature_request.yml @@ -1,6 +1,6 @@ name: Feature Request description: I have a suggestion -labels: [suggestion] +type: Suggestion body: - type: markdown attributes: diff --git a/.github/workflows/test-migrations.yml b/.github/workflows/test-migrations.yml index 6a0e67c58e..5b80fef037 100644 --- a/.github/workflows/test-migrations.yml +++ b/.github/workflows/test-migrations.yml @@ -32,6 +32,8 @@ jobs: postgres: - 14-alpine - 15-alpine + - 16-alpine + - 17-alpine services: postgres: diff --git a/.github/workflows/test-ruby.yml b/.github/workflows/test-ruby.yml index 3da53c1ae8..770cd72a1b 100644 --- a/.github/workflows/test-ruby.yml +++ b/.github/workflows/test-ruby.yml @@ -124,7 +124,6 @@ jobs: fail-fast: false matrix: ruby-version: - - '3.1' - '3.2' - '.ruby-version' steps: @@ -143,7 +142,7 @@ jobs: uses: ./.github/actions/setup-ruby with: ruby-version: ${{ matrix.ruby-version}} - additional-system-dependencies: ffmpeg libpam-dev + additional-system-dependencies: ffmpeg imagemagick libpam-dev - name: Load database schema run: | @@ -226,7 +225,6 @@ jobs: fail-fast: false matrix: ruby-version: - - '3.1' - '3.2' - '.ruby-version' steps: @@ -245,7 +243,7 @@ jobs: uses: ./.github/actions/setup-ruby with: ruby-version: ${{ matrix.ruby-version}} - additional-system-dependencies: ffmpeg libpam-dev libyaml-dev + additional-system-dependencies: ffmpeg libpam-dev - name: Load database schema run: './bin/rails db:create db:schema:load db:seed' @@ -305,7 +303,6 @@ jobs: fail-fast: false matrix: ruby-version: - - '3.1' - '3.2' - '.ruby-version' @@ -325,7 +322,7 @@ jobs: uses: ./.github/actions/setup-ruby with: ruby-version: ${{ matrix.ruby-version}} - additional-system-dependencies: ffmpeg + additional-system-dependencies: ffmpeg imagemagick - name: Set up Javascript environment uses: ./.github/actions/setup-javascript @@ -422,7 +419,6 @@ jobs: fail-fast: false matrix: ruby-version: - - '3.1' - '3.2' - '.ruby-version' search-image: @@ -445,7 +441,7 @@ jobs: uses: ./.github/actions/setup-ruby with: ruby-version: ${{ matrix.ruby-version}} - additional-system-dependencies: ffmpeg + additional-system-dependencies: ffmpeg imagemagick - name: Set up Javascript environment uses: ./.github/actions/setup-javascript diff --git a/.nvmrc b/.nvmrc index 10fef252a9..8b84b727be 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.18 +22.11 diff --git a/.rubocop.yml b/.rubocop.yml index 965f56f3e7..ebeed6ea49 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -8,7 +8,7 @@ AllCops: - lib/mastodon/migration_helpers.rb ExtraDetails: true NewCops: enable - TargetRubyVersion: 3.1 # Oldest supported ruby version + TargetRubyVersion: 3.2 # Oldest supported ruby version inherit_from: - .rubocop/layout.yml diff --git a/.ruby-version b/.ruby-version index fa7adc7ac7..9c25013dbb 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.3.5 +3.3.6 diff --git a/CHANGELOG.md b/CHANGELOG.md index 566c474356..0696f0b31c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,48 @@ All notable changes to this project will be documented in this file. +## [4.3.1] - 2024-10-21 + +### Added + +- Add more explicit explanations about author attribution and `fediverse:creator` (#32383 by @ClearlyClaire) +- Add ability to group follow notifications in WebUI, can be disabled in the column settings (#32520 by @renchap) +- Add back a 6 hours mute duration option (#32522 by @renchap) +- Add note about not changing ActiveRecord encryption secrets once they are set (#32413, #32476, #32512, and #32537 by @ClearlyClaire and @mjankowski) + +### Changed + +- Change translation feature to translate to selected regional variant (e.g. pt-BR) if available (#32428 by @c960657) + +### Removed + +- Remove ability to get embed code for remote posts (#32578 by @ClearlyClaire)\ + Getting the embed code is only reliable for local posts.\ + It never worked for non-Mastodon servers, and stopped working correctly with the changes made in 4.3.0.\ + We have therefore decided to remove the menu entry while we investigate solutions. + +### Fixed + +- Fix follow recommendation moderation page default language when using regional variant (#32580 by @ClearlyClaire) +- Fix column-settings spacing in local timeline in advanced view (#32567 by @lindwurm) +- Fix broken i18n in text welcome mailer tags area (#32571 by @mjankowski) +- Fix missing or incorrect cache-control headers for Streaming server (#32551 by @ThisIsMissEm) +- Fix only the first paragraph being displayed in some notifications (#32348 by @ClearlyClaire) +- Fix reblog icons on account media view (#32506 by @tribela) +- Fix Content-Security-Policy not allowing OpenStack SWIFT object storage URI (#32439 by @kenkiku1021) +- Fix back arrow pointing to the incorrect direction in RTL languages (#32485 by @renchap) +- Fix streaming server using `REDIS_USERNAME` instead of `REDIS_USER` (#32493 by @ThisIsMissEm) +- Fix follow recommendation carrousel scrolling on RTL layouts (#32462 and #32505 by @ClearlyClaire) +- Fix follow recommendation suppressions not applying immediately (#32392 by @ClearlyClaire) +- Fix language of push notifications (#32415 by @ClearlyClaire) +- Fix mute duration not being shown in list of muted accounts in web UI (#32388 by @ClearlyClaire) +- Fix “Mark every notification as read” not updating the read marker if scrolled down (#32385 by @ClearlyClaire) +- Fix “Mention” appearing for otherwise filtered posts (#32356 by @ClearlyClaire) +- Fix notification requests from suspended accounts still being listed (#32354 by @ClearlyClaire) +- Fix list edition modal styling (#32358 and #32367 by @ClearlyClaire and @vmstan) +- Fix 4 columns barely not fitting on 1920px screen (#32361 by @ClearlyClaire) +- Fix icon alignment in applications list (#32293 by @mjankowski) + ## [4.3.0] - 2024-10-08 The following changelog entries focus on changes visible to users, administrators, client developers or federated software developers, but there has also been a lot of code modernization, refactoring, and tooling work, in particular by @mjankowski. @@ -67,7 +109,7 @@ The following changelog entries focus on changes visible to users, administrator ```html ``` - On the API side, this is represented by a new `authors` attribute to the `PreviewCard` entity: https://docs.joinmastodon.org/entities/PreviewCard/#authors\ + On the API side, this is represented by a new `authors` attribute to the `PreviewCard` entity: https://docs.joinmastodon.org/entities/PreviewCard/#authors \ Users can allow arbitrary domains to use `fediverse:creator` to credit them by visiting `/settings/verification`.\ This is federated as a new `attributionDomains` property in the `http://joinmastodon.org/ns` namespace, containing an array of domain names: https://docs.joinmastodon.org/spec/activitypub/#properties-used-1 - **Add in-app notifications for moderation actions and warnings** (#30065, #30082, and #30081 by @ClearlyClaire)\ diff --git a/Dockerfile b/Dockerfile index a5e35025ae..a6c7d46b57 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,10 +12,10 @@ ARG BUILDPLATFORM=${BUILDPLATFORM} # Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.3.x"] # renovate: datasource=docker depName=docker.io/ruby -ARG RUBY_VERSION="3.3.5" +ARG RUBY_VERSION="3.3.6" # # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"] # renovate: datasource=node-version depName=node -ARG NODE_MAJOR_VERSION="20" +ARG NODE_MAJOR_VERSION="22" # Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="bookworm"] ARG DEBIAN_VERSION="bookworm" # Node image to use for base image based on combined variables (ex: 20-bookworm-slim) @@ -191,7 +191,7 @@ FROM build AS libvips # libvips version to compile, change with [--build-arg VIPS_VERSION="8.15.2"] # renovate: datasource=github-releases depName=libvips packageName=libvips/libvips -ARG VIPS_VERSION=8.15.3 +ARG VIPS_VERSION=8.16.0 # libvips download URL, change with [--build-arg VIPS_URL="https://github.com/libvips/libvips/releases/download"] ARG VIPS_URL=https://github.com/libvips/libvips/releases/download diff --git a/Gemfile b/Gemfile index bcb19421ab..47506929b0 100644 --- a/Gemfile +++ b/Gemfile @@ -1,12 +1,12 @@ # frozen_string_literal: true source 'https://rubygems.org' -ruby '>= 3.1.0' +ruby '>= 3.2.0' gem 'propshaft' gem 'puma', '~> 6.3' gem 'rack', '~> 2.2.7' -gem 'rails', '~> 7.1.1' +gem 'rails', '~> 7.2.0' gem 'thor', '~> 1.2' gem 'dotenv' @@ -16,16 +16,16 @@ gem 'pghero' gem 'aws-sdk-s3', '~> 1.123', require: false gem 'blurhash', '~> 0.1' -gem 'fog-core', '<= 2.5.0' +gem 'fog-core', '<= 2.6.0' gem 'fog-openstack', '~> 1.0', require: false +gem 'jd-paperclip-azure', '~> 3.0', require: false gem 'kt-paperclip', '~> 7.2' -gem 'md-paperclip-azure', '~> 2.2', require: false gem 'ruby-vips', '~> 2.2', require: false gem 'active_model_serializers', '~> 0.10' gem 'addressable', '~> 2.8' gem 'bootsnap', '~> 1.18.0', require: false -gem 'browser', '< 6' # https://github.com/fnando/browser/issues/543 +gem 'browser' gem 'charlock_holmes', '~> 0.7.7' gem 'chewy', '~> 7.3' gem 'devise', '~> 4.9' @@ -47,13 +47,14 @@ gem 'color_diff', '~> 0.1' gem 'csv', '~> 3.2' gem 'discard', '~> 1.2' gem 'doorkeeper', '~> 5.6' +gem 'faraday-httpclient' gem 'fast_blank', '~> 1.0' gem 'fastimage' gem 'hiredis', '~> 0.6' gem 'htmlentities', '~> 4.3' gem 'http', '~> 5.2.0' gem 'http_accept_language', '~> 2.1' -gem 'httplog', '~> 1.7.0' +gem 'httplog', '~> 1.7.0', require: false gem 'i18n' gem 'idn-ruby', require: 'idn' gem 'inline_svg' @@ -61,7 +62,8 @@ gem 'irb', '~> 1.8' gem 'kaminari', '~> 1.2' gem 'link_header', '~> 0.0' gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock' -gem 'mime-types', '~> 3.5.0', require: 'mime/types/columnar' +gem 'mime-types', '~> 3.6.0', require: 'mime/types/columnar' +gem 'mutex_m' gem 'nokogiri', '~> 1.15' gem 'oj', '~> 3.14' gem 'ox', '~> 2.14' @@ -111,8 +113,8 @@ group :opentelemetry do gem 'opentelemetry-instrumentation-http_client', '~> 0.22.3', require: false gem 'opentelemetry-instrumentation-net_http', '~> 0.22.4', require: false gem 'opentelemetry-instrumentation-pg', '~> 0.29.0', require: false - gem 'opentelemetry-instrumentation-rack', '~> 0.24.1', require: false - gem 'opentelemetry-instrumentation-rails', '~> 0.31.0', require: false + gem 'opentelemetry-instrumentation-rack', '~> 0.25.0', require: false + gem 'opentelemetry-instrumentation-rails', '~> 0.32.0', require: false gem 'opentelemetry-instrumentation-redis', '~> 0.25.3', require: false gem 'opentelemetry-instrumentation-sidekiq', '~> 0.25.2', require: false gem 'opentelemetry-sdk', '~> 1.4', require: false @@ -220,7 +222,7 @@ gem 'concurrent-ruby', require: false gem 'connection_pool', require: false gem 'xorcist', '~> 1.1' -gem 'net-http', '~> 0.4.0' +gem 'net-http', '~> 0.5.0' gem 'rubyzip', '~> 2.3' gem 'hcaptcha', '~> 7.1' diff --git a/Gemfile.lock b/Gemfile.lock index 4c9cfe828e..106fb0d0fd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,51 +10,46 @@ GIT GEM remote: https://rubygems.org/ specs: - actioncable (7.1.4) - actionpack (= 7.1.4) - activesupport (= 7.1.4) + actioncable (7.2.2) + actionpack (= 7.2.2) + activesupport (= 7.2.2) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (7.1.4) - actionpack (= 7.1.4) - activejob (= 7.1.4) - activerecord (= 7.1.4) - activestorage (= 7.1.4) - activesupport (= 7.1.4) - mail (>= 2.7.1) - net-imap - net-pop - net-smtp - actionmailer (7.1.4) - actionpack (= 7.1.4) - actionview (= 7.1.4) - activejob (= 7.1.4) - activesupport (= 7.1.4) - mail (~> 2.5, >= 2.5.4) - net-imap - net-pop - net-smtp + actionmailbox (7.2.2) + actionpack (= 7.2.2) + activejob (= 7.2.2) + activerecord (= 7.2.2) + activestorage (= 7.2.2) + activesupport (= 7.2.2) + mail (>= 2.8.0) + actionmailer (7.2.2) + actionpack (= 7.2.2) + actionview (= 7.2.2) + activejob (= 7.2.2) + activesupport (= 7.2.2) + mail (>= 2.8.0) rails-dom-testing (~> 2.2) - actionpack (7.1.4) - actionview (= 7.1.4) - activesupport (= 7.1.4) + actionpack (7.2.2) + actionview (= 7.2.2) + activesupport (= 7.2.2) nokogiri (>= 1.8.5) racc - rack (>= 2.2.4) + rack (>= 2.2.4, < 3.2) rack-session (>= 1.0.1) rack-test (>= 0.6.3) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - actiontext (7.1.4) - actionpack (= 7.1.4) - activerecord (= 7.1.4) - activestorage (= 7.1.4) - activesupport (= 7.1.4) + useragent (~> 0.16) + actiontext (7.2.2) + actionpack (= 7.2.2) + activerecord (= 7.2.2) + activestorage (= 7.2.2) + activesupport (= 7.2.2) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.1.4) - activesupport (= 7.1.4) + actionview (7.2.2) + activesupport (= 7.2.2) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) @@ -64,31 +59,33 @@ GEM activemodel (>= 4.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) - activejob (7.1.4) - activesupport (= 7.1.4) + activejob (7.2.2) + activesupport (= 7.2.2) globalid (>= 0.3.6) - activemodel (7.1.4) - activesupport (= 7.1.4) - activerecord (7.1.4) - activemodel (= 7.1.4) - activesupport (= 7.1.4) + activemodel (7.2.2) + activesupport (= 7.2.2) + activerecord (7.2.2) + activemodel (= 7.2.2) + activesupport (= 7.2.2) timeout (>= 0.4.0) - activestorage (7.1.4) - actionpack (= 7.1.4) - activejob (= 7.1.4) - activerecord (= 7.1.4) - activesupport (= 7.1.4) + activestorage (7.2.2) + actionpack (= 7.2.2) + activejob (= 7.2.2) + activerecord (= 7.2.2) + activesupport (= 7.2.2) marcel (~> 1.0) - activesupport (7.1.4) + activesupport (7.2.2) base64 + benchmark (>= 0.3) bigdecimal - concurrent-ruby (~> 1.0, >= 1.0.2) + concurrent-ruby (~> 1.0, >= 1.3.1) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + logger (>= 1.4.2) minitest (>= 5.1) - mutex_m - tzinfo (~> 2.0) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) addressable (2.8.7) public_suffix (>= 2.0.2, < 7.0) aes_key_wrap (1.1.0) @@ -100,32 +97,27 @@ GEM attr_required (1.0.2) awrence (1.2.1) aws-eventstream (1.3.0) - aws-partitions (1.983.0) - aws-sdk-core (3.209.1) + aws-partitions (1.1004.0) + aws-sdk-core (3.212.0) aws-eventstream (~> 1, >= 1.3.0) - aws-partitions (~> 1, >= 1.651.0) + aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.94.0) - aws-sdk-core (~> 3, >= 3.207.0) + aws-sdk-kms (1.95.0) + aws-sdk-core (~> 3, >= 3.210.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.167.0) - aws-sdk-core (~> 3, >= 3.207.0) + aws-sdk-s3 (1.170.1) + aws-sdk-core (~> 3, >= 3.210.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) - aws-sigv4 (1.10.0) + aws-sigv4 (1.10.1) aws-eventstream (~> 1, >= 1.0.2) - azure-storage-blob (2.0.3) - azure-storage-common (~> 2.0) - nokogiri (~> 1, >= 1.10.8) - azure-storage-common (2.0.4) - faraday (~> 1.0) - faraday_middleware (~> 1.0, >= 1.0.0.rc1) - net-http-persistent (~> 4.0) - nokogiri (~> 1, >= 1.10.8) + azure-blob (0.5.3) + rexml base64 (0.2.0) bcp47_spec (0.2.1) bcrypt (3.1.20) + benchmark (0.4.0) better_errors (2.10.1) erubi (>= 1.0.0) rack (>= 0.9.0) @@ -137,9 +129,9 @@ GEM blurhash (0.1.8) bootsnap (1.18.4) msgpack (~> 1.2) - brakeman (6.2.1) + brakeman (6.2.2) racc - browser (5.3.1) + browser (6.1.0) brpoplpush-redis_script (0.1.3) concurrent-ruby (~> 1.0, >= 1.0.5) redis (>= 1.0, < 6) @@ -179,14 +171,14 @@ GEM bigdecimal rexml crass (1.0.6) - css_parser (1.19.0) + css_parser (1.19.1) addressable csv (3.3.0) database_cleaner-active_record (2.2.0) activerecord (>= 5.a) database_cleaner-core (~> 2.0.0) database_cleaner-core (2.0.1) - date (3.3.4) + date (3.4.0) debug (1.9.2) irb (~> 1.10) reline (>= 0.3.8) @@ -197,17 +189,17 @@ GEM railties (>= 4.1.0) responders warden (~> 1.2.3) - devise-two-factor (6.0.0) - activesupport (~> 7.0) + devise-two-factor (6.1.0) + activesupport (>= 7.0, < 8.1) devise (~> 4.0) - railties (~> 7.0) + railties (>= 7.0, < 8.1) rotp (~> 6.0) devise_pam_authenticatable2 (9.2.0) devise (>= 4.0.0) rpam2 (~> 4.0) diff-lcs (1.5.1) - discard (1.3.0) - activerecord (>= 4.2, < 8) + discard (1.4.0) + activerecord (>= 4.2, < 9.0) docile (1.4.1) domain_name (0.6.20240107) doorkeeper (5.7.1) @@ -231,38 +223,21 @@ GEM erubi (1.13.0) et-orbi (1.2.11) tzinfo - excon (0.111.0) + excon (0.112.0) fabrication (2.31.0) - faker (3.4.2) + faker (3.5.1) i18n (>= 1.8.11, < 2) - faraday (1.10.3) - faraday-em_http (~> 1.0) - faraday-em_synchrony (~> 1.0) - faraday-excon (~> 1.1) - faraday-httpclient (~> 1.0) - faraday-multipart (~> 1.0) - faraday-net_http (~> 1.0) - faraday-net_http_persistent (~> 1.0) - faraday-patron (~> 1.0) - faraday-rack (~> 1.0) - faraday-retry (~> 1.0) - ruby2_keywords (>= 0.0.4) - faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) - faraday-excon (1.1.0) - faraday-httpclient (1.0.1) - faraday-multipart (1.0.4) - multipart-post (~> 2) - faraday-net_http (1.0.2) - faraday-net_http_persistent (1.2.0) - faraday-patron (1.0.0) - faraday-rack (1.0.0) - faraday-retry (1.0.3) - faraday_middleware (1.2.0) - faraday (~> 1.0) + faraday (2.12.0) + faraday-net_http (>= 2.0, < 3.4) + json + logger + faraday-httpclient (2.0.1) + httpclient (>= 2.2) + faraday-net_http (3.3.0) + net-http fast_blank (1.0.1) fastimage (2.3.1) - ffi (1.16.3) + ffi (1.17.0) ffi-compiler (1.3.2) ffi (>= 1.15.5) rake @@ -350,8 +325,12 @@ GEM irb (1.14.1) rdoc (>= 4.0.0) reline (>= 0.4.2) + jd-paperclip-azure (3.0.0) + addressable (~> 2.5) + azure-blob (~> 0.5.2) + hashie (~> 5.0) jmespath (1.6.2) - json (2.7.2) + json (2.8.1) json-canonicalization (1.0.0) json-jwt (1.15.3.1) activesupport (>= 4.2) @@ -366,7 +345,7 @@ GEM rack (>= 2.2, < 4) rdf (~> 3.3) rexml (~> 3.2) - json-ld-preloaded (3.3.0) + json-ld-preloaded (3.3.1) json-ld (~> 3.3) rdf (~> 3.3) json-schema (5.0.1) @@ -412,7 +391,7 @@ GEM activesupport (>= 4) railties (>= 4) request_store (~> 1.0) - loofah (2.22.0) + loofah (2.23.1) crass (~> 1.0.2) nokogiri (>= 1.12.0) mail (2.8.1) @@ -424,26 +403,20 @@ GEM mario-redis-lock (1.2.1) redis (>= 3.0.5) matrix (0.4.2) - md-paperclip-azure (2.2.0) - addressable (~> 2.5) - azure-storage-blob (~> 2.0.1) - hashie (~> 5.0) memory_profiler (1.1.0) - mime-types (3.5.2) + mime-types (3.6.0) + logger mime-types-data (~> 3.2015) - mime-types-data (3.2024.0820) + mime-types-data (3.2024.1105) mini_mime (1.1.5) mini_portile2 (2.8.7) minitest (5.25.1) - msgpack (1.7.2) + msgpack (1.7.5) multi_json (1.15.0) - multipart-post (2.4.1) mutex_m (0.2.0) - net-http (0.4.1) + net-http (0.5.0) uri - net-http-persistent (4.0.2) - connection_pool (~> 2.2) - net-imap (0.4.15) + net-imap (0.5.1) date net-protocol net-ldap (0.19.0) @@ -457,7 +430,7 @@ GEM nokogiri (1.16.7) mini_portile2 (~> 2.8.2) racc (~> 1.4) - oj (3.16.6) + oj (3.16.7) bigdecimal (>= 3.0) ostruct (>= 0.2) omniauth (2.1.2) @@ -503,7 +476,7 @@ GEM opentelemetry-semantic_conventions opentelemetry-helpers-sql-obfuscation (0.2.0) opentelemetry-common (~> 0.21) - opentelemetry-instrumentation-action_mailer (0.1.0) + opentelemetry-instrumentation-action_mailer (0.2.0) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-active_support (~> 0.1) opentelemetry-instrumentation-base (~> 0.22.1) @@ -515,13 +488,13 @@ GEM opentelemetry-api (~> 1.0) opentelemetry-instrumentation-active_support (~> 0.1) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-active_job (0.7.7) + opentelemetry-instrumentation-active_job (0.7.8) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) opentelemetry-instrumentation-active_model_serializers (0.20.2) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-active_record (0.7.3) + opentelemetry-instrumentation-active_record (0.8.0) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) opentelemetry-instrumentation-active_support (0.6.0) @@ -553,16 +526,16 @@ GEM opentelemetry-api (~> 1.0) opentelemetry-helpers-sql-obfuscation opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-rack (0.24.6) + opentelemetry-instrumentation-rack (0.25.0) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-rails (0.31.2) + opentelemetry-instrumentation-rails (0.32.0) opentelemetry-api (~> 1.0) - opentelemetry-instrumentation-action_mailer (~> 0.1.0) + opentelemetry-instrumentation-action_mailer (~> 0.2.0) opentelemetry-instrumentation-action_pack (~> 0.9.0) opentelemetry-instrumentation-action_view (~> 0.7.0) opentelemetry-instrumentation-active_job (~> 0.7.0) - opentelemetry-instrumentation-active_record (~> 0.7.0) + opentelemetry-instrumentation-active_record (~> 0.8.0) opentelemetry-instrumentation-active_support (~> 0.6.0) opentelemetry-instrumentation-base (~> 0.22.1) opentelemetry-instrumentation-redis (0.25.7) @@ -581,17 +554,17 @@ GEM opentelemetry-semantic_conventions (1.10.1) opentelemetry-api (~> 1.0) orm_adapter (0.5.0) - ostruct (0.6.0) + ostruct (0.6.1) ox (2.14.18) parallel (1.26.3) - parser (3.3.5.0) + parser (3.3.6.0) ast (~> 2.4.1) racc parslet (2.0.0) pastel (0.8.0) tty-color (~> 0.5) - pg (1.5.8) - pghero (3.6.0) + pg (1.5.9) + pghero (3.6.1) activerecord (>= 6.1) premailer (1.27.0) addressable @@ -606,7 +579,7 @@ GEM activesupport (>= 7.0.0) rack railties (>= 7.0.0) - psych (5.1.2) + psych (5.2.0) stringio public_suffix (6.0.1) puma (6.4.3) @@ -638,20 +611,20 @@ GEM rackup (1.0.0) rack (< 3) webrick - rails (7.1.4) - actioncable (= 7.1.4) - actionmailbox (= 7.1.4) - actionmailer (= 7.1.4) - actionpack (= 7.1.4) - actiontext (= 7.1.4) - actionview (= 7.1.4) - activejob (= 7.1.4) - activemodel (= 7.1.4) - activerecord (= 7.1.4) - activestorage (= 7.1.4) - activesupport (= 7.1.4) + rails (7.2.2) + actioncable (= 7.2.2) + actionmailbox (= 7.2.2) + actionmailer (= 7.2.2) + actionpack (= 7.2.2) + actiontext (= 7.2.2) + actionview (= 7.2.2) + activejob (= 7.2.2) + activemodel (= 7.2.2) + activerecord (= 7.2.2) + activestorage (= 7.2.2) + activesupport (= 7.2.2) bundler (>= 1.15.0) - railties (= 7.1.4) + railties (= 7.2.2) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -663,13 +636,13 @@ GEM rails-html-sanitizer (1.6.0) loofah (~> 2.21) nokogiri (~> 1.14) - rails-i18n (7.0.9) + rails-i18n (7.0.10) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.1.4) - actionpack (= 7.1.4) - activesupport (= 7.1.4) - irb + railties (7.2.2) + actionpack (= 7.2.2) + activesupport (= 7.2.2) + irb (~> 1.13) rackup (>= 1.0.0) rake (>= 12.2) thor (~> 1.0, >= 1.2.2) @@ -691,16 +664,16 @@ GEM redlock (1.3.2) redis (>= 3.0.0, < 6.0) regexp_parser (2.9.2) - reline (0.5.10) + reline (0.5.11) io-console (~> 0.5) request_store (1.6.0) rack (>= 1.4) responders (3.1.1) actionpack (>= 5.2) railties (>= 5.2) - rexml (3.3.8) + rexml (3.3.9) rotp (6.3.0) - rouge (4.3.0) + rouge (4.5.1) rpam2 (4.0.2) rqrcode (2.2.0) chunky_png (~> 1.0) @@ -710,17 +683,17 @@ GEM rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) rspec-mocks (~> 3.13.0) - rspec-core (3.13.1) + rspec-core (3.13.2) rspec-support (~> 3.13.0) - rspec-expectations (3.13.2) + rspec-expectations (3.13.3) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) rspec-github (2.4.0) rspec-core (~> 3.0) - rspec-mocks (3.13.1) + rspec-mocks (3.13.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-rails (7.0.1) + rspec-rails (7.1.0) actionpack (>= 7.0) activesupport (>= 7.0) railties (>= 7.0) @@ -751,17 +724,17 @@ GEM rubocop-performance (1.22.1) rubocop (>= 1.48.1, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rails (2.26.2) + rubocop-rails (2.27.0) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.52.0, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rspec (3.1.0) + rubocop-rspec (3.2.0) rubocop (~> 1.61) rubocop-rspec_rails (2.30.0) rubocop (~> 1.61) rubocop-rspec (~> 3, >= 3.0.1) - ruby-prof (1.7.0) + ruby-prof (1.7.1) ruby-progressbar (1.13.0) ruby-saml (1.17.0) nokogiri (>= 1.13.10) @@ -769,7 +742,6 @@ GEM ruby-vips (2.2.2) ffi (~> 1.12) logger - ruby2_keywords (0.0.5) rubyzip (2.3.2) rufus-scheduler (3.9.1) fugit (~> 1.1, >= 1.1.6) @@ -781,7 +753,8 @@ GEM scenic (1.8.0) activerecord (>= 4.0.0) railties (>= 4.0.0) - selenium-webdriver (4.25.0) + securerandom (0.3.2) + selenium-webdriver (4.26.0) base64 (~> 0.2) logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) @@ -821,8 +794,8 @@ GEM stackprof (0.2.26) stoplight (4.1.0) redlock (~> 1.0) - stringio (3.1.1) - strong_migrations (2.0.0) + stringio (3.1.2) + strong_migrations (2.1.0) activerecord (>= 6.1) swd (1.3.0) activesupport (>= 3) @@ -837,7 +810,7 @@ GEM test-prof (1.4.2) thor (1.3.2) tilt (2.4.0) - timeout (0.4.1) + timeout (0.4.2) tpm-key_attestation (0.12.1) bindata (~> 2.4) openssl (> 2.0) @@ -864,6 +837,7 @@ GEM unf_ext (0.0.9.1) unicode-display_width (2.6.0) uri (0.13.1) + useragent (0.16.10) validate_email (0.1.6) activemodel (>= 3.0) mail (>= 2.2.5) @@ -893,7 +867,7 @@ GEM rack-proxy (>= 0.6.1) railties (>= 5.2) semantic_range (>= 2.3.0) - webrick (1.8.2) + webrick (1.9.0) websocket (1.2.11) websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) @@ -902,7 +876,7 @@ GEM xorcist (1.1.3) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.6.18) + zeitwerk (2.7.1) PLATFORMS ruby @@ -917,7 +891,7 @@ DEPENDENCIES blurhash (~> 0.1) bootsnap (~> 1.18.0) brakeman (~> 6.0) - browser (< 6) + browser bundler-audit (~> 0.9) capybara (~> 3.39) charlock_holmes (~> 0.7.7) @@ -939,10 +913,11 @@ DEPENDENCIES email_spec fabrication (~> 2.30) faker (~> 3.2) + faraday-httpclient fast_blank (~> 1.0) fastimage flatware-rspec - fog-core (<= 2.5.0) + fog-core (<= 2.6.0) fog-openstack (~> 1.0) haml-rails (~> 2.0) haml_lint @@ -957,6 +932,7 @@ DEPENDENCIES idn-ruby inline_svg irb (~> 1.8) + jd-paperclip-azure (~> 3.0) json-ld json-ld-preloaded (~> 3.2) json-schema (~> 5.0) @@ -968,10 +944,10 @@ DEPENDENCIES lograge (~> 0.12) mail (~> 2.8) mario-redis-lock (~> 1.2) - md-paperclip-azure (~> 2.2) memory_profiler - mime-types (~> 3.5.0) - net-http (~> 0.4.0) + mime-types (~> 3.6.0) + mutex_m + net-http (~> 0.5.0) net-ldap (~> 0.18) nokogiri (~> 1.15) oj (~> 3.14) @@ -991,8 +967,8 @@ DEPENDENCIES opentelemetry-instrumentation-http_client (~> 0.22.3) opentelemetry-instrumentation-net_http (~> 0.22.4) opentelemetry-instrumentation-pg (~> 0.29.0) - opentelemetry-instrumentation-rack (~> 0.24.1) - opentelemetry-instrumentation-rails (~> 0.31.0) + opentelemetry-instrumentation-rack (~> 0.25.0) + opentelemetry-instrumentation-rails (~> 0.32.0) opentelemetry-instrumentation-redis (~> 0.25.3) opentelemetry-instrumentation-sidekiq (~> 0.25.2) opentelemetry-sdk (~> 1.4) @@ -1009,7 +985,7 @@ DEPENDENCIES rack-attack (~> 6.6) rack-cors (~> 2.0) rack-test (~> 2.1) - rails (~> 7.1.1) + rails (~> 7.2.0) rails-controller-testing (~> 1.0) rails-i18n (~> 7.0) rdf-normalize (~> 0.5) @@ -1057,7 +1033,7 @@ DEPENDENCIES xorcist (~> 1.1) RUBY VERSION - ruby 3.3.4p94 + ruby 3.3.5p100 BUNDLED WITH - 2.5.18 + 2.5.22 diff --git a/README.md b/README.md index 6f61b1f9cf..b0fc720aab 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ Mastodon acts as an OAuth2 provider, so 3rd party apps can use the REST and Stre - **PostgreSQL** 12+ - **Redis** 4+ -- **Ruby** 3.1+ +- **Ruby** 3.2+ - **Node.js** 18+ The repository includes deployment configurations for **Docker and docker-compose** as well as specific platforms like **Heroku**, and **Scalingo**. For Helm charts, reference the [mastodon/chart repository](https://github.com/mastodon/chart). The [**standalone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the documentation. diff --git a/Rakefile b/Rakefile index e51cf0e17e..488c551fee 100644 --- a/Rakefile +++ b/Rakefile @@ -3,6 +3,6 @@ # Add your own tasks in files placed in lib/tasks ending in .rake, # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. -require File.expand_path('config/application', __dir__) +require_relative 'config/application' Rails.application.load_tasks diff --git a/app/controllers/activitypub/outboxes_controller.rb b/app/controllers/activitypub/outboxes_controller.rb index b8baf64e1a..0c995edbf8 100644 --- a/app/controllers/activitypub/outboxes_controller.rb +++ b/app/controllers/activitypub/outboxes_controller.rb @@ -41,11 +41,11 @@ class ActivityPub::OutboxesController < ActivityPub::BaseController end end - def outbox_url(**kwargs) + def outbox_url(**) if params[:account_username].present? - account_outbox_url(@account, **kwargs) + account_outbox_url(@account, **) else - instance_actor_outbox_url(**kwargs) + instance_actor_outbox_url(**) end end diff --git a/app/controllers/admin/email_domain_blocks_controller.rb b/app/controllers/admin/email_domain_blocks_controller.rb index faa0a061a6..9501ebd63a 100644 --- a/app/controllers/admin/email_domain_blocks_controller.rb +++ b/app/controllers/admin/email_domain_blocks_controller.rb @@ -5,7 +5,7 @@ module Admin def index authorize :email_domain_block, :index? - @email_domain_blocks = EmailDomainBlock.where(parent_id: nil).includes(:children).order(id: :desc).page(params[:page]) + @email_domain_blocks = EmailDomainBlock.parents.includes(:children).order(id: :desc).page(params[:page]) @form = Form::EmailDomainBlockBatch.new end @@ -58,10 +58,7 @@ module Admin private def set_resolved_records - Resolv::DNS.open do |dns| - dns.timeouts = 5 - @resolved_records = dns.getresources(@email_domain_block.domain, Resolv::DNS::Resource::IN::MX).to_a - end + @resolved_records = DomainResource.new(@email_domain_block.domain).mx end def resource_params diff --git a/app/controllers/admin/invites_controller.rb b/app/controllers/admin/invites_controller.rb index dabfe97655..614e2a32d0 100644 --- a/app/controllers/admin/invites_controller.rb +++ b/app/controllers/admin/invites_controller.rb @@ -32,7 +32,7 @@ module Admin def deactivate_all authorize :invite, :deactivate_all? - Invite.available.in_batches.update_all(expires_at: Time.now.utc) + Invite.available.in_batches.touch_all(:expires_at) redirect_to admin_invites_path end diff --git a/app/controllers/admin/relays_controller.rb b/app/controllers/admin/relays_controller.rb index c893802159..f05255adb6 100644 --- a/app/controllers/admin/relays_controller.rb +++ b/app/controllers/admin/relays_controller.rb @@ -21,6 +21,7 @@ module Admin @relay = Relay.new(resource_params) if @relay.save + log_action :create, @relay @relay.enable! redirect_to admin_relays_path else @@ -31,18 +32,21 @@ module Admin def destroy authorize :relay, :update? @relay.destroy + log_action :destroy, @relay redirect_to admin_relays_path end def enable authorize :relay, :update? @relay.enable! + log_action :enable, @relay redirect_to admin_relays_path end def disable authorize :relay, :update? @relay.disable! + log_action :disable, @relay redirect_to admin_relays_path end diff --git a/app/controllers/admin/statuses_controller.rb b/app/controllers/admin/statuses_controller.rb index e53b22dca3..40d1a481b2 100644 --- a/app/controllers/admin/statuses_controller.rb +++ b/app/controllers/admin/statuses_controller.rb @@ -16,6 +16,8 @@ module Admin def show authorize [:admin, @status], :show? + + @status_batch_action = Admin::StatusBatchAction.new end def batch diff --git a/app/controllers/admin/trends/links_controller.rb b/app/controllers/admin/trends/links_controller.rb index 83d68eba63..65eca11c7f 100644 --- a/app/controllers/admin/trends/links_controller.rb +++ b/app/controllers/admin/trends/links_controller.rb @@ -4,7 +4,7 @@ class Admin::Trends::LinksController < Admin::BaseController def index authorize :preview_card, :review? - @locales = PreviewCardTrend.pluck('distinct language') + @locales = PreviewCardTrend.locales @preview_cards = filtered_preview_cards.page(params[:page]) @form = Trends::PreviewCardBatch.new end diff --git a/app/controllers/admin/trends/statuses_controller.rb b/app/controllers/admin/trends/statuses_controller.rb index 3d8b53ea8a..682fe70bb5 100644 --- a/app/controllers/admin/trends/statuses_controller.rb +++ b/app/controllers/admin/trends/statuses_controller.rb @@ -4,7 +4,7 @@ class Admin::Trends::StatusesController < Admin::BaseController def index authorize [:admin, :status], :review? - @locales = StatusTrend.pluck('distinct language') + @locales = StatusTrend.locales @statuses = filtered_statuses.page(params[:page]) @form = Trends::StatusBatch.new end diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 28acaeea05..f7d3de7f94 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -106,8 +106,8 @@ class Api::V1::AccountsController < Api::BaseController render json: { error: I18n.t('accounts.self_follow_error') }, status: 403 if current_user.account.id == @account.id end - def relationships(**options) - AccountRelationshipsPresenter.new([@account], current_user.account_id, **options) + def relationships(**) + AccountRelationshipsPresenter.new([@account], current_user.account_id, **) end def account_ids diff --git a/app/controllers/api/v1/annual_reports_controller.rb b/app/controllers/api/v1/annual_reports_controller.rb index 9bc8e68ac2..b1aee288dd 100644 --- a/app/controllers/api/v1/annual_reports_controller.rb +++ b/app/controllers/api/v1/annual_reports_controller.rb @@ -17,6 +17,17 @@ class Api::V1::AnnualReportsController < Api::BaseController relationships: @relationships end + def show + with_read_replica do + @presenter = AnnualReportsPresenter.new([@annual_report]) + @relationships = StatusRelationshipsPresenter.new(@presenter.statuses, current_account.id) + end + + render json: @presenter, + serializer: REST::AnnualReportsSerializer, + relationships: @relationships + end + def read @annual_report.view! render_empty diff --git a/app/controllers/api/v1/follow_requests_controller.rb b/app/controllers/api/v1/follow_requests_controller.rb index 29a09fceef..4b44cfe531 100644 --- a/app/controllers/api/v1/follow_requests_controller.rb +++ b/app/controllers/api/v1/follow_requests_controller.rb @@ -28,8 +28,8 @@ class Api::V1::FollowRequestsController < Api::BaseController @account ||= Account.find(params[:id]) end - def relationships(**options) - AccountRelationshipsPresenter.new([account], current_user.account_id, **options) + def relationships(**) + AccountRelationshipsPresenter.new([account], current_user.account_id, **) end def load_accounts diff --git a/app/controllers/api/v1/statuses/translations_controller.rb b/app/controllers/api/v1/statuses/translations_controller.rb index 8cf495f78a..bd5cd9bb07 100644 --- a/app/controllers/api/v1/statuses/translations_controller.rb +++ b/app/controllers/api/v1/statuses/translations_controller.rb @@ -23,6 +23,6 @@ class Api::V1::Statuses::TranslationsController < Api::V1::Statuses::BaseControl private def set_translation - @translation = TranslateStatusService.new.call(@status, content_locale) + @translation = TranslateStatusService.new.call(@status, I18n.locale.to_s) end end diff --git a/app/controllers/api/web/push_subscriptions_controller.rb b/app/controllers/api/web/push_subscriptions_controller.rb index 167d16fc4d..f515961427 100644 --- a/app/controllers/api/web/push_subscriptions_controller.rb +++ b/app/controllers/api/web/push_subscriptions_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class Api::Web::PushSubscriptionsController < Api::Web::BaseController - before_action :require_user! + before_action :require_user!, except: :destroy before_action :set_push_subscription, only: :update before_action :destroy_previous_subscriptions, only: :create, if: :prior_subscriptions? after_action :update_session_with_subscription, only: :create @@ -17,6 +17,13 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer end + def destroy + push_subscription = ::Web::PushSubscription.find_by_token_for(:unsubscribe, params[:id]) + push_subscription&.destroy + + head 200 + end + private def active_session diff --git a/app/controllers/concerns/auth/captcha_concern.rb b/app/controllers/concerns/auth/captcha_concern.rb index cfd93978ce..c01da21249 100644 --- a/app/controllers/concerns/auth/captcha_concern.rb +++ b/app/controllers/concerns/auth/captcha_concern.rb @@ -10,7 +10,7 @@ module Auth::CaptchaConcern end def captcha_available? - ENV['HCAPTCHA_SECRET_KEY'].present? && ENV['HCAPTCHA_SITE_KEY'].present? + Rails.configuration.x.captcha.secret_key.present? && Rails.configuration.x.captcha.site_key.present? end def captcha_enabled? diff --git a/app/controllers/concerns/web_app_controller_concern.rb b/app/controllers/concerns/web_app_controller_concern.rb index 3447bb0d5c..5588913b15 100644 --- a/app/controllers/concerns/web_app_controller_concern.rb +++ b/app/controllers/concerns/web_app_controller_concern.rb @@ -7,7 +7,6 @@ module WebAppControllerConcern vary_by 'Accept, Accept-Language, Cookie' before_action :redirect_unauthenticated_to_permalinks! - before_action :set_app_body_class content_security_policy do |p| policy = ContentSecurityPolicy.new @@ -24,10 +23,6 @@ module WebAppControllerConcern !(ENV['ONE_CLICK_SSO_LOGIN'] == 'true' && ENV['OMNIAUTH_ONLY'] == 'true' && Devise.omniauth_providers.length == 1) && current_user.nil? end - def set_app_body_class - @body_classes = 'app-body' - end - def redirect_unauthenticated_to_permalinks! return if user_signed_in? # NOTE: Different from upstream because we allow moved users to log in diff --git a/app/controllers/oauth/authorized_applications_controller.rb b/app/controllers/oauth/authorized_applications_controller.rb index 267409a9ce..9e541e5e3c 100644 --- a/app/controllers/oauth/authorized_applications_controller.rb +++ b/app/controllers/oauth/authorized_applications_controller.rb @@ -35,12 +35,6 @@ class Oauth::AuthorizedApplicationsController < Doorkeeper::AuthorizedApplicatio end def set_last_used_at_by_app - @last_used_at_by_app = Doorkeeper::AccessToken - .select('DISTINCT ON (application_id) application_id, last_used_at') - .where(resource_owner_id: current_resource_owner.id) - .where.not(last_used_at: nil) - .order(application_id: :desc, last_used_at: :desc) - .pluck(:application_id, :last_used_at) - .to_h + @last_used_at_by_app = current_resource_owner.applications_last_used end end diff --git a/app/controllers/oauth/userinfo_controller.rb b/app/controllers/oauth/userinfo_controller.rb new file mode 100644 index 0000000000..e268b70dcc --- /dev/null +++ b/app/controllers/oauth/userinfo_controller.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class Oauth::UserinfoController < Api::BaseController + before_action -> { doorkeeper_authorize! :profile }, only: [:show] + before_action :require_user! + + def show + @account = current_account + render json: @account, serializer: OauthUserinfoSerializer + end +end diff --git a/app/helpers/admin/account_moderation_notes_helper.rb b/app/helpers/admin/account_moderation_notes_helper.rb index 2a3d954a35..7c931c1157 100644 --- a/app/helpers/admin/account_moderation_notes_helper.rb +++ b/app/helpers/admin/account_moderation_notes_helper.rb @@ -12,12 +12,12 @@ module Admin::AccountModerationNotesHelper ) end - def admin_account_inline_link_to(account) + def admin_account_inline_link_to(account, path: nil) return if account.nil? link_to( account_inline_text(account), - admin_account_path(account.id), + path || admin_account_path(account.id), class: class_names('inline-name-tag', suspended: suspended_account?(account)), title: account.acct ) diff --git a/app/helpers/admin/action_logs_helper.rb b/app/helpers/admin/action_logs_helper.rb index 51e28d8b4e..859f924687 100644 --- a/app/helpers/admin/action_logs_helper.rb +++ b/app/helpers/admin/action_logs_helper.rb @@ -33,6 +33,8 @@ module Admin::ActionLogsHelper else I18n.t('admin.action_logs.deleted_account') end + when 'Relay' + link_to log.human_identifier, admin_relays_path end end diff --git a/app/helpers/admin/settings_helper.rb b/app/helpers/admin/settings_helper.rb index 6937331e1a..9b950d5a63 100644 --- a/app/helpers/admin/settings_helper.rb +++ b/app/helpers/admin/settings_helper.rb @@ -2,7 +2,7 @@ module Admin::SettingsHelper def captcha_available? - ENV['HCAPTCHA_SECRET_KEY'].present? && ENV['HCAPTCHA_SITE_KEY'].present? + Rails.configuration.x.captcha.secret_key.present? && Rails.configuration.x.captcha.site_key.present? end def login_activity_title(activity) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 08c34a2c0b..69037e4802 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -79,7 +79,7 @@ module ApplicationHelper def html_title safe_join( - [content_for(:page_title).to_s.chomp, title] + [content_for(:page_title), title] .compact_blank, ' - ' ) @@ -120,18 +120,6 @@ module ApplicationHelper inline_svg_tag 'check.svg' end - def visibility_icon(status) - if status.public_visibility? - material_symbol('globe', title: I18n.t('statuses.visibilities.public')) - elsif status.unlisted_visibility? - material_symbol('lock_open', title: I18n.t('statuses.visibilities.unlisted')) - elsif status.private_visibility? || status.limited_visibility? - material_symbol('lock', title: I18n.t('statuses.visibilities.private')) - elsif status.direct_visibility? - material_symbol('alternate_email', title: I18n.t('statuses.visibilities.direct')) - end - end - def interrelationships_icon(relationships, account_id) if relationships.following[account_id] && relationships.followed_by[account_id] material_symbol('sync_alt', title: I18n.t('relationships.mutual'), class: 'active passive') @@ -245,18 +233,23 @@ module ApplicationHelper tag.input(type: :text, maxlength: 999, spellcheck: false, readonly: true, **options) end + def recent_tag_usage(tag) + people = tag.history.aggregate(2.days.ago.to_date..Time.zone.today).accounts + I18n.t 'user_mailer.welcome.hashtags_recent_count', people: number_with_delimiter(people), count: people + end + # glitch-soc addition to handle the multiple flavors def preload_locale_pack supported_locales = Themes.instance.flavour(current_flavour)['locales'] preload_pack_asset "locales/#{current_flavour}/#{I18n.locale}-json.js" if supported_locales.include?(I18n.locale.to_s) end - def flavoured_javascript_pack_tag(pack_name, **options) - javascript_pack_tag("flavours/#{current_flavour}/#{pack_name}", **options) + def flavoured_javascript_pack_tag(pack_name, **) + javascript_pack_tag("flavours/#{current_flavour}/#{pack_name}", **) end - def flavoured_stylesheet_pack_tag(pack_name, **options) - stylesheet_pack_tag("flavours/#{current_flavour}/#{pack_name}", **options) + def flavoured_stylesheet_pack_tag(pack_name, **) + stylesheet_pack_tag("flavours/#{current_flavour}/#{pack_name}", **) end def preload_signed_in_js_packs diff --git a/app/helpers/formatting_helper.rb b/app/helpers/formatting_helper.rb index f0d583bc54..b842aa1dc7 100644 --- a/app/helpers/formatting_helper.rb +++ b/app/helpers/formatting_helper.rb @@ -1,6 +1,14 @@ # frozen_string_literal: true module FormattingHelper + SYNDICATED_EMOJI_STYLES = <<~CSS.squish + height: 1.1em; + margin: -.2ex .15em .2ex; + object-fit: contain; + vertical-align: middle; + width: 1.1em; + CSS + def html_aware_format(text, local, options = {}) HtmlAwareFormatter.new(text, local, options).to_s end @@ -19,42 +27,33 @@ module FormattingHelper module_function :extract_status_plain_text def status_content_format(status) - html_aware_format(status.text, status.local?, preloaded_accounts: [status.account] + (status.respond_to?(:active_mentions) ? status.active_mentions.map(&:account) : []), content_type: status.content_type) + MastodonOTELTracer.in_span('HtmlAwareFormatter rendering') do |span| + span.add_attributes( + 'app.formatter.content.type' => 'status', + 'app.formatter.content.origin' => status.local? ? 'local' : 'remote' + ) + + html_aware_format(status.text, status.local?, preloaded_accounts: [status.account] + (status.respond_to?(:active_mentions) ? status.active_mentions.map(&:account) : []), content_type: status.content_type) + end end def rss_status_content_format(status) - html = status_content_format(status) - - before_html = if status.spoiler_text? - tag.p do - tag.strong do - I18n.t('rss.content_warning', locale: available_locale_or_nil(status.language) || I18n.default_locale) - end - - status.spoiler_text - end + tag.hr - end - - after_html = if status.preloadable_poll - tag.p do - safe_join( - status.preloadable_poll.options.map do |o| - tag.send(status.preloadable_poll.multiple? ? 'checkbox' : 'radio', o, disabled: true) - end, - tag.br - ) - end - end - prerender_custom_emojis( - safe_join([before_html, html, after_html]), + wrapped_status_content_format(status), status.emojis, - style: 'width: 1.1em; height: 1.1em; object-fit: contain; vertical-align: middle; margin: -.2ex .15em .2ex' + style: SYNDICATED_EMOJI_STYLES ).to_str end def account_bio_format(account) - html_aware_format(account.note, account.local?) + MastodonOTELTracer.in_span('HtmlAwareFormatter rendering') do |span| + span.add_attributes( + 'app.formatter.content.type' => 'account_bio', + 'app.formatter.content.origin' => account.local? ? 'local' : 'remote' + ) + + html_aware_format(account.note, account.local?) + end end def account_field_value_format(field, with_rel_me: true) @@ -64,4 +63,47 @@ module FormattingHelper html_aware_format(field.value, field.account.local?, with_rel_me: with_rel_me, with_domains: true, multiline: false) end end + + private + + def wrapped_status_content_format(status) + safe_join [ + rss_content_preroll(status), + status_content_format(status), + rss_content_postroll(status), + ] + end + + def rss_content_preroll(status) + if status.spoiler_text? + safe_join [ + tag.p { spoiler_with_warning(status) }, + tag.hr, + ] + end + end + + def spoiler_with_warning(status) + safe_join [ + tag.strong { I18n.t('rss.content_warning', locale: available_locale_or_nil(status.language) || I18n.default_locale) }, + status.spoiler_text, + ] + end + + def rss_content_postroll(status) + if status.preloadable_poll + tag.p do + poll_option_tags(status) + end + end + end + + def poll_option_tags(status) + safe_join( + status.preloadable_poll.options.map do |option| + tag.send(status.preloadable_poll.multiple? ? 'checkbox' : 'radio', option, disabled: true) + end, + tag.br + ) + end end diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 394202e39a..0a8ebcde54 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -162,7 +162,7 @@ module LanguagesHelper th: ['Thai', 'ไทย'].freeze, ti: ['Tigrinya', 'ትግርኛ'].freeze, tk: ['Turkmen', 'Türkmen'].freeze, - tl: ['Tagalog', 'Wikang Tagalog'].freeze, + tl: ['Tagalog', 'Tagalog'].freeze, tn: ['Tswana', 'Setswana'].freeze, to: ['Tonga', 'faka Tonga'].freeze, tr: ['Turkish', 'Türkçe'].freeze, diff --git a/app/helpers/media_component_helper.rb b/app/helpers/media_component_helper.rb index 60ccdd0835..269566528a 100644 --- a/app/helpers/media_component_helper.rb +++ b/app/helpers/media_component_helper.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module MediaComponentHelper - def render_video_component(status, **options) + def render_video_component(status, **) video = status.ordered_media_attachments.first meta = video.file.meta || {} @@ -18,14 +18,14 @@ module MediaComponentHelper media: [ serialize_media_attachment(video), ].as_json, - }.merge(**options) + }.merge(**) react_component :video, component_params do render partial: 'statuses/attachment_list', locals: { attachments: status.ordered_media_attachments } end end - def render_audio_component(status, **options) + def render_audio_component(status, **) audio = status.ordered_media_attachments.first meta = audio.file.meta || {} @@ -38,19 +38,19 @@ module MediaComponentHelper foregroundColor: meta.dig('colors', 'foreground'), accentColor: meta.dig('colors', 'accent'), duration: meta.dig('original', 'duration'), - }.merge(**options) + }.merge(**) react_component :audio, component_params do render partial: 'statuses/attachment_list', locals: { attachments: status.ordered_media_attachments } end end - def render_media_gallery_component(status, **options) + def render_media_gallery_component(status, **) component_params = { sensitive: sensitive_viewer?(status, current_account), autoplay: prefers_autoplay?, media: status.ordered_media_attachments.map { |a| serialize_media_attachment(a).as_json }, - }.merge(**options) + }.merge(**) react_component :media_gallery, component_params do render partial: 'statuses/attachment_list', locals: { attachments: status.ordered_media_attachments } diff --git a/app/helpers/registration_helper.rb b/app/helpers/registration_helper.rb index ef5462ac88..002d167c05 100644 --- a/app/helpers/registration_helper.rb +++ b/app/helpers/registration_helper.rb @@ -16,6 +16,6 @@ module RegistrationHelper end def ip_blocked?(remote_ip) - IpBlock.where(severity: :sign_up_block).exists?(['ip >>= ?', remote_ip.to_s]) + IpBlock.severity_sign_up_block.containing(remote_ip.to_s).exists? end end diff --git a/app/helpers/routing_helper.rb b/app/helpers/routing_helper.rb index 15d988f64d..22efc5f092 100644 --- a/app/helpers/routing_helper.rb +++ b/app/helpers/routing_helper.rb @@ -14,8 +14,8 @@ module RoutingHelper end end - def full_asset_url(source, **options) - source = ActionController::Base.helpers.asset_url(source, **options) unless use_storage? + def full_asset_url(source, **) + source = ActionController::Base.helpers.asset_url(source, **) unless use_storage? URI.join(asset_host, source).to_s end @@ -24,12 +24,12 @@ module RoutingHelper Rails.configuration.action_controller.asset_host || root_url end - def frontend_asset_path(source, **options) - asset_pack_path("media/#{source}", **options) + def frontend_asset_path(source, **) + asset_pack_path("media/#{source}", **) end - def frontend_asset_url(source, **options) - full_asset_url(frontend_asset_path(source, **options)) + def frontend_asset_url(source, **) + full_asset_url(frontend_asset_path(source, **)) end def use_storage? diff --git a/app/helpers/statuses_helper.rb b/app/helpers/statuses_helper.rb index bba6d64a47..9bbb03fd82 100644 --- a/app/helpers/statuses_helper.rb +++ b/app/helpers/statuses_helper.rb @@ -12,7 +12,7 @@ module StatusesHelper }.freeze def nothing_here(extra_classes = '') - content_tag(:div, class: "nothing-here #{extra_classes}") do + tag.div(class: ['nothing-here', extra_classes]) do t('accounts.nothing_here') end end diff --git a/app/javascript/entrypoints/public.tsx b/app/javascript/entrypoints/public.tsx index d33e00d5da..c1e8418014 100644 --- a/app/javascript/entrypoints/public.tsx +++ b/app/javascript/entrypoints/public.tsx @@ -327,31 +327,24 @@ Rails.delegate(document, '.input-copy button', 'click', ({ target }) => { if (!input) return; - const oldReadOnly = input.readOnly; - - input.readOnly = false; - input.focus(); - input.select(); - input.setSelectionRange(0, input.value.length); - - try { - if (document.execCommand('copy')) { - input.blur(); - + navigator.clipboard + .writeText(input.value) + .then(() => { const parent = target.parentElement; - if (!parent) return; - parent.classList.add('copied'); + if (parent) { + parent.classList.add('copied'); - setTimeout(() => { - parent.classList.remove('copied'); - }, 700); - } - } catch (err) { - console.error(err); - } + setTimeout(() => { + parent.classList.remove('copied'); + }, 700); + } - input.readOnly = oldReadOnly; + return true; + }) + .catch((error: unknown) => { + console.error(error); + }); }); const toggleSidebar = () => { diff --git a/app/javascript/flavours/glitch/actions/notification_groups.ts b/app/javascript/flavours/glitch/actions/notification_groups.ts index e39c9d6846..f85dfac933 100644 --- a/app/javascript/flavours/glitch/actions/notification_groups.ts +++ b/app/javascript/flavours/glitch/actions/notification_groups.ts @@ -8,6 +8,7 @@ import type { ApiAccountJSON } from 'flavours/glitch/api_types/accounts'; import type { ApiNotificationGroupJSON, ApiNotificationJSON, + NotificationType, } from 'flavours/glitch/api_types/notifications'; import { allNotificationTypes } from 'flavours/glitch/api_types/notifications'; import type { ApiStatusJSON } from 'flavours/glitch/api_types/statuses'; @@ -15,6 +16,7 @@ import { usePendingItems } from 'flavours/glitch/initial_state'; import type { NotificationGap } from 'flavours/glitch/reducers/notification_groups'; import { selectSettingsNotificationsExcludedTypes, + selectSettingsNotificationsGroupFollows, selectSettingsNotificationsQuickFilterActive, selectSettingsNotificationsShows, } from 'flavours/glitch/selectors/settings'; @@ -68,17 +70,19 @@ function dispatchAssociatedRecords( dispatch(importFetchedStatuses(fetchedStatuses)); } -const supportedGroupedNotificationTypes = ['favourite', 'reblog']; +function selectNotificationGroupedTypes(state: RootState) { + const types: NotificationType[] = ['favourite', 'reblog']; -export function shouldGroupNotificationType(type: string) { - return supportedGroupedNotificationTypes.includes(type); + if (selectSettingsNotificationsGroupFollows(state)) types.push('follow'); + + return types; } export const fetchNotifications = createDataLoadingThunk( 'notificationGroups/fetch', async (_params, { getState }) => apiFetchNotificationGroups({ - grouped_types: supportedGroupedNotificationTypes, + grouped_types: selectNotificationGroupedTypes(getState()), exclude_types: getExcludedTypes(getState()), }), ({ notifications, accounts, statuses }, { dispatch }) => { @@ -102,7 +106,7 @@ export const fetchNotificationsGap = createDataLoadingThunk( 'notificationGroups/fetchGap', async (params: { gap: NotificationGap }, { getState }) => apiFetchNotificationGroups({ - grouped_types: supportedGroupedNotificationTypes, + grouped_types: selectNotificationGroupedTypes(getState()), max_id: params.gap.maxId, exclude_types: getExcludedTypes(getState()), }), @@ -119,7 +123,7 @@ export const pollRecentNotifications = createDataLoadingThunk( 'notificationGroups/pollRecentNotifications', async (_params, { getState }) => { return apiFetchNotificationGroups({ - grouped_types: supportedGroupedNotificationTypes, + grouped_types: selectNotificationGroupedTypes(getState()), max_id: undefined, exclude_types: getExcludedTypes(getState()), // In slow mode, we don't want to include notifications that duplicate the already-displayed ones @@ -168,7 +172,10 @@ export const processNewNotificationForGroups = createAppAsyncThunk( dispatchAssociatedRecords(dispatch, [notification]); - return notification; + return { + notification, + groupedTypes: selectNotificationGroupedTypes(state), + }; }, ); diff --git a/app/javascript/flavours/glitch/api_types/notifications.ts b/app/javascript/flavours/glitch/api_types/notifications.ts index 0175bac0d1..1f3bc4d1eb 100644 --- a/app/javascript/flavours/glitch/api_types/notifications.ts +++ b/app/javascript/flavours/glitch/api_types/notifications.ts @@ -21,6 +21,7 @@ export const allNotificationTypes = [ 'admin.report', 'moderation_warning', 'severed_relationships', + 'annual_report', ]; export type NotificationWithStatusType = @@ -39,7 +40,8 @@ export type NotificationType = | 'moderation_warning' | 'severed_relationships' | 'admin.sign_up' - | 'admin.report'; + | 'admin.report' + | 'annual_report'; export interface BaseNotificationJSON { id: string; @@ -132,6 +134,15 @@ interface AccountRelationshipSeveranceNotificationJSON event: ApiAccountRelationshipSeveranceEventJSON; } +export interface ApiAnnualReportEventJSON { + year: string; +} + +interface AnnualReportNotificationGroupJSON extends BaseNotificationGroupJSON { + type: 'annual_report'; + annual_report: ApiAnnualReportEventJSON; +} + export type ApiNotificationJSON = | SimpleNotificationJSON | ReportNotificationJSON @@ -144,7 +155,8 @@ export type ApiNotificationGroupJSON = | ReportNotificationGroupJSON | AccountRelationshipSeveranceNotificationGroupJSON | NotificationGroupWithStatusJSON - | ModerationWarningNotificationGroupJSON; + | ModerationWarningNotificationGroupJSON + | AnnualReportNotificationGroupJSON; export interface ApiNotificationGroupsResultJSON { accounts: ApiAccountJSON[]; diff --git a/app/javascript/flavours/glitch/components/button.tsx b/app/javascript/flavours/glitch/components/button.tsx index 3e720f7cee..b349a83f2b 100644 --- a/app/javascript/flavours/glitch/components/button.tsx +++ b/app/javascript/flavours/glitch/components/button.tsx @@ -1,4 +1,4 @@ -import type { PropsWithChildren } from 'react'; +import type { PropsWithChildren, JSX } from 'react'; import { useCallback } from 'react'; import classNames from 'classnames'; diff --git a/app/javascript/flavours/glitch/components/collapse_button.jsx b/app/javascript/flavours/glitch/components/collapse_button.jsx index 36cda45361..30008f1ff9 100644 --- a/app/javascript/flavours/glitch/components/collapse_button.jsx +++ b/app/javascript/flavours/glitch/components/collapse_button.jsx @@ -19,6 +19,7 @@ export const CollapseButton = ({ collapsed, setCollapsed }) => { if (e.button === 0) { setCollapsed(!collapsed); e.preventDefault(); + e.stopPropagation(); } }, [collapsed, setCollapsed]); diff --git a/app/javascript/flavours/glitch/components/content_warning.tsx b/app/javascript/flavours/glitch/components/content_warning.tsx index 82f9ca83ed..982365b039 100644 --- a/app/javascript/flavours/glitch/components/content_warning.tsx +++ b/app/javascript/flavours/glitch/components/content_warning.tsx @@ -1,6 +1,4 @@ -/* Significantly rewritten from upstream to keep the old design for now */ - -import { FormattedMessage } from 'react-intl'; +import { StatusBanner, BannerVariant } from './status_banner'; export const ContentWarning: React.FC<{ text: string; @@ -8,20 +6,12 @@ export const ContentWarning: React.FC<{ onClick?: () => void; icons?: React.ReactNode[]; }> = ({ text, expanded, onClick, icons }) => ( -
- {' '} - -
+
+
+
+
+
rel="me"
, която предотврятява имитирането на уебсайтове с породено от потребителите съдържание. Може дори да употребите етикет за връзката
в заглавката на странице вместо а
, но HTML трябва да достъпен без изпълнение на JavaScript.
@@ -1850,6 +1876,7 @@ bg:
instructions_html: Копипейстнете кода долу в HTML на уебсайта си. Тогава добавете адреса на уебсайта си в едно от допълнителните полета на профила ви от раздела "Редактиране на профила" и запазане на промените.
verification: Проверка
verified_links: Вашите потвърдени връзки
+ website_verification: Потвърждаване на уебсайта
webauthn_credentials:
add: Добавяне на нов ключ за сигурност
create:
diff --git a/config/locales/br.yml b/config/locales/br.yml
index f9fbd34adb..098b20934f 100644
--- a/config/locales/br.yml
+++ b/config/locales/br.yml
@@ -263,7 +263,7 @@ br:
original_status: Toud orin
reblogs: Skignadennoù
status_changed: Toud kemmet
- title: Toudoù ar gont
+ title: Toudoù ar gont - @%{name}
visibility: Gwelusted
with_media: Gant mediaoù
strikes:
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index cc2da496a6..970fd99fff 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -187,6 +187,7 @@ ca:
create_domain_block: Crea un bloqueig de domini
create_email_domain_block: Crea un blocatge del domini del correu electrònic
create_ip_block: Crear regla IP
+ create_relay: Crea un repetidor
create_unavailable_domain: Crea un domini no disponible
create_user_role: Crea Rol
demote_user: Degrada l'usuari
@@ -198,14 +199,17 @@ ca:
destroy_email_domain_block: Elimina el blocatge del domini del correu electrònic
destroy_instance: Purga Domini
destroy_ip_block: Eliminar regla IP
+ destroy_relay: Esborra el repetidor
destroy_status: Elimina la publicació
destroy_unavailable_domain: Esborra domini no disponible
destroy_user_role: Destrueix Rol
disable_2fa_user: Desactiva 2FA
disable_custom_emoji: Desactiva l'emoji personalitzat
+ disable_relay: Desactiva el repetidor
disable_sign_in_token_auth_user: Desactivar l'autenticació de token per correu-e per a l'usuari
disable_user: Deshabilita l'usuari
enable_custom_emoji: Activa l'emoji personalitzat
+ enable_relay: Activa el repetidor
enable_sign_in_token_auth_user: Activar l'autenticació de token per correu-e per a l'usuari
enable_user: Activa l'usuari
memorialize_account: Memoritza el compte
@@ -247,6 +251,7 @@ ca:
create_domain_block_html: "%{name} ha bloquejat el domini %{target}"
create_email_domain_block_html: "%{name} ha blocat el domini de correu electrònic %{target}"
create_ip_block_html: "%{name} ha creat una regla per a l'IP %{target}"
+ create_relay_html: "%{name} ha creat un repetidor %{target}"
create_unavailable_domain_html: "%{name} ha aturat el lliurament al domini %{target}"
create_user_role_html: "%{name} ha creat el rol %{target}"
demote_user_html: "%{name} ha degradat l'usuari %{target}"
@@ -258,14 +263,17 @@ ca:
destroy_email_domain_block_html: "%{name} ha desblocat el domini de correu electrònic %{target}"
destroy_instance_html: "%{name} ha purgat el domini %{target}"
destroy_ip_block_html: "%{name} ha esborrat la regla per a l'IP %{target}"
+ destroy_relay_html: "%{name} ha esborrat el repetidor %{target}"
destroy_status_html: "%{name} ha eliminat el tut de %{target}"
destroy_unavailable_domain_html: "%{name} ha représ el lliurament delivery al domini %{target}"
destroy_user_role_html: "%{name} ha esborrat el rol %{target}"
disable_2fa_user_html: "%{name} ha desactivat el requisit de dos factors per a l'usuari %{target}"
disable_custom_emoji_html: "%{name} ha desactivat l'emoji %{target}"
+ disable_relay_html: "%{name} ha desactivat el repetidor %{target}"
disable_sign_in_token_auth_user_html: "%{name} ha desactivat l'autenticació de token per correu-e per a %{target}"
disable_user_html: "%{name} ha desactivat l'accés del usuari %{target}"
enable_custom_emoji_html: "%{name} ha activat l'emoji %{target}"
+ enable_relay_html: "%{name} ha activat el repetidor %{target}"
enable_sign_in_token_auth_user_html: "%{name} ha activat l'autenticació de token per correu-e per a %{target}"
enable_user_html: "%{name} ha activat l'accés del usuari %{target}"
memorialize_account_html: "%{name} ha convertit el compte %{target} en una pàgina de memorial"
@@ -833,7 +841,7 @@ ca:
original_status: Publicació original
reblogs: Impulsos
status_changed: Publicació canviada
- title: Estats del compte
+ title: Estats del compte - @%{name}
trending: Tendència
visibility: Visibilitat
with_media: Amb contingut multimèdia
@@ -1166,7 +1174,6 @@ ca:
use_security_key: Usa clau de seguretat
author_attribution:
example_title: Text d'exemple
- hint_html: Controleu com se us acredita quan els enllaços es comparteixen a Mastodon.
more_from_html: Més de %{name}
s_blog: Blog de %{name}
title: Atribució d'autor
diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml
index 88dadff014..6e1b11379c 100644
--- a/config/locales/ckb.yml
+++ b/config/locales/ckb.yml
@@ -520,7 +520,7 @@ ckb:
media:
title: میدیا
no_status_selected: هیچ دۆخیک نەگۆڕاوە وەک ئەوەی هیچ بارێک دەستنیشان نەکراوە
- title: دۆخی ئەژمێر
+ title: دۆخی ئەژمێر - @%{name}
with_media: بە میدیا
tags:
review: پێداچوونەوەی دۆخ
diff --git a/config/locales/co.yml b/config/locales/co.yml
index dad3e08ffd..b81427e833 100644
--- a/config/locales/co.yml
+++ b/config/locales/co.yml
@@ -459,7 +459,7 @@ co:
media:
title: Media
no_status_selected: I statuti ùn sò micca stati mudificati perchè manc'unu era selezziunatu
- title: Statuti di u contu
+ title: Statuti di u contu - @%{name}
with_media: Cù media
system_checks:
rules_check:
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 15211b928a..f5f7f4d731 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -826,7 +826,7 @@ cs:
original_status: Původní příspěvek
reblogs: Boosty
status_changed: Příspěvek změněn
- title: Příspěvky účtu
+ title: Příspěvky účtu - @%{name}
trending: Populární
visibility: Viditelnost
with_media: S médii
diff --git a/config/locales/cy.yml b/config/locales/cy.yml
index d57ef38696..f479f0f0a0 100644
--- a/config/locales/cy.yml
+++ b/config/locales/cy.yml
@@ -29,6 +29,7 @@ cy:
two: Postiadau
zero: Postiadau
posts_tab_heading: Postiadau
+ self_follow_error: Chewch chi ddim dilyn eich cyfrif eich hun
admin:
account_actions:
action: Cyflawni gweithred
@@ -198,6 +199,7 @@ cy:
create_domain_block: Creu Gwaharddiad Parth
create_email_domain_block: Creu Rhwystr Parth E-bost
create_ip_block: Creu rheol IP
+ create_relay: Creu Cyfnewidiad
create_unavailable_domain: Creu Parth Ddim ar Gael
create_user_role: Creu Rôl
demote_user: Diraddio Defnyddiwr
@@ -209,14 +211,17 @@ cy:
destroy_email_domain_block: Dileu Rhwystr Parth E-bost
destroy_instance: Clirio Parth
destroy_ip_block: Dileu rheol IP
+ destroy_relay: Dileu Cyfnewidiad
destroy_status: Dileu Postiad
destroy_unavailable_domain: Dileu Parth Ddim ar Gael
destroy_user_role: Dileu Rôl
disable_2fa_user: Diffodd 2FA
disable_custom_emoji: Analluogi Emoji Addasedig
+ disable_relay: Analluogi Cyfnewidiad
disable_sign_in_token_auth_user: Analluogi Dilysu Tocyn E-bost Defnyddiwr
disable_user: Analluogi Defnyddiwr
enable_custom_emoji: Galluogi Emoji Addasedig
+ enable_relay: Galluogi Cyfnewidiad
enable_sign_in_token_auth_user: Galluogi Dilysu Tocyn E-bost Defnyddiwr
enable_user: Galluogi Defnyddiwr
memorialize_account: Cofadeilio Cyfrif
@@ -258,6 +263,7 @@ cy:
create_domain_block_html: Mae %{name} wedi rhwystro parth %{target}
create_email_domain_block_html: Mae %{name} wedi rhwystro parth e-bost %{target}
create_ip_block_html: Mae %{name} wedi creu rheol ar gyfer IP %{target}
+ create_relay_html: Creodd %{name} gyfnewidiad %{target}
create_unavailable_domain_html: Mae %{name} wedi stopio danfon i barth %{target}
create_user_role_html: Mae %{name} wedi creu rôl %{target}
demote_user_html: Mae %{name} wedi israddio defnyddiwr %{target}
@@ -269,14 +275,17 @@ cy:
destroy_email_domain_block_html: Mae %{name} wedi dad-rwystro parth e-bost %{target}
destroy_instance_html: Mae %{name} wedi dileu parth %{target}
destroy_ip_block_html: Mae %{name} dileu rheol ar gyfer IP %{target}
+ destroy_relay_html: Dileodd %{name} y cyfnewidiad %{target}
destroy_status_html: Mae %{name} wedi tynnu postiad gan %{target}
destroy_unavailable_domain_html: Mae %{name} wedi ailddechrau anfon i barth %{target}
destroy_user_role_html: Mae %{name} wedi dileu rôl %{target}
disable_2fa_user_html: Mae %{name} wedi analluogi gofyniad dau ffactor ar gyfer defnyddiwr %{target}
disable_custom_emoji_html: Mae %{name} wedi analluogi emoji %{target}
+ disable_relay_html: Analluogodd %{name} y cyfnewidiad %{target}
disable_sign_in_token_auth_user_html: Mae %{name} wedi analluogi dilysiad tocyn e-bost %{target}
disable_user_html: Mae %{name} wedi analluogi mewngofnodi defnyddiwr %{target}
enable_custom_emoji_html: Mae %{name} wedi analluogi emoji %{target}
+ enable_relay_html: Galluogodd %{name} y cyfnewidiad %{target}
enable_sign_in_token_auth_user_html: Mae %{name} wedi galluogi dilysiad tocyn e-bost %{target}
enable_user_html: Mae %{name} wedi galluogi mewngofnodi defnyddiwr %{target}
memorialize_account_html: Newidiodd %{name} gyfrif %{target} i dudalen memoriam
@@ -888,7 +897,7 @@ cy:
original_status: Postiad gwreiddiol
reblogs: Ailflogiadau
status_changed: Postiad wedi'i newid
- title: Postiadau cyfrif
+ title: Postiadau cyfrif - @%{name}
trending: Yn trendio
visibility: Gwelededd
with_media: Gyda chyfryngau
@@ -918,7 +927,7 @@ cy:
message_html: Mae gan eich clwstwr Elasticsearch fwy nag un nod, ond nid yw Mastodon wedi'i ffurfweddu i'w defnyddio.
elasticsearch_preset_single_node:
action: Darllenwch y ddogfennaeth
- message_html: Dim ond un nod sydd gan eich clwstwr Elasticsearch, mae angen gosod ES_PRESET
i single_node_cluster
.
+ message_html: Dim ond un nod sydd gan eich clwstwr Elasticsearch, mae angen gosod ES_PRESET
i single_node_cluster
.
elasticsearch_reset_chewy:
message_html: Mae eich mynegai system Elasticsearch wedi dyddio oherwydd newid gosodiad. Rhedwch chwiliad tootctl search deploy --reset-chewy
i'w ddiweddaru.
elasticsearch_running_check:
@@ -1062,7 +1071,7 @@ cy:
webhooks:
add_new: Ychwanegu diweddbwynt
delete: Dileu
- description_html: Mae bachyn gwe yn galluogi Mastodon i wthio hysbysiadau amser real am ddigwyddiadau a ddewiswyd i'ch cais eich hun, fel y gall eich cais ysgogi ymatebion yn awtomatig .
+ description_html: Mae bachyn gwe yn galluogi Mastodon i wthio hysbysiadau amser real am ddigwyddiadau a ddewiswyd i'ch cais eich hun, fel y gall eich cais ysgogi ymatebion yn awtomatig.
disable: Analluogi
disabled: Wedi'i analluogi
edit: Golygu diweddbwynt
@@ -1126,7 +1135,7 @@ cy:
created_msg: Wedi creu enw arall yn llwyddiannus. Gallwch nawr ddechrau symud o'r hen gyfrif.
deleted_msg: Wedi tynnu enw arall yn llwyddiannus. Ni fydd symud o'r cyfrif hynny i'r cyfrif hon yn bosib.
empty: Nid oes gennych enwau eraill.
- hint_html: Os ydych chi am symud o gyfrif arall i'r un hwn, gallwch greu enw arall yma, sy'n ofynnol cyn y gallwch symud ymlaen i symud dilynwyr o'r hen gyfrif i'r un hwn. Mae'r weithred hon ynddo'i hun yn ddiniwed ac yn wrthdroadwy. Mae'r mudo cyfrif yn cael ei wneud o'r hen gyfrif .
+ hint_html: Os ydych chi am symud o gyfrif arall i'r un hwn, gallwch greu enw arall yma, sy'n ofynnol cyn y gallwch symud ymlaen i symud dilynwyr o'r hen gyfrif i'r un hwn. Mae'r weithred hon ynddo'i hun yn ddiniwed ac yn wrthdroadwy. Mae'r mudo cyfrif yn cael ei wneud o'r hen gyfrif.
remove: Dadgysylltu'r enw arall
appearance:
advanced_web_interface: Rhyngwyneb gwe uwch
@@ -1237,9 +1246,11 @@ cy:
use_security_key: Defnyddiwch allwedd diogelwch
author_attribution:
example_title: Testun enghreifftiol
- hint_html: Rheolwch sut rydych chi'n cael eich canmol pan fydd dolenni'n cael eu rhannu ar Mastodon.
+ hint_html: Ydych chi'n ysgrifennu erthyglau newyddion neu flog y tu allan i Mastodon? Rheolwch sut y byddwch yn cael eich cydnabod pan fyddan nhw'n cael eu rhannu ar Mastodon.
+ instructions: 'Gwnewch yn siŵr fod y cod hwn yn HTML eich erthygl:'
more_from_html: Mwy gan %{name}
s_blog: Blog %{name}
+ then_instructions: Yna, ychwanegwch enw parth y cyhoeddiad yn y maes isod.
title: Priodoliad awdur
challenge:
confirm: Parhau
@@ -1367,7 +1378,7 @@ cy:
add_keyword: Ychwanegu allweddair
keywords: Allweddeiriau
statuses: Postiadau unigol
- statuses_hint_html: Mae'r hidlydd hwn yn berthnasol i ddewis postiadau unigol pa un ai a ydynt yn cyfateb i'r allweddeiriau isod. Adolygu neu ddileu postiadau o'r hidlydd .
+ statuses_hint_html: Mae'r hidlydd hwn yn berthnasol i ddewis postiadau unigol pa un ai a ydynt yn cyfateb i'r allweddeiriau isod. Adolygu neu ddileu postiadau o'r hidlydd.
title: Golygu hidlydd
errors:
deprecated_api_multiple_keywords: Nid oes modd newid y paramedrau hyn o'r cais hwn oherwydd eu bod yn berthnasol i fwy nag un allweddair hidlo. Defnyddiwch raglen fwy diweddar neu'r rhyngwyneb gwe.
@@ -1465,6 +1476,92 @@ cy:
merge_long: Cadw'r cofnodion presennol ac ychwanegu rhai newydd
overwrite: Trosysgrifio
overwrite_long: Amnewid y cofnodion cyfredol gyda'r rhai newydd
+ overwrite_preambles:
+ blocking_html:
+ few: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}.
+ many: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}.
+ one: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}.
+ other: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}.
+ two: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}.
+ zero: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}.
+ bookmarks_html:
+ few: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{count} postiadau gan %{filename}.
+ many: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{count} postiadau gan %{filename}.
+ one: Rydych ar fin disodli eich nodau tudalen gyda hyd at %{count} postiad o %{filename}.
+ other: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{count} postiadau gan %{filename}.
+ two: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{count} postiadau gan %{filename}.
+ zero: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{count} postiadau gan %{filename}.
+ domain_blocking_html:
+ few: Rydych ar fin amnewid eich rhestr rhwystro parthau gyda hyd at %{count} parth o %{filename}.
+ many: Rydych ar fin amnewid eich rhestr rhwystro parthau gyda hyd at %{count} parth o %{filename}.
+ one: Rydych ar fin disodli eich rhestr blociau parth gyda hyd at %{count} parth o %{filename}.
+ other: Rydych ar fin amnewid eich rhestr rhwystro parthau gyda hyd at %{count} parth o %{filename}.
+ two: Rydych ar fin amnewid eich rhestr rhwystro parthau gyda hyd at %{count} parth o %{filename}amnewid eich rhestr rhwystro parthau gyda hyd at %{count} parth o %{filename}.
+ following_html:
+ few: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename} a pheidio â dilyn unrhyw un arall.
+ many: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename} a pheidio â dilyn unrhyw un arall.
+ one: Rydych ar fin dilyn hyd at %{count} gyfrif o %{filename} a rhoi'r gorau i ddilyn unrhyw un arall.
+ other: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename} a pheidio â dilyn unrhyw un arall.
+ two: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename} a pheidio â dilyn unrhyw un arall.
+ zero: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename} a pheidio â dilyn unrhyw un arall.
+ lists_html:
+ few: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd.
+ many: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd.
+ one: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd.
+ other: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd.
+ two: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd.
+ zero: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd.
+ muting_html:
+ few: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{count} o gyfrifon o %{filename}.
+ many: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{count} o gyfrifon o %{filename}.
+ one: Rydych ar fin disodli eich rhestr o gyfrifon wedi'u tewi am hyd at %{count} gyfrif o %{filename}.
+ other: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{count} o gyfrifon o %{filename}.
+ two: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{count} o gyfrifon o %{filename}.
+ zero: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{count} o gyfrifon o %{filename}.
+ preambles:
+ blocking_html:
+ few: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}.
+ many: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}.
+ one: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}.
+ other: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}.
+ two: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}.
+ zero: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}.
+ bookmarks_html:
+ few: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen.
+ many: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen.
+ one: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen.
+ other: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen.
+ two: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen.
+ zero: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen.
+ domain_blocking_html:
+ few: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}.
+ many: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}.
+ one: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}.
+ other: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}.
+ two: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}.
+ zero: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}.
+ following_html:
+ few: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename}.
+ many: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename}.
+ one: Rydych ar fin dilyn hyd at %{count} gyfrif o %{filename}.
+ other: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename}.
+ two: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename}.
+ zero: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename}.
+ lists_html:
+ few: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati.
+ many: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati.
+ one: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati.
+ other: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati.
+ two: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati.
+ zero: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati.
+ muting_html:
+ few: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}.
+ many: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}.
+ one: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}.
+ other: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}.
+ two: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}.
+ zero: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}.
preface: Gallwch fewnforio data rydych chi wedi'i allforio o weinydd arall, fel rhestr o'r bobl rydych chi'n eu dilyn neu'n eu blocio.
recent_imports: Mewnforion diweddar
states:
@@ -1547,7 +1644,7 @@ cy:
follow_request: e-byst ceisiadau dilyn
mention: e-byst hysbysu crybwylliadau
reblog: e-byst hysbysiadau hybu
- resubscribe_html: Os ydych wedi dad-danysgrifio trwy gamgymeriad, gallwch ail-danysgrifio drwy'ch gosodiadau hysbysu e-bost .
+ resubscribe_html: Os ydych wedi dad-danysgrifio trwy gamgymeriad, gallwch ail-danysgrifio drwy'ch gosodiadau hysbysu e-bost.
success_html: Ni fyddwch bellach yn derbyn %{type} ar gyfer Mastodon ar %{domain} i'ch e-bost am %{email}.
title: Dad-danysgrifio
media_attachments:
@@ -1569,7 +1666,7 @@ cy:
on_cooldown: Rydych ar amser allan
followers_count: Dilynwyr ar adeg y symud
incoming_migrations: Symud o gyfrif wahanol
- incoming_migrations_html: I symud o gyfrif arall i'r un hwn, yn gyntaf mae angen i chi greu enwarall (alias) cyfrif .
+ incoming_migrations_html: I symud o gyfrif arall i'r un hwn, yn gyntaf mae angen i chi greu enwarall (alias) cyfrif.
moved_msg: Mae eich cyfrif bellach yn ailgyfeirio i %{acct} ac mae eich dilynwyr yn cael eu symud drosodd.
not_redirecting: Nid yw eich cyfrif yn ailgyfeirio i unrhyw gyfrif arall ar hyn o bryd.
on_cooldown: Rydych chi wedi mudo'ch cyfrif yn ddiweddar. Bydd y swyddogaeth hon ar gael eto ymhen %{count} diwrnod.
@@ -1584,7 +1681,7 @@ cy:
cooldown: Ar ôl symud, bydd yna cyfnod aros na fydd modd i chi symud eto
disabled_account: Ni fydd modd defnyddio'ch cyfrif cyfredol yn llawn wedyn. Fodd bynnag, bydd gennych fynediad i allforio data yn ogystal ag ail agor.
followers: Bydd y weithred hon yn symud yr holl ddilynwyr o'r cyfrif cyfredol i'r cyfrif newydd
- only_redirect_html: Fel arall, dim ond ailgyfeiriad y gallwch chi ei osod ar eich proffil .
+ only_redirect_html: Fel arall, dim ond ailgyfeiriad y gallwch chi ei osod ar eich proffil.
other_data: Ni fydd unrhyw data arall yn cael ei symud yn awtomatig
redirect: Bydd proffil eich cyfrif presennol yn cael ei diweddaru gyda hysbysiad ailgyfeirio ac yn cael ei eithrio o chwiliadau
moderation:
diff --git a/config/locales/da.yml b/config/locales/da.yml
index 923102c11f..e157af9cc2 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -187,6 +187,7 @@ da:
create_domain_block: Opret domæneblokering
create_email_domain_block: Opret e-maildomæneblokering
create_ip_block: Opret IP-regel
+ create_relay: Opret Videresendelse
create_unavailable_domain: Opret Utilgængeligt Domæne
create_user_role: Opret rolle
demote_user: Degradér bruger
@@ -198,14 +199,17 @@ da:
destroy_email_domain_block: Slet e-maildomæneblokering
destroy_instance: Udrens domæne
destroy_ip_block: Slet IP-regel
+ destroy_relay: Slet Videresendelse
destroy_status: Slet indlæg
destroy_unavailable_domain: Slet Utilgængeligt Domæne
destroy_user_role: Ødelæg rolle
disable_2fa_user: Deaktivér 2FA
disable_custom_emoji: Deaktivér tilpasset emoji
+ disable_relay: Deaktivér Videresendelse
disable_sign_in_token_auth_user: Deaktivér e-mailtoken godkendelse for bruger
disable_user: Deaktivér bruger
enable_custom_emoji: Aktivér tilpasset emoji
+ enable_relay: Aktivér Relay
enable_sign_in_token_auth_user: Aktivér e-mailtoken godkendelse for bruger
enable_user: Aktivér bruger
memorialize_account: Memoralisér konto
@@ -247,6 +251,7 @@ da:
create_domain_block_html: "%{name} blokerede domænet %{target}"
create_email_domain_block_html: "%{name} blokerede e-maildomænet %{target}"
create_ip_block_html: "%{name} oprettede en regel for IP %{target}"
+ create_relay_html: "%{name} oprettede videresendelsen %{target}"
create_unavailable_domain_html: "%{name} stoppede levering til domænet %{target}"
create_user_role_html: "%{name} oprettede %{target}-rolle"
demote_user_html: "%{name} degraderede brugeren %{target}"
@@ -258,14 +263,17 @@ da:
destroy_email_domain_block_html: "%{name} afblokerede e-maildomænet %{target}"
destroy_instance_html: "%{name} udrensede domænet %{target}"
destroy_ip_block_html: "%{name} slettede en regel for IP %{target}"
+ destroy_relay_html: "%{name} oprettede videresendelsen %{target}"
destroy_status_html: "%{name} fjernede indlægget fra %{target}"
destroy_unavailable_domain_html: "%{name} genoptog levering til domænet %{target}"
destroy_user_role_html: "%{name} slettede %{target}-rolle"
disable_2fa_user_html: "%{name} deaktiverede tofaktorkravet for brugeren %{target}"
disable_custom_emoji_html: "%{name} deaktiverede emojien %{target}"
+ disable_relay_html: "%{name} deaktiverede videresendelsen %{target}"
disable_sign_in_token_auth_user_html: "%{name} deaktiverede e-mailtoken godkendelsen for %{target}"
disable_user_html: "%{name} deaktiverede indlogning for brugeren %{target}"
enable_custom_emoji_html: "%{name} aktiverede emojien %{target}"
+ enable_relay_html: "%{name} aktiverede videresendelsen %{target}"
enable_sign_in_token_auth_user_html: "%{name} aktiverede e-mailtoken godkendelse for %{target}"
enable_user_html: "%{name} aktiverede indlogning for brugeren %{target}"
memorialize_account_html: "%{name} gjorde %{target}s konto til en mindeside"
@@ -833,7 +841,7 @@ da:
original_status: Oprindeligt indlæg
reblogs: Genblogninger
status_changed: Indlæg ændret
- title: Kontoindlæg
+ title: Kontoindlæg - @%{name}
trending: Populære
visibility: Synlighed
with_media: Med medier
@@ -1166,9 +1174,11 @@ da:
use_security_key: Brug sikkerhedsnøgle
author_attribution:
example_title: Eksempeltekst
- hint_html: Styrer, hvordan man krediteres, når links deles på Mastodon.
+ hint_html: Skriver du nyheder eller blogartikler uden for Mastodon? Styr, hvordan man bliver krediteret, når disse deles på Mastodon.
+ instructions: 'Sørg for, at denne kode er i artikelens HTML:'
more_from_html: Flere fra %{name}
s_blog: "%{name}s blog"
+ then_instructions: Tilføj dernæst publikationsdomænenavnet i feltet nedenfor.
title: Forfattertilskrivning
challenge:
confirm: Fortsæt
diff --git a/config/locales/de.yml b/config/locales/de.yml
index cfd0d6510e..e3ee03264e 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -187,6 +187,7 @@ de:
create_domain_block: Domain sperren
create_email_domain_block: E-Mail-Domain-Sperre erstellen
create_ip_block: IP-Regel erstellen
+ create_relay: Relay erstellen
create_unavailable_domain: Nicht verfügbare Domain erstellen
create_user_role: Rolle erstellen
demote_user: Benutzer*in herabstufen
@@ -198,14 +199,17 @@ de:
destroy_email_domain_block: E-Mail-Domain-Sperre entfernen
destroy_instance: Domain-Daten entfernen
destroy_ip_block: IP-Regel löschen
+ destroy_relay: Relay löschen
destroy_status: Beitrag entfernen
destroy_unavailable_domain: Nicht-verfügbare Domain entfernen
destroy_user_role: Rolle entfernen
disable_2fa_user: 2FA deaktivieren
disable_custom_emoji: Eigenes Emoji deaktivieren
+ disable_relay: Relay deaktivieren
disable_sign_in_token_auth_user: E-Mail-Token-Authentisierung für dieses Konto deaktivieren
disable_user: Benutzer*in deaktivieren
enable_custom_emoji: Eigenes Emoji aktivieren
+ enable_relay: Relay aktivieren
enable_sign_in_token_auth_user: E-Mail-Token-Authentisierung für dieses Konto aktivieren
enable_user: Benutzer*in aktivieren
memorialize_account: Gedenkkonto
@@ -247,6 +251,7 @@ de:
create_domain_block_html: "%{name} sperrte die Domain %{target}"
create_email_domain_block_html: "%{name} sperrte die E-Mail-Domain %{target}"
create_ip_block_html: "%{name} erstellte eine IP-Regel für %{target}"
+ create_relay_html: "%{name} erstellte ein Relay %{target}"
create_unavailable_domain_html: "%{name} beendete die Zustellung an die Domain %{target}"
create_user_role_html: "%{name} erstellte die Rolle %{target}"
demote_user_html: "%{name} stufte %{target} herunter"
@@ -258,14 +263,17 @@ de:
destroy_email_domain_block_html: "%{name} entsperrte die E-Mail-Domain %{target}"
destroy_instance_html: "%{name} entfernte die Daten der Domain %{target} von diesem Server"
destroy_ip_block_html: "%{name} entfernte eine IP-Regel für %{target}"
+ destroy_relay_html: "%{name} löschte das Relay %{target}"
destroy_status_html: "%{name} entfernte einen Beitrag von %{target}"
destroy_unavailable_domain_html: "%{name} nahm die Zustellung an die Domain %{target} wieder auf"
destroy_user_role_html: "%{name} löschte die Rolle %{target}"
disable_2fa_user_html: "%{name} deaktivierte die Zwei-Faktor-Authentisierung für %{target}"
disable_custom_emoji_html: "%{name} deaktivierte das Emoji %{target}"
+ disable_relay_html: "%{name} deaktivierte das Relay %{target}"
disable_sign_in_token_auth_user_html: "%{name} deaktivierte die E-Mail-Token-Authentisierung für %{target}"
disable_user_html: "%{name} deaktivierte den Zugang für %{target}"
enable_custom_emoji_html: "%{name} aktivierte das Emoji %{target}"
+ enable_relay_html: "%{name} aktivierte das Relay %{target}"
enable_sign_in_token_auth_user_html: "%{name} aktivierte die E-Mail-Token-Authentisierung für %{target}"
enable_user_html: "%{name} aktivierte den Zugang für %{target}"
memorialize_account_html: "%{name} wandelte das Konto von %{target} in eine Gedenkseite um"
@@ -833,7 +841,7 @@ de:
original_status: Ursprünglicher Beitrag
reblogs: Geteilte Beiträge
status_changed: Beitrag bearbeitet
- title: Beiträge des Kontos
+ title: Beiträge des Kontos - @%{name}
trending: Trends
visibility: Sichtbarkeit
with_media: Mit Medien
@@ -1166,9 +1174,11 @@ de:
use_security_key: Sicherheitsschlüssel verwenden
author_attribution:
example_title: Beispieltext
- hint_html: Bestimme, wie du Anerkennungen durch geteilte Links auf Mastodon handhaben möchtest.
+ hint_html: Schreibst du außerhalb von Mastodon Nachrichtenartikel oder betreibst du einen Blog? Bestimme, wie du Anerkennungen durch geteilte Links auf Mastodon handhaben möchtest.
+ instructions: 'Der nachfolgende Code muss im HTML-Code deines Artikels sein:'
more_from_html: Mehr von %{name}
s_blog: Blog von %{name}
+ then_instructions: Ergänze die Domain, auf der deine Inhalte veröffentlicht werden in das unten stehende Feld.
title: Anerkennung als Autor*in
challenge:
confirm: Fortfahren
@@ -1967,7 +1977,7 @@ de:
extra_instructions_html: Hinweis: Der Link auf deiner Website kann unsichtbar sein. Der wichtige Teil ist rel="me"
, wodurch das Nachahmen von Personen auf Websites mit nutzergenerierten Inhalten verhindert wird. Du kannst auch ein link
-Tag statt a
im Header auf der Seite verwenden, jedoch muss der HTML-Code ohne das Ausführen von JavaScript zugänglich sein.
here_is_how: So funktioniert’s
hint_html: "Alle können ihre Identität auf Mastodon verifizieren. Basierend auf offenen Standards – jetzt und für immer kostenlos. Alles, was du brauchst, ist eine eigene Website. Wenn du von deinem Profil auf diese Website verlinkst, überprüfen wir, ob die Website zu deinem Profil zurückverlinkt, und zeigen einen visuellen Hinweis an."
- instructions_html: Kopiere den unten stehenden Code und füge ihn in das HTML deiner Website ein. Trage anschließend die Adresse deiner Website in ein Zusatzfeld auf deinem Profil ein und speichere die Änderungen. Die Zusatzfelder befinden sich im Reiter „Profil bearbeiten“.
+ instructions_html: Kopiere den unten stehenden Code und füge ihn in den HTML-Code deiner Website ein. Trage anschließend die Adresse deiner Website in ein Zusatzfeld auf deinem Profil ein und speichere die Änderungen. Die Zusatzfelder befinden sich im Reiter „Profil bearbeiten“.
verification: Verifizierung
verified_links: Deine verifizierten Links
website_verification: Website-Verifizierung
diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml
index 43aef271f9..754fa01550 100644
--- a/config/locales/devise.eo.yml
+++ b/config/locales/devise.eo.yml
@@ -6,7 +6,7 @@ eo:
send_instructions: Vi ricevos retmesaĝon kun instrukcioj por konfirmi vian retadreson ene de kelkaj minutoj. Bonvolu kontroli vian spamujon se vi ne ricevis ĉi tiun retmesaĝon.
send_paranoid_instructions: Se via retadreso ekzistas en nia datumbazo, vi ricevos retmesaĝon kun instrukcioj por konfirmi vian retadreson ene de kelkaj minutoj. Bonvolu kontroli vian spamujon se vi ne ricevis ĉi tiun retmesaĝon.
failure:
- already_authenticated: Vi jam salutis.
+ already_authenticated: Vi jam ensalutis.
inactive: Via konto ankoraŭ ne estas konfirmita.
invalid: Nevalida %{authentication_keys} aŭ pasvorto.
last_attempt: Vi ankoraŭ povas provi unufoje antaŭ ol via konto estos ŝlosita.
@@ -53,12 +53,14 @@ eo:
subtitle: Dupaŝa aŭtentigo por via konto estas malŝaltita.
title: 2FA estas malŝaltita
two_factor_enabled:
+ explanation: Tokeno generita de la parigita TOTP-aplikaĵo estos necesa por ensaluti.
subject: 'Mastodon: Dufaktora aŭtentigo ebligita'
subtitle: Dupaŝa aŭtentigo por via konto estas ŝaltita.
title: 2FA aktivigita
two_factor_recovery_codes_changed:
explanation: La antaŭaj reakiraj kodoj estis nuligitaj kaj novaj estis generitaj.
subject: 'Mastodon: Reakiraj kodoj de dufaktora aŭtentigo rekreitaj'
+ subtitle: La antaŭaj restarigaj kodoj estis malvalidigitaj kaj novaj estis generitaj.
title: Reakiraj kodoj de 2FA estas ŝanĝitaj
unlock_instructions:
subject: 'Mastodon: Instrukcioj por malŝlosi'
diff --git a/config/locales/devise.lv.yml b/config/locales/devise.lv.yml
index 4470c8109e..5aaa23a731 100644
--- a/config/locales/devise.lv.yml
+++ b/config/locales/devise.lv.yml
@@ -14,7 +14,7 @@ lv:
not_found_in_database: Nederīga %{authentication_keys} vai parole.
omniauth_user_creation_failure: Kļūda šīs identitātes konta izveidošanā.
pending: Tavs konts joprojām tiek pārskatīts.
- timeout: Sesijair beigusies. Lūgums vēlreiz pieteikties, lai turpinātu.
+ timeout: Sesija ir beigusies. Lūgums vēlreiz pieteikties, lai turpinātu.
unauthenticated: Lai turpinātu, jāpiesakās vai jāreģistrējas.
unconfirmed: Lai turpinātu, jāapliecina sava e-pasta adrese.
mailer:
@@ -90,13 +90,13 @@ lv:
no_token: Tu nevari piekļūt šai lapai, ja neesi saņēmis paroles atiestatīšanas e-pasta ziņojumu. Ja ienāci no paroles atiestatīšanas e-pasta, lūdzu, pārliecinies, vai izmanto visu norādīto URL.
send_instructions: Ja tava e-pasta adrese ir mūsu datu bāzē, pēc dažām minūtēm uz savu e-pasta adresi saņemsi paroles atkopšanas saiti. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu.
send_paranoid_instructions: Ja tava e-pasta adrese ir mūsu datu bāzē, pēc dažām minūtēm uz savu e-pasta adresi saņemsi paroles atkopšanas saiti. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu.
- updated: Tava parole tika veiksmīgi nomainīta. Tu tagad esi pieteicies.
+ updated: Tava parole tika veiksmīgi nomainīta. Tagad esi pieteicies.
updated_not_active: Tava parole ir veiksmīgi nomainīta.
registrations:
destroyed: Visu labu! Tavs konts ir veiksmīgi atcelts. Mēs ceram tevi drīz atkal redzēt.
signed_up: Laipni lūdzam! Tu esi veiksmīgi reģistrējies.
- signed_up_but_inactive: Tava reģistrācija bija veiksmīga. Tomēr mēs nevarējām tevi pierakstīt, jo tavs konts vēl nav aktivizēts.
- signed_up_but_locked: Tava reģistrācija bija veiksmīga. Tomēr mēs nevarējām tevi pierakstīt, jo tavs konts ir bloķēts.
+ signed_up_but_inactive: Tava reģistrācija bija veiksmīga. Tomēr mēs nevarējām Tevi pieteikt, jo Tavs konts vēl nav aktivizēts.
+ signed_up_but_locked: Tava reģistrācija bija veiksmīga. Tomēr mēs nevarējām Tevi pieteikt, jo Tavs konts ir slēgts.
signed_up_but_pending: Uz tavu e-pasta adresi ir nosūtīts ziņojums ar apstiprinājuma saiti. Pēc noklikšķināšanas uz saites mēs izskatīsim tavu pieteikumu. Tu tiksi informēts, ja tas tiks apstiprināts.
signed_up_but_unconfirmed: Uz tavu e-pasta adresi ir nosūtīts ziņojums ar apstiprinājuma saiti. Lūdzu, seko saitei, lai aktivizētu savu kontu. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu.
update_needs_confirmation: Tu veiksmīgi atjaunināji savu kontu, taču mums ir jāverificē teva jaunā e-pasta adrese. Lūdzu, pārbaudi savu e-pastu un seko apstiprinājuma saitei, lai apstiprinātu savu jauno e-pasta adresi. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu.
@@ -111,7 +111,7 @@ lv:
unlocked: Konts tika veiksmīgi atbloķēts. Lūgums pieteikties, lai turpinātu.
errors:
messages:
- already_confirmed: jau tika apstiprināts, lūdzu, mēģini pierakstīties
+ already_confirmed: jau tika apstiprināts, lūgums mēģināt pieteikties
confirmation_period_expired: jāapstiprina %{period} laikā, lūdzu, pieprasi jaunu
expired: ir beidzies derīguma termiņš, lūdzu, pieprasi jaunu
not_found: nav atrasts
diff --git a/config/locales/doorkeeper.ast.yml b/config/locales/doorkeeper.ast.yml
index c9c831f7f5..3df18d6f7a 100644
--- a/config/locales/doorkeeper.ast.yml
+++ b/config/locales/doorkeeper.ast.yml
@@ -50,7 +50,9 @@ ast:
confirmations:
revoke: "¿De xuru que quies facer esta aición?"
index:
+ authorized_at: 'Data d''autorización: %{date}'
description_html: Estes son les aplicaciones que puen acceder a la cuenta cola API. Si equí hai aplicaciones que nun conoces o hai dalguna aplicación que nun funciona correutamente, pues revocar el so accesu.
+ last_used_at: 'Últimu usu: %{date}'
never_used: Enxamás s'usó
scopes: Permisos
title: Les aplicaciones qu'autoricesti
diff --git a/config/locales/doorkeeper.eo.yml b/config/locales/doorkeeper.eo.yml
index 12e120f8be..36a5ed1974 100644
--- a/config/locales/doorkeeper.eo.yml
+++ b/config/locales/doorkeeper.eo.yml
@@ -60,6 +60,7 @@ eo:
error:
title: Eraro okazis
new:
+ prompt_html: "%{client_name} ŝatus permeson aliri vian konton. Nur aprobu ĉi tiun peton se vi rekonas kaj fidas ĉi tiun fonton."
review_permissions: Revizu permesojn
title: Rajtigo bezonata
show:
@@ -82,6 +83,7 @@ eo:
access_denied: La posedanto de la rimedo aŭ de la rajtiga servilo rifuzis vian peton.
credential_flow_not_configured: La sendado de la identigiloj de la posedanto de la rimedo malsukcesis ĉar Doorkeeper.configure.resource_owner_from_credentials ne estis agordita.
invalid_client: Klienta aŭtentigo malsukcesa pro nekonata kliento, neniu klienta aŭtentigo inkluzivita, aŭ nesubtenata aŭtentiga metodo.
+ invalid_code_challenge_method: La koda defia metodo devas esti S256, ebenaĵo estas nesubtenata.
invalid_grant: La rajtiga konsento ne estas valida, ne plu estas valida, estis forigita, ne kongruas kun la plusenda URI uzita en la aŭtentiga peto, aŭ estis sendita al alia kliento.
invalid_redirect_uri: La plusenda URI uzita ne estas valida.
invalid_request:
@@ -134,6 +136,7 @@ eo:
media: Plurmediaj aldonaĵoj
mutes: Silentigitaj
notifications: Sciigoj
+ profile: Via Mastodon-profilo
push: Puŝsciigoj
reports: Raportoj
search: Serĉi
@@ -164,6 +167,7 @@ eo:
admin:write:reports: plenumi agojn de kontrolo sur signaloj
crypto: uzi fin-al-finan ĉifradon
follow: ŝanĝi rilatojn al aliaj kontoj
+ profile: legu nur la profilinformojn de via konto
push: ricevi viajn puŝ-sciigojn
read: legi ĉiujn datumojn de via konto
read:accounts: vidi la informojn de la kontoj
diff --git a/config/locales/doorkeeper.es-MX.yml b/config/locales/doorkeeper.es-MX.yml
index e119d71f4e..eaf1bf69fb 100644
--- a/config/locales/doorkeeper.es-MX.yml
+++ b/config/locales/doorkeeper.es-MX.yml
@@ -60,7 +60,7 @@ es-MX:
error:
title: Ha ocurrido un error
new:
- prompt_html: A %{client_name} le gustaría obtener permiso para acceder a tu cuenta. Aprueba esta solicitud solo si reconoces y confías en esta fuente.
+ prompt_html: "%{client_name} desea obtener permiso para acceder a tu cuenta. Aprueba esta solicitud solamente si reconoces y confías en esta fuente."
review_permissions: Revisar permisos
title: Se requiere autorización
show:
diff --git a/config/locales/doorkeeper.et.yml b/config/locales/doorkeeper.et.yml
index ebfaf5c710..fb135b1f96 100644
--- a/config/locales/doorkeeper.et.yml
+++ b/config/locales/doorkeeper.et.yml
@@ -60,6 +60,7 @@ et:
error:
title: Ilmnes viga
new:
+ prompt_html: "%{client_name} soovib saada ligipääsu su kontole. Kinnita see taotlus ainult siis, kui sa tunned ja usaldad seda allikat."
review_permissions: Lubade ülevaade
title: Autoriseerimine vajalik
show:
diff --git a/config/locales/doorkeeper.fa.yml b/config/locales/doorkeeper.fa.yml
index 4ff03950b5..8e2bc864a2 100644
--- a/config/locales/doorkeeper.fa.yml
+++ b/config/locales/doorkeeper.fa.yml
@@ -130,7 +130,7 @@ fa:
favourites: برگزیدهها
filters: پالایهها
follow: پیگیری، خموشی و مسدودیها
- follows: پیگرفتگان
+ follows: پیگرفتنها
lists: سیاههها
media: پیوستهای رسانهای
mutes: خموشها
diff --git a/config/locales/doorkeeper.is.yml b/config/locales/doorkeeper.is.yml
index 05f2415eea..1fabd1b55f 100644
--- a/config/locales/doorkeeper.is.yml
+++ b/config/locales/doorkeeper.is.yml
@@ -60,6 +60,7 @@ is:
error:
title: Villa kom upp
new:
+ prompt_html: "%{client_name} vill fá heimild til að skoða aðganginn þinn. Ekki samþykkja þessa beiðni nema þú þekkir og treystir viðkomandi."
review_permissions: Yfirfara heimildir
title: Auðkenning er nauðsynleg
show:
diff --git a/config/locales/doorkeeper.ja.yml b/config/locales/doorkeeper.ja.yml
index 7cfddf50a1..d44451c746 100644
--- a/config/locales/doorkeeper.ja.yml
+++ b/config/locales/doorkeeper.ja.yml
@@ -60,6 +60,7 @@ ja:
error:
title: エラーが発生しました
new:
+ prompt_html: "%{client_name} があなたのアカウントにアクセスするための許可を求めています。このリクエストを承認するのは、信頼できる相手であると認識している場合のみです。"
review_permissions: アクセス許可を確認
title: 認証が必要です
show:
diff --git a/config/locales/doorkeeper.lv.yml b/config/locales/doorkeeper.lv.yml
index 55e288a9d6..af892d79fa 100644
--- a/config/locales/doorkeeper.lv.yml
+++ b/config/locales/doorkeeper.lv.yml
@@ -60,6 +60,7 @@ lv:
error:
title: Radās kļūda
new:
+ prompt_html: "%{client_name} vēlas atļauju piekļūt Tavam kontam. Apstiprini šo pieprasījumu tikai tad, ja atpazīsti un uzticies šim avotam!"
review_permissions: Pārskatīt atļaujas
title: Nepieciešama autorizācija
show:
@@ -119,9 +120,9 @@ lv:
write: Tikai rakstīšanas piekļuve
title:
accounts: Konti
- admin/accounts: Kontu administrēšana
+ admin/accounts: Kontu pārvaldīšana
admin/all: Visas administrēšanas funkcijas
- admin/reports: Ziņojumu administrēšana
+ admin/reports: Ziņojumu pārvaldīšana
all: Pilna piekļuve tavam Mastodon kontam
blocks: Bloķētie
bookmarks: Grāmatzīmes
@@ -157,13 +158,13 @@ lv:
admin:read:ip_blocks: lasīt sensitīvu informāciju par visiem IP blokiem
admin:read:reports: lasīt sensitīvu informāciju no visiem pārskatiem un kontiem, par kuriem ziņots
admin:write: modificēt visus datus uz servera
- admin:write:accounts: veikt moderācijas darbības kontos
- admin:write:canonical_email_blocks: veikt regulēšanas darbības kanoniskajos e-pasta blokos
- admin:write:domain_allows: veikt moderēšanas darbības domēna atļaujā
- admin:write:domain_blocks: veikt moderēšanas darbības domēna blokos
- admin:write:email_domain_blocks: veikt moderēšanas darbības e-pasta domēna blokos
- admin:write:ip_blocks: veikt moderēšanas darbības IP blokos
- admin:write:reports: veikt moderācijas darbības pārskatos
+ admin:write:accounts: veikt satura pārraudzības darbības kontos
+ admin:write:canonical_email_blocks: veikt satura pārraudzības darbības kanoniskajos e-pasta blokos
+ admin:write:domain_allows: veikt satura pārraudzības darbības domēna atļaujā
+ admin:write:domain_blocks: veikt satura pārraudzības darbības domēna blokos
+ admin:write:email_domain_blocks: veikt satura pārraudzības darbības e-pasta domēna blokos
+ admin:write:ip_blocks: veikt satura pārraudzības darbības IP blokos
+ admin:write:reports: veikt satura pārraudzības darbības pārskatos
crypto: lieto pilnīgu šifrēšanu
follow: mainīt konta attiecības
profile: lasīt tikai Tava konta profila informāciju
diff --git a/config/locales/doorkeeper.ro.yml b/config/locales/doorkeeper.ro.yml
index 9c02501eff..08b7c3fa8d 100644
--- a/config/locales/doorkeeper.ro.yml
+++ b/config/locales/doorkeeper.ro.yml
@@ -60,6 +60,7 @@ ro:
error:
title: A apărut o eroare
new:
+ prompt_html: "%{client_name} ar dori să vă acceseze contul. Aprobați această solicitare numai dacă recunoașteți și aveți încredere în această sursă."
review_permissions: Revizuiți permisiunile
title: Autorizare necesară
show:
@@ -82,6 +83,7 @@ ro:
access_denied: Proprietarul de resurse sau serverul de autorizare a refuzat cererea.
credential_flow_not_configured: Fluxul Resurselor de Acreditări Parole a eșuat din cauza faptului că Doorkeeper.configure.resource_owner_from_credentials nu este configurat.
invalid_client: Autentificarea clientului a eșuat din cauza unui client necunoscut, nici o autentificare client inclusă, sau metodă de autentificare nesuportată.
+ invalid_code_challenge_method: Metoda de provocare a codului trebuie să fie S256, simplu nu este acceptată.
invalid_grant: Acordarea autorizației furnizată este invalidă, expirată, revocată, nu corespunde URI-ului de redirecționare folosit în cererea de autorizare, sau a fost eliberat altui client.
invalid_redirect_uri: Uri-ul de redirecționare inclus nu este valid.
invalid_request:
@@ -134,6 +136,7 @@ ro:
media: Atașamente media
mutes: Pus pe silențios
notifications: Notificări
+ profile: Profilul tău Mastodon
push: Notificări push
reports: Rapoarte
search: Căutare
@@ -148,12 +151,23 @@ ro:
scopes:
admin:read: citește toate datele de pe server
admin:read:accounts: citește informații sensibile ale tuturor conturilor
+ admin:read:canonical_email_blocks: citește informații sensibile ale tuturor blocurilor de e-mail canonice
+ admin:read:domain_allows: citește informații sensibile ale tuturor domeniilor permise
+ admin:read:domain_blocks: citește informații sensibile ale tuturor blocurilor de domeniu
+ admin:read:email_domain_blocks: citește informații sensibile ale tuturor blocurilor de domeniu de e-mail
+ admin:read:ip_blocks: citește informații sensibile ale tuturor blocurilor IP
admin:read:reports: citește informații sensibile din toate rapoartele și conturile raportate
admin:write: modifică toate datele de pe server
admin:write:accounts: efectuează acțiuni de moderare pe conturi
+ admin:write:canonical_email_blocks: efectuează acțiuni de moderare pe blocurile de e-mail canonice
+ admin:write:domain_allows: efectuează acțiuni de moderare pe domeniile permise
+ admin:write:domain_blocks: efectuează acțiuni de moderare pe blocurile de domeniu
+ admin:write:email_domain_blocks: efectuează acțiuni de moderare pe blocurile de domeniu de e-mail
+ admin:write:ip_blocks: efectuează acțiuni de moderare pe blocurile IP
admin:write:reports: efectuează acțiuni de moderare pe rapoarte
crypto: utilizează criptare la ambele capete
follow: modifică relațiile contului
+ profile: citește doar informațiile de profil ale contului tău
push: primește notificările tale push
read: citește toate datele contului tău
read:accounts: vede informațiile privind conturile
diff --git a/config/locales/doorkeeper.ru.yml b/config/locales/doorkeeper.ru.yml
index 1dcb2093d5..c7ea94c2e3 100644
--- a/config/locales/doorkeeper.ru.yml
+++ b/config/locales/doorkeeper.ru.yml
@@ -60,6 +60,7 @@ ru:
error:
title: Произошла ошибка
new:
+ prompt_html: "%{client_name} хочет получить доступ к вашему аккаунту. Принимайте запрос только в том случае, если узнаёте, откуда он, и доверяете источнику."
review_permissions: Просмотр разрешений
title: Требуется авторизация
show:
diff --git a/config/locales/doorkeeper.sv.yml b/config/locales/doorkeeper.sv.yml
index 9f646fd3e4..3c8b08ff26 100644
--- a/config/locales/doorkeeper.sv.yml
+++ b/config/locales/doorkeeper.sv.yml
@@ -60,6 +60,7 @@ sv:
error:
title: Ett fel har uppstått
new:
+ prompt_html: "%{client_name} vill ha behörighet att komma åt ditt konto. Godkänn bara denna begäran om du känner igen och litar på källan."
review_permissions: Granska behörigheter
title: Godkännande krävs
show:
@@ -71,7 +72,7 @@ sv:
revoke: Är du säker?
index:
authorized_at: Godkändes den %{date}
- description_html: Dessa applikationer har åtkomst till ditt konto genom API:et. Om det finns applikationer du inte känner igen här, eller om en applikation inte fungerar, kan du återkalla dess åtkomst.
+ description_html: Detta är program som kan komma åt ditt konto med hjälp av API. Om det finns program som du inte känner igen här, eller om ett program är inte fungerar kan du återkalla dess åtkomst.
last_used_at: Användes senast %{date}
never_used: Aldrig använd
scopes: Behörigheter
@@ -132,7 +133,7 @@ sv:
follow: Följare, mjutade och blockerade
follows: Följer
lists: Listor
- media: Mediabilagor
+ media: Mediebilagor
mutes: Tystade användare
notifications: Aviseringar
profile: Din Mastodon-profil
diff --git a/config/locales/doorkeeper.th.yml b/config/locales/doorkeeper.th.yml
index e7ed0ba8a3..3b52e170ea 100644
--- a/config/locales/doorkeeper.th.yml
+++ b/config/locales/doorkeeper.th.yml
@@ -60,6 +60,7 @@ th:
error:
title: เกิดข้อผิดพลาด
new:
+ prompt_html: "%{client_name} ต้องการสิทธิอนุญาตเพื่อเข้าถึงบัญชีของคุณ อนุมัติคำขอนี้เฉพาะหากคุณรู้จักและเชื่อถือแหล่งที่มานี้เท่านั้น"
review_permissions: ตรวจทานสิทธิอนุญาต
title: ต้องการการอนุญาต
show:
diff --git a/config/locales/doorkeeper.vi.yml b/config/locales/doorkeeper.vi.yml
index 6687c0339d..2219599c57 100644
--- a/config/locales/doorkeeper.vi.yml
+++ b/config/locales/doorkeeper.vi.yml
@@ -150,30 +150,30 @@ vi:
title: Đăng nhập bằng OAuth
scopes:
admin:read: đọc mọi dữ liệu trên máy chủ
- admin:read:accounts: đọc thông tin nhạy cảm của tất cả các tài khoản
- admin:read:canonical_email_blocks: đọc thông tin nhạy cảm của tất cả khối email chuẩn
- admin:read:domain_allows: đọc thông tin nhạy cảm của tất cả các tên miền cho phép
- admin:read:domain_blocks: đọc thông tin nhạy cảm của tất cả các tên miền chặn
- admin:read:email_domain_blocks: đọc thông tin nhạy cảm của tất cả các miền email chặn
- admin:read:ip_blocks: đọc thông tin nhạy cảm của tất cả các IP chặn
+ admin:read:accounts: đọc thông tin nhạy cảm của mọi tài khoản
+ admin:read:canonical_email_blocks: đọc thông tin nhạy cảm của mọi khối email biến thể
+ admin:read:domain_allows: đọc thông tin nhạy cảm của mọi máy chủ liên hợp
+ admin:read:domain_blocks: đọc thông tin nhạy cảm của mọi máy chủ chặn
+ admin:read:email_domain_blocks: đọc thông tin nhạy cảm của mọi tên miền email chặn
+ admin:read:ip_blocks: đọc thông tin nhạy cảm của mọi IP chặn
admin:read:reports: đọc thông tin của các báo cáo và các tài khoản bị báo cáo
admin:write: sửa đổi tất cả dữ liệu trên máy chủ
admin:write:accounts: áp đặt hành động kiểm duyệt trên tài khoản
- admin:write:canonical_email_blocks: áp đặt kiểm duyệt đối với chặn email
+ admin:write:canonical_email_blocks: áp đặt kiểm duyệt đối với chặn email biến thể
admin:write:domain_allows: áp đặt kiểm duyệt đối với các email cho phép
admin:write:domain_blocks: áp đặt kiểm duyệt đối với các tên miền chặn
admin:write:email_domain_blocks: áp đặt kiểm duyệt đối với các tên miền email chặn
admin:write:ip_blocks: áp đặt kiểm duyệt với các IP chặn
admin:write:reports: áp đặt kiểm duyệt với các báo cáo
crypto: dùng mã hóa đầu cuối
- follow: sửa đổi các mối quan hệ tài khoản
- profile: chỉ đọc thông tin tài khoản cơ bản
+ follow: sửa đổi các mối quan hệ
+ profile: chỉ xem thông tin tài khoản cơ bản
push: nhận thông báo đẩy
read: đọc mọi dữ liệu tài khoản
read:accounts: xem thông tin tài khoản
read:blocks: xem những người đã chặn
read:bookmarks: xem tút đã lưu
- read:favourites: xem lượt thích
+ read:favourites: xem tút đã thích
read:filters: xem bộ lọc
read:follows: xem những người theo dõi
read:lists: xem danh sách
@@ -182,7 +182,7 @@ vi:
read:reports: xem báo cáo của bạn
read:search: tìm kiếm
read:statuses: xem toàn bộ tút
- write: sửa đổi mọi dữ liệu tài khoản của bạn
+ write: sửa đổi mọi dữ liệu tài khoản
write:accounts: sửa đổi trang hồ sơ
write:blocks: chặn người và máy chủ
write:bookmarks: sửa đổi những tút lưu
@@ -194,5 +194,5 @@ vi:
write:media: tải lên tập tin
write:mutes: ẩn người và thảo luận
write:notifications: xóa thông báo
- write:reports: báo cáo người khác
+ write:reports: báo cáo
write:statuses: đăng tút
diff --git a/config/locales/doorkeeper.zh-CN.yml b/config/locales/doorkeeper.zh-CN.yml
index 46253d01b3..08f9885894 100644
--- a/config/locales/doorkeeper.zh-CN.yml
+++ b/config/locales/doorkeeper.zh-CN.yml
@@ -167,7 +167,7 @@ zh-CN:
admin:write:reports: 对举报执行管理操作
crypto: 使用端到端加密
follow: 关注或屏蔽用户
- profile: 仅读取你账户中的个人资料信息
+ profile: 仅读取你账号的个人资料信息
push: 接收你的账户的推送通知
read: 读取你的账户数据
read:accounts: 查看账号信息
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 0df31b246f..26b0ec00a2 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -21,6 +21,7 @@ el:
one: Ανάρτηση
other: Αναρτήσεις
posts_tab_heading: Αναρτήσεις
+ self_follow_error: Δεν επιτρέπεται να ακολουθήσεις τον δικό σου λογαριασμό
admin:
account_actions:
action: Εκτέλεση ενέργειας
@@ -816,7 +817,7 @@ el:
original_status: Αρχική ανάρτηση
reblogs: Αναδημοσιεύσεις
status_changed: Η ανάρτηση άλλαξε
- title: Καταστάσεις λογαριασμού
+ title: Καταστάσεις λογαριασμού - @%{name}
trending: Τάσεις
visibility: Ορατότητα
with_media: Με πολυμέσα
diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml
index 65b2e6f71a..e22ed62051 100644
--- a/config/locales/en-GB.yml
+++ b/config/locales/en-GB.yml
@@ -832,7 +832,7 @@ en-GB:
original_status: Original post
reblogs: Reblogs
status_changed: Post changed
- title: Account posts
+ title: Account posts - @%{name}
trending: Trending
visibility: Visibility
with_media: With media
@@ -1165,7 +1165,6 @@ en-GB:
use_security_key: Use security key
author_attribution:
example_title: Sample text
- hint_html: Control how you're credited when links are shared on Mastodon.
more_from_html: More from %{name}
s_blog: "%{name}'s Blog"
title: Author attribution
diff --git a/config/locales/en.yml b/config/locales/en.yml
index c88ef3fa20..2971fe1f25 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -187,6 +187,7 @@ en:
create_domain_block: Create Domain Block
create_email_domain_block: Create Email Domain Block
create_ip_block: Create IP rule
+ create_relay: Create Relay
create_unavailable_domain: Create Unavailable Domain
create_user_role: Create Role
demote_user: Demote User
@@ -198,14 +199,17 @@ en:
destroy_email_domain_block: Delete Email Domain Block
destroy_instance: Purge Domain
destroy_ip_block: Delete IP rule
+ destroy_relay: Delete Relay
destroy_status: Delete Post
destroy_unavailable_domain: Delete Unavailable Domain
destroy_user_role: Destroy Role
disable_2fa_user: Disable 2FA
disable_custom_emoji: Disable Custom Emoji
+ disable_relay: Disable Relay
disable_sign_in_token_auth_user: Disable Email Token Authentication for User
disable_user: Disable User
enable_custom_emoji: Enable Custom Emoji
+ enable_relay: Enable Relay
enable_sign_in_token_auth_user: Enable Email Token Authentication for User
enable_user: Enable User
memorialize_account: Memorialize Account
@@ -247,6 +251,7 @@ en:
create_domain_block_html: "%{name} blocked domain %{target}"
create_email_domain_block_html: "%{name} blocked email domain %{target}"
create_ip_block_html: "%{name} created rule for IP %{target}"
+ create_relay_html: "%{name} created a relay %{target}"
create_unavailable_domain_html: "%{name} stopped delivery to domain %{target}"
create_user_role_html: "%{name} created %{target} role"
demote_user_html: "%{name} demoted user %{target}"
@@ -258,14 +263,17 @@ en:
destroy_email_domain_block_html: "%{name} unblocked email domain %{target}"
destroy_instance_html: "%{name} purged domain %{target}"
destroy_ip_block_html: "%{name} deleted rule for IP %{target}"
+ destroy_relay_html: "%{name} deleted the relay %{target}"
destroy_status_html: "%{name} removed post by %{target}"
destroy_unavailable_domain_html: "%{name} resumed delivery to domain %{target}"
destroy_user_role_html: "%{name} deleted %{target} role"
disable_2fa_user_html: "%{name} disabled two factor requirement for user %{target}"
disable_custom_emoji_html: "%{name} disabled emoji %{target}"
+ disable_relay_html: "%{name} disabled the relay %{target}"
disable_sign_in_token_auth_user_html: "%{name} disabled email token authentication for %{target}"
disable_user_html: "%{name} disabled login for user %{target}"
enable_custom_emoji_html: "%{name} enabled emoji %{target}"
+ enable_relay_html: "%{name} enabled the relay %{target}"
enable_sign_in_token_auth_user_html: "%{name} enabled email token authentication for %{target}"
enable_user_html: "%{name} enabled login for user %{target}"
memorialize_account_html: "%{name} turned %{target}'s account into a memoriam page"
@@ -818,8 +826,10 @@ en:
back_to_account: Back to account page
back_to_report: Back to report page
batch:
+ add_to_report: 'Add to report #%{id}'
remove_from_report: Remove from report
report: Report
+ contents: Contents
deleted: Deleted
favourites: Favorites
history: Version history
@@ -828,13 +838,17 @@ en:
media:
title: Media
metadata: Metadata
+ no_history: This post hasn't been edited
no_status_selected: No posts were changed as none were selected
open: Open post
original_status: Original post
reblogs: Reblogs
+ replied_to_html: Replied to %{acct_link}
status_changed: Post changed
- title: Account posts
+ status_title: Post by @%{name}
+ title: Account posts - @%{name}
trending: Trending
+ view_publicly: View publicly
visibility: Visibility
with_media: With media
strikes:
@@ -1166,9 +1180,11 @@ en:
use_security_key: Use security key
author_attribution:
example_title: Sample text
- hint_html: Control how you're credited when links are shared on Mastodon.
+ hint_html: Are you writing news or blog articles outside of Mastodon? Control how you get credited when they are shared on Mastodon.
+ instructions: 'Make sure this code is in your article''s HTML:'
more_from_html: More from %{name}
s_blog: "%{name}'s Blog"
+ then_instructions: Then, add the domain name of the publication in the field below.
title: Author attribution
challenge:
confirm: Continue
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 1e683b1725..194b2c17b8 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -19,7 +19,7 @@ eo:
following: Vi devas sekvi la homon, kiun vi volas proponi
posts:
one: Afiŝo
- other: Mesaĝoj
+ other: Afiŝoj
posts_tab_heading: Afiŝoj
self_follow_error: Sekvi vian propran konton ne estas permesita
admin:
@@ -61,6 +61,7 @@ eo:
demote: Degradi
destroyed_msg: Datumoj de %{username} nun enviciĝis por esti forigita baldaǔ
disable: Frostigi
+ disable_sign_in_token_auth: Malebligu retpoŝtan ĵeton-aŭtentikigon
disable_two_factor_authentication: Malŝalti 2FA-n
disabled: Frostigita
display_name: Montrata nomo
@@ -69,9 +70,10 @@ eo:
email: Retpoŝto
email_status: Stato de retpoŝto
enable: Malfrostigi
+ enable_sign_in_token_auth: Ebligu retpoŝtan ĵeton-aŭtentikigon
enabled: Ebligita
enabled_msg: Sukcese malfrostigis konton de %{username}
- followers: Sekvantoj
+ followers: Sekvoj
follows: Sekvatoj
header: Kapa bildo
inbox_url: Enira URL
@@ -81,8 +83,8 @@ eo:
joined: Aliĝis
location:
all: Ĉiuj
- local: Lokaj
- remote: Foraj
+ local: Loka
+ remote: Fora
title: Loko
login_status: Ensaluta stato
media_attachments: Plurmediaj aldonaĵoj
@@ -133,6 +135,7 @@ eo:
resubscribe: Reaboni
role: Rolo
search: Serĉi
+ search_same_email_domain: Aliaj uzantoj kun la sama retpoŝta domajno
search_same_ip: Aliaj uzantoj kun la sama IP
security: Sekureco
security_measures:
@@ -173,30 +176,41 @@ eo:
approve_appeal: Aprobis Apelacion
approve_user: Aprobi Uzanton
assigned_to_self_report: Atribui Raporton
+ change_email_user: Ŝanĝu retpoŝton por uzanto
change_role_user: Ŝanĝi Rolon de Uzanton
confirm_user: Konfirmi uzanton
create_account_warning: Krei averton
create_announcement: Krei Anoncon
+ create_canonical_email_block: Krei retpoŝtan blokon
create_custom_emoji: Krei Propran Emoĝion
create_domain_allow: Krei Domajnan Permeson
create_domain_block: Krei Blokadon De Domajno
+ create_email_domain_block: Krei retpoŝtan domajnan blokon
create_ip_block: Krei IP-regulon
+ create_relay: Krei Relajson
create_unavailable_domain: Krei Nehaveblan Domajnon
create_user_role: Krei Rolon
demote_user: Malpromocii Uzanton
destroy_announcement: Forigi Anoncon
+ destroy_canonical_email_block: Forigi retpoŝtan blokon
destroy_custom_emoji: Forigi Propran Emoĝion
destroy_domain_allow: Forigi Domajnan Permeson
destroy_domain_block: Forigi blokadon de domajno
+ destroy_email_domain_block: Forigi retpoŝtan domajnan blokon
destroy_instance: Forigi Domajnon
destroy_ip_block: Forigi IP-regulon
+ destroy_relay: Forigi Relajson
destroy_status: Forigi Afiŝon
destroy_unavailable_domain: Forigi Nehaveblan Domajnon
destroy_user_role: Detrui Rolon
disable_2fa_user: Malebligi 2FA
disable_custom_emoji: Malebligi proprajn emoĝiojn
+ disable_relay: Malebligi Relajson
+ disable_sign_in_token_auth_user: Malebligi aŭtentigon per retpoŝta ĵetono por la uzanto
disable_user: Neebligi la uzanton
enable_custom_emoji: Ebligi Propran Emoĝion
+ enable_relay: Ebligi Relajson
+ enable_sign_in_token_auth_user: Ebligi aŭtentigon per retpoŝta ĵetono por la uzanto
enable_user: Ebligi uzanton
memorialize_account: Memorigu Konton
promote_user: Promocii Uzanton
@@ -231,28 +245,36 @@ eo:
confirm_user_html: "%{name} konfirmis retadreson de uzanto %{target}"
create_account_warning_html: "%{name} sendis averton al %{target}"
create_announcement_html: "%{name} kreis novan anoncon %{target}"
+ create_canonical_email_block_html: "%{name} blokis retpoŝtadreson per krado %{target}"
create_custom_emoji_html: "%{name} alŝutis novan emoĝion %{target}"
create_domain_allow_html: "%{name} aldonis domajnon %{target} al la blanka listo"
create_domain_block_html: "%{name} blokis domajnon %{target}"
create_email_domain_block_html: "%{name} blokis retpoŝtan domajnon %{target}"
create_ip_block_html: "%{name} kreis regulon por IP %{target}"
+ create_relay_html: "%{name} kreis relajson %{target}"
create_unavailable_domain_html: "%{name} ĉesis sendon al domajno %{target}"
create_user_role_html: "%{name} kreis rolon de %{target}"
demote_user_html: "%{name} degradis uzanton %{target}"
destroy_announcement_html: "%{name} forigis anoncon %{target}"
+ destroy_canonical_email_block_html: "%{name} malblokis retpoŝtadreson per krado %{target}"
destroy_custom_emoji_html: "%{name} forigis emoĝion %{target}"
destroy_domain_allow_html: "%{name} forigis domajnon %{target} el la blanka listo"
destroy_domain_block_html: "%{name} malblokis domajnon %{target}"
destroy_email_domain_block_html: "%{name} malblokis retpoŝtan domajnon %{target}"
destroy_instance_html: "%{name} forigis domajnon %{target}"
destroy_ip_block_html: "%{name} forigis regulon por IP %{target}"
+ destroy_relay_html: "%{name} forigis la relajson %{target}"
destroy_status_html: "%{name} forigis mesaĝojn de %{target}"
destroy_unavailable_domain_html: "%{name} restartigis sendon al domajno %{target}"
destroy_user_role_html: "%{name} forigis rolon de %{target}"
disable_2fa_user_html: "%{name} malebligis dufaktoran aŭtentigon por uzanto %{target}"
disable_custom_emoji_html: "%{name} malebligis la emoĝion %{target}"
+ disable_relay_html: "%{name} malebligis la relajson %{target}"
+ disable_sign_in_token_auth_user_html: "%{name} malebligis la aŭtentigon de retpoŝta ĵetono por %{target}"
disable_user_html: "%{name} malebligis ensaluton por uzanto %{target}"
enable_custom_emoji_html: "%{name} ebligis la emoĝion %{target}"
+ enable_relay_html: "%{name} ebligis la relajson %{target}"
+ enable_sign_in_token_auth_user_html: "%{name} ebligis la aŭtentigon de retpoŝta ĵetono por %{target}"
enable_user_html: "%{name} ebligis ensaluton por uzanto %{target}"
memorialize_account_html: "%{name} ŝanĝis la konton de %{target} al memora paĝo"
promote_user_html: "%{name} plirangigis uzanton %{target}"
@@ -260,6 +282,7 @@ eo:
reject_user_html: "%{name} malakceptis registriĝon de %{target}"
remove_avatar_user_html: "%{name} forigis la profilbildon de %{target}"
reopen_report_html: "%{name} remalfermis signalon %{target}"
+ resend_user_html: "%{name} resendis konfirman retmesaĝon por %{target}"
reset_password_user_html: "%{name} restarigis la pasvorton de la uzanto %{target}"
resolve_report_html: "%{name} solvis raporton %{target}"
sensitive_account_html: "%{name} markis audovidaĵon de %{target} kiel tiklan"
@@ -274,6 +297,7 @@ eo:
update_custom_emoji_html: "%{name} ĝisdatigis la emoĝion %{target}"
update_domain_block_html: "%{name} ĝisdatigis domajnblokon por %{target}"
update_ip_block_html: "%{name} ŝanĝis regulon por IP %{target}"
+ update_report_html: "%{name} ĝisdatigis la raporton %{target}"
update_status_html: "%{name} ĝisdatigis afiŝon de %{target}"
update_user_role_html: "%{name} ŝanĝis la rolon %{target}"
deleted_account: forigita konto
@@ -429,8 +453,10 @@ eo:
create: Aldoni domajnon
resolve: Solvi domajnon
title: Bloki novan retpoŝtan domajnon
+ no_email_domain_block_selected: Neniuj domajn blokoj ŝanĝiĝis ĉar nenio estis elektita
not_permitted: Ne permesita
resolved_through_html: Solvis tra %{domain}
+ title: Blokis retpoŝtajn domajnojn
export_domain_allows:
new:
title: Importi domajnpermesojn
@@ -455,6 +481,8 @@ eo:
title: Rekomendoj de sekvado
unsuppress: Regajni sekvorekomendon
instances:
+ audit_log:
+ title: Novaj Protokoloj Pri Ekzamenoj
availability:
description_html:
one: Se sendo la domajno malsukcesis por %{count} dio, ne estas sendprovo plu escepte de la dojmano.
@@ -522,6 +550,7 @@ eo:
total_reported: Signaloj pri ili
total_storage: Aŭdovidaj kunsendaĵoj
totals_time_period_hint_html: Sumo montritas malsupre inkluzivas datumo ekde komenco.
+ unknown_instance: Nuntempe ne ekzistas registro pri ĉi tiu domajno sur ĉi tiu servilo.
invites:
deactivate_all: Malaktivigi ĉion
filter:
@@ -583,6 +612,9 @@ eo:
actions_description_remote_html: Decidu kiun klopodon por solvi ĉi tiun raporton. Ĉi tiu efikas kiel nur via servilo komuniki per ĉi tiu fora konto kaj trakti ĝian enhavon.
actions_no_posts: Ĉi tiu raporto havas neniujn rilatajn afiŝojn por forigi
add_to_report: Aldoni pli al raporto
+ already_suspended_badges:
+ local: Jam malakceptita sur ĉi tiu servilo
+ remote: Jam malakceptita sur ilia servilo
are_you_sure: Ĉu vi certas?
assign_to_self: Asigni al mi
assigned: Asignita kontrolanto
@@ -731,6 +763,7 @@ eo:
desc_html: Ĉi tio dependas de eksteraj hCaptcha-skriptoj, kiuj povas esti problemo pri sekureco kaj privateco. Ankaŭ, ĝi povas igi la registran procezon multe malpli alirebla por iuj homoj (precipe homoj kun handikapoj). Pro ĉi tiuj kialoj, bonvolu konsideri alternativajn rimedojn kiel registradon per aprobo aŭ per invito.
title: Postuli novajn uzantojn solvi CAPTCHA por konfirmi sian konton
content_retention:
+ danger_zone: Danĝera zono
preamble: Regi kiel uzantogenerita enhavo konservitis en Mastodon.
title: Enhavkonservo
default_noindex:
@@ -750,6 +783,7 @@ eo:
disabled: Al neniu
users: Al salutintaj lokaj uzantoj
registrations:
+ moderation_recommandation: Bonvolu certigi, ke vi havas taŭgan kaj reaktivan moderigan teamon antaŭ ol vi malfermas registriĝojn al ĉiuj!
preamble: Regi kiu povas krei konton ĉe via servilo.
title: Registriĝoj
registrations_mode:
@@ -759,6 +793,7 @@ eo:
open: Iu povas aliĝi
security:
authorized_fetch: Devigi aŭtentigon de frataraj serviloj
+ authorized_fetch_overridden_hint: Vi nuntempe ne povas ŝanĝi ĉi tiun agordon ĉar ĝi estas anstataŭita de mediovariablo.
title: Agordoj de la servilo
site_uploads:
delete: Forigi elŝutitan dosieron
@@ -772,6 +807,7 @@ eo:
types:
major: Ĉefa eldono
minor: Neĉefa eldono
+ patch: Eldono de flikaĵo — korektoj de eraroj kaj facile apliki ŝanĝojn
version: Versio
statuses:
account: Skribanto
@@ -794,7 +830,7 @@ eo:
original_status: Originala afiŝo
reblogs: Reblogaĵoj
status_changed: Afiŝo ŝanĝiĝis
- title: Afiŝoj de la konto
+ title: Afiŝoj de la konto - @%{name}
trending: Popularaĵoj
visibility: Videbleco
with_media: Kun aŭdovidaĵoj
@@ -828,9 +864,11 @@ eo:
sidekiq_process_check:
message_html: Neniu Sidekiq-procezo por la %{value} vico
software_version_check:
+ action: Vidi disponeblajn ĝisdatigojn
message_html: Mastodon-ĝisdatigo disponeblas.
software_version_critical_check:
action: Vidi disponeblajn ĝisdatigojn
+ message_html: Grava ĝisdatigo de Mastodon disponeblas, bonvolu ĝisdatigi kiel eble plej rapide.
software_version_patch_check:
action: Vidi disponeblajn ĝisdatigojn
upload_check_privacy_error:
@@ -841,10 +879,17 @@ eo:
message_html: "Via objektostokado estas misagordita. La privateco de viaj uzantoj estas en risko."
tags:
moderation:
+ not_usable: Ne uzebla
+ review_requested: Revizio petita
+ reviewed: Reviziita
title: Stato
+ unreviewed: Nereviziita
+ usable: Uzebla
name: Nomo
newest: Plej novaj
oldest: Plej malnovaj
+ open: Vidu publike
+ reset: Restartigi
review: La statuso de la recenzo
search: Serĉi
title: Kradvortoj
@@ -860,7 +905,9 @@ eo:
allow: Permesi ligilon
allow_provider: Permesi publikiganto
confirm_allow: Ĉu vi certas, ke vi volas permesi elektitajn ligilojn?
+ confirm_allow_provider: Ĉu vi certas, ke vi volas permesi elektitajn provizantojn?
confirm_disallow: Ĉu vi certas, ke vi volas malpermesi elektitajn ligilojn?
+ confirm_disallow_provider: Ĉu vi certas, ke vi volas malpermesi elektitajn provizantojn?
description_html: Ĉioj estas ligiloj kiuj nun diskonitajs multe de kontoj kiujn via servilo vidas. Ligiloj ne montritas publike se vi ne aprobis la publikiganton.
disallow: Malpermesi ligilon
disallow_provider: Malpermesi publikiganton
@@ -918,6 +965,7 @@ eo:
used_by_over_week:
one: Uzita de 1 persono ekde lasta semajno
other: Uzita de %{count} personoj ekde lasta semajno
+ title: Rekomendoj kaj Tendencoj
trending: Popularaĵoj
warning_presets:
add_new: Aldoni novan
@@ -957,6 +1005,8 @@ eo:
body: "%{target} apelacias kontroldecido de %{action_taken_by} de %{date}, kiu estas %{type}. Ĝi skribis:"
next_steps: Vi povas aprobi apelacion por malfari kontroldecidon au ignori.
subject: "%{username} apelacias kontroldecidon ĉe %{instance}"
+ new_critical_software_updates:
+ body: Novaj gravaj versioj de Mastodon estis publikigitaj, vi eble volas ĝisdatigi kiel eble plej baldaŭ!
new_pending_account:
body: La detaloj de la nova konto estas ĉi-sube. Vi povas akcepti aŭ malakcepti tiun aliĝilon.
subject: Nova konto atendas por recenzo en %{instance} (%{username})
@@ -966,6 +1016,7 @@ eo:
subject: Nova signalo por %{instance} (#%{id})
new_software_updates:
body: Novaj versioj de Mastodon estis publikigitaj, vi eble volas ĝisdatigi!
+ subject: Novaj versioj de Mastodon disponeblas por %{instance}!
new_trends:
body: 'La eroj bezonas kontrolon antau ol ili povas montritas publike:'
new_trending_links:
@@ -1013,10 +1064,13 @@ eo:
apply_for_account: Peti konton
captcha_confirmation:
help_html: Se vi havas problemojn solvi la CAPTCHA, vi povas kontakti nin per %{email} kaj ni povas helpi vin.
+ hint_html: Nur unu plia afero! Ni devas konfirmi, ke vi estas homo (tio estas por ke ni povu konservi la spamon ekstere!). Solvu la CAPTCHA sube kaj alklaku "Daŭrigu".
title: Sekureckontrolo
confirmations:
+ awaiting_review_title: Via registriĝo estas reviziita
clicking_this_link: alklakante ĉi tiun ligilon
login_link: ensaluti
+ proceed_to_login_html: Vi nun povas iri al %{login_link}.
registration_complete: Via registriĝo sur %{domain} nun finiĝis!
welcome_title: Bonvenon, %{name}!
wrong_email_hint: Se tiu retadreso ne estas ĝusta, vi povas ŝanĝi ĝin en kontagordoj.
@@ -1063,6 +1117,7 @@ eo:
set_new_password: Elekti novan pasvorton
setup:
link_not_received: Ĉu vi ne ricevis ligilon?
+ new_confirmation_instructions_sent: Vi ricevos novan retpoŝton kun la konfirma ligilo post kelkaj minutoj!
title: Kontrolu vian retpoŝta enirkesto
sign_in:
preamble_html: Ensalutu per via detaloj de %{domain}. Se via konto gastigantigas sur malsama servilo, vi ne povas ensaluti ĉi tie.
@@ -1072,6 +1127,7 @@ eo:
title: Ni pretigu vin ĉe %{domain}.
status:
account_status: Statuso de la konto
+ confirming: Atendante ke retpoŝta konfirmo estos kompletigita.
functional: Via konto estas tute funkcia.
redirecting_to: Via konto estas neaktiva ĉar ĝi nun alidirektas al %{acct}.
view_strikes: Vidi antauaj admonoj kontra via konto
@@ -1079,8 +1135,11 @@ eo:
use_security_key: Uzi sekurecan ŝlosilon
author_attribution:
example_title: Ekzempla teksto
+ hint_html: Ĉu vi skribas novaĵojn aŭ blogartikolojn ekster Mastodon? Kontrolu kiel vi estas kreditita kiam ili estas kunhavataj ĉe Mastodon.
+ instructions: 'Certigu, ke ĉi tiu kodo estas en la HTML de via artikolo:'
more_from_html: Pli de %{name}
s_blog: Blogo de %{name}
+ then_instructions: Poste, aldonu la domajnan nomon de la publikigado en la suba kampo.
title: Atribuo de aŭtoro
challenge:
confirm: Daŭrigi
@@ -1118,6 +1177,8 @@ eo:
before: 'Antau ol dauri, legu ĉi tiujn notojn zorgeme:'
caches: Enhavo kiu kaŝmemorigitas de aliaj serviloj eble restas
data_removal: Viaj afiŝoj kaj aliaj informoj estos forigita por eterne
+ email_change_html: Vi povas ŝanĝi vian retadreson sen forigi vian konton
+ email_contact_html: Se ĝi ankoraŭ ne alvenas, vi povas retpoŝti al %{email} por helpo
irreversible: Vi ne povas regajni au reaktivigi vian konton
more_details_html: Por pli da detaloj, vidi la privatecan politikon.
username_available: Via uzantnomo iĝos denove disponebla
@@ -1281,9 +1342,11 @@ eo:
states:
finished: Finita
in_progress: Farata
+ scheduled: Planitaj
unconfirmed: Nekonfirmita
status: Stato
success: Viaj datumoj estis sukcese alŝutitaj kaj estos traktitaj kiel planite
+ time_started: Komencis je
titles:
following: Importado de sekvaj kontoj
lists: Importi listojn
@@ -1330,6 +1393,7 @@ eo:
authentication_methods:
otp: 2-faktora autentigprogramaro
password: pasvorto
+ sign_in_token: retpoŝta sekureca kodo
webauthn: sekurecaj ŝlosiloj
description_html: Se vi vidas nerekonitan agon, eble ŝanĝu vian pasvorton.
empty: Neniu autentighistorio disponebla
@@ -1340,6 +1404,9 @@ eo:
unsubscribe:
action: Jes, malabonu
complete: Malabonita
+ emails:
+ notification_emails:
+ follow_request: retpoŝtajn petoj de sekvado
title: Malaboni
media_attachments:
validations:
@@ -1476,6 +1543,9 @@ eo:
errors:
limit_reached: Limito de malsamaj reagoj atinginta
unrecognized_emoji: ne estas rekonita emoĝio
+ redirects:
+ prompt: Se vi fidas ĉi tiun ligon, alklaku ĝin por daŭrigi.
+ title: Vi foriras %{instance}.
relationships:
activity: Konta aktiveco
confirm_follow_selected_followers: Ĉu vi certas ke vi volas sekvi la elektitajn sekvantojn?
@@ -1570,10 +1640,12 @@ eo:
delete: Konta forigo
development: Evoluigado
edit_profile: Redakti profilon
+ export: Eksporti
featured_tags: Elstarigitaj kradvortoj
import: Enporti
import_and_export: Importi kaj eksporti
migrate: Konta migrado
+ notifications: Retpoŝtaj sciigoj
preferences: Preferoj
profile: Profilo
relationships: Sekvatoj kaj sekvantoj
@@ -1582,6 +1654,9 @@ eo:
two_factor_authentication: Dufaktora aŭtentigo
webauthn_authentication: Sekurecaj ŝlosiloj
severed_relationships:
+ download: Elŝuti (%{count})
+ event_type:
+ user_domain_block: Vi blokis %{target_name}
lost_followers: Perditaj sekvantoj
type: Evento
statuses:
@@ -1666,11 +1741,13 @@ eo:
contrast: Mastodon (Forta kontrasto)
default: Mastodon (Malhela)
mastodon-light: Mastodon (Hela)
+ system: Aŭtomata (uzu sisteman temon)
time:
formats:
default: "%Y.%b.%d, %H:%M"
month: "%b %Y"
time: "%H:%M"
+ with_time_zone: "%b %d, %Y, %H:%M %Z"
translation:
errors:
quota_exceeded: La tutservila uzkvoto por la tradukservo estas superita.
@@ -1704,6 +1781,10 @@ eo:
extra: Estas nun preta por elŝuto!
subject: Via arkivo estas preta por elŝutado
title: Arkiva elŝuto
+ failed_2fa:
+ explanation: Iu provis ensaluti al via konto sed provizis nevalidan duan aŭtentikigfaktoron.
+ further_actions_html: Se ĉi tio ne estis vi, ni rekomendas ke vi %{action} tuj ĉar ĝi povas esti endanĝerigita.
+ subject: Malsukceso dum la dua aŭtentikigfaktoro
suspicious_sign_in:
change_password: ŝanĝi vian pasvorton
details: 'Ĉi-sube estas detaloj pri la saluto:'
@@ -1743,18 +1824,32 @@ eo:
silence: Konto limigita
suspend: Konto suspendita
welcome:
+ apps_android_action: Akiru ĝin ĉe Google Play
+ apps_ios_action: Elŝutu ĉe la App Store
apps_step: Elŝutu niajn oficialajn aplikaĵojn.
apps_title: Aplikaĵoj de Mastodon
+ checklist_title: Bonvenan Markolisto
edit_profile_action: Agordi
edit_profile_title: Agordi vian profilon
explanation: Jen kelkaj konsiloj por helpi vin komenci
feature_action: Lerni pli
follow_action: Sekvi
+ follow_step: Sekvi interesajn homojn estas pri kio Mastodon temas.
+ follows_subtitle: Sekvu konatajn kontojn
+ follows_title: Kiun sekvi
+ follows_view_more: Rigardu pli da homoj por sekvi
+ hashtags_recent_count:
+ one: "%{people} homo en la pasintaj 2 tagoj"
+ other: "%{people} homoj en la pasintaj 2 tagoj"
+ hashtags_subtitle: Esploru kio estas tendenco ekde la pasintaj 2 tagoj
hashtags_title: Popularaj kradvortoj
hashtags_view_more: Vidi pli da popularaj kradvortoj
+ post_action: Redakti
post_step: Salutu la mondon per teksto, fotoj, filmetoj aŭ balotenketoj.
post_title: Faru vian unuan afiŝon
+ share_action: Kundividi
share_step: Sciigu viajn amikojn kiel trovi vin sur Mastodon.
+ share_title: Kunhavigu vian Mastodon-profilon
sign_in_action: Ensaluti
subject: Bonvenon en Mastodon
title: Bonvenon, %{name}!
@@ -1772,6 +1867,7 @@ eo:
instructions_html: Kopiu kaj algluu la jenan kodon en la HTML de via retejo. Poste aldonu la adreson de via retejo en unu el la kromaj kampoj de via profilo en la langeto "Redakti profilon" kaj konservu la ŝanĝojn.
verification: Kontrolo
verified_links: Via kontrolitaj ligiloj
+ website_verification: Reteja konfirmo
webauthn_credentials:
add: Aldoni novan sekurecan ŝlosilon
create:
diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml
index 04ff7880a1..6dc9d99f37 100644
--- a/config/locales/es-AR.yml
+++ b/config/locales/es-AR.yml
@@ -833,7 +833,7 @@ es-AR:
original_status: Mensaje original
reblogs: Adhesiones
status_changed: Mensaje cambiado
- title: Mensajes de la cuenta
+ title: Mensajes de la cuenta - @%{name}
trending: En tendencia
visibility: Visibilidad
with_media: Con medios
@@ -1166,9 +1166,11 @@ es-AR:
use_security_key: Usar la llave de seguridad
author_attribution:
example_title: Texto de ejemplo
- hint_html: Controlá cómo se te da crédito cuando los enlaces son compartidos en Mastodon.
+ hint_html: "¿Escribís artículos de noticias o de blog fuera de Mastodon? Controlá cómo se te acredita cuando se comparten en Mastodon."
+ instructions: 'Asegurate de que este código está en el HTML de tu artículo:'
more_from_html: Más de %{name}
s_blog: Blog de %{name}
+ then_instructions: Luego, agregá el nombre de dominio de la publicación en el campo de abajo.
title: Atribución del autor
challenge:
confirm: Continuar
diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml
index 2c18465a26..7e6570f068 100644
--- a/config/locales/es-MX.yml
+++ b/config/locales/es-MX.yml
@@ -241,7 +241,7 @@ es-MX:
confirm_user_html: "%{name} confirmó la dirección de correo electrónico del usuario %{target}"
create_account_warning_html: "%{name} envió una advertencia a %{target}"
create_announcement_html: "%{name} ha creado un nuevo anuncio %{target}"
- create_canonical_email_block_html: "%{name} bloqueó el correo electrónico con el hash %{target}"
+ create_canonical_email_block_html: "%{name} ha bloqueado el correo electrónico con el hash %{target}"
create_custom_emoji_html: "%{name} subió un nuevo emoji %{target}"
create_domain_allow_html: "%{name} permitió la federación con el dominio %{target}"
create_domain_block_html: "%{name} bloqueó el dominio %{target}"
@@ -251,7 +251,7 @@ es-MX:
create_user_role_html: "%{name} creó el rol %{target}"
demote_user_html: "%{name} degradó al usuario %{target}"
destroy_announcement_html: "%{name} eliminó el anuncio %{target}"
- destroy_canonical_email_block_html: "%{name} desbloqueó el correo electrónico con el hash %{target}"
+ destroy_canonical_email_block_html: "%{name} ha desbloqueado el correo electrónico con el hash %{target}"
destroy_custom_emoji_html: "%{name} eliminó el emoji %{target}"
destroy_domain_allow_html: "%{name} bloqueó la federación con el dominio %{target}"
destroy_domain_block_html: "%{name} desbloqueó el dominio %{target}"
@@ -263,10 +263,10 @@ es-MX:
destroy_user_role_html: "%{name} eliminó el rol %{target}"
disable_2fa_user_html: "%{name} desactivó el requisito de dos factores para el usuario %{target}"
disable_custom_emoji_html: "%{name} desactivó el emoji %{target}"
- disable_sign_in_token_auth_user_html: "%{name} ha deshabilitado la autenticación por token de correo electrónico para %{target}"
+ disable_sign_in_token_auth_user_html: "%{name} desactivó la autenticación por token de correo electrónico para %{target}"
disable_user_html: "%{name} deshabilitó el inicio de sesión para el usuario %{target}"
enable_custom_emoji_html: "%{name} activó el emoji %{target}"
- enable_sign_in_token_auth_user_html: "%{name} ha habilitado la autenticación por token de correo electrónico para %{target}"
+ enable_sign_in_token_auth_user_html: "%{name} activó autenticación por token de correo electrónico para %{target}"
enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}"
memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una página in memoriam"
promote_user_html: "%{name} promoción al usuario %{target}"
@@ -274,7 +274,7 @@ es-MX:
reject_user_html: "%{name} rechazó el registro de %{target}"
remove_avatar_user_html: "%{name} eliminó el avatar de %{target}"
reopen_report_html: "%{name} reabrió el informe %{target}"
- resend_user_html: "%{name} ha reenviado el correo de confirmación para %{target}"
+ resend_user_html: "%{name} reenvió correo electrónico de confirmación para %{target}"
reset_password_user_html: "%{name} reinició la contraseña del usuario %{target}"
resolve_report_html: "%{name} resolvió el informe %{target}"
sensitive_account_html: "%{name} marcó la multimedia de %{target} como sensible"
@@ -605,7 +605,7 @@ es-MX:
suspend_description_html: La cuenta y todos sus contenidos serán inaccesibles y eventualmente eliminados, e interactuar con ella será imposible. Reversible durante 30 días. Cierra todos los reportes contra esta cuenta.
actions_description_html: Decide qué medidas tomar para resolver esta denuncia. Si tomas una acción punitiva contra la cuenta denunciada, se le enviará a dicha cuenta una notificación por correo electrónico, excepto cuando se seleccione la categoría Spam.
actions_description_remote_html: Decide qué medidas tomar para resolver este reporte. Esto solo afectará a la forma en que tu servidor se comunica con esta cuenta remota y gestiona su contenido.
- actions_no_posts: Este informe no tiene ningún mensaje asociado para eliminar
+ actions_no_posts: Este informe no tiene ninguna publicación asociada para eliminar
add_to_report: Añadir más al reporte
already_suspended_badges:
local: Ya suspendido en este servidor
@@ -802,7 +802,7 @@ es-MX:
destroyed_msg: "¡Carga del sitio eliminada con éxito!"
software_updates:
critical_update: Crítico — por favor actualiza rápidamente
- description: Se recomienda mantener actualizada tu instalación de Mastodon para beneficiarte de las últimas correcciones y características. Además, a veces es crítico actualizar Mastodon de manera oportuna para evitar problemas de seguridad. Por estas razones, Mastodon comprueba si hay actualizaciones cada 30 minutos, y te notificará de acuerdo a tus preferencias de notificación por correo electrónico.
+ description: Se recomienda mantener tu instalación de Mastodon actualizada para beneficiarte de las últimas correcciones y características. Además, a veces es crítico actualizar Mastodon a tiempo para evitar problemas de seguridad. Por estas razones, Mastodon busca actualizaciones cada 30 minutos, y le notificará de acuerdo a sus preferencias de notificación por correo electrónico.
documentation_link: Saber más
release_notes: Notas de la versión
title: Actualizaciones disponibles
@@ -833,7 +833,7 @@ es-MX:
original_status: Publicación original
reblogs: Impulsos
status_changed: Publicación cambiada
- title: Estado de las cuentas
+ title: Estado de las cuentas - @%{name}
trending: En tendencia
visibility: Visibilidad
with_media: Con multimedia
@@ -1166,9 +1166,11 @@ es-MX:
use_security_key: Usar la clave de seguridad
author_attribution:
example_title: Texto de ejemplo
- hint_html: Controla cómo se te dará atribución cuando se compartan enlaces en Mastodon.
+ hint_html: "¿Estás escribiendo artículos de noticias o blogs fuera de Mastodon? Controla cómo te acreditan cuando se comparten en Mastodon."
+ instructions: 'Asegúrate de que este código esté en el HTML de tu artículo:'
more_from_html: Más de %{name}
s_blog: Blog de %{name}
+ then_instructions: A continuación, añade el nombre de dominio de la publicación en el campo inferior.
title: Atribución del autor
challenge:
confirm: Continuar
@@ -1557,9 +1559,9 @@ es-MX:
poll:
subject: Una encuesta de %{name} ha terminado
reblog:
- body: "%{name} ha retooteado tu estado:"
- subject: "%{name} ha retooteado tu estado"
- title: Nueva difusión
+ body: 'Tu publicación fue impulsada por %{name}:'
+ subject: "%{name} ha impulsado tu publicación"
+ title: Nuevo impulso
status:
subject: "%{name} acaba de publicar"
update:
@@ -1771,7 +1773,7 @@ es-MX:
direct: Las publicaciones que son visibles solo para los usuarios mencionados no pueden fijarse
limit: Ya has fijado el número máximo de publicaciones
ownership: El toot de alguien más no puede fijarse
- reblog: Un boost no puede fijarse
+ reblog: No se puede fijar una publicación impulsada
title: "%{name}: «%{quote}»"
visibilities:
direct: Directa
@@ -1787,9 +1789,9 @@ es-MX:
exceptions: Excepciones
explanation: Debido a que la eliminación de mensajes es una operación costosa, esto se hace lentamente, a lo largo de un tiempo, cuando el servidor no está ocupado. Por este motivo, puede que tus publicaciones sean borradas algo después de que alcancen el umbral de tiempo especificado.
ignore_favs: Ignorar favoritos
- ignore_reblogs: Ignorar reblogueos
+ ignore_reblogs: Ignorar impulsos
interaction_exceptions: Excepciones basadas en interacciones
- interaction_exceptions_explanation: Ten en cuenta que no hay garantía de que se eliminen las publicaciones que están por debajo de los umbrales de favoritos o de reblogueos si los han superado en algún momento.
+ interaction_exceptions_explanation: Ten en cuenta que no se garantiza la eliminación de las publicaciones si bajan del umbral de favoritos o de impulso después de haberlos superado una vez.
keep_direct: Mantener mensajes directos
keep_direct_hint: No elimina ninguno de tus mensajes directos
keep_media: Mantener publicaciones con multimedia adjunto
@@ -1814,7 +1816,7 @@ es-MX:
min_age_label: Umbral de tiempo
min_favs: Mantener mensajes con un número de favoritos mayor que
min_favs_hint: No borra ninguna de las publicaciones que hayan recibido al menos esta cantidad de favoritos. Deja en blanco para eliminar publicaciones sin importar el número de favoritos
- min_reblogs: Mantener publicaciones reblogueadas más de
+ min_reblogs: Mantener publicaciones impulsadas más de
min_reblogs_hint: No borra ninguna de las publicaciones que hayan sido reblogueadas más de este número de veces. Deja en blanco para eliminar publicaciones sin importar el número de reblogueos
stream_entries:
sensitive_content: Contenido sensible
@@ -1922,7 +1924,7 @@ es-MX:
checklist_subtitle: 'Comencemos en esta nueva frontera social:'
checklist_title: Lista de bienvenida
edit_profile_action: Personalizar
- edit_profile_step: Aumenta tus interacciones con un perfil completo.
+ edit_profile_step: Aumenta tus interacciones completando tu perfil.
edit_profile_title: Personaliza tu perfil
explanation: Aquí hay algunos consejos para empezar
feature_action: Leer más
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 47d32c62c8..32abd9420d 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -67,8 +67,8 @@ es:
display_name: Nombre
domain: Dominio
edit: Editar
- email: E-mail
- email_status: E-mail Status
+ email: Correo electrónico
+ email_status: Estado del correo electrónico
enable: Habilitar
enable_sign_in_token_auth: Habilitar la autenticación por token de correo electrónico
enabled: Habilitada
@@ -86,7 +86,7 @@ es:
local: Local
remote: Remoto
title: Localización
- login_status: Estado del login
+ login_status: Estado de inicio de sesión
media_attachments: Multimedia
memorialize: Convertir en memorial
memorialized: Cuenta conmemorativa
@@ -102,7 +102,7 @@ es:
moderation_notes: Notas de moderación
most_recent_activity: Actividad más reciente
most_recent_ip: IP más reciente
- no_account_selected: Ninguna cuenta se cambió como ninguna fue seleccionada
+ no_account_selected: Ninguna cuenta se cambió, ya que ninguna fue seleccionada
no_limits_imposed: Sin límites impuestos
no_role_assigned: Ningún rol asignado
not_subscribed: No se está suscrito
@@ -132,17 +132,17 @@ es:
success: "¡Enlace de confirmación enviado con éxito!"
reset: Reiniciar
reset_password: Reiniciar contraseña
- resubscribe: Re-suscribir
+ resubscribe: Volver a suscribirse
role: Rol
search: Buscar
search_same_email_domain: Otros usuarios con el mismo dominio de correo
search_same_ip: Otros usuarios con la misma IP
security: Seguridad
security_measures:
- only_password: Sólo contraseña
+ only_password: Solo contraseña
password_and_2fa: Contraseña y 2FA
sensitive: Sensible
- sensitized: marcado como sensible
+ sensitized: Marcada como sensible
shared_inbox_url: URL de bandeja compartida
show:
created_reports: Reportes hechos por esta cuenta
@@ -161,10 +161,10 @@ es:
unblocked_email_msg: Se ha desbloqueado correctamente la dirección de correo de %{username}
unconfirmed_email: Correo electrónico sin confirmar
undo_sensitized: Desmarcar como sensible
- undo_silenced: Des-silenciar
- undo_suspension: Des-suspender
+ undo_silenced: Dejar de silenciar
+ undo_suspension: Deshacer suspensión
unsilenced_msg: Se quitó con éxito el límite de la cuenta %{username}
- unsubscribe: Desuscribir
+ unsubscribe: Cancelar suscripción
unsuspended_msg: Se quitó con éxito la suspensión de la cuenta de %{username}
username: Nombre de usuario
view_domain: Ver resumen del dominio
@@ -296,7 +296,7 @@ es:
empty: No se encontraron registros.
filter_by_action: Filtrar por acción
filter_by_user: Filtrar por usuario
- title: Log de auditoría
+ title: Registro de auditoría
unavailable_instance: "(nombre de dominio no disponible)"
announcements:
destroyed_msg: "¡Anuncio eliminado con éxito!"
@@ -338,7 +338,7 @@ es:
listed: Listados
new:
title: Añadir nuevo emoji personalizado
- no_emoji_selected: No se cambió ningún emoji ya que no se seleccionó ninguno
+ no_emoji_selected: No se cambió ningún emoji, ya que no se seleccionó ninguno
not_permitted: No tienes permiso para realizar esta acción
overwrite: Sobrescribir
shortcode: Código de atajo
@@ -833,7 +833,7 @@ es:
original_status: Publicación original
reblogs: Impulsos
status_changed: Publicación cambiada
- title: Publicaciones de la cuenta
+ title: Publicaciones de la cuenta - @%{name}
trending: En tendencia
visibility: Visibilidad
with_media: Con multimedia
@@ -1166,9 +1166,11 @@ es:
use_security_key: Usar la clave de seguridad
author_attribution:
example_title: Texto de ejemplo
- hint_html: Controla cómo se te dará atribución cuando se compartan enlaces en Mastodon.
+ hint_html: "¿Escribes noticias o artículos de blog fuera de Mastodon? Controla cómo se te acredita cuando se comparten en Mastodon."
+ instructions: 'Asegúrate de que este código está en el HTML de tu artículo:'
more_from_html: Más de %{name}
s_blog: Blog de %{name}
+ then_instructions: A continuación, añade el nombre de dominio de la publicación en el campo inferior.
title: Atribución del autor
challenge:
confirm: Continuar
diff --git a/config/locales/et.yml b/config/locales/et.yml
index 4372a92843..f8a4f7f69e 100644
--- a/config/locales/et.yml
+++ b/config/locales/et.yml
@@ -21,6 +21,7 @@ et:
one: Postitus
other: Postitused
posts_tab_heading: Postitused
+ self_follow_error: Omaenda konto jälgimine ei ole lubatud
admin:
account_actions:
action: Täida tegevus
@@ -832,7 +833,7 @@ et:
original_status: Algne postitus
reblogs: Jagamised
status_changed: Muudetud postitus
- title: Konto postitused
+ title: Konto postitused - @%{name}
trending: Populaarne
visibility: Nähtavus
with_media: Meediaga
@@ -875,6 +876,9 @@ et:
message_html: Serverireegleid pole defineeritud.
sidekiq_process_check:
message_html: Ühtegi Sidekiq protsessi pole %{value} järjekorra jaoks. Sidekiq seadistus vajab üle vaatamist
+ software_version_check:
+ action: Vaata saadaval uuendusi
+ message_html: Mastodoni uuendus on saadaval.
software_version_critical_check:
action: Vaata saadaolevaid uuendusi
message_html: Saadaval on Mastodoni kriitiline uuendus, uuenda nii kiiresti kui võimalik.
@@ -1162,9 +1166,11 @@ et:
use_security_key: Kasuta turvavõtit
author_attribution:
example_title: Näidistekst
- hint_html: Määra, kuidas sind krediteeritakse, kui linke Mastodonis jagatakse.
+ hint_html: Kirjutad uudiseid või blogisid Mastodonist väljapool? Määra, kuidas sinule viidatakse, kui neid lehti jagatakse Mastodonis.
+ instructions: 'Vaata, et artikli HTML sisus oleks see kood sees:'
more_from_html: Rohkem kasutajalt %{name}
s_blog: Kasutaja %{name} blogi
+ then_instructions: Siis lisa avaldaja domeeninimi allolevasse välja.
title: Autori tunnustamine
challenge:
confirm: Jätka
@@ -1362,6 +1368,44 @@ et:
merge_long: Hoia olemasolevad andmed ja lisa uusi
overwrite: Kirjuta üle
overwrite_long: Vaheta praegused andmed uute vastu
+ overwrite_preambles:
+ blocking_html:
+ one: Oled asendamas oma blokeeringute loetelu faili %{filename} sisuga, milles on kuni %{count} konto.
+ other: Oled asendamas oma blokeeringute loetelu faili %{filename} sisuga, milles on kuni %{count} kontot.
+ bookmarks_html:
+ one: Oled asendamas oma järjehoidjad faili %{filename} sisuga, milles on kuni %{count} postitus.
+ other: Oled asendamas oma järjehoidjad faili %{filename} sisuga, milles on kuni %{count} postitust.
+ domain_blocking_html:
+ one: Oled asendamas oma domeenide blokeeringu loetelu faili %{filename} sisuga, milles on kuni %{count} domeen.
+ other: Oled asendamas oma domeenide blokeeringu loetelu faili %{filename} sisuga, milles on kuni %{count} domeen.
+ following_html:
+ one: Oled jälgima hakkamas kuni %{count} kontot failist %{filename} ja lõpetad kõigi teiste jälgimise.
+ other: Oled jälgima hakkamas kuni %{count} kontot failist %{filename} ja lõpetad kõigi teiste jälgimise.
+ lists_html:
+ one: Oled asendamas oma loetelusid faili %{filename} sisuga. Uutesse loeteludesse lisatakse kuni %{count} konto.
+ other: Oled asendamas oma loetelusid faili %{filename} sisuga. Uutesse loeteludesse lisatakse kuni %{count} kontot.
+ muting_html:
+ one: Oled asendamas oma vaigistatud kontode loetelu faili %{filename} sisuga, milles on kuni %{count} konto.
+ other: Oled asendamas oma vaigistatud kontode loetelu faili %{filename} sisuga, milles on kuni %{count} kontot.
+ preambles:
+ blocking_html:
+ one: Oled blokeerimas kuni %{count} konto failist %{filename}.
+ other: Oled blokeerimas kuni %{count} kontot failist %{filename}.
+ bookmarks_html:
+ one: Oled lisamas kuni %{count} postituse failist %{filename} oma järjehoidjatesse.
+ other: Oled lisamas kuni %{count} postitust failist %{filename} oma järjehoidjatesse.
+ domain_blocking_html:
+ one: Oled blokeerimas kuni %{count} domeeni failist %{filename}.
+ other: Oled blokeerimas kuni %{count} domeeni failist %{filename}.
+ following_html:
+ one: Oled jälgima hakkamas kuni %{count} konto failist %{filename}.
+ other: Oled jälgima hakkamas kuni %{count} kontot failist %{filename}.
+ lists_html:
+ one: Oled lisamas oma loeteludesse failist %{filename} kuni %{count} konto. Kui pole loetelusi, kuhu lisada, luuakse uued loetelud.
+ other: Oled lisamas oma loeteludesse failist %{filename} kuni %{count} kontot. Kui pole loetelusi, kuhu lisada, luuakse uued loetelud.
+ muting_html:
+ one: Oled vaigistamas kuni %{count} konto failist %{filename}.
+ other: Oled vaigistamas kuni %{count} kontot failist %{filename}.
preface: Saad importida mistahes andmeid, mis on eksporditud teisest serverist. Näiteks nimekirja inimestest, keda jälgid ja keda blokeerid.
recent_imports: Viimati imporditud
states:
@@ -1678,6 +1722,7 @@ et:
delete: Konto kustutamine
development: Arendus
edit_profile: Muuda profiili
+ export: Eksport
featured_tags: Esile toodud sildid
import: Impordi
import_and_export: Import / eksport
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index e9c3be2d24..a764e88bac 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -793,7 +793,7 @@ eu:
original_status: Jatorrizko bidalketa
reblogs: Bultzadak
status_changed: Bidalketa aldatuta
- title: Kontuaren bidalketak
+ title: Kontuaren bidalketak - @%{name}
trending: Joera
visibility: Ikusgaitasuna
with_media: Multimediarekin
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index e7d932de11..38daf70d29 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -190,9 +190,11 @@ fa:
create_user_role: ایجاد نقش
demote_user: تنزل کاربر
destroy_announcement: حذف اعلامیه
+ destroy_canonical_email_block: حذف انسداد رایانامه
destroy_custom_emoji: حذف اموجی سفارشی
destroy_domain_allow: حذف اجازهٔ دامنه
destroy_domain_block: حذف انسداد دامنه
+ destroy_email_domain_block: حذف انسداد دامنهٔ رایانامه
destroy_instance: پاکسازی دامنه
destroy_ip_block: حذف قاعدهٔ آیپی
destroy_status: حذف وضعیت
@@ -200,8 +202,10 @@ fa:
destroy_user_role: نابودی نقش
disable_2fa_user: از کار انداختن ورود دومرحلهای
disable_custom_emoji: از کار انداختن اموجی سفارشی
+ disable_sign_in_token_auth_user: از کار انداختن تأیید هویت ژتون رایانامهای برای کاربر
disable_user: از کار انداختن کاربر
enable_custom_emoji: به کار انداختن اموجی سفارشی
+ enable_sign_in_token_auth_user: به کار انداختن تأیید هویت ژتون رایانامهای برای کاربر
enable_user: به کار انداختن کاربر
memorialize_account: یادسپاری حساب
promote_user: ترفیع کاربر
@@ -231,20 +235,26 @@ fa:
approve_appeal_html: "%{name} درخواست تجدیدنظر تصمیم مدیر را از %{target} پذیرفت"
approve_user_html: "%{name} ثبت نام %{target} را تایید کرد"
assigned_to_self_report_html: "%{name} رسیدگی به گزارش %{target} را به عهده گرفت"
+ change_email_user_html: "%{name} نشانی رایانامهٔ کاربر %{target} را عوض کرد"
change_role_user_html: "%{name} نقش %{target} را تغییر داد"
+ confirm_user_html: "%{name} نشانی رایانامهٔ کاربر %{target} را تأیید کرد"
create_account_warning_html: "%{name} هشداری برای %{target} فرستاد"
create_announcement_html: "%{name} اعلامیهای جدید ایجاد کرد %{target}"
+ create_canonical_email_block_html: "%{name} رایانامه با درهمریزی %{target} را مسدود کرد"
create_custom_emoji_html: "%{name} اموجی تازهٔ %{target} را بارگذاشت"
create_domain_allow_html: "%{name} دامنهٔ %{target} را مجاز کرد"
create_domain_block_html: "%{name} دامنهٔ %{target} را مسدود کرد"
+ create_email_domain_block_html: "%{name} دامنهٔ رایانامهٔ %{target} را مسدود کرد"
create_ip_block_html: "%{name} برای آیپی %{target} قانونی ایجاد کرد"
create_unavailable_domain_html: "%{name} تحویل محتوا به دامنه %{target} را متوقف کرد"
create_user_role_html: "%{name} نقش %{target} را ایجاد کرد"
demote_user_html: "%{name} کاربر %{target} را تنزل داد"
destroy_announcement_html: "%{name} اعلامیهٔ %{target} را حذف کرد"
+ destroy_canonical_email_block_html: "%{name} رایانامه با درهمریزی %{target} را نامسدود کرد"
destroy_custom_emoji_html: "%{name} شکلک %{target} را حذف کرد"
destroy_domain_allow_html: "%{name} دامنهٔ %{target} را از فهرست مجاز برداشت"
destroy_domain_block_html: "%{name} انسداد دامنهٔ %{target} را رفع کرد"
+ destroy_email_domain_block_html: "%{name} انسداد دامنهٔ رایانامهٔ %{target} را برداشت"
destroy_instance_html: "%{name} دامنه %{target} را پاکسازی کرد"
destroy_ip_block_html: "%{name} قاعدهٔ آیپی %{target} را حذف کرد"
destroy_status_html: "%{name} وضعیت %{target} را برداشت"
@@ -252,8 +262,10 @@ fa:
destroy_user_role_html: "%{name} نقش %{target} را حذف کرد"
disable_2fa_user_html: "%{name} ضرورت ورود دو مرحلهای را برای کاربر %{target} غیر فعال کرد"
disable_custom_emoji_html: "%{name} شکلک %{target} را غیرفعال کرد"
+ disable_sign_in_token_auth_user_html: "%{name}، احراز هویت با توکن رایانامه را برای %{target} غیرفعال کرد"
disable_user_html: "%{name} ورود را برای کاربر %{target} غیرفعال کرد"
enable_custom_emoji_html: "%{name} شکلک %{target} را فعال کرد"
+ enable_sign_in_token_auth_user_html: "%{name}، احراز هویت با توکن رایانامه را برای %{target} فعال کرد"
enable_user_html: "%{name} ورود را برای کاربر %{target} فعال کرد"
memorialize_account_html: "%{name} حساب %{target} را تبدیل به صفحهٔ یادمان کرد"
promote_user_html: "%{name} کاربر %{target} را ترفیع داد"
@@ -478,6 +490,7 @@ fa:
instance_followers_measure: پیگیرندگانمان در آنجا
instance_follows_measure: پیگیرندگانشان در اینجا
instance_languages_dimension: زبانهای برتر
+ instance_media_attachments_measure: پیوستهای رسانهای ذخیره شده
instance_reports_measure: گزارشها دربارهشان
instance_statuses_measure: فرستههای ذخیره شده
delivery:
@@ -565,6 +578,9 @@ fa:
other_description_html: دیدن انتخاب های بیشتر برای کنترل رفتار حساب و سفارشی سازی ارتباط با حساب گزارش شده.
resolve_description_html: هیچ کنشی علیه حساب گزارش شده انجام نخواهد شد. هیچ شکایتی ضبط نشده و گزارش بسته خواهد شد.
add_to_report: افزودن بیشتر به گزارش
+ already_suspended_badges:
+ local: از پیش روی این کارساز معلّق شده
+ remote: از پیش روی کارسازشان معلّق شده
are_you_sure: مطمئنید؟
assign_to_self: به عهدهٔ من بگذار
assigned: مدیر عهدهدار
@@ -574,6 +590,7 @@ fa:
comment:
none: هیچ
confirm: تأیید
+ confirm_action: تأیید کنش مدیریتی برای @%{acct}
created_at: گزارششده
delete_and_resolve: حذف فرستهها
forwarded: هدایت شده
@@ -594,6 +611,7 @@ fa:
report: 'گزارش #%{id}'
reported_account: حساب گزارششده
reported_by: گزارش از طرف
+ reported_with_application: گزارش شده با برنامه
resolved: حلشده
resolved_msg: گزارش با موفقیت حل شد!
skip_to_actions: پرش به کنشها
@@ -665,6 +683,8 @@ fa:
title: ظاهر
branding:
title: ویژندگی
+ content_retention:
+ danger_zone: منطقهٔ خطر
default_noindex:
title: درخواست خروج از اندیسگذاری پیشگزیدهٔ موتور جستوجو
discovery:
@@ -721,7 +741,7 @@ fa:
original_status: فرستهٔ اصلی
reblogs: تقویتها
status_changed: فرسته تغییر کرد
- title: نوشتههای حساب
+ title: "@%{name} - نوشتههای حساب"
trending: پرطرفدار
visibility: نمایانی
with_media: دارای عکس یا ویدیو
@@ -752,6 +772,9 @@ fa:
message_html: هیچ قانون کارسازی تعریف نکردهاید.
sidekiq_process_check:
message_html: صف(های) %{value} فاقد هیچونه فرایند Sidekiq هستند. لطفا تنظیمات Sidekiq خود را بازبینی کنید
+ software_version_check:
+ action: دیدن بهروز رسانیهای موجود
+ message_html: بهروز رسانی ماستودون موجود است.
software_version_critical_check:
action: مشاهده بهروزرسانیهای موجود
message_html: یک بهروزرسانی حیاتی ماستودون موجود است، لطفا در اسرع وقت بهروزرسانی کنید.
@@ -775,16 +798,27 @@ fa:
trendable: قابل داغ شدن
unreviewed: بررسی نشده
usable: قابل استفاده
+ name: نام
+ newest: جدیدترین
+ oldest: قدیمیترین
+ open: دیدن عمومی
+ reset: بازنشانی
review: وضعیت بازبینی
+ search: جستوجو
+ title: برچسبها
updated_msg: تنظیمات برچسبها با موفقیت بهروز شد
title: مدیریت
trends:
allow: اجازه
approved: تأیید شده
+ confirm_allow: مطمئنید که میخواهید برچسبهای گزیده را مجاز کنید؟
+ confirm_disallow: مطمئنید که میخواهید برچسبهای گزیده را ممنوع کنید؟
disallow: اجازه ندادن
links:
allow: اجازه به پیوند
allow_provider: اجازه به ناشر
+ confirm_allow: مطمئنید که میخواهید پیوندهای گزیده را مجاز کنید؟
+ confirm_allow_provider: مطمئنید که میخواهید فراهمکنندههای گزیده را مجاز کنید؟
confirm_disallow: مطمئنید که می خواهید پیوندهای گزیده را ممنوع کنید؟
confirm_disallow_provider: مطمئنید که می خواهید فراهم کنندههای گزیده را ممنوع کنید؟
disallow: اجازه ندادن به پیوند
@@ -792,18 +826,32 @@ fa:
no_link_selected: هیچ پیوندی تغییر نکرد زیرا هیچکدام از آنها انتخاب نشده بودند
publishers:
no_publisher_selected: هیچ ناشری تغییر نکرد زیرا هیچکدام از آنها انتخاب نشده بودند
+ shared_by_over_week:
+ one: همرسانده به دست یک نفر در هفتهٔ گذشته
+ other: همرسانده به دست %{count} نفر در هفتهٔ گذشته
title: پیوندهای داغ
+ usage_comparison: امروز %{today} بار همرسانی شده. در مقایسه با %{yesterday} بار دیروز
not_allowed_to_trend: اجازهٔ داغ شدن ندارد
+ only_allowed: فقط مجازها
pending_review: بازبینی منتظر
preview_card_providers:
+ allowed: پیوندها از این ناشر میتوانند داغ شوند
+ rejected: پیوندها از این ناشر داغ نخواهند شد
title: ناشران
rejected: رد شده
statuses:
allow: اجازه به فرسته
allow_account: اجازه به نگارنده
+ confirm_allow: مطمئنید که میخواهید وضعیتهای گزیده را مجاز کنید؟
+ confirm_allow_account: مطمئنید که میخواهید حسابهای گزیده را مجاز کنید؟
+ confirm_disallow: مطمئنید که میخواهید وضعیتهای گزیده را ممنوع کنید؟
+ confirm_disallow_account: مطمئنید که میخواهید حسابهای گزیده را ممنوع کنید؟
disallow: ممنوع کردن فرسته
disallow_account: ممنوع کردن نگارنده
no_status_selected: هیچ فرستهٔ داغی تغییری نکرد زیرا هیچکدام از آنها انتخاب نشده بودند
+ shared_by:
+ one: یک بار برگزیده یا همرسانی شده
+ other: "%{friendly_count} بار برگزیده یا همرسانی شده"
title: فرستههای داغ
tags:
current_score: امتیاز کنونی %{score}
@@ -812,8 +860,9 @@ fa:
tag_languages_dimension: زبانهای برتر
tag_servers_dimension: کارسازهای برتر
tag_servers_measure: کارسازهای گوناگون
- tag_uses_measure: کل استفادهّا
+ tag_uses_measure: کل استفادهها
listable: میتواند پیشنهاد شود
+ no_tag_selected: هیچ برچسبی تغییر نکرد زیرا هیچکدام گزیده نبودند
not_listable: پیشنهاد نخواهد شد
not_usable: غیر قابل استفاده
title: برچسبهای پرطرفدار
@@ -908,7 +957,9 @@ fa:
title: بررسی های امنیتی
confirmations:
awaiting_review_title: ثبتنامتان دارد بررسی میشود
+ clicking_this_link: زدن این پیوند
login_link: ورود
+ proceed_to_login_html: میتوانید به %{login_link} ادامه دهید.
welcome_title: خوش آمدید، %{name}!
delete_account: پاککردن حساب
delete_account_html: اگر میخواهید حساب خود را پاک کنید، از اینجا پیش بروید. از شما درخواست تأیید خواهد شد.
@@ -930,6 +981,7 @@ fa:
or_log_in_with: یا ورود به وسیلهٔ
privacy_policy_agreement_html: سیاست محرمانگی را خوانده و پذیرفتهام
progress:
+ confirm: تأیید رایانامه
details: جزئیات شما
review: بررسی ما
rules: پذیرش قوانین
@@ -943,6 +995,7 @@ fa:
rules:
accept: پذیرفتن
back: بازگشت
+ invited_by: 'با سپاس از دعوتی از این فرد دریافت کردهاید میتوانید به %{domain} بپیوندید:'
title_invited: شما دعوت شده اید.
security: امنیت
set_new_password: تعین گذرواژه جدید
@@ -952,17 +1005,24 @@ fa:
title: صندوق ورودیتان را بررسی کنید
sign_in:
title: ورود به %{domain}
+ sign_up:
+ title: بیایید روی %{domain} برپایتان کنیم.
status:
account_status: وضعیت حساب
+ confirming: منتظر کامل شدن تأیید رایانامه.
functional: حسابتان کاملاً قابل استفاده است.
+ pending: درخواستتان منتظر بازبینی مسئولان است. ممکن است کمی طول بکشد. اگر درخواستتان پذیرفته شود رایانامهای خواهید گرفت.
redirecting_to: حساب شما غیرفعال است زیرا هماکنون به %{acct} منتقل شده است.
view_strikes: دیدن شکایتهای گذشته از حسابتان
too_fast: فرم با سرعت بسیار زیادی فرستاده شد، دوباره تلاش کنید.
use_security_key: استفاده از کلید امنیتی
author_attribution:
example_title: متن نمونه
+ instructions: 'مطمئن شوید این کد در HTML مقالهتان وجود دارد:'
more_from_html: بیشتر از %{name}
s_blog: بلاگ %{name}
+ then_instructions: سپس نام دامنهٔ مقاله را در زمینهٔ زیر بیفزایید.
+ title: اعتباردهی به نگارنده
challenge:
confirm: ادامه
hint_html: "نکته: ما در یک ساعت آینده گذرواژهتان را از شما نخواهیم پرسید."
@@ -999,6 +1059,9 @@ fa:
before: 'پیش از ادامه، لطفاً نکتههای زیر را به دقت بخوانید:'
caches: ممکن است محتواهایی که دیگر کارسازها ذخیره کردهاند، همچنان باقی بماند
data_removal: نوشتهها و دادههای شما برای همیشه پاک خواهند شد
+ email_change_html: میتوانید بدون حذف حسابتان نشانی رایانامهتان را تغییر دهید
+ email_contact_html: اگر هنوز نرسیده، میتوانید برای راهنمایی به %{email} رایانامه دهید
+ email_reconfirmation_html: اگر رایانامهٔ تأیید را نگرفتهاید، میتوانید دوباره درخواستش دهید
irreversible: شما نخواهید توانست حساب خود را بازیابی یا فعالسازی کنید
more_details_html: برای اطلاعات بیشتر سیاست رازداری را ببینید.
username_available: نام کاربری شما دوباره در دسترس خواهد بود
@@ -1091,8 +1154,10 @@ fa:
deprecated_api_multiple_keywords: این پارامترها نمیتوانند از این برنامه تغییر یابند؛ چرا که به بیش از یک کلیدواژهٔ پالایه اعمال میشود. از برنامهای جدیدتر یا میانای وب استفاده کنید.
invalid_context: زمینهای موجود نیست یا نامعتبر است
index:
+ contexts: پالایهها در %{contexts}
delete: پاککردن
empty: هیچ پالایهای ندارید.
+ expires_in: در %{distance} منقضی می شود
expires_on: در %{date} منقضی می شود
keywords:
one: "%{count} کلیدواژه"
@@ -1115,6 +1180,9 @@ fa:
title: فرستههای پالوده
generic:
all: همه
+ all_items_on_page_selected_html:
+ one: "%{count} مورد در این صفحه گزیده شده."
+ other: همهٔ %{count} مورد این صفحه گزیده شدهاند.
all_matching_items_selected_html:
one: "%{count} مورد مطابق با جستوجویتان گزیده شده."
other: "%{count} مورد مطابق با جستوجویتان گزیده شدند."
@@ -1136,6 +1204,9 @@ fa:
other: یک چیزی هنوز درست نیست! لطفاً %{count} خطای زیر را ببینید
imports:
errors:
+ empty: پروندهٔ خالی CSV
+ incompatible_type: ناسازگار با گونهٔ درونریزی گزیده
+ invalid_csv_file: 'پروندهٔ CSV نامعتبر. خطا: %{error}'
over_rows_processing_limit: دارای بیش از %{count} ردیف
too_large: حجم فایل خیلی بزرگ است
failures: شکستها
@@ -1213,7 +1284,15 @@ fa:
title: تاریخچهٔ تأیید هویت
mail_subscriptions:
unsubscribe:
+ action: بله. لغو اشتراک
complete: لغو اشتراک شد
+ emails:
+ notification_emails:
+ favourite: رایانامههای آگاهی برگزیدن
+ follow: رایانامههای آگاهی پیگیری
+ follow_request: رایانامههای درخواست پیگیری
+ mention: رایانامههای آگاهی اشاره
+ reblog: رایانامههای آگاهی تقویت
title: لغو اشتراک
media_attachments:
validations:
@@ -1294,6 +1373,8 @@ fa:
update:
subject: "%{name} فرستهای را ویرایست"
notifications:
+ administration_emails: آگاهیهای رایانامهای مدیر
+ email_events: رویدادها برای آگاهیهای رایانامهای
email_events_hint: 'گزینش رویدادهایی که میخواهید برایشان آگاهی دریافت کنید:'
number:
human:
@@ -1338,6 +1419,7 @@ fa:
privacy:
hint_html: "شخصیسازی چگونگی پیدا شدن فرستهها و نمایهتان. ویژگیهای متعدّدی در ماستودون میتوانند هنگام به کار افتادن در رسیدن به مخاطبینی گستردهتر یاریتان کنند. کمی وقت برای بازبینی این تنظیمات گذاشته تا مطمئن شوید برایتان مناسبند."
privacy: محرمانگی
+ privacy_hint_html: واپایش میزان باز شدن به نفع دیگران. افراد نمایههای جالب و کارههای باحال را با مرور پیگرفتگان دیگران و دیدن کارههایی که از آنها میفرستند پیدا میکنند. با این حال شاید بخواهید پنهان نگهشان دارید.
reach: دسترسی
reach_hint_html: واپایش این که میخواهید به دست افراد جدید قابل کشف و پیگیری باشید یا نه. میخواهید فرستههایتان روی صفحهٔ کشف ظاهر شوند؟ میخواهید دیگر افراد در پیشنهادهای پیگیریشان ببینندتان؟ میخواهید پیگیران جدید را به طور خودکار بپذیرید یا روی هرکدامشان واپایش داشته باشید؟
search: جستوجو
@@ -1349,12 +1431,16 @@ fa:
errors:
limit_reached: تجاوز از کران واکنشهای مختلف
unrecognized_emoji: شکلک شناختهشدهای نیست
+ redirects:
+ prompt: اگر به این پویند اطمینان دارید برای ادامه بزنید.
+ title: دارید %{instance} را ترک میکنید.
relationships:
activity: فعالیت حساب
confirm_follow_selected_followers: آیا مطمئنید که می خواهید دنبال کننده های انتخابی را دنبال کنید؟
confirm_remove_selected_followers: آیا شما واقعا می خواهید دنبال کننده های انتخابی را حذف کنید؟
confirm_remove_selected_follows: آیا شما واقعا می خواهید دنبال شده های انتخابی را حذف کنید؟
dormant: غیرفعال
+ follow_failure: نتوانست برخی از حسابهای گزیده را پی بگیرد.
follow_selected_followers: پیگیری پیگیران انتخاب شده
followers: پیگیران
following: پی میگیرد
@@ -1438,6 +1524,7 @@ fa:
delete: پاککردن حساب
development: فرابری
edit_profile: ویرایش نمایه
+ export: برونریزی
featured_tags: برچسبهای برگزیده
import: درونریزی
import_and_export: درونریزی و برونبری
@@ -1446,12 +1533,21 @@ fa:
preferences: ترجیحات
profile: نمایه
relationships: پیگیریها و پیگیران
+ severed_relationships: ارتباطهای قطع شده
statuses_cleanup: حذف فرستهٔ خودکار
strikes: شکایتهای مدیریتی
two_factor_authentication: ورود دومرحلهای
webauthn_authentication: کلیدهای امنیتی
severed_relationships:
download: بارگیری (%{count})
+ event_type:
+ account_suspension: تعلیق حساب (%{target_name})
+ domain_block: تعلیق کارساز (%{target_name})
+ user_domain_block: "%{target_name} را مسدود کردید"
+ lost_followers: پیگیرندگان از دست رفته
+ lost_follows: پیگرفتههای از دست رفته
+ preamble: وقتی دامنهای را مسدود کرده یا ناظرانتان تصمیم به تعلیق کارسازی دوردست میگیرند، ممکن است پیگیران و پیگرفتههایتان را از دست بدهید. با این حال قادرید سیاهههایی از ارتباطهای قطع شده را برای بررسی و درونریزی احتمالی روی کارسازی دیگر بار بگیرید.
+ purged: اطّلاعات دربارهٔ این کارساز به دست مدیران کارسازتان پاک سازی شده.
type: رویداد
statuses:
attached:
@@ -1535,6 +1631,7 @@ fa:
contrast: ماستودون (سایهروشن بالا)
default: ماستودون (تیره)
mastodon-light: ماستودون (روشن)
+ system: خودکار (استفاده از زمینهٔ سامانه)
time:
formats:
default: "%d %b %Y, %H:%M"
@@ -1557,16 +1654,23 @@ fa:
webauthn: کلیدهای امنیتی
user_mailer:
appeal_approved:
+ action: تنظیمات حساب
explanation: درخواست تجدیدنظر اخطار علیه حساب شما در %{strike_date} که در %{appeal_date} ارسال کردهاید، پذیرفته شده است. حساب شما بار دیگر در وضعیت خوبی قرار دارد.
subject: درخواست تجدیدنظر شما در %{date} پذیرفته شد
+ subtitle: حسابتان دوباره در وضعیت مناسب است.
title: درخواست تجدیدنظر پذیرفته شد
appeal_rejected:
explanation: درخواست تجدیدنظر اخطار علیه حساب شما در %{strike_date} که در %{appeal_date} ارسال کردهاید، رد شده است.
subject: درخواست تجدیدنظر شما در %{date} رد شده است
+ subtitle: درخواست تجدیدنظرتان رد شد.
title: درخواست تجدیدنظر رد شد
backup_ready:
+ explanation: درخواست پشتیبانی کامل از حساب ماستودونتان کردید.
+ extra: اکنون آمادهٔ بارگیری است!
subject: بایگانی شما آمادهٔ دریافت است
title: گرفتن بایگانی
+ failed_2fa:
+ details: 'جزییات تلاشها برای ورد:'
suspicious_sign_in:
change_password: تغییر گذرواژهتان
details: 'جزییات ورود:'
@@ -1578,8 +1682,11 @@ fa:
spam: هرزنامه
reason: 'دلیل:'
subject:
+ delete_statuses: فرستههایتان روی %{acct} برداشته شدهاند
disable: حساب %{acct} شما متوقف شده است
+ mark_statuses_as_sensitive: فرستههایتان روی %{acct} به عنوان حسّاس علامت خوردهاند
none: هشدار برای %{acct}
+ sensitive: فرستههایتان روی %{acct} از اکنون به عنوان حسّاس علامت خواهند خورد
silence: حساب %{acct} شما محدود شده است
suspend: حساب %{acct} شما معلق شده است
title:
@@ -1595,11 +1702,39 @@ fa:
apps_ios_action: بارگیری روی فروشگاه کاره
apps_step: بارگیری کارهٔ رسمیمان.
apps_title: کارههای ماستودون
+ checklist_subtitle: 'بیایید روی این مرز اجتماعی جدید راهتان بیندازیم:'
+ checklist_title: سیاههٔ بررسی خوشآمد
edit_profile_action: شخصی سازی
+ edit_profile_step: تقویت تعاملهایتان با داشتن نمایهای جامع.
+ edit_profile_title: شخصی سازی نمایهتان
explanation: نکتههایی که برای آغاز کار به شما کمک میکنند
+ feature_action: دانشتن بیشتر
+ feature_audience: ماستودون بدون حضور فرد میانی، فرصتی منحصربهفرد برای مدیریت مخاطبان ارائه میکند. ماستودونی که روی زیرساخت خودتان استقرار یافته باشد، میگذارد بدون بودن زیر واپایش کسی غیر از خودتان، دیگر کارسازهای برخط ماستودون را دنبال کرده و به دست آنها دنبال شوید.
+ feature_audience_title: مخاطبانتان را با اطمینان بسازید
+ feature_control: شما بهتر از هر کسی دیگری میدونید که چه میخواهید ببینید. هیچ الگوریتم یا تبلیغی وقت شما را تلف نمیکند. تنها با یک حساب، هر کسی را روی هر کارساز ماستودون دیگری دنبال کرده و فرستههایشان را به ترتیب زمانی دریافت کنید. گوشهٔ دنج اینترنتی خودتان را بیشتر شبیه خودتان کنید.
+ feature_control_title: کنترل خط زمانیتان را به دست بگیرید
+ feature_creativity: ماستودون از فرستههای تصویری، ویدئویی و شنیداری، توضیحات دسترسپذیری، نظرسنجی، هشدار محتوا، تصاویر نمایهٔ پویا، شکلکهای سفارشی، کنترل برش تصاویر بندانگشتی و بسیاری موارد دیگر پشتیبانی میکند تا به شما برای ابزار کردن خود در فضای برخط کمک کند. چه بخواهید یک اثر هنری، موسیقی یا پادکست منتشر کنید، ماستودون در خدمت شماست.
+ feature_creativity_title: خلاقیت بیهمتا
+ feature_moderation: ماستودن، تصمیمگیری را به شما باز میگرداند. هر کارساز قوانین و شرایط استفاده خاص خودش را وضع میکند که فقط به صورت محلی اعمال میشود و نه به صورت از بالا به پایین در سکوهای اجتماعی شرکتی. این موضوع باعث افزایش انعطاف در پاسخگویی به نیازهای گروههای مختلف میشود. به کارسازی با قوانین مورد پسندتان بپیوندید، و یا نمونه خود را میزبانی کنید.
+ feature_moderation_title: نظارت به شکلی که باید باشد
follow_action: پیگیری
+ follow_step: You curate your own feed. Lets fill it with interesting people.
+ follow_title: شخصی سازی خوراک خانگیتان
+ follows_subtitle: پی گرفتن حسابهای شناخته شده
+ follows_title: افرادی برای پیگیری
+ follows_view_more: دیدن افرادی بیشتر برای پیگیری
+ hashtags_recent_count:
+ one: "%{people} نفر در ۲ روز اخیر"
+ other: "%{people} نفر در ۲ روز اخیر"
+ hashtags_subtitle: کشف گرایهها در ۲ روز گذشته
+ hashtags_title: برچسبهای داغ
+ hashtags_view_more: دیدن برچسبهای داغ بیشتر
post_action: ایجاد
+ post_step: سلام کردن به جهان با متن، عکس، ویدیو یا نظرسنجی.
+ post_title: ساخت نخستین نظرسنجیتان
share_action: همرسانی
+ share_step: بگذارید دوستانتان بدانند چگونه روی ماستودون بیابندتان.
+ share_title: همرسانی نمایهٔ ماستودونتان
sign_in_action: ورود
subject: به ماستودون خوش آمدید
title: خوش آمدید، کاربر %{name}!
@@ -1608,6 +1743,8 @@ fa:
go_to_sso_account_settings: به تنظیمات حساب فراهمگر هوبتتان بروید
invalid_otp_token: کد ورود دومرحلهای نامعتبر است
otp_lost_help_html: اگر شما دسترسی به هیچکدامشان ندارید، باید با ایمیل %{email} تماس بگیرید
+ rate_limited: تلاش ّای هویتسنجی بیش از حد. لطفاً بعداً دوباره تلاش کنید.
+ seamless_external_login: با خدمتی خارجی وارد شدهاید، برای همین تنظیمات رایانامه و گذرواژه در دسترس نیستند.
signed_in_as: 'واردشده به نام:'
verification:
extra_instructions_html: نکته: پیوند روی پایگاه وبتان میتواند نامرئی باشد. بخش مهم rel="me"
است که از جعل هویت روی پایگاههایی با محتوای تولید شده به دست کاربر جلوگیری میکند. حتا میتوانید به جای برچسب a
از برچسب link
در سرایند صفحه استفاده کنید؛ ولی HTML باید بدون اجرای جاوااسکریپت در دسترس باشد.
@@ -1616,6 +1753,7 @@ fa:
instructions_html: کد زیر را رونوشت کرده و در HTML پایگاه وبتان جایگذاری کنید. سپس نشانی پایگاه وبتان را از زبانهٔ «ویرایش نمایه» در یکی از زمینههای اضافی روی نمایهتان افزوده و تغییرات را ذخیره کنید.
verification: تأیید
verified_links: "پیوندهای تأییدشده شما"
+ website_verification: تأیید پایگاه وب
webauthn_credentials:
add: افزودن کلید امنیتی
create:
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 52ea0b374c..efdfdfed04 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -187,6 +187,7 @@ fi:
create_domain_block: Luo verkkotunnuksen esto
create_email_domain_block: Luo sähköpostiverkkotunnuksen esto
create_ip_block: Luo IP-sääntö
+ create_relay: Luo välittäjä
create_unavailable_domain: Luo ei-saatavilla oleva verkkotunnus
create_user_role: Luo rooli
demote_user: Alenna käyttäjä
@@ -198,14 +199,17 @@ fi:
destroy_email_domain_block: Poista sähköpostiverkkotunnuksen esto
destroy_instance: Tyhjennä verkkotunnus
destroy_ip_block: Poista IP-sääntö
+ destroy_relay: Poista välittäjä
destroy_status: Poista julkaisu
destroy_unavailable_domain: Poista ei-saatavilla oleva verkkotunnus
destroy_user_role: Hävitä rooli
disable_2fa_user: Poista kaksivaiheinen todennus käytöstä
disable_custom_emoji: Poista mukautettu emoji käytöstä
+ disable_relay: Poista välittäjä käytöstä
disable_sign_in_token_auth_user: Poista sähköpostitunnuksella todennus käytöstä käyttäjältä
disable_user: Poista tili käytöstä
enable_custom_emoji: Ota mukautettu emoji käyttöön
+ enable_relay: Ota välittäjä käyttöön
enable_sign_in_token_auth_user: Ota sähköpostitunnuksella todennus käyttöön käyttäjälle
enable_user: Ota tili käyttöön
memorialize_account: Muuta muistotiliksi
@@ -216,7 +220,7 @@ fi:
reopen_report: Avaa raportti uudelleen
resend_user: Lähetä vahvistusviesti uudelleen
reset_password_user: Palauta salasana
- resolve_report: Selvitä raportti
+ resolve_report: Ratkaise raportti
sensitive_account: Pakota arkaluonteiseksi tiliksi
silence_account: Rajoita tiliä
suspend_account: Jäädytä tili
@@ -247,6 +251,7 @@ fi:
create_domain_block_html: "%{name} esti verkkotunnuksen %{target}"
create_email_domain_block_html: "%{name} esti sähköpostiverkkotunnuksen %{target}"
create_ip_block_html: "%{name} loi säännön IP-osoitteelle %{target}"
+ create_relay_html: "%{name} loi välittäjän %{target}"
create_unavailable_domain_html: "%{name} pysäytti toimituksen verkkotunnukseen %{target}"
create_user_role_html: "%{name} loi roolin %{target}"
demote_user_html: "%{name} alensi käyttäjän %{target}"
@@ -258,14 +263,17 @@ fi:
destroy_email_domain_block_html: "%{name} kumosi sähköpostiverkkotunnuksen %{target} eston"
destroy_instance_html: "%{name} tyhjensi verkkotunnuksen %{target}"
destroy_ip_block_html: "%{name} poisti säännön IP-osoitteelta %{target}"
+ destroy_relay_html: "%{name} poisti välittäjän %{target}"
destroy_status_html: "%{name} poisti käyttäjän %{target} julkaisun"
destroy_unavailable_domain_html: "%{name} jatkoi toimitusta verkkotunnukseen %{target}"
destroy_user_role_html: "%{name} poisti roolin %{target}"
disable_2fa_user_html: "%{name} poisti käyttäjältä %{target} vaatimuksen kaksivaiheiseen todentamiseen"
disable_custom_emoji_html: "%{name} poisti emojin %{target} käytöstä"
+ disable_relay_html: "%{name} poisti välittäjän %{target} käytöstä"
disable_sign_in_token_auth_user_html: "%{name} poisti sähköpostitunnuksella todennuksen käytöstä käyttäjältä %{target}"
disable_user_html: "%{name} poisti kirjautumisen käytöstä käyttäjältä %{target}"
enable_custom_emoji_html: "%{name} otti emojin %{target} käyttöön"
+ enable_relay_html: "%{name} otti välittäjän %{target} käyttöön"
enable_sign_in_token_auth_user_html: "%{name} otti sähköpostitunnuksella todennuksen käyttöön käyttäjälle %{target}"
enable_user_html: "%{name} otti kirjautumisen käyttöön käyttäjälle %{target}"
memorialize_account_html: "%{name} muutti käyttäjän %{target} tilin muistosivuksi"
@@ -833,7 +841,7 @@ fi:
original_status: Alkuperäinen julkaisu
reblogs: Edelleen jako
status_changed: Julkaisua muutettu
- title: Tilin tilat
+ title: Tilin tilat - @%{name}
trending: Suosituttua
visibility: Näkyvyys
with_media: Sisältää mediaa
@@ -1166,9 +1174,11 @@ fi:
use_security_key: Käytä suojausavainta
author_attribution:
example_title: Esimerkkiteksti
- hint_html: Määrää, kuinka tulet tunnustetuksi, kun Mastodonissa jaetaan linkkejä.
+ hint_html: Kirjoitatko uutisia tai blogitekstejä Mastodonin ulkopuolella? Määrää, kuinka tulet tunnustetuksi, kun niitä jaetaan Mastodonissa.
+ instructions: 'Varmista, että artikkelisi HTML:ssä on tämä koodi:'
more_from_html: Lisää tekijältä %{name}
s_blog: Käyttäjän %{name} blogi
+ then_instructions: Lisää sitten julkaisun verkkotunnus seuraavaan tekstikenttään.
title: Tekijän tunnustus
challenge:
confirm: Jatka
@@ -1965,7 +1975,7 @@ fi:
signed_in_as: 'Kirjautunut tilillä:'
verification:
extra_instructions_html: Vinkki: Verkkosivustollasi oleva linkki voi olla myös näkymätön. Olennainen osuus on rel="me"
, joka estää toiseksi henkilöksi tekeytymisen verkkosivustoilla, joilla on käyttäjien luomaa sisältöä. Voit käyttää jopa link
-elementtiä sivun head
-osassa elementin a
sijaan, mutta HTML:n pitää olla käytettävissä ilman JavaScript-koodin suorittamista.
- here_is_how: Näin voit tehdä sen
+ here_is_how: Näin se onnistuu
hint_html: "Henkilöllisyyden vahvistaminen on Mastodonissa jokaisen käyttäjän ulottuvilla. Se perustuu avoimiin standardeihin ja on maksutonta nyt ja aina. Tarvitset vain henkilökohtaisen verkkosivuston, jonka perusteella sinut voidaan tunnistaa. Kun teet linkin tuolle verkkosivulle profiilistasi, tarkistamme, että verkkosivustolla on linkki takaisin profiiliisi, ja näytämme profiilissasi visuaalisen ilmaisimen."
instructions_html: Kopioi ja liitä seuraava koodi verkkosivustosi HTML-lähdekoodiin. Lisää sitten verkkosivustosi osoite johonkin profiilisi lisäkentistä ”Muokkaa profiilia” -välilehdellä ja tallenna muutokset.
verification: Vahvistus
diff --git a/config/locales/fo.yml b/config/locales/fo.yml
index fcf3eb031e..8dab61c267 100644
--- a/config/locales/fo.yml
+++ b/config/locales/fo.yml
@@ -187,6 +187,7 @@ fo:
create_domain_block: Stovna navnaøkjablokering
create_email_domain_block: Stovna t-post-økisnavnablokk
create_ip_block: Stovna IP reglu
+ create_relay: Stovna reiðlag
create_unavailable_domain: Stovna navnaøki, sum ikki er tøkt
create_user_role: Stovna leiklut
demote_user: Lækka brúkara í tign
@@ -198,14 +199,17 @@ fo:
destroy_email_domain_block: Strika t-posta-økisnavnablokk
destroy_instance: Reinsa navnaøki
destroy_ip_block: Strika IP reglu
+ destroy_relay: Strika reiðlag
destroy_status: Strika post
destroy_unavailable_domain: Strika navnaøki, sum ikki er tøkt
destroy_user_role: Bein burtur leiklut
disable_2fa_user: Ger 2FA óvirkið
disable_custom_emoji: Ger serligt kenslutekn óvirkið
+ disable_relay: Ger reiðlag óvirkið
disable_sign_in_token_auth_user: Ger váttan við teldupostateknum óvirkna fyri brúkara
disable_user: Ger brúkara óvirknan
enable_custom_emoji: Ger serligt kenslutekn virkið
+ enable_relay: Ger reiðlag virkið
enable_sign_in_token_auth_user: Ger váttan við teldupostateknum virkna fyri brúkara
enable_user: Ger brúkara virknan
memorialize_account: Minnst til Konto
@@ -247,6 +251,7 @@ fo:
create_domain_block_html: "%{name} blokeraði navnaøkið %{target}"
create_email_domain_block_html: "%{name} blokeraði teldupostanavnaøkið %{target}"
create_ip_block_html: "%{name} gjørdi reglu fyri IP %{target}"
+ create_relay_html: "%{name} gjørdi eitt reiðlag %{target}"
create_unavailable_domain_html: "%{name} steðgaði veiting til navnaøkið %{target}"
create_user_role_html: "%{name} stovnaði %{target} leiklutin"
demote_user_html: "%{name} lækkaði tignina hjá brúkaranum %{target}"
@@ -258,14 +263,17 @@ fo:
destroy_email_domain_block_html: "%{name} leysgav teldupostanavnaøkið %{target}"
destroy_instance_html: "%{name} reinsaði navnaøkið %{target}"
destroy_ip_block_html: "%{name} slettaðar reglur fyri IP %{target}"
+ destroy_relay_html: "%{name} strikaði reiðlagið %{target}"
destroy_status_html: "%{name} slettaði upplegg hjá %{target}"
destroy_unavailable_domain_html: "%{name} tók upp aftir veiting til navnaøkið %{target}"
destroy_user_role_html: "%{name} slettaði leiklutin hjá %{target}"
disable_2fa_user_html: "%{name} slepti kravið um váttan í tveimum stigum fyri brúkaran %{target}"
disable_custom_emoji_html: "%{name} gjørdi kensluteknið %{target} óvirkið"
+ disable_relay_html: "%{name} gjørdi reiðlagið %{target} óvirkið"
disable_sign_in_token_auth_user_html: "%{name} gjørdi váttan við teldupostteknum óvirkna fyri %{target}"
disable_user_html: "%{name} gjørdi innritan hjá brúkaranum %{target} óvirkna"
enable_custom_emoji_html: "%{name} gjørdi kensluteknið %{target} virkið"
+ enable_relay_html: "%{name} gjørdi reiðlagið %{target} virkið"
enable_sign_in_token_auth_user_html: "%{name} gjørdi váttan við teldupostteknum virkna fyri %{target}"
enable_user_html: "%{name} gjørdi innritan virkna fyri brúkaran %{target}"
memorialize_account_html: "%{name} broytti kontuna hjá %{target} til eina minnissíðu"
@@ -833,7 +841,7 @@ fo:
original_status: Upprunapostur
reblogs: Endurbloggar
status_changed: Postur broyttur
- title: Postar hjá kontu
+ title: Postar hjá kontu - @%{name}
trending: Vælumtókt
visibility: Sýni
with_media: Við miðli
@@ -1166,9 +1174,11 @@ fo:
use_security_key: Brúka trygdarlykil
author_attribution:
example_title: Tekstadømi
- hint_html: Kanna, hvussu tú verður viðurkend/ur, tá ið onnur deila slóðir á Mastodon.
+ hint_html: Skrivar tú tíðindi ella greinar til bloggin uttanfyri Mastodon? Her kanst tú stýra, hvussu tú verður tilsipað/ur, tá ið títt tilfar verður deilt á Mastodon.
+ instructions: 'Tryggja tær, at henda kota er í HTML''inum á tíni grein:'
more_from_html: Meiri frá %{name}
s_blog: Bloggurin hjá %{name}
+ then_instructions: Skriva síðani økisnavnið, har tað verður lagt út, í teigin niðanfyri.
title: Ískoyti høvundans
challenge:
confirm: Hald á
@@ -1366,6 +1376,44 @@ fo:
merge_long: Varðveit verandi teigarøð og legg nýggjar afturat
overwrite: Skriva omaná
overwrite_long: Legg nýggj teigarøð inn fyri tey verandi
+ overwrite_preambles:
+ blocking_html:
+ one: Tú ert í ferð við at útskifta blokeringslistan hjá tær við upp til %{count} kontu frá %{filename}.
+ other: Tú ert í ferð við at útskifta blokeringslistan hjá tær við upp til %{count} kontum frá %{filename}.
+ bookmarks_html:
+ one: Tú ert í ferð við at útskifta tíni bókamerki við upp til %{count} posti frá %{filename}.
+ other: Tú ert í ferð við at útskifta tíni bókamerki við upp til %{count} postum frá %{filename}.
+ domain_blocking_html:
+ one: Tú ert í ferð við at útskifta navnaøkisblokeringslistan hjá tær við upp til %{count} navnaøki frá %{filename}.
+ other: Tú ert í ferð við at útskifta navnaøkisblokeringslistan hjá tær við upp til %{count} navnaøkjum frá %{filename}.
+ following_html:
+ one: Tú ert í ferð við at fylgja upp til %{count} kontu frá %{filename} og at gevast at fylgja øðrum.
+ other: Tú ert í ferð við at fylgja upp til %{count} kontum frá %{filename} og at gevast at fylgja øðrum.
+ lists_html:
+ one: Tú ert í ferð við at skifta listarnar hjá tær út við tað, sum er í %{filename}. Upp til %{count} konta verður løgd afturat nýggjum listum.
+ other: Tú ert í ferð við at skifta listarnar hjá tær út við tað, sum er í %{filename}. Upp til %{count} kontur verða lagdar afturat nýggjum listum.
+ muting_html:
+ one: Tú ert í ferð við at útskifta listan hjá tær við doyvdum kontum við upp til %{count} kontu frá %{filename}.
+ other: Tú ert í ferð við at útskifta listan hjá tær við doyvdum kontum við upp til %{count} kontum frá %{filename}.
+ preambles:
+ blocking_html:
+ one: Tú ert í ferð við at blokera upp til %{count} kontu frá %{filename}.
+ other: Tú ert í ferð við at blokera upp til %{count} kontur frá %{filename}.
+ bookmarks_html:
+ one: Tú ert í ferð við at leggja upp til %{count} post frá %{filename} afturat tínum bókamerkjum.
+ other: Tú ert í ferð við at leggja upp til %{count} postar frá %{filename} afturat tínum bókamerkjum.
+ domain_blocking_html:
+ one: Tú ert í ferð við at blokera upp til %{count} navnaøki frá %{filename}.
+ other: Tú ert í ferð við at blokera upp til %{count} navnaøki frá %{filename}.
+ following_html:
+ one: Tú ert í ferð við at fylgja upp til %{count} kontu frá %{filename}.
+ other: Tú ert í ferð við at fylgja upp til %{count} kontur frá %{filename}.
+ lists_html:
+ one: Tú ert í ferð við at leggja upp til %{count} kontu frá %{filename} afturat tínum listum. Nýggir listar verða stovnaðir, um eingin listi er at leggja afturat.
+ other: Tú ert í ferð við at leggja upp til %{count} kontur frá %{filename} afturat tínum listum. Nýggir listar verða stovnaðir, um eingin listi er at leggja afturat.
+ muting_html:
+ one: Tú ert í ferð við at doyva upp til %{count} kontu frá %{filename}.
+ other: Tú ert í ferð við at doyva upp til %{count} kontur frá %{filename}.
preface: Tú kanst innlesa dátur, sum tú hevur útlisið frá einum øðrum ambætara, so sum listar av fólki, sum tú fylgir ella blokerar.
recent_imports: Feskar innflytingar
states:
diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml
index 01463edacb..bb0501d0e3 100644
--- a/config/locales/fr-CA.yml
+++ b/config/locales/fr-CA.yml
@@ -21,6 +21,7 @@ fr-CA:
one: Message
other: Messages
posts_tab_heading: Messages
+ self_follow_error: Il n'est pas possible de suivre votre propre compte
admin:
account_actions:
action: Effectuer l'action
@@ -835,7 +836,7 @@ fr-CA:
original_status: Message original
reblogs: Partages
status_changed: Publication modifiée
- title: Messages du compte
+ title: Messages du compte - @%{name}
trending: Tendances
visibility: Visibilité
with_media: Avec médias
@@ -1168,7 +1169,6 @@ fr-CA:
use_security_key: Utiliser la clé de sécurité
author_attribution:
example_title: Exemple de texte
- hint_html: Déterminez la façon dont vous êtes crédité lorsque des liens sont partagés sur Mastodon.
more_from_html: Plus via %{name}
s_blog: Blog de %{name}
title: Attribution de l'auteur·e
@@ -1368,6 +1368,44 @@ fr-CA:
merge_long: Garder les enregistrements existants et ajouter les nouveaux
overwrite: Écraser
overwrite_long: Remplacer les enregistrements actuels par les nouveaux
+ overwrite_preambles:
+ blocking_html:
+ one: Vous allez remplacer votre liste de blocage par près de %{count} compte tiré de %{filename}.
+ other: Vous allez remplacer votre liste de blocage par près de %{count} comptes tirés de %{filename}.
+ bookmarks_html:
+ one: Vous allez remplacer vos signets par près de %{count} post tiré de %{filename}.
+ other: Vous allez remplacer vos signets par près de %{count} posts tirés de %{filename}.
+ domain_blocking_html:
+ one: Vous allez remplacer votre liste de blocage de domaines par près de %{count} domaine tiré de %{filename}.
+ other: Vous allez remplacer votre liste de blocage de domaines par près de %{count} domaines tirés de %{filename}.
+ following_html:
+ one: Vous allez suivre jusqu’à %{count} compte depuis %{filename} et arrêter de suivre n’importe qui d’autre.
+ other: Vous allez suivre jusqu’à %{count} comptes depuis %{filename} et arrêter de suivre n’importe qui d’autre.
+ lists_html:
+ one: Vous allez remplacer vos listes par le contenu de %{filename}. Près de %{count} compte sera ajouté à de nouvelles listes.
+ other: Vous allez remplacer vos listes par le contenu de %{filename}. Près de %{count} comptes seront ajoutés à de nouvelles listes.
+ muting_html:
+ one: Vous allez remplacer votre liste de comptes masqués par près de %{count} compte tiré de %{filename}.
+ other: Vous allez remplacer votre liste de comptes masqués par près de %{count} comptes tirés de %{filename}.
+ preambles:
+ blocking_html:
+ one: Vous allez bloquer près de %{count} compte tiré de %{filename}.
+ other: Vous allez bloquer près de %{count} comptes tirés de %{filename}.
+ bookmarks_html:
+ one: Vous allez ajouter près de %{count} message de %{filename} à vos signets.
+ other: Vous allez ajouter près de %{count} messages de %{filename} à vos signets.
+ domain_blocking_html:
+ one: Vous allez bloquer près de %{count} domaine tiré de %{filename}.
+ other: Vous allez bloquer près de %{count} domaines tirés de %{filename}.
+ following_html:
+ one: Vous allez suivre près de %{count} compte tiré de %{filename}.
+ other: Vous allez suivre près de %{count} comptes tirés de %{filename}.
+ lists_html:
+ one: Vous allez ajouter près de %{count} compte depuis %{filename} à vos listes. De nouvelles listes seront créées si besoin.
+ other: Vous allez ajouter près de %{count} comptes depuis %{filename} à vos listes. De nouvelles listes seront créées si besoin.
+ muting_html:
+ one: Vous allez masquer près de %{count} compte tiré de %{filename}.
+ other: Vous allez masquer près de %{count} comptes tirés de %{filename}.
preface: Vous pouvez importer certaines données que vous avez exporté d’un autre serveur, comme une liste des personnes que vous suivez ou bloquez sur votre compte.
recent_imports: Importations récentes
states:
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index c3ce66c397..0c35dea62a 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -21,6 +21,7 @@ fr:
one: Message
other: Messages
posts_tab_heading: Messages
+ self_follow_error: Il n'est pas possible de suivre votre propre compte
admin:
account_actions:
action: Effectuer l'action
@@ -835,7 +836,7 @@ fr:
original_status: Message original
reblogs: Partages
status_changed: Publication modifiée
- title: Messages du compte
+ title: Messages du compte - @%{name}
trending: Tendances
visibility: Visibilité
with_media: Avec médias
@@ -1168,7 +1169,6 @@ fr:
use_security_key: Utiliser la clé de sécurité
author_attribution:
example_title: Exemple de texte
- hint_html: Déterminez la façon dont vous êtes crédité lorsque des liens sont partagés sur Mastodon.
more_from_html: Plus via %{name}
s_blog: Blog de %{name}
title: Attribution de l'auteur·e
@@ -1368,6 +1368,44 @@ fr:
merge_long: Garder les enregistrements existants et ajouter les nouveaux
overwrite: Écraser
overwrite_long: Remplacer les enregistrements actuels par les nouveaux
+ overwrite_preambles:
+ blocking_html:
+ one: Vous allez remplacer votre liste de blocage par près de %{count} compte tiré de %{filename}.
+ other: Vous allez remplacer votre liste de blocage par près de %{count} comptes tirés de %{filename}.
+ bookmarks_html:
+ one: Vous allez remplacer vos signets par près de %{count} post tiré de %{filename}.
+ other: Vous allez remplacer vos signets par près de %{count} posts tirés de %{filename}.
+ domain_blocking_html:
+ one: Vous allez remplacer votre liste de blocage de domaines par près de %{count} domaine tiré de %{filename}.
+ other: Vous allez remplacer votre liste de blocage de domaines par près de %{count} domaines tirés de %{filename}.
+ following_html:
+ one: Vous allez suivre jusqu’à %{count} compte depuis %{filename} et arrêter de suivre n’importe qui d’autre.
+ other: Vous allez suivre jusqu’à %{count} comptes depuis %{filename} et arrêter de suivre n’importe qui d’autre.
+ lists_html:
+ one: Vous allez remplacer vos listes par le contenu de %{filename}. Près de %{count} compte sera ajouté à de nouvelles listes.
+ other: Vous allez remplacer vos listes par le contenu de %{filename}. Près de %{count} comptes seront ajoutés à de nouvelles listes.
+ muting_html:
+ one: Vous allez remplacer votre liste de comptes masqués par près de %{count} compte tiré de %{filename}.
+ other: Vous allez remplacer votre liste de comptes masqués par près de %{count} comptes tirés de %{filename}.
+ preambles:
+ blocking_html:
+ one: Vous allez bloquer près de %{count} compte tiré de %{filename}.
+ other: Vous allez bloquer près de %{count} comptes tirés de %{filename}.
+ bookmarks_html:
+ one: Vous allez ajouter près de %{count} message de %{filename} à vos signets.
+ other: Vous allez ajouter près de %{count} messages de %{filename} à vos signets.
+ domain_blocking_html:
+ one: Vous allez bloquer près de %{count} domaine tiré de %{filename}.
+ other: Vous allez bloquer près de %{count} domaines tirés de %{filename}.
+ following_html:
+ one: Vous allez suivre près de %{count} compte tiré de %{filename}.
+ other: Vous allez suivre près de %{count} comptes tirés de %{filename}.
+ lists_html:
+ one: Vous allez ajouter près de %{count} compte depuis %{filename} à vos listes. De nouvelles listes seront créées si besoin.
+ other: Vous allez ajouter près de %{count} comptes depuis %{filename} à vos listes. De nouvelles listes seront créées si besoin.
+ muting_html:
+ one: Vous allez masquer près de %{count} compte tiré de %{filename}.
+ other: Vous allez masquer près de %{count} comptes tirés de %{filename}.
preface: Vous pouvez importer certaines données que vous avez exporté d’un autre serveur, comme une liste des personnes que vous suivez ou bloquez sur votre compte.
recent_imports: Récents imports
states:
diff --git a/config/locales/fy.yml b/config/locales/fy.yml
index d63d2ac2aa..8a4f519e0c 100644
--- a/config/locales/fy.yml
+++ b/config/locales/fy.yml
@@ -21,6 +21,7 @@ fy:
one: Toot
other: Berjochten
posts_tab_heading: Berjochten
+ self_follow_error: It folgjen fan dyn eigen account is net tastien
admin:
account_actions:
action: Aksje útfiere
@@ -832,7 +833,7 @@ fy:
original_status: Oarspronklik berjocht
reblogs: Boosts
status_changed: Berjocht wizige
- title: Accountberjochten
+ title: Accountberjochten - @%{name}
trending: Trending
visibility: Sichtberheid
with_media: Mei media
@@ -1165,9 +1166,11 @@ fy:
use_security_key: Befeiligingskaai brûke
author_attribution:
example_title: Faorbyldtekst
- hint_html: Bepaal hoe’t wy jo fermelde, wannear’t jo keppelingen op Mastodon dield wurde.
+ hint_html: Skriuwe jo nijs- of blogartikelen bûten Mastodon? Bepaal hoe’t jo oahelle wurde as dizze dield wurde op Mastodon.
+ instructions: 'Soargj derfoar dat dizze koade yn de HTML fan jo artikel sit:'
more_from_html: Mear fan %{name}
s_blog: Weblog fan %{name}
+ then_instructions: Foegje dernei de domeinnamme fan de publikaasje yn it ûndersteande fjild ta.
title: Auteur-attribúsje
challenge:
confirm: Trochgean
diff --git a/config/locales/ga.yml b/config/locales/ga.yml
index a201b73325..67461f3c2a 100644
--- a/config/locales/ga.yml
+++ b/config/locales/ga.yml
@@ -27,6 +27,7 @@ ga:
other: Postálacha
two: Postálacha
posts_tab_heading: Postálacha
+ self_follow_error: Ní cheadaítear do chuntas féin a leanúint
admin:
account_actions:
action: Déan gníomh
@@ -874,7 +875,7 @@ ga:
original_status: Bunphostáil
reblogs: Athbhlaganna
status_changed: Athraíodh postáil
- title: Poist chuntais
+ title: Poist chuntais - @%{name}
trending: Ag treochtáil
visibility: Infheictheacht
with_media: Le meáin
@@ -1219,9 +1220,11 @@ ga:
use_security_key: Úsáid eochair shlándála
author_attribution:
example_title: Téacs samplach
- hint_html: Rialú conas a chuirtear chun sochair tú nuair a roinntear naisc ar Mastodon.
+ hint_html: An bhfuil tú ag scríobh altanna nuachta nó blag lasmuigh de Mastodon? Rialú conas a gheobhaidh tú creidmheas nuair a roinntear iad ar Mastodon.
+ instructions: 'Cinntigh go bhfuil an cód seo i HTML d''alt:'
more_from_html: Tuilleadh ó %{name}
s_blog: Blag %{name}
+ then_instructions: Ansin, cuir ainm fearainn an fhoilseacháin sa réimse thíos.
title: Leithdháil an údair
challenge:
confirm: Lean ar aghaidh
@@ -1440,6 +1443,80 @@ ga:
merge_long: Coinnigh taifid atá ann cheana féin agus cuir cinn nua leis
overwrite: Forscríobh
overwrite_long: Cuir na cinn nua in ionad na dtaifead reatha
+ overwrite_preambles:
+ blocking_html:
+ few: Tá tú ar tí do liosta bloc a chur in ionad suas le %{count} cuntais ó %{filename}.
+ many: Tá tú ar tí do liosta bloc a chur in ionad suas le %{count} cuntais ó %{filename}.
+ one: Tá tú ar tí do liosta bloc a chur in ionad suas le %{count} cuntas ó %{filename}.
+ other: Tá tú ar tí do liosta bloc a chur in ionad suas le %{count} cuntais ó %{filename}.
+ two: Tá tú ar tí do liosta bloc a chur in ionad suas le %{count} cuntais ó %{filename}.
+ bookmarks_html:
+ few: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{count} postáil ó %{filename}.
+ many: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{count} postáil ó %{filename}.
+ one: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{count} postáil ó %{filename}.
+ other: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{count} postáil ó %{filename}.
+ two: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{count} postáil ó %{filename}.
+ domain_blocking_html:
+ few: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{count} fearainn ó %{filename}.
+ many: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{count} fearainn ó %{filename}.
+ one: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{count} fearainn ó %{filename}.
+ other: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{count} fearainn ó %{filename}.
+ two: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{count} fearainn ó %{filename}.
+ following_html:
+ few: Tá tú ar tí leanúint suas go dtí %{count} cuntas ó %{filename} agus stop ag leanúint aon duine eile.
+ many: Tá tú ar tí leanúint suas go dtí %{count} cuntas ó %{filename} agus stop ag leanúint aon duine eile.
+ one: Tá tú ar tí leanúint suas go dtí %{count} chuntais ó %{filename} agus stop a leanúint aon duine eile.
+ other: Tá tú ar tí leanúint suas go dtí %{count} cuntas ó %{filename} agus stop ag leanúint aon duine eile.
+ two: Tá tú ar tí leanúint suas go dtí %{count} cuntas ó %{filename} agus stop ag leanúint aon duine eile.
+ lists_html:
+ few: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{count} cuntais le liostaí nua.
+ many: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{count} cuntais le liostaí nua.
+ one: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{count} cuntas le liostaí nua.
+ other: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{count} cuntais le liostaí nua.
+ two: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{count} cuntais le liostaí nua.
+ muting_html:
+ few: Tá tú ar tí do liosta cuntas balbhaithe a chur in ionad suas le %{count} cuntais ó %{filename}.
+ many: Tá tú ar tí do liosta cuntas balbhaithe a chur in ionad suas le %{count} cuntais ó %{filename}.
+ one: Tá tú ar tí do liosta cuntais balbhaithe a chur in ionad suas le %{count} cuntas ó %{filename}.
+ other: Tá tú ar tí do liosta cuntas balbhaithe a chur in ionad suas le %{count} cuntais ó %{filename}.
+ two: Tá tú ar tí do liosta cuntas balbhaithe a chur in ionad suas le %{count} cuntais ó %{filename}.
+ preambles:
+ blocking_html:
+ few: Tá tú ar tí bhac suas le %{count} cuntais ó %{filename}.
+ many: Tá tú ar tí bhac suas le %{count} cuntais ó %{filename}.
+ one: Tá tú ar tí bac suas go dtí %{count} cuntas ó %{filename}.
+ other: Tá tú ar tí bhac suas le %{count} cuntais ó %{filename}.
+ two: Tá tú ar tí bhac suas le %{count} cuntais ó %{filename}.
+ bookmarks_html:
+ few: Tá tú ar tí %{count} postáil ó %{filename} a chur le do leabharmharcanna.
+ many: Tá tú ar tí %{count} postáil ó %{filename} a chur le do leabharmharcanna.
+ one: Tá tú ar tí %{count} postáil ó %{filename} a chur le do leabharmharcanna.
+ other: Tá tú ar tí %{count} postáil ó %{filename} a chur le do leabharmharcanna.
+ two: Tá tú ar tí %{count} postáil ó %{filename} a chur le do leabharmharcanna.
+ domain_blocking_html:
+ few: Tá tú ar tí bhac suas le %{count} bhfearainn ó %{filename}.
+ many: Tá tú ar tí bhac suas le %{count} bhfearainn ó %{filename}.
+ one: Tá tú ar tí bac suas go dtí %{count} fearann ó %{filename}.
+ other: Tá tú ar tí bhac suas le %{count} bhfearainn ó %{filename}.
+ two: Tá tú ar tí bhac suas le %{count} bhfearainn ó %{filename}.
+ following_html:
+ few: Tá tú ar tí leanúint suas go dtí %{count} cuntais ó %{filename}.
+ many: Tá tú ar tí leanúint suas go dtí %{count} cuntais ó %{filename}.
+ one: Tá tú ar tí leanúint suas go dtí %{count} cuntas ó %{filename}.
+ other: Tá tú ar tí leanúint suas go dtí %{count} cuntais ó %{filename}.
+ two: Tá tú ar tí leanúint suas go dtí %{count} cuntais ó %{filename}.
+ lists_html:
+ few: Tá tú ar tí %{count} cuntais ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis.
+ many: Tá tú ar tí %{count} cuntais ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis.
+ one: Tá tú ar tí cuntas %{count} ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis.
+ other: Tá tú ar tí %{count} cuntais ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis.
+ two: Tá tú ar tí %{count} cuntais ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis.
+ muting_html:
+ few: Tá tú ar tí balbhú suas le %{count} cuntais ó %{filename}.
+ many: Tá tú ar tí balbhú suas le %{count} cuntais ó %{filename}.
+ one: Tá tú ar tí balbhú suas go dtí %{count} cuntas ó %{filename}.
+ other: Tá tú ar tí balbhú suas le %{count} cuntais ó %{filename}.
+ two: Tá tú ar tí balbhú suas le %{count} cuntais ó %{filename}.
preface: Is féidir leat sonraí a d’easpórtáil tú a allmhairiú ó fhreastalaí eile, mar shampla liosta de na daoine a bhfuil tú ag leanúint nó ag cur bac orthu.
recent_imports: Allmhairí le déanaí
states:
diff --git a/config/locales/gd.yml b/config/locales/gd.yml
index cb7c6254bc..89198bd514 100644
--- a/config/locales/gd.yml
+++ b/config/locales/gd.yml
@@ -25,6 +25,7 @@ gd:
other: Postaichean
two: Postaichean
posts_tab_heading: Postaichean
+ self_follow_error: Chan fhaod thu an cunntas agad fhèn a leantainn
admin:
account_actions:
action: Gabh an gnìomh
@@ -261,7 +262,7 @@ gd:
destroy_domain_allow_html: Dì-cheadaich %{name} co-nasgadh leis an àrainn %{target}
destroy_domain_block_html: Dì-bhac %{name} an àrainn %{target}
destroy_email_domain_block_html: Dì-bhac %{name} an àrainn puist-d %{target}
- destroy_instance_html: Purgaidich %{name} an àrainn %{target}
+ destroy_instance_html: Phurgaidich %{name} an àrainn %{target}
destroy_ip_block_html: Sguab %{name} às riaghailt dhan IP %{target}
destroy_status_html: Thug %{name} post aig %{target} air falbh
destroy_unavailable_domain_html: Lean %{name} air adhart leis an lìbhrigeadh dhan àrainn %{target}
@@ -860,7 +861,7 @@ gd:
original_status: Am post tùsail
reblogs: Brosnachaidhean
status_changed: Post air atharrachadh
- title: Postaichean a’ chunntais
+ title: Postaichean a’ chunntais - @%{name}
trending: A’ treandadh
visibility: Faicsinneachd
with_media: Le meadhanan riutha
@@ -1201,9 +1202,11 @@ gd:
use_security_key: Cleachd iuchair tèarainteachd
author_attribution:
example_title: Ball-sampaill teacsa
- hint_html: Stùirich mar a thèid iomradh a thoirt ort nuair a thèid ceangal a cho-roinneadh air Mastodon.
+ hint_html: An sgrìobh thu naidheachdan no bloga taobh a-muigh Mhastodon? Stiùirich mar a thèid iomradh a thoirt ort nuair a bhios na h-artaigilean agad ’gan co-roinneadh air Mastodon.
+ instructions: 'Dèan cinnteach gu bheil an còd seo am broinn HTML an artaigil agad:'
more_from_html: Barrachd o %{name}
s_blog: Bloga aig %{name}
+ then_instructions: An uair sin, cuir ainm àrainn an fhoillseachaidh ris an raon gu h-ìosal.
title: Aithris air an ùghdar
challenge:
confirm: Lean air adhart
@@ -1415,6 +1418,68 @@ gd:
merge_long: Cùm na reacordan a tha ann is cuir feadhainn ùr ris
overwrite: Sgrìobh thairis air
overwrite_long: Cuir na reacordan ùra an àite na feadhna a tha ann
+ overwrite_preambles:
+ blocking_html:
+ few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a chur an àite liosta nam bacaidhean agad.
+ one: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur an àite liosta nam bacaidhean agad.
+ other: Tha thu an impis suas ri %{count} cunntas o %{filename} a chur an àite liosta nam bacaidhean agad.
+ two: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur an àite liosta nam bacaidhean agad.
+ bookmarks_html:
+ few: Tha thu an impis suas ri %{count} postaichean o %{filename} a chur an àite nan comharra-lìn agad.
+ one: Tha thu an impis suas ri %{count} phost o %{filename} a chur an àite nan comharra-lìn agad.
+ other: Tha thu an impis suas ri %{count} post o %{filename} a chur an àite nan comharra-lìn agad.
+ two: Tha thu an impis suas ri %{count} phost o %{filename} a chur an àite nan comharra-lìn agad.
+ domain_blocking_html:
+ few: Tha thu an impis suas ri %{count} àrainnean o %{filename} a chur an àite liosta nam bacaidhean àrainne agad.
+ one: Tha thu an impis suas ri %{count} àrainn o %{filename} a chur an àite liosta nam bacaidhean àrainne agad.
+ other: Tha thu an impis suas ri %{count} àrainn o %{filename} a chur an àite liosta nam bacaidhean àrainne agad.
+ two: Tha thu an impis suas ri %{count} àrainn o %{filename} a chur an àite liosta nam bacaidhean àrainne agad.
+ following_html:
+ few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a leantainn agus sguiridh tu a leantainn duine sam bith eile.
+ one: Tha thu an impis suas ri %{count} chunntas o %{filename} a leantainn agus sguiridh tu a leantainn duine sam bith eile.
+ other: Tha thu an impis suas ri %{count} cunntas o %{filename} a leantainn agus sguiridh tu a leantainn duine sam bith eile.
+ two: Tha thu an impis suas ri %{count} chunntas o %{filename} a leantainn agus sguiridh tu a leantainn duine sam bith eile.
+ lists_html:
+ few: Tha thu an impis susbaint %{filename} a chur an àite nan liostaichean agad. Thèid suas ri %{count} cunntasan a chur ri liostaichean ùra.
+ one: Tha thu an impis susbaint %{filename} a chur an àite nan liostaichean agad. Thèid suas ri %{count} chunntas a chur ri liostaichean ùra.
+ other: Tha thu an impis susbaint %{filename} a chur an àite nan liostaichean agad. Thèid suas ri %{count} cunntas a chur ri liostaichean ùra.
+ two: Tha thu an impis susbaint %{filename} a chur an àite nan liostaichean agad. Thèid suas ri %{count} chunntas a chur ri liostaichean ùra.
+ muting_html:
+ few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a chur an àite liosta nan cunntasan mùchte agad.
+ one: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur an àite liosta nan cunntasan mùchte agad.
+ other: Tha thu an impis suas ri %{count} cunntas o %{filename} a chur an àite liosta nan cunntasan mùchte agad.
+ two: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur an àite liosta nan cunntasan mùchte agad.
+ preambles:
+ blocking_html:
+ few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a bhacadh.
+ one: Tha thu an impis suas ri %{count} chunntas o %{filename} a bhacadh.
+ other: Tha thu an impis suas ri %{count} cunntas o %{filename} a bhacadh.
+ two: Tha thu an impis suas ri %{count} chunntas o %{filename} a bhacadh.
+ bookmarks_html:
+ few: Tha thu an impis suas ri %{count} postaichean o %{filename} a chur ris na h-annsachdan agad.
+ one: Tha thu an impis suas ri %{count} phost o %{filename} a chur ris na h-annsachdan agad.
+ other: Tha thu an impis suas ri %{count} post o %{filename} a chur ris na h-annsachdan agad.
+ two: Tha thu an impis suas ri %{count} phost o %{filename} a chur ris na h-annsachdan agad.
+ domain_blocking_html:
+ few: Tha thu an impis suas ri %{count} àrainnean o %{filename} a bhacadh.
+ one: Tha thu an impis suas ri %{count} àrainn o %{filename} a bhacadh.
+ other: Tha thu an impis suas ri %{count} àrainn o %{filename} a bhacadh.
+ two: Tha thu an impis suas ri %{count} àrainn o %{filename} a bhacadh.
+ following_html:
+ few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a leantainn.
+ one: Tha thu an impis suas ri %{count} chunntas o %{filename} a leantainn.
+ other: Tha thu an impis suas ri %{count} cunntas o %{filename} a leantainn.
+ two: Tha thu an impis suas ri %{count} chunntas o %{filename} a leantainn.
+ lists_html:
+ few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a chur ris na liostaichean agad. Thèid liostaichean ùra a chruthachadh mur eil liostaichean ann airson nan cunntasan a chur ris.
+ one: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur ris na liostaichean agad. Thèid liostaichean ùra a chruthachadh mur eil liostaichean ann airson nan cunntasan a chur ris.
+ other: Tha thu an impis suas ri %{count} cunntas o %{filename} a chur ris na liostaichean agad. Thèid liostaichean ùra a chruthachadh mur eil liostaichean ann airson nan cunntasan a chur ris.
+ two: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur ris na liostaichean agad. Thèid liostaichean ùra a chruthachadh mur eil liostaichean ann airson nan cunntasan a chur ris.
+ muting_html:
+ few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a mhùchadh.
+ one: Tha thu an impis suas ri %{count} chunntas o %{filename} a mhùchadh.
+ other: Tha thu an impis suas ri %{count} cunntas o %{filename} a mhùchadh.
+ two: Tha thu an impis suas ri %{count} chunntas o %{filename} a mhùchadh.
preface: "’S urrainn dhut dàta ion-phortadh a dh’às-phortaich thu o fhrithealaiche eile, can liosta nan daoine a leanas tu no a tha thu a’ bacadh."
recent_imports: Ion-phortaidhean o chionn goirid
states:
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index cdc9421324..0f3420a7f3 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -187,6 +187,7 @@ gl:
create_domain_block: Crear bloquedo do Dominio
create_email_domain_block: Crear Bloqueo de Dominio do correo
create_ip_block: Crear regra IP
+ create_relay: Crear Repetidor
create_unavailable_domain: Crear dominio Non dispoñible
create_user_role: Crear Rol
demote_user: Degradar usuaria
@@ -198,14 +199,17 @@ gl:
destroy_email_domain_block: Eliminar bloqueo do dominio do correo
destroy_instance: Purgar Dominio
destroy_ip_block: Eliminar regra IP
+ destroy_relay: Eliminar Repetidor
destroy_status: Eliminar publicación
destroy_unavailable_domain: Eliminar dominio Non dispoñible
destroy_user_role: Eliminar Rol
disable_2fa_user: Desactivar 2FA
disable_custom_emoji: Desactivar emoticona personalizada
+ disable_relay: Desactivar Repetidor
disable_sign_in_token_auth_user: Desactivar Autenticación por Token no Correo para a Usuaria
disable_user: Desactivar usuaria
enable_custom_emoji: Activar emoticona personalizada
+ enable_relay: Activar Repetidor
enable_sign_in_token_auth_user: Activar Autenticación con Token no Correo para a Usuaria
enable_user: Activar usuaria
memorialize_account: Transformar en conta conmemorativa
@@ -247,6 +251,7 @@ gl:
create_domain_block_html: "%{name} bloqueou o dominio %{target}"
create_email_domain_block_html: "%{name} bloqueou o dominio de correo %{target}"
create_ip_block_html: "%{name} creou regra para o IP %{target}"
+ create_relay_html: "%{name} creou un repetidor en %{target}"
create_unavailable_domain_html: "%{name} deixou de interactuar co dominio %{target}"
create_user_role_html: "%{name} creou o rol %{target}"
demote_user_html: "%{name} degradou a usuaria %{target}"
@@ -258,14 +263,17 @@ gl:
destroy_email_domain_block_html: "%{name} desbloqueou o dominio de correo %{target}"
destroy_instance_html: "%{name} purgou o dominio %{target}"
destroy_ip_block_html: "%{name} eliminou a regra para o IP %{target}"
+ destroy_relay_html: "%{name} eliminou o repetidor %{target}"
destroy_status_html: "%{name} eliminou a publicación de %{target}"
destroy_unavailable_domain_html: "%{name} retomou a interacción co dominio %{target}"
destroy_user_role_html: "%{name} eliminou o rol %{target}"
disable_2fa_user_html: "%{name} desactivou o requerimento do segundo factor para a usuaria %{target}"
disable_custom_emoji_html: "%{name} desactivou o emoji %{target}"
+ disable_relay_html: "%{name} desactivou o repetidor %{target}"
disable_sign_in_token_auth_user_html: "%{name} desactivou a autenticación por token no email para %{target}"
disable_user_html: "%{name} desactivou as credenciais para a usuaria %{target}"
enable_custom_emoji_html: "%{name} activou o emoji %{target}"
+ enable_relay_html: "%{name} activou o repetidor %{target}"
enable_sign_in_token_auth_user_html: "%{name} activou a autenticación con token no email para %{target}"
enable_user_html: "%{name} activou as credenciais para a usuaria %{target}"
memorialize_account_html: "%{name} convertiu a conta de %{target} nunha páxina para o recordo"
@@ -833,7 +841,7 @@ gl:
original_status: Publicación orixinal
reblogs: Promocións
status_changed: Publicación editada
- title: Publicacións da conta
+ title: Publicacións da conta - @%{name}
trending: Popular
visibility: Visibilidade
with_media: con medios
@@ -1166,9 +1174,11 @@ gl:
use_security_key: Usa chave de seguridade
author_attribution:
example_title: Texto de mostra
- hint_html: Controla o xeito en que te acreditan cando se comparten ligazóns en Mastodon.
+ hint_html: Escribes novas ou artigos nun blog alleos a Mastodon? Xestiona o xeito en que podes dar crédito da túa autoría cando os compartes en Mastodon.
+ instructions: 'Pon coidado en que este código apareza no HTML do teu artigo:'
more_from_html: Máis de %{name}
s_blog: Blog de %{name}
+ then_instructions: Despois engade o nome de dominio da publicación no campo inferior.
title: Atribución da autoría
challenge:
confirm: Continuar
@@ -1785,11 +1795,11 @@ gl:
enabled: Borrar automáticamente publicacións antigas
enabled_hint: Borra automáticamente as túas publicacións unha vez acadan certa lonxevidade, a menos que cumpran algunha destas excepcións
exceptions: Excepcións
- explanation: Como o borrado de publicacións consume moitos recursos, esta faise aos poucos cando o servidor non ten moita carga de traballo. Así, a eliminación das túas publicacións podería ser lixeiramente posterior a cando lle correspondería por idade.
+ explanation: O borrado de publicacións vaise facendo aos poucos cando o servidor non ten moito traballo, é unha tarefa que consume moitos recursos. Así, a eliminación das túas publicacións podería ser lixeiramente posterior a cando lle correspondería por antigüidade.
ignore_favs: Ignorar favoritas
ignore_reblogs: Ignorar promocións
interaction_exceptions: Excepcións baseadas en interaccións
- interaction_exceptions_explanation: Ten en conta que non hai garantía de que se eliminen as túas publicacións se baixan do límite de promocións e favorecementos se nalgún momento o superaron.
+ interaction_exceptions_explanation: Ten en conta que non hai garantía de que se eliminen as túas publicacións se baixan do límite de promocións ou favorecementos se nalgún momento o tivese superado.
keep_direct: Manter mensaxes directas
keep_direct_hint: Non borrar ningunha das túas mensaxes directas
keep_media: Manter publicacións que conteñen multimedia
diff --git a/config/locales/he.yml b/config/locales/he.yml
index 54b6b6f38d..59dc09799d 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -861,7 +861,7 @@ he:
original_status: הודעה מקורית
reblogs: שיתופים
status_changed: הודעה שונתה
- title: הודעות החשבון
+ title: הודעות החשבון - @%{name}
trending: נושאים חמים
visibility: נראות
with_media: עם מדיה
@@ -1202,9 +1202,11 @@ he:
use_security_key: שימוש במפתח אבטחה
author_attribution:
example_title: טקסט לדוגמה
- hint_html: בחירה איך תקבלו קרדיטציה כאשר קישורים משותפים דרך מסטודון.
+ hint_html: האם יש לך בלוג או טור חדשות שמתפרסם מחוץ למסטודון? ניתן לשלוט איך יוצג הקרדיט שלך כשמשתפים את הלינק במסטודון.
+ instructions: 'ודאו כי הקוד הזה נכלל בקוד ה־HTML של המאמרים שלכם:'
more_from_html: עוד מאת %{name}
s_blog: הבלוג של %{name}
+ then_instructions: לאחר מכן, הוסיפו את שם המתחם של האתר המפרסם בשדה למטה.
title: ייחוס למפרסם
challenge:
confirm: המשך
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index 15c632adc9..56d41daf86 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -21,6 +21,7 @@ hu:
one: Bejegyzés
other: Bejegyzés
posts_tab_heading: Bejegyzés
+ self_follow_error: A saját fiók nem követhető
admin:
account_actions:
action: Művelet végrehajtása
@@ -186,6 +187,7 @@ hu:
create_domain_block: Domain tiltás létrehozása
create_email_domain_block: E-mail-domain-tiltás létrehozása
create_ip_block: IP szabály létrehozása
+ create_relay: Továbbító létrehozása
create_unavailable_domain: Elérhetetlen domain létrehozása
create_user_role: Szerepkör létrehozása
demote_user: Felhasználó lefokozása
@@ -197,14 +199,17 @@ hu:
destroy_email_domain_block: E-mail-domain-tiltás törlése
destroy_instance: Domain végleges törlése
destroy_ip_block: IP szabály törlése
+ destroy_relay: Továbbító törlése
destroy_status: Bejegyzés törlése
destroy_unavailable_domain: Elérhetetlen domain törlése
destroy_user_role: Szerepkör eltávolítása
disable_2fa_user: Kétlépcsős hitelesítés letiltása
disable_custom_emoji: Egyéni emodzsi letiltása
+ disable_relay: Továbbító letiltása
disable_sign_in_token_auth_user: A felhasználó tokenes e-mail-hitelesítésének letiltása
disable_user: Felhasználói letiltása
enable_custom_emoji: Egyéni emodzsi engedélyezése
+ enable_relay: Továbbító engedélyezése
enable_sign_in_token_auth_user: A felhasználó tokenes e-mail-hitelesítésének engedélyezése
enable_user: Felhasználó engedélyezése
memorialize_account: Fiók emlékké nyilvánítása
@@ -246,6 +251,7 @@ hu:
create_domain_block_html: "%{name} letiltotta a %{target} domaint"
create_email_domain_block_html: "%{name} letiltotta a(z) %{target} e-mail-domaint"
create_ip_block_html: "%{name} létrehozta a(z) %{target} IP-címre vonatkozó szabályt"
+ create_relay_html: "%{name} létrehozta az átirányítót: %{target}"
create_unavailable_domain_html: "%{name} leállította a kézbesítést a %{target} domainbe"
create_user_role_html: "%{name} létrehozta a(z) %{target} szerepkört"
demote_user_html: "%{name} lefokozta %{target} felhasználót"
@@ -257,14 +263,17 @@ hu:
destroy_email_domain_block_html: "%{name} engedélyezte a(z) %{target} e-mail-domaint"
destroy_instance_html: "%{name} véglegesen törölte a(z) %{target} domaint"
destroy_ip_block_html: "%{name} törölte a(z) %{target} IP-címre vonatkozó szabályt"
+ destroy_relay_html: "%{name} törölte az átirányítót: %{target}"
destroy_status_html: "%{name} eltávolította %{target} felhasználó bejegyzését"
destroy_unavailable_domain_html: "%{name} újraindította a kézbesítést a %{target} domainbe"
destroy_user_role_html: "%{name} törölte a(z) %{target} szerepkört"
disable_2fa_user_html: "%{name} kikapcsolta a kétlépcsős hitelesítést %{target} felhasználó fiókján"
disable_custom_emoji_html: "%{name} letiltotta az emodzsit: %{target}"
+ disable_relay_html: "%{name} letiltotta az átirányítót: %{target}"
disable_sign_in_token_auth_user_html: "%{name} letiltotta a tokenes e-mail-hitelesítést %{target} felhasználóra"
disable_user_html: "%{name} letiltotta %{target} felhasználó bejelentkezését"
enable_custom_emoji_html: "%{name} engedélyezte az emodzsit: %{target}"
+ enable_relay_html: "%{name} engedélyezte az átirányítót: %{target}"
enable_sign_in_token_auth_user_html: "%{name} engedélyezte a tokenes e-mail-hitelesítést %{target} felhasználóra"
enable_user_html: "%{name} engedélyezte %{target} felhasználó bejelentkezését"
memorialize_account_html: "%{name} emléket állított %{target} felhasználónak"
@@ -570,21 +579,21 @@ hu:
relationships:
title: "%{acct} kapcsolatai"
relays:
- add_new: Új relé hozzáadása
+ add_new: Új továbbító hozzáadása
delete: Törlés
- description_html: A föderációs relé egy olyan köztes szerver, mely nagy mennyiségű nyilvános bejegyzést cserél az erre feliratkozó vagy erre publikáló szerverek között. Ezzel segíthetsz kis és közepes szervereknek tartalmat megtalálni a föderációban, mely egyébként csak akkor válna lehetővé, ha a saját felhasználóik más szervereken lévő fiókokat követnének.
+ description_html: A föderációs továbbító egy olyan köztes kiszolgáló, mely nagy mennyiségű nyilvános bejegyzést cserél az erre feliratkozó vagy erre publikáló kiszolgálók között. Ezzel segíthetsz kis és közepes kiszolgálóknak megtalálni a tartalmakat a föderációban, melyek egyébként csak akkor válnának lehetővé, ha a saját felhasználóik más kiszolgálókon lévő fiókokat követnének.
disable: Kikapcsolás
disabled: Kikapcsolva
enable: Bekapcsolás
- enable_hint: Ha bekapcsolod, a szerver minden nyilvános bejegyzésre feliratkozik ezen a relén, valamint az összes nyilvános bejegyzést elküldi ennek.
+ enable_hint: Ha bekapcsolod, a kiszolgáló minden nyilvános bejegyzésre feliratkozik ezen a továbbítón, valamint az összes nyilvános bejegyzést elküldi ennek.
enabled: Bekapcsolva
- inbox_url: Relé URL
- pending: Várakozás a relé jóváhagyására
+ inbox_url: Továbbító URL
+ pending: Várakozás a továbbító jóváhagyására
save_and_enable: Mentés és engedélyezés
- setup: Relé kapcsolat felállítása
- signatures_not_enabled: A relék nem fognak megfelelően működni, amíg a biztonságos mód vagy a korlátozott föderációs mód engedélyezett
+ setup: Továbbító kapcsolat felállítása
+ signatures_not_enabled: A továbbítók nem fognak megfelelően működni, amíg a biztonságos mód vagy a korlátozott föderációs mód engedélyezett
status: Állapot
- title: Relék
+ title: Továbbítók
report_notes:
created_msg: Bejelentési feljegyzés létrehozva!
destroyed_msg: Bejelentési feljegyzés törölve!
@@ -832,7 +841,7 @@ hu:
original_status: Eredeti bejegyzés
reblogs: Megosztások
status_changed: A bejegyzés megváltozott
- title: Fiók bejegyzései
+ title: Fiók bejegyzései - @%{name}
trending: Felkapott
visibility: Láthatóság
with_media: Médiával
@@ -1165,9 +1174,11 @@ hu:
use_security_key: Biztonsági kulcs használata
author_attribution:
example_title: Mintaszöveg
- hint_html: Szabályozd, hogyan hivatkoznak rád, amikor linket osztanak meg Mastodonon.
+ hint_html: Mastodonon kívül írsz híreket vagy blogbejegyzéseket? Szabályozd, hogyan tüntethetnek fel szerzőként, amikor Mastodonon osztják meg őket.
+ instructions: 'Győződj meg róla, hogy ez a kód a cikked HTML-jében van:'
more_from_html: 'Több tőle: %{name}'
s_blog: "%{name} blogja"
+ then_instructions: Aztán add meg a publikáció domain-nevét az alábbi mezőben.
title: Szerző forrásmegjelölése
challenge:
confirm: Folytatás
diff --git a/config/locales/hy.yml b/config/locales/hy.yml
index 201922d102..d8cf2a97ba 100644
--- a/config/locales/hy.yml
+++ b/config/locales/hy.yml
@@ -402,7 +402,7 @@ hy:
deleted: Ջնջված է
media:
title: Մեդիա
- title: Օգտատիրոջ գրառումները
+ title: Օգտատիրոջ գրառումները - @%{name}
with_media: Մեդիայի հետ
tags:
review: Վերանայել գրառումը
diff --git a/config/locales/ia.yml b/config/locales/ia.yml
index 4d9148674d..1398ae51d4 100644
--- a/config/locales/ia.yml
+++ b/config/locales/ia.yml
@@ -21,6 +21,7 @@ ia:
one: Message
other: Messages
posts_tab_heading: Messages
+ self_follow_error: Sequer tu proprie conto non es permittite
admin:
account_actions:
action: Exequer action
@@ -473,6 +474,9 @@ ia:
title: Recommendationes de contos a sequer
unsuppress: Restaurar recommendation de sequimento
instances:
+ audit_log:
+ title: Registros de controlo recente
+ view_all: Vider registros de controlo integre
availability:
description_html:
one: Si le livration al dominio falle %{count} die sin succeder, necun tentativa ulterior de livration essera facite, excepte si es recipite un livration ab le dominio.
@@ -599,7 +603,9 @@ ia:
resolve_description_html: Necun mesura essera prendite contra le conto denunciate, necun sanction registrate, e le reporto essera claudite.
silence_description_html: Iste conto essera visibile solmente a qui ja lo seque o manualmente lo cerca, limitante gravemente su portata. Pote sempre esser revertite. Claude tote le reportos contra iste conto.
suspend_description_html: Le conto e tote su contento essera inaccessibile e finalmente delite, e interager con illo essera impossibile. Reversibile intra 30 dies. Claude tote le reportos contra iste conto.
+ actions_description_html: Decider que mesuras prender pro resolver iste reporto. Si tu prende un mesura punitive contra le conto reportate, un aviso email les sera inviate, salvo quando le categoria Spam es seligite.
actions_description_remote_html: Decide qual mesura prender pro resolver iste reporto. Isto affectara solmente le maniera in que tu servitor communica con iste conto remote e gere su contento.
+ actions_no_posts: Iste reporto non ha alcun message associate a deler
add_to_report: Adder plus al reporto
already_suspended_badges:
local: Ja suspendite sur iste servitor
@@ -827,7 +833,7 @@ ia:
original_status: Message original
reblogs: Republicationes
status_changed: Message cambiate
- title: Messages del conto
+ title: Messages del conto - @%{name}
trending: Tendentias
visibility: Visibilitate
with_media: Con multimedia
@@ -870,6 +876,9 @@ ia:
message_html: Tu non ha definite alcun regula de servitor.
sidekiq_process_check:
message_html: Necun processo Sidekiq es active pro le cauda(s) %{value}. Per favor verifica tu configuration de Sidekiq
+ software_version_check:
+ action: Vider le actualisationes disponibile
+ message_html: Un actualisation de Mastodon es disponibile.
software_version_critical_check:
action: Vider le actualisationes disponibile
message_html: Un actualisation critic de Mastodon es disponibile. Per favor actualisa lo le plus tosto possibile.
@@ -885,11 +894,18 @@ ia:
tags:
moderation:
not_trendable: Non pro tendentia
+ not_usable: Non usabile
pending_review: Attende revision
+ review_requested: Revision demandate
+ reviewed: Revidite
title: Stato
+ trendable: De tendentia
+ unreviewed: Non revidite
+ usable: Usabile
name: Nomine
newest: Le plus nove
oldest: Le plus ancian
+ open: Vider publicamente
reset: Reinitialisar
review: Revide le stato
search: Cercar
@@ -932,7 +948,9 @@ ia:
statuses:
allow: Permitter message
allow_account: Permitter autor
+ confirm_allow: Desira tu vermente permitter le statos seligite?
confirm_allow_account: Es tu secur que tu vole permitter le contos seligite?
+ confirm_disallow: Desira tu vermente impedir le statos seligite?
confirm_disallow_account: Es tu secur que tu vole cessar de permitter le contos seligite?
description_html: Istes es le messages cognoscite sur tu servitor que al momento es multo compartite e marcate como favorite. Illos pote adjutar tu usatores nove e reveniente a trovar plus personas a sequer. Necun message es monstrate publicamente usque tu approba le autor, a condition que le autor permitte que su conto es suggerite a alteres. Tu pote tamben permitter o rejectar messages singule.
disallow: Non permitter message
@@ -1150,6 +1168,7 @@ ia:
example_title: Texto de exemplo
more_from_html: Plus de %{name}
s_blog: Blog de %{name}
+ title: Attribution de autor
challenge:
confirm: Continuar
hint_html: "Consilio: Nos non te demandara tu contrasigno de novo in le proxime hora."
@@ -1346,6 +1365,44 @@ ia:
merge_long: Conservar le registros existente e adder noves
overwrite: Superscriber
overwrite_long: Reimplaciar registros actual con le noves
+ overwrite_preambles:
+ blocking_html:
+ one: Tu va reimplaciar tu lista de blocada con usque %{count} conto ab %{filename}.
+ other: Tu va reimplaciar tu lista de blocada con usque %{count} contos ab %{filename}.
+ bookmarks_html:
+ one: Tu va reimplaciar tu marcapaginas con usque %{count} message ab %{filename}.
+ other: Tu va reimplaciar tu marcapaginas con usque %{count} messages ab %{filename}.
+ domain_blocking_html:
+ one: Tu va reimplaciar tu blocada lista de dominios blocate con usque %{count} dominio ab %{filename}.
+ other: Tu va reimplaciar tu lista de dominios blocate con usque %{count} dominios ab %{filename}.
+ following_html:
+ one: Tu va sequer usque %{count} conto ab %{filename} e cessar de sequer ulle altere.
+ other: Tu va sequer usque %{count} contos ab %{filename} e cessar de sequer ulle altere.
+ lists_html:
+ one: Tu va reimplaciar tu listas con contentos ab %{filename}. Usque %{count} conto sera addite al nove listas.
+ other: Tu va reimplaciar tu listas con contentos ab %{filename}. Usque %{count} contos sera addite a nove listas.
+ muting_html:
+ one: Tu va reimplaciar tu lista de conto silentiate con usque %{count} conto ab %{filename}.
+ other: Tu va reimplaciar tu lista de contos silentiate con usque %{count} contos ab %{filename}.
+ preambles:
+ blocking_html:
+ one: Tu va blocar usque %{count} conto ab %{filename}.
+ other: Tu va blocar usque %{count} contos de %{filename}.
+ bookmarks_html:
+ one: Tu va adder usque %{count} message ab %{filename} a tu marcapaginas.
+ other: Tu va adder usque %{count} messages ab %{filename} a tu marcapaginas.
+ domain_blocking_html:
+ one: Tu va blocar usque %{count} dominio ab %{filename}.
+ other: Tu va blocar usque %{count} dominios ab %{filename}.
+ following_html:
+ one: Tu va sequer usque %{count} conto ab %{filename}.
+ other: Tu va sequer usque %{count} contos de %{filename}.
+ lists_html:
+ one: Tu va adder usque %{count} conto ab %{filename} a tu lista. Nove listas sera create si il non ha lista a adder.
+ other: Tu va adder usque %{count} contos ab %{filename} a tu lista. Nove listas sera create si il non ha lista a adder.
+ muting_html:
+ one: Tu va silentiar usque %{count} conto ab %{filename}.
+ other: Tu va silentiar usque %{count} contos ab %{filename}.
preface: Tu pote importar datos que tu ha exportate de un altere servitor, como un lista de personas que tu seque o bloca.
recent_imports: Importationes recente
states:
@@ -1430,6 +1487,7 @@ ia:
media_attachments:
validations:
images_and_video: Impossibile annexar un video a un message que jam contine imagines
+ not_found: Medios %{ids} non trovate o jam attachate a un altere message
not_ready: Impossibile annexar files que non ha ancora essite processate. Retenta post un momento!
too_many: Impossibile annexar plus de 4 files
migrations:
@@ -1661,6 +1719,7 @@ ia:
delete: Deletion de conto
development: Disveloppamento
edit_profile: Modificar profilo
+ export: Exportar
featured_tags: Hashtags in evidentia
import: Importar
import_and_export: Importar e exportar
diff --git a/config/locales/id.yml b/config/locales/id.yml
index 6a005fddaa..9c31daf420 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -711,7 +711,7 @@ id:
original_status: Kiriman asli
reblogs: Reblog
status_changed: Kiriman diubah
- title: Status akun
+ title: Status akun - @%{name}
trending: Sedang tren
visibility: Visibilitas
with_media: Dengan media
diff --git a/config/locales/ie.yml b/config/locales/ie.yml
index 94c4b7f4f0..d7df83ef69 100644
--- a/config/locales/ie.yml
+++ b/config/locales/ie.yml
@@ -791,7 +791,7 @@ ie:
original_status: Original posta
reblogs: Boosts
status_changed: Posta modificat
- title: Postas del conto
+ title: Postas del conto - @%{name}
trending: Populari
visibility: Visibilitá
with_media: Con medie
diff --git a/config/locales/io.yml b/config/locales/io.yml
index 8ce5f3403b..1ff5d98bf2 100644
--- a/config/locales/io.yml
+++ b/config/locales/io.yml
@@ -779,7 +779,7 @@ io:
original_status: Originala posto
reblogs: Dissemi
status_changed: Posto chanjita
- title: Kontoposti
+ title: Kontoposti - @%{name}
trending: Populara
visibility: Videbleso
with_media: Kun medii
diff --git a/config/locales/is.yml b/config/locales/is.yml
index f181470e49..9ba29f2af0 100644
--- a/config/locales/is.yml
+++ b/config/locales/is.yml
@@ -187,6 +187,7 @@ is:
create_domain_block: Búa til útilokun léns
create_email_domain_block: Búa til útilokun tölvupóstléns
create_ip_block: Búa til IP-reglu
+ create_relay: Búa til endurvarpa
create_unavailable_domain: Útbúa lén sem ekki er tiltækt
create_user_role: Útbúa hlutverk
demote_user: Lækka notanda í tign
@@ -198,14 +199,17 @@ is:
destroy_email_domain_block: Eyða útilokun tölvupóstléns
destroy_instance: Henda léni
destroy_ip_block: Eyða IP-reglu
+ destroy_relay: Eyða endurvarpa
destroy_status: Eyða færslu
destroy_unavailable_domain: Eyða léni sem ekki er tiltækt
destroy_user_role: Eyða hlutverki
disable_2fa_user: Gera tveggja-þátta auðkenningu óvirka
disable_custom_emoji: Gera sérsniðið tjáningartákn óvirkt
+ disable_relay: Gera endurvarpa óvirkan
disable_sign_in_token_auth_user: Gera óvirka auðkenningu með teikni í tölvupósti fyrir notandann
disable_user: Gera notanda óvirkan
enable_custom_emoji: Virkja sérsniðið tjáningartákn
+ enable_relay: Virkja endurvarpa
enable_sign_in_token_auth_user: Gera virka auðkenningu með teikni í tölvupósti fyrir notandann
enable_user: Virkja notanda
memorialize_account: Gera aðgang að minningargrein
@@ -247,6 +251,7 @@ is:
create_domain_block_html: "%{name} útilokaði lénið %{target}"
create_email_domain_block_html: "%{name} útilokaði póstlénið %{target}"
create_ip_block_html: "%{name} útbjó reglu fyrir IP-vistfangið %{target}"
+ create_relay_html: "%{name} bjó til endurvarpa %{target}"
create_unavailable_domain_html: "%{name} stöðvaði afhendingu til lénsins %{target}"
create_user_role_html: "%{name} útbjó %{target} hlutverk"
demote_user_html: "%{name} lækkaði notandann %{target} í tign"
@@ -258,14 +263,17 @@ is:
destroy_email_domain_block_html: "%{name} aflétti útilokun af póstléninu %{target}"
destroy_instance_html: "%{name} henti léninu %{target}"
destroy_ip_block_html: "%{name} eyddi reglu fyrir IP-vistfangið %{target}"
+ destroy_relay_html: "%{name} eyddi endurvarpanum %{target}"
destroy_status_html: "%{name} fjarlægði færslu frá %{target}"
destroy_unavailable_domain_html: "%{name} hóf aftur afhendingu til lénsins %{target}"
destroy_user_role_html: "%{name} eyddi hlutverki %{target}"
disable_2fa_user_html: "%{name} gerði kröfu um tveggja-þátta innskráningu óvirka fyrir notandann %{target}"
disable_custom_emoji_html: "%{name} gerði tjáningartáknið %{target} óvirkt"
+ disable_relay_html: "%{name} gerði endurvarpann %{target} óvirkan"
disable_sign_in_token_auth_user_html: "%{name} gerði óvirka auðkenningu með teikni í tölvupósti fyrir %{target}"
disable_user_html: "%{name} gerði innskráningu óvirka fyrir notandann %{target}"
enable_custom_emoji_html: "%{name} gerði tjáningartáknið %{target} virkt"
+ enable_relay_html: "%{name} virkjaði endurvarpann %{target}"
enable_sign_in_token_auth_user_html: "%{name} gerði virka auðkenningu með teikni í tölvupósti fyrir %{target}"
enable_user_html: "%{name} gerði innskráningu virka fyrir notandann %{target}"
memorialize_account_html: "%{name} breytti notandaaðgangnum %{target} í minningargreinarsíðu"
@@ -835,7 +843,7 @@ is:
original_status: Upprunaleg færsla
reblogs: Endurbirtingar
status_changed: Færslu breytt
- title: Færslur notandaaðgangs
+ title: Færslur notandaaðgangs - @%{name}
trending: Vinsælt
visibility: Sýnileiki
with_media: Með myndefni
@@ -1170,9 +1178,11 @@ is:
use_security_key: Nota öryggislykil
author_attribution:
example_title: Sýnitexti
- hint_html: Stýrðu hvernig framlög þín birtast þegar tenglum er deilt á Mastodon.
+ hint_html: Ertu að skrifa fréttir eða bloggfærslur utan Mastodon? Stýrðu því hvernig vitnað er í þig þegar þeim er deilt á Mastodon.
+ instructions: 'Gakktu úr skugga um að þessi kóði sé í HTML greinarinnar þinnar:'
more_from_html: Meira frá %{name}
s_blog: Bloggsvæði hjá %{name}
+ then_instructions: Síðan skaltu bæta lénsheiti útgefandans í reitinn hér fyrir neðan.
title: Framlag höfundar
challenge:
confirm: Halda áfram
@@ -1370,6 +1380,44 @@ is:
merge_long: Halda fyrirliggjandi færslum og bæta við nýjum
overwrite: Skrifa yfir
overwrite_long: Skipta út fyrirliggjandi færslum með þeim nýju
+ overwrite_preambles:
+ blocking_html:
+ one: Þú er í þann mund að fara að skipta út útilokanalistanum þínum með allt að %{count} aðgangi úr %{filename}.
+ other: Þú er í þann mund að fara að skipta út útilokanalistanum þínum með allt að %{count} aðgöngum úr %{filename}.
+ bookmarks_html:
+ one: Þú er í þann mund að fara að skipta út bókamerkjunum þínum með allt að %{count} færslu úr %{filename}.
+ other: Þú er í þann mund að fara að skipta út bókamerkjunum þínum með allt að %{count} færslum úr %{filename}.
+ domain_blocking_html:
+ one: Þú er í þann mund að fara að skipta út listanum þínum yfir útilokuð lén með allt að %{count} léni úr %{filename}.
+ other: Þú er í þann mund að fara að skipta út listanum þínum yfir útilokuð lén með allt að %{count} lénum úr %{filename}.
+ following_html:
+ one: Þú er í þann mund að fara að fylgjast með allt að %{count} aðgangi úr %{filename} og hætta að fylgjast með öllum öðrum.
+ other: Þú er í þann mund að fara að fylgjast með allt að %{count} aðgöngum úr %{filename} og hætta að fylgjast með öllum öðrum.
+ lists_html:
+ one: Þú ert í þann mund að fara að skipta út listunum þínum með efninu úr %{filename}. Allt að %{count} aðgangi verður bætt við nýju listana.
+ other: Þú ert í þann mund að fara að skipta út listunum þínum með efninu úr %{filename}. Allt að %{count} aðgöngum verður bætt við nýju listana.
+ muting_html:
+ one: Þú er í þann mund að fara að skipta út listanum þínum yfir útilokaða aðganga með allt að %{count} aðgangi úr %{filename}.
+ other: Þú er í þann mund að fara að skipta út listanum þínum yfir útilokaða aðganga með allt að %{count} aðgöngum úr %{filename}.
+ preambles:
+ blocking_html:
+ one: Þú ert í þann mund að útiloka allt að %{count} aðgang úr %{filename}.
+ other: Þú ert í þann mund að útiloka allt að %{count} aðganga úr %{filename}.
+ bookmarks_html:
+ one: Þú er í þann mund að fara að bæta við allt að %{count} færslu úr %{filename} við bókamerkin þín.
+ other: Þú er í þann mund að fara að bæta við allt að %{count} færslum úr %{filename} við bókamerkin þín.
+ domain_blocking_html:
+ one: Þú ert í þann mund að útiloka allt að %{count} lén úr %{filename}.
+ other: Þú er í þann mund að fara að útiloka allt að %{count} lén úr %{filename}.
+ following_html:
+ one: Þú ert að fara að fylgjast með allt að %{count} aðgangi úr %{filename}.
+ other: Þú er að fara að fylgjast með allt að %{count} aðgöngum úr %{filename}.
+ lists_html:
+ one: Þú ert í þann mund að fara að bæta við allt að %{count} aðgangi úr %{filename} við listana þína. Nýir listar verða útbúnir ef ekki finnst neinn listi til að bæta í.
+ other: Þú ert í þann mund að fara að bæta við allt að %{count} aðgöngum úr %{filename} við listana þína. Nýir listar verða útbúnir ef ekki finnst neinn listi til að bæta í.
+ muting_html:
+ one: Þú ert að fara að þagga niður í allt að %{count} aðgangi úr %{filename}.
+ other: Þú ert að fara að þagga niður í allt að %{count} aðgöngum úr %{filename}.
preface: Þú getur flutt inn gögn sem þú hefur flutt út frá öðrum vefþjóni, svo sem lista yfir fólk sem þú fylgist með eða útilokar.
recent_imports: Nýlega flutt inn
states:
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 91b67c2b4d..08e224ad94 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -1,7 +1,7 @@
---
it:
about:
- about_mastodon_html: 'Il social network del futuro: Nessuna pubblicità, zero sorveglianza azienale, design etico e decentralizzazione! Sii il proprietario dei tuoi dati, con Mastodon!'
+ about_mastodon_html: 'Il social network del futuro: Nessuna pubblicità, zero sorveglianza aziendale, design etico e decentralizzazione! Sii il proprietario dei tuoi dati, con Mastodonte!'
contact_missing: Non impostato
contact_unavailable: N/D
hosted_on: Mastodon ospitato su %{domain}
@@ -21,6 +21,7 @@ it:
one: Toot
other: Toot
posts_tab_heading: Toot
+ self_follow_error: Seguire il tuo stesso profilo non è consentito
admin:
account_actions:
action: Esegui azione
@@ -832,7 +833,7 @@ it:
original_status: Post originale
reblogs: Condivisioni
status_changed: Post modificato
- title: Gli status dell'account
+ title: Gli status dell'account - @%{name}
trending: Di tendenza
visibility: Visibilità
with_media: con media
@@ -1167,9 +1168,11 @@ it:
use_security_key: Usa la chiave di sicurezza
author_attribution:
example_title: Testo di esempio
- hint_html: Controlla come sei viene accreditato quando i link sono condivisi su Mastodon.
+ hint_html: Stai scrivendo notizie o articoli di blog al di fuori di Mastodon? Controlla come vieni accreditato quando vengono condivisi su Mastodon.
+ instructions: 'Assicurati che questo codice sia presente nell''HTML del tuo articolo:'
more_from_html: Altro da %{name}
s_blog: Blog di %{name}
+ then_instructions: Quindi, aggiungi il nome di dominio della pubblicazione nel campo sottostante.
title: Attribuzione autore
challenge:
confirm: Continua
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index bda5b2d8f6..76152c3744 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -46,6 +46,7 @@ ja:
title: "%{username}さんのメールアドレスを変更"
change_role:
changed_msg: ロールを変更しました!
+ edit_roles: ユーザーのロールを管理
label: ロールを変更
no_role: ロールがありません
title: "%{username}さんのロールを変更"
@@ -232,22 +233,22 @@ ja:
approve_appeal_html: "%{name}さんが%{target}さんからの抗議を承認しました"
approve_user_html: "%{name}さんが%{target}さんからの登録を承認しました"
assigned_to_self_report_html: "%{name}さんが通報 %{target}を自身の担当に割り当てました"
- change_email_user_html: "%{name}さんが%{target}さんのメールアドレスを変更しました"
+ change_email_user_html: "%{name} さんが %{target} さんのメールアドレスを変更しました"
change_role_user_html: "%{name}さんが%{target}さんのロールを変更しました"
- confirm_user_html: "%{name}さんが%{target}さんのメールアドレスを確認済みにしました"
+ confirm_user_html: "%{name} さんが %{target} さんのメールアドレスを確認済みにしました"
create_account_warning_html: "%{name}さんが%{target}さんに警告メールを送信しました"
create_announcement_html: "%{name}さんが新しいお知らせ %{target}を作成しました"
- create_canonical_email_block_html: "%{name}さんがメールアドレス (ハッシュ値: %{target}) をブロックしました"
+ create_canonical_email_block_html: "%{name} さんがメールアドレスのハッシュ値 %{target} をブロックしました"
create_custom_emoji_html: "%{name}さんがカスタム絵文字 %{target}を追加しました"
create_domain_allow_html: "%{name}さんが%{target}の連合を許可しました"
create_domain_block_html: "%{name}さんがドメイン %{target}をブロックしました"
- create_email_domain_block_html: "%{name}さんがメールドメイン %{target} をブロックしました"
+ create_email_domain_block_html: "%{name} さんがメールドメイン %{target} をブロックしました"
create_ip_block_html: "%{name}さんがIP %{target}のルールを作成しました"
create_unavailable_domain_html: "%{name}がドメイン %{target}への配送を停止しました"
create_user_role_html: "%{name}さんがロール『%{target}』を作成しました"
demote_user_html: "%{name}さんが%{target}さんを降格しました"
destroy_announcement_html: "%{name}さんがお知らせ %{target}を削除しました"
- destroy_canonical_email_block_html: "%{name}さんがメールアドレス (ハッシュ値: %{target}) のブロックを外しました"
+ destroy_canonical_email_block_html: "%{name} さんがメールアドレスのハッシュ値 %{target} のブロックを外しました"
destroy_custom_emoji_html: "%{name}さんがカスタム絵文字『%{target}』を削除しました"
destroy_domain_allow_html: "%{name}さんが%{target}の連合許可を外しました"
destroy_domain_block_html: "%{name}さんがドメイン %{target}のブロックを外しました"
@@ -270,7 +271,7 @@ ja:
reject_user_html: "%{name}さんが%{target}さんからの登録を拒否しました"
remove_avatar_user_html: "%{name}さんが%{target}さんのアイコンを削除しました"
reopen_report_html: "%{name}さんが通報 %{target}を未解決に戻しました"
- resend_user_html: "%{name}さんが %{target} の確認メールを再送信しました"
+ resend_user_html: "%{name} さんが %{target} の確認メールを再送信しました"
reset_password_user_html: "%{name}さんが%{target}さんのパスワードをリセットしました"
resolve_report_html: "%{name}さんが通報 %{target}を解決済みにしました"
sensitive_account_html: "%{name}さんが%{target}さんのメディアを閲覧注意にマークしました"
@@ -285,7 +286,7 @@ ja:
update_custom_emoji_html: "%{name}さんがカスタム絵文字 %{target}を更新しました"
update_domain_block_html: "%{name}さんが%{target}のドメインブロックを更新しました"
update_ip_block_html: "%{name} さんがIP %{target} のルールを更新しました"
- update_report_html: "%{name}さんが通報 %{target} を更新しました"
+ update_report_html: "%{name} さんが通報 %{target} を更新しました"
update_status_html: "%{name}さんが%{target}さんの投稿を更新しました"
update_user_role_html: "%{name}さんがロール『%{target}』を変更しました"
deleted_account: 削除されたアカウント
@@ -818,7 +819,7 @@ ja:
original_status: オリジナルの投稿
reblogs: ブースト
status_changed: 投稿を変更しました
- title: 投稿一覧
+ title: 投稿一覧 - @%{name}
trending: トレンド
visibility: 公開範囲
with_media: メディアあり
@@ -861,6 +862,9 @@ ja:
message_html: サーバーのルールを定義していません。
sidekiq_process_check:
message_html: "%{value}キューに対応するSidekiqプロセスがありません。Sidekiqの設定を確認してください。"
+ software_version_check:
+ action: 利用可能な更新を確認
+ message_html: Mastodonの更新が利用可能です。
software_version_critical_check:
action: 利用可能な更新を見る
message_html: 緊急のMastodonアップデートがあります。速やかに適用してください。
@@ -1144,7 +1148,12 @@ ja:
use_security_key: セキュリティキーを使用
author_attribution:
example_title: サンプルテキスト
+ hint_html: Mastodonの外でニュースやブログなどを執筆しているユーザーは、Mastodonで自分の記事が共有されたときに著者情報を表示させることができます。
+ instructions: 以下のコードを自分の記事のHTMLに貼り付けます。
+ more_from_html: "%{name} のその他の情報"
s_blog: "%{name} のブログ"
+ then_instructions: その後、記事の公開に使用しているドメイン名を以下の入力欄に追加してください。
+ title: 著者の帰属
challenge:
confirm: 続ける
hint_html: 以後1時間はパスワードの再入力を求めません
@@ -1334,6 +1343,32 @@ ja:
merge_long: 現在のレコードを保持したまま新しいものを追加します
overwrite: 上書き
overwrite_long: 現在のレコードを新しいもので置き換えます
+ overwrite_preambles:
+ blocking_html:
+ other: あなたは%{filename}から最大%{count}のアカウントでブロックリストを置き換えようとしています。
+ bookmarks_html:
+ other: あなたは%{filename}から最大%{count}の投稿でブックマークを置き換えようとしています。
+ domain_blocking_html:
+ other: あなたは%{filename}から最大%{count}のドメインでドメインブロックリストを置き換えようとしています。
+ following_html:
+ other: あなたは%{filename}から最大%{count}のアカウントをフォローし、他のすべてのユーザーのフォローを解除します。
+ lists_html:
+ other: あなたは%{filename}の内容でリストを置き換えようとしています。最大%{count}のアカウントが新しいリストに追加されます。
+ muting_html:
+ other: あなたは%{filename}から最大%{count}のアカウントでミュートアカウントのリストを置き換えようとしています。
+ preambles:
+ blocking_html:
+ other: あなたは%{filename}から最大%{count}のアカウントをブロックしようとしています。
+ bookmarks_html:
+ other: あなたは%{filename}から最大%{count}の投稿をブックマークに追加しようとしています。
+ domain_blocking_html:
+ other: あなたは%{filename}から最大%{count}のドメインをブロックしようとしています。
+ following_html:
+ other: あなたは%{filename}から最大%{count}のアカウントをフォローしようとしています。
+ lists_html:
+ other: あなたは%{filename}から最大%{count}のアカウントをリストに追加しようとしています。追加するリストがない場合は新しいリストが作成されます。
+ muting_html:
+ other: あなたは%{filename}から最大%{count}のアカウントをミュートしようとしています。
preface: 他のサーバーでエクスポートされたファイルから、フォロー/ブロックした情報をこのサーバー上のアカウントにインポートできます。
recent_imports: 最近のインポート
states:
diff --git a/config/locales/ka.yml b/config/locales/ka.yml
index 2a0365fbf5..93f7a39dc3 100644
--- a/config/locales/ka.yml
+++ b/config/locales/ka.yml
@@ -190,7 +190,7 @@ ka:
media:
title: მედია
no_status_selected: სატუსები არ შეცვლილა, რადგან არცერთი არ მონიშნულა
- title: ანგარიშის სტატუსები
+ title: ანგარიშის სტატუსები - @%{name}
with_media: მედიით
title: ადმინისტრაცია
admin_mailer:
diff --git a/config/locales/kab.yml b/config/locales/kab.yml
index 993488f1fc..c74540cfbf 100644
--- a/config/locales/kab.yml
+++ b/config/locales/kab.yml
@@ -419,7 +419,7 @@ kab:
media:
title: Amidya
open: Ldi tasuffeɣt
- title: Tisuffaɣ n umiḍan
+ title: Tisuffaɣ n umiḍan - @%{name}
trending: Ayen mucaɛen
visibility: Abani
with_media: S umidya
diff --git a/config/locales/kk.yml b/config/locales/kk.yml
index 537104ba51..4b9cef245e 100644
--- a/config/locales/kk.yml
+++ b/config/locales/kk.yml
@@ -285,7 +285,7 @@ kk:
media:
title: Медиa
no_status_selected: Бірде-бір статус өзгерген жоқ, себебі ештеңе таңдалмады
- title: Аккаунт статустары
+ title: Аккаунт статустары - @%{name}
with_media: Медиамен
tags:
review: Статусты көрсету
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 595a4b047e..4aeb6e5186 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -184,6 +184,7 @@ ko:
create_domain_block: 도메인 차단 추가
create_email_domain_block: 이메일 도메인 차단 생성
create_ip_block: IP 규칙 만들기
+ create_relay: 릴레이 생성
create_unavailable_domain: 사용 불가능한 도메인 생성
create_user_role: 역할 생성
demote_user: 사용자 강등
@@ -193,16 +194,19 @@ ko:
destroy_domain_allow: 도메인 허용 삭제
destroy_domain_block: 도메인 차단 삭제
destroy_email_domain_block: 이메일 도메인 차단 삭제
- destroy_instance: 도메인 제거
+ destroy_instance: 도메인 퍼지하기
destroy_ip_block: IP 규칙 삭제
+ destroy_relay: 릴레이 삭제
destroy_status: 게시물 삭제
destroy_unavailable_domain: 사용 불가능한 도메인 제거
destroy_user_role: 역할 삭제
disable_2fa_user: 2단계 인증 비활성화
disable_custom_emoji: 커스텀 에모지 비활성화
+ disable_relay: 릴레이 비활성화
disable_sign_in_token_auth_user: 사용자의 이메일 토큰 인증 비활성화
disable_user: 사용자 비활성화
enable_custom_emoji: 커스텀 에모지 활성화
+ enable_relay: 릴레이 활성화
enable_sign_in_token_auth_user: 사용자의 이메일 토큰 인증 활성화
enable_user: 사용자 활성화
memorialize_account: 고인의 계정으로 전환
@@ -244,6 +248,7 @@ ko:
create_domain_block_html: "%{name} 님이 도메인 %{target}를 차단했습니다"
create_email_domain_block_html: "%{name} 님이 이메일 도메인 %{target}를 차단했습니다"
create_ip_block_html: "%{name} 님이 IP 규칙 %{target}을 만들었습니다"
+ create_relay_html: "%{name} 님이 릴레이 %{target}를 생성했습니다"
create_unavailable_domain_html: "%{name} 님이 도메인 %{target}에 대한 전달을 중지했습니다"
create_user_role_html: "%{name} 님이 %{target} 역할을 생성했습니다"
demote_user_html: "%{name} 님이 사용자 %{target} 님을 강등했습니다"
@@ -255,14 +260,17 @@ ko:
destroy_email_domain_block_html: "%{name} 님이 이메일 도메인 %{target}을 차단 해제하였습니다"
destroy_instance_html: "%{name} 님이 도메인 %{target}를 제거했습니다"
destroy_ip_block_html: "%{name} 님이 IP 규칙 %{target}을 삭제하였습니다"
+ destroy_relay_html: "%{name} 님이 릴레이 %{target}를 삭제했습니다"
destroy_status_html: "%{name} 님이 %{target} 님의 게시물을 삭제했습니다"
destroy_unavailable_domain_html: "%{name} 님이 도메인 %{target}에 대한 전달을 재개"
destroy_user_role_html: "%{name} 님이 %{target} 역할을 삭제했습니다"
disable_2fa_user_html: "%{name} 님이 사용자 %{target} 님의 2단계 인증을 비활성화 했습니다"
disable_custom_emoji_html: "%{name} 님이 에모지 %{target}를 비활성화했습니다"
+ disable_relay_html: "%{name} 님이 릴레이 %{target}를 비활성화했습니다"
disable_sign_in_token_auth_user_html: "%{name} 님이 %{target} 님의 이메일 토큰 인증을 비활성화했습니다"
disable_user_html: "%{name} 님이 사용자 %{target}의 로그인을 비활성화했습니다"
enable_custom_emoji_html: "%{name} 님이 에모지 %{target}를 활성화했습니다"
+ enable_relay_html: "%{name} 님이 릴레이 %{target}를 활성화했습니다"
enable_sign_in_token_auth_user_html: "%{name} 님이 %{target} 님의 이메일 토큰 인증을 활성화했습니다"
enable_user_html: "%{name} 님이 사용자 %{target}의 로그인을 활성화했습니다"
memorialize_account_html: "%{name} 님이 %{target}의 계정을 고인의 계정 페이지로 전환했습니다"
@@ -526,7 +534,7 @@ ko:
title: 중재
private_comment: 비공개 주석
public_comment: 공개 주석
- purge: 제거
+ purge: 퍼지
purge_description_html: 이 도메인이 영구적으로 오프라인 상태라고 생각되면, 스토리지에서 이 도메인의 모든 계정 레코드와 관련 데이터를 삭제할 수 있습니다. 이 작업은 시간이 좀 걸릴 수 있습니다.
title: 연합
total_blocked_by_us: 우리에게 차단 됨
@@ -821,7 +829,7 @@ ko:
original_status: 원본 게시물
reblogs: 리블로그
status_changed: 게시물 변경됨
- title: 계정 게시물
+ title: 계정 게시물 - @%{name}
trending: 유행 중
visibility: 공개 설정
with_media: 미디어 있음
@@ -1150,9 +1158,11 @@ ko:
use_security_key: 보안 키 사용
author_attribution:
example_title: 예시 텍스트
- hint_html: 링크가 마스토돈에 공유될 때 내가 어떻게 표시될 지를 제어합니다.
+ hint_html: 마스토돈 밖에서 뉴스나 블로그 글을 쓰시나요? 마스토돈에 공유되었을 때 어떻게 표시될지를 제어하세요.
+ instructions: '이 코드가 글의 HTML 안에 포함되는지 확인하세요:'
more_from_html: "%{name}의 게시물 더 보기"
s_blog: "%{name}의 블로그"
+ then_instructions: 그리고 발행처의 도메인 네임을 아래 입력란에 추가하세요.
title: 작성자 기여
challenge:
confirm: 계속
@@ -1707,7 +1717,7 @@ ko:
lost_followers: 잃은 팔로워
lost_follows: 잃은 팔로우
preamble: 내가 도메인을 차단하거나 중재진이 다른 서버를 정지하기로 결정했다면 내 팔로우와 팔로워를 잃게 됩니다. 그런 일이 일어났다면 그로 인해 단절된 관계들의 목록을 다운로드 받아 확인하고 다른 서버에서 불러올 수 있습니다.
- purged: 이 서버에 대한 정보는 관리자에 의해 삭제되었습니다.
+ purged: 이 서버의 정보는 관리자가 퍼지하였습니다.
type: 이벤트
statuses:
attached:
diff --git a/config/locales/ku.yml b/config/locales/ku.yml
index ddd214441c..54188d2514 100644
--- a/config/locales/ku.yml
+++ b/config/locales/ku.yml
@@ -720,7 +720,7 @@ ku:
original_status: Şandiyê resen
reblogs: Ji nû ve nivîsandin
status_changed: Şandî hate guhertin
- title: Şandiyên ajimêr
+ title: Şandiyên ajimêr - @%{name}
trending: Rojev
visibility: Xuyabarî
with_media: Bi medya yê re
diff --git a/config/locales/lad.yml b/config/locales/lad.yml
index 97fcf75180..3b33888c71 100644
--- a/config/locales/lad.yml
+++ b/config/locales/lad.yml
@@ -24,6 +24,7 @@ lad:
admin:
account_actions:
action: Realiza aksion
+ already_silenced: Este kuento ya tiene sido limitado.
already_suspended: Este kuento ya tiene sido suspendido.
title: Modera %{acct}
account_moderation_notes:
@@ -46,6 +47,7 @@ lad:
title: Troka la posta elektronika de %{username}
change_role:
changed_msg: Rolo trokado kon sukseso!
+ edit_roles: Administra reglas de utilizadores
label: Troka rolo
no_role: Sin rolo
title: Troka rolo para %{username}
@@ -595,6 +597,7 @@ lad:
resolve_description_html: No se tomaran aksyones kontra el kuento denunsiado, no se enrejistrara el amonestamiento, i se serrara el raporto.
silence_description_html: El profil sera vizivle solo para akeyos ke ya lo sigan o lo bushken manualmente, limitando seriamente su alkanse. Siempre puede ser revertido.
suspend_description_html: El profil i todos sus kontenidos seran inaksesivles asta ke sean enfin supremidos. La enteraksion kon el kuento sera emposivle. Reversivle durante un tiempo de 30 diyas.
+ actions_description_html: Dechide kualas mizuras tomar para rezolver esta denunsia. Si tomas una aksion punitiva kontra el kuento denunsiada, se le embiara a dicho kuento un avizo por posta elektronika, ekseptado kuando se eskoja la kategoria Spam.
actions_description_remote_html: Dechide ke fazer para rezolver este raporto. Esto solo va afektar komo tu sirvidor komunike kon este kuento remoto i ke faze kon su kontenido.
add_to_report: Adjusta mas al raporto
already_suspended_badges:
@@ -636,6 +639,7 @@ lad:
report: 'Raporta #%{id}'
reported_account: Kuento raportado
reported_by: Raportado por
+ reported_with_application: Raportado kon aplikasyon
resolved: Rezolvido
resolved_msg: Tienes rezolvido la denunsia djustamente!
skip_to_actions: Va direktamente a las aksyones
@@ -697,6 +701,7 @@ lad:
manage_appeals: Administra apelasiones
manage_appeals_description: Permete a los utilizadores revizar apelasiones kontra aksyones de moderasyon
manage_blocks: Administra blokos
+ manage_blocks_description: Permete a los utilizadores blokar los prokuradores de posta elektronika i los adresos IP
manage_custom_emojis: Administra emojis personalizados
manage_custom_emojis_description: Permete a los utilizadores editar emojis personalizados en el sirvidor
manage_federation: Administra federasyon
@@ -714,6 +719,7 @@ lad:
manage_taxonomies: Administra etiketas
manage_taxonomies_description: Permete a los utilizadores revizar el kontenido en trend i aktualizar la konfigurasyon de las etiketas
manage_user_access: Administra akseso de utilizadores
+ manage_user_access_description: Permete a los utilizadores dezaktivar la autentifikasyon en dos pasos de otros utilizadores, trokar sus adreso de posta elektronika i restableser sus kod
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
@@ -748,6 +754,7 @@ lad:
desc_html: Esto se baza en eskriptos eksternos de hCaptcha, ke pueden ser una influensya negra a la sigurita i privasita. Ademas, esto puede rezultar en un proseso de enrejistrasyon signifikativamente manko aksesivle para algunas personas (espesyalmente diskapasitadas). Por estas razones, por favor, konsidera otras alternativas komo rejistrasyon por aprovasyon manuala o kon envitasyon.
title: Solisita ke los muevos utilizadores rezolven un CAPTCHA para konfirmar su konto
content_retention:
+ danger_zone: Zona de perikolo
preamble: Kontrola komo el kontenido jenerado por el utilizador se magazina en Mastodon.
title: Retensyon de kontenido
default_noindex:
@@ -787,6 +794,7 @@ lad:
destroyed_msg: Dosya supremida kon sukseso!
software_updates:
critical_update: Kritiko – por favor aktualiza pishin
+ description: Rekomendamos ke mantengas aktualizada tu enstalasyon de Mastodon para benefisyar de las muevas koreksyones y funksyones. Ademas, a vezes es kritiko aktualizar Mastodon punktualmente para evitar problemas de sigurita. Por estas razones, Mastodon komprova si ay aktualizasyones kada 30 minutos, i te avizara de akodro a tus preferensyas de avizos por posta elektronika.
documentation_link: Ambezate mas
release_notes: Notas sovre la versyon
title: Aktualizasyones desponivles
@@ -817,7 +825,7 @@ lad:
original_status: Publikasyon orijinala
reblogs: Repartajasyones
status_changed: Publikasyon trokada
- title: Publikasyones del kuento
+ title: Publikasyones del kuento - @%{name}
trending: Trendes
visibility: Vizivilita
with_media: Kon multimedia
@@ -860,6 +868,9 @@ lad:
message_html: No tienes definido dinguna regla del sirvidor.
sidekiq_process_check:
message_html: No ay dingun prosedura Sidekiq en egzekusion para la(s) kola(s) %{value}. Por favor, reviza tu konfigurasyon de Sidekiq
+ software_version_check:
+ action: Amostra aktualizasyones desponivles
+ message_html: Una aktualizasyon de Mastodon esta desponivle.
software_version_critical_check:
action: Amostra aktualizasyones desponivles
message_html: Una aktualizasyon kritika de Mastodon esta desponivle. Por favor aktualiza pishin.
@@ -874,12 +885,18 @@ lad:
message_html: "Tu magazinaje de objektos es mal konfigurado. La privasita de tus utilizadores esta en riziko."
tags:
moderation:
+ not_trendable: No trendavle
+ not_usable: No uzavle
pending_review: Revizion esta asperando
+ reviewed: Revizado
title: Estado
+ trendable: Trendavle
+ unreviewed: No revizado
usable: Uzavle
name: Nombre
newest: Mas muevos
oldest: Mas viejos
+ open: Ve puvlikamente
reset: Reinisya
review: Estado de revizion
search: Bushka
@@ -948,6 +965,7 @@ lad:
used_by_over_week:
one: Uzada por una persona durante la ultima semana
other: Uzada por %{count} personas durante la ultima semana
+ title: Rekomendasyones i trendes
trending: En trend
warning_presets:
add_new: Adjusta muevo
@@ -1118,6 +1136,7 @@ lad:
title: Kriya kuento de Mastodon en %{domain}.
status:
account_status: Estado del kuento
+ confirming: Bekleando konfirmasyon de posta elektronika.
functional: Tu kuento esta kompletamente funksyonal.
pending: Tu solisitasyon esta asperando la revizion por muestros administradores. Esto puede tadrar algun tiempo. Arisiviras una posta elektronika si la solisitasyon sea achetada.
redirecting_to: Tu kuento se topa inaktivo porke esta siendo readresado a %{acct}.
@@ -1126,7 +1145,9 @@ lad:
too_fast: Formulario enviado demaziado rapido, aprovalo de muevo.
use_security_key: Uza la yave de sigurita
author_attribution:
+ example_title: Teksto de enshemplo
more_from_html: Mas de %{name}
+ s_blog: Blog de %{name}
challenge:
confirm: Kontinua
hint_html: "Konsejo: No retornaremos a demandarte por el kod durante la sigiente ora."
@@ -1638,6 +1659,7 @@ lad:
delete: Efasa kuento
development: Dezvelopamiento
edit_profile: Edita profil
+ export: Eksporto
featured_tags: Etiketas avaliadas
import: Importo
import_and_export: Importo i eksporto
@@ -1876,6 +1898,7 @@ lad:
instructions_html: Kopia i apega este kodiche en el HTML de tu sitio web. Estonses, adjusta el adreso de tu sitio web en uno de los kutis adisyonales de tu profil dizde la seksyon "Edita profil" i guadra los trokamyentos.
verification: Verifikasyon
verified_links: Tus atadijos verifikados
+ website_verification: Verifikasyon de sityo web
webauthn_credentials:
add: Adjusta mueva yave de sigurita
create:
diff --git a/config/locales/lt.yml b/config/locales/lt.yml
index 3b63ba6dcf..3519cb5b32 100644
--- a/config/locales/lt.yml
+++ b/config/locales/lt.yml
@@ -185,6 +185,7 @@ lt:
create_domain_allow: Kurti domeno leidimą
create_domain_block: Kurti domeno bloką
create_ip_block: Kurti IP taisyklę
+ create_relay: Kurti perdavimą
create_unavailable_domain: Kurti nepasiekiamą domeną
create_user_role: Kurti vaidmenį
demote_user: Pažeminti naudotoją
@@ -194,13 +195,16 @@ lt:
destroy_domain_block: Ištrinti domeno bloką
destroy_instance: Išvalyti domeną
destroy_ip_block: Ištrinti IP taisyklę
+ destroy_relay: Ištrinti perdavimą
destroy_status: Ištrinti įrašą
destroy_unavailable_domain: Ištrinti nepasiekiamą domeną
destroy_user_role: Sunaikinti vaidmenį
disable_2fa_user: Išjungti 2FA
disable_custom_emoji: Išjungti pasirinktinį jaustuką
+ disable_relay: Išjungti perdavimą
disable_user: Išjungti naudotoją
enable_custom_emoji: Įjungti pasirinktinį jaustuką
+ enable_relay: Įjungti perdavimą
enable_user: Įjungti naudotoją
memorialize_account: Memorializuoti paskyrą
promote_user: Paaukštinti naudotoją
@@ -237,6 +241,7 @@ lt:
create_domain_allow_html: "%{name} leido federaciją su domenu %{target}"
create_domain_block_html: "%{name} užblokavo domeną %{target}"
create_ip_block_html: "%{name} sukūrė taisyklę IP %{target}"
+ create_relay_html: "%{name} sukūrė perdavimą %{target}"
create_unavailable_domain_html: "%{name} sustabdė tiekimą į domeną %{target}"
create_user_role_html: "%{name} sukūrė %{target} vaidmenį"
demote_user_html: "%{name} pažemino naudotoją %{target}"
@@ -246,13 +251,16 @@ lt:
destroy_domain_block_html: "%{name} atblokavo domeną %{target}"
destroy_instance_html: "%{name} išvalė domeną %{target}"
destroy_ip_block_html: "%{name} ištrynė taisyklę IP %{target}"
+ destroy_relay_html: "%{name} ištrynė perdavimą %{target}"
destroy_status_html: "%{name} pašalino įrašą %{target}"
destroy_unavailable_domain_html: "%{name} pratęsė tiekimą į domeną %{target}"
destroy_user_role_html: "%{name} ištrynė %{target} vaidmenį"
disable_2fa_user_html: "%{name} išjungė dviejų veiksnių reikalavimą naudotojui %{target}"
disable_custom_emoji_html: "%{name} išjungė jaustuką %{target}"
+ disable_relay_html: "%{name} išjungė perdavimą %{target}"
disable_user_html: "%{name} išjungė prisijungimą naudotojui %{target}"
enable_custom_emoji_html: "%{name} įjungė jaustuką %{target}"
+ enable_relay_html: "%{name} įjungė perdavimą %{target}"
enable_user_html: "%{name} įjungė prisijungimą naudotojui %{target}"
memorialize_account_html: "%{name} pavertė %{target} paskyrą į atminimo puslapį"
promote_user_html: "%{name} paaukštino naudotoją %{target}"
@@ -593,7 +601,7 @@ lt:
no_status_selected: Jokie įrašai nebuvo pakeisti, nes nė vienas buvo pasirinktas
open: Atidaryti įrašą
original_status: Originalus įrašas
- title: Paskyros statusai
+ title: Paskyros statusai - @%{name}
trending: Tendencinga
with_media: Su medija
system_checks:
@@ -817,9 +825,11 @@ lt:
view_strikes: Peržiūrėti ankstesnius savo paskyros pažeidimus
author_attribution:
example_title: Teksto pavyzdys
- hint_html: Valdyk, kaip esi nurodomas (-a), kai nuorodos bendrinamos platformoje „Mastodon“.
+ hint_html: Ar rašote naujienas ar tinklaraščio straipsnius už „Mastodon“ ribų? Valdykite, kaip būsite nurodomi, kai jais bus bendrinama platformoje „Mastodon“.
+ instructions: 'Įsitikinkite, kad šis kodas yra jūsų straipsnio HTML:'
more_from_html: Daugiau iš %{name}
s_blog: "%{name} tinklaraštis"
+ then_instructions: Tada toliau esančiame lauke įrašykite leidinio domeno vardą.
title: Autoriaus (-ės) atribucija
challenge:
hint_html: "Patarimas: artimiausią valandą daugiau neprašysime tavo slaptažodžio."
diff --git a/config/locales/lv.yml b/config/locales/lv.yml
index 5f90b575e7..33b357b837 100644
--- a/config/locales/lv.yml
+++ b/config/locales/lv.yml
@@ -23,16 +23,17 @@ lv:
other: Ziņas
zero: Ziņu
posts_tab_heading: Ziņas
+ self_follow_error: Nav ļauts sekot savam kontam
admin:
account_actions:
action: Veikt darbību
already_silenced: Šis konts jau ir ierobežots.
already_suspended: Šis konts jau ir aizturēts.
- title: Veikt moderācijas darbību %{acct}
+ title: Veikt satura pārraudzības darbību %{acct}
account_moderation_notes:
create: Atstāt piezīmi
- created_msg: Moderācijas piezīme ir veiksmīgi izveidota!
- destroyed_msg: Moderācijas piezīme ir veiksmīgi iznīcināta!
+ created_msg: Satura pārraudzības piezīme ir veiksmīgi izveidota.
+ destroyed_msg: Satura pārraudzības piezīme ir veiksmīgi iznīcināta.
accounts:
add_email_domain_block: Liegt e-pasta domēnu
approve: Apstiprināt
@@ -95,12 +96,12 @@ lv:
moderation:
active: Aktīvie
all: Visi
- disabled: Atspējots
+ disabled: Atspējota
pending: Gaida
- silenced: Ierobežotie
- suspended: Apturētie
- title: Moderācija
- moderation_notes: Moderācijas piezīmes
+ silenced: Ierobežoti
+ suspended: Apturēti
+ title: Satura pārraudzība
+ moderation_notes: Satura pārraudzības piezīmes
most_recent_activity: Pati pēdējā darbība
most_recent_ip: Pati pēdējā IP
no_account_selected: Neviens konts netika mainīts, jo neviens netika atlasīts
@@ -205,8 +206,10 @@ lv:
destroy_user_role: Iznīcināt lomu
disable_2fa_user: Atspējot 2FA
disable_custom_emoji: Atspējot pielāgotu emocijzīmi
+ disable_sign_in_token_auth_user: Atspējot autentificēšanos ar e-pasta pilnvaru lietotājam
disable_user: Atspējot Lietotāju
enable_custom_emoji: Iespējot pielāgotu emocijzīmi
+ enable_sign_in_token_auth_user: Iespējot autentificēšanos ar e-pasta pilnvaru lietotājam
enable_user: Ieslēgt Lietotāju
memorialize_account: Saglabāt Kontu Piemiņai
promote_user: Izceltt Lietotāju
@@ -233,7 +236,7 @@ lv:
update_status: Atjaunināt ziņu
update_user_role: Atjaunināt lomu
actions:
- approve_appeal_html: "%{name} apstiprināja moderācijas lēmuma apelāciju no %{target}"
+ approve_appeal_html: "%{name} apstiprināja satura pārraudzības lēmuma iebildumu no %{target}"
approve_user_html: "%{name} apstiprināja reģistrēšanos no %{target}"
assigned_to_self_report_html: "%{name} piešķīra pārskatu %{target} sev"
change_email_user_html: "%{name} nomainīja lietotāja %{target} e-pasta adresi"
@@ -264,7 +267,7 @@ lv:
enable_user_html: "%{name} iespējoja pieteikšanos lietotājam %{target}"
memorialize_account_html: "%{name} pārvērta %{target} kontu par atmiņas lapu"
promote_user_html: "%{name} paaugstināja lietotāju %{target}"
- reject_appeal_html: "%{name} noraidīja moderācijas lēmuma apelāciju no %{target}"
+ reject_appeal_html: "%{name} noraidīja satura pārraudzības lēmuma iebildumu no %{target}"
reject_user_html: "%{name} noraidīja reģistrēšanos no %{target}"
remove_avatar_user_html: "%{name} noņēma %{target} profila attēlu"
reopen_report_html: "%{name} atkārtoti atvēra ziņojumu %{target}"
@@ -290,7 +293,7 @@ lv:
empty: Žurnāli nav atrasti.
filter_by_action: Filtrēt pēc darbības
filter_by_user: Filtrēt pēc lietotāja
- title: Auditācijas pieraksti
+ title: Audita žurnāls
unavailable_instance: "(domēna vārds nav pieejams)"
announcements:
destroyed_msg: Paziņojums ir veiksmīgi izdzēsts!
@@ -359,9 +362,9 @@ lv:
other: "%{count}ziņojumi gaida"
zero: "%{count}ziņojumi gaida"
pending_tags_html:
- one: "%{count}tēmturis gaida"
- other: "%{count}tēmturi gaida"
- zero: "%{count}tēmturi gaida"
+ one: "%{count} tēmturis rindā"
+ other: "%{count} tēmturi rindā"
+ zero: "%{count} tēmturu rindā"
pending_users_html:
one: "%{count}lietotājs gaida"
other: "%{count}lietotāji gaida"
@@ -406,7 +409,7 @@ lv:
import: Importēt
new:
create: Izveodot bloku
- hint: Domēna bloķēšana netraucēs izveidot kontu ierakstus datu bāzē, bet ar atpakaļejošu datumu un automātiski tiks piemērotas noteiktas moderēšanas metodes šajos kontos.
+ hint: Domēna aizturēšana netraucēs izveidot kontu ierakstus datubāzē, bet šajos kontos ar atpakaļejošu datumu un automātiski tiks piemērotas noteikti satura pārraudzības veidi.
severity:
desc_html: "Ierobežojums padarīs ziņas no šī domēna kontiem neredzamas ikvienam, kas tiem neseko. Apturēšana no tava servera noņems visu šī domēna kontu saturu, multividi un profila datus. Izmanto Nav, ja vēlies vienkārši noraidīt multivides failus."
noop: Neviens
@@ -444,6 +447,7 @@ lv:
resolve: Atrisināt domēnu
not_permitted: Nav atļauta
resolved_through_html: Atrisināts, izmantojot %{domain}
+ title: Bloķētie e-pasta domēni
export_domain_allows:
new:
title: Importēt domēnu atļaujas
@@ -529,7 +533,7 @@ lv:
moderation:
all: Visas
limited: Ierobežotās
- title: Moderācija
+ title: Satura pārraudzība
private_comment: Privāts komentārs
public_comment: Publisks komentārs
purge: Iztīrīt
@@ -592,7 +596,7 @@ lv:
one: "%{count} piezīme"
other: "%{count} piezīmes"
zero: "%{count} piezīmju"
- action_log: Auditācijas pieraksti
+ action_log: Audita žurnāls
action_taken_by: Veiktā darbība
actions:
delete_description_html: Raksti, par kurām ziņots, tiks dzēsti, un tiks reģistrēts brīdinājums, lai palīdzētu tev izvērst turpmākos pārkāpumus saistībā ar to pašu kontu.
@@ -616,7 +620,7 @@ lv:
none: Neviens
comment_description_html: 'Lai sniegtu vairāk informācijas, %{name} rakstīja:'
confirm: Apstiprināt
- confirm_action: Apstipriniet regulēšanas darbību pret @%{acct}
+ confirm_action: Apstiprināt satura pārraudzības darbību pret @%{acct}
created_at: Ziņoti
delete_and_resolve: Izdzēst rakstus
forwarded: Pārsūtīti
@@ -664,7 +668,7 @@ lv:
delete_data_html: Dzēsiet lietotāja @%{acct} profilu un saturu pēc 30 dienām, ja vien to darbība pa šo laiku netiks atcelta
preview_preamble_html: "@%{acct} saņems brīdinājumu ar šādu saturu:"
record_strike_html: Ierakstiet brīdinājumu pret @%{acct}, lai palīdzētu jums izvērst turpmākus pārkāpumus no šī konta
- warning_placeholder: Izvēles papildu pamatojums regulēšanas darbībai.
+ warning_placeholder: Izvēles papildu pamatojums satura pārraudzības darbībai.
target_origin: Ziņotā konta izcelsme
title: Ziņojumi
unassign: Atsaukt
@@ -679,10 +683,10 @@ lv:
other: "%{count} lietotāji"
zero: "%{count} lietotāju"
categories:
- administration: Administrēšana
+ administration: Pārvaldība
devops: DevOps
invites: Uzaicinājumi
- moderation: Moderācija
+ moderation: Satura pārraudzība
special: Īpašās
delete: Dzēst
description_html: Izmantojot lietotāju lomas, vari pielāgot, kurām Mastodon funkcijām un apgabaliem var piekļūt tavi lietotāji.
@@ -703,7 +707,7 @@ lv:
manage_announcements: Pārvaldīt Paziņojumus
manage_announcements_description: Ļauj lietotājiem pārvaldīt paziņojumus serverī
manage_appeals: Pārvaldīt Pārsūdzības
- manage_appeals_description: Ļauj lietotājiem izskatīt apelācijas pret regulēšanas darbībām
+ manage_appeals_description: Ļauj lietotājiem pārskatīt iebildumus pret satura pārraudzības darbībām
manage_blocks: Pārvaldīt Bloķus
manage_custom_emojis: Pārvaldīt Pielāgotās Emocijzīmes
manage_custom_emojis_description: Ļauj lietotājiem pārvaldīt pielāgotās emocijzīmes serverī
@@ -712,7 +716,7 @@ lv:
manage_invites: Pārvaldīt Uzaicinājumus
manage_invites_description: Ļauj lietotājiem pārlūkot un deaktivizēt uzaicinājuma saites
manage_reports: Pārvaldīt Pārskatus
- manage_reports_description: Ļauj lietotājiem pārskatīt pārskatus un veikt pret tiem regulēšanas darbības
+ manage_reports_description: Ļauj lietotājiem pārskatīt ziņojumus un veikt pret tiem satura pārraudzības darbības
manage_roles: Pārvaldīt Lomas
manage_roles_description: Ļauj lietotājiem pārvaldīt un piešķirt lomas, kas ir zemākas par viņu lomu
manage_rules: Pārvaldīt Noteikumus
@@ -720,10 +724,10 @@ lv:
manage_settings: Pārvaldīt Iestatījumus
manage_settings_description: Ļauj lietotājiem mainīt vietnes iestatījumus
manage_taxonomies: Pārvaldīt Taksonomijas
- manage_taxonomies_description: Ļauj lietotājiem pārskatīt aktuālāko saturu un atjaunināt atsauces iestatījumus
+ manage_taxonomies_description: Ļauj lietotājiem pārskatīt aktuālāko saturu un atjaunināt tēmturu iestatījumus
manage_user_access: Pārvaldīt Lietotāju Piekļuves
manage_users: Pārvaldīt Lietotājus
- manage_users_description: Ļauj lietotājiem skatīt citu lietotāju informāciju un veikt pret viņiem regulēšanas darbības
+ manage_users_description: Ļauj lietotājiem skatīt citu lietotāju informāciju un veikt pret viņiem satura pārraudzības darbības
manage_webhooks: Pārvaldīt Tīmekļa Aizķeres
manage_webhooks_description: Ļauj lietotājiem iestatīt tīmekļa aizķeres administratīviem pasākumiem
view_audit_log: Skatīt Audita Žurnālu
@@ -776,6 +780,7 @@ lv:
disabled: Nevienam
users: Vietējiem reģistrētiem lietotājiem
registrations:
+ moderation_recommandation: Lūgums nodrošināt, ka Tev ir pieņemama un atsaucīga satura pārraudzības komanda, pirms padari reģistrēšanos visiem pieejamu.
preamble: Kontrolē, kurš var izveidot kontu tavā serverī.
title: Reģistrācijas
registrations_mode:
@@ -783,6 +788,7 @@ lv:
approved: Reģistrācijai nepieciešams apstiprinājums
none: Neviens nevar reģistrēties
open: Jebkurš var reģistrēties
+ warning_hint: Mēs iesakām izmantot "Nepieciešams reģistrēšanās apstiprinājums", izņemot, ja esi pārliecināts, ka Tava satura pārraudzības komanda var laicīgi apstrādāt mēstules un ļaunprātīgas reģistrācijas.
security:
authorized_fetch: Pieprasīt autentifikāciju no federētajiem serveriem
authorized_fetch_hint: Pieprasot autentifikāciju no federētajiem serveriem, tiek nodrošināta stingrāka gan lietotāja līmeņa, gan servera līmeņa bloku izpilde. Tomēr tas ir saistīts ar izpildes sodu, samazina tavu atbilžu sasniedzamību un var radīt saderības problēmas ar dažiem federētajiem pakalpojumiem. Turklāt tas netraucēs īpašiem dalībniekiem ienest tavas publiskās ziņas un kontus.
@@ -824,7 +830,7 @@ lv:
original_status: Oriģinālā ziņa
reblogs: Reblogi
status_changed: Ziņa mainīta
- title: Konta ziņas
+ title: Konta ziņas - @%{name}
trending: Aktuāli
visibility: Redzamība
with_media: Ar multividi
@@ -867,6 +873,9 @@ lv:
message_html: Tu neesi definējis nevienu servera nosacījumu.
sidekiq_process_check:
message_html: Rindā(s) %{value} nedarbojas neviens Sidekiq process. Lūdzu, pārskati savu Sidekiq konfigurāciju
+ software_version_check:
+ action: Skatīt pieejamos atjauninājumus
+ message_html: Pieejams Mastodon atjauninājums.
software_version_critical_check:
action: Skatīt pieejamos atjauninājumus
message_html: Ir pieejams kritisks Mastodon atjauninājums. Lūdzu, atjaunini to pēc iespējas ātrāk.
@@ -886,6 +895,8 @@ lv:
review_requested: Pieprasīta pārskatīšana
reviewed: Pārskatīts
title: Stāvoklis
+ unreviewed: Nepārskatīts
+ usable: Izmantojams
name: Nosaukums
newest: Jaunākie
oldest: Vecākie
@@ -894,7 +905,7 @@ lv:
search: Meklēt
title: Tēmturi
updated_msg: Tēmtura iestatījumi ir veiksmīgi atjaunināti
- title: Administrēšana
+ title: Pārvaldība
trends:
allow: Atļaut
approved: Apstiprināts
@@ -998,9 +1009,9 @@ lv:
sensitive: lai atzīmētu viņu kontu kā sensitīvu
silence: lai ierobežotu viņu kontu
suspend: lai apturētu viņu kontu
- body: "%{target} pārsūdzēja %{action_taken_by} moderēšanas lēmumu no %{date}, kas bija %{type}. Viņi rakstīja:"
- next_steps: Varat apstiprināt apelāciju, lai atsauktu regulēšanas lēmumu, vai ignorēt to.
- subject: "%{username} pārsūdz moderēšanas lēmumu par %{instance}"
+ body: "%{target} iebilst %{action_taken_by} satura pārraudzības lēmumam no %{date}, kas bija %{type}. Viņi rakstīja:"
+ next_steps: Vari apstiprināt iebildumu, lai atsauktu satura pārraudzības lēmumu, vai neņemt to vērā.
+ subject: "%{username} iebilst satura pārraudzības lēmumam par %{instance}"
new_critical_software_updates:
body: Ir izlaistas jaunas Mastodon svarīgās versijas, iespējams, vēlēsies to atjaunināt pēc iespējas ātrāk!
subject: "%{instance} ir pieejami svarīgi Mastodon atjauninājumi!"
@@ -1122,7 +1133,7 @@ lv:
title: Pārbaudi savu iesūtni
sign_in:
preamble_html: Jāpiesakās ar saviem %{domain} piekļuves datiem. Ja konts tiek mitināts citā serverī, šeit nevarēs pieteikties.
- title: Pierakstīties %{domain}
+ title: Pieteikties %{domain}
sign_up:
manual_review: Reģistrācijas domēnā %{domain} manuāli pārbauda mūsu moderatori. Lai palīdzētu mums apstrādāt tavu reģistrāciju, uzraksti mazliet par sevi un to, kāpēc vēlies kontu %{domain}.
preamble: Ar kontu šajā Mastodon serverī varēsi sekot jebkuram citam tīklā esošam cilvēkam neatkarīgi no tā, kur tiek mitināts viņa konts.
@@ -1408,13 +1419,20 @@ lv:
webauthn: drošības atslēgas
description_html: Ja pamani darbības, kuras neatpazīsti, jāapsver iespēja nomainīt savu paroli un iespējot divpakāpju autentifikāciju.
empty: Nav pieejama autentifikācijas vēsture
- failed_sign_in_html: Neizdevies pierakstīšanās mēģinājums ar %{method} no %{ip} (%{browser})
- successful_sign_in_html: Veiksmīga pierakstīšanās ar %{method} no %{ip} (%{browser})
+ failed_sign_in_html: Neizdevies pieteikšanās mēģinājums ar %{method} no %{ip} (%{browser})
+ successful_sign_in_html: Veiksmīga pieteikšanās ar %{method} no %{ip} (%{browser})
title: Autentifikācijas vēsture
mail_subscriptions:
unsubscribe:
action: Jā, atcelt abonēšanu
complete: Anulēts
+ emails:
+ notification_emails:
+ favourite: izlases paziņojumu e-pasta ziņojumi
+ follow: sekošanas paziņojumu e-pasta ziņojumi
+ follow_request: sekošanas pieprasījumu e-pasta ziņojumi
+ mention: pieminēšanas paziņojumu e-pasta ziņojumi
+ reblog: pastiprinājumu paziņojumu e-pasta ziņojumi
title: Atcelt abonēšanu
media_attachments:
validations:
@@ -1453,7 +1471,7 @@ lv:
other_data: Nekādi citi dati netiks automātiski pārvietoti
redirect: Tava pašreizējā konta profils tiks atjaunināts ar novirzīšanas paziņojumu un tiks izslēgts no meklēšanas
moderation:
- title: Moderācija
+ title: Satura pārraudzība
move_handler:
carry_blocks_over_text: Šis lietotājs pārcēlās no %{acct}, kuru tu biji bloķējis.
carry_mutes_over_text: Šis lietotājs pārcēlās no %{acct}, kuru tu biji apklusinājis.
@@ -1495,6 +1513,7 @@ lv:
update:
subject: "%{name} laboja ierakstu"
notifications:
+ administration_emails: Pārvaldītāju e-pasta paziņojumi
email_events_hint: 'Atlasi notikumus, par kuriem vēlies saņemt paziņojumus:'
number:
human:
@@ -1543,7 +1562,7 @@ lv:
reach: Sasniedzamība
reach_hint_html: Kontrolē, vai vēlies, lai tevi atklātu un sekotu jauni cilvēki. Vai vēlies, lai tavas ziņas tiktu parādītas ekrānā Izpēte? Vai vēlies, lai citi cilvēki tevi redzētu savos ieteikumos? Vai vēlies automātiski pieņemt visus jaunos sekotājus vai arī tev ir pilnīga kontrole pār katru?
search: Meklēt
- search_hint_html: Kontrolē, kā vēlies tikt atrasts. Vai vēlies, lai cilvēki tevi atrod pēc tā, ko esi publiski publicējis? Vai vēlies, lai cilvēki ārpus Mastodon atrastu tavu profilu, meklējot tīmeklī? Lūdzu, ņem vērā, ka nevar garantēt publiskas informācijas pilnīgu izslēgšanu no visām meklētājprogrammām.
+ search_hint_html: Nosaki, kā vēlies tikt atrasts! Vai vēlies, lai cilvēki Tevi atrod pēc tā, par ko esi veicis visiem redzamus ierakstus? Vai vēlies, lai cilvēki ārpus Mastodon atrastu Tavu profilu, meklējot tīmeklī? Lūdzu, ņem vērā, ka nevar nodrošināt visiem redzamas informācijas pilnīgu izslēgšanu no visām meklētājiem!
title: Privātums un sasniedzamība
privacy_policy:
title: Privātuma Politika
@@ -1580,8 +1599,8 @@ lv:
rss:
content_warning: 'Satura brīdinājums:'
descriptions:
- account: Publiskas ziņas no @%{acct}
- tag: 'Publiskas ziņas ar atzīmi #%{hashtag}'
+ account: Visiem redzami ieraksti no @%{acct}
+ tag: 'Visiem redzami ieraksti ar tēmturi #%{hashtag}'
scheduled_statuses:
over_daily_limit: Tu esi pārsniedzis šodien ieplānoto %{limit} ziņu ierobežojumu
over_total_limit: Tu esi pārsniedzis ieplānoto %{limit} ziņu ierobežojumu
@@ -1645,6 +1664,7 @@ lv:
delete: Konta dzēšana
development: Izstrāde
edit_profile: Labot profilu
+ export: Izgūt
featured_tags: Piedāvātie tēmturi
import: Imports
import_and_export: Imports un eksports
@@ -1655,11 +1675,13 @@ lv:
relationships: Sekojamie un sekotāji
severed_relationships: Pārtrauktās attiecības
statuses_cleanup: Automātiska ziņu dzēšana
- strikes: Moderācijas aizrādījumi
+ strikes: Satura pārraudzības aizrādījumi
two_factor_authentication: Divpakāpju autentifikācija
webauthn_authentication: Drošības atslēgas
severed_relationships:
download: Lejupielādēt (%{count})
+ event_type:
+ user_domain_block: Jūs bloķējāt %{target_name}
lost_followers: Zaudētie sekotāji
lost_follows: Zaudētie sekojumi
type: Notikums
@@ -1684,7 +1706,7 @@ lv:
disallowed_hashtags:
one: 'saturēja neatļautu tēmturi: %{tags}'
other: 'saturēja neatļautus tēmturus: %{tags}'
- zero: 'neatļauti tēmturi: %{tags}'
+ zero: 'saturēja neatļautus tēmturus: %{tags}'
edited_at_html: Labots %{date}
errors:
in_reply_not_found: Šķiet, ka ziņa, uz kuru tu mēģini atbildēt, nepastāv.
@@ -1702,7 +1724,7 @@ lv:
public: Publisks
public_long: Visi var redzēt
unlisted: Nerindota
- unlisted_long: Redzama visiem, bet nav iekļauta publiskajās ziņu lentās
+ unlisted_long: Redzams visiem, bet nav uzskaitīts visiem pieejamās laika joslās
statuses_cleanup:
enabled: Automātiski dzēst vecās ziņas
enabled_hint: Automātiski izdzēš tavas ziņas, tiklīdz tās sasniedz noteiktu vecuma slieksni, ja vien tās neatbilst kādam no tālāk norādītajiem izņēmumiem
@@ -1789,11 +1811,11 @@ lv:
title: Arhīva līdzņemšana
suspicious_sign_in:
change_password: mainīt paroli
- details: 'Šeit ir detalizēta informācija par pierakstīšanos:'
- explanation: Esam konstatējuši pierakstīšanos tavā kontā no jaunas IP adreses.
+ details: 'Šeit ir pieteikšanās izvērsums:'
+ explanation: Esam noteikuši pieteikšanos Tavā kontā no jaunas IP adreses.
further_actions_html: Ja tas nebiji tu, iesakām nekavējoties %{action} un iespējot divu faktoru autentifikāciju, lai tavs konts būtu drošībā.
subject: Tavam kontam ir piekļūts no jaunas IP adreses
- title: Jauna pierakstīšanās
+ title: Jauna pieteikšanās
warning:
appeal: Iesniegt apelāciju
appeal_description: Ja uzskatāt, ka tā ir kļūda, varat iesniegt apelāciju %{instance} darbiniekiem.
@@ -1835,7 +1857,8 @@ lv:
explanation: Šeit ir daži padomi, kā sākt darbu
feature_action: Uzzināt vairāk
feature_creativity: Mastodon nodrošina skaņas, video un attēlu ierakstus, pieejamības aprakstus, aptaujas, satura brīdinājumus, animētus profila attēlus, pielāgotas emocijzīmes, sīktēlu apgriešanas vadīklas un vēl, lai palīdzētu Tev sevi izpaust tiešsaistē. Vai Tu izplati savu mākslu, mūziku vai aplādes, Mastodon ir šeit ar Tevi.
- feature_moderation_title: Moderēšana, kādai tai būtu jābūt
+ feature_moderation: Mastodon nodod lēmumu pieņemšanu atpakaļ Tavās rokās. Katrs serveris izveido savus noteikumus un nosacījumus, kas tiek nodrošināti vietēji, ne kā lieliem uzņēmumiem piederošos sabiedriskajos medijiem, padarot katru serveri par vispielāgojamāko un visatsaucīgāko dažādu cilvēku kopu vajadzībām. Pievienojies serverim, kura noteikumiem Tu piekrīti, vai izvieto savu!
+ feature_moderation_title: Satura pārraudzība, kādai tai būtu jābūt
follow_action: Sekot
follow_step: Sekošana aizraujošiem cilvēkiem ir viss, par ko ir Mastodon.
follow_title: Pielāgo savu mājas barotni
@@ -1846,7 +1869,7 @@ lv:
one: "%{people} cilvēks pēdējās 2 dienās"
other: "%{people} cilvēki pēdējās 2 dienās"
zero: "%{people} cilvēku pēdējās divās dienās"
- hashtags_subtitle: Izpēti, kas pēdējās divās dienāš ir piesasitījis cilvēku uzmanību
+ hashtags_subtitle: Izpēti, kas pēdējās divās dienās ir piesasitījis cilvēku uzmanību
hashtags_title: Izplatīti tēmturi
hashtags_view_more: Skatīt vairāk izplatītu tēmturu
post_action: Rakstīt
diff --git a/config/locales/ml.yml b/config/locales/ml.yml
index bdc0475a6f..c27e5e5467 100644
--- a/config/locales/ml.yml
+++ b/config/locales/ml.yml
@@ -4,18 +4,25 @@ ml:
contact_missing: സജ്ജമാക്കിയിട്ടില്ല
contact_unavailable: ലഭ്യമല്ല
accounts:
+ followers:
+ one: പിന്തുടരാളി
+ other: പിന്തുടരുന്നവർ
following: പിന്തുടരുന്നു
last_active: അവസാനം സജീവമായിരുന്നത്
link_verified_on: സന്ധിയുടെ ഉടമസ്ഥാവസ്കാശം %{date} ൽ പരിശോധിക്കപ്പെട്ടു
nothing_here: ഇവിടെ ഒന്നുമില്ല!
posts_tab_heading: ടൂട്ടുകൾ
admin:
+ account_moderation_notes:
+ create: ഒരു കുറിപ്പു് വിടുക
accounts:
+ add_email_domain_block: ഈ ഇ-തപാൽ മേഖല തടസ്സപെടുത്തുക
approve: അംഗീകരിക്കുക
are_you_sure: നിങ്ങൾക്ക് ഉറപ്പാണോ?
avatar: അവതാർ
by_domain: മേഖല
change_email:
+ changed_msg: ഇ-തപാൽ ശരിയായിട്ടു് മാറ്റീ!
current_email: ഇപ്പോഴത്തെ ഇലക്ട്രോണിക് കത്തിന്റെ മേൽവിലാസം
label: മാറിയ ഇലക്ട്രോണിക് കത്തിന്റെ മേൽവിലാസം
new_email: പുതിയ ഇലക്ട്രോണിക് കത്ത്
@@ -24,6 +31,7 @@ ml:
confirm: നിജപ്പെടുത്തുക
confirmed: നിജപ്പെടുത്തി
confirming: സ്ഥിരീകരിക്കുന്നു
+ custom: സ്വന്തമായ ഭേദഗതി
delete: ഡാറ്റ ഇല്ലാതാക്കുക
deleted: മായിച്ചു
demote: തരം താഴ്ത്തുക
@@ -34,7 +42,9 @@ ml:
domain: മേഖല
edit: തിരുത്തുക
email: ഇമെയിൽ
+ email_status: ഇ-തപാൽ അവസ്ഥ
header: തലക്കെട്ട്
+ inbox_url: ഇ-തപാല്പെട്ടി വിലാസം
joined: ജോയിൻ ചെയ്തിരിക്കുന്നു
location:
all: എല്ലാം
@@ -46,9 +56,18 @@ ml:
all: എല്ലാം
suspended: താൽക്കാലികമായി നിർത്തി
title: മധ്യസ്ഥന്
+ protocol: പെരുമാറ്റച്ചട്ടം
+ public: പൊതുവു്
+ remove_header: തലക്കെട്ടു് മാറ്റുക
+ resend_confirmation:
+ send: ഉറപ്പിക്കൽ-വിലാസം വീണ്ടും അയക്കുക
reset: പുനഃക്രമീകരിക്കുക
reset_password: പാസ്വേഡ് പുനഃക്രമീകരിക്കുക
search: തിരയുക
+ security: സുരക്ഷ
+ security_measures:
+ only_password: രഹസ്യവാക്ക് മാത്രം
+ silence: അതിർ
title: അക്കൗണ്ടുകൾ
unconfirmed_email: സ്ഥിരീകരിക്കാത്ത ഇമെയിൽ
username: ഉപയോക്തൃനാമം
diff --git a/config/locales/ms.yml b/config/locales/ms.yml
index 90493a30b6..76f914dd16 100644
--- a/config/locales/ms.yml
+++ b/config/locales/ms.yml
@@ -768,7 +768,7 @@ ms:
original_status: Hantaran asal
reblogs: Ulang siar
status_changed: Hantaran diubah
- title: Hantaran akaun
+ title: Hantaran akaun - @%{name}
trending: Sohor kini
visibility: Visibiliti
with_media: Dengan media
diff --git a/config/locales/my.yml b/config/locales/my.yml
index 6a330a16c7..b238abb051 100644
--- a/config/locales/my.yml
+++ b/config/locales/my.yml
@@ -764,7 +764,7 @@ my:
original_status: မူရင်းပို့စ်
reblogs: Reblog များ
status_changed: ပို့စ်ပြောင်းပြီးပါပြီ
- title: အကောင့်ပို့စ်များ
+ title: "@%{name} - အကောင့်ပို့စ်များ"
trending: လက်ရှိခေတ်စားနေခြင်း
visibility: မြင်နိုင်မှု
with_media: မီဒီယာနှင့်အတူ
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 968dcc3e7c..d4a88b3bea 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -833,7 +833,7 @@ nl:
original_status: Oorspronkelijk bericht
reblogs: Boosts
status_changed: Bericht veranderd
- title: Berichten van account
+ title: Berichten van account - @%{name}
trending: Trending
visibility: Zichtbaarheid
with_media: Met media
@@ -1166,9 +1166,11 @@ nl:
use_security_key: Beveiligingssleutel gebruiken
author_attribution:
example_title: Voorbeeldtekst
- hint_html: Bepaal hoe we je vermelden, wanneer jouw links op Mastodon worden gedeeld.
+ hint_html: Schrijf je nieuws- of blogartikelen buiten Mastodon? Bepaal hoe je geattribueerd wordt als deze gedeeld worden op Mastodon.
+ instructions: 'Zorg ervoor dat deze code in de HTML van je artikel zit:'
more_from_html: Meer van %{name}
s_blog: De weblog van %{name}
+ then_instructions: Voeg vervolgens de domeinnaam van de publicatie toe in het onderstaande veld.
title: Auteur-attributie
challenge:
confirm: Doorgaan
diff --git a/config/locales/nn.yml b/config/locales/nn.yml
index b28cf30162..e04c0168f2 100644
--- a/config/locales/nn.yml
+++ b/config/locales/nn.yml
@@ -187,6 +187,7 @@ nn:
create_domain_block: Opprett domene-blokk
create_email_domain_block: Opprett blokkering av e-postdomene
create_ip_block: Opprett IP-regel
+ create_relay: Opprett eit relé
create_unavailable_domain: Opprett utilgjengeleg domene
create_user_role: Opprett rolle
demote_user: Degrader brukar
@@ -198,14 +199,17 @@ nn:
destroy_email_domain_block: Fjern blokkering av e-postdomene
destroy_instance: Slett domene
destroy_ip_block: Slett IP-regel
+ destroy_relay: Slett relé
destroy_status: Slett status
destroy_unavailable_domain: Slett utilgjengeleg domene
destroy_user_role: Øydelegg rolle
disable_2fa_user: Skruv av 2FA
disable_custom_emoji: Skruv av tilpassa emoji
+ disable_relay: Skru av reléet
disable_sign_in_token_auth_user: Slå av e-post-token-autentisering for brukar
disable_user: Skruv av brukar
enable_custom_emoji: Skruv på tilpassa emoji
+ enable_relay: Skru på reléet
enable_sign_in_token_auth_user: Slå på e-post-token-autentisering for brukar
enable_user: Skruv på brukar
memorialize_account: Opprett minnekonto
@@ -247,6 +251,7 @@ nn:
create_domain_block_html: "%{name} blokkerte domenet %{target}"
create_email_domain_block_html: "%{name} blokkerte e-postdomenet %{target}"
create_ip_block_html: "%{name} oppretta ein regel for IP-en %{target}"
+ create_relay_html: "%{name} laga reléet %{target}"
create_unavailable_domain_html: "%{name} stogga levering til domenet %{target}"
create_user_role_html: "%{name} oppretta rolla %{target}"
demote_user_html: "%{name} degraderte brukaren %{target}"
@@ -258,14 +263,17 @@ nn:
destroy_email_domain_block_html: "%{name} avblokkerte e-postdomenet %{target}"
destroy_instance_html: "%{name} tømde domenet %{target}"
destroy_ip_block_html: "%{name} sletta ein regel for IP-en %{target}"
+ destroy_relay_html: "%{name} sletta reléet %{target}"
destroy_status_html: "%{name} fjerna innlegget frå %{target}"
destroy_unavailable_domain_html: "%{name} tok opp att levering til domenet %{target}"
destroy_user_role_html: "%{name} sletta rolla %{target}"
disable_2fa_user_html: "%{name} tok vekk krav om tofaktorautentisering for brukaren %{target}"
disable_custom_emoji_html: "%{name} deaktiverte emojien %{target}"
+ disable_relay_html: "%{name} skrudde av reléet %{target}"
disable_sign_in_token_auth_user_html: "%{name} deaktiverte e-post-token-autentisering for %{target}"
disable_user_html: "%{name} slo av innlogging for brukaren %{target}"
enable_custom_emoji_html: "%{name} aktiverte emojien %{target}"
+ enable_relay_html: "%{name} skrudde på reléet %{target}"
enable_sign_in_token_auth_user_html: "%{name} aktiverte e-post-token-autentisering for %{target}"
enable_user_html: "%{name} aktiverte innlogging for brukaren %{target}"
memorialize_account_html: "%{name} endret %{target}s konto til en minneside"
@@ -690,10 +698,10 @@ nn:
moderation: Moderering
special: Særskild
delete: Slett
- description_html: Med brukarrollar kan du kontrollera kva funksjonar og område av Mastodon brukarane dine har tilgong til.
+ description_html: Med brukarroller kan du kontrollera kva funksjonar og område av Mastodon brukarane dine har tilgang til.
edit: Endr rollen '%{name}'
everyone: Standard-tillatelser
- everyone_full_description_html: Dette er grunnrollen som påverkar alle brukarar, jamvel dei utan ei tilsett rolle. Alle andre rollar arvar tillatingar frå denne.
+ everyone_full_description_html: Dette er grunnrolla som påverkar alle brukarar, jamvel dei utan ei tildelt rolle. Alle andre rollar arvar tilgangsløve frå denne.
permissions_count:
one: "%{count} tillatelse"
other: "%{count} tillatelser"
@@ -719,7 +727,7 @@ nn:
manage_reports: Handtere rapporteringar
manage_reports_description: Let brukarar gjennomgå rapportar og utføre modereringshandlingar i samsvar med desse
manage_roles: Handsam roller
- manage_roles_description: Tillet at brukarar handsamar og tilset rollar under deira eiga
+ manage_roles_description: Tillet at brukarar handsamar og tildeler roller som er lågare enn dera eiga
manage_rules: Handtere reglar
manage_rules_description: Let brukarar endre reglane for tenaren
manage_settings: Handtere innstillingar
@@ -738,7 +746,7 @@ nn:
view_dashboard_description: Gir brukere tilgang til dashbordet og ulike metrikker
view_devops: DevOps
view_devops_description: Gir brukere tilgang til Sidekiq og pgHero-dashbord
- title: Rollar
+ title: Roller
rules:
add_new: Legg til regel
delete: Slett
@@ -833,7 +841,7 @@ nn:
original_status: Opprinnelig innlegg
reblogs: Framhevingar
status_changed: Innlegg endret
- title: Kontostatusar
+ title: Kontostatusar - @%{name}
trending: Populært
visibility: Synlighet
with_media: Med media
@@ -1166,9 +1174,11 @@ nn:
use_security_key: Bruk sikkerhetsnøkkel
author_attribution:
example_title: Eksempeltekst
- hint_html: Kontroller korleis du blir kreditert når nokon deler lenker på Mastodon.
+ hint_html: Skriv du nyhende eller blogginnlegg utanfor Mastodon? Her kan du kontrollera korleis du blir kreditert når artiklane dine blir delte på Mastodon.
+ instructions: 'Sjå til at denne koden er i HTML-koden i artikkelen din:'
more_from_html: Meir frå %{name}
s_blog: Bloggen til %{name}
+ then_instructions: Så legg du til domenenamnet for publikasjonen i feltet under.
title: Forfattarkreditering
challenge:
confirm: Hald fram
@@ -1370,6 +1380,40 @@ nn:
blocking_html:
one: Du skal til å byta ut blokkeringslista di med opp til %{count} brukarkonto frå %{filename}.
other: Du skal til å byta ut blokkeringslista di med opp til %{count} brukarkontoar frå %{filename}.
+ bookmarks_html:
+ one: Du skal til å byta ut bokmerka dine med opp til %{count} innlegg frå %{filename}.
+ other: Du skal til å byta ut bokmerka dine med opp til %{count} innlegg frå %{filename}.
+ domain_blocking_html:
+ one: Du skal til å byta ut domeneblokkeringslista di med opp til %{count} domene frå %{filename}.
+ other: Du skal til å byta ut domeneblokkeringslista di med opp til %{count} domene frå %{filename}.
+ following_html:
+ one: Du skal til å fylgja opp til %{count} brukarkonto frå %{filename} og slutta å fylgja alle andre.
+ other: Du skal til å fylgja opp til %{count} brukarkontoar frå %{filename} og slutta å fylgja alle andre.
+ lists_html:
+ one: Du er i ferd med å erstatta listene dine med innhaldet i %{filename}. Opptil %{count} konto vil bli lagt til i dei nye listene.
+ other: Du er i ferd med å erstatta listene dine med innhaldet i %{filename}. Opptil %{count} kontoar vil bli lagt til i dei nye listene.
+ muting_html:
+ one: Du skal til å byta ut lista di over dempa brukarkontoar med opp til %{count} brukarkonto frå %{filename}.
+ other: Du skal til å byta ut lista di over dempa brukarkontoar med opp til %{count} brukarkontoar frå %{filename}.
+ preambles:
+ blocking_html:
+ one: Du skal til å blokkera opp til %{count} brukarkonto frå %{filename}.
+ other: Du skal til å blokkera opp til %{count} brukarkontoar frå %{filename}.
+ bookmarks_html:
+ one: Du er i ferd med å leggja til opp til %{count} innlegg frå %{filename} til bokmerka dine.
+ other: Du er i ferd med å leggja til opp til %{count} innlegg frå %{filename} til bokmerka dine.
+ domain_blocking_html:
+ one: Du skal til å blokkera opp til %{count} domene frå %{filename}.
+ other: Du skal til å blokkera opp til %{count} domene frå %{filename}.
+ following_html:
+ one: Du er i ferd med å fylgja opp til %{count} brukarkonto frå %{filename}.
+ other: Du er i ferd med å fylgja opp til %{count} brukarkontoar frå %{filename}.
+ lists_html:
+ one: Du er i ferd med å leggja til opptil %{count} konto frå %{filename} til i listene dine. Nye lister vil blir oppretta om ingen lister finst frå før.
+ other: Du er i ferd med å leggja til opptil %{count} kontoar frå %{filename} til i listene dine. Nye lister vil blir oppretta om ingen lister finst frå før.
+ muting_html:
+ one: Du er i ferd med å dempa opp til %{count} brukarkonto frå %{filename}.
+ other: Du er i ferd med å dempa opp til %{count} brukarkontoar frå %{filename}.
preface: Du kan henta inn data som du har eksportert frå ein annan tenar, som t.d. ei liste over folka du fylgjer eller blokkerer.
recent_imports: Siste importar
states:
@@ -1417,7 +1461,7 @@ nn:
one: 1 bruk
other: "%{count} bruk"
max_uses_prompt: Inga grense
- prompt: Generer og del lenkjer med andre for å gje tilgong til denne tenaren
+ prompt: Generer og del lenkjer med andre for å gje tilgang til denne tenaren
table:
expires_at: Vert ugyldig
uses: Bruk
diff --git a/config/locales/no.yml b/config/locales/no.yml
index 94986f4cae..408fdd5ae1 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -786,7 +786,7 @@
original_status: Opprinnelig innlegg
reblogs: Fremheve
status_changed: Innlegg endret
- title: Kontostatuser
+ title: Kontostatuser - @%{name}
trending: Populært
visibility: Synlighet
with_media: Med media
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index a30126c44b..5130977cb3 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -401,7 +401,7 @@ oc:
media:
title: Mèdia
no_status_selected: Cap d’estatut pas cambiat estant que cap èra pas seleccionat
- title: Estatuts del compte
+ title: Estatuts del compte - @%{name}
visibility: Visibilitat
with_media: Amb mèdia
system_checks:
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index ba1f4812e9..c5d63e1d73 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -861,7 +861,7 @@ pl:
original_status: Oryginalny post
reblogs: Podbicia
status_changed: Post zmieniony
- title: Wpisy konta
+ title: Wpisy konta - @%{name}
trending: Popularne
visibility: Widoczność
with_media: Z zawartością multimedialną
@@ -1202,9 +1202,11 @@ pl:
use_security_key: Użyj klucza bezpieczeństwa
author_attribution:
example_title: Przykładowy tekst
- hint_html: Kontroluj przypisy do twoich wpisów widoczne na Mastodonie.
+ hint_html: Piszesz wiadomości albo bloga poza Mastodonem? Kontroluj jak będą ci przypisywane podczas dizielenia się nimi na Mastodonie.
+ instructions: 'Upewnij się, że ten kod jest w HTMLu twojego artykułu:'
more_from_html: Więcej od %{name}
s_blog: Blog %{name}
+ then_instructions: Potem, dodaj domenę publikacji do pola poniżej.
title: Przypis do autora
challenge:
confirm: Kontynuuj
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 8e806f670c..c5a0f3764a 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -35,12 +35,12 @@ pt-BR:
accounts:
add_email_domain_block: Bloquear domínio de email
approve: Aprovar
- approved_msg: O registro de %{username} foi aprovado
+ approved_msg: Aprovado com sucesso o pedido de registro de %{username}
are_you_sure: Você tem certeza?
avatar: Imagem de perfil
by_domain: Domínio
change_email:
- changed_msg: E-mail alterado!
+ changed_msg: E-mail alterado com sucesso!
current_email: E-mail atual
label: Alterar e-mail
new_email: Novo e-mail
@@ -187,6 +187,7 @@ pt-BR:
create_domain_block: Bloquear domínio
create_email_domain_block: Criar Bloqueio de Domínio de Email
create_ip_block: Criar regra de IP
+ create_relay: Criar Retransmissão
create_unavailable_domain: Criar domínio indisponível
create_user_role: Criar cargo
demote_user: Rebaixar usuário
@@ -198,14 +199,17 @@ pt-BR:
destroy_email_domain_block: Deletar bloqueio de domínio Email
destroy_instance: Limpar domínio
destroy_ip_block: Excluir regra de IP
+ destroy_relay: Excluir Retransmissão
destroy_status: Excluir publicação
destroy_unavailable_domain: Excluir domínio indisponível
destroy_user_role: Destruir cargo
disable_2fa_user: Desativar autenticação de dois fatores
disable_custom_emoji: Desativar emoji personalizado
+ disable_relay: Desativar Retransmissão
disable_sign_in_token_auth_user: Desativar autenticação via Token de Email para Usuário
disable_user: Desativar usuário
enable_custom_emoji: Ativar emoji personalizado
+ enable_relay: Ativar Retransmissão
enable_sign_in_token_auth_user: Ativar autenticação via Token de Email para Usuário
enable_user: Ativar usuário
memorialize_account: Converter conta em memorial
@@ -247,6 +251,7 @@ pt-BR:
create_domain_block_html: "%{name} bloqueou o domínio %{target}"
create_email_domain_block_html: "%{name} bloqueou o domínio de e-mail %{target}"
create_ip_block_html: "%{name} criou a regra para o IP %{target}"
+ create_relay_html: "%{name} criou uma retransmissão %{target}"
create_unavailable_domain_html: "%{name} parou a entrega ao domínio %{target}"
create_user_role_html: "%{name} criou o cargo %{target}"
demote_user_html: "%{name} rebaixou o usuário %{target}"
@@ -258,14 +263,17 @@ pt-BR:
destroy_email_domain_block_html: "%{name} desbloqueou o domínio de e-mail %{target}"
destroy_instance_html: "%{name} limpou o domínio %{target}"
destroy_ip_block_html: "%{name} excluiu a regra para o IP %{target}"
+ destroy_relay_html: "%{name} excluiu uma retransmissão %{target}"
destroy_status_html: "%{name} removeu a publicação de %{target}"
destroy_unavailable_domain_html: "%{name} retomou a entrega ao domínio %{target}"
destroy_user_role_html: "%{name} excluiu o cargo %{target}"
disable_2fa_user_html: "%{name} desativou a exigência da autenticação de dois fatores para o usuário %{target}"
disable_custom_emoji_html: "%{name} desativou o emoji %{target}"
+ disable_relay_html: "%{name} desativou uma retransmissão %{target}"
disable_sign_in_token_auth_user_html: "%{name} desativou a autenticação via token por e-mail para %{target}"
disable_user_html: "%{name} desativou o login para %{target}"
enable_custom_emoji_html: "%{name} ativou o emoji %{target}"
+ enable_relay_html: "%{name} ativou uma retransmissão %{target}"
enable_sign_in_token_auth_user_html: "%{name} ativou a autenticação via token por e-mail para %{target}"
enable_user_html: "%{name} ativou o login para %{target}"
memorialize_account_html: "%{name} transformou a conta de %{target} em um memorial"
@@ -833,7 +841,7 @@ pt-BR:
original_status: Publicação original
reblogs: Reblogs
status_changed: Publicação alterada
- title: Publicações da conta
+ title: Publicações da conta - @%{name}
trending: Em alta
visibility: Visibilidade
with_media: Com mídia
@@ -1166,9 +1174,11 @@ pt-BR:
use_security_key: Usar chave de segurança
author_attribution:
example_title: Texto de amostra
- hint_html: Controle como você é creditado quando links são compartilhados no Mastodon.
+ hint_html: Você está escrevendo notícias ou artigos de blogs fora do Mastodon? Controle como você é credenciado quando eles forem compartilhados no Mastodon.
+ instructions: 'Certifique-se que este código esteja no HTML do artigo:'
more_from_html: Mais de %{name}
s_blog: Blog do %{name}
+ then_instructions: Então, adicione o nome de domínio da publicação no campo abaixo.
title: Atribuição de autoria
challenge:
confirm: Continuar
@@ -1366,6 +1376,10 @@ pt-BR:
merge_long: Manter os registros existentes e adicionar novos
overwrite: Sobrescrever
overwrite_long: Substituir os registros atuais com os novos
+ overwrite_preambles:
+ bookmarks_html:
+ one: Você está prestes a substituir seus salvos por até %{count} publicação de %{filename}.
+ other: Você está prestes a substituir seus salvos por até %{count} publicações de %{filename}.
preface: Você pode importar dados que você exportou de outro servidor, como a lista de pessoas que você segue ou bloqueou.
recent_imports: Importações recentes
states:
diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml
index 68217113d2..ff80948848 100644
--- a/config/locales/pt-PT.yml
+++ b/config/locales/pt-PT.yml
@@ -832,7 +832,7 @@ pt-PT:
original_status: Publicação original
reblogs: Re-publicacões
status_changed: Publicação alterada
- title: Estado das contas
+ title: Estado das contas - @%{name}
trending: Em tendência
visibility: Visibilidade
with_media: Com media
@@ -1162,7 +1162,6 @@ pt-PT:
use_security_key: Usar chave de segurança
author_attribution:
example_title: Texto de exemplo
- hint_html: Controle a forma como é creditado quando as hiperligações são partilhadas no Mastodon.
more_from_html: Mais de %{name}
s_blog: Blog de %{name}
title: Atribuição de autor
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 25ca703732..09d89cef9d 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -25,6 +25,7 @@ ru:
one: Пост
other: статусов
posts_tab_heading: Посты
+ self_follow_error: Нельзя подписаться на самого себя
admin:
account_actions:
action: Выполнить действие
@@ -64,7 +65,7 @@ ru:
demote: Разжаловать
destroyed_msg: Данные %{username} поставлены в очередь на удаление
disable: Заморозка
- disable_sign_in_token_auth: Отключите аутентификацию с помощью маркера электронной почты
+ disable_sign_in_token_auth: Отключить аутентификацию по e-mail кодам
disable_two_factor_authentication: Отключить 2FA
disabled: Отключено
display_name: Отображаемое имя
@@ -73,7 +74,7 @@ ru:
email: E-mail
email_status: Статус e-mail
enable: Включить
- enable_sign_in_token_auth: Включите аутентификацию с помощью маркера электронной почты
+ enable_sign_in_token_auth: Включить аутентификацию по e-mail кодам
enabled: Включен
enabled_msg: Учётная запись %{username} успешно разморожена
followers: Подписчики
@@ -146,8 +147,8 @@ ru:
security_measures:
only_password: Только пароль
password_and_2fa: Пароль и 2FA
- sensitive: Отметить как «деликатного содержания»
- sensitized: отмечено как «деликатного характера»
+ sensitive: Деликатный
+ sensitized: отмечено как деликатный контент
shared_inbox_url: URL общих входящих
show:
created_reports: Жалобы, отправленные с этой учётной записи
@@ -165,7 +166,7 @@ ru:
unblock_email: Разблокировать e-mail адрес
unblocked_email_msg: E-mail адрес %{username} разблокирован
unconfirmed_email: Неподтверждённый e-mail
- undo_sensitized: Убрать отметку «деликатного содержания»
+ undo_sensitized: Снять отметку "деликатный"
undo_silenced: Отменить скрытие
undo_suspension: Снять блокировку
unsilenced_msg: Ограничения с учётной записи %{username} сняты успешно
@@ -178,104 +179,112 @@ ru:
whitelisted: В белом списке
action_logs:
action_types:
- approve_appeal: Одобрить обжалование
- approve_user: Утвердить
+ approve_appeal: Одобрение обжалований
+ approve_user: Утверждение регистраций
assigned_to_self_report: Присвоение жалоб
- change_email_user: Сменить e-mail для пользователя
- change_role_user: Изменить роль пользователя
+ change_email_user: Смена e-mail пользователей
+ change_role_user: Смена ролей пользователей
confirm_user: Подтверждение пользователей
create_account_warning: Выдача предупреждения
create_announcement: Создание объявлений
- create_canonical_email_block: Создать блок электронной почты
+ create_canonical_email_block: Создание блокировок e-mail
create_custom_emoji: Добавление эмодзи
create_domain_allow: Разрешение доменов
create_domain_block: Блокировка доменов
- create_email_domain_block: Создать блок домена электронной почты
+ create_email_domain_block: Создание доменных блокировок e-mail
create_ip_block: Создание правил для IP-адресов
+ create_relay: Создание ретранслятора
create_unavailable_domain: Добавление домена в список недоступных
- create_user_role: Создать роль
+ create_user_role: Создание ролей
demote_user: Разжалование пользователей
destroy_announcement: Удаление объявлений
- destroy_canonical_email_block: Удалить блок электронной почты
+ destroy_canonical_email_block: Удаление блокировок e-mail
destroy_custom_emoji: Удаление эмодзи
destroy_domain_allow: Отзыв разрешений для доменов
destroy_domain_block: Разблокировка доменов
- destroy_email_domain_block: Удалить блок домена электронной почты
+ destroy_email_domain_block: Удаление доменных блокировок e-mail
destroy_instance: Очистить домен
destroy_ip_block: Удаление правил для IP-адресов
+ destroy_relay: Удаление ретранслятора
destroy_status: Удаление постов
destroy_unavailable_domain: Исключение доменов из списка недоступных
- destroy_user_role: Удалить роль
+ destroy_user_role: Удаление ролей
disable_2fa_user: Отключение 2FA
disable_custom_emoji: Отключение эмодзи
- disable_sign_in_token_auth_user: Отключить аутентификацию пользователя с помощью токена электронной почты
+ disable_relay: Отключение ретранслятора
+ disable_sign_in_token_auth_user: Отключение аутентификации по e-mail кодам
disable_user: Заморозка пользователей
enable_custom_emoji: Включение эмодзи
- enable_sign_in_token_auth_user: Включить аутентификацию пользователя с помощью токена электронной почты
+ enable_relay: Включение ретранслятора
+ enable_sign_in_token_auth_user: Включение аутентификации по e-mail кодам
enable_user: Разморозка пользователей
memorialize_account: Присвоение пользователям статуса «мемориала»
promote_user: Повышение пользователей
- reject_appeal: Отклонить обжалование
- reject_user: Отклонить
+ reject_appeal: Отклонение обжалований
+ reject_user: Отклонение регистраций
remove_avatar_user: Удаление аватаров
reopen_report: Возобновление жалоб
- resend_user: Повторно отправить письмо с подтверждением
+ resend_user: Повторная отправка писем с подтверждением
reset_password_user: Сброс пароля пользователей
resolve_report: Отметка жалоб «решёнными»
sensitive_account: Присвоение пользователям отметки «деликатного содержания»
silence_account: Скрытие пользователей
suspend_account: Блокировка пользователей
unassigned_report: Снятие жалоб
- unblock_email_account: Разблокировать e-mail адрес
+ unblock_email_account: Разблокировка e-mail адресов
unsensitive_account: Снятие с пользователей отметки «деликатного содержания»
unsilence_account: Отмена скрытия пользователей
unsuspend_account: Разблокировка пользователей
update_announcement: Обновление объявлений
update_custom_emoji: Обновление эмодзи
update_domain_block: Изменение блокировки домена
- update_ip_block: Обновить правило для IP-адреса
- update_report: Обновить рапорт
+ update_ip_block: Обновление правил для IP-адресов
+ update_report: Изменение жалоб
update_status: Изменение постов
- update_user_role: Обновить роль
+ update_user_role: Изменение ролей
actions:
- approve_appeal_html: "%{name} одобрил апелляцию на умеренное решение от %{target}"
+ approve_appeal_html: "%{name} одобрил(а) обжалование действий модерации от %{target}"
approve_user_html: "%{name} утвердил(а) регистрацию %{target}"
assigned_to_self_report_html: "%{name} назначил(а) себя для решения жалобы %{target}"
- change_email_user_html: "%{name} изменил адрес электронной почты пользователя %{target}"
+ change_email_user_html: "%{name} cменил(а) e-mail адрес пользователя %{target}"
change_role_user_html: "%{name} изменил(а) роль %{target}"
- confirm_user_html: "%{name} подтвержденный адрес электронной почты пользователя %{target}"
+ confirm_user_html: "%{name} подтвердил(а) e-mail адрес пользователя %{target}"
create_account_warning_html: "%{name} выдал(а) предупреждение %{target}"
create_announcement_html: "%{name} создал(а) новое объявление %{target}"
- create_canonical_email_block_html: "%{name} заблокировал письмо с хэшем %{target}"
+ create_canonical_email_block_html: "%{name} заблокировал(а) e-mail с хешем %{target}"
create_custom_emoji_html: "%{name} загрузил(а) новый эмодзи %{target}"
create_domain_allow_html: "%{name} разрешил(а) федерацию с доменом %{target}"
create_domain_block_html: "%{name} заблокировал(а) домен %{target}"
- create_email_domain_block_html: "%{name} заблокированный почтовый домен %{target}"
+ create_email_domain_block_html: "%{name} заблокировал(а) e-mail домен %{target}"
create_ip_block_html: "%{name} создал(а) правило для IP %{target}"
+ create_relay_html: "%{name} создал(а) ретранслятор %{target}"
create_unavailable_domain_html: "%{name} приостановил доставку на узел %{target}"
create_user_role_html: "%{name} создал(а) роль %{target}"
demote_user_html: "%{name} разжаловал(а) пользователя %{target}"
destroy_announcement_html: "%{name} удалил(а) объявление %{target}"
- destroy_canonical_email_block_html: "%{name} разблокированное письмо с хэшем %{target}"
+ destroy_canonical_email_block_html: "%{name} снял(а) блокировку e-mail с хэшем %{target}"
destroy_custom_emoji_html: "%{name} удалил(а) эмодзи %{target}"
destroy_domain_allow_html: "%{name} запретил(а) федерацию с доменом %{target}"
destroy_domain_block_html: "%{name} снял(а) блокировку с домена %{target}"
- destroy_email_domain_block_html: "%{name} разблокированный почтовый домен %{target}"
+ destroy_email_domain_block_html: "%{name} снял(а) блокировку с e-mail домена %{target}"
destroy_instance_html: "%{name} очистил(а) данные для домена %{target}"
destroy_ip_block_html: "%{name} удалил(а) правило для IP %{target}"
+ destroy_relay_html: "%{name} удалил(а) ретранслятор %{target}"
destroy_status_html: "%{name} удалил(а) пост пользователя %{target}"
destroy_unavailable_domain_html: "%{name} возобновил доставку на узел %{target}"
destroy_user_role_html: "%{name} удалил(а) роль %{target}"
disable_2fa_user_html: "%{name} отключил(а) требование двухэтапной авторизации для пользователя %{target}"
disable_custom_emoji_html: "%{name} отключил(а) эмодзи %{target}"
- disable_sign_in_token_auth_user_html: "%{name} отключил аутентификацию по маркеру электронной почты для %{target}"
+ disable_relay_html: "%{name} отключил(а) ретранслятор %{target}"
+ disable_sign_in_token_auth_user_html: "%{name} отключил(а) аутентификацию по e-mail кодам для %{target}"
disable_user_html: "%{name} заморозил(а) пользователя %{target}"
enable_custom_emoji_html: "%{name} включил(а) эмодзи %{target}"
- enable_sign_in_token_auth_user_html: "%{name} включил аутентификацию с помощью маркера электронной почты для %{target}"
+ enable_relay_html: "%{name} включил(а) ретранслятор %{target}"
+ enable_sign_in_token_auth_user_html: "%{name} включил(а) аутентификацию по e-mail кодам для %{target}"
enable_user_html: "%{name} разморозил(а) пользователя %{target}"
memorialize_account_html: "%{name} перевел(а) учётную запись пользователя %{target} в статус памятника"
promote_user_html: "%{name} повысил(а) пользователя %{target}"
- reject_appeal_html: "%{name} отклонил апелляцию на модерацию от %{target}"
+ reject_appeal_html: "%{name} отклонил(а) обжалование действий модерации от %{target}"
reject_user_html: "%{name} отклонил(а) регистрацию %{target}"
remove_avatar_user_html: "%{name} убрал(а) аватарку пользователя %{target}"
reopen_report_html: "%{name} повторно открыл(а) жалобу %{target}"
@@ -294,7 +303,7 @@ ru:
update_custom_emoji_html: "%{name} обновил(а) эмодзи %{target}"
update_domain_block_html: "%{name} обновил(а) блокировку домена для %{target}"
update_ip_block_html: "%{name} изменил(а) правило для IP %{target}"
- update_report_html: "%{name} обновленный отчет %{target}"
+ update_report_html: "%{name} изменил(а) жалобу %{target}"
update_status_html: "%{name} изменил(а) пост пользователя %{target}"
update_user_role_html: "%{name} изменил(а) роль %{target}"
deleted_account: удалённая учётная запись
@@ -462,6 +471,7 @@ ru:
title: Блокировка нового почтового домена
no_email_domain_block_selected: Блоки почтовых доменов не были изменены, так как ни один из них не был выбран
not_permitted: Не разрешено
+ resolved_dns_records_hint_html: Доменное имя указывает на следующие MX-домены, которые в конечном итоге отвечают за прием электронной почты. Блокировка MX-домена будет блокировать регистрации с любого адреса электронной почты, который использует тот же MX-домен, даже если видимое доменное имя отличается от него. Будьте осторожны, чтобы не заблокировать основных провайдеров электронной почты
resolved_through_html: Разрешено через %{domain}
title: Заблокированные e-mail домены
export_domain_allows:
@@ -625,6 +635,7 @@ ru:
resolve_description_html: Никаких действий не будет выполнено относительно доложенного содержимого. Жалоба будет закрыта.
silence_description_html: Учетная запись будет видна только тем пользователям, которые уже подписаны на неё, либо открыли его вручную. Это действие можно отменить в любой момент, и отменяет все жалобы против аккаунта.
suspend_description_html: Аккаунт и все его содержимое будут недоступны и в конечном итоге удалены, и взаимодействие с ним будет невозможно. Это действие можно отменить в течение 30 дней. Отменяет все жалобы против этого аккаунта.
+ actions_description_html: Выберите действие, чтобы разрешить данную жалобу. Если вы примете меры модерации против аккаунта, его владелец получит уведомление по электронной почте, кроме тех случаев, когда выбрана категория Спам.
actions_description_remote_html: Решите вопрос о том, какие меры необходимо принять для урегулирования этой жалобы. Это повлияет только на то, как ваш сервер взаимодействует с этим удаленным аккаунтом и обрабатывает его содержимое.
actions_no_posts: У этого отчета нет связанных с ним сообщений для удаления
add_to_report: Прикрепить ещё
@@ -858,7 +869,7 @@ ru:
original_status: Оригинальный пост
reblogs: Продвинули
status_changed: Пост изменен
- title: Посты пользователя
+ title: Посты пользователя - @%{name}
trending: Популярное
visibility: Видимость
with_media: С файлами
@@ -901,6 +912,9 @@ ru:
message_html: Вы не определили правила сервера.
sidekiq_process_check:
message_html: Ни один Sidekiq не запущен для %{value} очереди(-ей). Пожалуйста, просмотрите настройки Sidekiq
+ software_version_check:
+ action: Посмотреть доступные обновления
+ message_html: Доступно обновление для Mastodon.
software_version_critical_check:
action: Посмотреть доступные обновления
message_html: Доступно критическое обновление Mastodon, пожалуйста, обновитесь как можно скорее.
@@ -1196,9 +1210,11 @@ ru:
use_security_key: Использовать ключ безопасности
author_attribution:
example_title: Образец текста
- hint_html: Контролируйте, как вы будете отмечены при обмене ссылками на Mastodon.
+ hint_html: Публикуете ли вы свои статьи где-либо ещё кроме Mastodon? Если да, то ваше авторство может быть упомянуто, когда ими делятся в Mastodon.
+ instructions: 'Добавьте код ниже в HTML ваших статей:'
more_from_html: Больше от %{name}
s_blog: "%{name}'S Блог"
+ then_instructions: Затем добавьте доменное имя сайта, где вы публикуетесь, в поле ниже.
title: Авторская атрибуция
challenge:
confirm: Продолжить
@@ -1308,7 +1324,7 @@ ru:
csv: CSV
domain_blocks: Доменные блокировки
lists: Списки
- mutes: Ваши игнорируете
+ mutes: Ваши игнорируемые
storage: Ваши файлы
featured_tags:
add_new: Добавить
@@ -1410,6 +1426,68 @@ ru:
merge_long: Сохранить имеющиеся данные и добавить новые.
overwrite: Перезаписать
overwrite_long: Перезаписать имеющиеся данные новыми.
+ overwrite_preambles:
+ blocking_html:
+ few: Вы собираетесь заменить свой список блокировки, в котором сейчас %{count} аккаунта, из файла %{filename}.
+ many: Вы собираетесь заменить свой список блокировки, в котором сейчас %{count} аккаунов, из файла %{filename}.
+ one: Вы собираетесь заменить свой список блокировки, в котором сейчас %{count} аккаунт, из файла %{filename}.
+ other: Вы собираетесь заменить свой список блокировки, в котором сейчас %{count} аккаунтов, из файла %{filename}.
+ bookmarks_html:
+ few: Вы собираетесь заменить свои закладки, в которых сейчас %{count} поста, из файла %{filename}.
+ many: Вы собираетесь заменить свои закладки, в которых сейчас %{count} постов, из файла %{filename}.
+ one: Вы собираетесь заменить свои закладки, в которых сейчас %{count} пост, из файла %{filename}.
+ other: Вы собираетесь заменить свои закладки, в которых сейчас %{count} постов, из файла %{filename}.
+ domain_blocking_html:
+ few: Вы собираетесь заменить свой список доменных блокировок, в котором сейчас %{count} домена, из файла %{filename}.
+ many: Вы собираетесь заменить свой список доменных блокировок, в котором сейчас %{count} доменов, из файла %{filename}.
+ one: Вы собираетесь заменить свой список доменных блокировок, в котором сейчас %{count} домен, из файла %{filename}.
+ other: Вы собираетесь заменить свой список доменных блокировок, в котором сейчас %{count} доменов, из файла %{filename}.
+ following_html:
+ few: Вы собираетесь подписаться на %{count} аккаунта из файла %{filename} и отписаться от всех прочих.
+ many: Вы собираетесь подписаться на %{count} аккаунтов из файла %{filename} и отписаться от всех прочих.
+ one: Вы собираетесь подписаться на %{count} аккаунт из файла %{filename} и отписаться от всех прочих.
+ other: Вы собираетесь подписаться на %{count} аккаунтов из файла %{filename} и отписаться от всех прочих.
+ lists_html:
+ few: Вы собираетесь заменить свои списки содержимым файла %{filename}. В новые списки будут добавлены %{count} аккаунта.
+ many: Вы собираетесь заменить свои списки содержимым файла %{filename}. В новые списки будут добавлены %{count} аккаунтов.
+ one: Вы собираетесь заменить свои списки содержимым файла %{filename}. В новые списки будет добавлен %{count} аккаунт.
+ other: Вы собираетесь заменить свои списки содержимым файла %{filename}. В новые списки будут добавлены %{count} аккаунтов.
+ muting_html:
+ few: Вы собираетесь заменить свой список игнорируемых пользователей списком из %{count} аккаунтов из файла %{filename}.
+ many: Вы собираетесь заменить свой список игнорируемых пользователей списком из %{count} аккаунтов из файла %{filename}.
+ one: Вы собираетесь заменить свой список игнорируемых пользователей списком из %{count} аккаунта из файла %{filename}.
+ other: Вы собираетесь заменить свой список игнорируемых пользователей списком из %{count} аккаунтов из файла %{filename}.
+ preambles:
+ blocking_html:
+ few: Вы собираетесь заблокировать %{count} аккаунта из файла %{filename}.
+ many: Вы собираетесь заблокировать %{count} аккаунтов из файла %{filename}.
+ one: Вы собираетесь заблокировать %{count} аккаунт из файла %{filename}.
+ other: Вы собираетесь заблокировать %{count} аккаунтов из файла %{filename}.
+ bookmarks_html:
+ few: Вы собираетесь добавить %{count} поста из файла %{filename} в свои закладки.
+ many: Вы собираетесь добавить %{count} постов из файла %{filename} в свои закладки.
+ one: Вы собираетесь добавить %{count} пост из файла %{filename} в свои закладки.
+ other: Вы собираетесь добавить %{count} постов из файла %{filename} в свои закладки.
+ domain_blocking_html:
+ few: Вы собираетесь заблокировать %{count} домена из файла %{filename}.
+ many: Вы собираетесь заблокировать %{count} доменов из файла %{filename}.
+ one: Вы собираетесь заблокировать %{count} домен из файла %{filename}.
+ other: Вы собираетесь заблокировать %{count} доменов из файла %{filename}.
+ following_html:
+ few: Вы собираетесь подписаться на %{count} аккаунта из файла %{filename}.
+ many: Вы собираетесь подписаться на %{count} аккаунтов из файла %{filename}.
+ one: Вы собираетесь подписаться на %{count} аккаунт из файла %{filename}.
+ other: Вы собираетесь подписаться на %{count} аккаунтов из файла %{filename}.
+ lists_html:
+ few: Вы собираетесь добавить %{count} аккаунта из файла %{filename} в свои списки. Если соответствующих списков нет, они будут созданы.
+ many: Вы собираетесь добавить %{count} аккаунтов из файла %{filename} в свои списки. Если соответствующих списков нет, они будут созданы.
+ one: Вы собираетесь добавить %{count} аккаунт из файла %{filename} в свои списки. Если соответствующих списков нет, они будут созданы.
+ other: Вы собираетесь добавить %{count} аккаунтов из файла %{filename} в свои списки. Если соответствующих списков нет, они будут созданы.
+ muting_html:
+ few: Вы собираетесь начать игнорировать %{count} аккаунта из файла %{filename}.
+ many: Вы собираетесь начать игнорировать %{count} аккаунтов из файла %{filename}.
+ one: Вы собираетесь начать игнорировать %{count} аккаунт из файла %{filename}.
+ other: Вы собираетесь начать игнорировать %{count} аккаунтов из файла %{filename}.
preface: Вы можете загрузить некоторые данные, например, списки людей, на которых Вы подписаны или которых блокируете, в Вашу учётную запись на этом узле из файлов, экспортированных с другого узла.
recent_imports: Недавно импортированное
states:
@@ -1482,6 +1560,7 @@ ru:
unsubscribe:
action: Да, отписаться
complete: Подписка отменена
+ confirmation_html: Вы точно желаете отписаться от всех уведомления типа «%{type}», доставляемых из сервера Mastodon %{domain} на ваш адрес электронной почты %{email}? Вы всегда сможете подписаться снова в настройках e-mail уведомлений.
emails:
notification_emails:
favourite: любимые электронные письма с уведомлениями
@@ -1727,6 +1806,7 @@ ru:
delete: Удаление учётной записи
development: Разработчикам
edit_profile: Изменить профиль
+ export: Экспорт
featured_tags: Избранные хэштеги
import: Импорт
import_and_export: Импорт и экспорт
diff --git a/config/locales/sc.yml b/config/locales/sc.yml
index 9ab62cea71..09f8ba0e0e 100644
--- a/config/locales/sc.yml
+++ b/config/locales/sc.yml
@@ -582,7 +582,7 @@ sc:
open: Aberi sa publicatzione
original_status: Publicatzione originale
status_changed: Publicatzione modificada
- title: Istados de su contu
+ title: Istados de su contu - @%{name}
trending: Populares
visibility: Visibilidade
with_media: Cun elementos multimediales
diff --git a/config/locales/sco.yml b/config/locales/sco.yml
index 8cc733a4ac..55e0603d45 100644
--- a/config/locales/sco.yml
+++ b/config/locales/sco.yml
@@ -713,7 +713,7 @@ sco:
original_status: Original post
reblogs: Reblogs
status_changed: Post chynged
- title: Accoont posts
+ title: Accoont posts - @%{name}
trending: Trendin
visibility: Visibility
with_media: Wi media
diff --git a/config/locales/si.yml b/config/locales/si.yml
index 270e0ae3fc..b0eb1d3b0c 100644
--- a/config/locales/si.yml
+++ b/config/locales/si.yml
@@ -607,7 +607,7 @@ si:
open: ලිපිය අරින්න
original_status: මුල් ලිපිය
status_changed: ලිපිය සංශෝධිතයි
- title: ගිණුමේ ලිපි
+ title: ගිණුමේ ලිපි - @%{name}
trending: නැගී එන
with_media: මාධ්ය සමඟ
strikes:
diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml
index b591cdca57..f5be51f9c3 100644
--- a/config/locales/simple_form.ar.yml
+++ b/config/locales/simple_form.ar.yml
@@ -3,14 +3,12 @@ ar:
simple_form:
hints:
account:
- attribution_domains_as_text: يحمي من الإسناد الزائف.
discoverable: يمكن عرض مشاركاتك العامة وملفك الشخصي أو التوصية به في مختلف مناطق ماستدون ويمكن اقتراح ملفك الشخصي على مستخدمين آخرين.
display_name: اسمك الكامل أو اسمك المرح.
fields: صفحتك الرئيسية، ضمائرك، عمرك، أي شيء تريده.
indexable: قد تظهر منشوراتك الموجهة للعامة في نتائج البحث على ماستدون. فالأشخاص الذين تفاعلوا مع منشوراتك قد يكون بمقدورهم البحث عنها بغظ النظر عن ذلك.
note: 'يمكنك @ذكر أشخاص آخرين أو استعمال #الوسوم.'
show_collections: سيستطيع الناس من تصفح متابعيك و متابعاتك. سيرى الأشخاص الذين تتبعهم أنك تتبعهم دون أي شك.
- unlocked: سيتمكن الآخرون من متابعتك دون طلب الموافقة. قم بتعطيله إن كنت ترغب في مراجعة تلك الطلبات يدويا باختيار قبول أو رفض المتابعين الجدد.
account_alias:
acct: ادخِل عنون الحساب username@domain الذي تودّ مغادرته
account_migration:
diff --git a/config/locales/simple_form.ast.yml b/config/locales/simple_form.ast.yml
index 5e3f1af89a..997423449d 100644
--- a/config/locales/simple_form.ast.yml
+++ b/config/locales/simple_form.ast.yml
@@ -4,7 +4,6 @@ ast:
hints:
account:
note: 'Pues @mentar a otros perfiles o poner #etiquetes.'
- unlocked: Los perfiles van ser a siguite ensin solicitar la to aprobación. Desmarca esta opción si quies revisar les solicitúes de siguimientu y escoyer si aceptales o refugales.
admin_account_action:
text_html: Opcional. Pues usar la sintaxis de los artículos y amestar alvertencies preconfiguraes p'aforrar tiempu
type_html: Escueyi qué facer con %{acct}
@@ -25,11 +24,11 @@ ast:
password: Usa polo menos 8 caráuteres
setting_aggregate_reblogs: Nun amuesa los artículos compartíos nuevos que yá se compartieren de recién (namás afeuta a los artículos compartíos d'agora)
setting_always_send_emails: Los avisos nun se suelen unviar per corréu electrónicu si uses activamente Mastodon
- setting_default_sensitive: El conteníu multimedia sensible anúbrese por defeutu y pue amosase al calcar nelli
- setting_display_media_default: Anubrilu cuando se marque como sensible
- setting_display_media_hide_all: Anubrilu siempres
- setting_display_media_show_all: Amosalu siempres
- setting_use_blurhash: Los dilíos básense nos colores del conteníu multimedia anubríu mas desenfonca los detalles
+ setting_default_sensitive: El conteníu multimedia sensible escuéndrese por defeutu y pue amosase al calcar nelli
+ setting_display_media_default: Escondelu cuando se marque como sensible
+ setting_display_media_hide_all: Escondelu siempre
+ setting_display_media_show_all: Amosalu siempre
+ setting_use_blurhash: Los dilíos básense nos colores del conteníu multimedia escondíu mas desenfonca los detalles
featured_tag:
name: 'Equí tán dalgunes de les etiquetes qu''usesti apocayá:'
form_admin_settings:
@@ -93,7 +92,7 @@ ast:
expires_in: Caduca dempués de
fields: Campos adicionales
header: Semeya de la testera
- irreversible: Escartar en cuentes d'anubrir
+ irreversible: Escartar en cuentes d'esconder
locale: Llingua de la interfaz
max_uses: Númberu máximu d'usos
new_password: Contraseña nueva
@@ -103,24 +102,24 @@ ast:
phrase: Pallabra clave o fras
setting_advanced_layout: Activar la interfaz web avanzada
setting_aggregate_reblogs: Agrupar los artículos compartíos nes llinies de tiempu
- setting_always_send_emails: Unviar siempres los avisos per corréu electrónicu
+ setting_always_send_emails: Unviar siempre los avisos per corréu electrónicu
setting_auto_play_gif: Reproducir automáticamente los GIFs
setting_boost_modal: Amosar el diálogu de confirmación enantes de compartir un artículu
setting_default_language: Llingua de los artículos
setting_default_privacy: Privacidá de los artículos
- setting_default_sensitive: Marcar siempres tol conteníu como sensible
+ setting_default_sensitive: Marcar siempre tol conteníu como sensible
setting_delete_modal: Amosar el diálogu de confirmación enantes de desaniciar un artículu
setting_disable_hover_cards: Desactivar la previsualización de perfiles al pasar el mur penriba
setting_disable_swiping: Desactivar el movimientu de desplazamientu
setting_display_media: Conteníu multimedia
- setting_expand_spoilers: Espander siempres los artículos marcaos con alvertencies de conteníu
- setting_hide_network: Anubrir les cuentes que sigas y te sigan
+ setting_expand_spoilers: Espander siempre los artículos marcaos con alvertencies de conteníu
+ setting_hide_network: Esconder les cuentes que sigas y te sigan
setting_reduce_motion: Amenorgar el movimientu de les animaciones
setting_system_font_ui: Usar la fonte predeterminada del sistema
setting_theme: Estilu del sitiu
setting_trends: Amosar les tendencies de güei
setting_unfollow_modal: Amosar el diálogu de confirmación enantes de dexar de siguir a daquién
- setting_use_blurhash: Facer que'l conteníu multimedia anubríu tenga dilíos coloríos
+ setting_use_blurhash: Facer que'l conteníu multimedia escondíu tenga dilíos coloríos
setting_use_pending_items: Mou lentu
severity: Gravedá
sign_in_token_attempt: Códigu de seguranza
diff --git a/config/locales/simple_form.be.yml b/config/locales/simple_form.be.yml
index db6a94f8eb..d7be72b876 100644
--- a/config/locales/simple_form.be.yml
+++ b/config/locales/simple_form.be.yml
@@ -9,7 +9,6 @@ be:
indexable: Вашыя публічныя допісы могуць з'яўляцца ў рэзультатах пошуку Mastodon. Людзі, якія ўзаемадзейнічалі з вашымі допісамі, усё роўна маюць магчымасць іх знаходзіць.
note: 'Вы можаце @згадаць іншых людзей або выкарыстоўваць #хэштэгі.'
show_collections: Людзі змогуць праглядаць спіс вашых падпісак і падпісчыкаў. Людзі, на якіх вы падпісаны ў любым выпадку будуць бачыць, што вы іх чытаеце.
- unlocked: Людзі змогуць сачыць за вамі, не запытваючы пацвярджэння. Зніміце сцяжок, калі вы хочаце праглядаць запыты на падпіску і выбіраць, прымаць ці адхіляць новых падпісчыкаў.
account_alias:
acct: Прызначце карыстальнік@дамен уліковага запісу з якога вы хочаце пераехаць
account_migration:
diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml
index 7b7d92995b..17b7bd6239 100644
--- a/config/locales/simple_form.bg.yml
+++ b/config/locales/simple_form.bg.yml
@@ -3,14 +3,14 @@ bg:
simple_form:
hints:
account:
- attribution_domains_as_text: Защитава от фалшиви атрибути.
+ attribution_domains_as_text: Едно на ред. Защитава от фалшиви атрибути.
discoverable: Вашите публични публикации и профил може да се представят или препоръчват в различни области на Mastodon и вашия профил може да се предлага на други потребители.
display_name: Вашето пълно име или псевдоним.
fields: Вашата начална страница, местоимения, години, всичко що искате.
indexable: Вашите обществени публикации може да се появят в резултатите от търсене в Mastodon. Взаимодействалите с публикациите ви може да ги търсят независимо.
note: 'Може да @споменавате други хора или #хаштагове.'
show_collections: Хората ще може да разглеждат през вашите последвания и последователи. Хората, които сте следвали, ще видят, че ги следвате независимо от това.
- unlocked: Хората ще могат да ви последват без изискване на одобрение. Размаркирайте, ако искате да преглеждате заявките за последване и изберете дали да приемете или отхвърлите новите последователи.
+ unlocked: Хората ще могат да ви последват без изискване на одобрение. Размаркирайте, ако искате да преглеждате заявките за последване и избирате дали да приемете или отхвърлите новите последователи.
account_alias:
acct: Посочете потребителско_име@домейн на акаунта си, от който искате да се преместите
account_migration:
@@ -144,7 +144,7 @@ bg:
url: До къде ще се изпращат събитията
labels:
account:
- attribution_domains_as_text: Позволяване само на особени уебсайтове
+ attribution_domains_as_text: Уебсайтове, на които е позволено да приписват авторството ви
discoverable: Включване на профил и публикации в алгоритмите за откриване
fields:
name: Етикет
diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml
index 7b651470bf..defb13325b 100644
--- a/config/locales/simple_form.ca.yml
+++ b/config/locales/simple_form.ca.yml
@@ -3,14 +3,13 @@ ca:
simple_form:
hints:
account:
- attribution_domains_as_text: Protegeix de falses atribucions.
discoverable: El teu perfil i els teus tuts públics poden aparèixer o ser recomanats en diverses àreas de Mastodon i el teu perfil pot ser suggerit a altres usuaris.
display_name: El teu nom complet o el teu nom divertit.
fields: La teva pàgina d'inici, pronoms, edat, el que vulguis.
indexable: Els teus tuts públics poden aparèixer en els resultats de cerca de Mastodon. Les persones que han interaccionat amb el teus tuts seran sempre capaços de cercar-los.
note: 'Pots @mencionar altra gent o #etiquetes.'
show_collections: La gent podrà navegar pels teus seguits i seguidors. Qui segueixis sí que veurà que els segueixes.
- unlocked: La gent serà capaç de seguir-te sense sol·licitar-ho. Desmarca si vols revisar les sol·licituds i triar si acceptes o no els nous seguidors.
+ unlocked: Us podran seguir sense la vostra aprovació. Desmarqueu si voleu moderar les peticions de seguiment i decidir quines autoritzeu o denegueu.
account_alias:
acct: Especifica l'usuari@domini del compte des d'on et vols traslladar
account_migration:
@@ -144,7 +143,6 @@ ca:
url: On els esdeveniments seran enviats
labels:
account:
- attribution_domains_as_text: Permet només webs específics
discoverable: Permet el perfil i el tuts en els algorismes de descobriment
fields:
name: Etiqueta
diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml
index 6242b1ca6e..ef82b3232a 100644
--- a/config/locales/simple_form.cs.yml
+++ b/config/locales/simple_form.cs.yml
@@ -9,7 +9,6 @@ cs:
indexable: Vaše veřejné příspěvky se mohou objevit ve výsledcích vyhledávání na Mastodonu. Lidé, kteří s vašimi příspěvky interagovaly, je mohou stále vyhledávat.
note: 'Můžete @zmínit jiné osoby nebo #hashtagy.'
show_collections: Lidé budou moci procházet skrz sledující. Lidé, které sledujete, uvidí, že je sledujete bezohledně.
- unlocked: Lidé vás budou moci sledovat, aniž by vás žádali o schválení. Zrušte zaškrtnutí, pokud chcete zkontrolovat požadavky a zvolte, zda přijmete nebo odmítněte nové následovníky.
account_alias:
acct: Zadejte svůj účet, ze kterého se chcete přesunout jinam, ve formátu přezdívka@doména
account_migration:
diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml
index 56d1f873dc..6c21683b07 100644
--- a/config/locales/simple_form.cy.yml
+++ b/config/locales/simple_form.cy.yml
@@ -3,14 +3,14 @@ cy:
simple_form:
hints:
account:
- attribution_domains_as_text: Yn amddiffyn rhag priodoliadau ffug.
+ attribution_domains_as_text: Un i bob llinell. Yn amddiffyn rhag priodoli ffug.
discoverable: Mae'n bosibl y bydd eich postiadau cyhoeddus a'ch proffil yn cael sylw neu'n cael eu hargymell mewn gwahanol feysydd o Mastodon ac efallai y bydd eich proffil yn cael ei awgrymu i ddefnyddwyr eraill.
display_name: Eich enw llawn neu'ch enw hwyl.
fields: Eich tudalen cartref, rhagenwau, oed, neu unrhyw beth.
indexable: Mae'n bosib y bydd eich postiadau cyhoeddus yn ymddangos yng nghanlyniadau chwilio ar Mastodon. Mae'n bosibl y bydd pobl sydd wedi rhyngweithio â'ch postiadau yn dal i allu eu chwilio.
note: 'Gallwch @grybwyll pobl eraill neu #hashnodau.'
show_collections: Bydd pobl yn gallu pori trwy'r rhai rydych yn eu dilyn a'ch dilynwyr. Bydd y bobl rydych chi'n eu dilyn yn gweld eich bod chi'n eu dilyn beth bynnag.
- unlocked: Bydd pobl yn gallu eich dilyn heb ofyn am ganiatâd. Dad-diciwch os ydych am adolygu ceisiadau dilyn a dewis a ydych am dderbyn neu wrthod dilynwyr newydd.
+ unlocked: Bydd pobl yn gallu eich dilyn heb ofyn am gymeradwyaeth. Dad-diciwch os ydych am adolygu ceisiadau i'ch dilyn a dewis a ydych am dderbyn neu wrthod dilynwyr newydd.
account_alias:
acct: Rhowch enwdefnyddiwr@parth y cyfrif y hoffech chi symud ohono
account_migration:
@@ -144,7 +144,7 @@ cy:
url: I ble bydd digwyddiadau'n cael eu hanfon
labels:
account:
- attribution_domains_as_text: Dim ond yn caniatáu gwefannau penodol
+ attribution_domains_as_text: Gwefannau sy'n cael caniatâd i'ch cydnabod chi
discoverable: Proffil nodwedd a phostiadau mewn algorithmau darganfod
fields:
name: Label
diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml
index e7b8fe337a..32e8e90b85 100644
--- a/config/locales/simple_form.da.yml
+++ b/config/locales/simple_form.da.yml
@@ -3,14 +3,14 @@ da:
simple_form:
hints:
account:
- attribution_domains_as_text: Beskytter mod falske tilskrivninger.
+ attribution_domains_as_text: Ét pr. linje. Beskytter mod falske tilskrivninger.
discoverable: Dine offentlige indlæg og profil kan blive fremhævet eller anbefalet i forskellige områder af Mastodon, og profilen kan blive foreslået til andre brugere.
display_name: Dit fulde navn eller dit sjove navn.
fields: Din hjemmeside, dine pronominer, din alder, eller hvad du har lyst til.
indexable: Dine offentlige indlæg vil kunne vises i Mastodon-søgeresultater. Folk, som har interageret med dem, vil kunne finde dem uanset.
note: 'Du kan @omtale andre personer eller #hashtags.'
show_collections: Folk vil ikke kunne tjekke dine Følger og Følgere. Folk, du selv følger, vil stadig kunne se dette.
- unlocked: Folk vil kunne følge dig uden krav om godkendelse. Fjern markeringen, såfremt du ønsker at tjekke Følg-anmodninger og individuelt acceptere eller afvise nye Følgere.
+ unlocked: Man vil kunne følges af folk uden først at godkende dem. Ønsker man at gennemgå Følg-anmodninger og individuelt acceptere/afvise nye følgere, så fjern markeringen.
account_alias:
acct: Angiv brugernavn@domain for den konto, hvorfra du vil flytte
account_migration:
@@ -144,7 +144,7 @@ da:
url: Hvor begivenheder sendes til
labels:
account:
- attribution_domains_as_text: Tillad kun bestemte websteder
+ attribution_domains_as_text: Websteder, man må krediteres af
discoverable: Fremhæv profil og indlæg i opdagelsesalgoritmer
fields:
name: Etiket
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index f7e55f1a7b..08d5331151 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -3,7 +3,7 @@ de:
simple_form:
hints:
account:
- attribution_domains_as_text: Dadurch können falsche Zuschreibungen unterbunden werden.
+ attribution_domains_as_text: Eine Domain pro Zeile. Dadurch können falsche Zuschreibungen unterbunden werden.
discoverable: Deine öffentlichen Beiträge und dein Profil können in verschiedenen Bereichen auf Mastodon angezeigt oder empfohlen werden und dein Profil kann anderen vorgeschlagen werden.
display_name: Dein richtiger Name oder dein Fantasiename.
fields: Deine Website, Pronomen, dein Alter – alles, was du möchtest.
@@ -144,7 +144,7 @@ de:
url: Wohin Ereignisse gesendet werden
labels:
account:
- attribution_domains_as_text: Nur ausgewählte Websites zulassen
+ attribution_domains_as_text: Websites, die dich anerkennen dürfen
discoverable: Profil und Beiträge in Suchalgorithmen berücksichtigen
fields:
name: Beschriftung
diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml
index d46e764a44..a04db4b228 100644
--- a/config/locales/simple_form.el.yml
+++ b/config/locales/simple_form.el.yml
@@ -3,14 +3,12 @@ el:
simple_form:
hints:
account:
- attribution_domains_as_text: Προστατεύει από ψευδείς ιδιότητες.
discoverable: Οι δημόσιες δημοσιεύσεις και το προφίλ σου μπορεί να εμφανίζονται ή να συνιστώνται σε διάφορους τομείς του Mastodon και το προφίλ σου μπορεί να προτείνεται σε άλλους χρήστες.
display_name: Το πλήρες ή το αστείο σου όνομα.
fields: Η αρχική σου σελίδα, αντωνυμίες, ηλικία, ό,τι θες.
indexable: Οι δημόσιες δημοσιεύσεις σου μπορεί να εμφανιστούν στα αποτελέσματα αναζήτησης στο Mastodon. Άτομα που έχουν αλληλεπιδράσει με τις δημοσιεύσεις σου μπορεί να είναι σε θέση να τις αναζητήσουν όπως και να 'χει.
note: 'Μπορείς να @επισημάνεις άλλα άτομα ή #ετικέτες.'
show_collections: Οι χρήστες θα είναι σε θέση να περιηγηθούν στα άτομα που ακολουθείς και στους ακόλουθούς σου. Άτομα που ακολουθείς θα βλέπουν ότι τους ακολουθείς όπως και να 'χει.
- unlocked: Οι χρήστες θα είναι σε θέση να σε ακολουθήσουν χωρίς να ζητούν έγκριση. Κατάργησε την επιλογή αν θες να αξιολογείς τα αιτήματα ακολούθησης και να επιλέξεις αν θα αποδεχθείς ή απορρίψεις νέους ακόλουθους.
account_alias:
acct: Όρισε το username@domain του λογαριασμού από τον οποίο θέλεις να μετακινηθείς
account_migration:
@@ -144,7 +142,6 @@ el:
url: Πού θα σταλούν τα γεγονότα
labels:
account:
- attribution_domains_as_text: Να επιτρέπονται μόνο συγκεκριμένες ιστοσελίδες
discoverable: Παροχή προφίλ και αναρτήσεων σε αλγορίθμους ανακάλυψης
fields:
name: Περιγραφή
diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml
index b802fd532f..ef252d8aeb 100644
--- a/config/locales/simple_form.en-GB.yml
+++ b/config/locales/simple_form.en-GB.yml
@@ -3,14 +3,12 @@ en-GB:
simple_form:
hints:
account:
- attribution_domains_as_text: Protects from false attributions.
discoverable: Your public posts and profile may be featured or recommended in various areas of Mastodon and your profile may be suggested to other users.
display_name: Your full name or your fun name.
fields: Your homepage, pronouns, age, anything you want.
indexable: Your public posts may appear in search results on Mastodon. People who have interacted with your posts may be able to search them regardless.
note: 'You can @mention other people or #hashtags.'
show_collections: People will be able to browse through your follows and followers. People that you follow will see that you follow them regardless.
- unlocked: People will be able to follow you without requesting approval. Uncheck if you want to review follow requests and chose whether to accept or reject new followers.
account_alias:
acct: Specify the username@domain of the account you want to move from
account_migration:
@@ -144,7 +142,6 @@ en-GB:
url: Where events will be sent to
labels:
account:
- attribution_domains_as_text: Only allow specific websites
discoverable: Feature profile and posts in discovery algorithms
fields:
name: Label
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index 8f6137c8c1..f451c780b0 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -3,14 +3,14 @@ en:
simple_form:
hints:
account:
- attribution_domains_as_text: Protects from false attributions.
+ attribution_domains_as_text: One per line. Protects from false attributions.
discoverable: Your public posts and profile may be featured or recommended in various areas of Mastodon and your profile may be suggested to other users.
display_name: Your full name or your fun name.
fields: Your homepage, pronouns, age, anything you want.
indexable: Your public posts may appear in search results on Mastodon. People who have interacted with your posts may be able to search them regardless.
note: 'You can @mention other people or #hashtags.'
show_collections: People will be able to browse through your follows and followers. People that you follow will see that you follow them regardless.
- unlocked: People will be able to follow you without requesting approval. Uncheck if you want to review follow requests and chose whether to accept or reject new followers.
+ unlocked: People will be able to follow you without requesting approval. Uncheck if you want to review follow requests and choose whether to accept or reject new followers.
account_alias:
acct: Specify the username@domain of the account you want to move from
account_migration:
@@ -144,7 +144,7 @@ en:
url: Where events will be sent to
labels:
account:
- attribution_domains_as_text: Only allow specific websites
+ attribution_domains_as_text: Websites allowed to credit you
discoverable: Feature profile and posts in discovery algorithms
fields:
name: Label
diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml
index cb4a9041e8..f39eb18f61 100644
--- a/config/locales/simple_form.eo.yml
+++ b/config/locales/simple_form.eo.yml
@@ -3,14 +3,14 @@ eo:
simple_form:
hints:
account:
- attribution_domains_as_text: Protektas kontraŭ falsaj atribuoj.
+ attribution_domains_as_text: Unu por linio. Protektas kontraŭ falsaj atribuoj.
discoverable: Viaj publikaj afiŝoj kaj profilo povas esti prezentitaj aŭ rekomenditaj en diversaj lokoj de Mastodon kaj via profilo povas esti proponita al aliaj uzantoj.
display_name: Via plena nomo aŭ via kromnomo.
fields: Via retpaĝo, pronomoj, aĝo, ĉio, kion vi volas.
indexable: Viaj publikaj afiŝoj povas aperi en serĉrezultoj ĉe Mastodon. Homoj, kiuj interagis kun viaj afiŝoj, eble povos serĉi ilin sendepende.
note: 'Vi povas @mencii aliajn homojn aŭ #haŝetikedoj.'
show_collections: Homoj povos foliumi viajn sekvatojn kaj sekvantojn. Homoj, kiujn vi sekvas, vidos, ke vi sekvas ilin ĉiaokaze.
- unlocked: Homoj povos sekvi vin sen peto de aprobo. Malelektu se vi volas kontroli petojn de sekvado kaj elekti, ĉu akcepti aŭ malakcepti novajn sekvantojn.
+ unlocked: Homoj povos sekvi vin sen peti aprobon. Malmarku ĉu vi volas revizii sekvajn petojn kaj elektu ĉu akcepti aŭ malakcepti novajn sekvantojn.
account_alias:
acct: Specifu la uzantnomon@domajnon de la konto el kiu vi volas translokiĝi
account_migration:
@@ -40,12 +40,14 @@ eo:
text: Oni povas apelaci strikin nur unufoje
defaults:
autofollow: Homoj, kiuj registriĝos per la invito aŭtomate sekvos vin
+ avatar: WEBP, PNG, GIF aŭ JPG. Maksimume %{size}. Malgrandiĝos al %{dimensions}px
bot: Tiu konto ĉefe faras aŭtomatajn agojn, kaj povas esti ne kontrolata
context: Unu ol pluraj kuntekstoj kie la filtrilo devus agi
current_password: Pro sekuraj kialoj, bonvolu enigi la pasvorton de la nuna konto
current_username: Por konfirmi, bonvolu enigi la uzantnomon de la nuna konto
digest: Sendita nur post longa tempo de neaktiveco, kaj nur se vi ricevis personan mesaĝon en via foresto
email: Vi ricevos konfirman retpoŝton
+ header: WEBP, PNG, GIF aŭ JPG. Maksimume %{size}. Malgrandiĝos al %{dimensions}px
inbox_url: Kopiu la URL de la ĉefpaĝo de la ripetilo, kiun vi volas uzi
irreversible: La filtritaj mesaĝoj malaperos por eterne, eĉ se la filtrilo poste estas forigita
locale: La lingvo de la fasado, retpoŝtaĵoj, kaj sciigoj
@@ -76,11 +78,15 @@ eo:
warn: Kaŝi la enhavon filtritan malantaŭ averto mencianta la nomon de la filtro
form_admin_settings:
activity_api_enabled: Nombroj de loke publikigitaj afiŝoj, aktivaj uzantoj kaj novaj registradoj en semajnaj siteloj
+ app_icon: WEBP, PNG, GIF aŭ JPG. Anstataŭigas la defaŭltan aplikaĵan bildsimbolon sur porteblaj aparatoj kun propra bildsimbolo.
+ backups_retention_period: Uzantoj havas la kapablon generi arkivojn de siaj afiŝoj por elŝuti poste. Kiam estas agordita al pozitiva valoro, ĉi tiuj arkivoj estos aŭtomate forigitaj de via stokado post la specifita nombro da tagoj.
bootstrap_timeline_accounts: Ĉi tiuj kontoj pinglitas al la supro de sekvorekomendoj de novaj uzantoj.
closed_registrations_message: Montrita kiam registroj fermitas
+ content_cache_retention_period: Ĉiuj afiŝoj de aliaj serviloj (inkluzive de diskonigoj kaj respondoj) estos forigitaj post la specifita nombro da tagoj, sen konsidero al iu ajn loka uzantinterago kun tiuj afiŝoj. Ĉi tio inkluzivas afiŝojn, kie loka uzanto markis ĝin kiel legosignojn aŭ ŝatatajn. Privataj mencioj inter uzantoj de malsamaj nodoj ankaŭ estos perditaj kaj neeble restaŭreblaj. Uzo de ĉi tiu agordo estas celita por specialcelaj okazoj kaj rompas multajn uzantajn atendojn kiam efektivigita por ĝenerala uzo.
custom_css: Vi povas meti propajn stilojn en la retversio de Mastodon.
favicon: WEBP, PNG, GIF aŭ JPG. Anstataŭigas la defaŭltan Mastodon-favikono kun propra bildsimbolo.
mascot: Anstatauigi la ilustraĵon en la altnivela retinterfaco.
+ media_cache_retention_period: Amaskomunikilaj dosieroj de afiŝoj faritaj de foraj uzantoj estas konservitaj en kaŝmemoro en via servilo. Kiam agordita al pozitiva valoro, amaskomunikilaro estos forigita post la specifita nombro da tagoj. Se la amaskomunikilaro-datumoj estas petitaj post kiam ĝi estas forigita, ĝi estos re-elŝutita, se la fonta enhavo ankoraŭ disponeblas. Pro limigoj pri kiom ofte ligaj antaŭrigardaj kartoj enketas retejojn de ekstera liveranto, oni rekomendas agordi ĉi tiun valoron al almenaŭ 14 tagoj, aŭ ligaj antaŭrigardaj kartoj ne estos ĝisdatigitaj laŭpostule antaŭ tiu tempo.
peers_api_enabled: Listo de domajnaj nomoj kiujn ĉi tiu servilo renkontis en la fediverso. Neniuj datumoj estas inkluditaj ĉi tie pri ĉu vi federacias kun donita servilo, nur ke via servilo scias pri ĝi. Ĉi tio estas uzata de servoj kiuj kolektas statistikojn pri federacio en ĝenerala signifo.
profile_directory: La profilujo listigas ĉiujn uzantojn kiu volonte malkovrebli.
require_invite_text: Kiam registroj bezonas permanan aprobon, igi la "Kial vi volas aliĝi?" tekstoenigon deviga anstau nedeviga
@@ -138,7 +144,7 @@ eo:
url: Kien eventoj sendotas
labels:
account:
- attribution_domains_as_text: Permesi nur specifajn retejojn
+ attribution_domains_as_text: Retejoj permesitaj krediti vin
discoverable: Elstarigi profilon kaj afiŝojn en eltrovantaj algoritmoj
fields:
name: Etikedo
@@ -243,6 +249,7 @@ eo:
backups_retention_period: Uzantoarkivretendauro
bootstrap_timeline_accounts: Ĉiam rekomendi ĉi tiujn kontojn al novaj uzantoj
closed_registrations_message: Kutima mesaĝo kiam registroj ne estas disponeblaj
+ content_cache_retention_period: Retenperiodo de fora enhavo
custom_css: Propa CSS
favicon: Favorikono
mascot: Propa maskoto
diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml
index d06d09761a..dada648d5a 100644
--- a/config/locales/simple_form.es-AR.yml
+++ b/config/locales/simple_form.es-AR.yml
@@ -3,14 +3,14 @@ es-AR:
simple_form:
hints:
account:
- attribution_domains_as_text: Protege de atribuciones falsas.
+ attribution_domains_as_text: Una por línea. Protege de falsas atribuciones.
discoverable: Tu perfil y publicaciones pueden ser destacadas o recomendadas en varias áreas de Mastodon, y tu perfil puede ser sugerido a otros usuarios.
display_name: Tu nombre completo o tu pseudónimo.
fields: Tu sitio web, pronombres, edad, o lo que quieras.
indexable: Tus mensajes públicos pueden aparecer en los resultados de la búsqueda en Mastodon. La gente que interactuó con tus mensajes puede ser capaz de buscarlos sin importar el momento.
note: 'Podés @mencionar otras cuentas o usar #etiquetas.'
show_collections: La gente podrá navegar a través de tus seguidos y seguidores. Sin embargo, la gente que sigás, sabrá que lo estás haciendo.
- unlocked: La gente podrá seguirte sin solicitar aprobación. Desmarcá si querés revisar las solicitudes de seguimiento y elegir si aceptar o rechazar nuevos seguidores.
+ unlocked: Las personas podrán seguirte sin solicitar aprobación. Desmarca si quieres revisar las solicitudes de seguimiento y elige si quieres aceptar o rechazar nuevos seguidores.
account_alias:
acct: Especificá el nombredeusuario@dominio de la cuenta desde la que querés mudarte
account_migration:
@@ -144,7 +144,7 @@ es-AR:
url: Adónde serán enviados los eventos
labels:
account:
- attribution_domains_as_text: Solo permitir sitios web específicos
+ attribution_domains_as_text: Sitios web autorizados a acreditarte
discoverable: Destacar perfil y mensajes en algoritmos de descubrimiento
fields:
name: Nombre de campo
diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml
index 8c84e35a4d..3c340b3005 100644
--- a/config/locales/simple_form.es-MX.yml
+++ b/config/locales/simple_form.es-MX.yml
@@ -3,14 +3,14 @@ es-MX:
simple_form:
hints:
account:
- attribution_domains_as_text: Protege frente atribuciones fraudulentas.
+ attribution_domains_as_text: Uno por línea. Protege contra atribuciones falsas.
discoverable: Tu perfil y las publicaciones públicas pueden ser destacadas o recomendadas en varias áreas de Mastodon y tu perfil puede ser sugerido a otros usuarios.
display_name: Tu nombre completo o tu nick.
fields: Tu página de inicio, pronombres, edad, todo lo que quieras.
indexable: Tus publicaciones públicas pueden aparecer en los resultados de búsqueda en Mastodon. Las personas que han interactuado con tus publicaciones pueden buscarlas en cualquier momento.
note: 'Puedes @mencionar a otra gente o #hashtags.'
show_collections: Las personas pueden navegar a través de tus seguidos y seguidores. Las personas que te siguen pueden ver que las sigues.
- unlocked: Las personas pueden seguirte sin solicitar la aprobación. No lo selecciones si quieres revisar las solicitudes de seguimiento y elegir si aceptas o rechazas a nuevos seguidores.
+ unlocked: Las personas podrán seguirte sin solicitar aprobación. Desmarca si quieres revisar las solicitudes de seguimiento y elige si quieres aceptar o rechazar nuevos seguidores.
account_alias:
acct: Especifique el nombre de usuario@dominio de la cuenta desde la cual se desea migrar
account_migration:
@@ -144,7 +144,7 @@ es-MX:
url: Donde los eventos serán enviados
labels:
account:
- attribution_domains_as_text: Solo permitir sitios web específicos
+ attribution_domains_as_text: Sitios web autorizados para acreditarte
discoverable: Destacar el perfil y las publicaciones en el algoritmo de descubrimiento
fields:
name: Etiqueta
diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml
index b22701aae7..a0338a3029 100644
--- a/config/locales/simple_form.es.yml
+++ b/config/locales/simple_form.es.yml
@@ -3,14 +3,14 @@ es:
simple_form:
hints:
account:
- attribution_domains_as_text: Protege frente atribuciones fraudulentas.
+ attribution_domains_as_text: Una por línea. Protege de falsas atribuciones.
discoverable: Tu perfil y publicaciones públicas pueden ser destacadas o recomendadas en varias áreas de Mastodon y tu perfil puede ser sugerido a otros usuarios.
display_name: Tu nombre completo o tu apodo.
fields: Tu carta de presentación, pronombres, edad, lo que quieras.
indexable: Tus publicaciones públicas pueden aparecer en los resultados de búsqueda en Mastodon. Las personas que han interactuado con tus publicaciones pueden ser capaces de buscarlas sin importar su visibilidad.
note: Puedes mencionar a otras personas o etiquetas.
show_collections: Las personas podrán navegar a través de tus seguidos y seguidores. Esto no impide que las personas que sigues sepan que las estás siguiendo.
- unlocked: Las personas podrán seguirte sin pedir aprobación. Desmarca si deseas revisar las solicitudes de seguimiento y aceptar o rechazar nuevos seguidores.
+ unlocked: Las personas podrán seguirte sin solicitar aprobación. Desmarca si quieres revisar las solicitudes de seguimiento y elige si quieres aceptar o rechazar nuevos seguidores.
account_alias:
acct: Especifica el nombre_de_usuario@dominio de la cuenta desde donde deseas migrar
account_migration:
@@ -144,7 +144,7 @@ es:
url: Donde los eventos serán enviados
labels:
account:
- attribution_domains_as_text: Solo permitir sitios web específicos
+ attribution_domains_as_text: Sitios web autorizados a acreditarte
discoverable: Destacar perfil y publicaciones en algoritmos de descubrimiento
fields:
name: Etiqueta
diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml
index 8d045cfcfe..690661cd49 100644
--- a/config/locales/simple_form.et.yml
+++ b/config/locales/simple_form.et.yml
@@ -3,14 +3,13 @@ et:
simple_form:
hints:
account:
- attribution_domains_as_text: Kaitseb valede omistuste eest.
+ attribution_domains_as_text: Üks rea peal. See kaitseb pahatahtlike viidete eest.
discoverable: Su profiili ja avalikke postitusi võidakse Mastodoni erinevates piirkondades esile tõsta või soovitada ning su profiili soovitada teistele kasutajatele.
display_name: Su täisnimi või naljanimi.
fields: Su koduleht, sugu, vanus. Mistahes, mida soovid.
indexable: Sinu avalikud postitused võivad ilmuda Mastodoni otsingutulemustes. Inimesed, kes on sinu postitustele reageerinud, saavad neid otsida nii või naa.
note: 'Saad @mainida teisi inimesi või #silte.'
show_collections: Inimesed saavad sirvida su jälgijaid ja jälgitavaid. Inimesed, keda sa jälgid, näevad seda sõltumata häälestuse valikust.
- unlocked: Inimesed saavad sind jälgima hakata kinnitamist taotlemata. Eemalda märge, kui soovid jälgimistaotlusi üle vaadata ja valida, kas nõustuda või keelduda uute jälgijatega.
account_alias:
acct: Sisesta konto kasutajanimi@domeen, mille soovid siia ümber kolida
account_migration:
@@ -144,7 +143,7 @@ et:
url: Kuhu sündmused saadetakse
labels:
account:
- attribution_domains_as_text: Luba vaid kindlad veebilehed
+ attribution_domains_as_text: Sinule viidata lubatud veebilehed
discoverable: Tõsta postitused ja profiil avastamise algoritmides esile
fields:
name: Nimetus
diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml
index 7647e187ec..f6c4f14915 100644
--- a/config/locales/simple_form.eu.yml
+++ b/config/locales/simple_form.eu.yml
@@ -9,7 +9,6 @@ eu:
indexable: Zure argitalpen publikoak bilaketa-emaitzetan ager daitezke Mastodonen. Zure argitalpenekin elkarregin duten jendeak ikusi ahal izango dituzte, hala ere.
note: 'Beste pertsona edo #traola batzuk @aipatu ditzakezu.'
show_collections: Pertsonek zuk jarraitzen dituzunak eta zure jarraitzaileak arakatu ahal izango dute. Jarraitzen dituzun pertsonak jarraitzen dituzula ikusi ahal izando dute, hala ere.
- unlocked: Pertsonek zuri jarraitu ahal izango dizute onarpen-eskaerarik gabe. Desgaitu jarraipen-eskaerak berrikusi nahi badituzu eta hauek onartu edo ez erabaki nahi baduzu.
account_alias:
acct: Zehaztu migrazioaren jatorri den kontuaren erabiltzailea@domeinua
account_migration:
diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml
index bbb0523b17..9872de222f 100644
--- a/config/locales/simple_form.fa.yml
+++ b/config/locales/simple_form.fa.yml
@@ -3,13 +3,13 @@ fa:
simple_form:
hints:
account:
+ attribution_domains_as_text: یکی در هر خط. محافظت از اعتباردهیهای اشتباه.
discoverable: ممکن است نمایه و فرستههای عمومیتان در جاهای مختلف ماستودون نمایانده و توصیه شود و نمایهتان به دیگر کاربران پیشنهاد شود.
display_name: نام کامل یا باحالتان.
fields: صفحهٔ خانگی، تلفّظ، سن و هرچیزی که دوست دارید.
indexable: ممکن است فرستههای عمومیتان در نتیجههای جستوجوی ماستودون ظاهر شود. افرادی که با فرستههایتان تعامل داشتند در هر صورت میتوانند جستوجویشان کنند.
note: 'میتوانید افراد دیگر را @نام برده یا #برچسب بزنید.'
show_collections: افراد خواهند توانست پیگیران و پیگرفته شدههایتان را مرور کنند. افرادی که پیمیگیریدشان در هر صورت خواهند دید که پیمیگیریدشان.
- unlocked: افراد خواهند توانست بدون درخواست تأیید پیبگیرندتان. اگر میخواهید درخواستهای پیگیری را بازبینی کرده و بگزینید که پیگیران جدید را بپذیرید یا رد کنید، علامت را بردارید.
account_alias:
acct: مشخّص کردن username@domain حسابی که میخواهید از آن منتقل شوید
account_migration:
@@ -39,12 +39,14 @@ fa:
text: فقط یک بار میتوانید برای اخطار درخواست تجدیدنظر کنید
defaults:
autofollow: کسانی که از راه دعوتنامه عضو میشوند به طور خودکار پیگیر شما خواهند شد
+ avatar: یکی از قالبهای WEBP، PNG، GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد
bot: این حساب بیشتر به طور خودکار فعالیت میکند و نظارت پیوستهای روی آن وجود ندارد
context: یک یا چند زمینه که پالایه باید در آنها اعمال شود
current_password: به دلایل امنیتی لطفاً گذرواژه این حساب را وارد کنید
current_username: برای تأیید، لطفاً نام کاربری حساب فعلی را وارد کنید
digest: تنها وقتی فرستاده میشود که مدتی طولانی فعالیتی نداشته باشید و در این مدت برای شما پیغام خصوصیای نوشته شده باشد
email: به شما ایمیل تأییدی فرستاده خواهد شد
+ header: یکی از قالبهای WEBP، PNG، GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد
inbox_url: نشانی صفحهٔ اصلی رلهای را که میخواهید به کار ببرید کپی کنید
irreversible: فرستههای پالوده به طور برگشتناپذیری ناپدید میشوند، حتا اگر بعدها پالایه برداشته شود
locale: زبان واسط کاربری، رایانامهها و آگاهیهای ارسالی
@@ -88,6 +90,7 @@ fa:
site_short_description: شرحی کوتاه برای کمک به شناسایی یکتای کارسازتان. چهکسی میگرداندش و برای چه کسیست؟
site_terms: از سیاست محرمانگی خوتان استفاده کرده یا برای استفاده از سیاست پیشگزیده خالی بگذارید. میتواند در قالب مارکدون باشد.
site_title: چگونه مردم ممکن است به کارساز شما علاوه بر نام دامنه آن مراجعه کنند.
+ theme: زمینهای که بینندگان خارج شده و کاربران جدید میبینند.
form_challenge:
current_password: شما در حال ورود به یک منطقهٔ حفاظتشده هستید
imports:
@@ -120,6 +123,7 @@ fa:
url: جایی که رویدادها فرستاده میشوند
labels:
account:
+ attribution_domains_as_text: پابگاههای وبی که اجازهٔ اعتبار دهی به شما را دارند
discoverable: معرّفی نمایه و فرستهها در الگوریتمهای کشف
fields:
name: برچسب
@@ -225,6 +229,7 @@ fa:
bootstrap_timeline_accounts: پیشنهاد همیشگی این حسابها به کاربران جدید
closed_registrations_message: پیام سفارشی هنگام در دسترس نبودن ثبتنامها
custom_css: سبک CSS سفارشی
+ favicon: نمادک
mascot: نشان سفارشی (قدیمی)
media_cache_retention_period: دورهٔ نگهداری انبارهٔ رسانه
peers_api_enabled: انتشار سیاههٔ کارسازهای کشف شده در API
diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml
index 5c85367dbb..8c914295fe 100644
--- a/config/locales/simple_form.fi.yml
+++ b/config/locales/simple_form.fi.yml
@@ -3,7 +3,7 @@ fi:
simple_form:
hints:
account:
- attribution_domains_as_text: Suojaa vääriltä tunnustuksilta.
+ attribution_domains_as_text: Yksi riviä kohti. Suojaa vääriltä tunnustuksilta.
discoverable: Julkisia julkaisujasi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla ja profiiliasi voidaan ehdottaa toisille käyttäjille.
display_name: Koko nimesi tai lempinimesi.
fields: Verkkosivustosi, pronominisi, ikäsi ja mitä ikinä haluatkaan ilmoittaa.
@@ -144,7 +144,7 @@ fi:
url: Mihin tapahtumat lähetetään
labels:
account:
- attribution_domains_as_text: Salli vain tietyt verkkosivustot
+ attribution_domains_as_text: Verkkosivustot, jotka voivat antaa sinulle tunnustusta
discoverable: Pidä profiiliasi ja julkaisujasi esillä löytämisalgoritmeissa
fields:
name: Nimike
diff --git a/config/locales/simple_form.fo.yml b/config/locales/simple_form.fo.yml
index afcd3b39ac..e45183df99 100644
--- a/config/locales/simple_form.fo.yml
+++ b/config/locales/simple_form.fo.yml
@@ -3,7 +3,7 @@ fo:
simple_form:
hints:
account:
- attribution_domains_as_text: Verjir fyri følskum ískoytum.
+ attribution_domains_as_text: Eitt á hvørja reglu. Tað verjir fyri skeivum tilsipingum.
discoverable: Tínir almennu postar og tín vangi kunnu vera drigin fram og viðmæld ymsa staðni í Mastodon og vangin hjá tær kann vera viðmæltur øðrum brúkarum.
display_name: Títt fulla navn og títt stuttliga navn.
fields: Heimasíðan hjá tær, fornøvn, aldur ella hvat tú vil.
@@ -144,7 +144,7 @@ fo:
url: Hvar hendingar verða sendar til
labels:
account:
- attribution_domains_as_text: Loyv einans ávísum heimasíðum
+ attribution_domains_as_text: Heimasíður, sum hava loyvi at sipa til tín
discoverable: Framheva vanga og postar í uppdagingar-algoritmum
fields:
name: Spjaldur
diff --git a/config/locales/simple_form.fr-CA.yml b/config/locales/simple_form.fr-CA.yml
index 90a268f411..d38aeaa414 100644
--- a/config/locales/simple_form.fr-CA.yml
+++ b/config/locales/simple_form.fr-CA.yml
@@ -3,14 +3,12 @@ fr-CA:
simple_form:
hints:
account:
- attribution_domains_as_text: Protège contre les fausses attributions.
discoverable: Vos messages publics et votre profil peuvent être mis en avant ou recommandés dans diverses parties de Mastodon et votre profil peut être suggéré à d’autres utilisateurs.
display_name: Votre nom complet ou votre nom cool.
fields: Votre page d'accueil, pronoms, âge, tout ce que vous voulez.
indexable: Vos messages publics peuvent apparaître dans les résultats de recherche sur Mastodon. Les personnes qui ont interagi avec vos messages peuvent les trouver dans une recherche quoi qu’il arrive.
note: 'Vous pouvez @mentionner d’autres personnes ou des #hashtags.'
show_collections: Les gens pourront voir les personnes que vous suivez ou qui vous suivent. Ceux que vous suivez verront que vous les suivez dans tous les cas.
- unlocked: Les gens pourront vous suivre sans demander d'approbation. Décochez cette option si vous voulez valider les demandes d'abonnement et choisir d'accepter ou de rejeter les nouveaux abonnés.
account_alias:
acct: Spécifiez l’identifiant@domaine du compte que vous souhaitez faire migrer
account_migration:
@@ -144,7 +142,6 @@ fr-CA:
url: Là où les événements seront envoyés
labels:
account:
- attribution_domains_as_text: Autoriser uniquement des sites Web spécifiques
discoverable: Autoriser des algorithmes de découverte à mettre en avant votre profil et vos messages
fields:
name: Étiquette
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
index 370f5c1e46..b601bf0b66 100644
--- a/config/locales/simple_form.fr.yml
+++ b/config/locales/simple_form.fr.yml
@@ -3,14 +3,12 @@ fr:
simple_form:
hints:
account:
- attribution_domains_as_text: Protège contre les fausses attributions.
discoverable: Vos messages publics et votre profil peuvent être mis en avant ou recommandés dans diverses parties de Mastodon et votre profil peut être suggéré à d’autres utilisateurs.
display_name: Votre nom complet ou votre nom rigolo.
fields: Votre page personnelle, vos pronoms, votre âge, ce que vous voulez.
indexable: Vos messages publics peuvent apparaître dans les résultats de recherche sur Mastodon. Les personnes qui ont interagi avec vos messages peuvent les trouver dans une recherche quoi qu’il arrive.
note: 'Vous pouvez @mentionner d’autres personnes ou des #hashtags.'
show_collections: Les gens pourront voir les personnes que vous suivez ou qui vous suivent. Ceux que vous suivez verront que vous les suivez dans tous les cas.
- unlocked: Les gens pourront vous suivre sans demander d'approbation. Décochez cette option si vous voulez valider les demandes d'abonnement et choisir d'accepter ou de rejeter les nouveaux abonnés.
account_alias:
acct: Spécifiez l’identifiant@domaine du compte à partir duquel vous souhaitez migrer
account_migration:
@@ -144,7 +142,6 @@ fr:
url: Là où les événements seront envoyés
labels:
account:
- attribution_domains_as_text: Autoriser uniquement des sites Web spécifiques
discoverable: Autoriser des algorithmes de découverte à mettre en avant votre profil et vos messages
fields:
name: Étiquette
diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml
index 11b56bd50d..6a37a09201 100644
--- a/config/locales/simple_form.fy.yml
+++ b/config/locales/simple_form.fy.yml
@@ -3,14 +3,13 @@ fy:
simple_form:
hints:
account:
- attribution_domains_as_text: Beskermet tsjin net korrekte attribúsjes.
+ attribution_domains_as_text: Ien per rigel. Beskermet tsjin falske attribúsjes.
discoverable: Jo iepenbiere berjochten kinne útljochte wurde op ferskate plakken binnen Mastodon en jo account kin oanrekommandearre wurde oan oare brûkers.
display_name: Jo folsleine namme of in aardige bynamme.
fields: Jo website, persoanlike foarnammewurden, leeftiid, alles wat jo mar kwyt wolle.
indexable: Jo iepenbiere berjochten kinne ferskine yn de sykresultaten op Mastodon. Minsken dy’t reagearre hawwe op jo berjochten kinne se hoe dan ek trochsykje.
note: 'Jo kinne oare minsken @fermelde of #hashtags brûke.'
show_collections: Minsken kinne sjen wa’t jo folgje en wa’t jo folget.
- unlocked: Minsken kinne jo folgje sûnder dêrfoar tastimming freegje te hoegen. Wannear’t jo nije folgers hânmjittich goedkarre wolle, moatte jo dizze opsje deselektearje.
account_alias:
acct: Fermeld de brûkersnamme@domein fan de account fan wêr’t jo ferhúzje wolle
account_migration:
@@ -144,7 +143,7 @@ fy:
url: Wêr’t eveneminten nei ta stjoerd wurde
labels:
account:
- attribution_domains_as_text: Allinnich bepaalde websites tastean
+ attribution_domains_as_text: Websites dy’t jo wurdearring jaan meie
discoverable: Profyl en bydragen yn sykalgoritmen opnimme litte
fields:
name: Label
diff --git a/config/locales/simple_form.ga.yml b/config/locales/simple_form.ga.yml
index 772f996ca6..62d59235bf 100644
--- a/config/locales/simple_form.ga.yml
+++ b/config/locales/simple_form.ga.yml
@@ -3,14 +3,13 @@ ga:
simple_form:
hints:
account:
- attribution_domains_as_text: Cosnaíonn sé ó sannadh bréagach.
+ attribution_domains_as_text: Ceann in aghaidh an líne. Cosnaíonn sé ó sannadh bréagach.
discoverable: Seans go mbeidh do phostálacha poiblí agus do phróifíl le feiceáil nó molta i réimsí éagsúla de Mastodon agus is féidir do phróifíl a mholadh d’úsáideoirí eile.
display_name: D'ainm iomlán nó d'ainm spraoi.
fields: Do leathanach baile, forainmneacha, aois, rud ar bith is mian leat.
indexable: Seans go mbeidh do phostálacha poiblí le feiceáil sna torthaí cuardaigh ar Mastodon. Seans go mbeidh daoine a d’idirghníomhaigh le do phostálacha in ann iad a chuardach beag beann ar.
note: 'Is féidir leat @trá a dhéanamh ar dhaoine eile nó #hashtags.'
show_collections: Beidh daoine in ann brabhsáil trí do seo a leanas agus do leanúna. Feicfidh na daoine a leanann tú go leanann tú iad beag beann ar.
- unlocked: Beidh daoine in ann tú a leanúint gan cead a iarraidh. Díthiceáil an dteastaíonn uait athbhreithniú a dhéanamh ar iarratais leantacha agus roghnaigh cé acu an nglacfaidh nó an diúltóidh tú do leantóirí nua.
account_alias:
acct: Sonraigh ainm@fearann don chuntas ar mhaith leat aistriú uaidh
account_migration:
@@ -144,7 +143,7 @@ ga:
url: An áit a seolfar imeachtaí chuig
labels:
account:
- attribution_domains_as_text: Ná ceadaigh ach láithreáin ghréasáin ar leith
+ attribution_domains_as_text: Tá cead ag suíomhanna Gréasáin creidmheas a thabhairt duit
discoverable: Próifíl gné agus postálacha in halgartaim fionnachtana
fields:
name: Lipéad
diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml
index de585c7a21..4083469b63 100644
--- a/config/locales/simple_form.gd.yml
+++ b/config/locales/simple_form.gd.yml
@@ -3,14 +3,13 @@ gd:
simple_form:
hints:
account:
- attribution_domains_as_text: Dìonadh seo o bhuaidh-aithrisean cearra.
+ attribution_domains_as_text: Loidhne fa leth do gach fear. Dìonaidh seo o iomraidhean meallta.
discoverable: Dh’fhaoidte gun dèid na postaichean poblach ’s a’ phròifil agad a bhrosnachadh no a mholadh ann an caochladh roinnean de Mhastodon agus gun dèid a’ phròifil agad a mholadh do chàch.
display_name: D’ ainm slàn no spòrsail.
fields: An duilleag-dhachaigh agad, roimhearan, aois, rud sam bith a thogras tu.
indexable: Faodaidh na postaichean poblach agad a nochdadh am measg toraidhean luirg air Mastodon. ’S urrainn dhan fheadhainn a rinn eadar-ghabhail leis na postaichean agad lorg annta air a h-uile dòigh.
note: "’S urrainn dhut @iomradh a thoirt air càch no air #tagaicheanHais."
show_collections: "’S urrainn do chàch na dàimhean leantainn agad a rùrachadh. Chì daoine a leanas tu gu bheil thu ’gan leantainn air a h-uile dòigh."
- unlocked: "’S urrainnear do leantainn gun aontachadh iarraidh. Thoir a’ chromag far a’ bhogsa nam bu mhiann leat lèirmheas a dhèanamh air na h-iarrtasan leantainn agus taghadh an aontaich thu ri neach-leantainn ùr no an dhiùlt thu iad."
account_alias:
acct: Sònraich ainm-cleachdaiche@àrainn dhen chunntas a tha thu airson imrich uaithe
account_migration:
@@ -144,7 +143,7 @@ gd:
url: Far an dèid na tachartasan a chur
labels:
account:
- attribution_domains_as_text: Na ceadaich ach làraichean-lìnn sònraichte
+ attribution_domains_as_text: Na làraichean-lìn a dh’fhaodas iomradh a thoirt ort
discoverable: Brosnaich a’ phròifil is postaichean agad sna h-algairimean rùrachaidh
fields:
name: Leubail
diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml
index cddeae5cee..b29a071e80 100644
--- a/config/locales/simple_form.gl.yml
+++ b/config/locales/simple_form.gl.yml
@@ -3,7 +3,7 @@ gl:
simple_form:
hints:
account:
- attribution_domains_as_text: Protéxete de falsas atribucións.
+ attribution_domains_as_text: Un por liña. Protéxete das atribucións falsas.
discoverable: As túas publicacións públicas e perfil poden mostrarse ou recomendarse en varias zonas de Mastodon e o teu perfil ser suxerido a outras usuarias.
display_name: O teu nome completo ou un nome divertido.
fields: Páxina web, pronome, idade, o que ti queiras.
@@ -144,7 +144,7 @@ gl:
url: A onde se enviarán os eventos
labels:
account:
- attribution_domains_as_text: Permitir só os sitios web indicados
+ attribution_domains_as_text: Sitios web que poden acreditarte
discoverable: Perfil destacado e publicacións nos algoritmos de descubrimento
fields:
name: Etiqueta
diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml
index 1feebb0d69..d8d6af5e99 100644
--- a/config/locales/simple_form.he.yml
+++ b/config/locales/simple_form.he.yml
@@ -3,7 +3,7 @@ he:
simple_form:
hints:
account:
- attribution_domains_as_text: הגנה מייחוסים שקריים.
+ attribution_domains_as_text: אחד בכל שורה. יגן מפני יחוס מטעה.
discoverable: הפוסטים והפרופיל שלך עשויים להיות מוצגים או מומלצים באזורים שונים באתר וייתכן שהפרופיל שלך יוצע למשתמשים אחרים.
display_name: שמך המלא או שם הכיף שלך.
fields: עמוד הבית שלך, לשון הפנייה, גיל, וכל מידע אחר לפי העדפתך האישית.
@@ -144,7 +144,7 @@ he:
url: היעד שאליו יישלחו אירועים
labels:
account:
- attribution_domains_as_text: רק אתרים מסויימים יאושרו
+ attribution_domains_as_text: אתרים המורשים לייחס אליך מאמרים
discoverable: הצג משתמש ופוסטים בעמוד התגליות
fields:
name: תווית
diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml
index 383bdd0760..60922b06b5 100644
--- a/config/locales/simple_form.hu.yml
+++ b/config/locales/simple_form.hu.yml
@@ -48,7 +48,7 @@ hu:
digest: Csak hosszú távollét esetén küldődik és csak ha személyes üzenetet kaptál távollétedben
email: Kapsz egy megerősítő e-mailt
header: WEBP, PNG, GIF vagy JPG. Legfeljebb %{size}. Át lesz méretezve %{dimensions} képpontosra.
- inbox_url: Másold ki a használandó relé szerver kezdőoldalának URL-jét
+ inbox_url: Másold ki a használandó továbbító kiszolgáló kezdőoldalának URL-jét
irreversible: A kiszűrt bejegyzések visszafordíthatatlanul eltűnnek, a szűrő későbbi törlése esetén is
locale: A felhasználói felület, e-mailek, push üzenetek nyelve
password: Legalább 8 karakter
@@ -144,7 +144,7 @@ hu:
url: Ahová az eseményket küldjük
labels:
account:
- attribution_domains_as_text: Csak meghatározott weboldalak engedélyezése
+ attribution_domains_as_text: Weboldalak, melyek szerzőként tüntethetnek fel
discoverable: Profil és bejegyzések szerepeltetése a felfedezési algoritmusokban
fields:
name: Címke
@@ -195,7 +195,7 @@ hu:
fields: Profil metaadatai
header: Fejléc
honeypot: "%{label} (ne töltsd ki)"
- inbox_url: Relé inbox-hoz tartozó URL
+ inbox_url: Továbbító inbox-hoz tartozó URL
irreversible: Eldobás elrejtés helyett
locale: Felhasználói felület nyelve
max_uses: Hányszor használható
diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml
index dc5aad57ae..5ac75aafb1 100644
--- a/config/locales/simple_form.ia.yml
+++ b/config/locales/simple_form.ia.yml
@@ -9,7 +9,6 @@ ia:
indexable: Tu messages public pote apparer in le resultatos de recerca sur Mastodon. Le personas qui ha interagite con tu messages pote cercar los in omne caso.
note: 'Tu pote @mentionar altere personas o #hashtags.'
show_collections: Le gente potera percurrer le listas de personas que tu seque e qui te seque. Le personas que tu seque videra que tu les seque in omne caso.
- unlocked: Le personas potera sequer te sin requestar approbation. Dismarca si tu vole revider le requestas de sequimento e seliger si acceptar o rejectar nove sequitores.
account_alias:
acct: Specifica le nomine_de_usator@dominio del conto desde le qual tu vole migrar
account_migration:
@@ -142,7 +141,6 @@ ia:
url: Ubi le eventos essera inviate
labels:
account:
- attribution_domains_as_text: Solmente permitter sitos web specific
discoverable: Evidentiar le profilo e messages in le algorithmos de discoperta
fields:
name: Etiquetta
diff --git a/config/locales/simple_form.ie.yml b/config/locales/simple_form.ie.yml
index 771e341616..56e737172d 100644
--- a/config/locales/simple_form.ie.yml
+++ b/config/locales/simple_form.ie.yml
@@ -9,7 +9,6 @@ ie:
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.'
show_collections: Gente va posser navigar tra tui sequentes e sequitores. Gente quem tu seque va vider que tu seque les sin egarda.
- 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:
diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml
index 5cbbd9d06e..631e7182fd 100644
--- a/config/locales/simple_form.io.yml
+++ b/config/locales/simple_form.io.yml
@@ -3,14 +3,12 @@ io:
simple_form:
hints:
account:
- attribution_domains_as_text: Protektas de falsa akreditaji.
discoverable: Vua publika posti e profilo povas remarkesar o rekomendesar en diferanta parti di Mastodon e vua profilo povas sugestesar ad altra uzanti.
display_name: Vua tota nomo o vua gaya nomo.
fields: Vua retsituo, pronomi, evo, irgo quan vu volas.
indexable: Vua posta publika povos aparar en rezultaji di serchi che Mastodon. Personi qui interagis kun vua posti povos serchar oli irgakaze.
note: 'Vu povas @mencionar altra personi o #hashtagi.'
show_collections: Personi povos navigar tra vua sequati e sequanti. Personi quin vu sequas, vidos ke vu sequas li irgakaze.
- unlocked: Personi povos sequar vu sen demandar aprobo. Deselektez se vu volas revuar sequadodemandi e selektez aceptar o refuzar nova sequati.
account_alias:
acct: Partikulare pozez uzantonomo@domeno di konto quon vua volas ektransferesar
account_migration:
@@ -144,7 +142,6 @@ io:
url: Ibe eventi sendesos
labels:
account:
- attribution_domains_as_text: Nur permisas specifika retsitui
discoverable: Inkluzar profilo e posti en trovado-algoritmi
fields:
name: Etiketo
diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml
index 6f3a4fe8a5..40ae267a06 100644
--- a/config/locales/simple_form.is.yml
+++ b/config/locales/simple_form.is.yml
@@ -3,7 +3,7 @@ is:
simple_form:
hints:
account:
- attribution_domains_as_text: Ver fyrir fölskum tilvísunum í höfunda.
+ attribution_domains_as_text: Eitt á hverja línu. Ver fyrir röngum tilvísunum.
discoverable: Opinberar færslur og notandasnið þitt geta birst eða verið mælt með á hinum ýmsu svæðum í Mastodon auk þess sem hægt er að mæla með þér við aðra notendur.
display_name: Fullt nafn þitt eða eitthvað til gamans.
fields: Heimasíðan þín, fornöfn, aldur eða eitthvað sem þú vilt koma á framfæri.
@@ -144,7 +144,7 @@ is:
url: Hvert atburðir verða sendir
labels:
account:
- attribution_domains_as_text: Einungis leyfa tiltekin vefsvæði
+ attribution_domains_as_text: Vefsvæði sem mega vitna í þig
discoverable: Hafa notandasnið og færslur með í reikniritum leitar
fields:
name: Skýring
diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml
index 7ed4c0d004..b1fb6c3fc1 100644
--- a/config/locales/simple_form.it.yml
+++ b/config/locales/simple_form.it.yml
@@ -3,14 +3,14 @@ it:
simple_form:
hints:
account:
- attribution_domains_as_text: Protegge da false attribuzioni.
+ attribution_domains_as_text: Uno per riga. Protegge da false attribuzioni.
discoverable: I tuoi post pubblici e il tuo profilo potrebbero essere presenti o consigliati in varie aree di Mastodon e il tuo profilo potrebbe essere suggerito ad altri utenti.
display_name: Il tuo nome completo o il tuo soprannome.
fields: La tua homepage, i pronomi, l'età, tutto quello che vuoi.
indexable: I tuoi post pubblici potrebbero apparire nei risultati di ricerca su Mastodon. Le persone che hanno interagito con i tuoi post potrebbero essere in grado di cercarli anche se non hai attivato questa impostazione.
note: 'Puoi @menzionare altre persone o usare gli #hashtags.'
show_collections: Le persone saranno in grado di navigare attraverso i tuoi seguaci e seguaci. Le persone che segui vedranno che li seguirai indipendentemente dalle tue impostazioni.
- unlocked: Le persone saranno in grado di seguirti senza richiedere l'approvazione. Deseleziona se vuoi controllare le richieste di seguirti e scegli se accettare o rifiutare nuovi follower.
+ unlocked: Le persone potranno seguirti senza richiedere l'approvazione. Deseleziona questa opzione, se vuoi rivedere le richieste per poterti seguire e scegliere se accettare o rifiutare i nuovi seguaci.
account_alias:
acct: Indica il nomeutente@dominio dell'account dal quale vuoi trasferirti
account_migration:
@@ -144,7 +144,7 @@ it:
url: Dove gli eventi saranno inviati
labels:
account:
- attribution_domains_as_text: Consenti solo siti web specifici
+ attribution_domains_as_text: Siti web autorizzati ad accreditarti
discoverable: Include il profilo e i post negli algoritmi di scoperta
fields:
name: Etichetta
diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml
index 2c1bd6a084..27e98341cb 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -3,6 +3,7 @@ ja:
simple_form:
hints:
account:
+ attribution_domains_as_text: 1行につき1つずつ入力してください。この設定は関わりのないwebサイトに対して虚偽の帰属表示が行われることを防止する役割があります。
discoverable: プロフィールと公開投稿をMastodonのおすすめやハイライトとしてほかのユーザーに表示することを許可します。
display_name: フルネーム、ハンドルネームなど
fields: ホームページ、代名詞、年齢など何でも構いません。
@@ -130,6 +131,7 @@ ja:
name: 視認性向上などのためにアルファベット大文字小文字の変更のみ行うことができます
user:
chosen_languages: 選択すると、選択した言語の投稿のみが公開タイムラインに表示されるようになります
+ role: そのロールは、ユーザーが持つ権限を制御します。
user_role:
color: UI 全体でロールの表示に使用される色(16進数RGB形式)
highlighted: これによりロールが公開されます。
@@ -142,6 +144,7 @@ ja:
url: イベントの送信先
labels:
account:
+ attribution_domains_as_text: あなたの著者表示を許可するwebサイト
discoverable: アカウントを見つけやすくする
fields:
name: ラベル
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index 00f43177e8..954aa5ff35 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -3,7 +3,7 @@ ko:
simple_form:
hints:
account:
- attribution_domains_as_text: 가짜 기여로부터 보호합니다.
+ attribution_domains_as_text: 한 줄에 하나씩. 가짜 기여로부터 보호합니다.
discoverable: 내 공개 게시물과 프로필이 마스토돈의 다양한 추천 기능에 나타날 수 있고 프로필이 다른 사용자에게 제안될 수 있습니다
display_name: 본명 또는 나를 상징하는 모든 이름
fields: 홈페이지, 호칭, 나이, 뭐든지 적고 싶은 것들
@@ -32,9 +32,9 @@ ko:
warning_preset_id: 선택사항. 틀의 마지막에 임의의 텍스트를 추가 할 수 있습니다
announcement:
all_day: 체크 되었을 경우, 그 시간에 속한 날짜들에만 표시됩니다
- ends_at: 옵션입니다. 공지사항이 이 시간에 자동으로 발행 중지 됩니다
+ ends_at: 선택사항. 공지사항이 이 시간에 자동으로 발행 중지 됩니다
scheduled_at: 공백으로 두면 공지사항이 곧바로 발행 됩니다
- starts_at: 공지사항이 특정한 시간에 종속 될 때를 위한 옵션입니다
+ starts_at: 선택사항. 공지사항이 특정한 시간에 종속 될 때를 위한 옵션입니다
text: 게시물 문법을 사용할 수 있습니다. 공지사항은 사용자의 화면 상단 공간을 차지한다는 것을 명심하세요
appeal:
text: 처벌에 대해 단 한 번만 이의제기를 할 수 있습니다.
@@ -46,7 +46,7 @@ ko:
current_password: 보안을 위해 현재 계정의 암호를 입력해주세요
current_username: 확인을 위해, 현재 계정의 사용자명을 입력해주세요
digest: 오랫동안 활동하지 않았을 때 받은 멘션들에 대한 요약 받기
- email: 확인용 이메일을 보냈습니다.
+ email: 확인용 이메일을 보내게 됩니다
header: WEBP, PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소됨
inbox_url: 사용 할 릴레이 서버의 프론트페이지에서 URL을 복사합니다
irreversible: 필터링 된 게시물은 나중에 필터가 사라지더라도 돌아오지 않게 됩니다
@@ -110,7 +110,7 @@ ko:
invite_request:
text: 이 정보는 신청을 검토하는데 도움을 줄 수 있습니다.
ip_block:
- comment: 필수 아님. 왜 이 규칙을 추가했는지 기억하세요.
+ comment: 선택사항. 왜 이 규칙을 추가했는지 기억하세요.
expires_in: IP 주소는 한정된 자원입니다, 이것들은 가끔 공유 되거나 자주 소유자가 바뀌기도 합니다. 이런 이유로 인해, IP 차단을 영구히 유지하는 것은 추천하지 않습니다.
ip: IPv4 또는 IPv6 주소를 입력하세요. CIDR 문법을 사용해서 모든 범위를 차단할 수도 있습니다. 자기 자신을 잠가버리지 않도록 주의하세요!
severities:
@@ -119,7 +119,7 @@ ko:
sign_up_requires_approval: 새 가입이 승인을 필요로 하도록 합니다
severity: 해당 IP로부터의 요청에 대해 무엇이 일어나게 할 지 고르세요
rule:
- hint: 옵션사항. 규칙에 대한 더 상세한 정보를 제공하세요
+ hint: 선택사항. 규칙에 대한 더 상세한 정보를 제공하세요
text: 이 서버 사용자들이 지켜야 할 규칙과 요구사항을 설명해주세요. 짧고 간단하게 작성해주세요
sessions:
otp: '휴대전화에서 생성된 이중 인증 코드를 입력하거나, 복구 코드 중 하나를 사용하세요:'
@@ -144,7 +144,7 @@ ko:
url: 이벤트가 어디로 전송될 지
labels:
account:
- attribution_domains_as_text: 특정 웹사이트만 허용하기
+ attribution_domains_as_text: 나를 기여자로 올릴 수 있도록 허용된 웹사이트들
discoverable: 발견하기 알고리즘에 프로필과 게시물을 추천하기
fields:
name: 라벨
diff --git a/config/locales/simple_form.lad.yml b/config/locales/simple_form.lad.yml
index 94e387107a..de37005312 100644
--- a/config/locales/simple_form.lad.yml
+++ b/config/locales/simple_form.lad.yml
@@ -307,6 +307,7 @@ lad:
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 lokalmente
user:
role: Rolo
time_zone: Zona de tiempo
diff --git a/config/locales/simple_form.lt.yml b/config/locales/simple_form.lt.yml
index 5d3a02993b..77482d8012 100644
--- a/config/locales/simple_form.lt.yml
+++ b/config/locales/simple_form.lt.yml
@@ -3,14 +3,14 @@ lt:
simple_form:
hints:
account:
- attribution_domains_as_text: Apsaugo nuo klaidingų atributų.
+ attribution_domains_as_text: Po vieną eilutėje. Apsaugo nuo klaidingų atributų.
discoverable: Tavo vieši įrašai ir profilis gali būti rodomi arba rekomenduojami įvairiose Mastodon vietose, o profilis gali būti siūlomas kitiems naudotojams.
display_name: Tavo pilnas vardas arba smagus vardas.
fields: Tavo pagrindinis puslapis, įvardžiai, amžius, bet kas, ko tik nori.
indexable: Tavo vieši įrašai gali būti rodomi Mastodon paieškos rezultatuose. Žmonės, kurie bendravo su tavo įrašais, gali jų ieškoti nepriklausomai nuo to.
note: 'Gali @paminėti kitus žmones arba #saitažodžius.'
show_collections: Žmonės galės peržiūrėti tavo sekimus ir sekėjus. Žmonės, kuriuos seki, matys, kad juos seki, nepaisant to.
- unlocked: Žmonės galės tave sekti nepaprašę patvirtinimo. Panaikink žymėjimą, jei nori peržiūrėti sekimo prašymus ir pasirinkti, ar priimti, ar atmesti naujus sekėjus.
+ unlocked: Žmonės galės jus sekti nepaprašę patvirtinimo. Panaikinkite žymėjimą, jei norite peržiūrėti sekimo prašymus ir pasirinkti, ar priimti, ar atmesti naujus sekėjus.
account_alias:
acct: Nurodyk paskyros, iš kurios nori perkelti, naudotojo vardą@domeną
account_migration:
@@ -107,7 +107,7 @@ lt:
role: Vaidmuo valdo, kokius leidimus naudotojas turi.
labels:
account:
- attribution_domains_as_text: Leisti tik konkrečias svetaines
+ attribution_domains_as_text: Svetainės, kuriuose leidžiama jus nurodyti
discoverable: Rekomenduoti profilį ir įrašus į atradimo algoritmus
indexable: Įtraukti viešus įrašus į paieškos rezultatus
show_collections: Rodyti sekimus ir sekėjus profilyje
diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml
index 523e9a5fcc..2f4a05dca4 100644
--- a/config/locales/simple_form.lv.yml
+++ b/config/locales/simple_form.lv.yml
@@ -3,14 +3,14 @@ lv:
simple_form:
hints:
account:
- attribution_domains_as_text: Aizsargā no nepatiesa attiecinājuma.
+ attribution_domains_as_text: Viens katrā līnijā. Aizsargā no nepatiesa attiecinājuma.
discoverable: Tavas publiskās ziņas un profils var tikt piedāvāti vai ieteikti dažādās Mastodon vietās, un tavs profils var tikt ieteikts citiem lietotājiem.
display_name: Tavs pilnais vārds vai tavs joku vārds.
fields: Tava mājas lapa, vietniekvārdi, vecums, viss, ko vēlies.
indexable: Tavi publiskie ieraksti var tikt parādīti Mastodon meklēšanas iznākumā. Cilvēki, kuri ir mijiedarbojušies ar Taviem ierakstiem, var tos meklēt neatkarīgi no tā.
note: 'Tu vari @minēt citus cilvēkus vai #mirkļbirkas.'
show_collections: Cilvēki varēs pārlūkot Tavus sekotājus un sekojamos. Cilvēki, kuriem Tu seko, redzēs, ka Tu seko viņiem neatkarīgi no tā.
- unlocked: Cilvēki varēs tev sekot, neprasot apstiprinājumu. Noņem atzīmi, ja vēlies pārskatīt sekošanas pieprasījumus un izvēlēties, pieņemt vai noraidīt jaunus sekotājus.
+ unlocked: Cilvēki varēs Tev sekot bez apstiprinājuma pieprasīšanas. Jānoņem atzīme, ja vēlies pārskatīt sekošanas pieprasījumus un izvēlēties, vai apstiprināt vai noraidīt jaunus sekotājus.
account_alias:
acct: Norādi konta lietotājvārdu@domēnu, no kura vēlies pārvākties
account_migration:
@@ -19,7 +19,7 @@ lv:
text: Vari izmantot ziņu sintaksi, piemēram, URL, atsauces un pieminējumus
title: Neobligāts. Saņēmējam nav redzams
admin_account_action:
- include_statuses: Lietotājs redzēs, kuras ziņas izraisījušas moderācijas darbību vai brīdinājumu
+ include_statuses: Lietotājs redzēs, kuras ziņas izraisījušas satura pārraudzības darbību vai brīdinājumu
send_email_notification: Lietotājs saņems paskaidrojumu par to, kas notika ar viņa kontu
text_html: Neobligāts. Tu vari lietot ziņu sintaksi. Lai ietaupītu laiku, tu vari pievienot brīdinājuma sākotnējos iestatījumus
type_html: Izvēlies, ko darīt ar %{acct}
@@ -61,7 +61,7 @@ lv:
setting_display_media_hide_all: Vienmēr slēpt multividi
setting_display_media_show_all: Vienmēr rādīt multividi
setting_use_blurhash: Pāreju pamatā ir paslēpto uzskatāmo līdzekļu krāsas, bet saturs tiek padarīts neskaidrs
- setting_use_pending_items: Paslēpt laika skalas atjauninājumus aiz klikšķa, nevis automātiski ritini plūsmu
+ setting_use_pending_items: Paslēpt laika skalas atjauninājumus aiz klikšķa, nevis ar automātisku plūsmas ritināšanu
username: Tu vari lietot burtus, ciparus un zemsvītras
whole_word: Ja atslēgvārds vai frāze ir tikai burtciparu, tas tiks lietots tikai tad, ja tas atbilst visam vārdam
domain_allow:
@@ -89,7 +89,7 @@ lv:
media_cache_retention_period: Informācijas nesēju datnes no ierakstiem, kurus ir veikuši attālie lietotāji, tiek kešoti šajā serverī. Kad ir iestatīta apstiprinoša vērtība, informācijas nesēji tiks izdzēsti pēc norādītā dienu skaita. Ja informācijas nesēju dati tiks pieprasīti pēc tam, kad tie tika izdzēsti, tie tiks atkārtoti lejupielādēti, ja avota saturs joprojām būs pieejams. Saišu priekšskatījuma karšu vaicājumu biežuma ierobežojumu dēļ ir ieteicams iestatīt šo vērtību vismaz 14 dienas vai saišu priekšskatījuma kartes netiks atjauninātas pēc pieprasījuma pirms tā laika.
peers_api_enabled: Domēna vārdu saraksts, ar kuriem šis serveris ir saskāries fediversā. Šeit nav iekļauti dati par to, vai tu veic federāciju ar noteiktu serveri, tikai tavs serveris par to zina. To izmanto dienesti, kas apkopo statistiku par federāciju vispārīgā nozīmē.
profile_directory: Profilu direktorijā ir uzskaitīti visi lietotāji, kuri ir izvēlējušies būt atklājami.
- require_invite_text: 'Ja pierakstīšanai nepieciešama manuāla apstiprināšana, izdari tā, lai teksta: “Kāpēc vēlaties pievienoties?” ievade ir obligāta, nevis opcionāla'
+ require_invite_text: Ja nepieciešama pašrocīga apstiprināšana, lai pierakstītos, teksta “Kāpēc vēlies pievienoties?” ievade jāpadara par nepieciešamu, nevis izvēles
site_contact_email: Kā cilvēki var sazināties ar tevi par juridiskiem vai atbalsta jautājumiem.
site_contact_username: Tagad cilvēki var tevi sasniegt Mastodon.
site_extended_description: Jebkura papildu informācija, kas var būt noderīga apmeklētājiem un lietotājiem. Var strukturēt ar Markdown sintaksi.
@@ -144,7 +144,7 @@ lv:
url: Kur notikumi tiks nosūtīti
labels:
account:
- attribution_domains_as_text: Ļaut tikai noteiktas tīmekļvietnes
+ attribution_domains_as_text: Tīmekļvietnes, kurām ir tiesības uzskaitīt Tevi
discoverable: Funkcijas profils un ziņas atklāšanas algoritmos
fields:
name: Marķējums
@@ -183,7 +183,7 @@ lv:
autofollow: Uzaicini sekot tavam kontam
avatar: Profila attēls
bot: Šis ir automatizēts konts
- chosen_languages: Filtrēt valodas
+ chosen_languages: Atlasīt valodas
confirm_new_password: Apstiprināt jauno paroli
confirm_password: Apstiprināt paroli
context: Filtrēt kontekstus
@@ -339,5 +339,5 @@ lv:
text: nepieciešams
title:
sessions:
- webauthn: Lai pierakstītos, izmanto vienu no savām drošības atslēgām
+ webauthn: Lai pieteiktos, jāizmanto viena no savām drošības atslēgām
'yes': Jā
diff --git a/config/locales/simple_form.ms.yml b/config/locales/simple_form.ms.yml
index ecc3588d67..96c6002aa4 100644
--- a/config/locales/simple_form.ms.yml
+++ b/config/locales/simple_form.ms.yml
@@ -9,7 +9,6 @@ ms:
indexable: Kiriman awam anda mungkin muncul dalam hasil carian di Mastodon. Orang yang telah berinteraksi dengan kiriman anda mungkin boleh mencarinya.
note: 'Anda boleh @menyebut orang lain atau #hashtags.'
show_collections: Orang akan dapat menyemak imbas ikutan dan pengikut anda. Orang yang anda ikuti akan melihat bahawa anda tetap mengikuti mereka.
- unlocked: Orang akan dapat mengikuti anda tanpa meminta kelulusan. Nyahtanda jika anda ingin menyemak permintaan ikutan dan pilih sama ada untuk menerima atau menolak pengikut baharu.
account_alias:
acct: Tentukan namapengguna@domain akaun yang ingin anda alihkan daripada
account_migration:
diff --git a/config/locales/simple_form.my.yml b/config/locales/simple_form.my.yml
index abcb11bdaa..474b0f6cb4 100644
--- a/config/locales/simple_form.my.yml
+++ b/config/locales/simple_form.my.yml
@@ -9,7 +9,6 @@ my:
indexable: သင်၏ အများမြင်ပို့စ်များသည် Mastodon ရှိ ရှာဖွေမှုရလဒ်များတွင် ပေါ်လာနိုင်သည်။ သင့်ပို့စ်များမှတစ်ဆင့် အပြန်အလှန်တုံ့ပြန်ပြီး ရှာဖွေနိုင်ပါမည်။
note: 'သင်သည် အခြားသူများ သို့မဟုတ် #hashtag များကို @mention ဖြင့် ဖော်ပြနိုင်သည်။'
show_collections: သင်စောင့်ကြည့်သူများနှင့် သင့်ကိုစောင့်ကြည့်သူများမှတစ်ဆင့် ရှာဖွေနိုင်မည်ဖြစ်သည်။ သင်စောင့်ကြည့်သူများသည် သင်သူတို့ကို မည်သို့စောင့်ကြည့်သည်ကို တွေ့ရလိမ့်မည်။
- unlocked: ခွင့်ပြုချက်မတောင်းဘဲ လူများက သင့်ကိုစောင့်ကြည့်နိုင်ပါမည်။ စောင့်ကြည့်ရန်အတွက် တောင်းဆိုချက်များထားရှိလိုပါက အမှန်ခြစ်ဖြုတ်ပြီး စောင့်ကြည့်သူသစ်များကို လက်ခံခြင်း သို့မဟုတ် ငြင်းပယ်ခြင်းလည်း အမှန်ခြစ်ဖြုတ်နိုင်ပါသည်။
account_alias:
acct: ပြောင်းရွှေ့မည့်အကောင့်မှ username@domain ကို သတ်မှတ်ပါ
account_migration:
diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml
index bf30cdb1bf..2bb31aa0f9 100644
--- a/config/locales/simple_form.nl.yml
+++ b/config/locales/simple_form.nl.yml
@@ -3,7 +3,7 @@ nl:
simple_form:
hints:
account:
- attribution_domains_as_text: Beschermt tegen onjuiste attributies.
+ attribution_domains_as_text: Eén per regel. Beschermt tegen ongeldige attributies.
discoverable: Jouw openbare berichten kunnen worden uitgelicht op verschillende plekken binnen Mastodon en jouw account kan worden aanbevolen aan andere gebruikers.
display_name: Jouw volledige naam of een leuke bijnaam.
fields: Jouw website, persoonlijke voornaamwoorden, leeftijd, alles wat je maar kwijt wilt.
@@ -144,7 +144,7 @@ nl:
url: Waar gebeurtenissen naartoe worden verzonden
labels:
account:
- attribution_domains_as_text: Alleen bepaalde websites toestaan
+ attribution_domains_as_text: Websites doe jou credit mogen geven
discoverable: Jouw account en berichten laten uitlichten door Mastodon
fields:
name: Label
@@ -213,7 +213,7 @@ nl:
setting_default_privacy: Zichtbaarheid van nieuwe berichten
setting_default_sensitive: Media altijd als gevoelig markeren
setting_delete_modal: Vraag voor het verwijderen van een bericht een bevestiging
- setting_disable_hover_cards: Profielvoorbeelden door eroverheen te zweven uitschakelen
+ setting_disable_hover_cards: Hover-kaarten met profielvoorbeelden uitschakelen
setting_disable_swiping: Swipebewegingen uitschakelen
setting_display_media: Mediaweergave
setting_display_media_default: Standaard
diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml
index ddd5ed8995..46b7af4bdb 100644
--- a/config/locales/simple_form.nn.yml
+++ b/config/locales/simple_form.nn.yml
@@ -3,7 +3,7 @@ nn:
simple_form:
hints:
account:
- attribution_domains_as_text: Vernar mot falske krediteringar.
+ attribution_domains_as_text: Ein per line. Vernar mot falske krediteringar.
discoverable: Dei offentlege innlegga dine og profilen din kan dukka opp i tilrådingar på ulike stader på Mastodon, og profilen din kan bli føreslegen for andre folk.
display_name: Ditt fulle namn eller ditt tøysenamn.
fields: Heimesida di, pronomen, alder, eller kva du måtte ynskje.
@@ -137,14 +137,14 @@ nn:
highlighted: Dette gjer rolla synleg offentleg
name: Offentleg namn på rolla, dersom rolla skal visast som eit emblem
permissions_as_keys: Brukarar med denne rolla vil ha tilgang til...
- position: Høgare rolle avgjer konfliktløysing i visse situasjonar. Visse handlingar kan kun utførast på rollar med lågare prioritet
+ position: Høgare rolle avgjer konfliktløysing i visse situasjonar. Visse handlingar kan berre utførast på roller med lågare prioritet
webhook:
events: Vel hendingar å senda
template: Skriv di eiga JSON nyttelast ved å bruka variabel interpolering. La stå tom for standard JSON.
url: Kvar hendingar skal sendast
labels:
account:
- attribution_domains_as_text: Tillat berre visse nettstader
+ attribution_domains_as_text: Nettstader som har lov å kreditera deg
discoverable: Ta med profilen og innlegga i oppdagingsalgoritmar
fields:
name: Merkelapp
diff --git a/config/locales/simple_form.no.yml b/config/locales/simple_form.no.yml
index 73ba17cd4c..fb7a808876 100644
--- a/config/locales/simple_form.no.yml
+++ b/config/locales/simple_form.no.yml
@@ -9,7 +9,6 @@
indexable: Dine offentlige innlegg kan vises i søkeresultat på Mastodon. Personer som har samhandlet med innleggene dine kan finne de uansett.
note: 'Du kan @nevne andre eller #emneknagger.'
show_collections: Folk vil kunne bla gjennom de du følger og dine følgere. Folk du følger vil uansett se at du følger dem.
- unlocked: Folk vil kunne følge deg uten å be om godkjenning. Fjern markeringen om du vil gjennomgå følge-forespørsler og velge om du vil akseptere eller avvise nye følgere.
account_alias:
acct: Spesifiser brukernavn@domene til kontoen du vil flytte fra
account_migration:
diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml
index bb404e56c9..c5ff55c15d 100644
--- a/config/locales/simple_form.pl.yml
+++ b/config/locales/simple_form.pl.yml
@@ -3,7 +3,7 @@ pl:
simple_form:
hints:
account:
- attribution_domains_as_text: Chroni przed fałszywym przypisaniem wpisów.
+ attribution_domains_as_text: Jedna na linię. Chroni przed fałszywym przypisaniem wpisów.
discoverable: Twój profil i publiczne wpisy mogą być promowane lub polecane na Mastodonie i twój profil może być sugerowany innym użytkownikom.
display_name: Twoje imię lub pseudonim.
fields: Co ci się tylko podoba – twoja strona domowa, zaimki, wiek…
@@ -144,7 +144,7 @@ pl:
url: Dokąd będą wysłane zdarzenia
labels:
account:
- attribution_domains_as_text: Zezwól tylko na konkretne strony
+ attribution_domains_as_text: Strony które mogą ci przypisywać autorstwo.
discoverable: Udostępniaj profil i wpisy funkcjom odkrywania
fields:
name: Nazwa
diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml
index 96bc219e8e..0c6be63aaa 100644
--- a/config/locales/simple_form.pt-BR.yml
+++ b/config/locales/simple_form.pt-BR.yml
@@ -3,14 +3,13 @@ pt-BR:
simple_form:
hints:
account:
- attribution_domains_as_text: Protege de atribuições falsas.
+ attribution_domains_as_text: Um por linha. Protege de falsas atribuições.
discoverable: Suas publicações e perfil públicos podem ser destaques ou recomendados em várias áreas de Mastodon, e seu perfil pode ser sugerido a outros usuários.
display_name: Seu nome completo ou apelido.
fields: Sua página inicial, pronomes, idade ou qualquer coisa que quiser.
indexable: Suas publicações públicas podem aparecer nos resultados da pesquisa em Mastodon. As pessoas que interagiram com suas publicações podem conseguir pesquisá-las independentemente disso.
note: 'Você pode @mencionar outras pessoas ou #hashtags.'
show_collections: As pessoas poderão navegar entre os seus seguidores e seguidores. As pessoas que você segue verão que você as segue independentemente disso.
- unlocked: As pessoas poderão te seguir sem pedir aprovação. Desmarque se você deseja revisar pedidos e escolher se aceita ou rejeita novos seguidores.
account_alias:
acct: Especifique o usuário@domínio de onde veio
account_migration:
@@ -144,7 +143,7 @@ pt-BR:
url: Aonde os eventos serão enviados
labels:
account:
- attribution_domains_as_text: Permitir apenas sites específicos
+ attribution_domains_as_text: Sites permitidos para credenciar você
discoverable: Destacar perfil e publicações nos algoritmos de descoberta
fields:
name: Rótulo
diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml
index 3b606df032..a172ed2752 100644
--- a/config/locales/simple_form.pt-PT.yml
+++ b/config/locales/simple_form.pt-PT.yml
@@ -9,7 +9,6 @@ pt-PT:
indexable: As suas mensagens públicas podem aparecer nos resultados da pesquisa no Mastodon. Independentemente disso, as pessoas que interagiram com as suas publicações podem ser capazes de as pesquisar.
note: 'Pode @mencionar outras pessoas ou #hashtags.'
show_collections: As pessoas podem navegar pelas listas das pessoas que segue e dos seus seguidores. Independentemente disso, as pessoas que segue verão que você as segue.
- unlocked: As pessoas podem segui-lo/a sem pedir a sua aprovação. Desmarque se quiser rever os pedidos para seguir e escolher se aceita ou rejeita os novos seguidores.
account_alias:
acct: Especifique o utilizador@domínio da conta de onde você deseja migrar
account_migration:
diff --git a/config/locales/simple_form.ro.yml b/config/locales/simple_form.ro.yml
index 458638ddec..63dcf91343 100644
--- a/config/locales/simple_form.ro.yml
+++ b/config/locales/simple_form.ro.yml
@@ -3,11 +3,14 @@ ro:
simple_form:
hints:
account:
+ attribution_domains_as_text: Una pe linie. Protejează împotriva atribuirilor false.
discoverable: Este posibil ca postările și profilul tău să fie recomandate în diferite zone ale Mastodon, iar profilul tău ar poate fi sugerat altor utilizatori.
+ display_name: Numele dvs. complet sau numele dvs. amuzant.
fields: Pagina ta principală, pronumele tale, vârsta, sau orice îți dorești.
indexable: Postările tale publice pot apărea în rezultatele căutărilor pe Mastodon. Persoanele care au interacționat cu postările tale vor putea să le caute oricând.
note: 'Poți @menționa alte persoane sau #hashtag-uri.'
- unlocked: Alte persoane vă vor putea urmări fără a solicita aprobare. Debifați dacă doriți să revizuiți cererile și să alegeți dacă doriți să acceptați sau să respingeți noii urmăritori.
+ show_collections: Oamenii vor putea să răsfoiască urmăriți și urmăritorii dvs. Oamenii pe care îi urmăriți vor vedea că îi urmăriți indiferent.
+ unlocked: Alte persoane vă vor putea urmări fără a solicita aprobare. Debifați dacă doriți să revizuiți cererile de urmărire și să alegeți dacă doriți să acceptați sau să respingeți noii urmăritori.
account_alias:
acct: Specificați numele de utilizator@domeniu al contului de la care doriți să treceți
account_migration:
@@ -20,6 +23,12 @@ ro:
send_email_notification: Utilizatorul va primi o explicație cu privire la ceea ce sa întâmplat cu contul lui
text_html: Opțional. Poți utiliza sintaxe. Poți adăuga avertismente predefinite pentru a salva timp
type_html: Alege ce se întâmplă cu %{acct}
+ types:
+ disable: Împiedicați utilizatorul să-și folosească contul, dar nu ștergeți sau ascundeți conținutul acestuia.
+ none: Utilizați acest lucru pentru a trimite o avertizare utilizatorului, fără a declanșa nicio altă acțiune.
+ sensitive: Forțează toate atașamentele media ale acestui utilizator să fie marcate ca sensibile.
+ silence: Împiedicați utilizatorul să poată posta cu vizibilitate publică, ascundeți postările și notificările de la persoanele care nu le urmăresc. Închide toate rapoartele pentru acest cont.
+ suspend: Preveniți orice interacțiune din sau către acest cont și ștergeți conținutul acestuia. Reversibil în 30 de zile. Închide toate rapoartele pentru acest cont.
warning_preset_id: Opțional. Poți adăuga text personalizat la sfârșitul presetului
announcement:
all_day: Când este bifat, numai datele intervalului de timp vor fi afișate
@@ -27,6 +36,8 @@ ro:
scheduled_at: Lăsați necompletat pentru a publica anunțul imediat
starts_at: Opțional. În cazul în care anunțul tău este legat de un anumit interval de timp
text: Poți folosi sintaxa de postare. Te rugăm să fii atent la spațiul pe care anunțul îl va ocupa pe ecranul utilizatorului
+ appeal:
+ text: Puteți contesta un avertisment o singură dată
defaults:
autofollow: Persoanele care se înregistrează datorită invitației tale te vor urmări automat
avatar: WEBP, PNG, GIF sau JPG. Cel mult %{size}. Va fi redimensionată la %{dimensions}px
@@ -65,18 +76,64 @@ ro:
actions:
hide: Ascunde complet conținutul filtrat, ca și cum nu ar exista
warn: Ascunde conținutul filtrat în spatele unui avertisment care menționează titlul filtrului
+ form_admin_settings:
+ activity_api_enabled: Numărul de postări publicate local, utilizatori activi și înregistrări noi în grupe săptămânale
+ app_icon: WEBP, PNG, GIF sau JPG. Înlocuiește pictograma implicită a aplicației pe dispozitivele mobile cu o pictogramă personalizată.
+ backups_retention_period: Utilizatorii au posibilitatea de a genera arhive ale postărilor lor pentru a le descărca mai târziu. Când este setat la o valoare pozitivă, aceste arhive vor fi șterse automat din spațiul dvs. de stocare după numărul de zile specificat.
+ bootstrap_timeline_accounts: Aceste conturi vor fi fixate în partea de sus a recomandărilor de urmărire ale noilor utilizatori.
+ closed_registrations_message: Afișat când înscrierile sunt închise
+ content_cache_retention_period: Toate postările de pe alte servere (inclusiv amplificarea și răspunsurile) vor fi șterse după numărul specificat de zile, fără a ține cont de interacțiunea utilizatorului local cu acele postări. Aceasta include postările în care un utilizator local le-a marcat ca marcaje sau favorite. Mențiunile private între utilizatorii din diferite instanțe se vor pierde și vor fi imposibil de restaurat. Utilizarea acestei setări este destinată cazurilor cu scop special și încalcă multe așteptări ale utilizatorilor atunci când este implementată pentru uz general.
+ custom_css: Puteți aplica stiluri personalizate pe versiunea web a Mastodon.
+ favicon: WEBP, PNG, GIF sau JPG. Suprascrie favicon-ul implicit Mastodon cu o pictogramă personalizată.
+ mascot: Suprascrie ilustrația din interfața web avansată.
+ media_cache_retention_period: Fișierele media din postările făcute de utilizatorii la distanță sunt stocate în cache pe serverul dvs. Când este setată la o valoare pozitivă, fișierele media vor fi ștearse după numărul specificat de zile. Dacă datele media sunt solicitate după ce sunt șterse, acestea vor fi re-descărcate, dacă conținutul sursă este încă disponibil. Din cauza restricțiilor cu privire la frecvența cu care cardurile de previzualizare a linkurilor interogează site-urile terțelor părți, se recomandă să setați această valoare la cel puțin 14 zile, sau cardurile de previzualizare a linkurilor nu vor fi actualizate la cerere înainte de această oră.
+ peers_api_enabled: O listă de nume de domenii pe care acest server le-a întâlnit în fediverse. Nu sunt incluse aici date despre dacă vă federați cu un anumit server, doar că serverul dvs. știe despre asta. Acesta este folosit de serviciile care colectează statistici despre federație în sens general.
+ profile_directory: Directorul de profil listează toți utilizatorii care au optat pentru a fi descoperibili.
+ require_invite_text: Când înscrierile necesită aprobare manuală, faceți introducerea textului „De ce doriți să vă alăturați?” obligatorie și nu opțională
+ site_contact_email: Cum vă pot contacta oamenii pentru întrebări juridice sau de asistență.
+ site_contact_username: Cum vă pot contacta oamenii pe Mastodon.
+ site_extended_description: Orice informație suplimentară care poate fi utilă vizitatorilor și utilizatorilor dvs. Poate fi structurată cu sintaxa Markdown.
+ site_short_description: O descriere scurtă pentru a ajuta la identificarea unică a serverului dvs. Cine-l conduce, pentru cine este?
+ site_terms: Utilizați propria politică de confidențialitate sau lăsați necompletat pentru a o utiliza pe cea implicit. Poate fi structurată cu sintaxa Markdown.
+ site_title: Cum se pot referi oamenii la serverul dvs. în afară de numele său de domeniu.
+ status_page_url: URL-ul unei pagini unde oamenii pot vedea starea acestui server în timpul unei întreruperi
+ theme: Tema pe care vizitatorii deconectați și utilizatorii noi o văd.
+ thumbnail: O imagine de aproximativ 2:1 afișată alături de informațiile serverului dvs.
+ timeline_preview: Vizitatorii deconectați vor putea să răsfoiască cele mai recente postări publice disponibile pe server.
+ trendable_by_default: Omiteți revizuirea manuală a conținutului în tendințe. Elementele individuale pot fi în continuare eliminate din tendințe după fapt.
+ trends: Tendințele arată ce postări, hashtag-uri și știri câștigă teren pe serverul dvs.
+ trends_as_landing_page: Afișați conținut în tendințe utilizatorilor deconectați și vizitatorilor în loc de o descriere a acestui server. Necesită ca tendințele să fie activate.
form_challenge:
current_password: Ați intrat într-o zonă securizată
imports:
data: Fișierul CSV exportat de la o altă instanță
invite_request:
text: Acest lucru ne va ajuta să revizuim cererea dvs
+ ip_block:
+ comment: Opțional. Amintiți-vă de ce ați adăugat această regulă.
+ expires_in: Adresele IP sunt o resursă finită, uneori sunt partajate și adesea se schimbă. Din acest motiv, blocurile IP nedefinite nu sunt recomandate.
+ ip: Introduceți o adresă IPv4 sau IPv6. Puteți bloca întregul spectru folosind sintaxa CIDR. Aveți grijă să nu vă blocați!
+ severities:
+ no_access: Blocați accesul la toate resursele
+ sign_up_block: Nu vor fi posibile înscrieri noi
+ sign_up_requires_approval: Înscrierile noi vor necesita aprobarea dvs.
+ severity: Alegeți ce se va întâmpla cu cererile de la acestă adresă IP
+ rule:
+ hint: Opțional. Oferiți mai multe detalii despre regulă
+ text: Descrieți o regulă sau o cerință pentru utilizatorii de pe acest server. Încercați să o faceți scurtă și simplă
sessions:
otp: 'Introdu codul pentru dubla protecție generat de telefonul mobil sau unul din codurile de rezervă:'
+ webauthn: Dacă este o cheie USB, asigurați-vă că o introduceți și, dacă este necesar, atingeți-o.
+ settings:
+ indexable: Pagina dvs. de profil poate apărea în rezultatele căutării pe Google, Bing și altele.
+ show_application: Veți putea întotdeauna să vedeți ce aplicație v-a publicat postarea.
tag:
name: Poți doar să schimbi caseta literelor, de exemplu, pentru a o face mai lizibilă
user:
chosen_languages: Doar postările în limbile selectate vor fi afișate în fluxurile publice
+ role: Rolul controlează ce permisiuni are utilizatorul.
+ user_role:
+ color: Culoare care va fi folosită pentru rol în întreaga interfață, ca RGB în format hexazecimal
labels:
account:
fields:
diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml
index 3ff746451b..37626ff9fd 100644
--- a/config/locales/simple_form.ru.yml
+++ b/config/locales/simple_form.ru.yml
@@ -3,7 +3,7 @@ ru:
simple_form:
hints:
account:
- attribution_domains_as_text: Защищает от ложных атрибуций.
+ attribution_domains_as_text: По одному на строку. Защищает от ложных атрибуций.
discoverable: Ваши публичные сообщения и профиль могут быть показаны или рекомендованы в различных разделах Mastodon, и ваш профиль может быть предложен другим пользователям.
display_name: Ваше полное имя или псевдоним.
fields: Ваша домашняя страница, местоимения, возраст - все, что угодно.
@@ -144,7 +144,7 @@ ru:
url: Куда события будут отправляться
labels:
account:
- attribution_domains_as_text: Разрешить только определенные сайты
+ attribution_domains_as_text: Веб-сайты, которым разрешено ссылаться на вас
discoverable: Профиль и сообщения в алгоритмах обнаружения
fields:
name: Пункт
diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml
index d1ae553c8c..1f1867854e 100644
--- a/config/locales/simple_form.sl.yml
+++ b/config/locales/simple_form.sl.yml
@@ -9,7 +9,6 @@ sl:
indexable: Vaše javne objave se lahko pojavijo v rezultatih iskanja na Mastodonu. Ljudje, ki so bili v interakciji z vašimi objavami, jih bodo lahko iskali ne glede na to.
note: 'Druge osebe lahko @omenite ali #ključnite.'
show_collections: Ljudje bodo lahko brskali po vaših sledilcih in sledenih. Ljudje, ki jim sledite, bodo videli, da jim sledite ne glede na to.
- unlocked: Ljudje vam bodo lahko sledili, ne da bi zahtevali odobritev. Ne potrdite, če želite pregledati prošnje za sledenje, in izbirajte, ali želite nove sledilce sprejeti ali zavrniti.
account_alias:
acct: Določite uporabniškoime@domena računa, od katerega se želite preseliti
account_migration:
diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml
index 169f4a02de..1ca9037e63 100644
--- a/config/locales/simple_form.sq.yml
+++ b/config/locales/simple_form.sq.yml
@@ -3,7 +3,7 @@ sq:
simple_form:
hints:
account:
- attribution_domains_as_text: Mbron nga atribuime të rreme.
+ attribution_domains_as_text: Një për rresht. Kjo mbron nga atribuime të rreme.
discoverable: Postimet dhe profili juaj publik mund të shfaqen, ose rekomandohen në zona të ndryshme të Mastodon-it dhe profili juaj mund të sugjerohet përdoruesve të tjerë.
display_name: Emri juaj i plotë, ose emri juaj lojcak.
fields: Faqja juaj hyrëse, përemra, moshë, ç’të keni qejf.
@@ -144,7 +144,7 @@ sq:
url: Ku do të dërgohen aktet
labels:
account:
- attribution_domains_as_text: Lejo vetëm sajte specifikë
+ attribution_domains_as_text: Sajte të lejuar t’ju japin hakë
discoverable: Profilin dhe postimet bëji objekt të algoritmeve të zbulimit
fields:
name: Etiketë
diff --git a/config/locales/simple_form.sr-Latn.yml b/config/locales/simple_form.sr-Latn.yml
index 1dec901340..fee7600074 100644
--- a/config/locales/simple_form.sr-Latn.yml
+++ b/config/locales/simple_form.sr-Latn.yml
@@ -9,7 +9,6 @@ sr-Latn:
indexable: Vaše javne objave se mogu pojaviti u rezultatima pretrage na Mastodon-u. Ljudi koji su stupili u interakciju sa vašim objavama će možda moći da ih pretražuju.
note: 'Možete da @pomenete druge ljude ili #heš oznake.'
show_collections: Ljudi će moći da pregledaju vaše pratioce i pratioce. Ljudi koje pratite videće da ih pratite.
- unlocked: Ljudi će moći da vas prate bez zahtevanja odobrenja. Opozovite izbor ako želite da pregledate zahteve za praćenje i izaberite da li da prihvatite ili odbijete nove pratioce.
account_alias:
acct: Navedite korisničko_ime@domen naloga sa kojeg želite da se preselite
account_migration:
diff --git a/config/locales/simple_form.sr.yml b/config/locales/simple_form.sr.yml
index 9566e09475..7161627e28 100644
--- a/config/locales/simple_form.sr.yml
+++ b/config/locales/simple_form.sr.yml
@@ -9,7 +9,6 @@ sr:
indexable: Ваше јавне објаве се могу појавити у резултатима претраге на Mastodon-у. Људи који су ступили у интеракцију са вашим објавама ће можда моћи да их претражују.
note: 'Можете да @поменете друге људе или #хеш ознаке.'
show_collections: Људи ће моћи да прегледају ваше пратиоце и пратиоце. Људи које пратите видеће да их пратите.
- unlocked: Људи ће моћи да вас прате без захтевања одобрења. Опозовите избор ако желите да прегледате захтеве за праћење и изаберите да ли да прихватите или одбијете нове пратиоце.
account_alias:
acct: Наведите корисничко_име@домен налога са којег желите да се преселите
account_migration:
diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml
index 297e96a2bd..72c3f000f6 100644
--- a/config/locales/simple_form.sv.yml
+++ b/config/locales/simple_form.sv.yml
@@ -3,6 +3,7 @@ sv:
simple_form:
hints:
account:
+ attribution_domains_as_text: En per rad. Skyddar mot falska attributioner.
discoverable: Dina offentliga inlägg och din profil kan komma att presenteras eller rekommenderas inom olika områden av Mastodon och din profil kan komma att föreslås till andra användare.
display_name: Ditt fullständiga namn eller ditt roliga namn.
fields: Din hemsida, ditt pronomen, din ålder, vadhelst du vill.
@@ -73,7 +74,7 @@ sv:
filters:
action: Välj vilken åtgärd som ska utföras när ett inlägg matchar filtret
actions:
- hide: Dölj det filtrerade innehållet helt (beter sig som om det inte fanns)
+ hide: Dölj det filtrerade innehållet helt, beter sig som om det inte fanns
warn: Dölj det filtrerade innehållet bakom en varning som visar filtrets rubrik
form_admin_settings:
activity_api_enabled: Antalet lokalt publicerade inlägg, aktiva användare och nya registrerade konton per vecka
@@ -143,6 +144,7 @@ sv:
url: Dit händelser kommer skickas
labels:
account:
+ attribution_domains_as_text: Webbplatser som får kreditera dig
discoverable: Presentera profil och inlägg med upptäcktsalgoritmer
fields:
name: Etikett
diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml
index 1ecd672a97..0ba54e26ce 100644
--- a/config/locales/simple_form.th.yml
+++ b/config/locales/simple_form.th.yml
@@ -3,14 +3,13 @@ th:
simple_form:
hints:
account:
- attribution_domains_as_text: ปกป้องจากการระบุแหล่งที่มาที่ผิด
+ attribution_domains_as_text: หนึ่งรายการต่อบรรทัด ปกป้องจากการระบุแหล่งที่มาที่ผิด
discoverable: อาจแสดงหรือแนะนำโพสต์และโปรไฟล์สาธารณะของคุณในพื้นที่ต่าง ๆ ของ Mastodon และอาจเสนอแนะโปรไฟล์ของคุณให้กับผู้ใช้อื่น ๆ
display_name: ชื่อเต็มของคุณหรือชื่อแบบสนุกสนานของคุณ
fields: หน้าแรก, สรรพนาม, อายุของคุณ สิ่งใดก็ตามที่คุณต้องการ
indexable: โพสต์สาธารณะของคุณอาจปรากฏในผลลัพธ์การค้นหาใน Mastodon ผู้คนที่ได้โต้ตอบกับโพสต์ของคุณอาจสามารถค้นหาโพสต์เหล่านั้นได้ไม่ว่าอย่างไรก็ตาม
note: 'คุณสามารถ @กล่าวถึง ผู้คนอื่น ๆ หรือ #แฮชแท็ก'
show_collections: ผู้คนจะสามารถเรียกดูการติดตามและผู้ติดตามของคุณ ผู้คนที่คุณติดตามจะเห็นว่าคุณติดตามเขาไม่ว่าอย่างไรก็ตาม
- unlocked: ผู้คนจะสามารถติดตามคุณได้โดยไม่ต้องขอการอนุมัติ เลิกกาเครื่องหมายหากคุณต้องการตรวจทานคำขอติดตามและเลือกว่าจะยอมรับหรือปฏิเสธผู้ติดตามใหม่
account_alias:
acct: ระบุ username@domain ของบัญชีที่คุณต้องการย้ายจาก
account_migration:
@@ -144,7 +143,7 @@ th:
url: ที่ซึ่งจะส่งเหตุการณ์ไปยัง
labels:
account:
- attribution_domains_as_text: อนุญาตเฉพาะเว็บไซต์ที่เฉพาะเจาะจงเท่านั้น
+ attribution_domains_as_text: เว็บไซต์ที่ได้รับอนุญาตให้ให้เครดิตคุณ
discoverable: แสดงโปรไฟล์และโพสต์ในอัลกอริทึมการค้นพบ
fields:
name: ป้ายชื่อ
diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml
index d90b97bf9b..5aed566626 100644
--- a/config/locales/simple_form.tr.yml
+++ b/config/locales/simple_form.tr.yml
@@ -3,7 +3,7 @@ tr:
simple_form:
hints:
account:
- attribution_domains_as_text: Sahte atıflardan korur.
+ attribution_domains_as_text: Her satırda bir tanesi. Sahte atıflardan korur.
discoverable: Herkese açık gönderileriniz ve profiliniz Mastodon'un çeşitli kısımlarında öne çıkarılabilir veya önerilebilir ve profiliniz başka kullanıcılara önerilebilir.
display_name: Tam adınız veya kullanıcı adınız.
fields: Ana sayfanız, zamirleriniz, yaşınız, istediğiniz herhangi bir şey.
@@ -144,7 +144,7 @@ tr:
url: Olayların gönderileceği yer
labels:
account:
- attribution_domains_as_text: Yalnızca belirli websitelerine izin ver
+ attribution_domains_as_text: Size atıf verebilecek websiteleri
discoverable: Profil ve gönderileri keşif algoritmalarında kullan
fields:
name: Etiket
diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml
index b584a6cada..74dcd3f908 100644
--- a/config/locales/simple_form.uk.yml
+++ b/config/locales/simple_form.uk.yml
@@ -3,7 +3,7 @@ uk:
simple_form:
hints:
account:
- attribution_domains_as_text: Захищає від фальшивих атрибутів.
+ attribution_domains_as_text: Один на рядок. Захищає від фальшивих атрибутів.
discoverable: Ваші дописи та профіль можуть бути рекомендовані в різних частинах Mastodon і ваш профіль може бути запропонований іншим користувачам.
display_name: Ваше повне ім'я або ваш псевдонім.
fields: Ваша домашня сторінка, займенники, вік, все, що вам заманеться.
@@ -144,7 +144,7 @@ uk:
url: Куди надсилатимуться події
labels:
account:
- attribution_domains_as_text: Дозволити лише на певних вебсайтах
+ attribution_domains_as_text: Сайти дозволяють вам вказувати ваше авторство
discoverable: Функції профілю та дописів у алгоритмах виявлення
fields:
name: Мітка
diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml
index 010bb262ad..2b1d84f595 100644
--- a/config/locales/simple_form.vi.yml
+++ b/config/locales/simple_form.vi.yml
@@ -3,7 +3,7 @@ vi:
simple_form:
hints:
account:
- attribution_domains_as_text: Bảo vệ khỏi những sự gán ghép sai.
+ attribution_domains_as_text: Mỗi cái một dòng. Bảo vệ khỏi những sự gán ghép sai.
discoverable: Hồ sơ và tút công khai của bạn được đề xuất cho những người dùng Mastodon khác.
display_name: Tên đầy đủ hoặc biệt danh đều được.
fields: Trang blog của bạn, nghề nghiệp, tuổi hoặc bất cứ thứ gì.
@@ -43,7 +43,7 @@ vi:
avatar: WEBP, PNG, GIF hoặc JPG, tối đa %{size}. Sẽ bị nén xuống %{dimensions}px
bot: Tài khoản này tự động thực hiện các hành động và không được quản lý bởi người thật
context: Chọn những nơi mà bộ lọc sẽ áp dụng
- current_password: Vì mục đích bảo mật, vui lòng nhập mật khẩu của tài khoản hiện tại
+ current_password: Để bảo mật, vui lòng nhập mật khẩu của tài khoản hiện tại
current_username: Để xác nhận, vui lòng nhập tên người dùng của tài khoản hiện tại
digest: Chỉ gửi sau một thời gian dài không hoạt động hoặc khi bạn nhận được tin nhắn (trong thời gian vắng mặt)
email: Bạn sẽ được gửi một email xác minh
@@ -144,7 +144,7 @@ vi:
url: Nơi những sự kiện được gửi đến
labels:
account:
- attribution_domains_as_text: Chỉ cho phép các website đặc biệt
+ attribution_domains_as_text: Các trang web được ghi nhận cho bạn
discoverable: Cho phép khám phá hồ sơ
fields:
name: Nhãn
@@ -290,7 +290,7 @@ vi:
sign_up_requires_approval: Giới hạn đăng ký
severity: Mức độ
notification_emails:
- appeal: Ai đó kháng cáo kiểm duyệt
+ appeal: Ai đó khiếu nại kiểm duyệt
digest: Gửi email định kỳ
favourite: Ai đó thích tút của bạn
follow: Ai đó theo dõi bạn
diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml
index 419cb99abb..5f98d73be6 100644
--- a/config/locales/simple_form.zh-CN.yml
+++ b/config/locales/simple_form.zh-CN.yml
@@ -3,14 +3,14 @@ zh-CN:
simple_form:
hints:
account:
- attribution_domains_as_text: 保护作品免受虚假署名。
+ attribution_domains_as_text: 每行一个域名。这样就可以保护作品免受虚假署名。
discoverable: 您的公开嘟文和个人资料可能会在 Mastodon 的多个位置展示,您的个人资料可能会被推荐给其他用户。
display_name: 你的全名或昵称。
fields: 你的主页、人称代词、年龄,以及任何你想要添加的内容。
indexable: 您的公开嘟文会出现在 Mastodon 的搜索结果中。无论是否勾选,与您的嘟文有过交互的人都可能通过搜索找到它们。
note: '你可以提及 @其他人 或 #标签 。'
show_collections: 人们将能够浏览您的关注和追随者。您关注的人会看到您关注他们。
- unlocked: 人们将能够在不请求批准的情况下关注你。如果你希望审核关注请求并选择接受或拒绝新的粉丝,请取消勾选此项。
+ unlocked: 人们将能够在不请求批准的情况下关注你。如果你希望审核关注请求并选择接受或拒绝新的关注者,请取消勾选此项。
account_alias:
acct: 指定你想要迁移过来的原账号:用户名@站点域名
account_migration:
@@ -144,7 +144,7 @@ zh-CN:
url: 事件将被发往的目的地
labels:
account:
- attribution_domains_as_text: 仅允许特定网站
+ attribution_domains_as_text: 授权展示你的署名的网站
discoverable: 在发现算法中展示你的个人资料和嘟文
fields:
name: 标签
diff --git a/config/locales/simple_form.zh-HK.yml b/config/locales/simple_form.zh-HK.yml
index dd134a58fb..c77de84e4a 100644
--- a/config/locales/simple_form.zh-HK.yml
+++ b/config/locales/simple_form.zh-HK.yml
@@ -9,7 +9,6 @@ zh-HK:
indexable: 你的公開帖文可能會出現在 Mastodon 的搜尋結果中。無論如何,與你帖文互動過的人都能搜尋到它。
note: '你可以 @提及他人 或使用 #主題標籤。'
show_collections: 大家可瀏覽你追蹤的人和你的追蹤者。你追蹤的人無論如何都會看到你追蹤了他們。
- unlocked: 大家毋須獲得批准即可追蹤你。如果你想審核追蹤請求,來接受或拒絕新追蹤者,請取消勾選。
account_alias:
acct: 指定欲移動之帳戶的「使用者名稱@域名」
account_migration:
diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml
index a5bc683634..289a24f122 100644
--- a/config/locales/simple_form.zh-TW.yml
+++ b/config/locales/simple_form.zh-TW.yml
@@ -3,7 +3,7 @@ zh-TW:
simple_form:
hints:
account:
- attribution_domains_as_text: 偽造署名保護。
+ attribution_domains_as_text: 每行一個。以保護偽造署名。
discoverable: 公開嘟文及個人檔案可能於各 Mastodon 功能中被推薦,並且您的個人檔案可能被推薦至其他使用者。
display_name: 完整名稱或暱稱。
fields: 烘培雞、自我認同代稱、年齡,及任何您想分享的。
@@ -144,7 +144,7 @@ zh-TW:
url: 事件會被傳送至何處
labels:
account:
- attribution_domains_as_text: 僅允許特定網站
+ attribution_domains_as_text: 允許對您予與信譽之網站
discoverable: 於探索演算法中推薦個人檔案及嘟文
fields:
name: 標籤
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 399ecc061a..d576bf0382 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -49,6 +49,7 @@ sk:
title: Zmeň email pre %{username}
change_role:
changed_msg: Postavenie úspešne zmenené!
+ edit_roles: Spravuj role užívateľov
label: Zmeň pozíciu
no_role: Žiadna pozícia
title: Zmeň pozíciu pre %{username}
@@ -61,6 +62,7 @@ sk:
demote: Degraduj
destroyed_msg: "%{username} je teraz zaradený do fronty na okamžité vymazanie"
disable: Zablokuj
+ disable_sign_in_token_auth: Vypni overovanie e-mailovým tokenom
disable_two_factor_authentication: Vypni dvoj-faktorové overovanie
disabled: Blokovaný
display_name: Ukáž meno
@@ -69,6 +71,7 @@ sk:
email: Email
email_status: Stav emailu
enable: Povoľ
+ enable_sign_in_token_auth: Povoľ overovania e-mailovým tokenom
enabled: Povolený
enabled_msg: Úspešne rozmrazené konto %{username}
followers: Sledujúci
@@ -681,7 +684,7 @@ sk:
open: Otvor príspevok
original_status: Pôvodný príspevok
status_changed: Príspevok bol zmenený
- title: Príspevky na účte
+ title: Príspevky na účte - @%{name}
trending: Populárne
visibility: Viditeľnosť
with_media: S médiami
@@ -822,6 +825,7 @@ sk:
prefix_invited_by_user: "@%{name} ťa pozýva na tento Mastodon server!"
prefix_sign_up: Zaregistruj sa na Mastodone už dnes!
suffix: S účtom budeš môcť nasledovať ľudí, posielať príspevky, a vymieňať si správy s užívateľmi z hocijakého Mastodon servera a viac!
+ didnt_get_confirmation: Neobdržal/a si odkaz na potvrdenie?
dont_have_your_security_key: Nemáš svoj bezpečnostný kľúč?
forgot_password: Zabudnuté heslo?
invalid_reset_password_token: Token na obnovu hesla vypršal. Prosím vypítaj si nový.
@@ -832,6 +836,7 @@ sk:
migrate_account_html: Ak si želáš presmerovať tento účet na nejaký iný, môžeš si to nastaviť tu.
or_log_in_with: Alebo prihlás s
progress:
+ confirm: Potvrď email
details: Tvoje údaje
rules: Súhlas s pravidlami
register: Zaregistruj sa
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index e9c06bcaa6..6ae239d69f 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -853,7 +853,7 @@ sl:
original_status: Izvorna objava
reblogs: Ponovljeni blogi
status_changed: Objava spremenjena
- title: Objave računa
+ title: Objave računa - @%{name}
trending: V trendu
visibility: Vidnost
with_media: Z mediji
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
index 0b276393a6..b1e2a4f61e 100644
--- a/config/locales/sq.yml
+++ b/config/locales/sq.yml
@@ -21,6 +21,7 @@ sq:
one: Mesazh
other: Mesazhe
posts_tab_heading: Mesazhe
+ self_follow_error: Ndjekja e llogarisë personale nuk lejohet
admin:
account_actions:
action: Kryeje veprimin
@@ -186,6 +187,7 @@ sq:
create_domain_block: Krijo Bllokim Përkatësie
create_email_domain_block: Krijoni Bllokim Përkatësie Email-esh
create_ip_block: Krijoni Rregull IP
+ create_relay: Krijoni Rele
create_unavailable_domain: Krijo Përkatësi të Papërdorshme
create_user_role: Krijoni Rol
demote_user: Zhgradoje Përdoruesin
@@ -197,14 +199,17 @@ sq:
destroy_email_domain_block: Fshini Bllokim Përkatësie Email-esh
destroy_instance: Spastroje Përkatësinë
destroy_ip_block: Fshini Rregull IP
+ destroy_relay: Fshije Relenë
destroy_status: Fshi Gjendje
destroy_unavailable_domain: Fshi Përkatësi të Papërdorshme
destroy_user_role: Asgjësoje Rolin
disable_2fa_user: Çaktivizo 2FA-në
disable_custom_emoji: Çaktivizo Emotikon Vetjak
+ disable_relay: Çaktivizoje Relenë
disable_sign_in_token_auth_user: Çaktivizoni për Përdoruesin Mirëfilltësim Me Token Email-i
disable_user: Çaktivizo Përdorues
enable_custom_emoji: Aktivizo Emotikon Vetjak
+ enable_relay: Aktivizoje Relenë
enable_sign_in_token_auth_user: Aktivizoni për Përdoruesin Mirëfilltësim Me Token Email-i
enable_user: Aktivizo Përdorues
memorialize_account: Bëje Llogari Përkujtimore
@@ -246,6 +251,7 @@ sq:
create_domain_block_html: "%{name} bllokoi përkatësinë %{target}"
create_email_domain_block_html: "%{name} bllokoi përkatësinë email %{target}"
create_ip_block_html: "%{name} krijoi rregull për IP-në %{target}"
+ create_relay_html: "%{name} krijoi një rele %{target}"
create_unavailable_domain_html: "%{name} ndali dërgimin drejt përkatësisë %{target}"
create_user_role_html: "%{name} krijoi rolin %{target}"
demote_user_html: "%{name} zhgradoi përdoruesin %{target}"
@@ -257,14 +263,17 @@ sq:
destroy_email_domain_block_html: "%{name} zhbllokoi përkatësi email %{target}"
destroy_instance_html: "%{name} spastroi përkatësinë %{target}"
destroy_ip_block_html: "%{name} fshiu rregull për IP-në %{target}"
+ destroy_relay_html: "%{name} fshiu relenë %{target}"
destroy_status_html: "%{name} hoqi gjendje nga %{target}"
destroy_unavailable_domain_html: "%{name} rinisi dërgimin drejt përkatësisë %{target}"
destroy_user_role_html: "%{name} fshiu rolin %{target}"
disable_2fa_user_html: "%{name} çaktivizoi domosdoshmërinë për dyfaktorësh për përdoruesin %{target}"
disable_custom_emoji_html: "%{name} çaktivizoi emoxhin %{target}"
+ disable_relay_html: "%{name} çaktivizoi relenë %{target}"
disable_sign_in_token_auth_user_html: "%{name} çaktivizoi mirëfilltësim me token email për %{target}"
disable_user_html: "%{name} çaktivizoi hyrje për përdoruesin %{target}"
enable_custom_emoji_html: "%{name} aktivizoi emoxhin %{target}"
+ enable_relay_html: "%{name} aktivizoi relenë %{target}"
enable_sign_in_token_auth_user_html: "%{name} aktivizoi mirëfilltësim me token email për %{target}"
enable_user_html: "%{name} aktivizoi hyrje për përdoruesin %{target}"
memorialize_account_html: "%{name} e shndërroi llogarinë e %{target} në një faqe përkujtimore"
@@ -644,6 +653,7 @@ sq:
report: 'Raportim #%{id}'
reported_account: Llogari e raportuar
reported_by: Raportuar nga
+ reported_with_application: Raportuar me aplikacion
resolved: I zgjidhur
resolved_msg: Raportimi u zgjidh me sukses!
skip_to_actions: Kaloni te veprimet
@@ -828,7 +838,7 @@ sq:
original_status: Postim origjinal
reblogs: Riblogime
status_changed: Postimi ndryshoi
- title: Gjendje llogarish
+ title: Gjendje llogarish - @%{name}
trending: Në modë
visibility: Dukshmëri
with_media: Me media
@@ -1158,9 +1168,11 @@ sq:
use_security_key: Përdor kyç sigurie
author_attribution:
example_title: Tekst shembull
- hint_html: Kontrolloni se si vlerësoheni, kur ndahen lidhje me të tjerë në Mastodon.
+ hint_html: Shkruani lajme, apo artikuj blogu jashtë Mastodon-it? Kontrolloni se si ju jepet hakë, kur ndahen me të tjerët në Mastodon.
+ instructions: 'Sigurohuni që ky kod të jetë në HTML-në e artikullit tuaj:'
more_from_html: Më tepër nga %{name}
s_blog: Blogu i %{name}
+ then_instructions: Mandej, shtoni te fusha më poshtë emrin e përkatësisë së botimit.
title: Atribuim autorësh
challenge:
confirm: Vazhdo
diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml
index f56cdb9cb5..76a0f8afe9 100644
--- a/config/locales/sr-Latn.yml
+++ b/config/locales/sr-Latn.yml
@@ -807,7 +807,7 @@ sr-Latn:
original_status: Originalna objava
reblogs: Deljenja
status_changed: Objava promenjena
- title: Statusi naloga
+ title: Statusi naloga - @%{name}
trending: U trendu
visibility: Vidljivost
with_media: Sa multimedijom
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 45feb0b5fc..6a75316c23 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -837,7 +837,7 @@ sr:
original_status: Оригинална објава
reblogs: Дељења
status_changed: Објава промењена
- title: Статуси налога
+ title: Статуси налога - @%{name}
trending: У тренду
visibility: Видљивост
with_media: Са мултимедијом
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index 0d19d17c3b..11b37f8bfc 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -21,10 +21,12 @@ sv:
one: Inlägg
other: Inlägg
posts_tab_heading: Inlägg
+ self_follow_error: Det är inte tillåtet att följa ditt eget konto
admin:
account_actions:
action: Utför åtgärd
already_silenced: Detta konto är redan begränsat.
+ already_suspended: Detta konto är redan avstängt.
title: Utför aktivitet för moderering på %{acct}
account_moderation_notes:
create: Lämna kommentar
@@ -57,11 +59,11 @@ sv:
delete: Radera data
deleted: Raderad
demote: Degradera
- destroyed_msg: "%{username}'s data har nu lagts till kön för att raderas omedelbart"
- disable: inaktivera
+ destroyed_msg: "%{username}s data har nu lagts till kön för att raderas omedelbart"
+ disable: Inaktivera
disable_sign_in_token_auth: Inaktivera autentisering med pollett via e-post
disable_two_factor_authentication: Inaktivera 2FA
- disabled: inaktiverad
+ disabled: Inaktiverad
display_name: Visningsnamn
domain: Domän
edit: Redigera
@@ -70,7 +72,7 @@ sv:
enable: Aktivera
enable_sign_in_token_auth: Aktivera autentisering med pollett via e-post
enabled: Aktiverad
- enabled_msg: Uppfrysningen av %{username}'s konto lyckades
+ enabled_msg: Uppfrysningen av %{username}s konto lyckades
followers: Följare
follows: Följs
header: Rubrik
@@ -85,7 +87,7 @@ sv:
remote: Avlägsen
title: Plats
login_status: Inloggningsstatus
- media_attachments: Media bifogade filer
+ media_attachments: Mediebilagor
memorialize: Förvandla till ett memoriam
memorialized: Memorialiserad
memorialized_msg: Omvandlingen av %{username} till ett minneskonto lyckades
@@ -140,7 +142,7 @@ sv:
only_password: Endast lösenord
password_and_2fa: Lösenord och 2FA
sensitive: Känsligt
- sensitized: markerad som känsligt
+ sensitized: Markerad som känsligt
shared_inbox_url: Delad inkorg URL
show:
created_reports: Anmälningar som skapats av det här kontot
@@ -185,6 +187,7 @@ sv:
create_domain_block: Skapa blockerad domän
create_email_domain_block: Skapa E-post domän block
create_ip_block: Skapa IP-regel
+ create_relay: Skapa ombud
create_unavailable_domain: Skapa otillgänglig domän
create_user_role: Skapa roll
demote_user: Degradera användare
@@ -196,14 +199,17 @@ sv:
destroy_email_domain_block: Ta bort E-post domän block
destroy_instance: Rensa domänen
destroy_ip_block: Radera IP-regel
+ destroy_relay: Radera ombud
destroy_status: Radera inlägg
destroy_unavailable_domain: Ta bort otillgänglig domän
destroy_user_role: Förstör roll
disable_2fa_user: Inaktivera 2FA
disable_custom_emoji: Inaktivera egna emojis
+ disable_relay: Inaktivera ombud
disable_sign_in_token_auth_user: Inaktivera autentisering med pollett via e-post för användare
disable_user: Inaktivera användare
enable_custom_emoji: Aktivera egna emojis
+ enable_relay: Aktivera ombud
enable_sign_in_token_auth_user: Aktivera autentisering med pollett via e-post för användare
enable_user: Aktivera användare
memorialize_account: Minnesmärk konto
@@ -245,6 +251,7 @@ sv:
create_domain_block_html: "%{name} blockerade domänen %{target}"
create_email_domain_block_html: "%{name} blockerade e-post domänet%{target}"
create_ip_block_html: "%{name} skapade regel för IP %{target}"
+ create_relay_html: "%{name} skapade ombudet %{target}"
create_unavailable_domain_html: "%{name} stoppade leverans till domänen %{target}"
create_user_role_html: "%{name} skapade rollen %{target}"
demote_user_html: "%{name} nedgraderade användare %{target}"
@@ -256,28 +263,34 @@ sv:
destroy_email_domain_block_html: "%{name} avblockerade e-post domänet %{target}"
destroy_instance_html: "%{name} rensade domän %{target}"
destroy_ip_block_html: "%{name} tog bort regel för IP %{target}"
+ destroy_relay_html: "%{name} tog bort ombudet %{target}"
destroy_status_html: "%{name} tog bort inlägget av %{target}"
destroy_unavailable_domain_html: "%{name} återupptog leverans till domänen %{target}"
destroy_user_role_html: "%{name} raderade rollen %{target}"
disable_2fa_user_html: "%{name} inaktiverade tvåfaktorsautentiseringskrav för användaren %{target}"
disable_custom_emoji_html: "%{name} inaktiverade emoji %{target}"
+ disable_relay_html: "%{name} inaktiverade ombudet %{target}"
+ disable_sign_in_token_auth_user_html: "%{name} inaktiverade e-posttokenautentisering för %{target}"
disable_user_html: "%{name} stängde av inloggning för användaren %{target}"
enable_custom_emoji_html: "%{name} aktiverade emoji %{target}"
+ enable_relay_html: "%{name} aktiverat ombudet %{target}"
+ enable_sign_in_token_auth_user_html: "%{name} aktiverade e-posttokenautentisering för %{target}"
enable_user_html: "%{name} aktiverade inloggning för användaren %{target}"
- memorialize_account_html: "%{name} gjorde %{target}'s konto till en minnessida"
+ memorialize_account_html: "%{name} gjorde %{target}s konto till en minnessida"
promote_user_html: "%{name} befordrade användaren %{target}"
reject_appeal_html: "%{name} avvisade överklagande av modereringsbeslut från %{target}"
reject_user_html: "%{name} avvisade registrering från %{target}"
- remove_avatar_user_html: "%{name} tog bort %{target}'s avatar"
+ remove_avatar_user_html: "%{name} tog bort %{target}s avatar"
reopen_report_html: "%{name} öppnade rapporten igen %{target}"
+ resend_user_html: "%{name} skickade bekräftelsemail för %{target} på nytt"
reset_password_user_html: "%{name} återställ användarens lösenord %{target}"
resolve_report_html: "%{name} löste rapporten %{target}"
- sensitive_account_html: "%{name} markerade %{target}'s media som känsligt"
- silence_account_html: "%{name} begränsade %{target}'s konto"
+ sensitive_account_html: "%{name} markerade %{target}s media som känsligt"
+ silence_account_html: "%{name} begränsade %{target}s konto"
suspend_account_html: "%{name} stängde av %{target}s konto"
unassigned_report_html: "%{name} tog bort tilldelning av rapporten %{target}"
unblock_email_account_html: "%{name} avblockerade %{target}s e-postadress"
- unsensitive_account_html: "%{name} avmarkerade %{target}'s media som känsligt"
+ unsensitive_account_html: "%{name} avmarkerade %{target}s media som känsligt"
unsilence_account_html: "%{name} tog bort begränsning av %{target}s konto"
unsuspend_account_html: "%{name} ångrade avstängningen av %{target}s konto"
update_announcement_html: "%{name} uppdaterade kungörelsen %{target}"
@@ -430,6 +443,7 @@ sv:
attempts_over_week:
one: "%{count} försök under den senaste veckan"
other: "%{count} registreringsförsök under den senaste veckan"
+ created_msg: Blockerade e-postdomänen
delete: Radera
dns:
types:
@@ -438,8 +452,12 @@ sv:
new:
create: Skapa domän
resolve: Slå upp domän
+ title: Blockera ny e-postdomän
+ no_email_domain_block_selected: Inga blockeringar av e-postdomäner ändrades eftersom inga valdes
not_permitted: Ej tillåtet
+ resolved_dns_records_hint_html: Domännamnet ger uppslag till följande MX-domäner, vilka är ytterst ansvariga för att e-post tas emot. Att blockera en MX-domän blockerar även registreringar från alla e-postadresser som använder samma MX-domän, även om det synliga domännamnet är annorlunda. Var noga med att inte blockera stora e-postleverantörer.
resolved_through_html: Uppslagen genom %{domain}
+ title: Blockerade e-postdomäner
export_domain_allows:
new:
title: Importera domäntillåtelser
@@ -532,7 +550,7 @@ sv:
total_followed_by_them: Följs av dem
total_followed_by_us: Följs av oss
total_reported: Rapporter om dem
- total_storage: Media-bilagor
+ total_storage: Mediebilagor
totals_time_period_hint_html: Totalsummorna som visas nedan inkluderar data för all tid.
unknown_instance: Det finns för närvarande inga uppgifter om denna domän på denna server.
invites:
@@ -559,9 +577,9 @@ sv:
no_ip_block_selected: Inga IP-regler ändrades då inga var valda
title: IP-regler
relationships:
- title: "%{acct}'s relationer"
+ title: "%{acct}s relationer"
relays:
- add_new: Lägg till nytt relä
+ add_new: Lägg till nytt ombud
delete: Radera
description_html: Ett federeringsombud är en mellanliggande server som utbyter höga antal offentliga inlägg mellan servrar som prenumererar på och publicerar till det. Det kan hjälpa små och medelstora servrar upptäcka innehåll från fediversumet, vilket annars skulle kräva att lokala användare manuellt följer personer på fjärrservrar.
disable: Inaktivera
@@ -572,10 +590,10 @@ sv:
inbox_url: Ombuds-URL
pending: Väntar på ombudets godkännande
save_and_enable: Spara och aktivera
- setup: Konfigurera en relä-anslutning
- signatures_not_enabled: Ombud fungerar inte korrekt medan säkert läge eller begränsat federeringsläge är aktiverade
+ setup: Konfigurera ett ombud
+ signatures_not_enabled: Ombud fungerar inte korrekt om säkert läge eller begränsat federeringsläge är aktiverade
status: Status
- title: Relä
+ title: Ombud
report_notes:
created_msg: Anmälningsanteckning har skapats!
destroyed_msg: Anmälningsanteckning har raderats!
@@ -593,7 +611,9 @@ sv:
resolve_description_html: Ingen åtgärd vidtas mot det rapporterade kontot, ingen prick registreras och rapporten stängs.
silence_description_html: Kontot kommer endast synas för de som redan följer den eller manuellt söker på den, vilket dramatiskt minskar dess räckvidd. Kan alltid ångras. Stänger alla anmälningar mot detta konto.
suspend_description_html: Kontot och allt dess innehåll kommer att vara oåtkomligt och så småningom tas bort, det kommer inte gå att interagera med kontot. Kan ångras inom 30 dagar. Stänger alla anmälningar mot detta konto.
+ actions_description_html: Välj vilken åtgärd som skall vidtas för att lösa denna rapport. Om du vidtar en bestraffningsåtgärd mot det rapporterade kontot kommer en e-postnotis att skickas till dem, förutom om du valt kategorin Skräppost.
actions_description_remote_html: Bestäm vilka åtgärder som ska vidtas för att lösa denna rapport. Detta kommer bara att påverka hur din server kommunicerar med detta fjärrkonto och hanterar dess innehåll.
+ actions_no_posts: Denna rapport har inga associerade inlägg att ta bort
add_to_report: Lägg till mer i rapporten
already_suspended_badges:
local: Redan avstängd på denna server
@@ -657,6 +677,7 @@ sv:
delete_data_html: Ta bort @%{acct}s profil och innehåll om 30 dagar ifall deras avstängning inte tagits bort under tiden
preview_preamble_html: "@%{acct} kommer få en varning med följande innehåll:"
record_strike_html: Registrera en varning mot @%{acct} för att hjälpa dig eskalera vid framtida överträdelser från detta konto
+ send_email_html: Skicka @%{acct} ett varningsmejl
warning_placeholder: Valfri ytterligare resonemang för modereringsåtgärd.
target_origin: Ursprung för anmält konto
title: Anmälningar
@@ -696,6 +717,7 @@ sv:
manage_appeals: Hantera överklaganden
manage_appeals_description: Tillåter användare att granska överklaganden av modereringsåtgärder
manage_blocks: Hantera blockeringar
+ manage_blocks_description: Tillåter användare att blockera e-postleverantörer och IP-adresser
manage_custom_emojis: Hantera egna emojier
manage_custom_emojis_description: Tillåter användare att hantera egna emojier på servern
manage_federation: Hantera federering
@@ -713,6 +735,7 @@ sv:
manage_taxonomies: Hantera taxonomier
manage_taxonomies_description: Tillåter användare att granska trendande innehåll och uppdatera inställningar för hashtaggar
manage_user_access: Hantera användaråtkomst
+ manage_user_access_description: Tillåter användare att inaktivera andra användares tvåfaktorsautentisering, ändra deras e-postadress samt återställa deras lösenord
manage_users: Hantera användare
manage_users_description: Tillåter användare att granska användares data och utföra modereringsåtgärder på dessa
manage_webhooks: Hantera webhooks
@@ -787,6 +810,7 @@ sv:
destroyed_msg: Webbplatsuppladdningen har raderats!
software_updates:
critical_update: Kritiskt — vänligen uppdatera omgående
+ description: Det rekommenderas att hålla din Mastodon-installation uppdaterad för att ta nytta av de senaste fixarna och funktionerna. Dessutom är det ibland viktigt att uppdatera Mastodon i tid för att undvika säkerhetsproblem. Av dessa skäl kontrollerar Mastodon efter uppdateringar var 30:e minut och meddelar dig i enlighet med dina e-postaviseringsinställningar.
documentation_link: Läs mer
release_notes: Ändringslogg
title: Tillgängliga uppdateringar
@@ -817,10 +841,10 @@ sv:
original_status: Ursprungligt inlägg
reblogs: Ombloggningar
status_changed: Inlägg ändrat
- title: Kontoinlägg
+ title: Kontoinlägg - @%{name}
trending: Trendande
visibility: Synlighet
- with_media: med media
+ with_media: Med media
strikes:
actions:
delete_statuses: "%{name} raderade %{target}s inlägg"
@@ -861,6 +885,7 @@ sv:
sidekiq_process_check:
message_html: Ingen Sidekiq-process körs för kön/köerna %{value}. Vänligen kontrollera din Sidekiq-konfiguration
software_version_check:
+ action: Se tillgängliga uppdateringar
message_html: En Mastodon-uppdatering är tillgänglig.
software_version_critical_check:
action: Se tillgängliga uppdateringar
@@ -876,22 +901,38 @@ sv:
message_html: "Din objektlagring är felkonfigurerad. Sekretessen för dina användare är i riskzonen."
tags:
moderation:
+ not_trendable: Kan inte trenda
+ not_usable: Inte användbar
+ pending_review: Väntar på granskning
+ review_requested: Granskning begärd
reviewed: Granskat
title: Status
- trendable:
+ trendable: Kan trenda
+ unreviewed: Ogranskad
+ usable: Användbar
name: Namn
+ newest: Nyaste
+ oldest: Äldsta
+ open: Visa offentligt
reset: Återställ
review: Granskningsstatus
search: Sök
+ title: Hashtaggar
updated_msg: Hashtagg-inställningarna har uppdaterats
title: Administration
trends:
allow: Tillåt
approved: Godkänd
+ confirm_allow: Är du säker på att du vill tillåta valda taggar?
+ confirm_disallow: Är du säker på att du vill förbjuda valda taggar?
disallow: Neka
links:
allow: Tillåt länk
allow_provider: Tillåt utgivare
+ confirm_allow: Är du säker på att du vill tillåta valda länkar?
+ confirm_allow_provider: Är du säker på att du vill tillåta valda leverantörer?
+ confirm_disallow: Är du säker på att du vill förbjuda valda länkar?
+ confirm_disallow_provider: Är du säker på att du vill förbjuda valda leverantörer?
description_html: Detta är länkar som för närvarande delas mycket av konton som din server ser inlägg från. Det kan hjälpa dina användare att ta reda på vad som händer i världen. Inga länkar visas offentligt tills du godkänner utgivaren. Du kan också tillåta eller avvisa enskilda länkar.
disallow: Blockera länk
disallow_provider: Blockera utgivare
@@ -915,6 +956,10 @@ sv:
statuses:
allow: Tillåt inlägg
allow_account: Godkänn författare
+ confirm_allow: Är du säker på att du vill tillåta valda statusar?
+ confirm_allow_account: Är du säker på att du vill tillåta valda konton?
+ confirm_disallow: Är du säker på att du vill förbjuda valda statusar?
+ confirm_disallow_account: Är du säker på att du vill förbjuda valda konton?
description_html: Detta är inlägg som din server vet om som för närvarande delas och favoriseras mycket just nu. Det kan hjälpa dina nya och återvändande användare att hitta fler människor att följa. Inga inlägg visas offentligt förrän du godkänner författaren, och författaren tillåter att deras konto föreslås till andra. Du kan också tillåta eller avvisa enskilda inlägg.
disallow: Tillåt inte inlägg
disallow_account: Tillåt inte författare
@@ -1034,6 +1079,7 @@ sv:
application_mailer:
notification_preferences: Ändra e-postpreferenser
salutation: "%{name},"
+ settings: 'Ändra e-postinställningar: %{link}'
unsubscribe: Avprenumerera
view: 'Granska:'
view_profile: Visa profil
@@ -1053,6 +1099,7 @@ sv:
hint_html: En sista sak till! Vi måste bekräfta att du är en människa (för att hålla borta skräpinlägg!). Lös CAPTCHA nedan och klicka på "Fortsätt".
title: Säkerhetskontroll
confirmations:
+ awaiting_review: Din e-postadress är bekräftad! %{domain} personalen granskar nu din registrering. Du kommer att få ett e-postmeddelande om de godkänner ditt konto!
awaiting_review_title: Din registrering är under granskning
clicking_this_link: klicka på denna länk
login_link: logga in
@@ -1060,6 +1107,7 @@ sv:
redirect_to_app_html: Du borde ha omdirigerats till appen %{app_name}. Om det inte hände, försök att %{clicking_this_link} eller återgå manuellt till appen.
registration_complete: Din registrering på %{domain} är nu slutförd!
welcome_title: Välkommen %{name}!
+ wrong_email_hint: Om e-postadressen inte är rätt, kan du ändra den i kontoinställningarna.
delete_account: Radera konto
delete_account_html: Om du vill radera ditt konto kan du fortsätta här. Du kommer att bli ombedd att bekräfta.
description:
@@ -1080,6 +1128,7 @@ sv:
or_log_in_with: Eller logga in med
privacy_policy_agreement_html: Jag har läst och godkänner integritetspolicyn
progress:
+ confirm: Bekräfta e-postadress
details: Dina uppgifter
review: Vår recension
rules: Acceptera regler
@@ -1101,8 +1150,10 @@ sv:
security: Säkerhet
set_new_password: Skriv in nytt lösenord
setup:
+ email_below_hint_html: Kolla din skräppost-mapp eller begär en ny. Du kan korrigera din e-postadress om den är fel.
email_settings_hint_html: Klicka på länken som vi har skickat till dig för att bekräfta %{email}. Vi väntar här.
link_not_received: Fick du ingen länk?
+ new_confirmation_instructions_sent: Du kommer att få ett nytt e-postmeddelande med bekräftelselänken om några minuter!
title: Kolla din inkorg
sign_in:
preamble_html: Logga in med dina användaruppgifter på %{domain}. Om ditt konto finns på en annan server kommer du inte att kunna logga in här.
@@ -1113,6 +1164,7 @@ sv:
title: Låt oss få igång dig på %{domain}.
status:
account_status: Kontostatus
+ confirming: Väntar på att e-postbekräftelsen ska slutföras.
functional: Ditt konto fungerar som det ska.
pending: Din ansökan inväntar granskning. Detta kan ta tid. Du kommer att få ett e-postmeddelande om din ansökan har godkänts.
redirecting_to: Ditt konto är inaktivt eftersom det för närvarande dirigeras om till %{acct}.
@@ -1122,6 +1174,12 @@ sv:
use_security_key: Använd säkerhetsnyckel
author_attribution:
example_title: Exempeltext
+ hint_html: Skriver du nyheter eller bloggartiklar utanför Mastodon? Kontrollera hur du får krediteras när de delas på Mastodon.
+ instructions: 'Se till att den här koden finns i din artikels HTML:'
+ more_from_html: Mer från %{name}
+ s_blog: "%{name}s blogg"
+ then_instructions: Lägg sedan till domännamnet för publikationen i fältet nedan.
+ title: Författarattribution
challenge:
confirm: Fortsätt
hint_html: "Tips: Vi frågar dig inte efter ditt lösenord igen under nästkommande timme."
@@ -1318,6 +1376,44 @@ sv:
merge_long: Behåll befintliga uppgifter och lägg till nya
overwrite: Skriv över
overwrite_long: Ersätt de nuvarande uppgifterna med de nya
+ overwrite_preambles:
+ blocking_html:
+ one: Du är på väg att ersätta din blockeringslista med upp till %{count} konto från %{filename}.
+ other: Du är på väg att ersätta din blockeringslista med upp till %{count} konton från %{filename}.
+ bookmarks_html:
+ one: Du är på väg att ersätta din blockeringslista med upp till %{count} inlägg från %{filename}.
+ other: Du är på väg att ersätta din blockeringslista med upp till %{count} inlägg från %{filename}.
+ domain_blocking_html:
+ one: Du är på väg att ersätta din blockeringslista med upp till %{count} domän från %{filename}.
+ other: Du är på väg att ersätta din blockeringslista med upp till %{count} domäner från %{filename}.
+ following_html:
+ one: Du är på väg till följ upp till %{count} konto från %{filename} och sluta följa någon annan.
+ other: Du är på väg till följ upp till %{count} konton från %{filename} och sluta följa någon annan.
+ lists_html:
+ one: Du är på väg att ersätta dina listor med innehållet i %{filename}. Upp till %{count} konto kommer att läggas till i nya listor.
+ other: Du är på väg att ersätta dina listor med innehållet i %{filename}. Upp till %{count} konton kommer att läggas till i nya listor.
+ muting_html:
+ one: Du är på väg att ersätta din lista med tystade konton med upp till %{count} konto från %{filename}.
+ other: Du är på väg att ersätta din lista med tystade konton med upp till %{count} konton från %{filename}.
+ preambles:
+ blocking_html:
+ one: Du är på väg att blockera med upp till %{count} konto från %{filename}.
+ other: Du är på väg att blockera med upp till %{count} konton från %{filename}.
+ bookmarks_html:
+ one: Du håller på att lägga upp till %{count} inlägg från %{filename} till dina bokmärken.
+ other: Du håller på att lägga upp till %{count} inlägg från %{filename} till dina bokmärken.
+ domain_blocking_html:
+ one: Du är på väg att blockera upp till %{count} domän från %{filename}.
+ other: Du är på väg att blockera upp till %{count} domäner från %{filename}.
+ following_html:
+ one: Du är på väg att följa upp till %{count} konto från %{filename}.
+ other: Du är på väg att följa upp till %{count} konton från %{filename}.
+ lists_html:
+ one: Du håller på att lägga upp till %{count} konto från %{filename} till dina listor. Nya listor kommer att skapas om det inte finns någon lista att lägga till.
+ other: Du håller på att lägga upp till %{count} konton från %{filename} till dina listor. Nya listor kommer att skapas om det inte finns någon lista att lägga till.
+ muting_html:
+ one: Du är på väg att tysta upp till %{count} konto från %{filename}.
+ other: Du är på väg att tysta upp till %{count} konton från %{filename}.
preface: Du kan importera data som du exporterat från en annan instans, till exempel en lista över personer du följer eller blockerar.
recent_imports: Nyligen importerade
states:
@@ -1402,10 +1498,11 @@ sv:
media_attachments:
validations:
images_and_video: Det går inte att bifoga en video till ett inlägg som redan innehåller bilder
+ not_found: Media %{ids} hittades inte eller är redan anslutet till ett annat inlägg
not_ready: Kan inte bifoga filer som inte har behandlats färdigt. Försök igen om ett ögonblick!
too_many: Det går inte att bifoga mer än 4 filer
migrations:
- acct: användarnamn@domän av det nya kontot
+ acct: Flyttad till
cancel: Avbryt omdirigering
cancel_explanation: Avstängning av omdirigeringen kommer att återaktivera ditt nuvarande konto, men kommer inte att återskapa följare som har flyttats till det kontot.
cancelled_msg: Avbröt omdirigeringen.
@@ -1614,7 +1711,7 @@ sv:
ios: iOS
kai_os: KaiOS
linux: Linux
- mac: Mac
+ mac: macOS
unknown_platform: Okänd plattform
windows: Windows
windows_mobile: Windows Mobile
@@ -1737,8 +1834,8 @@ sv:
tags:
does_not_match_previous_name: matchar inte det föregående namnet
themes:
- contrast: Hög kontrast
- default: Mastodon
+ contrast: Mastodon (Hög kontrast)
+ default: Mastodon (Mörk)
mastodon-light: Mastodon (ljust)
system: Automatisk (använd systemtema)
time:
@@ -1790,7 +1887,7 @@ sv:
subject: Andra faktorns autentiseringsfel
title: Misslyckad tvåfaktorsautentisering
suspicious_sign_in:
- change_password: Ändra ditt lösenord
+ change_password: ändra ditt lösenord
details: 'Här är inloggningsdetaljerna:'
explanation: Vi har upptäckt en inloggning till ditt konto från en ny IP-adress.
further_actions_html: Om detta inte var du, rekommenderar vi att du snarast %{action} och aktiverar tvåfaktorsautentisering för att hålla ditt konto säkert.
@@ -1883,6 +1980,7 @@ sv:
instructions_html: Kopiera och klistra in koden nedan in i HTML-koden på din webbplats. Lägg sedan till adressen till din webbplats i ett av de extra fälten på din profil från fliken "Redigera profil" och spara ändringar.
verification: Bekräftelse
verified_links: Dina verifierade länkar
+ website_verification: Webbplats verifiering
webauthn_credentials:
add: Lägg till ny säkerhetsnyckel
create:
diff --git a/config/locales/th.yml b/config/locales/th.yml
index c6ba60736d..32f2b30292 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -19,6 +19,7 @@ th:
posts:
other: โพสต์
posts_tab_heading: โพสต์
+ self_follow_error: ไม่อนุญาตการติดตามบัญชีของคุณเอง
admin:
account_actions:
action: ทำการกระทำ
@@ -818,7 +819,7 @@ th:
original_status: โพสต์ดั้งเดิม
reblogs: การดัน
status_changed: เปลี่ยนโพสต์แล้ว
- title: โพสต์ของบัญชี
+ title: โพสต์ของบัญชี - @%{name}
trending: กำลังนิยม
visibility: การมองเห็น
with_media: มีสื่อ
@@ -1147,9 +1148,11 @@ th:
use_security_key: ใช้กุญแจความปลอดภัย
author_attribution:
example_title: ข้อความตัวอย่าง
- hint_html: ควบคุมวิธีที่ให้เครดิตแก่คุณเมื่อมีการแบ่งปันลิงก์ใน Mastodon
+ hint_html: คุณกำลังเขียนข่าวหรือบทความบล็อกภายนอก Mastodon หรือไม่? ควบคุมวิธีที่คุณได้รับเครดิตเมื่อมีการแบ่งปันข่าวหรือบทความบล็อกใน Mastodon
+ instructions: 'ตรวจสอบให้แน่ใจว่าโค้ดนี้อยู่ใน HTML ของบทความของคุณ:'
more_from_html: เพิ่มเติมจาก %{name}
s_blog: บล็อกของ %{name}
+ then_instructions: จากนั้น เพิ่มชื่อโดเมนของการเผยแพร่ในช่องด้านล่าง
title: การระบุแหล่งที่มาผู้สร้าง
challenge:
confirm: ดำเนินการต่อ
@@ -1340,6 +1343,32 @@ th:
merge_long: เก็บระเบียนที่มีอยู่และเพิ่มระเบียนใหม่
overwrite: เขียนทับ
overwrite_long: แทนที่ระเบียนปัจจุบันด้วยระเบียนใหม่
+ overwrite_preambles:
+ blocking_html:
+ other: คุณกำลังจะ แทนที่รายการการปิดกั้นของคุณ ด้วยมากถึง %{count} บัญชี จาก %{filename}
+ bookmarks_html:
+ other: คุณกำลังจะ แทนที่ที่คั่นหน้าของคุณ ด้วยมากถึง %{count} โพสต์ จาก %{filename}
+ domain_blocking_html:
+ other: คุณกำลังจะ แทนที่รายการการปิดกั้นโดเมนของคุณ ด้วยมากถึง %{count} โดเมน จาก %{filename}
+ following_html:
+ other: คุณกำลังจะ ติดตาม มากถึง %{count} บัญชี จาก %{filename} และ หยุดการติดตามคนอื่นใด
+ lists_html:
+ other: คุณกำลังจะ แทนที่รายการของคุณ ด้วยเนื้อหาของ %{filename} จะเพิ่มมากถึง %{count} บัญชี ไปยังรายการใหม่
+ muting_html:
+ other: คุณกำลังจะ แทนที่รายการบัญชีที่ซ่อนอยู่ของคุณ ด้วยมากถึง %{count} บัญชี จาก %{filename}
+ preambles:
+ blocking_html:
+ other: คุณกำลังจะ ปิดกั้น มากถึง %{count} บัญชี จาก %{filename}
+ bookmarks_html:
+ other: คุณกำลังจะเพิ่มมากถึง %{count} โพสต์ จาก %{filename} ไปยัง ที่คั่นหน้า ของคุณ
+ domain_blocking_html:
+ other: คุณกำลังจะ ปิดกั้น มากถึง %{count} โดเมน จาก %{filename}
+ following_html:
+ other: คุณกำลังจะ ติดตาม มากถึง %{count} บัญชี จาก %{filename}
+ lists_html:
+ other: คุณกำลังจะเพิ่มมากถึง %{count} บัญชี จาก %{filename} ไปยัง รายการ ของคุณ จะสร้างรายการใหม่หากไม่มีรายการที่จะเพิ่มไปยัง
+ muting_html:
+ other: คุณกำลังจะ ซ่อน มากถึง %{count} บัญชี จาก %{filename}
preface: คุณสามารถนำเข้าข้อมูลที่คุณได้ส่งออกจากเซิร์ฟเวอร์อื่น เช่น รายการผู้คนที่คุณกำลังติดตามหรือกำลังปิดกั้น
recent_imports: การนำเข้าล่าสุด
states:
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index ee74f237ee..2eafed1b47 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -187,6 +187,7 @@ tr:
create_domain_block: Engellenen Alan Adı Oluştur
create_email_domain_block: E-Posta Alan Adı Engeli Oluştur
create_ip_block: IP kuralı oluştur
+ create_relay: Aktarıcı Oluştur
create_unavailable_domain: Mevcut Olmayan Alan Adı Oluştur
create_user_role: Rol Oluştur
demote_user: Kullanıcıyı Düşür
@@ -198,14 +199,17 @@ tr:
destroy_email_domain_block: E-posta Alan Adı Engelini Sil
destroy_instance: Alan adını temizle
destroy_ip_block: IP kuralını sil
+ destroy_relay: Aktarıcı Sil
destroy_status: Durumu Sil
destroy_unavailable_domain: Mevcut Olmayan Alan Adı Sil
destroy_user_role: Rolü Kaldır
disable_2fa_user: 2AD Kapat
disable_custom_emoji: Özel İfadeyi Devre Dışı Bırak
+ disable_relay: Aktarıcıyı Devre Dışı Bırak
disable_sign_in_token_auth_user: Kullanıcı için E-posta Token Doğrulamayı Devre Dışı Bırak
disable_user: Kullanıcıyı Devre Dışı Bırak
enable_custom_emoji: Özel İfadeyi Etkinleştir
+ enable_relay: Aktarıcıyı Etkinleştir
enable_sign_in_token_auth_user: Kullanıcı için E-posta Token Doğrulamayı Etkinleştir
enable_user: Kullanıcıyı Etkinleştir
memorialize_account: Hesabı Anıtlaştır
@@ -247,6 +251,7 @@ tr:
create_domain_block_html: "%{name}, %{target} alan adını engelledi"
create_email_domain_block_html: "%{name}, %{target} e-posta alan adını engelledi"
create_ip_block_html: "%{name}, %{target} IP adresi için kural oluşturdu"
+ create_relay_html: "%{name}, %{target} aktarıcısını oluşturdu"
create_unavailable_domain_html: "%{name}, %{target} alan adına teslimatı durdurdu"
create_user_role_html: "%{name}, %{target} rolünü oluşturdu"
demote_user_html: "%{name}, %{target} kullanıcısını düşürdü"
@@ -258,14 +263,17 @@ tr:
destroy_email_domain_block_html: "%{name}, %{target} e-posta alan adı engelini kaldırdı"
destroy_instance_html: "%{name}, %{target} alan adını temizledi"
destroy_ip_block_html: "%{name}, %{target} IP adresi kuralını sildi"
+ destroy_relay_html: "%{name}, %{target} aktarıcısını sildi"
destroy_status_html: "%{name}, %{target} kullanıcısının gönderisini kaldırdı"
destroy_unavailable_domain_html: "%{name}, %{target} alan adına teslimatı sürdürdü"
destroy_user_role_html: "%{name}, %{target} rolünü sildi"
disable_2fa_user_html: "%{name}, %{target} kullanıcısının iki aşamalı doğrulama gereksinimini kapattı"
disable_custom_emoji_html: "%{name}, %{target} emojisini devre dışı bıraktı"
+ disable_relay_html: "%{name}, %{target} aktarıcısını devre dışı bıraktı"
disable_sign_in_token_auth_user_html: "%{name}, %{target} için e-posta token doğrulamayı devre dışı bıraktı"
disable_user_html: "%{name}, %{target} kullanıcısı için oturum açmayı devre dışı bıraktı"
enable_custom_emoji_html: "%{name}, %{target} emojisini etkinleştirdi"
+ enable_relay_html: "%{name}, %{target} aktarıcısını etkinleştirdi"
enable_sign_in_token_auth_user_html: "%{name}, %{target} için e-posta token doğrulamayı etkinleştirdi"
enable_user_html: "%{name}, %{target} kullanıcısı için oturum açmayı etkinleştirdi"
memorialize_account_html: "%{name}, %{target} kullanıcısının hesabını bir anıt sayfaya dönüştürdü"
@@ -833,7 +841,7 @@ tr:
original_status: Özgün gönderi
reblogs: Yeniden Paylaşımlar
status_changed: Gönderi değişti
- title: Hesap durumları
+ title: Hesap durumları - @%{name}
trending: Öne çıkanlar
visibility: Görünürlük
with_media: Medya ile
@@ -1166,9 +1174,11 @@ tr:
use_security_key: Güvenlik anahtarını kullan
author_attribution:
example_title: Örnek metin
- hint_html: Mastodon'da bağlantılar paylaşıldığında nasıl tanınmak istediğinizi denetleyin.
+ hint_html: Mastodon dışında haber veya günlük yazıları mı yazıyorsunuz? Bu yazılar Mastodon'da paylaşıldığında size nasıl atıf yapılacağını denetleyin.
+ instructions: 'Bu kodun yazınızın HTML''sinde olduğundan emin olun:'
more_from_html: "%{name} kişisinden daha fazlası"
s_blog: "%{name} kişisinin Günlüğü"
+ then_instructions: Daha sonra, yayının alan adını aşağıda sahaya girin.
title: Yazar atıfı
challenge:
confirm: Devam et
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index dec4299fb9..7ea76b2a75 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -861,7 +861,7 @@ uk:
original_status: Оригінальний допис
reblogs: Поширення
status_changed: Допис змінено
- title: Дописи облікових записів
+ title: Дописи облікових записів - @%{name}
trending: Популярне
visibility: Видимість
with_media: З медіа
@@ -1202,9 +1202,11 @@ uk:
use_security_key: Використовувати ключ безпеки
author_attribution:
example_title: Зразок тексту
- hint_html: Контроль авторства поширених посилань на Mastodon.
+ hint_html: Ви пишете новини чи статті в блозі за межами Mastodon? Контролюйте, як вони підписуються, коли ними діляться на Mastodon.
+ instructions: 'Переконайтесь, що цей код розміщено в HTML-коді вашої статті:'
more_from_html: Більше від %{name}
s_blog: Блог %{name}
+ then_instructions: Потім додайте доменне ім'я публікації у поле нижче.
title: Атрибути авторства
challenge:
confirm: Далі
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index 7c30c5b127..71c4357f2f 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -33,7 +33,7 @@ vi:
accounts:
add_email_domain_block: Chặn tên miền email
approve: Phê duyệt
- approved_msg: Đã phê duyệt đăng ký %{username}
+ approved_msg: Đã chấp nhận đăng ký %{username}
are_you_sure: Bạn có chắc không?
avatar: Ảnh đại diện
by_domain: Máy chủ
@@ -132,7 +132,7 @@ vi:
resubscribe: Đăng ký lại
role: Vai trò
search: Tìm kiếm
- search_same_email_domain: Những người khác với cùng tên miền email
+ search_same_email_domain: Những người có cùng tên miền email
search_same_ip: Tra cứu IP
security: Bảo mật
security_measures:
@@ -165,49 +165,53 @@ vi:
unsuspended_msg: Đã kích hoạt lại %{username} thành công
username: Tài khoản
view_domain: Xem mô tả tài khoản này
- warn: Nhắc
+ warn: Cảnh cáo
web: Web
whitelisted: Danh sách trắng
action_logs:
action_types:
- approve_appeal: Chấp nhận kháng cáo
- approve_user: Duyệt đăng ký
+ approve_appeal: Chấp nhận khiếu nại
+ approve_user: Chấp nhận đăng ký
assigned_to_self_report: Tự xử lý báo cáo
change_email_user: Đổi email người dùng
change_role_user: Đổi vai trò
confirm_user: Xác minh
create_account_warning: Cảnh cáo
create_announcement: Tạo thông báo mới
- create_canonical_email_block: Chặn địa chỉ email
+ create_canonical_email_block: Chặn địa chỉ email biến thể
create_custom_emoji: Tạo emoji
create_domain_allow: Cho phép máy chủ
create_domain_block: Chặn máy chủ
- create_email_domain_block: Tạo chặn tên miền email
+ create_email_domain_block: Chặn tên miền email
create_ip_block: Chặn IP
- create_unavailable_domain: Ngừng liên hợp
+ create_relay: Tạo relay
+ create_unavailable_domain: Bỏ liên hợp
create_user_role: Tạo vai trò
demote_user: Hạ vai trò
destroy_announcement: Xóa thông báo
- destroy_canonical_email_block: Bỏ chặn địa chỉ email
+ destroy_canonical_email_block: Bỏ chặn địa chỉ email biến thể
destroy_custom_emoji: Xóa emoji
- destroy_domain_allow: Bỏ thanh trừng máy chủ
+ destroy_domain_allow: Bỏ máy chủ cho phép
destroy_domain_block: Bỏ chặn máy chủ
destroy_email_domain_block: Bỏ chặn tên miền email
destroy_instance: Thanh trừng máy chủ
destroy_ip_block: Bỏ chặn IP
+ destroy_relay: Xóa relay
destroy_status: Xóa tút
- destroy_unavailable_domain: Tái liên hợp
+ destroy_unavailable_domain: Cho phép liên hợp
destroy_user_role: Xóa vai trò
disable_2fa_user: Vô hiệu hóa 2FA
disable_custom_emoji: Vô hiệu hóa emoji
+ disable_relay: Tắt relay
disable_sign_in_token_auth_user: Tắt xác minh bằng email cho người dùng
disable_user: Vô hiệu hóa đăng nhập
- enable_custom_emoji: Duyệt emoji
+ enable_custom_emoji: Cho phép emoji
+ enable_relay: Bật relay
enable_sign_in_token_auth_user: Bật xác minh bằng email cho người dùng
enable_user: Cho phép đăng nhập
- memorialize_account: Đánh dấu tưởng niệm
+ memorialize_account: Gán tưởng niệm
promote_user: Nâng vai trò
- reject_appeal: Từ chối kháng cáo
+ reject_appeal: Từ chối khiếu nại
reject_user: Từ chối đăng ký
remove_avatar_user: Xóa ảnh đại diện
reopen_report: Mở lại báo cáo
@@ -217,7 +221,7 @@ vi:
sensitive_account: Gán nhạy cảm
silence_account: Gán ẩn
suspend_account: Gán vô hiệu hóa
- unassigned_report: Báo cáo chưa xử lý
+ unassigned_report: Bỏ xử lý báo cáo
unblock_email_account: Bỏ chặn địa chỉ email
unsensitive_account: Bỏ nhạy cảm
unsilence_account: Bỏ ẩn
@@ -230,64 +234,68 @@ vi:
update_status: Cập nhật tút
update_user_role: Cập nhật vai trò
actions:
- approve_appeal_html: "%{name} đã duyệt kháng cáo của %{target}"
+ approve_appeal_html: "%{name} đã chấp nhận khiếu nại từ %{target}"
approve_user_html: "%{name} đã chấp nhận đăng ký từ %{target}"
- assigned_to_self_report_html: "%{name} tự xử lý báo cáo %{target}"
+ assigned_to_self_report_html: "%{name} đã tự xử lý báo cáo %{target}"
change_email_user_html: "%{name} đã thay đổi địa chỉ email của %{target}"
- change_role_user_html: "%{name} đã thay đổi vai trò %{target}"
+ change_role_user_html: "%{name} đã thay đổi vai trò của %{target}"
confirm_user_html: "%{name} đã xác minh địa chỉ email của %{target}"
create_account_warning_html: "%{name} đã cảnh cáo %{target}"
- create_announcement_html: "%{name} tạo thông báo mới %{target}"
- create_canonical_email_block_html: "%{name} đã chặn địa chỉ email với hash %{target}"
+ create_announcement_html: "%{name} đã tạo thông báo %{target}"
+ create_canonical_email_block_html: "%{name} đã chặn địa chỉ email biến thể %{target}"
create_custom_emoji_html: "%{name} đã tải lên biểu tượng cảm xúc mới %{target}"
- create_domain_allow_html: "%{name} kích hoạt liên hợp với %{target}"
- create_domain_block_html: "%{name} chặn máy chủ %{target}"
+ create_domain_allow_html: "%{name} đã bật liên hợp với %{target}"
+ create_domain_block_html: "%{name} đã chặn máy chủ %{target}"
create_email_domain_block_html: "%{name} đã chặn tên miền email %{target}"
create_ip_block_html: "%{name} đã chặn IP %{target}"
- create_unavailable_domain_html: "%{name} ngưng phân phối với máy chủ %{target}"
+ create_relay_html: "%{name} đã tạo relay %{target}"
+ create_unavailable_domain_html: "%{name} đã bỏ liên hợp với máy chủ %{target}"
create_user_role_html: "%{name} đã tạo vai trò %{target}"
demote_user_html: "%{name} đã hạ vai trò của %{target}"
- destroy_announcement_html: "%{name} xóa thông báo %{target}"
- destroy_canonical_email_block_html: "%{name} đã bỏ chặn địa chỉ email với hash %{target}"
+ destroy_announcement_html: "%{name} đã xóa thông báo %{target}"
+ destroy_canonical_email_block_html: "%{name} đã bỏ chặn địa chỉ email biến thể %{target}"
destroy_custom_emoji_html: "%{name} đã xóa emoji %{target}"
destroy_domain_allow_html: "%{name} đã ngừng liên hợp với %{target}"
- destroy_domain_block_html: "%{name} bỏ chặn máy chủ %{target}"
+ destroy_domain_block_html: "%{name} đã bỏ chặn máy chủ %{target}"
destroy_email_domain_block_html: "%{name} đã bỏ chặn email %{target}"
- destroy_instance_html: "%{name} thanh trừng máy chủ %{target}"
- destroy_ip_block_html: "%{name} bỏ chặn IP %{target}"
+ destroy_instance_html: "%{name} đã thanh trừng máy chủ %{target}"
+ destroy_ip_block_html: "%{name} đã bỏ chặn IP %{target}"
+ destroy_relay_html: "%{name} đã xóa relay %{target}"
destroy_status_html: "%{name} đã xóa tút của %{target}"
- destroy_unavailable_domain_html: "%{name} tiếp tục phân phối với máy chủ %{target}"
+ destroy_unavailable_domain_html: "%{name} tiếp tục liên hợp với máy chủ %{target}"
destroy_user_role_html: "%{name} đã xóa vai trò %{target}"
disable_2fa_user_html: "%{name} đã vô hiệu hóa xác minh hai bước của %{target}"
disable_custom_emoji_html: "%{name} đã ẩn emoji %{target}"
+ disable_relay_html: "%{name} đã tắt relay %{target}"
disable_sign_in_token_auth_user_html: "%{name} đã tắt xác minh email của %{target}"
- disable_user_html: "%{name} vô hiệu hóa đăng nhập %{target}"
- enable_custom_emoji_html: "%{name} cho phép emoji %{target}"
+ disable_user_html: "%{name} đã vô hiệu hóa đăng nhập %{target}"
+ enable_custom_emoji_html: "%{name} đã cho phép emoji %{target}"
+ enable_relay_html: "%{name} đã bật relay %{target}"
enable_sign_in_token_auth_user_html: "%{name} đã bật xác minh email của %{target}"
- enable_user_html: "%{name} bỏ vô hiệu hóa đăng nhập %{target}"
+ enable_user_html: "%{name} đã bỏ vô hiệu hóa đăng nhập %{target}"
memorialize_account_html: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm"
promote_user_html: "%{name} đã nâng vai trò của %{target}"
- reject_appeal_html: "%{name} đã từ chối kháng cáo của %{target}"
+ reject_appeal_html: "%{name} đã từ chối khiếu nại từ %{target}"
reject_user_html: "%{name} đã từ chối đăng ký từ %{target}"
remove_avatar_user_html: "%{name} đã xóa ảnh đại diện của %{target}"
- reopen_report_html: "%{name} mở lại báo cáo %{target}"
+ reopen_report_html: "%{name} đã mở lại báo cáo %{target}"
resend_user_html: "%{name} đã gửi lại email xác minh cho %{target}"
reset_password_user_html: "%{name} đã đặt lại mật khẩu của %{target}"
resolve_report_html: "%{name} đã xử lý báo cáo %{target}"
- sensitive_account_html: "%{name} đánh dấu nội dung của %{target} là nhạy cảm"
+ sensitive_account_html: "%{name} đã gán nội dung của %{target} là nhạy cảm"
silence_account_html: "%{name} đã ẩn %{target}"
suspend_account_html: "%{name} đã vô hiệu hóa %{target}"
- unassigned_report_html: "%{name} đã xử lý báo cáo %{target} chưa xử lí"
- unblock_email_account_html: "%{name} bỏ chặn địa chỉ email của %{target}"
- unsensitive_account_html: "%{name} đánh dấu nội dung của %{target} là bình thường"
+ unassigned_report_html: "%{name} đã thôi xử lý báo cáo %{target}"
+ unblock_email_account_html: "%{name} đã bỏ chặn địa chỉ email của %{target}"
+ unsensitive_account_html: "%{name} đã gán nội dung của %{target} là bình thường"
unsilence_account_html: "%{name} đã bỏ ẩn %{target}"
unsuspend_account_html: "%{name} đã bỏ vô hiệu hóa %{target}"
- update_announcement_html: "%{name} cập nhật thông báo %{target}"
+ update_announcement_html: "%{name} đã cập nhật thông báo %{target}"
update_custom_emoji_html: "%{name} đã cập nhật emoji %{target}"
- update_domain_block_html: "%{name} cập nhật chặn máy chủ %{target}"
- update_ip_block_html: "%{name} cập nhật chặn IP %{target}"
- update_report_html: "%{name} cập nhật báo cáo %{target}"
- update_status_html: "%{name} cập nhật tút của %{target}"
+ update_domain_block_html: "%{name} đã cập nhật chặn máy chủ %{target}"
+ update_ip_block_html: "%{name} đã cập nhật chặn IP %{target}"
+ update_report_html: "%{name} đã cập nhật báo cáo %{target}"
+ update_status_html: "%{name} đã cập nhật tút của %{target}"
update_user_role_html: "%{name} đã cập nhật vai trò %{target}"
deleted_account: tài khoản đã xóa
empty: Không tìm thấy bản ghi.
@@ -354,7 +362,7 @@ vi:
new_users: người mới
opened_reports: báo cáo
pending_appeals_html:
- other: "%{count} kháng cáo đang chờ"
+ other: "%{count} khiếu nại đang chờ"
pending_reports_html:
other: "%{count} báo cáo đang chờ"
pending_tags_html:
@@ -372,7 +380,7 @@ vi:
disputes:
appeals:
empty: Không tìm thấy.
- title: Kháng cáo
+ title: Khiếu nại
domain_allows:
add_new: Cho phép liên hợp với máy chủ
created_msg: Máy chủ đã được kích hoạt liên hợp thành công
@@ -692,8 +700,8 @@ vi:
invite_users_description: Cho phép mời những người mới vào máy chủ
manage_announcements: Quản lý thông báo
manage_announcements_description: Cho phép quản lý thông báo trên máy chủ
- manage_appeals: Quản lý kháng cáo
- manage_appeals_description: Cho phép thành viên kháng cáo đối với các hành động kiểm duyệt
+ manage_appeals: Quản lý khiếu nại
+ manage_appeals_description: Cho phép thành viên khiếu nại đối với các hành động kiểm duyệt
manage_blocks: Quản lý chặn
manage_blocks_description: Cho phép người dùng tự chặn các nhà cung cấp email và địa chỉ IP
manage_custom_emojis: Quản lý emoji
@@ -819,7 +827,7 @@ vi:
original_status: Tút gốc
reblogs: Lượt đăng lại
status_changed: Tút đã sửa
- title: Toàn bộ tút
+ title: Tất cả tút - @%{name}
trending: Xu hướng
visibility: Hiển thị
with_media: Có media
@@ -832,8 +840,8 @@ vi:
sensitive: "%{name} đã đánh dấu %{target} là nhạy cảm"
silence: "%{name} đã ẩn %{target}"
suspend: "%{name} đã vô hiệu hóa %{target}"
- appeal_approved: Đã khiếu nại
- appeal_pending: Đang kháng cáo
+ appeal_approved: Khiếu nại được chấp nhận
+ appeal_pending: Đang khiếu nại
appeal_rejected: Khiếu nại bị từ chối
system_checks:
database_schema_check:
@@ -1008,7 +1016,7 @@ vi:
silence: hạn chế tài khoản của họ
suspend: vô hiệu hóa tài khoản của họ
body: "%{target} đã khiếu nại vì bị %{action_taken_by} %{type} vào %{date}. Họ cho biết:"
- next_steps: Bạn có thể duyệt kháng cáo để hủy kiểm duyệt hoặc bỏ qua.
+ next_steps: Bạn có thể chấp nhận khiếu nại để bỏ kiểm duyệt, hoặc không.
subject: "%{username} đang khiếu nại quyết định kiểm duyệt trên %{instance}"
new_critical_software_updates:
body: Các phiên bản quan trọng mới của Mastodon đã được phát hành, bạn nên cập nhật càng sớm càng tốt!
@@ -1148,9 +1156,11 @@ vi:
use_security_key: Dùng khóa bảo mật
author_attribution:
example_title: Văn bản mẫu
- hint_html: Kiểm soát cách bạn được ghi nhận khi chia sẻ liên kết trên Mastodon.
- more_from_html: Thêm từ %{name}
+ hint_html: Bạn là nhà báo hoặc blogger bên ngoài Mastodon? Kiểm soát cách bài viết của bạn được ghi nhận khi chia sẻ trên Mastodon.
+ instructions: 'Đặt mã này trong HTML bài viết:'
+ more_from_html: Viết bởi %{name}
s_blog: "%{name}'s Blog"
+ then_instructions: Sau đó, thêm URL của báo/blog trong trường bên dưới.
title: Ghi nhận người đăng
challenge:
confirm: Tiếp tục
@@ -1205,12 +1215,12 @@ vi:
appealed_msg: Khiếu nại của bạn đã được gửi đi. Nếu nó được chấp nhận, bạn sẽ nhận được thông báo.
appeals:
submit: Gửi khiếu nại
- approve_appeal: Duyệt kháng cáo
+ approve_appeal: Chấp nhận khiếu nại
associated_report: Báo cáo đính kèm
created_at: Ngày
description_html: Đây là những cảnh cáo và áp đặt kiểm duyệt đối với bạn bởi đội ngũ %{instance}.
recipient: Người nhận
- reject_appeal: Từ chối kháng cáo
+ reject_appeal: Từ chối khiếu nại
status: 'Tút #%{id}'
status_removed: Tút này đã được xóa khỏi hệ thống
title: "%{action} từ %{date}"
@@ -1386,10 +1396,10 @@ vi:
muting: Đang nhập người đã ẩn
type: Kiểu nhập
type_groups:
- constructive: Lượt theo dõi và những thứ đã lưu
- destructive: Lượt chặn và ẩn
+ constructive: Theo dõi và lưu
+ destructive: Chặn và ẩn
types:
- blocking: Danh sách chặn
+ blocking: Danh sách người đã chặn
bookmarks: Tút đã lưu
domain_blocking: Danh sách máy chủ đã chặn
following: Danh sách người theo dõi
@@ -1747,7 +1757,7 @@ vi:
ignore_favs: Bỏ qua số lượt thích
ignore_reblogs: Bỏ qua lượt đăng lại
interaction_exceptions: Ngoại lệ dựa trên tương tác
- interaction_exceptions_explanation: Lưu ý rằng không có gì đảm bảo rằng các tút sẽ bị xóa nếu chúng tụt dưới ngưỡng mức yêu thích hoặc đăng lại, dù đã từng đạt.
+ interaction_exceptions_explanation: Lưu ý là không có gì đảm bảo rằng các tút sẽ bị xóa nếu chúng bị giảm lượt thích hoặc đăng lại, dù đã từng đạt.
keep_direct: Giữ lại tin nhắn
keep_direct_hint: Không xóa tin nhắn của bạn
keep_media: Giữ lại những tút có đính kèm media
@@ -1778,7 +1788,7 @@ vi:
sensitive_content: NSFW
strikes:
errors:
- too_late: Đã quá trễ để kháng cáo
+ too_late: Đã quá trễ để khiếu nại
tags:
does_not_match_previous_name: không khớp với tên trước
themes:
@@ -1852,8 +1862,8 @@ vi:
disable: Bạn không còn có thể sử dụng tài khoản của mình, nhưng hồ sơ của bạn và dữ liệu khác vẫn còn nguyên. Bạn có thể yêu cầu sao lưu dữ liệu của mình, thay đổi cài đặt tài khoản hoặc xóa tài khoản của bạn.
mark_statuses_as_sensitive: Vài tút của bạn đã bị kiểm duyệt viên %{instance} đánh dấu nhạy cảm. Mọi người cần nhấn vào media để xem nó. Bạn có thể tự đánh dấu tài khoản của bạn là nhạy cảm.
sensitive: Từ giờ trở đi, tất cả các media của bạn bạn tải lên sẽ được đánh dấu là nhạy cảm và ẩn đằng sau cảnh báo nhấp chuột.
- silence: Bạn vẫn có thể sử dụng tài khoản của mình, nhưng chỉ những người đang theo dõi bạn mới thấy bài đăng của bạn. Bạn cũng bị loại khỏi các tính năng khám phá khác. Tuy nhiên, những người khác vẫn có thể theo dõi bạn.
- suspend: Bạn không còn có thể sử dụng tài khoản của bạn, hồ sơ và các dữ liệu khác không còn có thể truy cập được. Trong vòng 30 ngày, bạn vẫn có thể đăng nhập để yêu cầu bản sao dữ liệu của mình cho đến khi dữ liệu bị xóa hoàn toàn, nhưng chúng tôi sẽ giữ lại một số dữ liệu cơ bản để ngăn bạn thoát khỏi việc vô hiệu hóa.
+ silence: Bạn vẫn có thể sử dụng tài khoản của mình và người khác vẫn có thể theo dõi bạn, nhưng chỉ những người đã theo dõi bạn mới thấy tút của bạn. Bạn cũng bị loại khỏi các tính năng khám phá khác.
+ suspend: Tài khoản của bạn, hồ sơ và các dữ liệu khác sẽ không thể truy cập được nữa. Bạn vẫn có thể đăng nhập để yêu cầu bản sao dữ liệu của mình cho đến khi dữ liệu bị xóa hoàn toàn trong vòng 30 ngày, nhưng chúng tôi sẽ giữ lại một số dữ liệu cơ bản để phòng khi bạn được bỏ vô hiệu hóa.
reason: 'Lý do:'
statuses: 'Tút vi phạm:'
subject:
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index 2654804697..cae0efee57 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -184,6 +184,7 @@ zh-CN:
create_domain_block: 封禁新域名
create_email_domain_block: 封禁新的邮箱域名
create_ip_block: 新建 IP 规则
+ create_relay: 创建中继站
create_unavailable_domain: 创建不可用域名
create_user_role: 创建角色
demote_user: 给用户降职
@@ -195,14 +196,17 @@ zh-CN:
destroy_email_domain_block: 解除邮箱域名封禁
destroy_instance: 删除实例
destroy_ip_block: 删除 IP 规则
+ destroy_relay: 删除中继站
destroy_status: 删除嘟文
destroy_unavailable_domain: 删除不可用域名
destroy_user_role: 销毁角色
disable_2fa_user: 停用双因素认证
disable_custom_emoji: 禁用自定义表情符号
+ disable_relay: 禁用中继站
disable_sign_in_token_auth_user: 为用户禁用邮件令牌身份验证
disable_user: 禁用用户
enable_custom_emoji: 启用自定义表情符号
+ enable_relay: 启用中继站
enable_sign_in_token_auth_user: 为用户启用邮件令牌身份验证
enable_user: 启用用户
memorialize_account: 将账户设为追悼模式
@@ -244,6 +248,7 @@ zh-CN:
create_domain_block_html: "%{name} 屏蔽了域名 %{target}"
create_email_domain_block_html: "%{name} 封禁了邮箱域名 %{target}"
create_ip_block_html: "%{name} 为 IP %{target} 创建了规则"
+ create_relay_html: "%{name} 添加了中继站 %{target}"
create_unavailable_domain_html: "%{name} 停止了向域名 %{target} 的投递"
create_user_role_html: "%{name} 创建了 %{target} 角色"
demote_user_html: "%{name} 对用户 %{target} 进行了降任操作"
@@ -255,14 +260,17 @@ zh-CN:
destroy_email_domain_block_html: "%{name} 解封了邮箱域名 %{target}"
destroy_instance_html: "%{name} 删除了实例 %{target}"
destroy_ip_block_html: "%{name} 删除了 IP %{target} 的规则"
+ destroy_relay_html: "%{name} 删除了中继站 %{target}"
destroy_status_html: "%{name} 删除了 %{target} 的嘟文"
destroy_unavailable_domain_html: "%{name} 恢复了向域名 %{target} 的投递"
destroy_user_role_html: "%{name} 删除了 %{target} 角色"
disable_2fa_user_html: "%{name} 停用了用户 %{target} 的双因素认证"
disable_custom_emoji_html: "%{name} 停用了自定义表情 %{target}"
+ disable_relay_html: "%{name} 停用了中继站 %{target}"
disable_sign_in_token_auth_user_html: "%{name} 为 %{target} 禁用了邮件令牌身份验证"
disable_user_html: "%{name} 将用户 %{target} 设置为禁止登录"
enable_custom_emoji_html: "%{name} 启用了自定义表情 %{target}"
+ enable_relay_html: "%{name} 启用了中继站 %{target}"
enable_sign_in_token_auth_user_html: "%{name} 为 %{target} 启用了邮件令牌身份验证"
enable_user_html: "%{name} 将用户 %{target} 设置为允许登录"
memorialize_account_html: "%{name} 将 %{target} 设置为追悼账户"
@@ -596,7 +604,7 @@ zh-CN:
actions_no_posts: 该举报没有相关嘟文可供删除
add_to_report: 增加更多举报内容
already_suspended_badges:
- local: 已经在此服务器上暂停
+ local: 已在此服务器上被封禁
remote: 已在其所属服务器被封禁
are_you_sure: 你确定吗?
assign_to_self: 接管
@@ -819,7 +827,7 @@ zh-CN:
original_status: 原始嘟文
reblogs: 转发
status_changed: 嘟文已编辑
- title: 帐户嘟文
+ title: 帐户嘟文 - @%{name}
trending: 当前热门
visibility: 可见性
with_media: 含有媒体文件
@@ -1148,9 +1156,11 @@ zh-CN:
use_security_key: 使用安全密钥
author_attribution:
example_title: 示例文本
- hint_html: 控制在 Mastodon 上分享的链接如何显示你的署名。
+ hint_html: 你是否在 Mastodon 之外撰写新闻或博客文章?控制它们被分享到 Mastodon 时的署名方式。
+ instructions: 请确保将这段代码放在您文章的 HTML 中:
more_from_html: 来自 %{name} 的更多内容
s_blog: "%{name} 的博客"
+ then_instructions: 然后,在下面的文本框中添加你用于发布文章的域名。
title: 作者归属
challenge:
confirm: 继续
@@ -1699,8 +1709,8 @@ zh-CN:
severed_relationships:
download: 下载 (%{count})
event_type:
- account_suspension: 账户被封禁 (%{target_name})
- domain_block: 服务器被封禁 (%{target_name})
+ account_suspension: 封禁账户 (%{target_name})
+ domain_block: 封禁服务器 (%{target_name})
user_domain_block: 你屏蔽了 %{target_name}
lost_followers: 失去的关注者
lost_follows: 失去的关注
@@ -1876,7 +1886,7 @@ zh-CN:
apps_android_action: 从 Google Play 下载
apps_ios_action: 从 App Store 下载
apps_step: 下载我们的官方应用。
- apps_title: Mastodon应用
+ apps_title: Mastodon 应用
checklist_subtitle: 让我们带你开启这片社交新天地:
checklist_title: 欢迎清单
edit_profile_action: 个性化
@@ -1884,16 +1894,16 @@ zh-CN:
edit_profile_title: 个性化你的个人资料
explanation: 下面是几个小贴士,希望它们能帮到你
feature_action: 了解更多
- feature_audience: Mastodon为你提供了无需中间商即可管理受众的独特可能。Mastodon可被部署在你自己的基础设施上,允许你关注其它任何Mastodon在线服务器的用户,或被任何其他在线 Mastodon 服务器的用户关注,并且不受你之外的任何人控制。
+ feature_audience: Mastodon 为你提供了无需中间商即可管理受众的独特可能。Mastodon 可被部署在你自己的基础设施上,允许你关注其它任何 Mastodon 在线服务器的用户,或被任何其他在线 Mastodon 服务器的用户关注,并且不受你之外的任何人控制。
feature_audience_title: 放手去建立起你的受众
feature_control: 你最清楚你想在你自己的主页中看到什么动态。没有算法或广告浪费你的时间。你可以用一个账号关注任何 Mastodon 服务器上的任何人,并按时间顺序获得他们发布的嘟文,让你的互联网的角落更合自己的心意。
feature_control_title: 掌控自己的时间线
- feature_creativity: Mastodon支持音频、视频和图片、无障碍描述、投票、内容警告, 动画头像、自定义表情包、缩略图裁剪控制等功能,帮助你在网上尽情表达自己。无论你是要发布你的艺术作品、音乐还是播客,Mastodon 都能为你服务。
+ feature_creativity: Mastodon 支持音频、视频和图片、无障碍描述、投票、内容警告, 动画头像、自定义表情包、缩略图裁剪控制等功能,帮助你在网上尽情表达自己。无论你是要发布你的艺术作品、音乐还是播客,Mastodon 都能为你服务。
feature_creativity_title: 无与伦比的创造力
- feature_moderation: Mastodon将决策权交还给你。每个服务器都会创建自己的规则和条例,并在站点内施行,而不是像企业社交媒体那样居高临下,这使得它可以最灵活地响应不同人群的需求。加入一个你认同其规则的服务器,或托管你自己的服务器。
+ feature_moderation: Mastodon 将决策权交还给你。每个服务器都会创建自己的规则和条例,并在站点内施行,而不是像企业社交媒体那样居高临下,这使得它可以最灵活地响应不同人群的需求。加入一个你认同其规则的服务器,或托管你自己的服务器。
feature_moderation_title: 管理,本应如此
follow_action: 关注
- follow_step: 关注有趣的人,这就是Mastodon的意义所在。
+ follow_step: 关注有趣的人,这就是 Mastodon 的意义所在。
follow_title: 个性化你的首页动态
follows_subtitle: 关注知名账户
follows_title: 推荐关注
@@ -1907,8 +1917,8 @@ zh-CN:
post_step: 向世界打个招呼吧。
post_title: 发布你的第一条嘟文
share_action: 分享
- share_step: 让你的朋友知道如何在Mastodon找到你。
- share_title: 分享你的Mastodon个人资料
+ share_step: 让你的朋友知道如何在 Mastodon 找到你。
+ share_title: 分享你的 Mastodon 个人资料
sign_in_action: 登录
subject: 欢迎来到 Mastodon
title: "%{name},欢迎你的加入!"
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index e33ebeadb4..6f0a99a5b3 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -777,7 +777,7 @@ zh-HK:
original_status: 原始帖文
reblogs: 轉發
status_changed: 帖文已變更
- title: 帳戶文章
+ title: 帳戶文章 - @%{name}
trending: 熱門
visibility: 可見性
with_media: 含有媒體檔案
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index c461aabcdc..ce6bd3e8f5 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -184,6 +184,7 @@ zh-TW:
create_domain_block: 新增網域封鎖
create_email_domain_block: 新增電子郵件網域封鎖
create_ip_block: 新增IP規則
+ create_relay: 新增中繼
create_unavailable_domain: 新增無法存取的網域
create_user_role: 新增角色
demote_user: 將用戶降級
@@ -195,14 +196,17 @@ zh-TW:
destroy_email_domain_block: 刪除電子郵件網域封鎖
destroy_instance: 清除網域
destroy_ip_block: 刪除 IP 規則
+ destroy_relay: 刪除中繼
destroy_status: 刪除狀態
destroy_unavailable_domain: 刪除無法存取的網域
destroy_user_role: 移除角色
disable_2fa_user: 停用兩階段驗證
disable_custom_emoji: 停用自訂 emoji 表情符號
+ disable_relay: 停用中繼
disable_sign_in_token_auth_user: 停用使用者電子郵件 token 驗證
disable_user: 停用帳號
enable_custom_emoji: 啟用自訂 emoji 表情符號
+ enable_relay: 啟用中繼
enable_sign_in_token_auth_user: 啟用使用者電子郵件 token 驗證
enable_user: 啓用帳號
memorialize_account: 設定成追悼帳號
@@ -244,6 +248,7 @@ zh-TW:
create_domain_block_html: "%{name} 已封鎖網域 %{target}"
create_email_domain_block_html: "%{name} 已封鎖電子郵件網域 %{target}"
create_ip_block_html: "%{name} 已設定 IP %{target} 的規則"
+ create_relay_html: "%{name} 已新增中繼 %{target}"
create_unavailable_domain_html: "%{name} 停止發送至網域 %{target}"
create_user_role_html: "%{name} 已新增 %{target} 角色"
demote_user_html: "%{name} 將使用者 %{target} 降級"
@@ -255,14 +260,17 @@ zh-TW:
destroy_email_domain_block_html: "%{name} 已解除封鎖電子郵件網域 %{target}"
destroy_instance_html: "%{name} 已清除網域 %{target}"
destroy_ip_block_html: "%{name} 已刪除 IP %{target} 的規則"
+ destroy_relay_html: "%{name} 已刪除中繼 %{target}"
destroy_status_html: "%{name} 已刪除 %{target} 的嘟文"
destroy_unavailable_domain_html: "%{name} 已恢復對網域 %{target} 的發送"
destroy_user_role_html: "%{name} 已刪除 %{target} 角色"
disable_2fa_user_html: "%{name} 已停用使用者 %{target} 的兩階段驗證 (2FA) "
disable_custom_emoji_html: "%{name} 已停用自訂 emoji 表情符號 %{target}"
+ disable_relay_html: "%{name} 已停用中繼 %{target}"
disable_sign_in_token_auth_user_html: "%{name} 已停用 %{target} 之使用者電子郵件 token 驗證"
disable_user_html: "%{name} 將使用者 %{target} 設定為禁止登入"
enable_custom_emoji_html: "%{name} 已啟用自訂 emoji 表情符號 %{target}"
+ enable_relay_html: "%{name} 已啟用中繼 %{target}"
enable_sign_in_token_auth_user_html: "%{name} 已啟用 %{target} 之使用者電子郵件 token 驗證"
enable_user_html: "%{name} 將使用者 %{target} 設定為允許登入"
memorialize_account_html: "%{name} 將 %{target} 設定為追悼帳號"
@@ -560,7 +568,7 @@ zh-TW:
relationships:
title: "%{acct} 的關係"
relays:
- add_new: 新增中繼站
+ add_new: 新增中繼
delete: 刪除
description_html: "聯邦中繼站 是種中繼伺服器,會於訂閱並推送至此中繼站的伺服器之間交換大量的公開嘟文。中繼站也能協助小型或中型伺服器自聯邦宇宙中探索內容,而無須本地使用者手動跟隨遠端伺服器的其他使用者。"
disable: 停用
@@ -821,7 +829,7 @@ zh-TW:
original_status: 原始嘟文
reblogs: 轉嘟
status_changed: 嘟文已編輯
- title: 帳號嘟文
+ title: 帳號嘟文 - @%{name}
trending: 熱門
visibility: 可見性
with_media: 含有媒體檔案
@@ -1150,9 +1158,11 @@ zh-TW:
use_security_key: 使用安全金鑰
author_attribution:
example_title: 範例文字
- hint_html: 控制如何於 Mastodon 上分享連結時註明您的貢獻。
+ hint_html: 您是否正於 Mastodon 之外撰寫新聞或部落格文章?控制當它們於 Mastodon 上分享時您如何獲得信譽。
+ instructions: 確認您文章 HTML 內容中包含此份程式碼:
more_from_html: 來自 %{name} 之更多內容
s_blog: "%{name} 的部落格"
+ then_instructions: 接著,將發表處網域加入以下欄位中。
title: 作者署名
challenge:
confirm: 繼續
diff --git a/config/mastodon.yml b/config/mastodon.yml
new file mode 100644
index 0000000000..255213b4b7
--- /dev/null
+++ b/config/mastodon.yml
@@ -0,0 +1,3 @@
+---
+shared:
+ software_update_url: <%= ENV.fetch('UPDATE_CHECK_URL', 'https://api.joinmastodon.org/update-check') %>
diff --git a/config/navigation.rb b/config/navigation.rb
index 2480e1741b..d3fda7bf3c 100644
--- a/config/navigation.rb
+++ b/config/navigation.rb
@@ -6,7 +6,11 @@ SimpleNavigation::Configuration.run do |navigation|
navigation.items do |n|
n.item :web, safe_join([material_symbol('chevron_left'), t('settings.back')]), root_path
- n.item :software_updates, safe_join([material_symbol('report'), t('admin.critical_update_pending')]), admin_software_updates_path, if: -> { ENV['UPDATE_CHECK_URL'] != '' && current_user.can?(:view_devops) && SoftwareUpdate.urgent_pending? }, html: { class: 'warning' }
+ n.item :software_updates,
+ safe_join([material_symbol('report'), t('admin.critical_update_pending')]),
+ admin_software_updates_path,
+ if: -> { Rails.configuration.x.mastodon.software_update_url.present? && current_user.can?(:view_devops) && SoftwareUpdate.urgent_pending? },
+ html: { class: 'warning' }
n.item :profile, safe_join([material_symbol('person'), t('settings.profile')]), settings_profile_path, if: -> { current_user.functional? && !self_destruct }, highlights_on: %r{/settings/profile|/settings/featured_tags|/settings/verification|/settings/privacy}
diff --git a/config/routes.rb b/config/routes.rb
index b04ffe096c..867aedf707 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -65,6 +65,13 @@ Rails.application.routes.draw do
tokens: 'oauth/tokens'
end
+ namespace :oauth do
+ # As this is borrowed from OpenID, the specification says we must also support
+ # POST for the userinfo endpoint:
+ # https://openid.net/specs/openid-connect-core-1_0.html#UserInfo
+ match 'userinfo', via: [:get, :post], to: 'userinfo#show', defaults: { format: 'json' }
+ end
+
scope path: '.well-known' do
scope module: :well_known do
get 'oauth-authorization-server', to: 'oauth_metadata#show', as: :oauth_metadata, defaults: { format: 'json' }
diff --git a/config/routes/admin.rb b/config/routes/admin.rb
index 334e806227..517cd91e06 100644
--- a/config/routes/admin.rb
+++ b/config/routes/admin.rb
@@ -40,8 +40,10 @@ namespace :admin do
end
end
- get '/settings', to: redirect('/admin/settings/branding')
- get '/settings/edit', to: redirect('/admin/settings/branding')
+ with_options to: redirect('/admin/settings/branding') do
+ get '/settings'
+ get '/settings/edit'
+ end
namespace :settings do
resource :branding, only: [:show, :update], controller: 'branding'
diff --git a/config/routes/api.rb b/config/routes/api.rb
index c0e0e7a336..236bfcfa27 100644
--- a/config/routes/api.rb
+++ b/config/routes/api.rb
@@ -50,15 +50,17 @@ namespace :api, format: false do
resources :list, only: :show
end
- get '/streaming', to: 'streaming#index'
- get '/streaming/(*any)', to: 'streaming#index'
+ with_options to: 'streaming#index' do
+ get '/streaming'
+ get '/streaming/(*any)'
+ end
resources :custom_emojis, only: [:index]
resources :suggestions, only: [:index, :destroy]
resources :scheduled_statuses, only: [:index, :show, :update, :destroy]
resources :preferences, only: [:index]
- resources :annual_reports, only: [:index] do
+ resources :annual_reports, only: [:index, :show] do
member do
post :read
end
@@ -230,7 +232,7 @@ namespace :api, format: false do
resources :featured_tags, only: [:index, :create, :destroy]
- resources :polls, only: [:create, :show] do
+ resources :polls, only: [:show] do
resources :votes, only: :create, module: :polls
end
@@ -353,7 +355,7 @@ namespace :api, format: false do
namespace :web do
resource :settings, only: [:update]
resources :embeds, only: [:show]
- resources :push_subscriptions, only: [:create] do
+ resources :push_subscriptions, only: [:create, :destroy] do
member do
put :update
end
diff --git a/config/settings.yml b/config/settings.yml
index 360a31cc2c..b560f8ab24 100644
--- a/config/settings.yml
+++ b/config/settings.yml
@@ -25,14 +25,27 @@ defaults: &defaults
visible_reactions: 6
hide_followers_count: false
reserved_usernames:
+ - abuse
+ - account
+ - accounts
- admin
- - support
- - help
- - root
- - webmaster
+ - administration
- administrator
+ - admins
+ - help
+ - helpdesk
+ - instance
- mod
- moderator
+ - moderators
+ - mods
+ - owner
+ - root
+ - security
+ - server
+ - staff
+ - support
+ - webmaster
disallowed_hashtags: # space separated string or list of hashtags without the hash
bootstrap_timeline_accounts: ''
activity_api_enabled: true
diff --git a/config/translation.yml b/config/translation.yml
new file mode 100644
index 0000000000..e074c5d0f2
--- /dev/null
+++ b/config/translation.yml
@@ -0,0 +1,7 @@
+shared:
+ deepl:
+ api_key: <%= ENV.fetch('DEEPL_API_KEY', nil) %>
+ plan: <%= ENV.fetch('DEEPL_PLAN', 'free') %>
+ libre_translate:
+ api_key: <%= ENV.fetch('LIBRE_TRANSLATE_API_KEY', nil) %>
+ endpoint: <%= ENV.fetch('LIBRE_TRANSLATE_ENDPOINT', nil) %>
diff --git a/db/migrate/20241014010506_remove_duplicate_indexes.rb b/db/migrate/20241014010506_remove_duplicate_indexes.rb
new file mode 100644
index 0000000000..50e0e6ffcf
--- /dev/null
+++ b/db/migrate/20241014010506_remove_duplicate_indexes.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+class RemoveDuplicateIndexes < ActiveRecord::Migration[7.1]
+ def change
+ remove_index :account_aliases, :account_id
+ remove_index :account_relationship_severance_events, :account_id
+ remove_index :custom_filter_statuses, :status_id
+ remove_index :webauthn_credentials, :user_id
+ end
+end
diff --git a/db/migrate/20241022214312_add_untrusted_favourites_count_and_untrusted_reblogs_count_to_status_stat.rb b/db/migrate/20241022214312_add_untrusted_favourites_count_and_untrusted_reblogs_count_to_status_stat.rb
new file mode 100644
index 0000000000..e34caff240
--- /dev/null
+++ b/db/migrate/20241022214312_add_untrusted_favourites_count_and_untrusted_reblogs_count_to_status_stat.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+
+class AddUntrustedFavouritesCountAndUntrustedReblogsCountToStatusStat < ActiveRecord::Migration[7.1]
+ def change
+ add_column :status_stats, :untrusted_favourites_count, :bigint, null: true
+ add_column :status_stats, :untrusted_reblogs_count, :bigint, null: true
+ end
+end
diff --git a/db/migrate/20241104082851_create_annual_report_statuses_per_account_counts.rb b/db/migrate/20241104082851_create_annual_report_statuses_per_account_counts.rb
new file mode 100644
index 0000000000..c8ec30ad57
--- /dev/null
+++ b/db/migrate/20241104082851_create_annual_report_statuses_per_account_counts.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class CreateAnnualReportStatusesPerAccountCounts < ActiveRecord::Migration[7.1]
+ def change
+ create_table :annual_report_statuses_per_account_counts do |t| # rubocop:disable Rails/CreateTableWithTimestamps
+ t.integer :year, null: false
+ t.bigint :account_id, null: false
+ t.bigint :statuses_count, null: false
+ end
+
+ add_index :annual_report_statuses_per_account_counts, [:year, :account_id], unique: true
+ end
+end
diff --git a/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb b/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb
index 4271f8c08a..c35ad80028 100644
--- a/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb
+++ b/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb
@@ -15,21 +15,10 @@ class AddUniqueIndexOnPreviewCardsStatuses < ActiveRecord::Migration[6.1]
private
- def supports_concurrent_reindex?
- @supports_concurrent_reindex ||= begin
- ActiveRecord::Base.connection.database_version >= 120_000
- end
- end
-
def deduplicate_and_reindex!
deduplicate_preview_cards!
- if supports_concurrent_reindex?
- safety_assured { execute 'REINDEX INDEX CONCURRENTLY preview_cards_statuses_pkey' }
- else
- remove_index :preview_cards_statuses, name: :preview_cards_statuses_pkey
- add_index :preview_cards_statuses, [:status_id, :preview_card_id], name: :preview_cards_statuses_pkey, algorithm: :concurrently, unique: true
- end
+ safety_assured { execute 'REINDEX INDEX CONCURRENTLY preview_cards_statuses_pkey' }
rescue ActiveRecord::RecordNotUnique
retry
end
diff --git a/db/schema.rb b/db/schema.rb
index 99b097da38..3533db53a2 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema[7.1].define(version: 2024_10_07_071624) do
+ActiveRecord::Schema[7.2].define(version: 2024_11_04_082851) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -21,7 +21,6 @@ ActiveRecord::Schema[7.1].define(version: 2024_10_07_071624) do
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
t.index ["account_id", "uri"], name: "index_account_aliases_on_account_id_and_uri", unique: true
- t.index ["account_id"], name: "index_account_aliases_on_account_id"
end
create_table "account_conversations", force: :cascade do |t|
@@ -99,7 +98,6 @@ ActiveRecord::Schema[7.1].define(version: 2024_10_07_071624) do
t.integer "followers_count", default: 0, null: false
t.integer "following_count", default: 0, null: false
t.index ["account_id", "relationship_severance_event_id"], name: "idx_on_account_id_relationship_severance_event_id_7bd82bf20e", unique: true
- t.index ["account_id"], name: "index_account_relationship_severance_events_on_account_id"
t.index ["relationship_severance_event_id"], name: "idx_on_relationship_severance_event_id_403f53e707"
end
@@ -262,6 +260,13 @@ ActiveRecord::Schema[7.1].define(version: 2024_10_07_071624) do
t.bigint "status_ids", array: true
end
+ create_table "annual_report_statuses_per_account_counts", force: :cascade do |t|
+ t.integer "year", null: false
+ t.bigint "account_id", null: false
+ t.bigint "statuses_count", null: false
+ t.index ["year", "account_id"], name: "idx_on_year_account_id_ff3e167cef", unique: true
+ end
+
create_table "appeals", force: :cascade do |t|
t.bigint "account_id", null: false
t.bigint "account_warning_id", null: false
@@ -397,7 +402,6 @@ ActiveRecord::Schema[7.1].define(version: 2024_10_07_071624) do
t.datetime "updated_at", null: false
t.index ["custom_filter_id"], name: "index_custom_filter_statuses_on_custom_filter_id"
t.index ["status_id", "custom_filter_id"], name: "index_custom_filter_statuses_on_status_id_and_custom_filter_id", unique: true
- t.index ["status_id"], name: "index_custom_filter_statuses_on_status_id"
end
create_table "custom_filters", force: :cascade do |t|
@@ -1024,6 +1028,8 @@ ActiveRecord::Schema[7.1].define(version: 2024_10_07_071624) do
t.bigint "favourites_count", default: 0, null: false
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
+ t.bigint "untrusted_favourites_count"
+ t.bigint "untrusted_reblogs_count"
t.index ["status_id"], name: "index_status_stats_on_status_id", unique: true
end
@@ -1217,7 +1223,6 @@ ActiveRecord::Schema[7.1].define(version: 2024_10_07_071624) do
t.datetime "updated_at", precision: nil, null: false
t.index ["external_id"], name: "index_webauthn_credentials_on_external_id", unique: true
t.index ["user_id", "nickname"], name: "index_webauthn_credentials_on_user_id_and_nickname", unique: true
- t.index ["user_id"], name: "index_webauthn_credentials_on_user_id"
end
create_table "webhooks", force: :cascade do |t|
diff --git a/docker-compose.yml b/docker-compose.yml
index 37cb16497f..6018b85a70 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -59,7 +59,7 @@ services:
web:
# You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes
# build: .
- image: ghcr.io/mastodon/mastodon:v4.3.0
+ image: ghcr.io/mastodon/mastodon:v4.3.1
restart: always
env_file: .env.production
command: bundle exec puma -C config/puma.rb
@@ -83,7 +83,7 @@ services:
# build:
# dockerfile: ./streaming/Dockerfile
# context: .
- image: ghcr.io/mastodon/mastodon-streaming:v4.3.0
+ image: ghcr.io/mastodon/mastodon-streaming:v4.3.1
restart: always
env_file: .env.production
command: node ./streaming/index.js
@@ -101,7 +101,7 @@ services:
sidekiq:
build: .
- image: ghcr.io/mastodon/mastodon:v4.3.0
+ image: ghcr.io/mastodon/mastodon:v4.3.1
restart: always
env_file: .env.production
command: bundle exec sidekiq
diff --git a/lib/active_record/with_recursive.rb b/lib/active_record/with_recursive.rb
deleted file mode 100644
index 4bd3e81eed..0000000000
--- a/lib/active_record/with_recursive.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-# frozen_string_literal: true
-
-# Add support for writing recursive CTEs in ActiveRecord
-
-# Initially from Lorin Thwaits (https://github.com/lorint) as per comment:
-# https://github.com/vlado/activerecord-cte/issues/16#issuecomment-1433043310
-
-# Modified from the above code to change the signature to
-# `with_recursive(hash)` and extending CTE hash values to also includes arrays
-# of values that get turned into UNION ALL expressions.
-
-# This implementation has been merged in Rails: https://github.com/rails/rails/pull/51601
-
-module ActiveRecord
- module QueryMethodsExtensions
- def with_recursive(*args)
- @with_is_recursive = true
- check_if_method_has_arguments!(__callee__, args)
- spawn.with_recursive!(*args)
- end
-
- # Like #with_recursive but modifies the relation in place.
- def with_recursive!(*args) # :nodoc:
- self.with_values += args
- @with_is_recursive = true
- self
- end
-
- private
-
- def build_with(arel)
- return if with_values.empty?
-
- with_statements = with_values.map do |with_value|
- raise ArgumentError, "Unsupported argument type: #{with_value} #{with_value.class}" unless with_value.is_a?(Hash)
-
- build_with_value_from_hash(with_value)
- end
-
- # Was: arel.with(with_statements)
- @with_is_recursive ? arel.with(:recursive, with_statements) : arel.with(with_statements)
- end
-
- def build_with_value_from_hash(hash)
- hash.map do |name, value|
- Arel::Nodes::TableAlias.new(build_with_expression_from_value(value), name)
- end
- end
-
- def build_with_expression_from_value(value)
- case value
- when Arel::Nodes::SqlLiteral then Arel::Nodes::Grouping.new(value)
- when ActiveRecord::Relation then value.arel
- when Arel::SelectManager then value
- when Array then value.map { |e| build_with_expression_from_value(e) }.reduce { |result, value| Arel::Nodes::UnionAll.new(result, value) }
- else
- raise ArgumentError, "Unsupported argument type: `#{value}` #{value.class}"
- end
- end
- end
-end
-
-ActiveSupport.on_load(:active_record) do
- ActiveRecord::QueryMethods.prepend(ActiveRecord::QueryMethodsExtensions)
-end
diff --git a/lib/arel/union_parenthesizing.rb b/lib/arel/union_parenthesizing.rb
deleted file mode 100644
index 852d8e92d8..0000000000
--- a/lib/arel/union_parenthesizing.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-# frozen_string_literal: true
-
-# Fix an issue with `LIMIT` ocurring on the left side of a `UNION` causing syntax errors.
-# See https://github.com/rails/rails/issues/40181
-
-# The fix has been merged in ActiveRecord: https://github.com/rails/rails/pull/51549
-# TODO: drop this when available in ActiveRecord
-
-# rubocop:disable all -- This is a mostly vendored file
-
-module Arel
- module Visitors
- class ToSql
- private
-
- def infix_value_with_paren(o, collector, value, suppress_parens = false)
- collector << "( " unless suppress_parens
- collector = if o.left.class == o.class
- infix_value_with_paren(o.left, collector, value, true)
- else
- select_parentheses o.left, collector, false # Changed from `visit o.left, collector`
- end
- collector << value
- collector = if o.right.class == o.class
- infix_value_with_paren(o.right, collector, value, true)
- else
- select_parentheses o.right, collector, false # Changed from `visit o.right, collector`
- end
- collector << " )" unless suppress_parens
- collector
- end
-
- def select_parentheses(o, collector, always_wrap_selects = true)
- if o.is_a?(Nodes::SelectStatement) && (always_wrap_selects || require_parentheses?(o))
- collector << "("
- visit o, collector
- collector << ")"
- collector
- else
- visit o, collector
- end
- end
-
- def require_parentheses?(o)
- !o.orders.empty? || o.limit || o.offset
- end
- end
- end
-end
-
-# rubocop:enable all
diff --git a/lib/mastodon/cli/accounts.rb b/lib/mastodon/cli/accounts.rb
index e76735298f..c8e91224cf 100644
--- a/lib/mastodon/cli/accounts.rb
+++ b/lib/mastodon/cli/accounts.rb
@@ -1,6 +1,5 @@
# frozen_string_literal: true
-require 'set'
require_relative 'base'
module Mastodon::CLI
@@ -322,7 +321,9 @@ module Mastodon::CLI
unless skip_domains.empty?
say('The following domains were not available during the check:', :yellow)
- skip_domains.each { |domain| say(" #{domain}") }
+ shell.indent(2) do
+ skip_domains.each { |domain| say(domain) }
+ end
end
end
diff --git a/lib/mastodon/cli/cache.rb b/lib/mastodon/cli/cache.rb
index f32ab292ee..cfb6cba1ff 100644
--- a/lib/mastodon/cli/cache.rb
+++ b/lib/mastodon/cli/cache.rb
@@ -52,7 +52,7 @@ module Mastodon::CLI
account.account_stat.tap do |account_stat|
account_stat.following_count = account.active_relationships.count
account_stat.followers_count = account.passive_relationships.count
- account_stat.statuses_count = account.statuses.where.not(visibility: :direct).count
+ account_stat.statuses_count = account.statuses.not_direct_visibility.count
account_stat.save if account_stat.changed?
end
@@ -60,7 +60,7 @@ module Mastodon::CLI
def recount_status_stats(status)
status.status_stat.tap do |status_stat|
- status_stat.replies_count = status.replies.where.not(visibility: :direct).count
+ status_stat.replies_count = status.replies.not_direct_visibility.count
status_stat.reblogs_count = status.reblogs.count
status_stat.favourites_count = status.favourites.count
diff --git a/lib/mastodon/cli/email_domain_blocks.rb b/lib/mastodon/cli/email_domain_blocks.rb
index 6b9107c8ad..0cc9ccb705 100644
--- a/lib/mastodon/cli/email_domain_blocks.rb
+++ b/lib/mastodon/cli/email_domain_blocks.rb
@@ -7,11 +7,13 @@ module Mastodon::CLI
class EmailDomainBlocks < Base
desc 'list', 'List blocked e-mail domains'
def list
- EmailDomainBlock.where(parent_id: nil).find_each do |entry|
- say(entry.domain.to_s, :white)
+ EmailDomainBlock.parents.find_each do |parent|
+ say(parent.domain.to_s, :white)
- EmailDomainBlock.where(parent_id: entry.id).find_each do |child|
- say(" #{child.domain}", :cyan)
+ shell.indent do
+ EmailDomainBlock.where(parent_id: parent.id).find_each do |child|
+ say(child.domain, :cyan)
+ end
end
end
end
@@ -43,12 +45,7 @@ module Mastodon::CLI
end
other_domains = []
- if options[:with_dns_records]
- Resolv::DNS.open do |dns|
- dns.timeouts = 5
- other_domains = dns.getresources(@email_domain_block.domain, Resolv::DNS::Resource::IN::MX).to_a
- end
- end
+ other_domains = DomainResource.new(domain).mx if options[:with_dns_records]
email_domain_block = EmailDomainBlock.new(domain: domain, other_domains: other_domains)
email_domain_block.save!
diff --git a/lib/mastodon/cli/emoji.rb b/lib/mastodon/cli/emoji.rb
index 4a8949de0e..206961f854 100644
--- a/lib/mastodon/cli/emoji.rb
+++ b/lib/mastodon/cli/emoji.rb
@@ -62,7 +62,9 @@ module Mastodon::CLI
failed += 1
say('Failure/Error: ', :red)
say(entry.full_name)
- say(" #{custom_emoji.errors[:image].join(', ')}", :red)
+ shell.indent(2) do
+ say(custom_emoji.errors[:image].join(', '), :red)
+ end
end
end
end
diff --git a/lib/mastodon/cli/ip_blocks.rb b/lib/mastodon/cli/ip_blocks.rb
index ef24f2e047..f1f40c99ce 100644
--- a/lib/mastodon/cli/ip_blocks.rb
+++ b/lib/mastodon/cli/ip_blocks.rb
@@ -80,9 +80,9 @@ module Mastodon::CLI
end
ip_blocks = if options[:force]
- IpBlock.where('ip >>= ?', address)
+ IpBlock.containing(address)
else
- IpBlock.where('ip <<= ?', address)
+ IpBlock.contained_by(address)
end
if ip_blocks.empty?
diff --git a/lib/mastodon/cli/media.rb b/lib/mastodon/cli/media.rb
index 996b7fd92c..68420fb15d 100644
--- a/lib/mastodon/cli/media.rb
+++ b/lib/mastodon/cli/media.rb
@@ -6,6 +6,8 @@ module Mastodon::CLI
class Media < Base
include ActionView::Helpers::NumberHelper
+ class UnrecognizedOrphanType < StandardError; end
+
VALID_PATH_SEGMENTS_SIZE = [7, 10].freeze
option :days, type: :numeric, default: 7, aliases: [:d]
@@ -120,23 +122,10 @@ module Mastodon::CLI
object.acl.put(acl: s3_permissions) if options[:fix_permissions] && !dry_run?
path_segments = object.key.split('/')
- path_segments.delete('cache')
-
- unless VALID_PATH_SEGMENTS_SIZE.include?(path_segments.size)
- progress.log(pastel.yellow("Unrecognized file found: #{object.key}"))
- next
- end
-
- model_name = path_segments.first.classify
- attachment_name = path_segments[1].singularize
- record_id = path_segments[2...-2].join.to_i
- file_name = path_segments.last
- record = record_map.dig(model_name, record_id)
- attachment = record&.public_send(attachment_name)
progress.increment
- next unless attachment.blank? || !attachment.variant?(file_name)
+ next unless orphaned_file?(path_segments, record_map)
begin
object.delete unless dry_run?
@@ -148,6 +137,8 @@ module Mastodon::CLI
rescue => e
progress.log(pastel.red("Error processing #{object.key}: #{e}"))
end
+ rescue UnrecognizedOrphanType
+ progress.log(pastel.yellow("Unrecognized file found: #{object.key}"))
end
end
when :fog
@@ -165,26 +156,10 @@ module Mastodon::CLI
key = path.gsub("#{root_path}#{File::SEPARATOR}", '')
path_segments = key.split(File::SEPARATOR)
- path_segments.delete('cache')
-
- unless VALID_PATH_SEGMENTS_SIZE.include?(path_segments.size)
- progress.log(pastel.yellow("Unrecognized file found: #{key}"))
- next
- end
-
- model_name = path_segments.first.classify
- record_id = path_segments[2...-2].join.to_i
- attachment_name = path_segments[1].singularize
- file_name = path_segments.last
-
- next unless PRELOADED_MODELS.include?(model_name)
-
- record = model_name.constantize.find_by(id: record_id)
- attachment = record&.public_send(attachment_name)
progress.increment
- next unless attachment.blank? || !attachment.variant?(file_name)
+ next unless orphaned_file?(path_segments)
begin
size = File.size(path)
@@ -205,6 +180,8 @@ module Mastodon::CLI
rescue => e
progress.log(pastel.red("Error processing #{key}: #{e}"))
end
+ rescue UnrecognizedOrphanType
+ progress.log(pastel.yellow("Unrecognized file found: #{path}"))
end
end
@@ -364,5 +341,23 @@ module Mastodon::CLI
model_map[model_name] = model_name.constantize.where(id: record_ids).index_by(&:id)
end
end
+
+ def orphaned_file?(path_segments, record_map = nil)
+ path_segments.delete('cache')
+
+ raise UnrecognizedOrphanType unless VALID_PATH_SEGMENTS_SIZE.include?(path_segments.size)
+
+ model_name = path_segments.first.classify
+ record_id = path_segments[2...-2].join.to_i
+ attachment_name = path_segments[1].singularize
+ file_name = path_segments.last
+
+ raise UnrecognizedOrphanType unless PRELOADED_MODELS.include?(model_name)
+
+ record = record_map.present? ? record_map.dig(model_name, record_id) : model_name.constantize.find_by(id: record_id)
+ attachment = record&.public_send(attachment_name)
+
+ attachment.blank? || !attachment.variant?(file_name)
+ end
end
end
diff --git a/lib/mastodon/cli/progress_helper.rb b/lib/mastodon/cli/progress_helper.rb
index 5634343796..da9527ffd7 100644
--- a/lib/mastodon/cli/progress_helper.rb
+++ b/lib/mastodon/cli/progress_helper.rb
@@ -5,7 +5,7 @@ dev_null = Logger.new('/dev/null')
Rails.logger = dev_null
ActiveRecord::Base.logger = dev_null
ActiveJob::Base.logger = dev_null
-HttpLog.configuration.logger = dev_null
+HttpLog.configuration.logger = dev_null if defined?(HttpLog)
Paperclip.options[:log] = false
Chewy.logger = dev_null
diff --git a/lib/paperclip/vips_lazy_thumbnail.rb b/lib/paperclip/vips_lazy_thumbnail.rb
index 4764b04af8..fea4b86064 100644
--- a/lib/paperclip/vips_lazy_thumbnail.rb
+++ b/lib/paperclip/vips_lazy_thumbnail.rb
@@ -52,6 +52,7 @@ module Paperclip
# implement. If cropping ever becomes necessary for other situations, this will
# need to be expanded.
crop_width = crop_height = [target_width, target_height].min if @target_geometry&.square?
+ crop_width = crop_height = "'min(iw,ih)'" if crop_width == 'ih'
filter = begin
if @crop
diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake
index 2822f2eeb1..e1e2dd8194 100644
--- a/lib/tasks/mastodon.rake
+++ b/lib/tasks/mastodon.rake
@@ -596,7 +596,7 @@ def disable_log_stdout!
Rails.logger = dev_null
ActiveRecord::Base.logger = dev_null
- HttpLog.configuration.logger = dev_null
+ HttpLog.configuration.logger = dev_null if defined?(HttpLog)
Paperclip.options[:log] = false
end
diff --git a/lib/tasks/repo.rake b/lib/tasks/repo.rake
index 539c44273f..c8f977f651 100644
--- a/lib/tasks/repo.rake
+++ b/lib/tasks/repo.rake
@@ -18,7 +18,7 @@ namespace :repo do
url = "https://api.github.com/repos/#{REPOSITORY_NAME}/contributors?anon=1"
- HttpLog.config.compact_log = true
+ HttpLog.config.compact_log = true if defined?(HttpLog)
while url.present?
response = HTTP.get(url)
@@ -43,7 +43,7 @@ namespace :repo do
path = Rails.root.join('CHANGELOG.md')
tmp = Tempfile.new
- HttpLog.config.compact_log = true
+ HttpLog.config.compact_log = true if defined?(HttpLog)
begin
File.open(path, 'r') do |file|
diff --git a/lib/tasks/tests.rake b/lib/tasks/tests.rake
index cb7fce3139..74269439dd 100644
--- a/lib/tasks/tests.rake
+++ b/lib/tasks/tests.rake
@@ -11,7 +11,7 @@ namespace :tests do
'3_3_0' => 2020_12_18_054746,
}.each do |release, version|
ActiveRecord::Tasks::DatabaseTasks
- .migration_connection
+ .migration_connection_pool
.migration_context
.migrate(version)
Rake::Task["tests:migrations:populate_v#{release}"]
diff --git a/package.json b/package.json
index 0465b4d44d..7e42cf47b9 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "@mastodon/mastodon",
"license": "AGPL-3.0-or-later",
- "packageManager": "yarn@4.5.0",
+ "packageManager": "yarn@4.5.1",
"engines": {
"node": ">=18"
},
@@ -48,7 +48,7 @@
"@formatjs/intl-pluralrules": "^5.2.2",
"@gamestdio/websocket": "^0.3.2",
"@github/webauthn-json": "^2.1.1",
- "@rails/ujs": "7.1.400",
+ "@rails/ujs": "7.1.402",
"@reduxjs/toolkit": "^2.0.1",
"@svgr/webpack": "^5.5.0",
"arrow-key-navigation": "^1.2.0",
@@ -180,13 +180,13 @@
"eslint": "^8.41.0",
"eslint-define-config": "^2.0.0",
"eslint-import-resolver-typescript": "^3.5.5",
- "eslint-plugin-formatjs": "^4.10.1",
+ "eslint-plugin-formatjs": "^5.0.0",
"eslint-plugin-import": "~2.30.0",
"eslint-plugin-jsdoc": "^50.0.0",
"eslint-plugin-jsx-a11y": "~6.10.0",
"eslint-plugin-promise": "~7.1.0",
"eslint-plugin-react": "^7.33.2",
- "eslint-plugin-react-hooks": "^4.6.0",
+ "eslint-plugin-react-hooks": "^5.0.0",
"husky": "^9.0.11",
"jest": "^29.5.0",
"jest-environment-jsdom": "^29.5.0",
diff --git a/spec/controllers/admin/confirmations_controller_spec.rb b/spec/controllers/admin/confirmations_controller_spec.rb
index 9559160786..59ea0121ca 100644
--- a/spec/controllers/admin/confirmations_controller_spec.rb
+++ b/spec/controllers/admin/confirmations_controller_spec.rb
@@ -11,7 +11,7 @@ RSpec.describe Admin::ConfirmationsController do
describe 'POST #create' do
it 'confirms the user' do
- user = Fabricate(:user, confirmed_at: false)
+ user = Fabricate(:user, confirmed_at: nil)
post :create, params: { account_id: user.account.id }
expect(response).to redirect_to(admin_accounts_path)
diff --git a/spec/controllers/admin/invites_controller_spec.rb b/spec/controllers/admin/invites_controller_spec.rb
deleted file mode 100644
index b6471e80b2..0000000000
--- a/spec/controllers/admin/invites_controller_spec.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Admin::InvitesController do
- render_views
-
- let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
-
- before do
- sign_in user, scope: :user
- end
-
- describe 'GET #index' do
- subject { get :index, params: { available: true } }
-
- let!(:invite) { Fabricate(:invite) }
-
- it 'renders index page' do
- expect(subject).to render_template :index
- expect(response.body)
- .to include(invite.code)
- end
- end
-
- describe 'POST #create' do
- subject { post :create, params: { invite: { max_uses: '10', expires_in: 1800 } } }
-
- it 'succeeds to create a invite' do
- expect { subject }.to change(Invite, :count).by(1)
- expect(subject).to redirect_to admin_invites_path
- expect(Invite.last).to have_attributes(user_id: user.id, max_uses: 10)
- end
- end
-
- describe 'DELETE #destroy' do
- subject { delete :destroy, params: { id: invite.id } }
-
- let!(:invite) { Fabricate(:invite, expires_at: nil) }
-
- it 'expires invite' do
- expect(subject).to redirect_to admin_invites_path
- expect(invite.reload).to be_expired
- end
- end
-
- describe 'POST #deactivate_all' do
- before { Fabricate(:invite, expires_at: nil) }
-
- it 'expires all invites, then redirects to admin_invites_path' do
- expect { post :deactivate_all }
- .to change { Invite.exists?(expires_at: nil) }
- .from(true)
- .to(false)
-
- expect(response).to redirect_to admin_invites_path
- end
- end
-end
diff --git a/spec/controllers/api/base_controller_spec.rb b/spec/controllers/api/base_controller_spec.rb
index 1e0e7c8f4d..bd4073dfaf 100644
--- a/spec/controllers/api/base_controller_spec.rb
+++ b/spec/controllers/api/base_controller_spec.rb
@@ -7,10 +7,6 @@ RSpec.describe Api::BaseController do
def success
head 200
end
-
- def failure
- FakeService.new
- end
end
it 'returns private cache control headers by default' do
diff --git a/spec/controllers/auth/challenges_controller_spec.rb b/spec/controllers/auth/challenges_controller_spec.rb
index 56fdfa61b5..3c9d2a5964 100644
--- a/spec/controllers/auth/challenges_controller_spec.rb
+++ b/spec/controllers/auth/challenges_controller_spec.rb
@@ -8,9 +8,7 @@ RSpec.describe Auth::ChallengesController do
let(:password) { 'foobar12345' }
let(:user) { Fabricate(:user, password: password) }
- before do
- sign_in user
- end
+ before { sign_in user }
describe 'POST #create' do
let(:return_to) { edit_user_registration_path }
@@ -18,28 +16,24 @@ RSpec.describe Auth::ChallengesController do
context 'with correct password' do
before { post :create, params: { form_challenge: { return_to: return_to, current_password: password } } }
- it 'redirects back' do
- expect(response).to redirect_to(return_to)
- end
-
- it 'sets session' do
- expect(session[:challenge_passed_at]).to_not be_nil
+ it 'redirects back and sets challenge passed at in session' do
+ expect(response)
+ .to redirect_to(return_to)
+ expect(session[:challenge_passed_at])
+ .to_not be_nil
end
end
context 'with incorrect password' do
before { post :create, params: { form_challenge: { return_to: return_to, current_password: 'hhfggjjd562' } } }
- it 'renders challenge' do
- expect(response).to render_template('auth/challenges/new')
- end
-
- it 'displays error' do
- expect(response.body).to include 'Invalid password'
- end
-
- it 'does not set session' do
- expect(session[:challenge_passed_at]).to be_nil
+ it 'renders challenge, displays error, does not set session' do
+ expect(response)
+ .to render_template('auth/challenges/new')
+ expect(response.body)
+ .to include 'Invalid password'
+ expect(session[:challenge_passed_at])
+ .to be_nil
end
end
end
diff --git a/spec/controllers/auth/confirmations_controller_spec.rb b/spec/controllers/auth/confirmations_controller_spec.rb
index a5b212e660..09a178f0e8 100644
--- a/spec/controllers/auth/confirmations_controller_spec.rb
+++ b/spec/controllers/auth/confirmations_controller_spec.rb
@@ -23,12 +23,11 @@ RSpec.describe Auth::ConfirmationsController do
get :show, params: { confirmation_token: 'foobar' }
end
- it 'redirects to login' do
- expect(response).to redirect_to(new_user_session_path)
- end
-
- it 'queues up bootstrapping of home timeline' do
- expect(BootstrapTimelineWorker).to have_received(:perform_async).with(user.account_id)
+ it 'redirects to login and queues worker' do
+ expect(response)
+ .to redirect_to(new_user_session_path)
+ expect(BootstrapTimelineWorker)
+ .to have_received(:perform_async).with(user.account_id)
end
end
@@ -88,13 +87,13 @@ RSpec.describe Auth::ConfirmationsController do
get :show, params: { confirmation_token: 'foobar' }
end
- it 'redirects to login and confirms email' do
- expect(response).to redirect_to(new_user_session_path)
- expect(user.reload.unconfirmed_email).to be_nil
- end
-
- it 'does not queue up bootstrapping of home timeline' do
- expect(BootstrapTimelineWorker).to_not have_received(:perform_async)
+ it 'redirects to login, confirms email, does not queue worker' do
+ expect(response)
+ .to redirect_to(new_user_session_path)
+ expect(user.reload.unconfirmed_email)
+ .to be_nil
+ expect(BootstrapTimelineWorker)
+ .to_not have_received(:perform_async)
end
end
end
diff --git a/spec/controllers/auth/passwords_controller_spec.rb b/spec/controllers/auth/passwords_controller_spec.rb
index 9ccbb9e494..90095ac4b8 100644
--- a/spec/controllers/auth/passwords_controller_spec.rb
+++ b/spec/controllers/auth/passwords_controller_spec.rb
@@ -57,29 +57,30 @@ RSpec.describe Auth::PasswordsController do
post :update, params: { user: { password: password, password_confirmation: password, reset_password_token: token } }
end
- it 'redirect to sign in' do
- expect(response).to redirect_to '/auth/sign_in'
- end
+ it 'resets the password' do
+ expect(response)
+ .to redirect_to '/auth/sign_in'
- it 'changes password' do
- this_user = User.find(user.id)
+ # Change password
+ expect(User.find(user.id))
+ .to be_present
+ .and be_valid_password(password)
- expect(this_user).to_not be_nil
- expect(this_user.valid_password?(password)).to be true
- end
+ # Deactivate session
+ expect(user.session_activations.count)
+ .to eq 0
+ expect { session_activation.reload }
+ .to raise_error(ActiveRecord::RecordNotFound)
- it 'deactivates all sessions' do
- expect(user.session_activations.count).to eq 0
- expect { session_activation.reload }.to raise_error(ActiveRecord::RecordNotFound)
- end
+ # Revoke tokens
+ expect(Doorkeeper::AccessToken.active_for(user).count)
+ .to eq 0
- it 'revokes all access tokens' do
- expect(Doorkeeper::AccessToken.active_for(user).count).to eq 0
- end
-
- it 'removes push subscriptions' do
- expect(Web::PushSubscription.where(user: user).or(Web::PushSubscription.where(access_token: access_token)).count).to eq 0
- expect { web_push_subscription.reload }.to raise_error(ActiveRecord::RecordNotFound)
+ # Remove push subs
+ expect(Web::PushSubscription.where(user: user).or(Web::PushSubscription.where(access_token: access_token)).count)
+ .to eq 0
+ expect { web_push_subscription.reload }
+ .to raise_error(ActiveRecord::RecordNotFound)
end
end
@@ -88,15 +89,13 @@ RSpec.describe Auth::PasswordsController do
post :update, params: { user: { password: password, password_confirmation: password, reset_password_token: 'some_invalid_value' } }
end
- it 'renders reset password' do
- expect(response).to render_template(:new)
- end
+ it 'renders reset password and retains password' do
+ expect(response)
+ .to render_template(:new)
- it 'retains password' do
- this_user = User.find(user.id)
-
- expect(this_user).to_not be_nil
- expect(this_user.external_or_valid_password?(user.password)).to be true
+ expect(User.find(user.id))
+ .to be_present
+ .and be_external_or_valid_password(user.password)
end
end
end
diff --git a/spec/controllers/auth/registrations_controller_spec.rb b/spec/controllers/auth/registrations_controller_spec.rb
index 6118edf4e3..739cb455e8 100644
--- a/spec/controllers/auth/registrations_controller_spec.rb
+++ b/spec/controllers/auth/registrations_controller_spec.rb
@@ -6,25 +6,33 @@ RSpec.describe Auth::RegistrationsController do
render_views
shared_examples 'checks for enabled registrations' do |path|
- it 'redirects if it is in single user mode while it is open for registration' do
- Fabricate(:account)
- Setting.registrations_mode = 'open'
- allow(Rails.configuration.x).to receive(:single_user_mode).and_return(true)
+ context 'when in single user mode and open for registration' do
+ before do
+ Setting.registrations_mode = 'open'
+ allow(Rails.configuration.x).to receive(:single_user_mode).and_return(true)
+ end
- get path
+ it 'redirects to root' do
+ Fabricate(:account)
+ get path
- expect(response).to redirect_to '/'
- expect(Rails.configuration.x).to have_received(:single_user_mode)
+ expect(response).to redirect_to '/'
+ expect(Rails.configuration.x).to have_received(:single_user_mode)
+ end
end
- it 'redirects if it is not open for registration while it is not in single user mode' do
- Setting.registrations_mode = 'none'
- allow(Rails.configuration.x).to receive(:single_user_mode).and_return(false)
+ context 'when registrations closed and not in single user mode' do
+ before do
+ Setting.registrations_mode = 'none'
+ allow(Rails.configuration.x).to receive(:single_user_mode).and_return(false)
+ end
- get path
+ it 'redirects to root' do
+ get path
- expect(response).to redirect_to '/'
- expect(Rails.configuration.x).to have_received(:single_user_mode)
+ expect(response).to redirect_to '/'
+ expect(Rails.configuration.x).to have_received(:single_user_mode)
+ end
end
end
@@ -35,12 +43,12 @@ RSpec.describe Auth::RegistrationsController do
get :edit
end
- it 'returns http success' do
- expect(response).to have_http_status(200)
- end
+ it 'returns http success and cache headers' do
+ expect(response)
+ .to have_http_status(200)
- it 'returns private cache control header' do
- expect(response.headers['Cache-Control']).to include('private, no-store')
+ expect(response.headers['Cache-Control'])
+ .to include('private, no-store')
end
end
@@ -53,14 +61,13 @@ RSpec.describe Auth::RegistrationsController do
sign_in(user, scope: :user)
end
- it 'returns http success' do
+ it 'returns http success and cache headers' do
put :update
- expect(response).to have_http_status(200)
- end
- it 'returns private cache control headers' do
- put :update
- expect(response.headers['Cache-Control']).to include('private, no-store')
+ expect(response)
+ .to have_http_status(200)
+ expect(response.headers['Cache-Control'])
+ .to include('private, no-store')
end
it 'can update the user email' do
@@ -174,16 +181,14 @@ RSpec.describe Auth::RegistrationsController do
post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', agreement: 'true' } }
end
- it 'redirects to setup' do
+ it 'redirects to setup and creates user' do
subject
- expect(response).to redirect_to auth_setup_path
- end
- it 'creates user' do
- subject
- user = User.find_by(email: 'test@example.com')
- expect(user).to_not be_nil
- expect(user.locale).to eq(accept_language)
+ expect(response)
+ .to redirect_to auth_setup_path
+ expect(User.find_by(email: 'test@example.com'))
+ .to be_present
+ .and have_attributes(locale: eq(accept_language))
end
end
@@ -233,17 +238,7 @@ RSpec.describe Auth::RegistrationsController do
Setting.registrations_mode = 'open'
Fabricate(:email_domain_block, allow_with_approval: true, domain: 'mail.example.com')
allow(User).to receive(:skip_mx_check?).and_return(false)
-
- resolver = instance_double(Resolv::DNS, :timeouts= => nil)
-
- allow(resolver).to receive(:getresources)
- .with('example.com', Resolv::DNS::Resource::IN::MX)
- .and_return([instance_double(Resolv::DNS::Resource::MX, exchange: 'mail.example.com')])
- allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([])
- allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
- allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::A).and_return([instance_double(Resolv::DNS::Resource::IN::A, address: '2.3.4.5')])
- allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::AAAA).and_return([instance_double(Resolv::DNS::Resource::IN::AAAA, address: 'fd00::2')])
- allow(Resolv::DNS).to receive(:open).and_yield(resolver)
+ configure_mx(domain: 'example.com', exchange: 'mail.example.com')
end
it 'creates unapproved user and redirects to setup' do
@@ -264,17 +259,18 @@ RSpec.describe Auth::RegistrationsController do
post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', agreement: 'true' } }
end
- it 'redirects to setup' do
+ it 'redirects to setup and creates user' do
subject
- expect(response).to redirect_to auth_setup_path
- end
- it 'creates user' do
- subject
- user = User.find_by(email: 'test@example.com')
- expect(user).to_not be_nil
- expect(user.locale).to eq(accept_language)
- expect(user.approved).to be(false)
+ expect(response)
+ .to redirect_to auth_setup_path
+
+ expect(User.find_by(email: 'test@example.com'))
+ .to be_present
+ .and have_attributes(
+ locale: eq(accept_language),
+ approved: be(false)
+ )
end
end
@@ -286,17 +282,17 @@ RSpec.describe Auth::RegistrationsController do
post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', invite_code: invite.code, agreement: 'true' } }
end
- it 'redirects to setup' do
+ it 'redirects to setup and creates user' do
subject
- expect(response).to redirect_to auth_setup_path
- end
- it 'creates user' do
- subject
- user = User.find_by(email: 'test@example.com')
- expect(user).to_not be_nil
- expect(user.locale).to eq(accept_language)
- expect(user.approved).to be(false)
+ expect(response).to redirect_to auth_setup_path
+
+ expect(User.find_by(email: 'test@example.com'))
+ .to be_present
+ .and have_attributes(
+ locale: eq(accept_language),
+ approved: be(false)
+ )
end
end
@@ -310,17 +306,17 @@ RSpec.describe Auth::RegistrationsController do
post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', invite_code: invite.code, agreement: 'true' } }
end
- it 'redirects to setup' do
+ it 'redirects to setup and creates user' do
subject
- expect(response).to redirect_to auth_setup_path
- end
- it 'creates user' do
- subject
- user = User.find_by(email: 'test@example.com')
- expect(user).to_not be_nil
- expect(user.locale).to eq(accept_language)
- expect(user.approved).to be(true)
+ expect(response).to redirect_to auth_setup_path
+
+ expect(User.find_by(email: 'test@example.com'))
+ .to be_present
+ .and have_attributes(
+ locale: eq(accept_language),
+ approved: be(true)
+ )
end
end
@@ -358,12 +354,11 @@ RSpec.describe Auth::RegistrationsController do
delete :destroy
end
- it 'returns http not found' do
- expect(response).to have_http_status(404)
- end
-
- it 'does not delete user' do
- expect(User.find(user.id)).to_not be_nil
+ it 'returns http not found and keeps user' do
+ expect(response)
+ .to have_http_status(404)
+ expect(User.find(user.id))
+ .to_not be_nil
end
end
end
diff --git a/spec/controllers/statuses_controller_spec.rb b/spec/controllers/statuses_controller_spec.rb
index d9702251f4..121e4aa6c6 100644
--- a/spec/controllers/statuses_controller_spec.rb
+++ b/spec/controllers/statuses_controller_spec.rb
@@ -736,76 +736,4 @@ RSpec.describe StatusesController do
end
end
end
-
- describe 'GET #embed' do
- let(:account) { Fabricate(:account) }
- let(:status) { Fabricate(:status, account: account) }
-
- context 'when account is suspended' do
- let(:account) { Fabricate(:account, suspended: true) }
-
- before do
- get :embed, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http gone' do
- expect(response).to have_http_status(410)
- end
- end
-
- context 'when status is a reblog' do
- let(:original_account) { Fabricate(:account, domain: 'example.com') }
- let(:original_status) { Fabricate(:status, account: original_account, url: 'https://example.com/123') }
- let(:status) { Fabricate(:status, account: account, reblog: original_status) }
-
- before do
- get :embed, params: { account_username: status.account.username, id: status.id }
- end
-
- it 'returns http not found' do
- expect(response).to have_http_status(404)
- end
- end
-
- context 'when status is public' do
- before do
- get :embed, params: { account_username: status.account.username, id: status.id }
- end
-
- it 'renders status successfully', :aggregate_failures do
- expect(response)
- .to have_http_status(200)
- .and render_template(:embed)
- expect(response.headers).to include(
- 'Vary' => 'Accept, Accept-Language, Cookie',
- 'Cache-Control' => include('public'),
- 'Link' => include('activity+json')
- )
- end
- end
-
- context 'when status is private' do
- let(:status) { Fabricate(:status, account: account, visibility: :private) }
-
- before do
- get :embed, params: { account_username: status.account.username, id: status.id }
- end
-
- it 'returns http not found' do
- expect(response).to have_http_status(404)
- end
- end
-
- context 'when status is direct' do
- let(:status) { Fabricate(:status, account: account, visibility: :direct) }
-
- before do
- get :embed, params: { account_username: status.account.username, id: status.id }
- end
-
- it 'returns http not found' do
- expect(response).to have_http_status(404)
- end
- end
- end
end
diff --git a/spec/fabricators/account_conversation_fabricator.rb b/spec/fabricators/account_conversation_fabricator.rb
new file mode 100644
index 0000000000..6145ed8254
--- /dev/null
+++ b/spec/fabricators/account_conversation_fabricator.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+Fabricator(:account_conversation) do
+ account
+ conversation
+ status_ids { [Fabricate(:status).id] }
+end
diff --git a/spec/fabricators/ip_block_fabricator.rb b/spec/fabricators/ip_block_fabricator.rb
new file mode 100644
index 0000000000..30c48b90c6
--- /dev/null
+++ b/spec/fabricators/ip_block_fabricator.rb
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+Fabricator(:ip_block) do
+ severity { :sign_up_requires_approval }
+ ip { sequence(:ip) { |n| "10.0.0.#{n}" } }
+end
diff --git a/spec/fabricators/preview_card_trend_fabricator.rb b/spec/fabricators/preview_card_trend_fabricator.rb
new file mode 100644
index 0000000000..14c126cc89
--- /dev/null
+++ b/spec/fabricators/preview_card_trend_fabricator.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+Fabricator(:preview_card_trend) do
+ preview_card
+end
diff --git a/spec/fabricators/status_trend_fabricator.rb b/spec/fabricators/status_trend_fabricator.rb
new file mode 100644
index 0000000000..c775892b1f
--- /dev/null
+++ b/spec/fabricators/status_trend_fabricator.rb
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+Fabricator(:status_trend) do
+ status
+ account
+end
diff --git a/spec/fabricators/tombstone_fabricator.rb b/spec/fabricators/tombstone_fabricator.rb
new file mode 100644
index 0000000000..b4cab086af
--- /dev/null
+++ b/spec/fabricators/tombstone_fabricator.rb
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+Fabricator(:tombstone) do
+ account
+ uri { sequence(:uri) { |i| "https://host.example/value/#{i}" } }
+end
diff --git a/spec/fixtures/files/avatar-high.gif b/spec/fixtures/files/avatar-high.gif
new file mode 100644
index 0000000000..7639f2c507
Binary files /dev/null and b/spec/fixtures/files/avatar-high.gif differ
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index 90dc0d36de..45883eb05a 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -230,28 +230,6 @@ RSpec.describe ApplicationHelper do
end
end
- describe 'visibility_icon' do
- it 'returns a globe icon for a public visible status' do
- result = helper.visibility_icon Status.new(visibility: 'public')
- expect(result).to match(/globe/)
- end
-
- it 'returns an unlock icon for a unlisted visible status' do
- result = helper.visibility_icon Status.new(visibility: 'unlisted')
- expect(result).to match(/lock_open/)
- end
-
- it 'returns a lock icon for a private visible status' do
- result = helper.visibility_icon Status.new(visibility: 'private')
- expect(result).to match(/lock/)
- end
-
- it 'returns an at icon for a direct visible status' do
- result = helper.visibility_icon Status.new(visibility: 'direct')
- expect(result).to match(/alternate_email/)
- end
- end
-
describe 'title' do
it 'returns site title on production environment' do
Setting.site_title = 'site title'
@@ -282,11 +260,11 @@ RSpec.describe ApplicationHelper do
expect(helper.html_title).to be_html_safe
end
- it 'removes extra new lines' do
+ it 'does not escape twice' do
Setting.site_title = 'Site Title'
- helper.content_for(:page_title, "Test Value\n")
+ helper.content_for(:page_title, '"Test Value"'.html_safe)
- expect(helper.html_title).to eq 'Test Value - Site Title'
+ expect(helper.html_title).to eq '"Test Value" - Site Title'
expect(helper.html_title).to be_html_safe
end
end
diff --git a/spec/helpers/database_helper_spec.rb b/spec/helpers/database_helper_spec.rb
new file mode 100644
index 0000000000..9ea398bf4c
--- /dev/null
+++ b/spec/helpers/database_helper_spec.rb
@@ -0,0 +1,61 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe DatabaseHelper do
+ context 'when a replica is enabled' do
+ around do |example|
+ ClimateControl.modify REPLICA_DB_NAME: 'prod-relay-quantum-tunnel-mirror' do
+ example.run
+ end
+ end
+
+ before { allow(ApplicationRecord).to receive(:connected_to) }
+
+ describe '#with_read_replica' do
+ it 'uses the replica for connections' do
+ helper.with_read_replica { _x = 1 }
+
+ expect(ApplicationRecord)
+ .to have_received(:connected_to).with(role: :reading, prevent_writes: true)
+ end
+ end
+
+ describe '#with_primary' do
+ it 'uses the primary for connections' do
+ helper.with_primary { _x = 1 }
+
+ expect(ApplicationRecord)
+ .to have_received(:connected_to).with(role: :writing)
+ end
+ end
+ end
+
+ context 'when a replica is not enabled' do
+ around do |example|
+ ClimateControl.modify REPLICA_DB_NAME: nil do
+ example.run
+ end
+ end
+
+ before { allow(ApplicationRecord).to receive(:connected_to) }
+
+ describe '#with_read_replica' do
+ it 'does not use the replica for connections' do
+ helper.with_read_replica { _x = 1 }
+
+ expect(ApplicationRecord)
+ .to_not have_received(:connected_to).with(role: :reading, prevent_writes: true)
+ end
+ end
+
+ describe '#with_primary' do
+ it 'does not use the primary for connections' do
+ helper.with_primary { _x = 1 }
+
+ expect(ApplicationRecord)
+ .to_not have_received(:connected_to).with(role: :writing)
+ end
+ end
+ end
+end
diff --git a/spec/helpers/formatting_helper_spec.rb b/spec/helpers/formatting_helper_spec.rb
index 136a609b1c..5ff534e4eb 100644
--- a/spec/helpers/formatting_helper_spec.rb
+++ b/spec/helpers/formatting_helper_spec.rb
@@ -6,19 +6,57 @@ RSpec.describe FormattingHelper do
include Devise::Test::ControllerHelpers
describe '#rss_status_content_format' do
- let(:status) { Fabricate(:status, text: 'Hello world<>', spoiler_text: 'This is a spoiler<>', poll: Fabricate(:poll, options: %w(Yes<> No))) }
- let(:html) { helper.rss_status_content_format(status) }
+ subject { helper.rss_status_content_format(status) }
- it 'renders the spoiler text' do
- expect(html).to include('This is a spoiler<>
Hello world<>
') + context 'with a spoiler and an emoji and a poll' do + let(:status) { Fabricate(:status, text: 'Hello :world: <>', spoiler_text: 'This is a spoiler<>', poll: Fabricate(:poll, options: %w(Yes<> No))) } + + before { Fabricate :custom_emoji, shortcode: 'world' } + + it 'renders the formatted elements' do + expect(spoiler_node.css('strong').text) + .to eq('Content warning:') + expect(spoiler_node.text) + .to include('This is a spoiler<>') + expect(content_node.text) + .to eq('Hello <>') + expect(content_node.css('img').first.to_h.symbolize_keys) + .to include( + rel: 'emoji', + title: ':world:' + ) + expect(poll_node.css('radio').first.text) + .to eq('Yes<>') + expect(poll_node.css('radio').first.to_h.symbolize_keys) + .to include( + disabled: 'disabled' + ) + end + + def spoiler_node + parsed_result.css('p').first + end + + def content_node + parsed_result.css('p')[1] + end + + def poll_node + parsed_result.css('p').last + end end - it 'renders the poll' do - expect(html).to include('a text by a nerd who uses an HTML tag in text
', uri: nil) } + let(:status) { Fabricate.build(:status, text: 'a text by a nerd who uses an HTML tag in text
', uri: nil) } it 'returns the raw text' do expect(subject).to eq 'a text by a nerd who uses an HTML tag in text
' @@ -15,10 +15,10 @@ RSpec.describe PlainTextFormatter do end context 'when status is remote' do - let(:remote_account) { Fabricate(:account, domain: 'remote.test', username: 'bob', url: 'https://remote.test/') } + let(:remote_account) { Fabricate.build(:account, domain: 'remote.test', username: 'bob', url: 'https://remote.test/') } context 'when text contains inline HTML tags' do - let(:status) { Fabricate(:status, account: remote_account, text: 'Lorem ipsum') } + let(:status) { Fabricate.build(:status, account: remote_account, text: 'Lorem ipsum') } it 'strips the tags' do expect(subject).to eq 'Lorem ipsum' @@ -26,7 +26,7 @@ RSpec.describe PlainTextFormatter do end context 'when text containstags' do - let(:status) { Fabricate(:status, account: remote_account, text: '
Lorem
ipsum
') } + let(:status) { Fabricate.build(:status, account: remote_account, text: 'Lorem
ipsum
') } it 'inserts a newline' do expect(subject).to eq "Lorem\nipsum" @@ -34,7 +34,7 @@ RSpec.describe PlainTextFormatter do end context 'when text contains a singleLorem 明日 ipsum
') } + let(:status) { Fabricate.build(:status, account: remote_account, text: 'Lorem 明日 ipsum
') } it 'strips the comment' do expect(subject).to eq 'Lorem 明日 (Ashita) ipsum' diff --git a/spec/lib/vacuum/access_tokens_vacuum_spec.rb b/spec/lib/vacuum/access_tokens_vacuum_spec.rb index 54760c41bd..8768f6b2dc 100644 --- a/spec/lib/vacuum/access_tokens_vacuum_spec.rb +++ b/spec/lib/vacuum/access_tokens_vacuum_spec.rb @@ -14,32 +14,24 @@ RSpec.describe Vacuum::AccessTokensVacuum do let!(:expired_access_grant) { Fabricate(:access_grant, expires_in: 59.minutes.to_i, created_at: 1.hour.ago) } let!(:active_access_grant) { Fabricate(:access_grant) } - before do + it 'deletes revoked/expired access tokens and revoked/expired grants, but preserves active tokens/grants' do subject.perform - end - it 'deletes revoked access tokens' do - expect { revoked_access_token.reload }.to raise_error ActiveRecord::RecordNotFound - end + expect { revoked_access_token.reload } + .to raise_error ActiveRecord::RecordNotFound + expect { expired_access_token.reload } + .to raise_error ActiveRecord::RecordNotFound - it 'deletes expired access tokens' do - expect { expired_access_token.reload }.to raise_error ActiveRecord::RecordNotFound - end + expect { revoked_access_grant.reload } + .to raise_error ActiveRecord::RecordNotFound + expect { expired_access_grant.reload } + .to raise_error ActiveRecord::RecordNotFound - it 'deletes revoked access grants' do - expect { revoked_access_grant.reload }.to raise_error ActiveRecord::RecordNotFound - end + expect { active_access_token.reload } + .to_not raise_error - it 'deletes expired access grants' do - expect { expired_access_grant.reload }.to raise_error ActiveRecord::RecordNotFound - end - - it 'does not delete active access tokens' do - expect { active_access_token.reload }.to_not raise_error - end - - it 'does not delete active access grants' do - expect { active_access_grant.reload }.to_not raise_error + expect { active_access_grant.reload } + .to_not raise_error end end end diff --git a/spec/lib/vacuum/backups_vacuum_spec.rb b/spec/lib/vacuum/backups_vacuum_spec.rb index 867dbe4020..4a025352cb 100644 --- a/spec/lib/vacuum/backups_vacuum_spec.rb +++ b/spec/lib/vacuum/backups_vacuum_spec.rb @@ -11,16 +11,13 @@ RSpec.describe Vacuum::BackupsVacuum do let!(:expired_backup) { Fabricate(:backup, created_at: (retention_period + 1.day).ago) } let!(:current_backup) { Fabricate(:backup) } - before do + it 'deletes backups past the retention period but preserves those within the period' do subject.perform - end - it 'deletes backups past the retention period' do - expect { expired_backup.reload }.to raise_error ActiveRecord::RecordNotFound - end - - it 'does not delete backups within the retention period' do - expect { current_backup.reload }.to_not raise_error + expect { expired_backup.reload } + .to raise_error ActiveRecord::RecordNotFound + expect { current_backup.reload } + .to_not raise_error end end end diff --git a/spec/lib/vacuum/feeds_vacuum_spec.rb b/spec/lib/vacuum/feeds_vacuum_spec.rb index ede1e3c360..38459a558f 100644 --- a/spec/lib/vacuum/feeds_vacuum_spec.rb +++ b/spec/lib/vacuum/feeds_vacuum_spec.rb @@ -14,11 +14,11 @@ RSpec.describe Vacuum::FeedsVacuum do redis.zadd(feed_key_for(active_user), 1, 1) redis.zadd(feed_key_for(inactive_user, 'reblogs'), 2, 2) redis.sadd(feed_key_for(inactive_user, 'reblogs:2'), 3) - - subject.perform end it 'clears feeds of inactive users and lists' do + subject.perform + expect(redis.zcard(feed_key_for(inactive_user))).to eq 0 expect(redis.zcard(feed_key_for(active_user))).to eq 1 expect(redis.exists?(feed_key_for(inactive_user, 'reblogs'))).to be false diff --git a/spec/lib/vacuum/media_attachments_vacuum_spec.rb b/spec/lib/vacuum/media_attachments_vacuum_spec.rb index 1039c36cea..f7749038cb 100644 --- a/spec/lib/vacuum/media_attachments_vacuum_spec.rb +++ b/spec/lib/vacuum/media_attachments_vacuum_spec.rb @@ -17,9 +17,9 @@ RSpec.describe Vacuum::MediaAttachmentsVacuum do let!(:old_unattached_media) { Fabricate(:media_attachment, account_id: nil, created_at: 10.days.ago) } let!(:new_unattached_media) { Fabricate(:media_attachment, account_id: nil, created_at: 1.hour.ago) } - before { subject.perform } - it 'handles attachments based on metadata details' do + subject.perform + expect(old_remote_media.reload.file) # Remote and past retention period .to be_blank expect(old_local_media.reload.file) # Local and past retention diff --git a/spec/lib/vacuum/preview_cards_vacuum_spec.rb b/spec/lib/vacuum/preview_cards_vacuum_spec.rb index 9dbdf0bc2f..caeedd3269 100644 --- a/spec/lib/vacuum/preview_cards_vacuum_spec.rb +++ b/spec/lib/vacuum/preview_cards_vacuum_spec.rb @@ -15,24 +15,22 @@ RSpec.describe Vacuum::PreviewCardsVacuum do before do old_preview_card.statuses << Fabricate(:status) new_preview_card.statuses << Fabricate(:status) + end + it 'handles preview card cleanup' do subject.perform - end - it 'deletes cache of preview cards last updated before the retention period' do - expect(old_preview_card.reload.image).to be_blank - end + expect(old_preview_card.reload.image) # last updated before retention period + .to be_blank - it 'does not delete cache of preview cards last updated within the retention period' do - expect(new_preview_card.reload.image).to_not be_blank - end + expect(new_preview_card.reload.image) # last updated within the retention period + .to_not be_blank - it 'does not delete attached preview cards' do - expect(new_preview_card.reload).to be_persisted - end + expect(new_preview_card.reload) # Keep attached preview cards + .to be_persisted - it 'does not delete orphaned preview cards in the retention period' do - expect(orphaned_preview_card.reload).to be_persisted + expect(orphaned_preview_card.reload) # keep orphaned cards in the retention period + .to be_persisted end end end diff --git a/spec/lib/vacuum/statuses_vacuum_spec.rb b/spec/lib/vacuum/statuses_vacuum_spec.rb index d5c0139506..1fff864879 100644 --- a/spec/lib/vacuum/statuses_vacuum_spec.rb +++ b/spec/lib/vacuum/statuses_vacuum_spec.rb @@ -15,24 +15,20 @@ RSpec.describe Vacuum::StatusesVacuum do let!(:local_status_old) { Fabricate(:status, created_at: (retention_period + 2.days).ago) } let!(:local_status_recent) { Fabricate(:status, created_at: (retention_period - 2.days).ago) } - before do + it 'deletes remote statuses past the retention period and keeps others' do subject.perform - end - it 'deletes remote statuses past the retention period' do - expect { remote_status_old.reload }.to raise_error ActiveRecord::RecordNotFound - end + expect { remote_status_old.reload } + .to raise_error ActiveRecord::RecordNotFound - it 'does not delete local statuses past the retention period' do - expect { local_status_old.reload }.to_not raise_error - end + expect { local_status_old.reload } + .to_not raise_error - it 'does not delete remote statuses within the retention period' do - expect { remote_status_recent.reload }.to_not raise_error - end + expect { remote_status_recent.reload } + .to_not raise_error - it 'does not delete local statuses within the retention period' do - expect { local_status_recent.reload }.to_not raise_error + expect { local_status_recent.reload } + .to_not raise_error end end end diff --git a/spec/models/account_alias_spec.rb b/spec/models/account_alias_spec.rb index fc8c6bd250..17c83967a4 100644 --- a/spec/models/account_alias_spec.rb +++ b/spec/models/account_alias_spec.rb @@ -8,4 +8,26 @@ RSpec.describe AccountAlias do it { is_expected.to normalize(:acct).from(' @username@domain ').to('username@domain') } end end + + describe 'Validations' do + subject { described_class.new(account:) } + + let(:account) { Fabricate :account } + + it { is_expected.to_not allow_values(nil, '').for(:uri).against(:acct).with_message(not_found_message) } + + it { is_expected.to_not allow_values(account_uri).for(:uri).against(:acct).with_message(self_move_message) } + + def account_uri + ActivityPub::TagManager.instance.uri_for(subject.account) + end + + def not_found_message + I18n.t('migrations.errors.not_found') + end + + def self_move_message + I18n.t('migrations.errors.move_to_self') + end + end end diff --git a/spec/models/account_migration_spec.rb b/spec/models/account_migration_spec.rb index d658915ce3..b92771e8f5 100644 --- a/spec/models/account_migration_spec.rb +++ b/spec/models/account_migration_spec.rb @@ -9,8 +9,8 @@ RSpec.describe AccountMigration do end end - describe 'validations' do - subject { described_class.new(account: source_account, acct: target_acct) } + describe 'Validations' do + subject { Fabricate.build :account_migration, account: source_account } let(:source_account) { Fabricate(:account) } let(:target_acct) { target_account.acct } @@ -26,9 +26,7 @@ RSpec.describe AccountMigration do allow(service_double).to receive(:call).with(target_acct, anything).and_return(target_account) end - it 'passes validations' do - expect(subject).to be_valid - end + it { is_expected.to allow_value(target_account.acct).for(:acct) } end context 'with unresolvable account' do @@ -40,17 +38,13 @@ RSpec.describe AccountMigration do allow(service_double).to receive(:call).with(target_acct, anything).and_return(nil) end - it 'has errors on acct field' do - expect(subject).to model_have_error_on_field(:acct) - end + it { is_expected.to_not allow_value(target_acct).for(:acct) } end context 'with a space in the domain part' do let(:target_acct) { 'target@remote. org' } - it 'has errors on acct field' do - expect(subject).to model_have_error_on_field(:acct) - end + it { is_expected.to_not allow_value(target_acct).for(:acct) } end end end diff --git a/spec/models/account_moderation_note_spec.rb b/spec/models/account_moderation_note_spec.rb index 079774c492..f3bcff4cd6 100644 --- a/spec/models/account_moderation_note_spec.rb +++ b/spec/models/account_moderation_note_spec.rb @@ -3,29 +3,24 @@ require 'rails_helper' RSpec.describe AccountModerationNote do - describe 'chronological scope' do - it 'returns account moderation notes oldest to newest' do - account = Fabricate(:account) - note1 = Fabricate(:account_moderation_note, target_account: account) - note2 = Fabricate(:account_moderation_note, target_account: account) + describe 'Scopes' do + describe '.chronological' do + it 'returns account moderation notes oldest to newest' do + account = Fabricate(:account) + note1 = Fabricate(:account_moderation_note, target_account: account) + note2 = Fabricate(:account_moderation_note, target_account: account) - expect(account.targeted_moderation_notes.chronological).to eq [note1, note2] + expect(account.targeted_moderation_notes.chronological).to eq [note1, note2] + end end end - describe 'validations' do - it 'is invalid if the content is empty' do - report = Fabricate.build(:account_moderation_note, content: '') - expect(report.valid?).to be false - end + describe 'Validations' do + subject { Fabricate.build :account_moderation_note } - it 'is invalid if content is longer than character limit' do - report = Fabricate.build(:account_moderation_note, content: comment_over_limit) - expect(report.valid?).to be false - end - - def comment_over_limit - Faker::Lorem.paragraph_by_chars(number: described_class::CONTENT_SIZE_LIMIT * 2) + describe 'content' do + it { is_expected.to_not allow_value('').for(:content) } + it { is_expected.to validate_length_of(:content).is_at_most(described_class::CONTENT_SIZE_LIMIT) } end end end diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index a8f6ed7493..77341b7786 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -10,64 +10,6 @@ RSpec.describe Account do let(:bob) { Fabricate(:account, username: 'bob') } - describe '#suspended_locally?' do - context 'when the account is not suspended' do - it 'returns false' do - expect(subject.suspended_locally?).to be false - end - end - - context 'when the account is suspended locally' do - before do - subject.update!(suspended_at: 1.day.ago, suspension_origin: :local) - end - - it 'returns true' do - expect(subject.suspended_locally?).to be true - end - end - - context 'when the account is suspended remotely' do - before do - subject.update!(suspended_at: 1.day.ago, suspension_origin: :remote) - end - - it 'returns false' do - expect(subject.suspended_locally?).to be false - end - end - end - - describe '#suspend!' do - it 'marks the account as suspended and creates a deletion request' do - expect { subject.suspend! } - .to change(subject, :suspended?).from(false).to(true) - .and change(subject, :suspended_locally?).from(false).to(true) - .and(change { AccountDeletionRequest.exists?(account: subject) }.from(false).to(true)) - end - - context 'when the account is of a local user' do - subject { local_user_account } - - let!(:local_user_account) { Fabricate(:user, email: 'foo+bar@domain.org').account } - - it 'creates a canonical domain block' do - subject.suspend! - expect(CanonicalEmailBlock.block?(subject.user_email)).to be true - end - - context 'when a canonical domain block already exists for that email' do - before do - Fabricate(:canonical_email_block, email: subject.user_email) - end - - it 'does not raise an error' do - expect { subject.suspend! }.to_not raise_error - end - end - end - end - describe '#follow!' do it 'creates a follow' do follow = subject.follow!(bob) @@ -208,16 +150,16 @@ RSpec.describe Account do end end - context 'when last_webfingered_at is more than 24 hours before' do - let(:last_webfingered_at) { 25.hours.ago } + context 'when last_webfingered_at is before the threshold' do + let(:last_webfingered_at) { (described_class::STALE_THRESHOLD + 1.hour).ago } it 'returns true' do expect(account.possibly_stale?).to be true end end - context 'when last_webfingered_at is less than 24 hours before' do - let(:last_webfingered_at) { 23.hours.ago } + context 'when last_webfingered_at is after the threshold' do + let(:last_webfingered_at) { (described_class::STALE_THRESHOLD - 1.hour).ago } it 'returns false' do expect(account.possibly_stale?).to be false @@ -752,26 +694,42 @@ RSpec.describe Account do end end - describe '#prepare_contents' do - subject { Fabricate.build :account, domain: domain, note: ' padded note ', display_name: ' padded name ' } + describe 'Callbacks' do + describe 'Stripping content when required' do + context 'with a remote account' do + subject { Fabricate.build :account, domain: 'host.example', note: ' note ', display_name: ' display name ' } - context 'with local account' do - let(:domain) { nil } - - it 'strips values' do - expect { subject.valid? } - .to change(subject, :note).to('padded note') - .and(change(subject, :display_name).to('padded name')) + it 'preserves content' do + expect { subject.valid? } + .to not_change(subject, :note) + .and not_change(subject, :display_name) + end end - end - context 'with remote account' do - let(:domain) { 'host.example' } + context 'with a local account' do + subject { Fabricate.build :account, domain: nil, note:, display_name: } - it 'preserves values' do - expect { subject.valid? } - .to not_change(subject, :note) - .and(not_change(subject, :display_name)) + context 'with populated fields' do + let(:note) { ' note ' } + let(:display_name) { ' display name ' } + + it 'strips content' do + expect { subject.valid? } + .to change(subject, :note).to('note') + .and change(subject, :display_name).to('display name') + end + end + + context 'with empty fields' do + let(:note) { nil } + let(:display_name) { nil } + + it 'preserves content' do + expect { subject.valid? } + .to not_change(subject, :note) + .and not_change(subject, :display_name) + end + end end end end @@ -826,22 +784,19 @@ RSpec.describe Account do end end - describe 'validations' do + describe 'Validations' do it { is_expected.to validate_presence_of(:username) } - context 'when is local' do - it 'is invalid if the username is not unique in case-insensitive comparison among local accounts' do - _account = Fabricate(:account, username: 'the_doctor') - non_unique_account = Fabricate.build(:account, username: 'the_Doctor') - non_unique_account.valid? - expect(non_unique_account).to model_have_error_on_field(:username) + context 'when account is local' do + subject { Fabricate.build :account, domain: nil } + + context 'with an existing differently-cased username account' do + before { Fabricate :account, username: 'the_doctor' } + + it { is_expected.to_not allow_value('the_Doctor').for(:username) } end - it 'is invalid if the username is reserved' do - account = Fabricate.build(:account, username: 'support') - account.valid? - expect(account).to model_have_error_on_field(:username) - end + it { is_expected.to_not allow_value('support').for(:username) } it 'is valid when username is reserved but record has already been created' do account = Fabricate.build(:account, username: 'support') @@ -849,9 +804,10 @@ RSpec.describe Account do expect(account.valid?).to be true end - it 'is valid if we are creating an instance actor account with a period' do - account = Fabricate.build(:account, id: described_class::INSTANCE_ACTOR_ID, actor_type: 'Application', locked: true, username: 'example.com') - expect(account.valid?).to be true + context 'with the instance actor' do + subject { Fabricate.build :account, id: described_class::INSTANCE_ACTOR_ID, actor_type: 'Application', locked: true } + + it { is_expected.to allow_value('example.com').for(:username) } end it 'is valid if we are creating a possibly-conflicting instance actor account' do @@ -860,81 +816,31 @@ RSpec.describe Account do expect(instance_account.valid?).to be true end - it 'is invalid if the username doesn\'t only contains letters, numbers and underscores' do - account = Fabricate.build(:account, username: 'the-doctor') - account.valid? - expect(account).to model_have_error_on_field(:username) - end + it { is_expected.to_not allow_values('the-doctor', 'the.doctor').for(:username) } - it 'is invalid if the username contains a period' do - account = Fabricate.build(:account, username: 'the.doctor') - account.valid? - expect(account).to model_have_error_on_field(:username) - end + it { is_expected.to validate_length_of(:username).is_at_most(described_class::USERNAME_LENGTH_LIMIT) } + it { is_expected.to validate_length_of(:display_name).is_at_most(described_class::DISPLAY_NAME_LENGTH_LIMIT) } - it 'is invalid if the username is longer than the character limit' do - account = Fabricate.build(:account, username: username_over_limit) - account.valid? - expect(account).to model_have_error_on_field(:username) - end - - it 'is invalid if the display name is longer than the character limit' do - account = Fabricate.build(:account, display_name: display_name_over_limit) - account.valid? - expect(account).to model_have_error_on_field(:display_name) - end - - it 'is invalid if the note is longer than the character limit' do - account = Fabricate.build(:account, note: account_note_over_limit) - account.valid? - expect(account).to model_have_error_on_field(:note) - end + it { is_expected.to_not allow_values(account_note_over_limit).for(:note) } end - context 'when is remote' do - it 'is invalid if the username is same among accounts in the same normalized domain' do - Fabricate(:account, domain: 'にゃん', username: 'username') - account = Fabricate.build(:account, domain: 'xn--r9j5b5b', username: 'username') - account.valid? - expect(account).to model_have_error_on_field(:username) + context 'when account is remote' do + subject { Fabricate.build :account, domain: 'host.example' } + + context 'when a normalized domain account exists' do + subject { Fabricate.build :account, domain: 'xn--r9j5b5b' } + + before { Fabricate(:account, domain: 'にゃん', username: 'username') } + + it { is_expected.to_not allow_values('username', 'Username').for(:username) } end - it 'is invalid if the username is not unique in case-insensitive comparison among accounts in the same normalized domain' do - Fabricate(:account, domain: 'にゃん', username: 'username') - account = Fabricate.build(:account, domain: 'xn--r9j5b5b', username: 'Username') - account.valid? - expect(account).to model_have_error_on_field(:username) - end + it { is_expected.to allow_values('the-doctor', username_over_limit).for(:username) } + it { is_expected.to_not allow_values('the doctor').for(:username) } - it 'is valid even if the username contains hyphens' do - account = Fabricate.build(:account, domain: 'domain', username: 'the-doctor') - account.valid? - expect(account).to_not model_have_error_on_field(:username) - end + it { is_expected.to allow_values(display_name_over_limit).for(:display_name) } - it 'is invalid if the username doesn\'t only contains letters, numbers, underscores and hyphens' do - account = Fabricate.build(:account, domain: 'domain', username: 'the doctor') - account.valid? - expect(account).to model_have_error_on_field(:username) - end - - it 'is valid even if the username is longer than the character limit' do - account = Fabricate.build(:account, domain: 'domain', username: username_over_limit) - account.valid? - expect(account).to_not model_have_error_on_field(:username) - end - - it 'is valid even if the display name is longer than the character limit' do - account = Fabricate.build(:account, domain: 'domain', display_name: display_name_over_limit) - account.valid? - expect(account).to_not model_have_error_on_field(:display_name) - end - - it 'is valid even if the note is longer than the character limit' do - account = Fabricate.build(:account, domain: 'domain', note: account_note_over_limit) - account.valid? - expect(account).to_not model_have_error_on_field(:note) - end + it { is_expected.to allow_values(account_note_over_limit).for(:note) } end def username_over_limit @@ -1077,22 +983,6 @@ RSpec.describe Account do end end - describe 'silenced' do - it 'returns an array of accounts who are silenced' do - silenced_account = Fabricate(:account, silenced: true) - _account = Fabricate(:account, silenced: false) - expect(described_class.silenced).to contain_exactly(silenced_account) - end - end - - describe 'suspended' do - it 'returns an array of accounts who are suspended' do - suspended_account = Fabricate(:account, suspended: true) - _account = Fabricate(:account, suspended: false) - expect(described_class.suspended).to contain_exactly(suspended_account) - end - end - describe 'searchable' do let!(:suspended_local) { Fabricate(:account, suspended: true, username: 'suspended_local') } let!(:suspended_remote) { Fabricate(:account, suspended: true, domain: 'example.org', username: 'suspended_remote') } diff --git a/spec/models/account_statuses_cleanup_policy_spec.rb b/spec/models/account_statuses_cleanup_policy_spec.rb index a08fd723a4..9bbbefa08e 100644 --- a/spec/models/account_statuses_cleanup_policy_spec.rb +++ b/spec/models/account_statuses_cleanup_policy_spec.rb @@ -5,17 +5,18 @@ require 'rails_helper' RSpec.describe AccountStatusesCleanupPolicy do let(:account) { Fabricate(:account, username: 'alice', domain: nil) } - describe 'validation' do - it 'disallow remote accounts' do - account.update(domain: 'example.com') - account_statuses_cleanup_policy = Fabricate.build(:account_statuses_cleanup_policy, account: account) - account_statuses_cleanup_policy.valid? - expect(account_statuses_cleanup_policy).to model_have_error_on_field(:account) - end + describe 'Validations' do + subject { Fabricate.build :account_statuses_cleanup_policy } + + let(:remote_account) { Fabricate(:account, domain: 'example.com') } + + it { is_expected.to_not allow_value(remote_account).for(:account) } end describe 'save hooks' do context 'when widening a policy' do + subject { account_statuses_cleanup_policy.last_inspected } + let!(:account_statuses_cleanup_policy) do Fabricate(:account_statuses_cleanup_policy, account: account, @@ -33,64 +34,64 @@ RSpec.describe AccountStatusesCleanupPolicy do account_statuses_cleanup_policy.record_last_inspected(42) end - it 'invalidates last_inspected when widened because of keep_direct' do - account_statuses_cleanup_policy.keep_direct = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_direct' do + before { account_statuses_cleanup_policy.update(keep_direct: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_pinned' do - account_statuses_cleanup_policy.keep_pinned = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_pinned' do + before { account_statuses_cleanup_policy.update(keep_pinned: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_polls' do - account_statuses_cleanup_policy.keep_polls = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_polls' do + before { account_statuses_cleanup_policy.update(keep_polls: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_media' do - account_statuses_cleanup_policy.keep_media = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_media' do + before { account_statuses_cleanup_policy.update(keep_media: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_self_fav' do - account_statuses_cleanup_policy.keep_self_fav = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_self_fav' do + before { account_statuses_cleanup_policy.update(keep_self_fav: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_self_bookmark' do - account_statuses_cleanup_policy.keep_self_bookmark = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_self_bookmark' do + before { account_statuses_cleanup_policy.update(keep_self_bookmark: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of higher min_favs' do - account_statuses_cleanup_policy.min_favs = 5 - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of higher min_favs' do + before { account_statuses_cleanup_policy.update(min_favs: 5) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of disabled min_favs' do - account_statuses_cleanup_policy.min_favs = nil - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of disabled min_favs' do + before { account_statuses_cleanup_policy.update(min_favs: nil) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of higher min_reblogs' do - account_statuses_cleanup_policy.min_reblogs = 5 - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of higher min_reblogs' do + before { account_statuses_cleanup_policy.update(min_reblogs: 5) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of disable min_reblogs' do - account_statuses_cleanup_policy.min_reblogs = nil - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of disable min_reblogs' do + before { account_statuses_cleanup_policy.update(min_reblogs: nil) } + + it { is_expected.to be_nil } end end @@ -337,14 +338,7 @@ RSpec.describe AccountStatusesCleanupPolicy do end context 'when policy is set to keep DMs and reject everything else' do - before do - account_statuses_cleanup_policy.keep_direct = true - account_statuses_cleanup_policy.keep_pinned = false - account_statuses_cleanup_policy.keep_polls = false - account_statuses_cleanup_policy.keep_media = false - account_statuses_cleanup_policy.keep_self_fav = false - account_statuses_cleanup_policy.keep_self_bookmark = false - end + before { establish_policy(keep_direct: true) } it 'returns every old status except does not return the old direct message for deletion' do expect(subject.pluck(:id)) @@ -354,14 +348,7 @@ RSpec.describe AccountStatusesCleanupPolicy do end context 'when policy is set to keep self-bookmarked toots and reject everything else' do - before do - account_statuses_cleanup_policy.keep_direct = false - account_statuses_cleanup_policy.keep_pinned = false - account_statuses_cleanup_policy.keep_polls = false - account_statuses_cleanup_policy.keep_media = false - account_statuses_cleanup_policy.keep_self_fav = false - account_statuses_cleanup_policy.keep_self_bookmark = true - end + before { establish_policy(keep_self_bookmark: true) } it 'returns every old status but does not return the old self-bookmarked message for deletion' do expect(subject.pluck(:id)) @@ -371,14 +358,7 @@ RSpec.describe AccountStatusesCleanupPolicy do end context 'when policy is set to keep self-faved toots and reject everything else' do - before do - account_statuses_cleanup_policy.keep_direct = false - account_statuses_cleanup_policy.keep_pinned = false - account_statuses_cleanup_policy.keep_polls = false - account_statuses_cleanup_policy.keep_media = false - account_statuses_cleanup_policy.keep_self_fav = true - account_statuses_cleanup_policy.keep_self_bookmark = false - end + before { establish_policy(keep_self_fav: true) } it 'returns every old status but does not return the old self-faved message for deletion' do expect(subject.pluck(:id)) @@ -388,14 +368,7 @@ RSpec.describe AccountStatusesCleanupPolicy do end context 'when policy is set to keep toots with media and reject everything else' do - before do - account_statuses_cleanup_policy.keep_direct = false - account_statuses_cleanup_policy.keep_pinned = false - account_statuses_cleanup_policy.keep_polls = false - account_statuses_cleanup_policy.keep_media = true - account_statuses_cleanup_policy.keep_self_fav = false - account_statuses_cleanup_policy.keep_self_bookmark = false - end + before { establish_policy(keep_media: true) } it 'returns every old status but does not return the old message with media for deletion' do expect(subject.pluck(:id)) @@ -405,14 +378,7 @@ RSpec.describe AccountStatusesCleanupPolicy do end context 'when policy is set to keep toots with polls and reject everything else' do - before do - account_statuses_cleanup_policy.keep_direct = false - account_statuses_cleanup_policy.keep_pinned = false - account_statuses_cleanup_policy.keep_polls = true - account_statuses_cleanup_policy.keep_media = false - account_statuses_cleanup_policy.keep_self_fav = false - account_statuses_cleanup_policy.keep_self_bookmark = false - end + before { establish_policy(keep_polls: true) } it 'returns every old status but does not return the old poll message for deletion' do expect(subject.pluck(:id)) @@ -422,14 +388,7 @@ RSpec.describe AccountStatusesCleanupPolicy do end context 'when policy is set to keep pinned toots and reject everything else' do - before do - account_statuses_cleanup_policy.keep_direct = false - account_statuses_cleanup_policy.keep_pinned = true - account_statuses_cleanup_policy.keep_polls = false - account_statuses_cleanup_policy.keep_media = false - account_statuses_cleanup_policy.keep_self_fav = false - account_statuses_cleanup_policy.keep_self_bookmark = false - end + before { establish_policy(keep_pinned: true) } it 'returns every old status but does not return the old pinned message for deletion' do expect(subject.pluck(:id)) @@ -439,14 +398,7 @@ RSpec.describe AccountStatusesCleanupPolicy do end context 'when policy is to not keep any special messages' do - before do - account_statuses_cleanup_policy.keep_direct = false - account_statuses_cleanup_policy.keep_pinned = false - account_statuses_cleanup_policy.keep_polls = false - account_statuses_cleanup_policy.keep_media = false - account_statuses_cleanup_policy.keep_self_fav = false - account_statuses_cleanup_policy.keep_self_bookmark = false - end + before { establish_policy } it 'returns every old status but does not return the recent or unrelated statuses' do expect(subject.pluck(:id)) @@ -457,14 +409,7 @@ RSpec.describe AccountStatusesCleanupPolicy do end context 'when policy is set to keep every category of toots' do - before do - account_statuses_cleanup_policy.keep_direct = true - account_statuses_cleanup_policy.keep_pinned = true - account_statuses_cleanup_policy.keep_polls = true - account_statuses_cleanup_policy.keep_media = true - account_statuses_cleanup_policy.keep_self_fav = true - account_statuses_cleanup_policy.keep_self_bookmark = true - end + before { establish_policy(keep_direct: true, keep_pinned: true, keep_polls: true, keep_media: true, keep_self_fav: true, keep_self_bookmark: true) } it 'returns normal statuses and does not return unrelated old status' do expect(subject.pluck(:id)) @@ -500,5 +445,24 @@ RSpec.describe AccountStatusesCleanupPolicy do .and include(very_old_status.id, faved_primary.id, reblogged_primary.id, reblogged_secondary.id) end end + + private + + def establish_policy(options = {}) + default_policy_options.merge(options).each do |attribute, value| + account_statuses_cleanup_policy.send :"#{attribute}=", value + end + end + + def default_policy_options + { + keep_direct: false, + keep_media: false, + keep_pinned: false, + keep_polls: false, + keep_self_bookmark: false, + keep_self_fav: false, + } + end end end diff --git a/spec/models/announcement_spec.rb b/spec/models/announcement_spec.rb index 8bd1e74b29..884b352cb5 100644 --- a/spec/models/announcement_spec.rb +++ b/spec/models/announcement_spec.rb @@ -67,18 +67,30 @@ RSpec.describe Announcement do it { is_expected.to validate_presence_of(:text) } describe 'ends_at' do - it 'validates presence when starts_at is present' do - record = Fabricate.build(:announcement, starts_at: 1.day.ago) + context 'when starts_at is present' do + subject { Fabricate.build :announcement, starts_at: 1.day.ago } - expect(record).to_not be_valid - expect(record.errors[:ends_at]).to be_present + it { is_expected.to validate_presence_of(:ends_at) } end - it 'does not validate presence when starts_at is missing' do - record = Fabricate.build(:announcement, starts_at: nil) + context 'when starts_at is missing' do + subject { Fabricate.build :announcement, starts_at: nil } - expect(record).to be_valid - expect(record.errors[:ends_at]).to_not be_present + it { is_expected.to_not validate_presence_of(:ends_at) } + end + end + + describe 'starts_at' do + context 'when ends_at is present' do + subject { Fabricate.build :announcement, ends_at: 1.day.ago } + + it { is_expected.to validate_presence_of(:starts_at) } + end + + context 'when ends_at is missing' do + subject { Fabricate.build :announcement, ends_at: nil } + + it { is_expected.to_not validate_presence_of(:starts_at) } end end end diff --git a/spec/models/appeal_spec.rb b/spec/models/appeal_spec.rb index 7e324582ed..e974ff9254 100644 --- a/spec/models/appeal_spec.rb +++ b/spec/models/appeal_spec.rb @@ -4,20 +4,85 @@ require 'rails_helper' RSpec.describe Appeal do describe 'Validations' do - it 'validates text length is under limit' do - appeal = Fabricate.build( - :appeal, - strike: Fabricate(:account_warning), - text: 'a' * described_class::TEXT_LENGTH_LIMIT * 2 - ) + subject { Fabricate.build :appeal, strike: Fabricate(:account_warning) } - expect(appeal).to_not be_valid - expect(appeal).to model_have_error_on_field(:text) + it { is_expected.to validate_length_of(:text).is_at_most(described_class::TEXT_LENGTH_LIMIT) } + + context 'with a strike created too long ago' do + let(:strike) { Fabricate.build :account_warning, created_at: 100.days.ago } + + it { is_expected.to_not allow_values(strike).for(:strike).against(:base).on(:create) } end end - describe 'scopes' do - describe 'approved' do + describe 'Query methods' do + describe '#pending?' do + subject { Fabricate.build :appeal, approved_at:, rejected_at: } + + context 'with not approved and not rejected' do + let(:approved_at) { nil } + let(:rejected_at) { nil } + + it { expect(subject).to be_pending } + end + + context 'with approved and rejected' do + let(:approved_at) { 1.day.ago } + let(:rejected_at) { 1.day.ago } + + it { expect(subject).to_not be_pending } + end + + context 'with approved and not rejected' do + let(:approved_at) { 1.day.ago } + let(:rejected_at) { nil } + + it { expect(subject).to_not be_pending } + end + + context 'with not approved and rejected' do + let(:approved_at) { nil } + let(:rejected_at) { 1.day.ago } + + it { expect(subject).to_not be_pending } + end + end + + describe '#approved?' do + subject { Fabricate.build :appeal, approved_at: } + + context 'with not approved' do + let(:approved_at) { nil } + + it { expect(subject).to_not be_approved } + end + + context 'with approved' do + let(:approved_at) { 1.day.ago } + + it { expect(subject).to be_approved } + end + end + + describe '#rejected?' do + subject { Fabricate.build :appeal, rejected_at: } + + context 'with not rejected' do + let(:rejected_at) { nil } + + it { expect(subject).to_not be_rejected } + end + + context 'with rejected' do + let(:rejected_at) { 1.day.ago } + + it { expect(subject).to be_rejected } + end + end + end + + describe 'Scopes' do + describe '.approved' do let(:approved_appeal) { Fabricate(:appeal, approved_at: 10.days.ago) } let(:not_approved_appeal) { Fabricate(:appeal, approved_at: nil) } @@ -27,7 +92,7 @@ RSpec.describe Appeal do end end - describe 'rejected' do + describe '.rejected' do let(:rejected_appeal) { Fabricate(:appeal, rejected_at: 10.days.ago) } let(:not_rejected_appeal) { Fabricate(:appeal, rejected_at: nil) } @@ -37,7 +102,7 @@ RSpec.describe Appeal do end end - describe 'pending' do + describe '.pending' do let(:approved_appeal) { Fabricate(:appeal, approved_at: 10.days.ago) } let(:rejected_appeal) { Fabricate(:appeal, rejected_at: 10.days.ago) } let(:pending_appeal) { Fabricate(:appeal, rejected_at: nil, approved_at: nil) } diff --git a/spec/models/block_spec.rb b/spec/models/block_spec.rb index 84f0f318f4..62d7e40e28 100644 --- a/spec/models/block_spec.rb +++ b/spec/models/block_spec.rb @@ -3,11 +3,37 @@ require 'rails_helper' RSpec.describe Block do - describe 'validations' do + describe 'Associations' do it { is_expected.to belong_to(:account).required } it { is_expected.to belong_to(:target_account).required } end + describe '#local?' do + it { is_expected.to_not be_local } + end + + describe 'Callbacks' do + describe 'Setting a URI' do + context 'when URI exists' do + subject { Fabricate.build :block, uri: 'https://uri/value' } + + it 'does not change' do + expect { subject.save } + .to not_change(subject, :uri) + end + end + + context 'when URI is blank' do + subject { Fabricate.build :follow, uri: nil } + + it 'populates the value' do + expect { subject.save } + .to change(subject, :uri).to(be_present) + end + end + end + end + it 'removes blocking cache after creation' do account = Fabricate(:account) target_account = Fabricate(:account) diff --git a/spec/models/bulk_import_spec.rb b/spec/models/bulk_import_spec.rb new file mode 100644 index 0000000000..a3bd01d2a8 --- /dev/null +++ b/spec/models/bulk_import_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe BulkImport do + describe 'Associations' do + it { is_expected.to belong_to(:account).required } + it { is_expected.to have_many(:rows).class_name('BulkImportRow').inverse_of(:bulk_import).dependent(:delete_all) } + end + + describe 'Validations' do + subject { Fabricate.build :bulk_import } + + it { is_expected.to validate_presence_of(:type) } + end + + describe 'Scopes' do + describe '.archival_completed' do + let!(:old_import) { Fabricate :bulk_import, created_at: 1.month.ago } + let!(:new_import) { Fabricate :bulk_import, created_at: 1.day.ago } + + it 'returns imports which have passed the archive window period' do + expect(described_class.archival_completed) + .to include(old_import) + .and not_include(new_import) + end + end + + describe '.confirmation_missed' do + let!(:old_unconfirmed_import) { Fabricate :bulk_import, created_at: 1.week.ago, state: :unconfirmed } + let!(:old_scheduled_import) { Fabricate :bulk_import, created_at: 1.week.ago, state: :scheduled } + let!(:new_unconfirmed_import) { Fabricate :bulk_import, created_at: 1.minute.ago, state: :unconfirmed } + + it 'returns imports which have passed the confirmation window without confirming' do + expect(described_class.confirmation_missed) + .to include(old_unconfirmed_import) + .and not_include(old_scheduled_import) + .and not_include(new_unconfirmed_import) + end + end + end +end diff --git a/spec/models/concerns/account/interactions_spec.rb b/spec/models/concerns/account/interactions_spec.rb index 68f334cdba..010930fc66 100644 --- a/spec/models/concerns/account/interactions_spec.rb +++ b/spec/models/concerns/account/interactions_spec.rb @@ -3,10 +3,10 @@ require 'rails_helper' RSpec.describe Account::Interactions do - let(:account) { Fabricate(:account, username: 'account') } + let(:account) { Fabricate(:account) } let(:account_id) { account.id } let(:account_ids) { [account_id] } - let(:target_account) { Fabricate(:account, username: 'target') } + let(:target_account) { Fabricate(:account) } let(:target_account_id) { target_account.id } let(:target_account_ids) { [target_account_id] } diff --git a/spec/models/concerns/account/sensitizes_spec.rb b/spec/models/concerns/account/sensitizes_spec.rb new file mode 100644 index 0000000000..3596c9a126 --- /dev/null +++ b/spec/models/concerns/account/sensitizes_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Account::Sensitizes do + describe 'Scopes' do + describe '.sensitized' do + let(:sensitized_account) { Fabricate :account, sensitized_at: 2.days.ago } + + before { Fabricate :account, sensitized_at: false } + + it 'returns an array of accounts who are sensitized' do + expect(Account.sensitized) + .to contain_exactly(sensitized_account) + end + end + end +end diff --git a/spec/models/concerns/account/silences_spec.rb b/spec/models/concerns/account/silences_spec.rb new file mode 100644 index 0000000000..0d8337ce1d --- /dev/null +++ b/spec/models/concerns/account/silences_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Account::Silences do + describe 'Scopes' do + describe '.silenced' do + let(:silenced_account) { Fabricate :account, silenced: true } + + before { Fabricate :account, silenced: false } + + it 'returns an array of accounts who are silenced' do + expect(Account.silenced) + .to contain_exactly(silenced_account) + end + end + end +end diff --git a/spec/models/concerns/account/suspensions_spec.rb b/spec/models/concerns/account/suspensions_spec.rb new file mode 100644 index 0000000000..3d71f1b723 --- /dev/null +++ b/spec/models/concerns/account/suspensions_spec.rb @@ -0,0 +1,65 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Account::Suspensions do + subject { Fabricate(:account) } + + describe '.suspended' do + let!(:suspended_account) { Fabricate :account, suspended: true } + + before { Fabricate :account, suspended: false } + + it 'returns accounts that are suspended' do + expect(Account.suspended) + .to contain_exactly(suspended_account) + end + end + + describe '#suspended_locally?' do + context 'when the account is not suspended' do + it { is_expected.to_not be_suspended_locally } + end + + context 'when the account is suspended locally' do + before { subject.update!(suspended_at: 1.day.ago, suspension_origin: :local) } + + it { is_expected.to be_suspended_locally } + end + + context 'when the account is suspended remotely' do + before { subject.update!(suspended_at: 1.day.ago, suspension_origin: :remote) } + + it { is_expected.to_not be_suspended_locally } + end + end + + describe '#suspend!' do + it 'marks the account as suspended and creates a deletion request' do + expect { subject.suspend! } + .to change(subject, :suspended?).from(false).to(true) + .and change(subject, :suspended_locally?).from(false).to(true) + .and(change { AccountDeletionRequest.exists?(account: subject) }.from(false).to(true)) + end + + context 'when the account is of a local user' do + subject { local_user_account } + + let!(:local_user_account) { Fabricate(:user, email: 'foo+bar@domain.org').account } + + it 'creates a canonical domain block' do + expect { subject.suspend! } + .to change { CanonicalEmailBlock.block?(subject.user_email) }.from(false).to(true) + end + + context 'when a canonical domain block already exists for that email' do + before { Fabricate(:canonical_email_block, email: subject.user_email) } + + it 'does not raise an error' do + expect { subject.suspend! } + .to_not raise_error + end + end + end + end +end diff --git a/spec/models/domain_allow_spec.rb b/spec/models/domain_allow_spec.rb index d8f438f07e..fbb324657e 100644 --- a/spec/models/domain_allow_spec.rb +++ b/spec/models/domain_allow_spec.rb @@ -6,11 +6,10 @@ RSpec.describe DomainAllow do describe 'Validations' do it { is_expected.to validate_presence_of(:domain) } - it 'is invalid if the same normalized domain already exists' do - _domain_allow = Fabricate(:domain_allow, domain: 'にゃん') - domain_allow_with_normalized_value = Fabricate.build(:domain_allow, domain: 'xn--r9j5b5b') - domain_allow_with_normalized_value.valid? - expect(domain_allow_with_normalized_value).to model_have_error_on_field(:domain) + context 'when a normalized domain exists' do + before { Fabricate(:domain_allow, domain: 'にゃん') } + + it { is_expected.to_not allow_value('xn--r9j5b5b').for(:domain) } end end end diff --git a/spec/models/featured_tag_spec.rb b/spec/models/featured_tag_spec.rb index 0f5ead8f97..20059cfba4 100644 --- a/spec/models/featured_tag_spec.rb +++ b/spec/models/featured_tag_spec.rb @@ -126,16 +126,54 @@ RSpec.describe FeaturedTag do end describe '#decrement' do - it 'decreases the count and updates the last_status_at timestamp' do - tag = Fabricate :tag, name: 'test' - status = Fabricate :status, visibility: :public, created_at: 10.days.ago - status.tags << tag + let(:tag) { Fabricate(:tag, name: 'test') } + let(:account) { Fabricate(:account) } + let(:featured_tag) { Fabricate(:featured_tag, name: 'test', account: account) } - featured_tag = Fabricate :featured_tag, name: 'test', account: status.account + context 'when removing the last status using the tag' do + let(:status) { Fabricate(:status, visibility: :public, account: account, created_at: 10.days.ago) } - expect { featured_tag.decrement(status.id) } - .to change(featured_tag, :statuses_count).from(1).to(0) - .and change(featured_tag, :last_status_at).to(nil) + before do + status.tags << tag + end + + it 'decreases the count and updates the last_status_at timestamp' do + expect { featured_tag.decrement(status) } + .to change(featured_tag, :statuses_count).from(1).to(0) + .and change(featured_tag, :last_status_at).to(nil) + end + end + + context 'when removing a previous status using the tag' do + let(:previous_status) { Fabricate(:status, visibility: :public, account: account, created_at: 1.month.ago) } + let(:status) { Fabricate(:status, visibility: :public, account: account, created_at: 10.days.ago) } + + before do + previous_status.tags << tag + status.tags << tag + end + + it 'decreases the count and updates the last_status_at timestamp' do + expect { featured_tag.decrement(previous_status) } + .to change(featured_tag, :statuses_count).from(2).to(1) + .and not_change(featured_tag, :last_status_at) + end + end + + context 'when removing the most recent use of the tag' do + let(:previous_status) { Fabricate(:status, visibility: :public, account: account, created_at: 1.month.ago) } + let(:status) { Fabricate(:status, visibility: :public, account: account, created_at: 10.days.ago) } + + before do + previous_status.tags << tag + status.tags << tag + end + + it 'decreases the count and updates the last_status_at timestamp' do + expect { featured_tag.decrement(status) } + .to change(featured_tag, :statuses_count).from(2).to(1) + .and change(featured_tag, :last_status_at) + end end end end diff --git a/spec/models/follow_spec.rb b/spec/models/follow_spec.rb index f22bd6ea88..8684170dcf 100644 --- a/spec/models/follow_spec.rb +++ b/spec/models/follow_spec.rb @@ -3,27 +3,26 @@ require 'rails_helper' RSpec.describe Follow do - let(:alice) { Fabricate(:account, username: 'alice') } - let(:bob) { Fabricate(:account, username: 'bob') } - - describe 'validations' do - subject { described_class.new(account: alice, target_account: bob, rate_limit: true) } - + describe 'Associations' do it { is_expected.to belong_to(:account).required } it { is_expected.to belong_to(:target_account).required } + end - it 'is invalid if account already follows too many people' do - alice.update(following_count: FollowLimitValidator::LIMIT) + describe 'Validations' do + subject { Fabricate.build :follow, rate_limit: true } - expect(subject).to_not be_valid - expect(subject).to model_have_error_on_field(:base) + let(:account) { Fabricate(:account) } + + context 'when account follows too many people' do + before { account.update(following_count: FollowLimitValidator::LIMIT) } + + it { is_expected.to_not allow_value(account).for(:account).against(:base) } end - it 'is valid if account is only on the brink of following too many people' do - alice.update(following_count: FollowLimitValidator::LIMIT - 1) + context 'when account is on brink of following too many people' do + before { account.update(following_count: FollowLimitValidator::LIMIT - 1) } - expect(subject).to be_valid - expect(subject).to_not model_have_error_on_field(:base) + it { is_expected.to allow_value(account).for(:account).against(:base) } end end @@ -54,4 +53,58 @@ RSpec.describe Follow do expect(account.requested?(target_account)).to be true end end + + describe '#local?' do + it { is_expected.to_not be_local } + end + + describe 'Callbacks' do + describe 'Setting a URI' do + context 'when URI exists' do + subject { Fabricate.build :follow, uri: 'https://uri/value' } + + it 'does not change' do + expect { subject.save } + .to not_change(subject, :uri) + end + end + + context 'when URI is blank' do + subject { Fabricate.build :follow, uri: nil } + + it 'populates the value' do + expect { subject.save } + .to change(subject, :uri).to(be_present) + end + end + end + + describe 'Maintaining counters' do + subject { Fabricate.build :follow, account:, target_account: } + + let(:account) { Fabricate :account } + let(:target_account) { Fabricate :account } + + before do + account.account_stat.update following_count: 123 + target_account.account_stat.update followers_count: 123 + end + + describe 'saving the follow' do + it 'increments counters' do + expect { subject.save } + .to change(account, :following_count).by(1) + .and(change(target_account, :followers_count).by(1)) + end + end + + describe 'destroying the follow' do + it 'decrements counters' do + expect { subject.destroy } + .to change(account, :following_count).by(-1) + .and(change(target_account, :followers_count).by(-1)) + end + end + end + end end diff --git a/spec/models/form/admin_settings_spec.rb b/spec/models/form/admin_settings_spec.rb index 6080b9e081..73106f2b69 100644 --- a/spec/models/form/admin_settings_spec.rb +++ b/spec/models/form/admin_settings_spec.rb @@ -3,33 +3,17 @@ require 'rails_helper' RSpec.describe Form::AdminSettings do - describe 'validations' do + describe 'Validations' do describe 'site_contact_username' do context 'with no accounts' do - it 'is not valid' do - setting = described_class.new(site_contact_username: 'Test') - setting.valid? - - expect(setting).to model_have_error_on_field(:site_contact_username) - end + it { is_expected.to_not allow_value('Test').for(:site_contact_username) } end context 'with an account' do before { Fabricate(:account, username: 'Glorp') } - it 'is not valid when account doesnt match' do - setting = described_class.new(site_contact_username: 'Test') - setting.valid? - - expect(setting).to model_have_error_on_field(:site_contact_username) - end - - it 'is valid when account matches' do - setting = described_class.new(site_contact_username: 'Glorp') - setting.valid? - - expect(setting).to_not model_have_error_on_field(:site_contact_username) - end + it { is_expected.to_not allow_value('Test').for(:site_contact_username) } + it { is_expected.to allow_value('Glorp').for(:site_contact_username) } end end end diff --git a/spec/models/ip_block_spec.rb b/spec/models/ip_block_spec.rb index ac9f5db601..b85856780a 100644 --- a/spec/models/ip_block_spec.rb +++ b/spec/models/ip_block_spec.rb @@ -3,18 +3,13 @@ require 'rails_helper' RSpec.describe IpBlock do - describe 'validations' do + describe 'Validations' do + subject { Fabricate.build :ip_block } + it { is_expected.to validate_presence_of(:ip) } it { is_expected.to validate_presence_of(:severity) } - it 'validates ip uniqueness', :aggregate_failures do - described_class.create!(ip: '127.0.0.1', severity: :no_access) - - ip_block = described_class.new(ip: '127.0.0.1', severity: :no_access) - - expect(ip_block).to_not be_valid - expect(ip_block).to model_have_error_on_field(:ip) - end + it { is_expected.to validate_uniqueness_of(:ip) } end describe '#to_log_human_identifier' do diff --git a/spec/models/list_spec.rb b/spec/models/list_spec.rb index 62a84dfebf..48c273d3ec 100644 --- a/spec/models/list_spec.rb +++ b/spec/models/list_spec.rb @@ -11,7 +11,11 @@ RSpec.describe List do context 'when account has hit max list limit' do let(:account) { Fabricate :account } - before { stub_const 'List::PER_ACCOUNT_LIMIT', 0 } + before do + stub_const 'List::PER_ACCOUNT_LIMIT', 1 + + Fabricate(:list, account: account) + end context 'when creating a new list' do it { is_expected.to_not allow_value(account).for(:account).against(:base).with_message(I18n.t('lists.errors.limit')) } diff --git a/spec/models/poll_spec.rb b/spec/models/poll_spec.rb index 736f3615d0..66f521ab3f 100644 --- a/spec/models/poll_spec.rb +++ b/spec/models/poll_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe Poll do - describe 'scopes' do + describe 'Scopes' do let(:status) { Fabricate(:status) } let(:attached_poll) { Fabricate(:poll, status: status) } let(:not_attached_poll) do @@ -13,7 +13,7 @@ RSpec.describe Poll do end end - describe 'attached' do + describe '.attached' do it 'finds the correct records' do results = described_class.attached @@ -21,7 +21,7 @@ RSpec.describe Poll do end end - describe 'unattached' do + describe '.unattached' do it 'finds the correct records' do results = described_class.unattached @@ -30,11 +30,23 @@ RSpec.describe Poll do end end - describe 'validations' do - context 'when not valid' do - subject { Fabricate.build(:poll) } + describe '#reset_votes!' do + let(:poll) { Fabricate :poll, cached_tallies: [2, 3], votes_count: 5, voters_count: 5 } + let!(:vote) { Fabricate :poll_vote, poll: } - it { is_expected.to validate_presence_of(:expires_at) } + it 'resets vote data and deletes votes' do + expect { poll.reset_votes! } + .to change(poll, :cached_tallies).to([0, 0]) + .and change(poll, :votes_count).to(0) + .and(change(poll, :voters_count).to(0)) + expect { vote.reload } + .to raise_error(ActiveRecord::RecordNotFound) end end + + describe 'Validations' do + subject { Fabricate.build(:poll) } + + it { is_expected.to validate_presence_of(:expires_at) } + end end diff --git a/spec/models/preview_card_spec.rb b/spec/models/preview_card_spec.rb index c0bc2b6e0e..0fe76c37b0 100644 --- a/spec/models/preview_card_spec.rb +++ b/spec/models/preview_card_spec.rb @@ -9,26 +9,10 @@ RSpec.describe PreviewCard do end end - describe 'validations' do - describe 'urls' do - it 'allows http schemes' do - record = described_class.new(url: 'http://example.host/path') - - expect(record).to be_valid - end - - it 'allows https schemes' do - record = described_class.new(url: 'https://example.host/path') - - expect(record).to be_valid - end - - it 'does not allow javascript: schemes' do - record = described_class.new(url: 'javascript:alert()') - - expect(record).to_not be_valid - expect(record).to model_have_error_on_field(:url) - end + describe 'Validations' do + describe 'url' do + it { is_expected.to allow_values('http://example.host/path', 'https://example.host/path').for(:url) } + it { is_expected.to_not allow_value('javascript:alert()').for(:url) } end end end diff --git a/spec/models/preview_card_trend_spec.rb b/spec/models/preview_card_trend_spec.rb new file mode 100644 index 0000000000..6edd24b693 --- /dev/null +++ b/spec/models/preview_card_trend_spec.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe PreviewCardTrend do + describe 'Associations' do + it { is_expected.to belong_to(:preview_card).required } + end + + describe '.locales' do + before do + Fabricate :preview_card_trend, language: 'en' + Fabricate :preview_card_trend, language: 'en' + Fabricate :preview_card_trend, language: 'es' + end + + it 'returns unique set of languages' do + expect(described_class.locales) + .to eq(['en', 'es']) + end + end +end diff --git a/spec/models/public_feed_spec.rb b/spec/models/public_feed_spec.rb index 8a1a01e892..5f2444dc6b 100644 --- a/spec/models/public_feed_spec.rb +++ b/spec/models/public_feed_spec.rb @@ -55,12 +55,10 @@ RSpec.describe PublicFeed do context 'without a viewer' do let(:viewer) { nil } - it 'includes remote instances statuses' do - expect(subject).to include(remote_status.id) - end - - it 'includes local statuses' do - expect(subject).to include(local_status.id) + it 'includes remote instances statuses and local statuses' do + expect(subject) + .to include(remote_status.id) + .and include(local_status.id) end it 'does not include local-only statuses' do @@ -71,12 +69,10 @@ RSpec.describe PublicFeed do context 'with a viewer' do let(:viewer) { Fabricate(:account, username: 'viewer') } - it 'includes remote instances statuses' do - expect(subject).to include(remote_status.id) - end - - it 'includes local statuses' do - expect(subject).to include(local_status.id) + it 'includes remote instances statuses and local statuses' do + expect(subject) + .to include(remote_status.id) + .and include(local_status.id) end it 'does not include local-only statuses' do diff --git a/spec/models/report_note_spec.rb b/spec/models/report_note_spec.rb index 417971c9a1..0d1c0f619e 100644 --- a/spec/models/report_note_spec.rb +++ b/spec/models/report_note_spec.rb @@ -3,29 +3,24 @@ require 'rails_helper' RSpec.describe ReportNote do - describe 'chronological scope' do - it 'returns report notes oldest to newest' do - report = Fabricate(:report) - note1 = Fabricate(:report_note, report: report) - note2 = Fabricate(:report_note, report: report) + describe 'Scopes' do + describe '.chronological' do + it 'returns report notes oldest to newest' do + report = Fabricate(:report) + note1 = Fabricate(:report_note, report: report) + note2 = Fabricate(:report_note, report: report) - expect(report.notes.chronological).to eq [note1, note2] + expect(report.notes.chronological).to eq [note1, note2] + end end end - describe 'validations' do - it 'is invalid if the content is empty' do - report = Fabricate.build(:report_note, content: '') - expect(report.valid?).to be false - end + describe 'Validations' do + subject { Fabricate.build :report_note } - it 'is invalid if content is longer than character limit' do - report = Fabricate.build(:report_note, content: comment_over_limit) - expect(report.valid?).to be false - end - - def comment_over_limit - Faker::Lorem.paragraph_by_chars(number: described_class::CONTENT_SIZE_LIMIT * 2) + describe 'content' do + it { is_expected.to_not allow_value('').for(:content) } + it { is_expected.to validate_length_of(:content).is_at_most(described_class::CONTENT_SIZE_LIMIT) } end end end diff --git a/spec/models/software_update_spec.rb b/spec/models/software_update_spec.rb index 0a494b0c4c..43e9cd058f 100644 --- a/spec/models/software_update_spec.rb +++ b/spec/models/software_update_spec.rb @@ -3,6 +3,60 @@ require 'rails_helper' RSpec.describe SoftwareUpdate do + describe '#pending?' do + subject { described_class.new(version: update_version) } + + before { allow(Mastodon::Version).to receive(:gem_version).and_return(Gem::Version.new(mastodon_version)) } + + context 'when the runtime version is older than the update' do + let(:mastodon_version) { '4.0.0' } + let(:update_version) { '5.0.0' } + + it { is_expected.to be_pending } + end + + context 'when the runtime version is newer than the update' do + let(:mastodon_version) { '6.0.0' } + let(:update_version) { '5.0.0' } + + it { is_expected.to_not be_pending } + end + + context 'when the runtime version is same as the update' do + let(:mastodon_version) { '4.0.0' } + let(:update_version) { '4.0.0' } + + it { is_expected.to_not be_pending } + end + end + + describe '#outdated?' do + subject { described_class.new(version: update_version) } + + before { allow(Mastodon::Version).to receive(:gem_version).and_return(Gem::Version.new(mastodon_version)) } + + context 'when the runtime version is older than the update' do + let(:mastodon_version) { '4.0.0' } + let(:update_version) { '5.0.0' } + + it { is_expected.to_not be_outdated } + end + + context 'when the runtime version is newer than the update' do + let(:mastodon_version) { '6.0.0' } + let(:update_version) { '5.0.0' } + + it { is_expected.to be_outdated } + end + + context 'when the runtime version is same as the update' do + let(:mastodon_version) { '4.0.0' } + let(:update_version) { '4.0.0' } + + it { is_expected.to be_outdated } + end + end + describe '.pending_to_a' do before do allow(Mastodon::Version).to receive(:gem_version).and_return(Gem::Version.new(mastodon_version)) diff --git a/spec/models/status_pin_spec.rb b/spec/models/status_pin_spec.rb index da375009ae..1501d43cc4 100644 --- a/spec/models/status_pin_spec.rb +++ b/spec/models/status_pin_spec.rb @@ -3,70 +3,100 @@ require 'rails_helper' RSpec.describe StatusPin do - describe 'validations' do - it 'allows pins of own statuses' do - account = Fabricate(:account) - status = Fabricate(:status, account: account) + describe 'Validations' do + subject { Fabricate.build :status_pin } - expect(described_class.new(account: account, status: status).save).to be true - end + context 'with an account pinning statuses' do + subject { Fabricate.build :status_pin, account: account } - it 'does not allow pins of statuses by someone else' do - account = Fabricate(:account) - status = Fabricate(:status) + let(:account) { Fabricate(:account) } - expect(described_class.new(account: account, status: status).save).to be false - end + context 'with a self-owned status' do + let(:status) { Fabricate(:status, account: account) } - it 'does not allow pins of reblogs' do - account = Fabricate(:account) - status = Fabricate(:status, account: account) - reblog = Fabricate(:status, reblog: status) - - expect(described_class.new(account: account, status: reblog).save).to be false - end - - it 'does allow pins of direct statuses' do - account = Fabricate(:account) - status = Fabricate(:status, account: account, visibility: :private) - - expect(described_class.new(account: account, status: status).save).to be true - end - - it 'does not allow pins of direct statuses' do - account = Fabricate(:account) - status = Fabricate(:status, account: account, visibility: :direct) - - expect(described_class.new(account: account, status: status).save).to be false - end - - context 'with a pin limit' do - before { stub_const('StatusPinValidator::PIN_LIMIT', 2) } - - it 'does not allow pins above the max' do - account = Fabricate(:account) - - Fabricate.times(StatusPinValidator::PIN_LIMIT, :status_pin, account: account) - - pin = described_class.new(account: account, status: Fabricate(:status, account: account)) - expect(pin.save) - .to be(false) - - expect(pin.errors[:base]) - .to contain_exactly(I18n.t('statuses.pin_errors.limit')) + it { is_expected.to allow_value(status).for(:status) } end - it 'allows pins above the max for remote accounts' do - account = Fabricate(:account, domain: 'remote.test', username: 'bob', url: 'https://remote.test/') + context 'with a status from someone else' do + let(:status) { Fabricate(:status) } - Fabricate.times(StatusPinValidator::PIN_LIMIT, :status_pin, account: account) + it { is_expected.to_not allow_value(status).for(:status).against(:base) } + end - pin = described_class.new(account: account, status: Fabricate(:status, account: account)) - expect(pin.save) - .to be(true) + context 'with a reblog status' do + let(:status) { Fabricate(:status, reblog: Fabricate(:status, account: account)) } - expect(pin.errors[:base]) - .to be_empty + it { is_expected.to_not allow_value(status).for(:status).against(:base) } + end + + context 'with a private status' do + let(:status) { Fabricate(:status, account: account, visibility: :private) } + + it { is_expected.to allow_value(status).for(:status).against(:base) } + end + + context 'with a direct status' do + let(:status) { Fabricate(:status, account: account, visibility: :direct) } + + it { is_expected.to_not allow_value(status).for(:status).against(:base) } + end + end + + context 'with a validator pin limit' do + before { stub_const('StatusPinValidator::PIN_LIMIT', 2) } + + context 'with a local account at the limit' do + let(:account) { Fabricate :account } + + before { Fabricate.times(StatusPinValidator::PIN_LIMIT, :status_pin, account: account) } + + it { is_expected.to_not allow_value(account).for(:account).against(:base).with_message(I18n.t('statuses.pin_errors.limit')) } + end + + context 'with a remote account at the limit' do + let(:account) { Fabricate :account, domain: 'remote.test' } + + before { Fabricate.times(StatusPinValidator::PIN_LIMIT, :status_pin, account: account) } + + it { is_expected.to allow_value(account).for(:account) } + end + end + end + + describe 'Callbacks' do + describe 'Invalidating status via policy' do + subject { Fabricate :status_pin, status: Fabricate(:status, account: account), account: account } + + context 'with a local account that owns the status and has a policy' do + let(:account) { Fabricate :account, domain: nil } + + before do + Fabricate :account_statuses_cleanup_policy, account: account + account.statuses_cleanup_policy.record_last_inspected(subject.status.id + 1_024) + end + + it 'calls the invalidator on destroy' do + expect { subject.destroy } + .to change(account.statuses_cleanup_policy, :last_inspected) + end + end + + context 'with a local account that owns the status and does not have a policy' do + let(:account) { Fabricate :account, domain: nil } + + it 'does not call the invalidator on destroy' do + expect { subject.destroy } + .to_not change(account, :updated_at) + end + end + + context 'with a remote account' do + let(:account) { Fabricate :account, domain: 'host.example' } + + it 'does not call the invalidator on destroy' do + expect { subject.destroy } + .to_not change(account, :updated_at) + end end end end diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index da98e6c577..cd0d32b56b 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -164,6 +164,31 @@ RSpec.describe Status do end end + describe '#untrusted_reblogs_count' do + before do + alice.update(domain: 'example.com') + subject.status_stat.tap do |status_stat| + status_stat.untrusted_reblogs_count = 0 + status_stat.save + end + subject.save + end + + it 'is incremented by the number of reblogs' do + Fabricate(:status, account: bob, reblog: subject) + Fabricate(:status, account: alice, reblog: subject) + + expect(subject.untrusted_reblogs_count).to eq 2 + end + + it 'is decremented when reblog is removed' do + reblog = Fabricate(:status, account: bob, reblog: subject) + expect(subject.untrusted_reblogs_count).to eq 1 + reblog.destroy + expect(subject.untrusted_reblogs_count).to eq 0 + end + end + describe '#replies_count' do it 'is the number of replies' do Fabricate(:status, account: bob, thread: subject) @@ -194,6 +219,31 @@ RSpec.describe Status do end end + describe '#untrusted_favourites_count' do + before do + alice.update(domain: 'example.com') + subject.status_stat.tap do |status_stat| + status_stat.untrusted_favourites_count = 0 + status_stat.save + end + subject.save + end + + it 'is incremented by favorites' do + Fabricate(:favourite, account: bob, status: subject) + Fabricate(:favourite, account: alice, status: subject) + + expect(subject.untrusted_favourites_count).to eq 2 + end + + it 'is decremented when favourite is removed' do + favourite = Fabricate(:favourite, account: bob, status: subject) + expect(subject.untrusted_favourites_count).to eq 1 + favourite.destroy + expect(subject.untrusted_favourites_count).to eq 0 + end + end + describe '#proper' do it 'is itself for original statuses' do expect(subject.proper).to eq subject diff --git a/spec/models/status_trend_spec.rb b/spec/models/status_trend_spec.rb new file mode 100644 index 0000000000..34522493cd --- /dev/null +++ b/spec/models/status_trend_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe StatusTrend do + describe 'Associations' do + it { is_expected.to belong_to(:account).required } + it { is_expected.to belong_to(:status).required } + end + + describe '.locales' do + before do + Fabricate :status_trend, language: 'en' + Fabricate :status_trend, language: 'en' + Fabricate :status_trend, language: 'es' + end + + it 'returns unique set of languages' do + expect(described_class.locales) + .to eq(['en', 'es']) + end + end +end diff --git a/spec/models/tombstone_spec.rb b/spec/models/tombstone_spec.rb new file mode 100644 index 0000000000..ba0603fe3d --- /dev/null +++ b/spec/models/tombstone_spec.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Tombstone do + describe 'Associations' do + it { is_expected.to belong_to(:account).required } + end + + describe 'Validations' do + subject { Fabricate.build :tombstone } + + it { is_expected.to validate_presence_of(:uri) } + end +end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index d28e6658f1..9a5a070d25 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -387,23 +387,43 @@ RSpec.describe User do end end - describe 'token_for_app' do + describe '#token_for_app' do let(:user) { Fabricate(:user) } - let(:app) { Fabricate(:application, owner: user) } - it 'returns a token' do - expect(user.token_for_app(app)).to be_a(Doorkeeper::AccessToken) + context 'when user owns app but does not have tokens' do + let(:app) { Fabricate(:application, owner: user) } + + it 'creates and returns a persisted token' do + expect { user.token_for_app(app) } + .to change(Doorkeeper::AccessToken.where(resource_owner_id: user.id, application: app), :count).by(1) + end end - it 'persists a token' do - t = user.token_for_app(app) - expect(user.token_for_app(app)).to eql(t) + context 'when user owns app and already has tokens' do + let(:app) { Fabricate(:application, owner: user) } + let!(:token) { Fabricate :access_token, application: app, resource_owner_id: user.id } + + it 'returns a persisted token' do + expect(user.token_for_app(app)) + .to be_a(Doorkeeper::AccessToken) + .and eq(token) + end end - it 'is nil if user does not own app' do - app.update!(owner: nil) + context 'when user does not own app' do + let(:app) { Fabricate(:application) } - expect(user.token_for_app(app)).to be_nil + it 'returns nil' do + expect(user.token_for_app(app)) + .to be_nil + end + end + + context 'when app is nil' do + it 'returns nil' do + expect(user.token_for_app(nil)) + .to be_nil + end end end @@ -578,4 +598,27 @@ RSpec.describe User do end end end + + describe '#applications_last_used' do + let!(:user) { Fabricate(:user) } + + let!(:never_used_application) { Fabricate :application, owner: user } + let!(:application_one) { Fabricate :application, owner: user } + let!(:application_two) { Fabricate :application, owner: user } + + before do + _other_user_token = Fabricate :access_token, last_used_at: 3.days.ago + _never_used_token = Fabricate :access_token, application: never_used_application, resource_owner_id: user.id, last_used_at: nil + _app_one_old_token = Fabricate :access_token, application: application_one, resource_owner_id: user.id, last_used_at: 5.days.ago + _app_one_new_token = Fabricate :access_token, application: application_one, resource_owner_id: user.id, last_used_at: 1.day.ago + _never_used_token = Fabricate :access_token, application: application_two, resource_owner_id: user.id, last_used_at: 5.days.ago + end + + it 'returns a hash of unique applications with last used values' do + expect(user.applications_last_used) + .to include(application_one.id => be_within(1.0).of(1.day.ago)) + .and include(application_two.id => be_within(1.0).of(5.days.ago)) + .and not_include(never_used_application.id) + end + end end diff --git a/spec/models/webauthn_credential_spec.rb b/spec/models/webauthn_credential_spec.rb index c4105d9150..067c696c13 100644 --- a/spec/models/webauthn_credential_spec.rb +++ b/spec/models/webauthn_credential_spec.rb @@ -3,53 +3,17 @@ require 'rails_helper' RSpec.describe WebauthnCredential do - describe 'validations' do + describe 'Validations' do + subject { Fabricate.build :webauthn_credential } + it { is_expected.to validate_presence_of(:external_id) } it { is_expected.to validate_presence_of(:public_key) } it { is_expected.to validate_presence_of(:nickname) } it { is_expected.to validate_presence_of(:sign_count) } - it 'is invalid if already exist a webauthn credential with the same external id' do - Fabricate(:webauthn_credential, external_id: '_Typ0ygudDnk9YUVWLQayw') - new_webauthn_credential = Fabricate.build(:webauthn_credential, external_id: '_Typ0ygudDnk9YUVWLQayw') + it { is_expected.to validate_uniqueness_of(:external_id) } + it { is_expected.to validate_uniqueness_of(:nickname).scoped_to(:user_id) } - new_webauthn_credential.valid? - - expect(new_webauthn_credential).to model_have_error_on_field(:external_id) - end - - it 'is invalid if user already registered a webauthn credential with the same nickname' do - user = Fabricate(:user) - Fabricate(:webauthn_credential, user_id: user.id, nickname: 'USB Key') - new_webauthn_credential = Fabricate.build(:webauthn_credential, user_id: user.id, nickname: 'USB Key') - - new_webauthn_credential.valid? - - expect(new_webauthn_credential).to model_have_error_on_field(:nickname) - end - - it 'is invalid if sign_count is not a number' do - webauthn_credential = Fabricate.build(:webauthn_credential, sign_count: 'invalid sign_count') - - webauthn_credential.valid? - - expect(webauthn_credential).to model_have_error_on_field(:sign_count) - end - - it 'is invalid if sign_count is negative number' do - webauthn_credential = Fabricate.build(:webauthn_credential, sign_count: -1) - - webauthn_credential.valid? - - expect(webauthn_credential).to model_have_error_on_field(:sign_count) - end - - it 'is invalid if sign_count is greater than the limit' do - webauthn_credential = Fabricate.build(:webauthn_credential, sign_count: (described_class::SIGN_COUNT_LIMIT * 2)) - - webauthn_credential.valid? - - expect(webauthn_credential).to model_have_error_on_field(:sign_count) - end + it { is_expected.to validate_numericality_of(:sign_count).only_integer.is_greater_than_or_equal_to(0).is_less_than_or_equal_to(described_class::SIGN_COUNT_LIMIT - 1) } end end diff --git a/spec/policies/account_moderation_note_policy_spec.rb b/spec/policies/account_moderation_note_policy_spec.rb index 8c37acc39f..8b33a71012 100644 --- a/spec/policies/account_moderation_note_policy_spec.rb +++ b/spec/policies/account_moderation_note_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AccountModerationNotePolicy do subject { described_class } @@ -12,13 +11,13 @@ RSpec.describe AccountModerationNotePolicy do permissions :create? do context 'when staff' do it 'grants to create' do - expect(subject).to permit(admin, described_class) + expect(subject).to permit(admin, AccountModerationNote) end end context 'when not staff' do it 'denies to create' do - expect(subject).to_not permit(john, described_class) + expect(subject).to_not permit(john, AccountModerationNote) end end end diff --git a/spec/policies/account_policy_spec.rb b/spec/policies/account_policy_spec.rb index d7a21d8e39..75724e831b 100644 --- a/spec/policies/account_policy_spec.rb +++ b/spec/policies/account_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AccountPolicy do subject { described_class } @@ -24,7 +23,7 @@ RSpec.describe AccountPolicy do end end - permissions :show?, :unsilence?, :unsensitive?, :remove_avatar?, :remove_header? do + permissions :show?, :unsilence?, :unsensitive?, :remove_avatar?, :remove_header?, :sensitive?, :warn? do context 'when staff' do it 'permits' do expect(subject).to permit(admin, alice) diff --git a/spec/policies/account_warning_policy_spec.rb b/spec/policies/account_warning_policy_spec.rb new file mode 100644 index 0000000000..9abc9d35d6 --- /dev/null +++ b/spec/policies/account_warning_policy_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe AccountWarningPolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:account) { Fabricate(:account) } + + permissions :show? do + context 'with an admin' do + it { is_expected.to permit(admin, AccountWarning.new) } + end + + context 'with a non-admin' do + context 'when account is not target' do + it { is_expected.to_not permit(account, AccountWarning.new) } + end + + context 'when account is target' do + it { is_expected.to permit(account, AccountWarning.new(target_account_id: account.id)) } + end + end + end + + permissions :appeal? do + context 'when account is not target' do + it { is_expected.to_not permit(account, AccountWarning.new) } + end + + context 'when account is target' do + context 'when record is appealable' do + it { is_expected.to permit(account, AccountWarning.new(target_account_id: account.id, created_at: Appeal::MAX_STRIKE_AGE.ago + 1.hour)) } + end + + context 'when record is not appealable' do + it { is_expected.to_not permit(account, AccountWarning.new(target_account_id: account.id, created_at: Appeal::MAX_STRIKE_AGE.ago - 1.hour)) } + end + end + end +end diff --git a/spec/policies/account_warning_preset_policy_spec.rb b/spec/policies/account_warning_preset_policy_spec.rb index 53e224f19f..33f2fb1187 100644 --- a/spec/policies/account_warning_preset_policy_spec.rb +++ b/spec/policies/account_warning_preset_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AccountWarningPresetPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe AccountWarningPresetPolicy do permissions :index?, :create?, :update?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, AccountWarningPreset) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, AccountWarningPreset) end end end diff --git a/spec/policies/admin/status_policy_spec.rb b/spec/policies/admin/status_policy_spec.rb index 07af425516..4df29393e3 100644 --- a/spec/policies/admin/status_policy_spec.rb +++ b/spec/policies/admin/status_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe Admin::StatusPolicy do let(:policy) { described_class } @@ -13,13 +12,13 @@ RSpec.describe Admin::StatusPolicy do permissions :index?, :update?, :review?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, Status) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, Status) end end end diff --git a/spec/policies/announcement_policy_spec.rb b/spec/policies/announcement_policy_spec.rb index 503ffca6dc..ab0c1dbaf5 100644 --- a/spec/policies/announcement_policy_spec.rb +++ b/spec/policies/announcement_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AnnouncementPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe AnnouncementPolicy do permissions :index?, :create?, :update?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, Announcement) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, Announcement) end end end diff --git a/spec/policies/appeal_policy_spec.rb b/spec/policies/appeal_policy_spec.rb index 1bf8ce0a0d..cdb93bf56c 100644 --- a/spec/policies/appeal_policy_spec.rb +++ b/spec/policies/appeal_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AppealPolicy do let(:policy) { described_class } @@ -12,18 +11,18 @@ RSpec.describe AppealPolicy do permissions :index? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, Appeal) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, Appeal) end end end - permissions :reject? do + permissions :reject?, :approve? do context 'with an admin' do context 'with a pending appeal' do before { allow(appeal).to receive(:pending?).and_return(true) } diff --git a/spec/policies/audit_log_policy_spec.rb b/spec/policies/audit_log_policy_spec.rb new file mode 100644 index 0000000000..d9d9359433 --- /dev/null +++ b/spec/policies/audit_log_policy_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe AuditLogPolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:account) { Fabricate(:account) } + + permissions :index? do + context 'with an admin' do + it { is_expected.to permit(admin, nil) } + end + + context 'with a non-admin' do + it { is_expected.to_not permit(account, nil) } + end + end +end diff --git a/spec/policies/backup_policy_spec.rb b/spec/policies/backup_policy_spec.rb index 28cb65d789..031021d91d 100644 --- a/spec/policies/backup_policy_spec.rb +++ b/spec/policies/backup_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe BackupPolicy do subject { described_class } diff --git a/spec/policies/canonical_email_block_policy_spec.rb b/spec/policies/canonical_email_block_policy_spec.rb index f5029d9e6b..b253b439a6 100644 --- a/spec/policies/canonical_email_block_policy_spec.rb +++ b/spec/policies/canonical_email_block_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe CanonicalEmailBlockPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe CanonicalEmailBlockPolicy do permissions :index?, :show?, :test?, :create?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, CanonicalEmailBlock) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, CanonicalEmailBlock) end end end diff --git a/spec/policies/custom_emoji_policy_spec.rb b/spec/policies/custom_emoji_policy_spec.rb index cb869c7d9a..189885938c 100644 --- a/spec/policies/custom_emoji_policy_spec.rb +++ b/spec/policies/custom_emoji_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe CustomEmojiPolicy do subject { described_class } diff --git a/spec/policies/dashboard_policy_spec.rb b/spec/policies/dashboard_policy_spec.rb new file mode 100644 index 0000000000..90c71db381 --- /dev/null +++ b/spec/policies/dashboard_policy_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe DashboardPolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:account) { Fabricate(:account) } + + permissions :index? do + context 'with an admin' do + it { is_expected.to permit(admin, nil) } + end + + context 'with a non-admin' do + it { is_expected.to_not permit(account, nil) } + end + end +end diff --git a/spec/policies/delivery_policy_spec.rb b/spec/policies/delivery_policy_spec.rb index bb82389eec..8bc200159a 100644 --- a/spec/policies/delivery_policy_spec.rb +++ b/spec/policies/delivery_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe DeliveryPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe DeliveryPolicy do permissions :clear_delivery_errors?, :restart_delivery?, :stop_delivery? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, nil) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, nil) end end end diff --git a/spec/policies/domain_allow_policy_spec.rb b/spec/policies/domain_allow_policy_spec.rb new file mode 100644 index 0000000000..1d285065b8 --- /dev/null +++ b/spec/policies/domain_allow_policy_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe DomainAllowPolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:john) { Fabricate(:account) } + + permissions :index?, :show?, :create?, :destroy? do + context 'when admin' do + it 'permits' do + expect(subject).to permit(admin, DomainAllow) + end + end + + context 'when not admin' do + it 'denies' do + expect(subject).to_not permit(john, DomainAllow) + end + end + end +end diff --git a/spec/policies/domain_block_policy_spec.rb b/spec/policies/domain_block_policy_spec.rb index 4c89f3f374..7c77d1870d 100644 --- a/spec/policies/domain_block_policy_spec.rb +++ b/spec/policies/domain_block_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe DomainBlockPolicy do subject { described_class } @@ -9,7 +8,7 @@ RSpec.describe DomainBlockPolicy do let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } let(:john) { Fabricate(:account) } - permissions :index?, :show?, :create?, :destroy? do + permissions :index?, :show?, :create?, :destroy?, :update? do context 'when admin' do it 'permits' do expect(subject).to permit(admin, DomainBlock) diff --git a/spec/policies/email_domain_block_policy_spec.rb b/spec/policies/email_domain_block_policy_spec.rb index 7ecff4be49..e98d65a3c7 100644 --- a/spec/policies/email_domain_block_policy_spec.rb +++ b/spec/policies/email_domain_block_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe EmailDomainBlockPolicy do subject { described_class } diff --git a/spec/policies/follow_recommendation_policy_spec.rb b/spec/policies/follow_recommendation_policy_spec.rb index ae74d5c3a8..665ed9b059 100644 --- a/spec/policies/follow_recommendation_policy_spec.rb +++ b/spec/policies/follow_recommendation_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe FollowRecommendationPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe FollowRecommendationPolicy do permissions :show?, :suppress?, :unsuppress? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, FollowRecommendation) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, FollowRecommendation) end end end diff --git a/spec/policies/instance_policy_spec.rb b/spec/policies/instance_policy_spec.rb index a0d9a008b7..6cdc738022 100644 --- a/spec/policies/instance_policy_spec.rb +++ b/spec/policies/instance_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe InstancePolicy do subject { described_class } diff --git a/spec/policies/invite_policy_spec.rb b/spec/policies/invite_policy_spec.rb index cbe3735d80..3717a44999 100644 --- a/spec/policies/invite_policy_spec.rb +++ b/spec/policies/invite_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe InvitePolicy do subject { described_class } diff --git a/spec/policies/ip_block_policy_spec.rb b/spec/policies/ip_block_policy_spec.rb index 97bc239e9a..33ea342c10 100644 --- a/spec/policies/ip_block_policy_spec.rb +++ b/spec/policies/ip_block_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe IpBlockPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe IpBlockPolicy do permissions :index?, :show?, :create?, :update?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, IpBlock) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, IpBlock) end end end diff --git a/spec/policies/poll_policy_spec.rb b/spec/policies/poll_policy_spec.rb new file mode 100644 index 0000000000..aa1701cb06 --- /dev/null +++ b/spec/policies/poll_policy_spec.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe PollPolicy do + subject { described_class } + + let(:account) { Fabricate(:account) } + let(:poll) { Fabricate :poll } + + permissions :vote? do + context 'when account cannot view status' do + before { poll.status.update(visibility: :private) } + + it { is_expected.to_not permit(account, poll) } + end + + context 'when account can view status' do + context 'when accounts do not block each other' do + it { is_expected.to permit(account, poll) } + end + + context 'when view blocks poll creator' do + before { Fabricate :block, account: account, target_account: poll.account } + + it { is_expected.to_not permit(account, poll) } + end + + context 'when poll creator blocks viewer' do + before { Fabricate :block, account: poll.account, target_account: account } + + it { is_expected.to_not permit(account, poll) } + end + end + end +end diff --git a/spec/policies/preview_card_policy_spec.rb b/spec/policies/preview_card_policy_spec.rb index a1944303e1..d02a6016cd 100644 --- a/spec/policies/preview_card_policy_spec.rb +++ b/spec/policies/preview_card_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe PreviewCardPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe PreviewCardPolicy do permissions :index?, :review? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, PreviewCard) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, PreviewCard) end end end diff --git a/spec/policies/preview_card_provider_policy_spec.rb b/spec/policies/preview_card_provider_policy_spec.rb index 676039a1b7..5e25b364a4 100644 --- a/spec/policies/preview_card_provider_policy_spec.rb +++ b/spec/policies/preview_card_provider_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe PreviewCardProviderPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe PreviewCardProviderPolicy do permissions :index?, :review? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, PreviewCardProvider) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, PreviewCardProvider) end end end diff --git a/spec/policies/relay_policy_spec.rb b/spec/policies/relay_policy_spec.rb index 29ba02c26a..5983b2d2ff 100644 --- a/spec/policies/relay_policy_spec.rb +++ b/spec/policies/relay_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe RelayPolicy do subject { described_class } diff --git a/spec/policies/report_note_policy_spec.rb b/spec/policies/report_note_policy_spec.rb index b40a878887..02317f763a 100644 --- a/spec/policies/report_note_policy_spec.rb +++ b/spec/policies/report_note_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe ReportNotePolicy do subject { described_class } diff --git a/spec/policies/report_policy_spec.rb b/spec/policies/report_policy_spec.rb index 4fc4178075..67f40b5188 100644 --- a/spec/policies/report_policy_spec.rb +++ b/spec/policies/report_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe ReportPolicy do subject { described_class } diff --git a/spec/policies/rule_policy_spec.rb b/spec/policies/rule_policy_spec.rb index 5d435e38c1..3086f30446 100644 --- a/spec/policies/rule_policy_spec.rb +++ b/spec/policies/rule_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe RulePolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe RulePolicy do permissions :index?, :create?, :update?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, Rule) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, Rule) end end end diff --git a/spec/policies/settings_policy_spec.rb b/spec/policies/settings_policy_spec.rb index 4a99314905..48821c706a 100644 --- a/spec/policies/settings_policy_spec.rb +++ b/spec/policies/settings_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe SettingsPolicy do subject { described_class } diff --git a/spec/policies/software_update_policy_spec.rb b/spec/policies/software_update_policy_spec.rb index e19ba61612..2bda84cce9 100644 --- a/spec/policies/software_update_policy_spec.rb +++ b/spec/policies/software_update_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe SoftwareUpdatePolicy do subject { described_class } diff --git a/spec/policies/status_policy_spec.rb b/spec/policies/status_policy_spec.rb index 725bd0bbb3..eb2af75d92 100644 --- a/spec/policies/status_policy_spec.rb +++ b/spec/policies/status_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe StatusPolicy, type: :model do subject { described_class } diff --git a/spec/policies/tag_policy_spec.rb b/spec/policies/tag_policy_spec.rb index 35da3cc62a..23166e4669 100644 --- a/spec/policies/tag_policy_spec.rb +++ b/spec/policies/tag_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe TagPolicy do subject { described_class } diff --git a/spec/policies/user_policy_spec.rb b/spec/policies/user_policy_spec.rb index 7854547d26..11a166a24e 100644 --- a/spec/policies/user_policy_spec.rb +++ b/spec/policies/user_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe UserPolicy do subject { described_class } @@ -112,4 +111,42 @@ RSpec.describe UserPolicy do end end end + + permissions :approve?, :reject? do + context 'when admin' do + context 'when user is approved' do + it { is_expected.to_not permit(admin, User.new(approved: true)) } + end + + context 'when user is not approved' do + it { is_expected.to permit(admin, User.new(approved: false)) } + end + end + + context 'when not admin' do + it { is_expected.to_not permit(john, User.new) } + end + end + + permissions :change_role? do + context 'when not admin' do + it { is_expected.to_not permit(john, User.new) } + end + + context 'when admin' do + let(:user) { User.new(role: role) } + + context 'when role of admin overrides user role' do + let(:role) { UserRole.new(position: admin.user.role.position - 10, id: 123) } + + it { is_expected.to permit(admin, user) } + end + + context 'when role of admin does not override user role' do + let(:role) { UserRole.new(position: admin.user.role.position + 10, id: 123) } + + it { is_expected.to_not permit(admin, user) } + end + end + end end diff --git a/spec/policies/user_role_policy_spec.rb b/spec/policies/user_role_policy_spec.rb new file mode 100644 index 0000000000..c48b345d68 --- /dev/null +++ b/spec/policies/user_role_policy_spec.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe UserRolePolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:account) { Fabricate(:account) } + + permissions :index?, :create? do + context 'when admin' do + it { is_expected.to permit(admin, UserRole.new) } + end + + context 'when not admin' do + it { is_expected.to_not permit(account, UserRole.new) } + end + end + + permissions :update? do + context 'when admin' do + context 'when role of admin overrides relevant role' do + it { is_expected.to permit(admin, UserRole.new(position: admin.user.role.position - 10, id: 123)) } + end + + context 'when role of admin does not override relevant role' do + it { is_expected.to_not permit(admin, UserRole.new(position: admin.user.role.position + 10, id: 123)) } + end + end + + context 'when not admin' do + it { is_expected.to_not permit(account, UserRole.new) } + end + end + + permissions :destroy? do + context 'when admin' do + context 'when role of admin overrides relevant role' do + it { is_expected.to permit(admin, UserRole.new(position: admin.user.role.position - 10)) } + end + + context 'when role of admin does not override relevant role' do + it { is_expected.to_not permit(admin, UserRole.new(position: admin.user.role.position + 10)) } + end + + context 'when everyone role' do + it { is_expected.to_not permit(admin, UserRole.everyone) } + end + end + + context 'when not admin' do + it { is_expected.to_not permit(account, UserRole.new) } + end + end +end diff --git a/spec/policies/webhook_policy_spec.rb b/spec/policies/webhook_policy_spec.rb index 96aaae2c30..9899235d83 100644 --- a/spec/policies/webhook_policy_spec.rb +++ b/spec/policies/webhook_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe WebhookPolicy do let(:policy) { described_class } diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 84cee0974f..574d543844 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -32,7 +32,7 @@ end STREAMING_PORT = ENV.fetch('TEST_STREAMING_PORT', '4020') ENV['STREAMING_API_BASE_URL'] = "http://localhost:#{STREAMING_PORT}" -require File.expand_path('../config/environment', __dir__) +require_relative '../config/environment' abort('The Rails environment is running in production mode!') if Rails.env.production? @@ -43,6 +43,7 @@ require 'paperclip/matchers' require 'capybara/rspec' require 'chewy/rspec' require 'email_spec/rspec' +require 'pundit/rspec' require 'test_prof/recipes/rspec/before_all' Rails.root.glob('spec/support/**/*.rb').each { |f| require f } @@ -112,6 +113,7 @@ RSpec.configure do |config| config.include ActiveSupport::Testing::TimeHelpers config.include Chewy::Rspec::Helpers config.include Redisable + config.include DomainHelpers config.include ThreadingHelpers config.include SignedRequestHelpers, type: :request config.include CommandLineHelpers, type: :cli diff --git a/spec/requests/activitypub/likes_spec.rb b/spec/requests/activitypub/likes_spec.rb new file mode 100644 index 0000000000..d780ad5168 --- /dev/null +++ b/spec/requests/activitypub/likes_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'ActivityPub Likes' do + let(:account) { Fabricate(:account) } + let(:status) { Fabricate :status, account: account } + + before { Fabricate :favourite, status: status } + + describe 'GET /accounts/:account_username/statuses/:status_id/likes' do + it 'returns http success and activity json types and correct items count' do + get account_status_likes_path(account, status) + + expect(response) + .to have_http_status(200) + expect(response.media_type) + .to eq 'application/activity+json' + + expect(response.parsed_body) + .to include(type: 'Collection') + .and include(totalItems: 1) + end + end +end diff --git a/spec/requests/activitypub/shares_spec.rb b/spec/requests/activitypub/shares_spec.rb new file mode 100644 index 0000000000..956bc7d201 --- /dev/null +++ b/spec/requests/activitypub/shares_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'ActivityPub Shares' do + let(:account) { Fabricate(:account) } + let(:status) { Fabricate :status, account: account } + + before { Fabricate :status, reblog: status } + + describe 'GET /accounts/:account_username/statuses/:status_id/shares' do + it 'returns http success and activity json types and correct items count' do + get account_status_shares_path(account, status) + + expect(response) + .to have_http_status(200) + expect(response.media_type) + .to eq 'application/activity+json' + + expect(response.parsed_body) + .to include(type: 'Collection') + .and include(totalItems: 1) + end + end +end diff --git a/spec/requests/api/v1/apps/credentials_spec.rb b/spec/requests/api/v1/apps/credentials_spec.rb index 8e5fa14b7e..3aca53ed0a 100644 --- a/spec/requests/api/v1/apps/credentials_spec.rb +++ b/spec/requests/api/v1/apps/credentials_spec.rb @@ -44,6 +44,7 @@ RSpec.describe 'Credentials' do expect(response.parsed_body) .to not_include(client_id: be_present) .and not_include(client_secret: be_present) + .and not_include(client_secret_expires_at: be_present) end end diff --git a/spec/requests/api/v1/apps_spec.rb b/spec/requests/api/v1/apps_spec.rb index cf43e14d62..4e9147ba32 100644 --- a/spec/requests/api/v1/apps_spec.rb +++ b/spec/requests/api/v1/apps_spec.rb @@ -42,6 +42,7 @@ RSpec.describe 'Apps' do id: app.id.to_s, client_id: app.uid, client_secret: app.secret, + client_secret_expires_at: 0, name: client_name, website: website, scopes: ['read', 'write'], diff --git a/spec/requests/api/v1/domain_blocks/previews_spec.rb b/spec/requests/api/v1/domain_blocks/previews_spec.rb new file mode 100644 index 0000000000..eb191f436b --- /dev/null +++ b/spec/requests/api/v1/domain_blocks/previews_spec.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Domain Blocks Previews API' do + let(:user) { Fabricate(:user) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'write:blocks' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + let(:account) { Fabricate(:account, user: user) } + + describe 'GET /api/v1/domain_blocks/preview' do + subject { get '/api/v1/domain_blocks/preview', params: { domain: domain }, headers: headers } + + let(:domain) { 'host.example' } + + before do + Fabricate :follow, account: account, target_account: Fabricate(:account, domain: domain) + Fabricate :follow, target_account: account, account: Fabricate(:account, domain: domain) + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + + it 'returns http success and follower counts' do + subject + + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to include(followers_count: 1) + .and include(following_count: 1) + end + end +end diff --git a/spec/requests/api/v1/trends/statuses_spec.rb b/spec/requests/api/v1/trends/statuses_spec.rb index fe00c9c645..414d7651b9 100644 --- a/spec/requests/api/v1/trends/statuses_spec.rb +++ b/spec/requests/api/v1/trends/statuses_spec.rb @@ -39,6 +39,42 @@ RSpec.describe 'API V1 Trends Statuses' do end Trends::Statuses.new(threshold: 1, decay_threshold: -1).refresh end + + context 'with a comically inflated external interactions count' do + def prepare_fake_trends + fake_remote_account = Fabricate(:account, domain: 'other.com') + fake_status = Fabricate(:status, account: fake_remote_account, text: 'I am a big faker', trendable: true, language: 'en') + fake_status.status_stat.tap do |status_stat| + status_stat.reblogs_count = 0 + status_stat.favourites_count = 0 + status_stat.untrusted_reblogs_count = 1_000_000_000 + status_stat.untrusted_favourites_count = 1_000_000_000 + status_stat.save + end + real_remote_account = Fabricate(:account, domain: 'other.com') + real_status = Fabricate(:status, account: real_remote_account, text: 'I make real friends online', trendable: true, language: 'en') + real_status.status_stat.tap do |status_stat| + status_stat.reblogs_count = 10 + status_stat.favourites_count = 10 + status_stat.untrusted_reblogs_count = 10 + status_stat.untrusted_favourites_count = 10 + status_stat.save + end + Trends.statuses.add(fake_status, 100) + Trends.statuses.add(real_status, 101) + Trends::Statuses.new(threshold: 1, decay_threshold: 1).refresh + end + + it 'ignores the feeble attempts at deception' do + prepare_fake_trends + stub_const('Api::BaseController::DEFAULT_STATUSES_LIMIT', 10) + get '/api/v1/trends/statuses' + + expect(response).to have_http_status(200) + expect(response.parsed_body.length).to eq(1) + expect(response.parsed_body[0]['content']).to eq('I make real friends online') + end + end end end end diff --git a/spec/requests/api/v2/media_spec.rb b/spec/requests/api/v2/media_spec.rb index 70e0679f57..807e427d3f 100644 --- a/spec/requests/api/v2/media_spec.rb +++ b/spec/requests/api/v2/media_spec.rb @@ -29,6 +29,22 @@ RSpec.describe 'Media API', :attachment_processing do end end + context 'when media description is too long' do + let(:params) do + { + file: fixture_file_upload('attachment-jpg.123456_abcd', 'image/jpeg'), + description: 'aa' * MediaAttachment::MAX_DESCRIPTION_LENGTH, + } + end + + it 'returns http error' do + post '/api/v2/media', headers: headers, params: params + + expect(response).to have_http_status(422) + expect(response.body).to include 'Description is too long' + end + end + context 'when large format media attachment has not been processed' do let(:params) { { file: fixture_file_upload('attachment.webm', 'video/webm') } } diff --git a/spec/requests/api/web/push_subscriptions_spec.rb b/spec/requests/api/web/push_subscriptions_spec.rb new file mode 100644 index 0000000000..a903dc6f89 --- /dev/null +++ b/spec/requests/api/web/push_subscriptions_spec.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'API Web Push Subscriptions' do + describe 'DELETE /api/web/push_subscriptions/:id' do + subject { delete api_web_push_subscription_path(token) } + + context 'when the subscription exists' do + let!(:web_push_subscription) do + Fabricate(:web_push_subscription) + end + let(:token) do + web_push_subscription.generate_token_for(:unsubscribe) + end + + it 'deletes the subscription' do + expect { subject } + .to change(Web::PushSubscription, :count).by(-1) + + expect(response).to have_http_status(200) + end + end + + context 'when the subscription does not exist' do + let(:web_push_subscription) do + Fabricate(:web_push_subscription) + end + let(:token) do + web_push_subscription.generate_token_for(:unsubscribe) + end + + before do + token # memoize before destroying the record + web_push_subscription.destroy! + end + + it 'does nothing' do + subject + + expect(response).to have_http_status(200) + end + end + + context 'when the token is invalid' do + let(:token) { 'invalid--invalid' } + + it 'does nothing' do + subject + + expect(response).to have_http_status(200) + end + end + end +end diff --git a/spec/requests/oauth/userinfo_spec.rb b/spec/requests/oauth/userinfo_spec.rb new file mode 100644 index 0000000000..7d6226cd41 --- /dev/null +++ b/spec/requests/oauth/userinfo_spec.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Oauth Userinfo Endpoint' do + include RoutingHelper + + let(:user) { Fabricate(:user) } + let(:account) { user.account } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'profile' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + shared_examples 'returns successfully' do + it 'returns http success' do + subject + + expect(response).to have_http_status(:success) + expect(response.content_type).to start_with('application/json') + expect(response.parsed_body).to include({ + iss: root_url, + sub: account_url(account), + name: account.display_name, + preferred_username: account.username, + profile: short_account_url(account), + picture: full_asset_url(account.avatar_original_url), + }) + end + end + + describe 'GET /oauth/userinfo' do + subject do + get '/oauth/userinfo', headers: headers + end + + it_behaves_like 'forbidden for wrong scope', 'read:accounts' + it_behaves_like 'returns successfully' + end + + # As this is borrowed from OpenID, the specification says we must also support + # POST for the userinfo endpoint: + # https://openid.net/specs/openid-connect-core-1_0.html#UserInfo + describe 'POST /oauth/userinfo' do + subject do + post '/oauth/userinfo', headers: headers + end + + it_behaves_like 'forbidden for wrong scope', 'read:accounts' + it_behaves_like 'returns successfully' + end +end diff --git a/spec/requests/statuses/embed_spec.rb b/spec/requests/statuses/embed_spec.rb new file mode 100644 index 0000000000..33c7ea192c --- /dev/null +++ b/spec/requests/statuses/embed_spec.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Status embed' do + describe 'GET /users/:account_username/statuses/:id/embed' do + subject { get "/users/#{account.username}/statuses/#{status.id}/embed" } + + let(:account) { Fabricate(:account) } + let(:status) { Fabricate(:status, account: account) } + + context 'when account is suspended' do + let(:account) { Fabricate(:account, suspended: true) } + + it 'returns http gone' do + subject + + expect(response) + .to have_http_status(410) + end + end + + context 'when status is a reblog' do + let(:original_account) { Fabricate(:account, domain: 'example.com') } + let(:original_status) { Fabricate(:status, account: original_account, url: 'https://example.com/123') } + let(:status) { Fabricate(:status, account: account, reblog: original_status) } + + it 'returns http not found' do + subject + + expect(response) + .to have_http_status(404) + end + end + + context 'when status is public' do + it 'renders status successfully', :aggregate_failures do + subject + + expect(response) + .to have_http_status(200) + expect(response.parsed_body.at('body.embed')) + .to be_present + expect(response.headers).to include( + 'Vary' => 'Accept, Accept-Language, Cookie', + 'Cache-Control' => include('public'), + 'Link' => include('activity+json') + ) + end + end + + context 'when status is private' do + let(:status) { Fabricate(:status, account: account, visibility: :private) } + + it 'returns http not found' do + subject + + expect(response) + .to have_http_status(404) + end + end + + context 'when status is direct' do + let(:status) { Fabricate(:status, account: account, visibility: :direct) } + + it 'returns http not found' do + subject + + expect(response) + .to have_http_status(404) + end + end + end +end diff --git a/spec/requests/well_known/oauth_metadata_spec.rb b/spec/requests/well_known/oauth_metadata_spec.rb index 9c86dbedfe..01e9146fde 100644 --- a/spec/requests/well_known/oauth_metadata_spec.rb +++ b/spec/requests/well_known/oauth_metadata_spec.rb @@ -3,12 +3,6 @@ require 'rails_helper' RSpec.describe 'The /.well-known/oauth-authorization-server request' do - let(:protocol) { ENV.fetch('LOCAL_HTTPS', true) ? :https : :http } - - before do - host! Rails.configuration.x.local_domain - end - it 'returns http success with valid JSON response' do get '/.well-known/oauth-authorization-server' @@ -22,11 +16,12 @@ RSpec.describe 'The /.well-known/oauth-authorization-server request' do grant_types_supported << 'refresh_token' if Doorkeeper.configuration.refresh_token_enabled? expect(response.parsed_body).to include( - issuer: root_url(protocol: protocol), + issuer: root_url, service_documentation: 'https://docs.joinmastodon.org/', - authorization_endpoint: oauth_authorization_url(protocol: protocol), - token_endpoint: oauth_token_url(protocol: protocol), - revocation_endpoint: oauth_revoke_url(protocol: protocol), + authorization_endpoint: oauth_authorization_url, + token_endpoint: oauth_token_url, + userinfo_endpoint: oauth_userinfo_url, + revocation_endpoint: oauth_revoke_url, scopes_supported: Doorkeeper.configuration.scopes.map(&:to_s), response_types_supported: Doorkeeper.configuration.authorization_response_types, response_modes_supported: Doorkeeper.configuration.authorization_response_flows.flat_map(&:response_mode_matches).uniq, @@ -34,7 +29,7 @@ RSpec.describe 'The /.well-known/oauth-authorization-server request' do grant_types_supported: grant_types_supported, code_challenge_methods_supported: ['S256'], # non-standard extension: - app_registration_endpoint: api_v1_apps_url(protocol: protocol) + app_registration_endpoint: api_v1_apps_url ) end end diff --git a/spec/serializers/activitypub/actor_serializer_spec.rb b/spec/serializers/activitypub/actor_serializer_spec.rb new file mode 100644 index 0000000000..ad24455953 --- /dev/null +++ b/spec/serializers/activitypub/actor_serializer_spec.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ActivityPub::ActorSerializer do + subject { serialized_record_json(record, described_class) } + + describe '#type' do + context 'with the instance actor' do + let(:record) { Account.find(Account::INSTANCE_ACTOR_ID) } + + it { is_expected.to include('type' => 'Application') } + end + + context 'with an application actor' do + let(:record) { Fabricate :account, actor_type: 'Application' } + + it { is_expected.to include('type' => 'Service') } + end + + context 'with a service actor' do + let(:record) { Fabricate :account, actor_type: 'Service' } + + it { is_expected.to include('type' => 'Service') } + end + + context 'with a Group actor' do + let(:record) { Fabricate :account, actor_type: 'Group' } + + it { is_expected.to include('type' => 'Group') } + end + + context 'with a Person actor' do + let(:record) { Fabricate :account, actor_type: 'Person' } + + it { is_expected.to include('type' => 'Person') } + end + end +end diff --git a/spec/serializers/activitypub/add_serializer_spec.rb b/spec/serializers/activitypub/add_serializer_spec.rb new file mode 100644 index 0000000000..3b3eaeb1b0 --- /dev/null +++ b/spec/serializers/activitypub/add_serializer_spec.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ActivityPub::AddSerializer do + describe '.serializer_for' do + subject { described_class.serializer_for(model, {}) } + + context 'with a Status model' do + let(:model) { Status.new } + + it { is_expected.to eq(described_class::UriSerializer) } + end + + context 'with a FeaturedTag model' do + let(:model) { FeaturedTag.new } + + it { is_expected.to eq(ActivityPub::HashtagSerializer) } + end + + context 'with an Array' do + let(:model) { [] } + + it { is_expected.to eq(ActiveModel::Serializer::CollectionSerializer) } + end + end +end diff --git a/spec/serializers/activitypub/collection_serializer_spec.rb b/spec/serializers/activitypub/collection_serializer_spec.rb new file mode 100644 index 0000000000..7726df914f --- /dev/null +++ b/spec/serializers/activitypub/collection_serializer_spec.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ActivityPub::CollectionSerializer do + describe '.serializer_for' do + subject { described_class.serializer_for(model, {}) } + + context 'with a Status model' do + let(:model) { Status.new } + + it { is_expected.to eq(ActivityPub::NoteSerializer) } + end + + context 'with a FeaturedTag model' do + let(:model) { FeaturedTag.new } + + it { is_expected.to eq(ActivityPub::HashtagSerializer) } + end + + context 'with an ActivityPub::CollectionPresenter' do + let(:model) { ActivityPub::CollectionPresenter.new } + + it { is_expected.to eq(described_class) } + end + + context 'with a String' do + let(:model) { '' } + + it { is_expected.to eq(described_class::StringSerializer) } + end + + context 'with an Array' do + let(:model) { [] } + + it { is_expected.to eq(ActiveModel::Serializer::CollectionSerializer) } + end + end +end diff --git a/spec/serializers/activitypub/note_serializer_spec.rb b/spec/serializers/activitypub/note_serializer_spec.rb index 285b241ee2..a6976193b2 100644 --- a/spec/serializers/activitypub/note_serializer_spec.rb +++ b/spec/serializers/activitypub/note_serializer_spec.rb @@ -14,7 +14,7 @@ RSpec.describe ActivityPub::NoteSerializer do let!(:reply_by_account_third) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_account_visibility_direct) { Fabricate(:status, account: account, thread: parent, visibility: :direct) } - it 'has the expected shape' do + it 'has the expected shape and replies collection' do expect(subject).to include({ '@context' => include('https://www.w3.org/ns/activitystreams'), 'type' => 'Note', @@ -22,26 +22,23 @@ RSpec.describe ActivityPub::NoteSerializer do 'contentMap' => include({ 'zh-TW' => a_kind_of(String), }), + 'replies' => replies_collection_values, }) end - it 'has a replies collection' do - expect(subject['replies']['type']).to eql('Collection') + def replies_collection_values + include( + 'type' => eql('Collection'), + 'first' => include( + 'type' => eql('CollectionPage'), + 'items' => reply_items + ) + ) end - it 'has a replies collection with a first Page' do - expect(subject['replies']['first']['type']).to eql('CollectionPage') - end - - it 'includes public self-replies in its replies collection' do - expect(subject['replies']['first']['items']).to include(reply_by_account_first.uri, reply_by_account_next.uri, reply_by_account_third.uri) - end - - it 'does not include replies from others in its replies collection' do - expect(subject['replies']['first']['items']).to_not include(reply_by_other_first.uri) - end - - it 'does not include replies with direct visibility in its replies collection' do - expect(subject['replies']['first']['items']).to_not include(reply_by_account_visibility_direct.uri) + def reply_items + include(reply_by_account_first.uri, reply_by_account_next.uri, reply_by_account_third.uri) # Public self replies + .and(not_include(reply_by_other_first.uri)) # Replies from others + .and(not_include(reply_by_account_visibility_direct.uri)) # Replies with direct visibility end end diff --git a/spec/serializers/activitypub/remove_serializer_spec.rb b/spec/serializers/activitypub/remove_serializer_spec.rb new file mode 100644 index 0000000000..0e4b199838 --- /dev/null +++ b/spec/serializers/activitypub/remove_serializer_spec.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ActivityPub::RemoveSerializer do + describe '.serializer_for' do + subject { described_class.serializer_for(model, {}) } + + context 'with a Status model' do + let(:model) { Status.new } + + it { is_expected.to eq(described_class::UriSerializer) } + end + + context 'with a FeaturedTag model' do + let(:model) { FeaturedTag.new } + + it { is_expected.to eq(ActivityPub::HashtagSerializer) } + end + + context 'with an Array' do + let(:model) { [] } + + it { is_expected.to eq(ActiveModel::Serializer::CollectionSerializer) } + end + end +end diff --git a/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb b/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb new file mode 100644 index 0000000000..95b4d7dcd2 --- /dev/null +++ b/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::AccountRelationshipSeveranceEventSerializer do + subject { serialized_record_json(record, described_class) } + + let(:record) { Fabricate.build :account_relationship_severance_event, id: 123 } + + describe 'serialization' do + it 'returns expected values' do + expect(subject) + .to include( + 'id' => be_a(String).and(eq('123')) + ) + end + end +end diff --git a/spec/serializers/rest/account_warning_serializer_spec.rb b/spec/serializers/rest/account_warning_serializer_spec.rb new file mode 100644 index 0000000000..0f335d1215 --- /dev/null +++ b/spec/serializers/rest/account_warning_serializer_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::AccountWarningSerializer do + subject { serialized_record_json(record, described_class) } + + let(:record) { Fabricate :account_warning, id: 123, status_ids: [456, 789] } + + describe 'serialization' do + it 'returns expected values' do + expect(subject) + .to include( + 'id' => be_a(String).and(eq('123')), + 'status_ids' => be_a(Array).and(eq(['456', '789'])) + ) + end + end +end diff --git a/spec/serializers/rest/admin/account_serializer_spec.rb b/spec/serializers/rest/admin/account_serializer_spec.rb new file mode 100644 index 0000000000..58f58a997b --- /dev/null +++ b/spec/serializers/rest/admin/account_serializer_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::Admin::AccountSerializer do + subject { serialized_record_json(record, described_class) } + + describe 'created_by_application_id' do + context 'when account is application-created' do + let(:record) { Fabricate :account, user: Fabricate(:user, created_by_application: application) } + let(:application) { Fabricate :application } + + it { is_expected.to include('created_by_application_id' => application.id.to_s) } + end + end + + describe 'invited_by_account_id' do + context 'when account was invited' do + let(:record) { Fabricate :account, user: Fabricate(:user, invite: invite) } + let(:invite) { Fabricate :invite } + + it { is_expected.to include('invited_by_account_id' => invite.user.account.id.to_s) } + end + end +end diff --git a/spec/serializers/rest/admin/cohort_serializer_spec.rb b/spec/serializers/rest/admin/cohort_serializer_spec.rb new file mode 100644 index 0000000000..ed6067c0d2 --- /dev/null +++ b/spec/serializers/rest/admin/cohort_serializer_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::Admin::CohortSerializer do + subject { serialized_record_json(record, described_class) } + + let(:record) { Admin::Metrics::Retention.new('2024-01-01', '2024-01-02', 'day').cohorts.first } + + describe 'serialization' do + it 'returns expected values' do + expect(subject) + .to include( + 'data' => be_a(Array), + 'period' => /2024-01-01/ + ) + end + end +end diff --git a/spec/serializers/rest/admin/webhook_event_serializer_spec.rb b/spec/serializers/rest/admin/webhook_event_serializer_spec.rb new file mode 100644 index 0000000000..3cbfbd92a3 --- /dev/null +++ b/spec/serializers/rest/admin/webhook_event_serializer_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::Admin::WebhookEventSerializer do + describe '.serializer_for' do + subject { described_class.serializer_for(model, {}) } + + context 'with an Account model' do + let(:model) { Account.new } + + it { is_expected.to eq(REST::Admin::AccountSerializer) } + end + + context 'with a Report model' do + let(:model) { Report.new } + + it { is_expected.to eq(REST::Admin::ReportSerializer) } + end + + context 'with a Status model' do + let(:model) { Status.new } + + it { is_expected.to eq(REST::StatusSerializer) } + end + + context 'with an Array' do + let(:model) { [] } + + it { is_expected.to eq(ActiveModel::Serializer::CollectionSerializer) } + end + end +end diff --git a/spec/serializers/rest/appeal_serializer_spec.rb b/spec/serializers/rest/appeal_serializer_spec.rb new file mode 100644 index 0000000000..1ae6617de5 --- /dev/null +++ b/spec/serializers/rest/appeal_serializer_spec.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::AppealSerializer do + subject { serialized_record_json(record, described_class) } + + describe 'state' do + context 'when appeal is approved' do + let(:record) { Fabricate.build :appeal, approved_at: 2.days.ago } + + it { is_expected.to include('state' => 'approved') } + end + + context 'when appeal is rejected' do + let(:record) { Fabricate.build :appeal, rejected_at: 2.days.ago } + + it { is_expected.to include('state' => 'rejected') } + end + + context 'when appeal is not approved or rejected' do + let(:record) { Fabricate.build :appeal, approved_at: nil, rejected_at: nil } + + it { is_expected.to include('state' => 'pending') } + end + end +end diff --git a/spec/serializers/rest/custom_emoji_serializer_spec.rb b/spec/serializers/rest/custom_emoji_serializer_spec.rb new file mode 100644 index 0000000000..a694ca515a --- /dev/null +++ b/spec/serializers/rest/custom_emoji_serializer_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::CustomEmojiSerializer do + subject { serialized_record_json(record, described_class) } + + let(:record) { Fabricate.build :custom_emoji, id: 123, category: Fabricate(:custom_emoji_category, name: 'Category Name') } + + describe 'serialization' do + it 'returns expected values' do + expect(subject) + .to include( + 'category' => be_a(String).and(eq('Category Name')) + ) + end + end +end diff --git a/spec/serializers/rest/extended_description_serializer_spec.rb b/spec/serializers/rest/extended_description_serializer_spec.rb new file mode 100644 index 0000000000..d7bd078e1d --- /dev/null +++ b/spec/serializers/rest/extended_description_serializer_spec.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::ExtendedDescriptionSerializer do + subject { serialized_record_json(record, described_class) } + + describe 'serialization' do + context 'with text present' do + let(:record) { ExtendedDescription.new text: 'Hello world', updated_at: Date.new(2024, 1, 1) } + + it 'returns expected values' do + expect(subject) + .to include( + 'content' => eq(<<~HTML), +Hello world
+ HTML + 'updated_at' => eq('2024-01-01') + ) + end + end + + context 'with text missing' do + let(:record) { ExtendedDescription.new text: nil, updated_at: Date.new(2024, 1, 1) } + + it 'returns expected values' do + expect(subject) + .to include( + 'content' => eq(''), + 'updated_at' => eq('2024-01-01') + ) + end + end + end +end diff --git a/spec/serializers/rest/rule_serializer_spec.rb b/spec/serializers/rest/rule_serializer_spec.rb new file mode 100644 index 0000000000..4d801e77d3 --- /dev/null +++ b/spec/serializers/rest/rule_serializer_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::RuleSerializer do + subject { serialized_record_json(record, described_class) } + + let(:record) { Fabricate.build :rule, id: 123 } + + describe 'serialization' do + it 'returns expected values' do + expect(subject) + .to include( + 'id' => be_a(String).and(eq('123')) + ) + end + end +end diff --git a/spec/serializers/rest/status_serializer_spec.rb b/spec/serializers/rest/status_serializer_spec.rb new file mode 100644 index 0000000000..e96d1fbe67 --- /dev/null +++ b/spec/serializers/rest/status_serializer_spec.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::StatusSerializer do + subject do + serialized_record_json( + status, + described_class, + options: { + scope: current_user, + scope_name: :current_user, + } + ) + end + + let(:current_user) { Fabricate(:user) } + let(:alice) { Fabricate(:account, username: 'alice') } + let(:bob) { Fabricate(:account, username: 'bob', domain: 'other.com') } + let(:status) { Fabricate(:status, account: alice) } + + context 'with a remote status' do + let(:status) { Fabricate(:status, account: bob) } + + before do + status.status_stat.tap do |status_stat| + status_stat.reblogs_count = 10 + status_stat.favourites_count = 20 + status_stat.save + end + end + + context 'with only trusted counts' do + it 'shows the trusted counts' do + expect(subject['reblogs_count']).to eq(10) + expect(subject['favourites_count']).to eq(20) + end + end + + context 'with untrusted counts' do + before do + status.status_stat.tap do |status_stat| + status_stat.untrusted_reblogs_count = 30 + status_stat.untrusted_favourites_count = 40 + status_stat.save + end + end + + it 'shows the untrusted counts' do + expect(subject['reblogs_count']).to eq(30) + expect(subject['favourites_count']).to eq(40) + end + end + end +end diff --git a/spec/services/app_sign_up_service_spec.rb b/spec/services/app_sign_up_service_spec.rb index ec7b7516f9..b78868db49 100644 --- a/spec/services/app_sign_up_service_spec.rb +++ b/spec/services/app_sign_up_service_spec.rb @@ -53,17 +53,7 @@ RSpec.describe AppSignUpService do Setting.registrations_mode = 'open' Fabricate(:email_domain_block, allow_with_approval: true, domain: 'smtp.email.com') allow(User).to receive(:skip_mx_check?).and_return(false) - - resolver = instance_double(Resolv::DNS, :timeouts= => nil) - - allow(resolver).to receive(:getresources) - .with('email.com', Resolv::DNS::Resource::IN::MX) - .and_return([instance_double(Resolv::DNS::Resource::MX, exchange: 'smtp.email.com')]) - allow(resolver).to receive(:getresources).with('email.com', Resolv::DNS::Resource::IN::A).and_return([]) - allow(resolver).to receive(:getresources).with('email.com', Resolv::DNS::Resource::IN::AAAA).and_return([]) - allow(resolver).to receive(:getresources).with('smtp.email.com', Resolv::DNS::Resource::IN::A).and_return([instance_double(Resolv::DNS::Resource::IN::A, address: '2.3.4.5')]) - allow(resolver).to receive(:getresources).with('smtp.email.com', Resolv::DNS::Resource::IN::AAAA).and_return([instance_double(Resolv::DNS::Resource::IN::AAAA, address: 'fd00::2')]) - allow(Resolv::DNS).to receive(:open).and_yield(resolver) + configure_mx(domain: 'email.com', exchange: 'smtp.email.com') end it 'creates an unapproved user', :aggregate_failures do diff --git a/spec/services/software_update_check_service_spec.rb b/spec/services/software_update_check_service_spec.rb index a1eb9d86e9..637e1e26c5 100644 --- a/spec/services/software_update_check_service_spec.rb +++ b/spec/services/software_update_check_service_spec.rb @@ -27,6 +27,7 @@ RSpec.describe SoftwareUpdateCheckService do before do Fabricate(:software_update, version: '3.5.0', type: 'major', urgent: false) Fabricate(:software_update, version: '42.13.12', type: 'major', urgent: false) + Fabricate(:software_update, version: 'Malformed', type: 'major', urgent: false) owner_user.settings.update('notification_emails.software_updates': 'all') owner_user.save! @@ -50,7 +51,7 @@ RSpec.describe SoftwareUpdateCheckService do end it 'deletes outdated update records but keeps valid update records' do - expect { subject.call }.to change { SoftwareUpdate.pluck(:version).sort }.from(['3.5.0', '42.13.12']).to(['42.13.12']) + expect { subject.call }.to change { SoftwareUpdate.pluck(:version).sort }.from(['3.5.0', '42.13.12', 'Malformed']).to(['42.13.12']) end end @@ -85,7 +86,7 @@ RSpec.describe SoftwareUpdateCheckService do end it 'updates the list of known updates' do - expect { subject.call }.to change { SoftwareUpdate.pluck(:version).sort }.from(['3.5.0', '42.13.12']).to(['4.2.1', '4.3.0', '5.0.0']) + expect { subject.call }.to change { SoftwareUpdate.pluck(:version).sort }.from(['3.5.0', '42.13.12', 'Malformed']).to(['4.2.1', '4.3.0', '5.0.0']) end context 'when no update is urgent' do @@ -124,9 +125,10 @@ RSpec.describe SoftwareUpdateCheckService do context 'when update checking is disabled' do around do |example| - ClimateControl.modify UPDATE_CHECK_URL: '' do - example.run - end + original = Rails.configuration.x.mastodon.software_update_url + Rails.configuration.x.mastodon.software_update_url = '' + example.run + Rails.configuration.x.mastodon.software_update_url = original end before do @@ -148,9 +150,10 @@ RSpec.describe SoftwareUpdateCheckService do let(:update_check_url) { 'https://api.example.com/update_check' } around do |example| - ClimateControl.modify UPDATE_CHECK_URL: 'https://api.example.com/update_check' do - example.run - end + original = Rails.configuration.x.mastodon.software_update_url + Rails.configuration.x.mastodon.software_update_url = 'https://api.example.com/update_check' + example.run + Rails.configuration.x.mastodon.software_update_url = original end it_behaves_like 'when the feature is enabled' diff --git a/spec/services/translate_status_service_spec.rb b/spec/services/translate_status_service_spec.rb index cd92fb8d10..ac7a43ff2a 100644 --- a/spec/services/translate_status_service_spec.rb +++ b/spec/services/translate_status_service_spec.rb @@ -18,7 +18,7 @@ RSpec.describe TranslateStatusService do describe '#call' do before do translation_service = TranslationService.new - allow(translation_service).to receive(:languages).and_return({ 'en' => ['es'] }) + allow(translation_service).to receive(:languages).and_return({ 'en' => ['es', 'es-MX'] }) allow(translation_service).to receive(:translate) do |texts| texts.map do |text| TranslationService::Translation.new( @@ -37,6 +37,7 @@ RSpec.describe TranslateStatusService do .to have_attributes( content: 'Hola
', detected_source_language: 'en', + language: 'es', provider: 'Dummy', status: status ) @@ -101,6 +102,16 @@ RSpec.describe TranslateStatusService do expect(media_attachment.description).to eq 'Hola & :highfive:' end end + + describe 'target language is regional' do + it 'uses regional variant' do + expect(service.call(status, 'es-MX').language).to eq 'es-MX' + end + + it 'uses parent locale for unsupported regional variant' do + expect(service.call(status, 'es-XX').language).to eq 'es' + end + end end describe '#source_texts' do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2a27544407..13683e404e 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -34,8 +34,8 @@ RSpec.configure do |config| end end -def serialized_record_json(record, serializer, adapter: nil) - options = { serializer: serializer } +def serialized_record_json(record, serializer, adapter: nil, options: {}) + options[:serializer] = serializer options[:adapter] = adapter if adapter.present? JSON.parse( ActiveModelSerializers::SerializableResource.new( diff --git a/spec/support/command_line_helpers.rb b/spec/support/command_line_helpers.rb index 6f9d63d939..09b2b70ba1 100644 --- a/spec/support/command_line_helpers.rb +++ b/spec/support/command_line_helpers.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true module CommandLineHelpers - def output_results(*args) + def output_results(*) output( - include(*args) + include(*) ).to_stdout end end diff --git a/spec/support/domain_helpers.rb b/spec/support/domain_helpers.rb new file mode 100644 index 0000000000..9977702099 --- /dev/null +++ b/spec/support/domain_helpers.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +module DomainHelpers + def configure_mx(domain:, exchange:, ip_v4_addr: '2.3.4.5', ip_v6_addr: 'fd00::2') + resolver = instance_double(Resolv::DNS, :timeouts= => nil) + + allow(resolver).to receive(:getresources) + .with(domain, Resolv::DNS::Resource::IN::MX) + .and_return([double_mx(exchange)]) + allow(resolver) + .to receive(:getresources) + .with(domain, Resolv::DNS::Resource::IN::A) + .and_return([]) + allow(resolver) + .to receive(:getresources) + .with(domain, Resolv::DNS::Resource::IN::AAAA) + .and_return([]) + allow(resolver) + .to receive(:getresources) + .with(exchange, Resolv::DNS::Resource::IN::A) + .and_return([double_resource_v4(ip_v4_addr)]) + allow(resolver) + .to receive(:getresources) + .with(exchange, Resolv::DNS::Resource::IN::AAAA) + .and_return([double_resource_v6(ip_v6_addr)]) + allow(Resolv::DNS) + .to receive(:open) + .and_yield(resolver) + end + + private + + def double_mx(exchange) + instance_double(Resolv::DNS::Resource::MX, exchange: exchange) + end + + def double_resource_v4(addr) + instance_double(Resolv::DNS::Resource::IN::A, address: addr) + end + + def double_resource_v6(addr) + instance_double(Resolv::DNS::Resource::IN::AAAA, address: addr) + end +end diff --git a/spec/support/examples/models/concerns/account_avatar.rb b/spec/support/examples/models/concerns/account_avatar.rb index 232f51fa3c..c6cc4e75a5 100644 --- a/spec/support/examples/models/concerns/account_avatar.rb +++ b/spec/support/examples/models/concerns/account_avatar.rb @@ -2,13 +2,20 @@ RSpec.shared_examples 'AccountAvatar' do |fabricator| describe 'static avatars', :attachment_processing do - describe 'when GIF' do + describe 'with a square GIF' do it 'creates a png static style' do account = Fabricate(fabricator, avatar: attachment_fixture('avatar.gif')) expect(account.avatar_static_url).to_not eq account.avatar_original_url end end + describe 'with a higher-than-wide GIF' do + it 'creates a png static style' do + account = Fabricate(fabricator, avatar: attachment_fixture('avatar-high.gif')) + expect(account.avatar_static_url).to_not eq account.avatar_original_url + end + end + describe 'when non-GIF' do it 'does not create extra static style' do account = Fabricate(fabricator, avatar: attachment_fixture('attachment.jpg')) diff --git a/spec/support/stories/profile_stories.rb b/spec/support/stories/profile_stories.rb index 07eaaca9fb..43a8e170cc 100644 --- a/spec/support/stories/profile_stories.rb +++ b/spec/support/stories/profile_stories.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module ProfileStories - attr_reader :bob, :alice, :alice_bio + attr_reader :bob def fill_in_auth_details(email, password) fill_in 'user_email', with: email @@ -31,18 +31,6 @@ module ProfileStories bob.update!(role: UserRole.find_by!(name: 'Admin')) end - def with_alice_as_local_user - @alice_bio = '@alice and @bob are fictional characters commonly used as' \ - 'placeholder names in #cryptology, as well as #science and' \ - 'engineering 📖 literature. Not affiliated with @pepe.' - - @alice = Fabricate( - :user, - email: 'alice@example.com', password: password, confirmed_at: confirmed_at, - account: Fabricate(:account, username: 'alice', note: @alice_bio) - ) - end - def confirmed_at @confirmed_at ||= Time.zone.now end diff --git a/spec/system/about_spec.rb b/spec/system/about_spec.rb index f832802f91..d7fd7f51a1 100644 --- a/spec/system/about_spec.rb +++ b/spec/system/about_spec.rb @@ -8,5 +8,6 @@ RSpec.describe 'About page' do expect(page) .to have_css('noscript', text: /Mastodon/) + .and have_css('body', class: 'app-body') end end diff --git a/spec/system/admin/invites_spec.rb b/spec/system/admin/invites_spec.rb new file mode 100644 index 0000000000..f2cee626c6 --- /dev/null +++ b/spec/system/admin/invites_spec.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Invites' do + describe 'Invite interaction' do + let!(:invite) { Fabricate(:invite, expires_at: nil) } + + let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before { sign_in user } + + it 'allows invite listing and creation' do + visit admin_invites_path + + expect(page) + .to have_title(I18n.t('admin.invites.title')) + for_invite(invite) do + expect(find('input').value) + .to include(invite.code) + end + + select I18n.t('invites.max_uses', count: 10), from: max_use_field + + expect { generate_invite } + .to change(Invite, :count).by(1) + expect(user.invites.last) + .to have_attributes(max_uses: 10) + end + + it 'allows invite expiration' do + visit admin_invites_path + + for_invite(invite) do + expect { expire_invite } + .to change { invite.reload.expired? }.from(false).to(true) + end + end + + it 'allows invite deactivation' do + visit admin_invites_path + + expect { click_on I18n.t('admin.invites.deactivate_all') } + .to change { Invite.exists?(expires_at: nil) }.from(true).to(false) + end + + def for_invite(invite, &block) + within("#invite_#{invite.id}", &block) + end + + def expire_invite + click_on I18n.t('invites.delete') + end + + def generate_invite + click_on I18n.t('invites.generate') + end + + def max_use_field + I18n.t('simple_form.labels.defaults.max_uses') + end + end +end diff --git a/spec/system/admin/reset_spec.rb b/spec/system/admin/reset_spec.rb index 1e787ea110..d0f70a93f0 100644 --- a/spec/system/admin/reset_spec.rb +++ b/spec/system/admin/reset_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe 'Admin::Reset' do - it 'Resets password for account user' do + it 'Resets password for account user', :inline_jobs do account = Fabricate :account sign_in admin_user visit admin_account_path(account.id) diff --git a/spec/system/home_spec.rb b/spec/system/home_spec.rb index c1ce4e1726..0838b3d8e7 100644 --- a/spec/system/home_spec.rb +++ b/spec/system/home_spec.rb @@ -11,6 +11,7 @@ RSpec.describe 'Home page' do expect(page) .to have_css('noscript', text: /Mastodon/) + .and have_css('body', class: 'app-body') end end @@ -20,6 +21,7 @@ RSpec.describe 'Home page' do expect(page) .to have_css('noscript', text: /Mastodon/) + .and have_css('body', class: 'app-body') end end end diff --git a/spec/system/privacy_spec.rb b/spec/system/privacy_spec.rb index 631440ebb2..f2e4d5a993 100644 --- a/spec/system/privacy_spec.rb +++ b/spec/system/privacy_spec.rb @@ -8,5 +8,6 @@ RSpec.describe 'Privacy policy page' do expect(page) .to have_css('noscript', text: /Mastodon/) + .and have_css('body', class: 'app-body') end end diff --git a/spec/system/profile_spec.rb b/spec/system/profile_spec.rb index 7e3cbfd334..a05a146fef 100644 --- a/spec/system/profile_spec.rb +++ b/spec/system/profile_spec.rb @@ -11,10 +11,10 @@ RSpec.describe 'Profile' do before do as_a_logged_in_user - with_alice_as_local_user + Fabricate(:user, account: Fabricate(:account, username: 'alice')) end - it 'I can view Annes public account' do + it 'I can view public account page for Alice' do visit account_path('alice') expect(subject).to have_title("alice (@alice@#{local_domain})") diff --git a/spec/system/tags_spec.rb b/spec/system/tags_spec.rb index f39c6bf0d8..9da5768c7f 100644 --- a/spec/system/tags_spec.rb +++ b/spec/system/tags_spec.rb @@ -13,6 +13,7 @@ RSpec.describe 'Tags' do expect(page) .to have_css('noscript', text: /Mastodon/) + .and have_css('body', class: 'app-body') .and have_private_cache_control end end diff --git a/spec/views/statuses/show.html.haml_spec.rb b/spec/views/statuses/show.html.haml_spec.rb index 9e3f4082b5..e9d77dbaf2 100644 --- a/spec/views/statuses/show.html.haml_spec.rb +++ b/spec/views/statuses/show.html.haml_spec.rb @@ -18,7 +18,7 @@ RSpec.describe 'statuses/show.html.haml' do assign(:descendant_threads, []) end - it 'has valid opengraph tags' do + it 'has valid opengraph tags and twitter player tags' do render expect(header_tags) @@ -26,10 +26,6 @@ RSpec.describe 'statuses/show.html.haml' do .and match(//) .and match(//) .and match(%r{}) - end - - it 'has twitter player tag' do - render expect(header_tags) .to match(%r{}) diff --git a/spec/workers/account_refresh_worker_spec.rb b/spec/workers/account_refresh_worker_spec.rb index 3e88e8db28..4408ef77a9 100644 --- a/spec/workers/account_refresh_worker_spec.rb +++ b/spec/workers/account_refresh_worker_spec.rb @@ -7,9 +7,7 @@ RSpec.describe AccountRefreshWorker do let(:service) { instance_double(ResolveAccountService, call: true) } describe '#perform' do - before do - allow(ResolveAccountService).to receive(:new).and_return(service) - end + before { stub_service } context 'when account does not exist' do it 'returns immediately without processing' do @@ -48,5 +46,11 @@ RSpec.describe AccountRefreshWorker do (Account::BACKGROUND_REFRESH_INTERVAL + 3.days).ago end end + + def stub_service + allow(ResolveAccountService) + .to receive(:new) + .and_return(service) + end end end diff --git a/spec/workers/activitypub/followers_synchronization_worker_spec.rb b/spec/workers/activitypub/followers_synchronization_worker_spec.rb new file mode 100644 index 0000000000..0847b247e3 --- /dev/null +++ b/spec/workers/activitypub/followers_synchronization_worker_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ActivityPub::FollowersSynchronizationWorker do + let(:worker) { described_class.new } + let(:service) { instance_double(ActivityPub::SynchronizeFollowersService, call: true) } + + describe '#perform' do + before { stub_service } + + let(:account) { Fabricate(:account, domain: 'host.example') } + let(:url) { 'https://sync.url' } + + it 'sends the status to the service' do + worker.perform(account.id, url) + + expect(service).to have_received(:call).with(account, url) + end + + it 'returns nil for non-existent record' do + result = worker.perform(123_123_123, url) + + expect(result).to be(true) + end + end + + def stub_service + allow(ActivityPub::SynchronizeFollowersService) + .to receive(:new) + .and_return(service) + end +end diff --git a/spec/workers/push_conversation_worker_spec.rb b/spec/workers/push_conversation_worker_spec.rb index d651059c9a..a98c603c17 100644 --- a/spec/workers/push_conversation_worker_spec.rb +++ b/spec/workers/push_conversation_worker_spec.rb @@ -6,8 +6,30 @@ RSpec.describe PushConversationWorker do let(:worker) { described_class.new } describe 'perform' do - it 'runs without error for missing record' do - expect { worker.perform(nil) }.to_not raise_error + context 'with missing values' do + it 'runs without error' do + expect { worker.perform(nil) } + .to_not raise_error + end + end + + context 'with valid records' do + let(:account_conversation) { Fabricate :account_conversation } + + before { allow(redis).to receive(:publish) } + + it 'pushes message to timeline' do + expect { worker.perform(account_conversation.id) } + .to_not raise_error + + expect(redis) + .to have_received(:publish) + .with(redis_key, anything) + end + + def redis_key + "timeline:direct:#{account_conversation.account_id}" + end end end end diff --git a/spec/workers/push_update_worker_spec.rb b/spec/workers/push_update_worker_spec.rb index 6206ab5986..f3e0a128df 100644 --- a/spec/workers/push_update_worker_spec.rb +++ b/spec/workers/push_update_worker_spec.rb @@ -6,11 +6,31 @@ RSpec.describe PushUpdateWorker do let(:worker) { described_class.new } describe 'perform' do - it 'runs without error for missing record' do - account_id = nil - status_id = nil + context 'with missing values' do + it 'runs without error' do + expect { worker.perform(nil, nil) } + .to_not raise_error + end + end - expect { worker.perform(account_id, status_id) }.to_not raise_error + context 'with valid records' do + let(:account) { Fabricate :account } + let(:status) { Fabricate :status } + + before { allow(redis).to receive(:publish) } + + it 'pushes message to timeline' do + expect { worker.perform(account.id, status.id) } + .to_not raise_error + + expect(redis) + .to have_received(:publish) + .with(redis_key, anything) + end + + def redis_key + "timeline:#{account.id}" + end end end end diff --git a/spec/workers/remote_account_refresh_worker_spec.rb b/spec/workers/remote_account_refresh_worker_spec.rb new file mode 100644 index 0000000000..9938d971b9 --- /dev/null +++ b/spec/workers/remote_account_refresh_worker_spec.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe RemoteAccountRefreshWorker do + let(:worker) { described_class.new } + let(:service) { instance_double(ActivityPub::FetchRemoteAccountService, call: true) } + + describe '#perform' do + before { stub_service } + + let(:account) { Fabricate(:account, domain: 'host.example') } + + it 'sends the status to the service' do + worker.perform(account.id) + + expect(service).to have_received(:call).with(account.uri) + end + + it 'returns nil for non-existent record' do + result = worker.perform(123_123_123) + + expect(result).to be_nil + end + + it 'returns nil for a local record' do + account = Fabricate :account, domain: nil + result = worker.perform(account) + expect(result).to be_nil + end + + def stub_service + allow(ActivityPub::FetchRemoteAccountService) + .to receive(:new) + .and_return(service) + end + end +end diff --git a/spec/workers/remove_featured_tag_worker_spec.rb b/spec/workers/remove_featured_tag_worker_spec.rb index 7866824ee7..a8a5bcea81 100644 --- a/spec/workers/remove_featured_tag_worker_spec.rb +++ b/spec/workers/remove_featured_tag_worker_spec.rb @@ -4,12 +4,35 @@ require 'rails_helper' RSpec.describe RemoveFeaturedTagWorker do let(:worker) { described_class.new } + let(:service) { instance_double(RemoveFeaturedTagService, call: true) } describe 'perform' do - it 'runs without error for missing record' do - account_id = nil - featured_tag_id = nil - expect { worker.perform(account_id, featured_tag_id) }.to_not raise_error + context 'with missing values' do + it 'runs without error' do + expect { worker.perform(nil, nil) } + .to_not raise_error + end + end + + context 'with real records' do + before { stub_service } + + let(:account) { Fabricate :account } + let(:featured_tag) { Fabricate :featured_tag } + + it 'calls the service for processing' do + worker.perform(account.id, featured_tag.id) + + expect(service) + .to have_received(:call) + .with(be_an(Account), be_an(FeaturedTag)) + end + + def stub_service + allow(RemoveFeaturedTagService) + .to receive(:new) + .and_return(service) + end end end end diff --git a/spec/workers/resolve_account_worker_spec.rb b/spec/workers/resolve_account_worker_spec.rb index de349adacb..58c2c12129 100644 --- a/spec/workers/resolve_account_worker_spec.rb +++ b/spec/workers/resolve_account_worker_spec.rb @@ -4,10 +4,34 @@ require 'rails_helper' RSpec.describe ResolveAccountWorker do let(:worker) { described_class.new } + let(:service) { instance_double(ResolveAccountService, call: true) } describe 'perform' do - it 'runs without error for missing record' do - expect { worker.perform(nil) }.to_not raise_error + context 'with missing values' do + it 'runs without error' do + expect { worker.perform(nil) } + .to_not raise_error + end + end + + context 'with a URI' do + before { stub_service } + + let(:uri) { 'https://host/path/value' } + + it 'initiates account resolution' do + worker.perform(uri) + + expect(service) + .to have_received(:call) + .with(uri) + end + + def stub_service + allow(ResolveAccountService) + .to receive(:new) + .and_return(service) + end end end end diff --git a/spec/workers/scheduler/ip_cleanup_scheduler_spec.rb b/spec/workers/scheduler/ip_cleanup_scheduler_spec.rb index 7071fa6e98..98150aa5ef 100644 --- a/spec/workers/scheduler/ip_cleanup_scheduler_spec.rb +++ b/spec/workers/scheduler/ip_cleanup_scheduler_spec.rb @@ -5,9 +5,50 @@ require 'rails_helper' RSpec.describe Scheduler::IpCleanupScheduler do let(:worker) { described_class.new } - describe 'perform' do - it 'runs without error' do - expect { worker.perform }.to_not raise_error + describe '#perform' do + context 'with IP-related data past retention times' do + let!(:future_ip_block) { Fabricate :ip_block, expires_at: 1.week.from_now } + let!(:old_ip_block) { Fabricate :ip_block, expires_at: 1.week.ago } + let!(:session_past_retention) { Fabricate :session_activation, ip: '10.0.0.0', updated_at: 18.months.ago } + let!(:inactive_user) { Fabricate :user, current_sign_in_at: 18.months.ago, sign_up_ip: '10.0.0.0' } + let!(:old_login_activity) { Fabricate :login_activity, created_at: 18.months.ago } + let!(:old_token) { Fabricate :access_token, last_used_at: 18.months.ago, last_used_ip: '10.0.0.0' } + + before { stub_const 'Scheduler::IpCleanupScheduler::SESSION_RETENTION_PERIOD', 10.years.to_i.seconds } + + it 'deletes the expired block' do + expect { worker.perform } + .to_not raise_error + expect { old_ip_block.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect { old_login_activity.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect(session_past_retention.reload.ip) + .to be_nil + expect(inactive_user.reload.sign_up_ip) + .to be_nil + expect(old_token.reload.last_used_ip) + .to be_nil + expect(future_ip_block.reload) + .to be_present + end + end + + context 'with old session data' do + let!(:new_activation) { Fabricate :session_activation, updated_at: 1.week.ago } + let!(:old_activation) { Fabricate :session_activation, updated_at: 1.month.ago } + + before { stub_const 'Scheduler::IpCleanupScheduler::SESSION_RETENTION_PERIOD', 10.days.to_i.seconds } + + it 'clears old sessions' do + expect { worker.perform } + .to_not raise_error + + expect { old_activation.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect(new_activation.reload) + .to be_present + end end end end diff --git a/spec/workers/web/push_notification_worker_spec.rb b/spec/workers/web/push_notification_worker_spec.rb index 7f836d99e4..4993d467b3 100644 --- a/spec/workers/web/push_notification_worker_spec.rb +++ b/spec/workers/web/push_notification_worker_spec.rb @@ -61,6 +61,7 @@ RSpec.describe Web::PushNotificationWorker do 'Ttl' => '172800', 'Urgency' => 'normal', 'Authorization' => 'WebPush jwt.encoded.payload', + 'Unsubscribe-URL' => %r{/api/web/push_subscriptions/}, }, body: "+\xB8\xDBT}\u0013\xB6\xDD.\xF9\xB0\xA7\xC8Ҁ\xFD\x99#\xF7\xAC\x83\xA4\xDB,\u001F\xB5\xB9w\x85>\xF7\xADr" ) diff --git a/streaming/Dockerfile b/streaming/Dockerfile index bed6b63738..f94c04e7a2 100644 --- a/streaming/Dockerfile +++ b/streaming/Dockerfile @@ -9,7 +9,7 @@ ARG BUILDPLATFORM=${BUILDPLATFORM} # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"] # renovate: datasource=node-version depName=node -ARG NODE_MAJOR_VERSION="20" +ARG NODE_MAJOR_VERSION="22" # Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="bookworm"] ARG DEBIAN_VERSION="bookworm" # Node image to use for base image based on combined variables (ex: 20-bookworm-slim) diff --git a/streaming/index.js b/streaming/index.js index d792f95acf..7bbcc1497f 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -235,7 +235,7 @@ const startServer = async () => { app.get('/favicon.ico', (_req, res) => res.status(404).end()); app.get('/api/v1/streaming/health', (_req, res) => { - res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.writeHead(200, { 'Content-Type': 'text/plain', 'Cache-Control': 'private, no-store' }); res.end('OK'); }); @@ -865,7 +865,7 @@ const startServer = async () => { } res.setHeader('Content-Type', 'text/event-stream'); - res.setHeader('Cache-Control', 'no-store'); + res.setHeader('Cache-Control', 'private, no-store'); res.setHeader('Transfer-Encoding', 'chunked'); res.write(':)\n'); diff --git a/streaming/metrics.js b/streaming/metrics.js index bb6bce3f3c..263339a1ca 100644 --- a/streaming/metrics.js +++ b/streaming/metrics.js @@ -98,9 +98,11 @@ export function setupMetrics(channels, pgPool) { const requestHandler = (req, res) => { metrics.register.metrics().then((output) => { res.set('Content-Type', metrics.register.contentType); + res.set('Cache-Control', 'private, no-store'); res.end(output); }).catch((err) => { req.log.error(err, "Error collecting metrics"); + res.set('Cache-Control', 'private, no-store'); res.status(500).end(); }); }; diff --git a/streaming/package.json b/streaming/package.json index d573c9b284..380f1c429d 100644 --- a/streaming/package.json +++ b/streaming/package.json @@ -1,7 +1,7 @@ { "name": "@mastodon/streaming", "license": "AGPL-3.0-or-later", - "packageManager": "yarn@4.5.0", + "packageManager": "yarn@4.5.1", "engines": { "node": ">=18" }, @@ -27,7 +27,7 @@ "pino": "^9.0.0", "pino-http": "^10.0.0", "prom-client": "^15.0.0", - "uuid": "^10.0.0", + "uuid": "^11.0.0", "ws": "^8.12.1" }, "devDependencies": { diff --git a/streaming/redis.js b/streaming/redis.js index 2a36b89dc5..0b582ef2f5 100644 --- a/streaming/redis.js +++ b/streaming/redis.js @@ -50,9 +50,9 @@ function getSentinelConfiguration(env, commonOptions) { return { db: redisDatabase, name: env.REDIS_SENTINEL_MASTER, - username: env.REDIS_USERNAME, + username: env.REDIS_USER, password: env.REDIS_PASSWORD, - sentinelUsername: env.REDIS_SENTINEL_USERNAME ?? env.REDIS_USERNAME, + sentinelUsername: env.REDIS_SENTINEL_USERNAME ?? env.REDIS_USER, sentinelPassword: env.REDIS_SENTINEL_PASSWORD ?? env.REDIS_PASSWORD, sentinels, ...commonOptions, @@ -104,7 +104,7 @@ export function configFromEnv(env) { host: env.REDIS_HOST ?? '127.0.0.1', port: redisPort, db: redisDatabase, - username: env.REDIS_USERNAME, + username: env.REDIS_USER, password: env.REDIS_PASSWORD, ...commonOptions, }; diff --git a/yarn.lock b/yarn.lock index 20637eff94..1e9250ee91 100644 --- a/yarn.lock +++ b/yarn.lock @@ -42,127 +42,129 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/code-frame@npm:7.25.7" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/code-frame@npm:7.26.0" dependencies: - "@babel/highlight": "npm:^7.25.7" + "@babel/helper-validator-identifier": "npm:^7.25.9" + js-tokens: "npm:^4.0.0" picocolors: "npm:^1.0.0" - checksum: 10c0/14825c298bdec914caf3d24d1383b6d4cd6b030714686004992f4fc251831ecf432236652896f99d5d341f17170ae9a07b58d8d7b15aa0df8cfa1c5a7d5474bc + checksum: 10c0/46f7e367714be736b52ea3c01b24f47e2102e210fb83021d1c8237d8fc511b9538909e16e2fcdbb5cb6173e0794e28624309a59014e52fcfb7bde908f5284388 languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/compat-data@npm:7.25.7" - checksum: 10c0/e5cc915abdd18d021236474a96606b2d4a915c4fb620c1ad776b8a08d91111e788cb3b7e9bad43593d4e0bfa4f06894357bcb0984102de1861b9e7322b6bc9f8 +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.9, @babel/compat-data@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/compat-data@npm:7.26.0" + checksum: 10c0/6325c9151a3c9b0a3a807e854a26255ef66d989bff331475a935af9bb18f160e0fffe6aed550e4e96b63f91efcd874bfbaab2a1f4a2f8d25645d712a0de590fb languageName: node linkType: hard -"@babel/core@npm:^7.10.4, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1, @babel/core@npm:^7.24.4": - version: 7.25.7 - resolution: "@babel/core@npm:7.25.7" +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1, @babel/core@npm:^7.24.4, @babel/core@npm:^7.25.0": + version: 7.26.0 + resolution: "@babel/core@npm:7.26.0" dependencies: "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.25.7" - "@babel/generator": "npm:^7.25.7" - "@babel/helper-compilation-targets": "npm:^7.25.7" - "@babel/helper-module-transforms": "npm:^7.25.7" - "@babel/helpers": "npm:^7.25.7" - "@babel/parser": "npm:^7.25.7" - "@babel/template": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" + "@babel/code-frame": "npm:^7.26.0" + "@babel/generator": "npm:^7.26.0" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-module-transforms": "npm:^7.26.0" + "@babel/helpers": "npm:^7.26.0" + "@babel/parser": "npm:^7.26.0" + "@babel/template": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.26.0" 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: 10c0/dad20af39624086afc3a0910bd97ae712c9ad0e9dda09fc5da93876e8ea1802b63ddd81c44f4aa8a9834db46de801eaab1ce9b81ab54b4fe907ae052c24de136 + checksum: 10c0/91de73a7ff5c4049fbc747930aa039300e4d2670c2a91f5aa622f1b4868600fc89b01b6278385fbcd46f9574186fa3d9b376a9e7538e50f8d118ec13cfbcb63e languageName: node linkType: hard -"@babel/generator@npm:^7.25.7, @babel/generator@npm:^7.7.2": - version: 7.25.7 - resolution: "@babel/generator@npm:7.25.7" +"@babel/generator@npm:^7.25.9, @babel/generator@npm:^7.26.0, @babel/generator@npm:^7.7.2": + version: 7.26.0 + resolution: "@babel/generator@npm:7.26.0" dependencies: - "@babel/types": "npm:^7.25.7" + "@babel/parser": "npm:^7.26.0" + "@babel/types": "npm:^7.26.0" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^3.0.2" - checksum: 10c0/c03a26c79864d60d04ce36b649c3fa0d6fd7b2bf6a22e22854a0457aa09206508392dd73ee40e7bc8d50b3602f9ff068afa47770cda091d332e7db1ca382ee96 + checksum: 10c0/b6bb9185f19a97eaf58e04a6d39a13237076678e7ed16b6321dea914535d4bf6a8d7727c9dcb65539845aa0096b326eb67be4bab764bd74bcfd848e2eda68609 languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-annotate-as-pure@npm:7.25.7" +"@babel/helper-annotate-as-pure@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-annotate-as-pure@npm:7.25.9" dependencies: - "@babel/types": "npm:^7.25.7" - checksum: 10c0/2f020b0fa9d336b5778485cc2de3141561ec436a7591b685457a5bcdae4ce41d9ddee68169c95504e0789e5a4327e73b8b7e72e5b60e82e96d730c4d19255248 + "@babel/types": "npm:^7.25.9" + checksum: 10c0/095b6ba50489d797733abebc4596a81918316a99e3632755c9f02508882912b00c2ae5e468532a25a5c2108d109ddbe9b7da78333ee7cc13817fc50c00cf06fe languageName: node linkType: hard -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.25.7" +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.25.9" dependencies: - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/e9dc5a7920a1d74150dec53ccd5e34f2b31ae307df7cdeec6289866f7bda97ecb1328b49a7710ecde5db5b6daad768c904a030f9a0fa3184963b0017622c42aa + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/a6068bb813e7f72d12b72edeecb99167f60cd7964cacedfb60e01fff5e7bed4a5a7f4f7414de7cf352a1b71487df5f8dab8c2b5230de4ad5aea16adf32e14219 languageName: node linkType: hard -"@babel/helper-builder-react-jsx@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-builder-react-jsx@npm:7.25.7" +"@babel/helper-builder-react-jsx@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-builder-react-jsx@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/f8123a76e8c3fcdbb24cc14bfefc80e4c7bf58112ab26bea3247298748c674cbaee70591c362d0d881e4d88154ea4809b145f3ddcf96221cf55ba27bfde535c6 + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/99d6e87eede0971f25b5e638220f5f966c56c03f6a6278a693c73ac0a31acddb86110208a89d948aa337c8cf7998fb317c00e8baf2e9fa0a42b9207b977dc9c6 languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-compilation-targets@npm:7.25.7" +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-compilation-targets@npm:7.25.9" dependencies: - "@babel/compat-data": "npm:^7.25.7" - "@babel/helper-validator-option": "npm:^7.25.7" + "@babel/compat-data": "npm:^7.25.9" + "@babel/helper-validator-option": "npm:^7.25.9" browserslist: "npm:^4.24.0" lru-cache: "npm:^5.1.1" semver: "npm:^6.3.1" - checksum: 10c0/705be7e5274a3fdade68e3e2cf42e2b600316ab52794e13b91299a16f16c926f15886b6e9d6df20eb943ccc1cdba5a363d4766f8d01e47b8e6f4e01175f5e66c + checksum: 10c0/a6b26a1e4222e69ef8e62ee19374308f060b007828bc11c65025ecc9e814aba21ff2175d6d3f8bf53c863edd728ee8f94ba7870f8f90a37d39552ad9933a8aaa languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-create-class-features-plugin@npm:7.25.7" +"@babel/helper-create-class-features-plugin@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-member-expression-to-functions": "npm:^7.25.7" - "@babel/helper-optimise-call-expression": "npm:^7.25.7" - "@babel/helper-replace-supers": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-member-expression-to-functions": "npm:^7.25.9" + "@babel/helper-optimise-call-expression": "npm:^7.25.9" + "@babel/helper-replace-supers": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/405c3c1a137acda1206380a96993cf2cfd808b3bee1c11c4af47ee0f03a20858497aa53394d6adc5431793c543be5e02010620e871a5ab39d938ae90a54b50f2 + checksum: 10c0/b2bdd39f38056a76b9ba00ec5b209dd84f5c5ebd998d0f4033cf0e73d5f2c357fbb49d1ce52db77a2709fb29ee22321f84a5734dc9914849bdfee9ad12ce8caf languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.7" +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" regexpu-core: "npm:^6.1.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/75919fd5a67cd7be8497b56f7b9ed6b4843cb401956ba8d403aa9ae5b005bc28e35c7f27e704d820edbd1154394ed7a7984d4719916795d89d716f6980fe8bd4 + checksum: 10c0/3adc60a758febbf07d65a15eaccab1f7b9fcc55e7141e59122f13c9f81fc0d1cce4525b7f4af50285d27c93b34c859fd2c39c39820c5fb92211898c3bbdc77ef languageName: node linkType: hard @@ -181,223 +183,210 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-member-expression-to-functions@npm:7.25.7" +"@babel/helper-member-expression-to-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-member-expression-to-functions@npm:7.25.9" dependencies: - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/1e948162ab48d84593a7c6ec9570d14c906146f1697144fc369c59dbeb00e4a062da67dd06cb0d8f98a044cd8389002dcf2ab6f5613d99c35748307846ec63fc + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/e08c7616f111e1fb56f398365e78858e26e466d4ac46dff25921adc5ccae9b232f66e952a2f4162bbe336627ba336c7fd9eca4835b6548935973d3380d77eaff languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0-beta.49, @babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-module-imports@npm:7.25.7" +"@babel/helper-module-imports@npm:^7.0.0-beta.49, @babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-module-imports@npm:7.25.9" dependencies: - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/0fd0c3673835e5bf75558e184bcadc47c1f6dd2fe2016d53ebe1e5a6ae931a44e093015c2f9a6651c1a89f25c76d9246710c2b0b460b95ee069c464f2837fa2c + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/078d3c2b45d1f97ffe6bb47f61961be4785d2342a4156d8b42c92ee4e1b7b9e365655dd6cb25329e8fe1a675c91eeac7e3d04f0c518b67e417e29d6e27b6aa70 languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-module-transforms@npm:7.25.7" +"@babel/helper-module-transforms@npm:^7.25.9, @babel/helper-module-transforms@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helper-module-transforms@npm:7.26.0" dependencies: - "@babel/helper-module-imports": "npm:^7.25.7" - "@babel/helper-simple-access": "npm:^7.25.7" - "@babel/helper-validator-identifier": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/f37fa7d1d4df21690535b278468cbd5faf0133a3080f282000cfa4f3ffc9462a1458f866b04b6a2f2d1eec4691236cba9a867da61270dab3ab19846e62f05090 + checksum: 10c0/ee111b68a5933481d76633dad9cdab30c41df4479f0e5e1cc4756dc9447c1afd2c9473b5ba006362e35b17f4ebddd5fca090233bef8dfc84dca9d9127e56ec3a languageName: node linkType: hard -"@babel/helper-optimise-call-expression@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-optimise-call-expression@npm:7.25.7" +"@babel/helper-optimise-call-expression@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-optimise-call-expression@npm:7.25.9" dependencies: - "@babel/types": "npm:^7.25.7" - checksum: 10c0/19b4cc7e77811b1fedca4928dbc14026afef913c2ba4142e5e110ebdcb5c3b2efc0f0fbee9f362c23a194674147b9d627adea71c289b9be08b9067bc0085308b + "@babel/types": "npm:^7.25.9" + checksum: 10c0/90203e6607edeadd2a154940803fd616c0ed92c1013d6774c4b8eb491f1a5a3448b68faae6268141caa5c456e55e3ee49a4ed2bd7ddaf2365daea321c435914c languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.7, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.25.7 - resolution: "@babel/helper-plugin-utils@npm:7.25.7" - checksum: 10c0/241f8cf3c5b7700e91cab7cfe5b432a3c710ae3cd5bb96dc554da536a6d25f5b9f000cc0c0917501ceb4f76ba92599ee3beb25e10adaf96be59f8df89a842faf +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.0, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.25.9 + resolution: "@babel/helper-plugin-utils@npm:7.25.9" + checksum: 10c0/483066a1ba36ff16c0116cd24f93de05de746a603a777cd695ac7a1b034928a65a4ecb35f255761ca56626435d7abdb73219eba196f9aa83b6c3c3169325599d languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-remap-async-to-generator@npm:7.25.7" +"@babel/helper-remap-async-to-generator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-remap-async-to-generator@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-wrap-function": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-wrap-function": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/972d84876adce6ab61c87a2df47e1afc790b73cff0d1767d0a1c5d9f7aa5e91d8c581a272b66b2051a26cfbb167d8a780564705e488e3ce1f477f1c15059bc5f + checksum: 10c0/6798b562f2788210980f29c5ee96056d90dc73458c88af5bd32f9c82e28e01975588aa2a57bb866c35556bd9b76bac937e824ee63ba472b6430224b91b4879e9 languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-replace-supers@npm:7.25.7" +"@babel/helper-replace-supers@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-replace-supers@npm:7.25.9" dependencies: - "@babel/helper-member-expression-to-functions": "npm:^7.25.7" - "@babel/helper-optimise-call-expression": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-member-expression-to-functions": "npm:^7.25.9" + "@babel/helper-optimise-call-expression": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/761d64ee74429f7326a6aa65e2cd5bfcb8de9e3bc3f1efb14b8f610d2410f003b0fca52778dc801d49ff8fbc90b057e8f51b27c62b0b05c95eaf23140ca1287b + checksum: 10c0/0b40d7d2925bd3ba4223b3519e2e4d2456d471ad69aa458f1c1d1783c80b522c61f8237d3a52afc9e47c7174129bbba650df06393a6787d5722f2ec7f223c3f4 languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-simple-access@npm:7.25.7" +"@babel/helper-simple-access@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-simple-access@npm:7.25.9" dependencies: - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/eed1b499bfb4f613c18debd61517e3de77b6da2727ca025aa05ac81599e0269f1dddb5237db04e8bb598115d015874752e0a7f11ff38672d74a4976097417059 + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/3f1bcdb88ee3883ccf86959869a867f6bbf8c4737cd44fb9f799c38e54f67474590bc66802500ae9fe18161792875b2cfb7ec15673f48ed6c8663f6d09686ca8 languageName: node linkType: hard -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.7" +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.9" dependencies: - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/5804adb893849a9d8cfb548e3812566a81d95cb0c9a10d66b52912d13f488e577c33063bf19bc06ac70e6333162a7370d67ba1a1c3544d37fb50d5f4a00db4de + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/09ace0c6156961624ac9524329ce7f45350bab94bbe24335cbe0da7dfaa1448e658771831983cb83fe91cf6635b15d0a3cab57c03b92657480bfb49fb56dd184 languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-string-parser@npm:7.25.7" - checksum: 10c0/73ef2ceb81f8294678a0afe8ab0103729c0370cac2e830e0d5128b03be5f6a2635838af31d391d763e3c5a4460ed96f42fd7c9b552130670d525be665913bc4c +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-validator-identifier@npm:7.25.7" - checksum: 10c0/07438e5bf01ab2882a15027fdf39ac3b0ba1b251774a5130917907014684e2f70fef8fd620137ca062c4c4eedc388508d2ea7a3a7d9936a32785f4fe116c68c0 +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-validator-option@npm:7.25.7" - checksum: 10c0/12ed418c8e3ed9ed44c8c80d823f4e42d399b5eb2e423adccb975e31a31a008cd3b5d8eab688b31f740caff4a1bb28fe06ea2fa7d635aee34cc0ad6995d50f0a +"@babel/helper-validator-option@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-option@npm:7.25.9" + checksum: 10c0/27fb195d14c7dcb07f14e58fe77c44eea19a6a40a74472ec05c441478fa0bb49fa1c32b2d64be7a38870ee48ef6601bdebe98d512f0253aea0b39756c4014f3e languageName: node linkType: hard -"@babel/helper-wrap-function@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-wrap-function@npm:7.25.7" +"@babel/helper-wrap-function@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-wrap-function@npm:7.25.9" dependencies: - "@babel/template": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/b5d412f72697f4a4ce4cb9784fbaf82501c63cf95066c0eadd3179e3439cbbf0aa5fa4858d93590083671943cd357aeb87286958df34aa56fdf8a4c9dea39755 + "@babel/template": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/b6627d83291e7b80df020f8ee2890c52b8d49272962cac0114ef90f189889c90f1027985873d1b5261a4e986e109b2754292dc112392f0b1fcbfc91cc08bd003 languageName: node linkType: hard -"@babel/helpers@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helpers@npm:7.25.7" +"@babel/helpers@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helpers@npm:7.26.0" dependencies: - "@babel/template": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/3b3ae9e373bd785414195ef8f59976a69d5a6ebe0ef2165fdcc5165e5c3ee09e0fcee94bb457df2ddb8c0532e4146d0a9b7a96b3497399a4bff4ffe196b30228 + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.26.0" + checksum: 10c0/343333cced6946fe46617690a1d0789346960910225ce359021a88a60a65bc0d791f0c5d240c0ed46cf8cc63b5fd7df52734ff14e43b9c32feae2b61b1647097 languageName: node linkType: hard -"@babel/highlight@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/highlight@npm:7.25.7" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0": + version: 7.26.1 + resolution: "@babel/parser@npm:7.26.1" dependencies: - "@babel/helper-validator-identifier": "npm:^7.25.7" - chalk: "npm:^2.4.2" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.0.0" - checksum: 10c0/1f5894fdb0a0af6101fb2822369b2eeeae32cbeae2ef73ff73fc6a0a4a20471565cd9cfa589f54ed69df66adeca7c57266031ca9134b7bd244d023a488d419aa - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/parser@npm:7.25.7" - dependencies: - "@babel/types": "npm:^7.25.7" + "@babel/types": "npm:^7.26.0" bin: parser: ./bin/babel-parser.js - checksum: 10c0/b771469bb6b636c18a8d642b9df3c73913c3860a979591e1a29a98659efd38b81d3e393047b5251fe382d4c82c681c12da9ce91c98d69316d2604d155a214bcf + checksum: 10c0/dc7d4e6b7eb667fa0784e7e2c3f6f92ca12ad72242f6d4311995310dae55093f02acdb595b69b0dbbf04cb61ad87156ac03186ff32eacfa35149c655bc22c14b languageName: node linkType: hard -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.7" +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/c6ba97c39973897a2ab021c4a77221e1e93e853a5811d498db325da1bd692e41fa521db6d91bb709ccafd4e54ddd00869ffb35846923c3ccd49d46124b316904 + checksum: 10c0/7aab47fcbb8c1ddc195a3cd66609edcad54c5022f018db7de40185f0182950389690e953e952f117a1737b72f665ff02ad30de6c02b49b97f1d8f4ccdffedc34 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.7" +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/ac284868bf410f952c6959b0d77708464127160416f003b05c8127d30e64792d671abc167ebf778b17707e32174223ea8d3ff487276991fa90297d92f0dac6e2 + checksum: 10c0/3a652b3574ca62775c5f101f8457950edc540c3581226579125da535d67765f41ad7f0e6327f8efeb2540a5dad5bb0c60a89fb934af3f67472e73fb63612d004 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.7" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/1bffc0a20c8c82b4c77515eb4c99b961b38184116f008bb42bed4e12d3379ba7b2bc6cf299bcea8118d645bb7a5e0caa83969842f16dd1fce49fb3a050e4ac65 + checksum: 10c0/18fc9004104a150f9f5da9f3307f361bc3104d16778bb593b7523d5110f04a8df19a2587e6bdd5e726fb1d397191add45223f4f731bb556c33f14f2779d596e8 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.25.7" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" - "@babel/plugin-transform-optional-chaining": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + "@babel/plugin-transform-optional-chaining": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.13.0 - checksum: 10c0/32223f012614a0b2657579317ded7d0d09af2aa316285715c5012f974d0f15c2ce2fe0d8e80fdd9bac6c10c21c93cc925a9dfd6c8e21ce7ba1a9fe06a58088b4 + checksum: 10c0/3f6c8781a2f7aa1791a31d2242399ca884df2ab944f90c020b6f112fb19f05fa6dad5be143d274dad1377e40415b63d24d5489faf5060b9c4a99e55d8f0c317c languageName: node linkType: hard -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.7" +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/aa2ee7a5954d187de6cbcca0e0b64cfb79c4d224c332d1eb1e0e4afd92ef1a1f4bc4af24f66154097ccb348c08121a875456f47baed220b1b9e93584e6a19b65 + checksum: 10c0/02b365f0cc4df8b8b811c68697c93476da387841e5f153fe42766f34241b685503ea51110d5ed6df7132759820b93e48d9fa3743cffc091eed97c19f7e5fe272 languageName: node linkType: hard @@ -432,7 +421,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": +"@babel/plugin-syntax-class-properties@npm:^7.8.3": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -443,62 +432,29 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-static-block@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" +"@babel/plugin-syntax-import-assertions@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.26.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/4464bf9115f4a2d02ce1454411baf9cfb665af1da53709c5c56953e5e2913745b0fcce82982a00463d6facbdd93445c691024e310b91431a1e2f024b158f6371 + checksum: 10c0/525b174e60b210d96c1744c1575fc2ddedcc43a479cba64a5344cf77bd0541754fc58120b5a11ff832ba098437bb05aa80900d1f49bb3d888c5e349a4a3a356e languageName: node linkType: hard -"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" +"@babel/plugin-syntax-import-attributes@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/9c50927bf71adf63f60c75370e2335879402648f468d0172bc912e303c6a3876927d8eb35807331b57f415392732ed05ab9b42c68ac30a936813ab549e0246c5 + checksum: 10c0/e594c185b12bfe0bbe7ca78dfeebe870e6d569a12128cac86f3164a075fe0ff70e25ddbd97fd0782906b91f65560c9dc6957716b7b4a68aba2516c9b7455e352 languageName: node linkType: hard -"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5100d658ba563829700cd8d001ddc09f4c0187b1a13de300d729c5b3e87503f75a6d6c99c1794182f7f1a9f546ee009df4f15a0ce36376e206ed0012fa7cdc24 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-assertions@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.25.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/0fee0d971f3c654749fdf92e09b6556bba26ab014c8e99b7252f6a7f1ca108f17edd7ceefb5401d7b7008e98ab1b6f8c3c6a5db72862e7c7b2fcd649d000d690 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-attributes@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.25.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/fe00cdb96fd289ab126830a98e1dcf5ab7b529a6ef1c01a72506b5e7b1197d6e46c3c4d029cd90d1d61eb9a15ef77c282d156d0c02c7e32f168bb09d84150db4 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": +"@babel/plugin-syntax-import-meta@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" dependencies: @@ -520,18 +476,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:7, @babel/plugin-syntax-jsx@npm:^7.25.7, @babel/plugin-syntax-jsx@npm:^7.7.2": - version: 7.25.7 - resolution: "@babel/plugin-syntax-jsx@npm:7.25.7" +"@babel/plugin-syntax-jsx@npm:^7.25.0, @babel/plugin-syntax-jsx@npm:^7.25.9, @babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.25.9 + resolution: "@babel/plugin-syntax-jsx@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/17db499c31fcfaa94d5408726d943955d51d478353d1e2dd84eda6024f7e3d104b9456a77f8aabfae0db7f4dc32f810d08357112f7fcbe305e7c9fcf5b3cac13 + checksum: 10c0/d56597aff4df39d3decda50193b6dfbe596ca53f437ff2934622ce19a743bf7f43492d3fb3308b0289f5cee2b825d99ceb56526a2b9e7b68bf04901546c5618c languageName: node linkType: hard -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" dependencies: @@ -553,7 +509,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": +"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" dependencies: @@ -597,18 +553,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/69822772561706c87f0a65bc92d0772cea74d6bc0911537904a676d5ff496a6d3ac4e05a166d8125fce4a16605bace141afc3611074e170a994e66e5397787f3 - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": +"@babel/plugin-syntax-top-level-await@npm:^7.8.3": version: 7.14.5 resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" dependencies: @@ -619,14 +564,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.25.7, @babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.25.7 - resolution: "@babel/plugin-syntax-typescript@npm:7.25.7" +"@babel/plugin-syntax-typescript@npm:^7.25.9, @babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.25.9 + resolution: "@babel/plugin-syntax-typescript@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/ed51fd81a5cf571a89fc4cf4c0e3b0b91285c367237374c133d2e5e718f3963cfa61b81997df39220a8837dc99f9e9a8ab7701d259c09fae379e4843d9db60c2 + checksum: 10c0/5192ebe11bd46aea68b7a60fd9555465c59af7e279e71126788e59121b86e00b505816685ab4782abe159232b0f73854e804b54449820b0d950b397ee158caa2 languageName: node linkType: hard @@ -642,466 +587,454 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.7" +"@babel/plugin-transform-arrow-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c8d75ead93f130bf113b6d29493aca695092661ef039336d2a227169c3b7895aa5e9bcc548c42a95a6eaaaf49e512317b00699940bd40ccefd77443e703d3935 + checksum: 10c0/851fef9f58be60a80f46cc0ce1e46a6f7346a6f9d50fa9e0fa79d46ec205320069d0cc157db213e2bea88ef5b7d9bd7618bb83f0b1996a836e2426c3a3a1f622 languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.7" +"@babel/plugin-transform-async-generator-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-remap-async-to-generator": "npm:^7.25.7" - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-remap-async-to-generator": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/dcdd17d8cafafe0eb2edd0a46a7abe86c72235c957c8eb1157ccadb2b199572d5d1aa36a2d3bce5cb99990f7d3c6290ecf09959c62f3081c4df9ff717a1c84a4 + checksum: 10c0/e3fcb9fc3d6ab6cbd4fcd956b48c17b5e92fe177553df266ffcd2b2c1f2f758b893e51b638e77ed867941e0436487d2b8b505908d615c41799241699b520dec6 languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.25.7" +"@babel/plugin-transform-async-to-generator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.25.9" dependencies: - "@babel/helper-module-imports": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-remap-async-to-generator": "npm:^7.25.7" + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-remap-async-to-generator": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/1dbefba9c1455f7a92b8c59a93c622091db945294c936fc2c09b1648308c5b4cb2ecaae92baae0d07a324ab890a8a2ee27ceb046bc120932845d27aede275821 + checksum: 10c0/c443d9e462ddef733ae56360064f32fc800105803d892e4ff32d7d6a6922b3765fa97b9ddc9f7f1d3f9d8c2d95721d85bef9dbf507804214c6cf6466b105c168 languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.25.7" +"@babel/plugin-transform-block-scoped-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b1e77492295d1b271ef850a81b0404cf3d0dd6a2bcbeab28a0fd99e61c6de4bda91dff583bb42138eec61bf71282bdd3b1bebcb53b7e373035e77fd6ba66caeb + checksum: 10c0/e92ba0e3d72c038513844d8fca1cc8437dcb35cd42778e97fd03cb8303380b201468611e7ecfdcae3de33473b2679fe2de1552c5f925d112c5693425cf851f10 languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-block-scoping@npm:7.25.7" +"@babel/plugin-transform-block-scoping@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-block-scoping@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b2057e00535cd0e8bd5ee5d4640aa2e952564aeafb1bcf4e7b6de33442422877bb0ca8669ad0a48262ec077271978c61eae87b6b3bc8f472d830fa781d6f7e44 + checksum: 10c0/a76e30becb6c75b4d87a2cd53556fddb7c88ddd56bfadb965287fd944810ac159aa8eb5705366fc37336041f63154ed9fab3862fb10482a45bf5ede63fd55fda languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-class-properties@npm:7.25.7" +"@babel/plugin-transform-class-properties@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-class-properties@npm:7.25.9" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/1f41e6934b20ad3e05df63959cff9bc600ff3119153b9acbbd44c1731e7df04866397e6e17799173f4c53cdee6115e155632859aee20bf47ec7dcef3f2168a47 + checksum: 10c0/f0603b6bd34d8ba62c03fc0572cb8bbc75874d097ac20cc7c5379e001081210a84dba1749e7123fca43b978382f605bb9973c99caf2c5b4c492d5c0a4a441150 languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-class-static-block@npm:7.25.7" +"@babel/plugin-transform-class-static-block@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-transform-class-static-block@npm:7.26.0" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.12.0 - checksum: 10c0/cbb4b46cbd8ad10106eb2bedb5a0665661a1d1d5b6f3ab565ff454b802dab4718e02b25670fe0d40835494aedb3dc26757c06cc4da6ff3e80291c5f882269bd3 + checksum: 10c0/cdcf5545ae6514ed75fbd73cccfa209c6a5dfdf0c2bb7bb62c0fb4ec334a32281bcf1bc16ace494d9dbe93feb8bdc0bd3cf9d9ccb6316e634a67056fa13b741b languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-classes@npm:7.25.7" +"@babel/plugin-transform-classes@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-classes@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-compilation-targets": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-replace-supers": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-replace-supers": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" globals: "npm:^11.1.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/8121781e1d8acd80e6169019106f73a399475ad9c895c1988a344dfed5a6ddd340938ac55123dc1e423bb8f25f255f5d11031116ad756ba3c314595a97c973af + checksum: 10c0/02742ea7cd25be286c982e672619effca528d7a931626a6f3d6cea11852951b7ee973276127eaf6418ac0e18c4d749a16b520709c707e86a67012bd23ff2927d languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-computed-properties@npm:7.25.7" +"@babel/plugin-transform-computed-properties@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-computed-properties@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/template": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/template": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/7ad0a1c126f50935a02e77d438ebc39078a9d644b3a60de60bec32c5d9f49e7f2b193fcecb8c61bb1bc3cdd4af1e93f72d022d448511fa76a171527c633cd1bf + checksum: 10c0/948c0ae3ce0ba2375241d122a9bc7cda4a7ac8110bd8a62cd804bc46a5fdb7a7a42c7799c4cd972e14e0a579d2bd0999b92e53177b73f240bb0d4b09972c758b languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-destructuring@npm:7.25.7" +"@babel/plugin-transform-destructuring@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-destructuring@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/a563123b2fb267e03aa50104005f00b56226a685938906c42c1b251462e0cc9fc89e587d5656d3324159071eb8ebda8c68a6011f11d5a00fb1436cb5a5411b7b + checksum: 10c0/7beec5fda665d108f69d5023aa7c298a1e566b973dd41290faa18aeea70f6f571295c1ece0a058f3ceb6c6c96de76de7cd34f5a227fbf09a1b8d8a735d28ca49 languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.25.7" +"@babel/plugin-transform-dotall-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/7f1db3ec20b7fae46db4a9c4c257d75418b0896b72c0a3de20b3044f952801480f0a2e75ebb0d64f13e8cd4db0e49aa42c5c0edff372b23c41679b1ea5dd3ed4 + checksum: 10c0/7c3471ae5cf7521fd8da5b03e137e8d3733fc5ee4524ce01fb0c812f0bb77cb2c9657bc8a6253186be3a15bb4caa8974993c7ddc067f554ecc6a026f0a3b5e12 languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.25.7" +"@babel/plugin-transform-duplicate-keys@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b4079981e2db19737a0f1a00254e7388e2d3c01ce36e9fd826e4d86d3c1755339495e29c71fd7c84a068201ec24687328d48f3bf53b32b6d6224f51d9a34da74 + checksum: 10c0/d0c74894b9bf6ff2a04189afffb9cd43d87ebd7b7943e51a827c92d2aaa40fa89ac81565a2fd6fbeabf9e38413a9264c45862eee2b017f1d49046cc3c8ff06b4 languageName: node linkType: hard -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.7" +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/e4946090ff6d88d54b78265ee653079ec34c117ac046e22f66f7c4ac44249cdc2dfca385bc5bf4386db668b9948eeb12985589500188bc252e684c7714c31475 + checksum: 10c0/a8039a6d2b90e011c7b30975edee47b5b1097cf3c2f95ec1f5ddd029898d783a995f55f7d6eb8d6bb8873c060fb64f9f1ccba938dfe22d118d09cf68e0cd3bf6 languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.7" +"@babel/plugin-transform-dynamic-import@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c733252ff20a32d9747dd081916270f5a073856597e849a5f458b12f4354499b18714f5e7049e341432851d9975077cb37effcd276c7f816faa6f5ff708dc5e1 + checksum: 10c0/5e643a8209072b668350f5788f23c64e9124f81f958b595c80fecca6561086d8ef346c04391b9e5e4cad8b8cbe22c258f0cd5f4ea89b97e74438e7d1abfd98cf languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.25.7" +"@babel/plugin-transform-exponentiation-operator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.25.9" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c8537b9f3cddc5a8d3710f6980196dc7a0f4389f8f82617312a5f7b8b15bcd8ddaeba783c687c3ac6031eb0a4ba0bc380a98da6bf7efe98e225602a98ad42a1e + checksum: 10c0/3b42f65bab3fee28c385115ce6bcb6ba544dff187012df408a432c9fb44c980afd898911020c723dc1c9257aaf3d7d0131ad83ba15102bf30ad9a86fc2a8a912 languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.7" +"@babel/plugin-transform-export-namespace-from@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/ef61fc5d54c9c8b075cbd9db62beaf295e38e08a1edb1882995105d3e959763be1631f7d7f7cb7461b702ebd0b4a601f2eb2cd6521acaf061310a3a3305fa756 + checksum: 10c0/f291ea2ec5f36de9028a00cbd5b32f08af281b8183bf047200ff001f4cb260be56f156b2449f42149448a4a033bd6e86a3a7f06d0c2825532eb0ae6b03058dfb languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-for-of@npm:7.25.7" +"@babel/plugin-transform-for-of@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-for-of@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/08a37a1742368a422d095c998ed76f60f6bf3f9cc060033be121d803fd2dddc08fe543e48ee49c022bdc9ed80893ca79d084958d83d30684178b088774754277 + checksum: 10c0/bf11abc71934a1f369f39cd7a33cf3d4dc5673026a53f70b7c1238c4fcc44e68b3ca1bdbe3db2076f60defb6ffe117cbe10b90f3e1a613b551d88f7c4e693bbe languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-function-name@npm:7.25.7" +"@babel/plugin-transform-function-name@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-function-name@npm:7.25.9" dependencies: - "@babel/helper-compilation-targets": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/ca98e1116c0ada7211ed43e4b7f21ca15f95bbbdad70f2fbe1ec2d90a97daedf9f22fcb0a25c8b164a5e394f509f2e4d1f7609d26dc938a58d37c5ee9b80088a + checksum: 10c0/8e67fbd1dd367927b8b6afdf0a6e7cb3a3fd70766c52f700ca77428b6d536f6c9d7ec643e7762d64b23093233765c66bffa40e31aabe6492682879bcb45423e1 languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-json-strings@npm:7.25.7" +"@babel/plugin-transform-json-strings@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-json-strings@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/aa6e5f65c8a5f2459d7daa9b5b4ff97ff43bab21f4a8513ed84d35300b0323ec542dc101c5f11622e442dfc93b3a229c7f41ebc7645370dfec6d066bda800a0b + checksum: 10c0/00bc2d4751dfc9d44ab725be16ee534de13cfd7e77dfb386e5dac9e48101ce8fcbc5971df919dc25b3f8a0fa85d6dc5f2a0c3cf7ec9d61c163d9823c091844f0 languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-literals@npm:7.25.7" +"@babel/plugin-transform-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-literals@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c2c2488102f33e566f45becdcb632e53bd052ecfb2879deb07a614b3e9437e3b624c3b16d080096d50b0b622edebd03e438acbf9260bcc41167897963f64560e + checksum: 10c0/00b14e9c14cf1e871c1f3781bf6334cac339c360404afd6aba63d2f6aca9270854d59a2b40abff1c4c90d4ffdca614440842d3043316c2f0ceb155fdf7726b3b languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.7" +"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/d610a8a2c1be83e03cce2256f29519e705dc68289c09d67f1f362d1fd80f4b36eaf2affc05710abb53a272895041e24d9e95ec73a516a23a67cb907023fbe37b + checksum: 10c0/6e2051e10b2d6452980fc4bdef9da17c0d6ca48f81b8529e8804b031950e4fff7c74a7eb3de4a2b6ad22ffb631d0b67005425d232cce6e2b29ce861c78ed04f5 languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.25.7" +"@babel/plugin-transform-member-expression-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/d6936b98ae4d3daed850dc4e064042ea4375f815219ba9d8591373bf1fba4cfdb5be42623ae8882f2d666cc34af650a4855e2a5ad89e3c235d73a6f172f9969c + checksum: 10c0/91d17b451bcc5ea9f1c6f8264144057ade3338d4b92c0b248366e4db3a7790a28fd59cc56ac433a9627a9087a17a5684e53f4995dd6ae92831cb72f1bd540b54 languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-modules-amd@npm:7.25.7" +"@babel/plugin-transform-modules-amd@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-amd@npm:7.25.9" dependencies: - "@babel/helper-module-transforms": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-module-transforms": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c0bc999206c3834c090e6559a6c8a55d7672d3573104e832223ebe7df99bd1b82fc850e15ba32f512c84b0db1cdb613b66fa60abe9abb9c7e8dcbff91649b356 + checksum: 10c0/849957d9484d0a2d93331226ed6cf840cee7d57454549534c447c93f8b839ef8553eae9877f8f550e3c39f14d60992f91244b2e8e7502a46064b56c5d68ba855 languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.25.7" +"@babel/plugin-transform-modules-commonjs@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.25.9" dependencies: - "@babel/helper-module-transforms": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-simple-access": "npm:^7.25.7" + "@babel/helper-module-transforms": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-simple-access": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/2f1c945fc3c9b690b0ddcf2c80156b2e4fbf2cf15aac43ac8fe6e4b34125869528839a53d07c564e62e4aed394ebdc1d2c3b796b547374455522581c11b7599c + checksum: 10c0/6ce771fb04d4810257fc8900374fece877dacaed74b05eaa16ad9224b390f43795c4d046cbe9ae304e1eb5aad035d37383895e3c64496d647c2128d183916e74 languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.7" +"@babel/plugin-transform-modules-systemjs@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.9" dependencies: - "@babel/helper-module-transforms": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-validator-identifier": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-module-transforms": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/95eaea7082636710c61e49e58b3907e85ec79db4327411d3784f28592509fbe94a53cc3d20a36a1cf245efc6d3f0017eae15b45ffd645c1ab949bb4e1670e6bb + checksum: 10c0/8299e3437542129c2684b86f98408c690df27db4122a79edded4782cf04e755d6ecb05b1e812c81a34224a81e664303392d5f3c36f3d2d51fdc99bb91c881e9a languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-modules-umd@npm:7.25.7" +"@babel/plugin-transform-modules-umd@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-umd@npm:7.25.9" dependencies: - "@babel/helper-module-transforms": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-module-transforms": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/8849ab04eecdb73cd37e2d7289449fa5256331832b0304c220b2a6aaa12e2d2dd87684f2813412d1fc5bdb3d6b55cc08c6386d3273fe05a65177c09bee5b6769 + checksum: 10c0/fa11a621f023e2ac437b71d5582f819e667c94306f022583d77da9a8f772c4128861a32bbb63bef5cba581a70cd7dbe87a37238edaafcfacf889470c395e7076 languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.25.7" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/eb55fec55dc930cd122911f3e4a421320fa8b1b4de85bfd7ef11b46c611ec69b0213c114a6e1c6bc224d6b954ff183a0caa7251267d5258ecc0f00d6d9ca1d52 + checksum: 10c0/32b14fda5c885d1706863f8af2ee6c703d39264355b57482d3a24fce7f6afbd4c7a0896e501c0806ed2b0759beb621bf7f3f7de1fbbc82026039a98d961e78ef languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-new-target@npm:7.25.7" +"@babel/plugin-transform-new-target@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-new-target@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/8e5dce6d027e0f3fd394578ea1af7f515de157793a15c23a5aad7034a6d8a4005ef280238e67a232bb4dd4fafd3a264fed462deb149128ddd9ce59ff6f575cff + checksum: 10c0/7b5f1b7998f1cf183a7fa646346e2f3742e5805b609f28ad5fee22d666a15010f3e398b7e1ab78cddb7901841a3d3f47135929af23d54e8bf4ce69b72051f71e languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.7" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b35a96a79ef4895b00e4f758d3185cb17e4fbfada311894ad5f0988a55fc2c21820dc789b26a3cb8fbd620434faa516e52acb6e2da105c2edbd29de8b6b0facf + checksum: 10c0/eb623db5be078a1c974afe7c7797b0309ba2ea9e9237c0b6831ade0f56d8248bb4ab3432ab34495ff8c877ec2fe412ff779d1e9b3c2b8139da18e1753d950bc3 languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.7" +"@babel/plugin-transform-numeric-separator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c028ae89e6b4e1d757f8f1ebcb3b420e6559bb35002728f6f5651d5f669fbf73764adf6e3597908fa12adf8dbae683e5f74b3a7f68e8774a9663c18c0f999539 + checksum: 10c0/ad63ad341977844b6f9535fcca15ca0d6d6ad112ed9cc509d4f6b75e9bf4b1b1a96a0bcb1986421a601505d34025373608b5f76d420d924b4e21f86b1a1f2749 languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.7" +"@babel/plugin-transform-object-rest-spread@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.9" dependencies: - "@babel/helper-compilation-targets": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-transform-parameters": "npm:^7.25.7" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/plugin-transform-parameters": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/e8b978d9d1020452da0d5d92f80fe57e302761dac20137bb8bf863478a4779fcd63d314db89e796125d9d76da2a38f64f012d6e0c4913815951b3eb3fba2feb6 + checksum: 10c0/02077d8abd83bf6a48ff0b59e98d7561407cf75b591cffd3fdc5dc5e9a13dec1c847a7a690983762a3afecddb244831e897e0515c293e7c653b262c30cd614af languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-object-super@npm:7.25.7" +"@babel/plugin-transform-object-super@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-object-super@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-replace-supers": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-replace-supers": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/7f2968d4da997101b63fd3b74445c9b16f56bd32cd8a0a16c368af9d3e983e7675c1b05d18601f32307cb06e7d884ee11d13ff18a1f6830c0db243a9a852afab + checksum: 10c0/0348d00e76f1f15ada44481a76e8c923d24cba91f6e49ee9b30d6861eb75344e7f84d62a18df8a6f9e9a7eacf992f388174b7f9cc4ce48287bcefca268c07600 languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.7" +"@babel/plugin-transform-optional-catch-binding@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/bb609e5103780be0825a255ffe1fefbb5335aead88a46eecc2257053279ea2c45ff66b0ef1fb54302c8c8c57146e88e52f3ecb62b4c6f619218d7b3843b352d9 + checksum: 10c0/722fd5ee12ab905309d4e84421584fce4b6d9e6b639b06afb20b23fa809e6ab251e908a8d5e8b14d066a28186b8ef8f58d69fd6eca9ce1b9ef7af08333378f6c languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.7" +"@babel/plugin-transform-optional-chaining@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/887441ada6c2bc1b789984b7531d9bc585f335ece99642886d3d9fd8aee7e6b8d4f7ca61d76b5f23477f3aa607284d5056eadaa1eb17e7b39af6b0e834cbe878 + checksum: 10c0/041ad2beae5affb8e68a0bcb6882a2dadb758db3c629a0e012f57488ab43a822ac1ea17a29db8ef36560a28262a5dfa4dbbbf06ed6e431db55abe024b7cd3961 languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-parameters@npm:7.25.7" +"@babel/plugin-transform-parameters@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-parameters@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b40ba70278842ce1e800d7ab400df730994941550da547ef453780023bd61a9b8acf4b9fb8419c1b5bcbe09819a1146ff59369db11db07eb71870bef86a12422 + checksum: 10c0/aecb446754b9e09d6b6fa95fd09e7cf682f8aaeed1d972874ba24c0a30a7e803ad5f014bb1fffc7bfeed22f93c0d200947407894ea59bf7687816f2f464f8df3 languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-private-methods@npm:7.25.7" +"@babel/plugin-transform-private-methods@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-private-methods@npm:7.25.9" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/92e076f63f7c4696e1321dafdd56c4212eb41784cdadba0ebc39091f959a76d357c3df61a6c668be81d6b6ad8964ee458e85752ab0c6cfbbaf2066903edda732 + checksum: 10c0/64bd71de93d39daefa3e6c878d6f2fd238ed7d4ecfb13b0e771ddbbc131487def3ceb405b62b534a5cbb5043046b504e1b189b0a45229cc75af979a9fbcaa7bd languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.7" +"@babel/plugin-transform-private-property-in-object@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-create-class-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/5ad8832ba54e2079c1f558b8680e170265e3f376424e5fbb75b17b7f08696fb0af6c96d23d92f7df3dcc559f5971a02587281fcec38a853174aa95478565f5fc + checksum: 10c0/d4965de19d9f204e692cc74dbc39f0bb469e5f29df96dd4457ea23c5e5596fba9d5af76eaa96f9d48a9fc20ec5f12a94c679285e36b8373406868ea228109e27 languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-property-literals@npm:7.25.7" +"@babel/plugin-transform-property-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-property-literals@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/6d5bccdc772207906666ad5201bd91e4e132e1d806dbcf4163a1d08e18c57cc3795578c4e10596514bcd6afaf9696f478ea4f0dea890176d93b9cb077b9e5c55 + checksum: 10c0/1639e35b2438ccf3107af760d34e6a8e4f9acdd3ae6186ae771a6e3029bd59dfe778e502d67090f1185ecda5c16addfed77561e39c518a3f51ff10d41790e106 languageName: node linkType: hard @@ -1116,305 +1049,303 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-react-display-name@npm:7.25.7" +"@babel/plugin-transform-react-display-name@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-display-name@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/a0c537cc7c328ed7468d3b6a37bf0d9cb15d94afcdf3f2849ce6e5a68494fc61f0fa4fc529482a6b95b00f3c5c734f310bf18085293bff40702789f06c816f36 + checksum: 10c0/63a0f962d64e71baf87c212755419e25c637d2d95ea6fdc067df26b91e606ae186442ae815b99a577eca9bf5404d9577ecad218a3cf42d0e9e286ca7b003a992 languageName: node linkType: hard "@babel/plugin-transform-react-inline-elements@npm:^7.21.0": - version: 7.25.7 - resolution: "@babel/plugin-transform-react-inline-elements@npm:7.25.7" + version: 7.25.9 + resolution: "@babel/plugin-transform-react-inline-elements@npm:7.25.9" dependencies: - "@babel/helper-builder-react-jsx": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-builder-react-jsx": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/de85180c09002083cb330ef28d5b31b44e6ac6565c700b603be76e629f5a92c59ff69f79c08cc1dbd2dd1f271f44fe8d4c751deaf66c059ba721aa3cb43c881e + checksum: 10c0/d745bcfa8e51acc497b5ea2ff2fc4215cd39ebdb54703f2973962e3818a4829081ebc9e7818db28f90d1295e0b02e140986509ba48eef8aaa9de8c09b9434646 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-development@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-react-jsx-development@npm:7.25.7" +"@babel/plugin-transform-react-jsx-development@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.25.9" dependencies: - "@babel/plugin-transform-react-jsx": "npm:^7.25.7" + "@babel/plugin-transform-react-jsx": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/a3dc14644d09a6d22875af7b5584393ab53e467e0531cd192fc6242504dacaffa421e89265ba7f84fd4edef2b7b100d2e2ebf092a4dce2b55cf9c5fe29390c18 + checksum: 10c0/c0b92ff9eb029620abf320ff74aae182cea87524723d740fb48a4373d0d16bddf5edbe1116e7ba341332a5337e55c2ceaee8b8cad5549e78af7f4b3cfe77debb languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-react-jsx@npm:7.25.7" +"@babel/plugin-transform-react-jsx@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-jsx@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-module-imports": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-jsx": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/plugin-syntax-jsx": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/6766b0357b8bbfcb77fca5350f06cf822c89bbe75ddcaea24614601ef23957504da24e76597d743038ce8fa081373b0663c8ad0c86d7c7226e8185f0680b8b56 + checksum: 10c0/5c9947e8ed141f7606f54da3e05eea1074950c5b8354c39df69cb7f43cb5a83c6c9d7973b24bc3d89341c8611f8ad50830a98ab10d117d850e6bdd8febdce221 languageName: node linkType: hard -"@babel/plugin-transform-react-pure-annotations@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.25.7" +"@babel/plugin-transform-react-pure-annotations@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/d92c9b511850fb6dea71966a0d4f313d67e317db7fc3633a7ff2e27d6df2e95cbc91c4c25abdb6c8db651fcda842a0cb7433835a8a9d4a3fdc5d452068428101 + checksum: 10c0/7c8eac04644ad19dcd71bb8e949b0ae22b9e548fa4a58e545d3d0342f647fb89db7f8789a7c5b8074d478ce6d3d581eaf47dd4b36027e16fd68211c383839abc languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-regenerator@npm:7.25.7" +"@babel/plugin-transform-regenerator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-regenerator@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" regenerator-transform: "npm:^0.15.2" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/7ee3a57c4050bc908ef7ac392d810826b294970a7182f4ec34a8ca93dbe36deb21bc862616d46a6f3d881d6b5749930e1679e875b638a00866d844a4250df212 + checksum: 10c0/eef3ffc19f7d291b863635f32b896ad7f87806d9219a0d3404a470219abcfc5b43aabecd691026c48e875b965760d9c16abee25e6447272233f30cd07f453ec7 languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-reserved-words@npm:7.25.7" +"@babel/plugin-transform-regexp-modifiers@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.26.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/4abc1db6c964efafc7a927cda814c7275275afa4b530483e0936fd614de23cb5802f7ca43edaa402008a723d4e7eac282b6f5283aa2eeb3b27da6d6c1dd7f8ed + languageName: node + linkType: hard + +"@babel/plugin-transform-reserved-words@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-reserved-words@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/920c98130daff6c1288fb13a9a2d2e45863bba93e619cb88d90e1f5b5cb358a3ee8880a425a3adb1b4bd5dbb6bd0500eea3370fc612633045eec851b08cc586c + checksum: 10c0/8b028b80d1983e3e02f74e21924323cc66ba930e5c5758909a122aa7d80e341b8b0f42e1698e42b50d47a6ba911332f584200b28e1a4e2104b7514d9dc011e96 languageName: node linkType: hard "@babel/plugin-transform-runtime@npm:^7.22.4": - version: 7.25.7 - resolution: "@babel/plugin-transform-runtime@npm:7.25.7" + version: 7.25.9 + resolution: "@babel/plugin-transform-runtime@npm:7.25.9" dependencies: - "@babel/helper-module-imports": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" babel-plugin-polyfill-corejs2: "npm:^0.4.10" babel-plugin-polyfill-corejs3: "npm:^0.10.6" babel-plugin-polyfill-regenerator: "npm:^0.6.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/9b2514e9079361ac8e7e500ffd522dad869d61a3894302da7e29bbac80de00276c8a1b4394d1dcf0b51c57b2c854919928df9648be336139fdf1d6ecd6d1bb32 + checksum: 10c0/888a4998ba0a2313de347954c9a8dfeccbff0633c69d33aee385b8878eba2b429dbfb00c3cc04f6bca454b9be8afa01ebbd73defb7fbbb6e2d3086205c07758b languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.25.7" +"@babel/plugin-transform-shorthand-properties@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/4250f89a0072f0f400be7a2e3515227b8e2518737899bd57d497e5173284a0e05d812e4a3c219ffcd484e9fa9a01c19fce5acd77bbb898f4d594512c56701eb4 + checksum: 10c0/05a20d45f0fb62567644c507ccd4e379c1a74dacf887d2b2cac70247415e3f6d7d3bf4850c8b336053144715fedb6200fc38f7130c4b76c94eec9b9c0c2a8e9b languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-spread@npm:7.25.7" +"@babel/plugin-transform-spread@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-spread@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/258bd1b52388cd7425d0ae25fa39538734f7540ea503a1d8a72211d33f6f214cb4e3b73d6cd03016cbcff5d41169f1e578b9ea331965ad224d223591983e90a7 + checksum: 10c0/996c8fed238efc30e0664f9f58bd7ec8c148f4659f84425f68923a094fe891245711d26eb10d1f815f50c124434e076e860dbe9662240844d1b77cd09907dcdf languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.25.7" +"@babel/plugin-transform-sticky-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/0e466cfc3ca1e0db4bb11eb630215b0e1f43066d7678325e5ddadcf5a118b2351a528f67205729c32ac5b78ab68ab7f40517dd33bcb1fb6b456509f5f54ce097 + checksum: 10c0/e9612b0615dab4c4fba1c560769616a9bd7b9226c73191ef84b6c3ee185c8b719b4f887cdd8336a0a13400ce606ab4a0d33bc8fa6b4fcdb53e2896d07f2568f6 languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-template-literals@npm:7.25.7" +"@babel/plugin-transform-template-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-template-literals@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/a3455303b6841cb536ac66d1a2d03c194b9f371519482d8d1e8edbd33bf5ca7cdd5db1586b2b0ea5f909ebf74a0eafacf0fb28d257e4905445282dcdccfa6139 + checksum: 10c0/5144da6036807bbd4e9d2a8b92ae67a759543929f34f4db9b463448a77298f4a40bf1e92e582db208fe08ee116224806a3bd0bed75d9da404fc2c0af9e6da540 languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.25.7" +"@babel/plugin-transform-typeof-symbol@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/ce1a0744a900b05de1372a70508c4148f17eb941c482da26eb369b9f0347570dce45470c8a86d907bc3a0443190344da1e18489ecfecb30388ab6178e8a9916b + checksum: 10c0/2b19fd88608589d9bc6b607ff17b06791d35c67ef3249f4659283454e6a9984241e3bd4c4eb72bb8b3d860a73223f3874558b861adb7314aa317c1c6a2f0cafb languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-typescript@npm:7.25.7" +"@babel/plugin-transform-typescript@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-typescript@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-create-class-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" - "@babel/plugin-syntax-typescript": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + "@babel/plugin-syntax-typescript": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/5fa839b9560221698edff5e00b5cccc658c7875efaa7971c66d478f5b026770f12dd47b1be024463a44f9e29b4e14e8ddddbf4a2b324b0b94f58370dd5ae7195 + checksum: 10c0/c607ddb45f7e33cfcb928aad05cb1b18b1ecb564d2329d8f8e427f75192511aa821dee42d26871f1bdffbd883853e150ba81436664646c6e6b13063e65ce1475 languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.25.7" +"@babel/plugin-transform-unicode-escapes@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/8b1f71fda0a832c6e26ba4c00f99e9033e6f9b36ced542a512921f4ad861a70e2fec2bd54a91a5ca2efa46aaa8c8893e4c602635c4ef172bd3ed6eef3178c70b + checksum: 10c0/615c84d7c53e1575d54ba9257e753e0b98c5de1e3225237d92f55226eaab8eb5bceb74df43f50f4aa162b0bbcc934ed11feafe2b60b8ec4934ce340fad4b8828 languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.25.7" +"@babel/plugin-transform-unicode-property-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b4bfcf7529138d00671bf5cdfe606603d52cfe57ec1be837da57683f404fc0b0c171834a02515eb03379e5c806121866d097b90e31cb437d21d0ea59368ad82b + checksum: 10c0/1685836fc38af4344c3d2a9edbd46f7c7b28d369b63967d5b83f2f6849ec45b97223461cea3d14cc3f0be6ebb284938e637a5ca3955c0e79c873d62f593d615c languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.25.7" +"@babel/plugin-transform-unicode-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/73ae34c02ea8b7ac7e4efa690f8c226089c074e3fef658d2a630ad898a93550d84146ce05e073c271c8b2bbba61cbbfd5a2002a7ea940dcad3274e5b5dcb6bcf + checksum: 10c0/448004f978279e726af26acd54f63f9002c9e2582ecd70d1c5c4436f6de490fcd817afb60016d11c52f5ef17dbaac2590e8cc7bfaf4e91b58c452cf188c7920f languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.7" +"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/39e45ae3db7adfc3457b1d6ba5608ffbace957ad019785967e5357a6639f261765bda12363f655d39265f5a2834af26327037751420191d0b73152ccc7ce3c35 + checksum: 10c0/56ee04fbe236b77cbcd6035cbf0be7566d1386b8349154ac33244c25f61170c47153a9423cd1d92855f7d6447b53a4a653d9e8fd1eaeeee14feb4b2baf59bd9f languageName: node 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.25.7 - resolution: "@babel/preset-env@npm:7.25.7" + version: 7.26.0 + resolution: "@babel/preset-env@npm:7.26.0" dependencies: - "@babel/compat-data": "npm:^7.25.7" - "@babel/helper-compilation-targets": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-validator-option": "npm:^7.25.7" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.25.7" - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.25.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.25.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.25.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.7" + "@babel/compat-data": "npm:^7.26.0" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-validator-option": "npm:^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.9" "@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" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" - "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" - "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" - "@babel/plugin-syntax-import-assertions": "npm:^7.25.7" - "@babel/plugin-syntax-import-attributes": "npm:^7.25.7" - "@babel/plugin-syntax-import-meta": "npm:^7.10.4" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" - "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" + "@babel/plugin-syntax-import-assertions": "npm:^7.26.0" + "@babel/plugin-syntax-import-attributes": "npm:^7.26.0" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" - "@babel/plugin-transform-arrow-functions": "npm:^7.25.7" - "@babel/plugin-transform-async-generator-functions": "npm:^7.25.7" - "@babel/plugin-transform-async-to-generator": "npm:^7.25.7" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.25.7" - "@babel/plugin-transform-block-scoping": "npm:^7.25.7" - "@babel/plugin-transform-class-properties": "npm:^7.25.7" - "@babel/plugin-transform-class-static-block": "npm:^7.25.7" - "@babel/plugin-transform-classes": "npm:^7.25.7" - "@babel/plugin-transform-computed-properties": "npm:^7.25.7" - "@babel/plugin-transform-destructuring": "npm:^7.25.7" - "@babel/plugin-transform-dotall-regex": "npm:^7.25.7" - "@babel/plugin-transform-duplicate-keys": "npm:^7.25.7" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.7" - "@babel/plugin-transform-dynamic-import": "npm:^7.25.7" - "@babel/plugin-transform-exponentiation-operator": "npm:^7.25.7" - "@babel/plugin-transform-export-namespace-from": "npm:^7.25.7" - "@babel/plugin-transform-for-of": "npm:^7.25.7" - "@babel/plugin-transform-function-name": "npm:^7.25.7" - "@babel/plugin-transform-json-strings": "npm:^7.25.7" - "@babel/plugin-transform-literals": "npm:^7.25.7" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.7" - "@babel/plugin-transform-member-expression-literals": "npm:^7.25.7" - "@babel/plugin-transform-modules-amd": "npm:^7.25.7" - "@babel/plugin-transform-modules-commonjs": "npm:^7.25.7" - "@babel/plugin-transform-modules-systemjs": "npm:^7.25.7" - "@babel/plugin-transform-modules-umd": "npm:^7.25.7" - "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.25.7" - "@babel/plugin-transform-new-target": "npm:^7.25.7" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.25.7" - "@babel/plugin-transform-numeric-separator": "npm:^7.25.7" - "@babel/plugin-transform-object-rest-spread": "npm:^7.25.7" - "@babel/plugin-transform-object-super": "npm:^7.25.7" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.7" - "@babel/plugin-transform-optional-chaining": "npm:^7.25.7" - "@babel/plugin-transform-parameters": "npm:^7.25.7" - "@babel/plugin-transform-private-methods": "npm:^7.25.7" - "@babel/plugin-transform-private-property-in-object": "npm:^7.25.7" - "@babel/plugin-transform-property-literals": "npm:^7.25.7" - "@babel/plugin-transform-regenerator": "npm:^7.25.7" - "@babel/plugin-transform-reserved-words": "npm:^7.25.7" - "@babel/plugin-transform-shorthand-properties": "npm:^7.25.7" - "@babel/plugin-transform-spread": "npm:^7.25.7" - "@babel/plugin-transform-sticky-regex": "npm:^7.25.7" - "@babel/plugin-transform-template-literals": "npm:^7.25.7" - "@babel/plugin-transform-typeof-symbol": "npm:^7.25.7" - "@babel/plugin-transform-unicode-escapes": "npm:^7.25.7" - "@babel/plugin-transform-unicode-property-regex": "npm:^7.25.7" - "@babel/plugin-transform-unicode-regex": "npm:^7.25.7" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.7" + "@babel/plugin-transform-arrow-functions": "npm:^7.25.9" + "@babel/plugin-transform-async-generator-functions": "npm:^7.25.9" + "@babel/plugin-transform-async-to-generator": "npm:^7.25.9" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.25.9" + "@babel/plugin-transform-block-scoping": "npm:^7.25.9" + "@babel/plugin-transform-class-properties": "npm:^7.25.9" + "@babel/plugin-transform-class-static-block": "npm:^7.26.0" + "@babel/plugin-transform-classes": "npm:^7.25.9" + "@babel/plugin-transform-computed-properties": "npm:^7.25.9" + "@babel/plugin-transform-destructuring": "npm:^7.25.9" + "@babel/plugin-transform-dotall-regex": "npm:^7.25.9" + "@babel/plugin-transform-duplicate-keys": "npm:^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.9" + "@babel/plugin-transform-dynamic-import": "npm:^7.25.9" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.25.9" + "@babel/plugin-transform-export-namespace-from": "npm:^7.25.9" + "@babel/plugin-transform-for-of": "npm:^7.25.9" + "@babel/plugin-transform-function-name": "npm:^7.25.9" + "@babel/plugin-transform-json-strings": "npm:^7.25.9" + "@babel/plugin-transform-literals": "npm:^7.25.9" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.9" + "@babel/plugin-transform-member-expression-literals": "npm:^7.25.9" + "@babel/plugin-transform-modules-amd": "npm:^7.25.9" + "@babel/plugin-transform-modules-commonjs": "npm:^7.25.9" + "@babel/plugin-transform-modules-systemjs": "npm:^7.25.9" + "@babel/plugin-transform-modules-umd": "npm:^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.25.9" + "@babel/plugin-transform-new-target": "npm:^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.25.9" + "@babel/plugin-transform-numeric-separator": "npm:^7.25.9" + "@babel/plugin-transform-object-rest-spread": "npm:^7.25.9" + "@babel/plugin-transform-object-super": "npm:^7.25.9" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.9" + "@babel/plugin-transform-optional-chaining": "npm:^7.25.9" + "@babel/plugin-transform-parameters": "npm:^7.25.9" + "@babel/plugin-transform-private-methods": "npm:^7.25.9" + "@babel/plugin-transform-private-property-in-object": "npm:^7.25.9" + "@babel/plugin-transform-property-literals": "npm:^7.25.9" + "@babel/plugin-transform-regenerator": "npm:^7.25.9" + "@babel/plugin-transform-regexp-modifiers": "npm:^7.26.0" + "@babel/plugin-transform-reserved-words": "npm:^7.25.9" + "@babel/plugin-transform-shorthand-properties": "npm:^7.25.9" + "@babel/plugin-transform-spread": "npm:^7.25.9" + "@babel/plugin-transform-sticky-regex": "npm:^7.25.9" + "@babel/plugin-transform-template-literals": "npm:^7.25.9" + "@babel/plugin-transform-typeof-symbol": "npm:^7.25.9" + "@babel/plugin-transform-unicode-escapes": "npm:^7.25.9" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.25.9" + "@babel/plugin-transform-unicode-regex": "npm:^7.25.9" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.9" "@babel/preset-modules": "npm:0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2: "npm:^0.4.10" babel-plugin-polyfill-corejs3: "npm:^0.10.6" @@ -1423,7 +1354,7 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/bf704a06a69420250c1de2b126cd5c859a851002c2fb2cce0910cd85a8e6755b9b31577021e94feb7e1e53519923726349aaf07580923928791583db61438fb8 + checksum: 10c0/26e19dc407cfa1c5166be638b4c54239d084fe15d8d7e6306d8c6dc7bc1decc51070a8dcf28352c1a2feeefbe52a06d193a12e302327ad5f529583df75fb7a26 languageName: node linkType: hard @@ -1441,33 +1372,33 @@ __metadata: linkType: hard "@babel/preset-react@npm:^7.12.5, @babel/preset-react@npm:^7.22.3": - version: 7.25.7 - resolution: "@babel/preset-react@npm:7.25.7" + version: 7.25.9 + resolution: "@babel/preset-react@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-validator-option": "npm:^7.25.7" - "@babel/plugin-transform-react-display-name": "npm:^7.25.7" - "@babel/plugin-transform-react-jsx": "npm:^7.25.7" - "@babel/plugin-transform-react-jsx-development": "npm:^7.25.7" - "@babel/plugin-transform-react-pure-annotations": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-validator-option": "npm:^7.25.9" + "@babel/plugin-transform-react-display-name": "npm:^7.25.9" + "@babel/plugin-transform-react-jsx": "npm:^7.25.9" + "@babel/plugin-transform-react-jsx-development": "npm:^7.25.9" + "@babel/plugin-transform-react-pure-annotations": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b133b1a2f46c70a337d8b1ef442e09e3dbdaecb0d6bed8f1cb64dfddc31c16e248b017385ab909caeebd8462111c9c0e1c5409deb10f2be5cb5bcfdaa4d27718 + checksum: 10c0/c294b475ee741f01f63ea0d828862811c453fabc6023f01814ce983bc316388e9d73290164d2b1384c2684db9c330803a3d4d2170285b105dcbacd483329eb93 languageName: node linkType: hard "@babel/preset-typescript@npm:^7.21.5": - version: 7.25.7 - resolution: "@babel/preset-typescript@npm:7.25.7" + version: 7.26.0 + resolution: "@babel/preset-typescript@npm:7.26.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-validator-option": "npm:^7.25.7" - "@babel/plugin-syntax-jsx": "npm:^7.25.7" - "@babel/plugin-transform-modules-commonjs": "npm:^7.25.7" - "@babel/plugin-transform-typescript": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-validator-option": "npm:^7.25.9" + "@babel/plugin-syntax-jsx": "npm:^7.25.9" + "@babel/plugin-transform-modules-commonjs": "npm:^7.25.9" + "@babel/plugin-transform-typescript": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/8dc1258e3c5230bbe42ff9811f08924509238e6bd32fa0b7b0c0a6c5e1419512a8e1f733e1b114454d367b7c164beca2cf33acf2ed9e0d99be010c1c5cdbef0c + checksum: 10c0/20d86bc45d2bbfde2f84fc7d7b38746fa6481d4bde6643039ad4b1ff0b804c6d210ee43e6830effd8571f2ff43fa7ffd27369f42f2b3a2518bb92dc86c780c61 languageName: node linkType: hard @@ -1481,48 +1412,47 @@ __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.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.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.25.7 - resolution: "@babel/runtime@npm:7.25.7" + version: 7.26.0 + resolution: "@babel/runtime@npm:7.26.0" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/86b7829d2fc9343714a9afe92757cf96c4dc799006ca61d73cda62f4b9e29bfa1ce36794955bc6cb4c188f5b10db832c949339895e1bbe81a69022d9d578ce29 + checksum: 10c0/12c01357e0345f89f4f7e8c0e81921f2a3e3e101f06e8eaa18a382b517376520cd2fa8c237726eb094dab25532855df28a7baaf1c26342b52782f6936b07c287 languageName: node linkType: hard -"@babel/template@npm:^7.25.7, @babel/template@npm:^7.3.3": - version: 7.25.7 - resolution: "@babel/template@npm:7.25.7" +"@babel/template@npm:^7.25.9, @babel/template@npm:^7.3.3": + version: 7.25.9 + resolution: "@babel/template@npm:7.25.9" dependencies: - "@babel/code-frame": "npm:^7.25.7" - "@babel/parser": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/8ae9e36e4330ee83d4832531d1d9bec7dc2ef6a2a8afa1ef1229506fd60667abcb17f306d1c3d7e582251270597022990c845d5d69e7add70a5aea66720decb9 + "@babel/code-frame": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab languageName: node linkType: hard -"@babel/traverse@npm:7, @babel/traverse@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/traverse@npm:7.25.7" +"@babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/traverse@npm:7.25.9" dependencies: - "@babel/code-frame": "npm:^7.25.7" - "@babel/generator": "npm:^7.25.7" - "@babel/parser": "npm:^7.25.7" - "@babel/template": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" + "@babel/code-frame": "npm:^7.25.9" + "@babel/generator": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10c0/75d73e52c507a7a7a4c7971d6bf4f8f26fdd094e0d3a0193d77edf6a5efa36fc3db91ec5cc48e8b94e6eb5d5ad21af0a1040e71309172851209415fd105efb1a + checksum: 10c0/e90be586a714da4adb80e6cb6a3c5cfcaa9b28148abdafb065e34cc109676fc3db22cf98cd2b2fff66ffb9b50c0ef882cab0f466b6844be0f6c637b82719bba1 languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": - version: 7.25.7 - resolution: "@babel/types@npm:7.25.7" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": + version: 7.26.0 + resolution: "@babel/types@npm:7.26.0" dependencies: - "@babel/helper-string-parser": "npm:^7.25.7" - "@babel/helper-validator-identifier": "npm:^7.25.7" - to-fast-properties: "npm:^2.0.0" - checksum: 10c0/e03e1e2e08600fa1e8eb90632ac9c253dd748176c8d670d85f85b0dc83a0573b26ae748a1cbcb81f401903a3d95f43c3f4f8d516a5ed779929db27de56289633 + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10c0/b694f41ad1597127e16024d766c33a641508aad037abd08d0d1f73af753e1119fa03b4a107d04b5f92cc19c095a594660547ae9bead1db2299212d644b0a5cb8 languageName: node linkType: hard @@ -1533,13 +1463,13 @@ __metadata: languageName: node linkType: hard -"@csstools/cascade-layer-name-parser@npm:^2.0.2": - version: 2.0.2 - resolution: "@csstools/cascade-layer-name-parser@npm:2.0.2" +"@csstools/cascade-layer-name-parser@npm:^2.0.4": + version: 2.0.4 + resolution: "@csstools/cascade-layer-name-parser@npm:2.0.4" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.2 - "@csstools/css-tokenizer": ^3.0.2 - checksum: 10c0/2cc840445328400bb3e1e4186e6081e6519a23d9abde36a16c95892b6ad75155b3af3410d79fdda1c53a068384f970cabff4b5f5ba6867578168cbd3419016c8 + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/774f2bcc96a576183853191bdfd31df15e22c51901ee01678ee47f1d1afcb4ab0e6d9a78e08f7383ac089c7e0b390013633f45ff1f1d577c9aefd252589bcced languageName: node linkType: hard @@ -1550,42 +1480,42 @@ __metadata: languageName: node linkType: hard -"@csstools/css-calc@npm:^2.0.2": - version: 2.0.2 - resolution: "@csstools/css-calc@npm:2.0.2" +"@csstools/css-calc@npm:^2.1.0": + version: 2.1.0 + resolution: "@csstools/css-calc@npm:2.1.0" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.2 - "@csstools/css-tokenizer": ^3.0.2 - checksum: 10c0/b36e655b4abc8ea39b300725e33cd43b1875d759dd60bee8155bf7841065615a7f24cf53199382e30aa10bb137f64021043e4af7e11b7199b674a6e6cf3ccd01 + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/c707bb533a6ea63ed5bb4b8f1ffcbf3cd2daf970a6d76d42b684243426f5aa7513179a8f34d2e3c5a85df3870f44d3bc2850ca40b085c5fe00b41a291a2ecae2 languageName: node linkType: hard -"@csstools/css-color-parser@npm:^3.0.3": - version: 3.0.3 - resolution: "@csstools/css-color-parser@npm:3.0.3" +"@csstools/css-color-parser@npm:^3.0.6": + version: 3.0.6 + resolution: "@csstools/css-color-parser@npm:3.0.6" dependencies: "@csstools/color-helpers": "npm:^5.0.1" - "@csstools/css-calc": "npm:^2.0.2" + "@csstools/css-calc": "npm:^2.1.0" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.2 - "@csstools/css-tokenizer": ^3.0.2 - checksum: 10c0/02367ffc222254132c47f9cbc856f65fe0b81ee4a5e7381251b95c4064138b5ed99a5e5a79c0c8689f9e75e3d900f94773258a161a97f467c3f0420838c10e04 + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/7c4f42a704c8c44cece75f5dcd647a83634dec0f44d398ae1fbdc6e8527d4fbdc3a809eaaba3b739edf8e3c09d62c28234636f250f9b0b0d52a599e824c22047 languageName: node linkType: hard -"@csstools/css-parser-algorithms@npm:^3.0.1, @csstools/css-parser-algorithms@npm:^3.0.2": - version: 3.0.2 - resolution: "@csstools/css-parser-algorithms@npm:3.0.2" +"@csstools/css-parser-algorithms@npm:^3.0.1, @csstools/css-parser-algorithms@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/css-parser-algorithms@npm:3.0.4" peerDependencies: - "@csstools/css-tokenizer": ^3.0.2 - checksum: 10c0/246afbf518ee9eaa24ed7f083360eb66884f1172fd4f8c663bff8c6099de2a8abd1e2a31d5b6fe42e010277d238469d780cff62bc7fdc6a52e7a90626b8924dc + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/d411f07765e14eede17bccc6bd4f90ff303694df09aabfede3fd104b2dfacfd4fe3697cd25ddad14684c850328f3f9420ebfa9f78380892492974db24ae47dbd languageName: node linkType: hard -"@csstools/css-tokenizer@npm:^3.0.1, @csstools/css-tokenizer@npm:^3.0.2": - version: 3.0.2 - resolution: "@csstools/css-tokenizer@npm:3.0.2" - checksum: 10c0/a74e5829420ed35982fd33be272c2a19cb2380179d357abe750aa848be6d6699d0437008f47a57eb7c6ff64a34b0c8f91a97dd63dbddd08249b7cf7983767e5e +"@csstools/css-tokenizer@npm:^3.0.1, @csstools/css-tokenizer@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/css-tokenizer@npm:3.0.3" + checksum: 10c0/c31bf410e1244b942e71798e37c54639d040cb59e0121b21712b40015fced2b0fb1ffe588434c5f8923c9cd0017cfc1c1c8f3921abc94c96edf471aac2eba5e5 languageName: node linkType: hard @@ -1599,82 +1529,82 @@ __metadata: languageName: node linkType: hard -"@csstools/media-query-list-parser@npm:^4.0.0": - version: 4.0.0 - resolution: "@csstools/media-query-list-parser@npm:4.0.0" +"@csstools/media-query-list-parser@npm:^4.0.2": + version: 4.0.2 + resolution: "@csstools/media-query-list-parser@npm:4.0.2" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.2 - "@csstools/css-tokenizer": ^3.0.2 - checksum: 10c0/416417bcfd84c18a2df8dc77f31c87830e151dc20530fe7f0d8f13a0848b1a9090858abdf7792d82bf2edb41ddedb7b57b34eb78b68b5c10755ae02c019e496a + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/5d008a70f5d4fd96224066a433f5cdefa76cfd78a74416a20d6d5b2bb1bc8282b140e8373015d807d4dadb91daf3deb73eb13f853ec4e0479d0cb92e80c6f20d languageName: node linkType: hard -"@csstools/postcss-cascade-layers@npm:^5.0.0": - version: 5.0.0 - resolution: "@csstools/postcss-cascade-layers@npm:5.0.0" +"@csstools/postcss-cascade-layers@npm:^5.0.1": + version: 5.0.1 + resolution: "@csstools/postcss-cascade-layers@npm:5.0.1" dependencies: - "@csstools/selector-specificity": "npm:^4.0.0" - postcss-selector-parser: "npm:^6.1.0" + "@csstools/selector-specificity": "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/b608c69c12671682676598e451dcd79bfc6f5030a4e17b4d1bf9659e531f1daf03526be023f9aafdc952ecc87c87b04f379a763309e3eadb2140572cd4aa5b60 + checksum: 10c0/5cc3c6f220d9216f7ab16e716a20d6db845f127c917521e6236342bfa871accd63eb662a04c1e24a28e396412dcb47b1c4abccc490b88e4010cd704d14a702f1 languageName: node linkType: hard -"@csstools/postcss-color-function@npm:^4.0.3": - version: 4.0.3 - resolution: "@csstools/postcss-color-function@npm:4.0.3" +"@csstools/postcss-color-function@npm:^4.0.6": + version: 4.0.6 + resolution: "@csstools/postcss-color-function@npm:4.0.6" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.6" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/c994660ca0e2652755d9ad181c8cb46a07220c972086c97c843fa9bacf690be10c642770f898aeec4acc47c2b718dfc7372107285a678361f34d84d9e9c11e0c + checksum: 10c0/facbae01fd58898a176219cfcffee9ffb06fb466a2c439fd28403819e48778b682621b86a69682c0f758c659f8ec5f14eca1a9612b12b8777a2198173f386b49 languageName: node linkType: hard -"@csstools/postcss-color-mix-function@npm:^3.0.3": - version: 3.0.3 - resolution: "@csstools/postcss-color-mix-function@npm:3.0.3" +"@csstools/postcss-color-mix-function@npm:^3.0.6": + version: 3.0.6 + resolution: "@csstools/postcss-color-mix-function@npm:3.0.6" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.6" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/4ba358eb9030fc485bfe2922d897eeb712725762cc399eaba60ba665c84dc3e56a4d5a52dfb320093c0b217d32fedb9b5197fa45738cade53d9afcbefdadf04f + checksum: 10c0/66b906b2425ed137b1c2ef3d166036719ae69039668385dccce4e02bd91e41733b37dd3c884b74a2999067bfe8a8d8d1afa4082ef21a0bf044ba7e7fffb77e01 languageName: node linkType: hard -"@csstools/postcss-content-alt-text@npm:^2.0.2": - version: 2.0.2 - resolution: "@csstools/postcss-content-alt-text@npm:2.0.2" +"@csstools/postcss-content-alt-text@npm:^2.0.4": + version: 2.0.4 + resolution: "@csstools/postcss-content-alt-text@npm:2.0.4" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/e52d40f6567b9b23b32a6c40f9b2a74d57f99a9921b4cae015f51f72453474236c760bb13120682f8815698a615e0ad7bed22314c29dca89c34b5480d83a7a6d + checksum: 10c0/84caccedd8a519df434babd58b14104c5a92cd326057ce509bdbaa2a4bb3130afb1c1456caf30235ba14da52d1628a5411ea4f5d2fb558d603d234f795538017 languageName: node linkType: hard -"@csstools/postcss-exponential-functions@npm:^2.0.2": - version: 2.0.2 - resolution: "@csstools/postcss-exponential-functions@npm:2.0.2" +"@csstools/postcss-exponential-functions@npm:^2.0.5": + version: 2.0.5 + resolution: "@csstools/postcss-exponential-functions@npm:2.0.5" dependencies: - "@csstools/css-calc": "npm:^2.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-calc": "npm:^2.1.0" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" peerDependencies: postcss: ^8.4 - checksum: 10c0/034ff89089872f63a6b00bda670c5ff11361babd221ed3e441dde969a718059e5d44ab0ed331868f137bb205331b808ecbcc4cb641d5c945238ebca28aa3ed59 + checksum: 10c0/8935cb69f70d7448aa5a3dcdfd188bdcfbc34e9a99131306947df8847126272773212011dcff85e10bcee4c9d01f94f7f8557ef93933122a0b82743185684ab1 languageName: node linkType: hard @@ -1690,46 +1620,46 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-gamut-mapping@npm:^2.0.3": - version: 2.0.3 - resolution: "@csstools/postcss-gamut-mapping@npm:2.0.3" +"@csstools/postcss-gamut-mapping@npm:^2.0.6": + version: 2.0.6 + resolution: "@csstools/postcss-gamut-mapping@npm:2.0.6" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.6" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" peerDependencies: postcss: ^8.4 - checksum: 10c0/21f5708f63e9c3b7603f8b72b5f288e0a021e9710a6abf4aaa713ff4d04bae057d1861e1f28d7670ea39ba463ac04f1507876d4a11178934e7cc7a1c6a780084 + checksum: 10c0/8a3f012774ab261924cc9f3519caa87a25a6abcd70d78f622144d8e7126a687bddbdaa92995fc30f53355759cd5971e71ac099b6b8cb85c89d8ca86455588e3b languageName: node linkType: hard -"@csstools/postcss-gradients-interpolation-method@npm:^5.0.3": - version: 5.0.3 - resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.3" +"@csstools/postcss-gradients-interpolation-method@npm:^5.0.6": + version: 5.0.6 + resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.6" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.6" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/062d27148438309c940a1973bfc7d42a06caa9397bf2382c7a61979f5be3d6f3fae1bc8ddf94d2dd8e6c807e0530a9e76179510266aaddc439677bf79447a765 + checksum: 10c0/0d97be76837f972ea323b58189ded2310b618ad94b40777464d0d8ac050b557ca9fd1f20af5ada105d61574cc9d8c119ae0daf294a3aacaaa89926f864d9d674 languageName: node linkType: hard -"@csstools/postcss-hwb-function@npm:^4.0.3": - version: 4.0.3 - resolution: "@csstools/postcss-hwb-function@npm:4.0.3" +"@csstools/postcss-hwb-function@npm:^4.0.6": + version: 4.0.6 + resolution: "@csstools/postcss-hwb-function@npm:4.0.6" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.6" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/faf2bfbafeec765391e37c7a5cbc7b4647d9ab1ffa51e922c7dfffa545c3d436d15604dfdfb9d7684e760042e62bb42e0243dd4ebd8c3c14694a9f7be4e57b30 + checksum: 10c0/e7bcc98095ef2873a7b1a7326f1618bbeecc1c78660b23805bbefd8ec067bf2f35f2a2d4675be51a02d2280046f36f74d55f6af78e3ce107b82624d1a421ffcf languageName: node linkType: hard @@ -1755,29 +1685,29 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-is-pseudo-class@npm:^5.0.0": - version: 5.0.0 - resolution: "@csstools/postcss-is-pseudo-class@npm:5.0.0" +"@csstools/postcss-is-pseudo-class@npm:^5.0.1": + version: 5.0.1 + resolution: "@csstools/postcss-is-pseudo-class@npm:5.0.1" dependencies: - "@csstools/selector-specificity": "npm:^4.0.0" - postcss-selector-parser: "npm:^6.1.0" + "@csstools/selector-specificity": "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/738eb84728b24bfe19ca06ccf6ff773a423552df2f31c87704ce79da4abfd2ccf2a45d5d6d3e11e71e42cc3d92eb35a856209b9cd6116c879acf15ac75454683 + checksum: 10c0/3aaab18ebb2dcf5565efa79813eaa987d40de1e086765358524392a09631c68ad1ee952e6aff8f42513b2c18ab84891787e065fe287f696128498fc641520b6c languageName: node linkType: hard -"@csstools/postcss-light-dark-function@npm:^2.0.5": - version: 2.0.5 - resolution: "@csstools/postcss-light-dark-function@npm:2.0.5" +"@csstools/postcss-light-dark-function@npm:^2.0.7": + version: 2.0.7 + resolution: "@csstools/postcss-light-dark-function@npm:2.0.7" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/80635ee312d2a8f42aa5ce6792f1dc4a71199c384c66a3270d37e998d96db55beaa6836d689cda3b7e4828227960582fae04659ba5e4e0f64fd4543cbf15c6ab + checksum: 10c0/c116bfd2d3f4d0caabdedf8954c2a25908ffb29f9bbe2c57d44a2974277c7e46ee79862eea848385dc040275d343f2330350394a2095ec30f0aa17f72e2f4e39 languageName: node linkType: hard @@ -1819,42 +1749,42 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-logical-viewport-units@npm:^3.0.2": - version: 3.0.2 - resolution: "@csstools/postcss-logical-viewport-units@npm:3.0.2" +"@csstools/postcss-logical-viewport-units@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/postcss-logical-viewport-units@npm:3.0.3" dependencies: - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/31f525e774bc053f545a159eb53bb21465ea2930118e87c40207ad90fa97d3151e6de83efd02f84803fb0e93ed4a4b42a3904b734423410e73ac4c6ce9666ab4 + checksum: 10c0/8ec746598d7ce8697c3dafd83cb3a319a90079ad755dd78e3ec92f4ba9ad849c4cdaba33b16e9dcbac1e9489b3d7c48262030110c20ce1d88cdacbe9f5987cec languageName: node linkType: hard -"@csstools/postcss-media-minmax@npm:^2.0.2": - version: 2.0.2 - resolution: "@csstools/postcss-media-minmax@npm:2.0.2" +"@csstools/postcss-media-minmax@npm:^2.0.5": + version: 2.0.5 + resolution: "@csstools/postcss-media-minmax@npm:2.0.5" dependencies: - "@csstools/css-calc": "npm:^2.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" - "@csstools/media-query-list-parser": "npm:^4.0.0" + "@csstools/css-calc": "npm:^2.1.0" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/media-query-list-parser": "npm:^4.0.2" peerDependencies: postcss: ^8.4 - checksum: 10c0/83cf10742884fca3baa7ae26e2cb34123ce5a022622390566c139b4587ea8583fab00acbb85545786b36398e2201d2a94301e0fae805e55f375f1b5c38f67ce8 + checksum: 10c0/0d17782076fcaba2c3c85bd769fc102d95809e9ee6141ad9de706ee116466cada62424fd68623c58cc2456771725291c356e550377ba73a102ab6fe628931e30 languageName: node linkType: hard -"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^3.0.2": - version: 3.0.2 - resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:3.0.2" +"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:3.0.4" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" - "@csstools/media-query-list-parser": "npm:^4.0.0" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/media-query-list-parser": "npm:^4.0.2" peerDependencies: postcss: ^8.4 - checksum: 10c0/3ac4073d2e958bfb24ae45f673070dd805f0fcf07bc8d00a9a98f596d1096e7be282c8d8e87df3abde90f33fcbe2c7705e972b8c1a58e43ec44729f470b76096 + checksum: 10c0/27dc9419b0f4315774647588f599348e7cc593984f59b414c51c910066501fd087cbe232deb762907c18bd21dd4184e7b6e0e0b730e5c72341ab9cc696c75739 languageName: node linkType: hard @@ -1881,18 +1811,18 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-oklab-function@npm:^4.0.3": - version: 4.0.3 - resolution: "@csstools/postcss-oklab-function@npm:4.0.3" +"@csstools/postcss-oklab-function@npm:^4.0.6": + version: 4.0.6 + resolution: "@csstools/postcss-oklab-function@npm:4.0.6" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.6" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/650bcb4f664308972588a8f789f806d63c4069e2e008cfc3b5c80bf9df992c62972dce279b8f434c7f78823e97095942ee4f0e37bc549258887213e72acb7ef8 + checksum: 10c0/74ec74eb7171881deeff7a79e0dc696097fb53dcdcd9627d9559cd7be63f41adecec06c1e88ddd5d8a37f4705715d1c0c135ca2b001fb70fdc0b76ab1e491b66 languageName: node linkType: hard @@ -1907,42 +1837,68 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-relative-color-syntax@npm:^3.0.3": - version: 3.0.3 - resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.3" +"@csstools/postcss-random-function@npm:^1.0.0": + version: 1.0.1 + resolution: "@csstools/postcss-random-function@npm:1.0.1" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-calc": "npm:^2.1.0" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/5e8f29c024aa6ed1f89ee8b9c8ece39c8e72602d63faa82d9684e3183828f01971cf2f760b7d5b773605d44a4ea661d6d4389ec03f7e21002f9aa9e8db613a61 + languageName: node + linkType: hard + +"@csstools/postcss-relative-color-syntax@npm:^3.0.6": + version: 3.0.6 + resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.6" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.6" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/c241fe6b725d775f6d2085be1dff3868d189b176fa91ab1eb1133e30e30c8151bded4e50d17a845edd0bdd0a7adf9e8883cb2634fea3394872591fe9ad2a7e86 + checksum: 10c0/207ae711831f8ae9170093dbea3727cd6f32ca31d22c1231b5b678592679eb49e329e87ea403714b8e10feb5b9137780364cc7e1e7d8cc4c90d47483a42132dc languageName: node linkType: hard -"@csstools/postcss-scope-pseudo-class@npm:^4.0.0": - version: 4.0.0 - resolution: "@csstools/postcss-scope-pseudo-class@npm:4.0.0" +"@csstools/postcss-scope-pseudo-class@npm:^4.0.1": + version: 4.0.1 + resolution: "@csstools/postcss-scope-pseudo-class@npm:4.0.1" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/a6f562df1417c6f257c0fec95babf4cea99a25622573a2dbcfb416e2fcb8e1e53561127f5e7277d19fcb2a4603bdbc64dd6a4c416429623503c604050c99229a + checksum: 10c0/6a0ca50fae655f4498200d1ce298ca794c85fbe2e3fd5d6419843254f055df5007a973e09b5f1e78e376c02b54278e411516c8d824300c68b265d3e5b311d7ee languageName: node linkType: hard -"@csstools/postcss-stepped-value-functions@npm:^4.0.2": - version: 4.0.2 - resolution: "@csstools/postcss-stepped-value-functions@npm:4.0.2" +"@csstools/postcss-sign-functions@npm:^1.0.0": + version: 1.0.0 + resolution: "@csstools/postcss-sign-functions@npm:1.0.0" dependencies: - "@csstools/css-calc": "npm:^2.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-calc": "npm:^2.1.0" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" peerDependencies: postcss: ^8.4 - checksum: 10c0/444a27d725bc7a8e1554469e8ac69e248ff525b728fbe058523b0f1aefcff80ca707f543d21fead0a22d51603b1669190fb01f0f2dcd599a01768a37e0d62bc3 + checksum: 10c0/ec745b2f1e714ffead43ade5964234dfc1750c3a71d2e29df862ab3f79ba4a1275187b270b4c226bbb1155bee8e9e63c35597b4f4cb3effaa632e5e07e422344 + languageName: node + linkType: hard + +"@csstools/postcss-stepped-value-functions@npm:^4.0.5": + version: 4.0.5 + resolution: "@csstools/postcss-stepped-value-functions@npm:4.0.5" + dependencies: + "@csstools/css-calc": "npm:^2.1.0" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/76f1f60c24b9e6a80b044eb19f37c1816788a2335fbf7c25f3fbea1cd7104857f424a451dcff60e4f8841618c6b6ffa6091f8b840d6d5930c1c7100c2f8ae74b languageName: node linkType: hard @@ -1958,16 +1914,16 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-trigonometric-functions@npm:^4.0.2": - version: 4.0.2 - resolution: "@csstools/postcss-trigonometric-functions@npm:4.0.2" +"@csstools/postcss-trigonometric-functions@npm:^4.0.5": + version: 4.0.5 + resolution: "@csstools/postcss-trigonometric-functions@npm:4.0.5" dependencies: - "@csstools/css-calc": "npm:^2.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-calc": "npm:^2.1.0" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" peerDependencies: postcss: ^8.4 - checksum: 10c0/eaecb2ea891162e4fcbbccf4f660c99e9e59f21937b70fe6aec3b51441eff2a12c1a2dc13fff426722629a7929919fd866311eaa68d74ee9d1f5387a23502fe2 + checksum: 10c0/b8518c8b81da047448dcee12a5f3716dbc19671333387a4a673991a16f1a120441d2768de8a30ce1e2ef8d0d76509b9509f506ef1e8630da84834451414b23a3 languageName: node linkType: hard @@ -1980,12 +1936,12 @@ __metadata: languageName: node linkType: hard -"@csstools/selector-resolve-nested@npm:^2.0.0": - version: 2.0.0 - resolution: "@csstools/selector-resolve-nested@npm:2.0.0" +"@csstools/selector-resolve-nested@npm:^3.0.0": + version: 3.0.0 + resolution: "@csstools/selector-resolve-nested@npm:3.0.0" peerDependencies: - postcss-selector-parser: ^6.1.0 - checksum: 10c0/10516fd1db5e0a3963063caa57d24eeb1d1f69fcb63f0b5aec5d7a44f8b36ff07b1eded3012e8a9b92fc1f484e1a5a9def0cf57d788aa7f944ee79877837cc77 + postcss-selector-parser: ^7.0.0 + checksum: 10c0/2b01c36b3fa81388d5bddd8db962766465d76b021a815c8bb5a48c3a42c530154cc155fc496707ade627dbba6745eb8ecd9fa840c1972133c0f7d8811e0a959d languageName: node linkType: hard @@ -1998,6 +1954,15 @@ __metadata: languageName: node linkType: hard +"@csstools/selector-specificity@npm:^5.0.0": + version: 5.0.0 + resolution: "@csstools/selector-specificity@npm:5.0.0" + peerDependencies: + postcss-selector-parser: ^7.0.0 + checksum: 10c0/186b444cabcdcdeb553bfe021f80c58bfe9ef38dcc444f2b1f34a5aab9be063ab4e753022b2d5792049c041c28cfbb78e4b707ec398459300e402030d35c07eb + languageName: node + linkType: hard + "@csstools/utilities@npm:^2.0.0": version: 2.0.0 resolution: "@csstools/utilities@npm:2.0.0" @@ -2187,14 +2152,14 @@ __metadata: languageName: node linkType: hard -"@es-joy/jsdoccomment@npm:~0.48.0": - version: 0.48.0 - resolution: "@es-joy/jsdoccomment@npm:0.48.0" +"@es-joy/jsdoccomment@npm:~0.49.0": + version: 0.49.0 + resolution: "@es-joy/jsdoccomment@npm:0.49.0" dependencies: comment-parser: "npm:1.4.1" esquery: "npm:^1.6.0" jsdoc-type-pratt-parser: "npm:~4.1.0" - checksum: 10c0/8d87c7c0426fade009c30ab429d4ede53fd253d40b55079c02bdacdaa4c0fe904aaea5e3084cd98052f2bed6b3030c381d84f4a3251b343a71fee6f681a08bee + checksum: 10c0/16717507d557d37e7b59456fedeefbe0a3bc93aa2d9c043d5db91e24e076509b6fcb10ee6fd1dafcb0c5bbe50ae329b45de5b83541cb5994a98c9e862a45641e languageName: node linkType: hard @@ -2233,10 +2198,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.57.0": - version: 8.57.0 - resolution: "@eslint/js@npm:8.57.0" - checksum: 10c0/9a518bb8625ba3350613903a6d8c622352ab0c6557a59fe6ff6178bf882bf57123f9d92aa826ee8ac3ee74b9c6203fe630e9ee00efb03d753962dcf65ee4bd94 +"@eslint/js@npm:8.57.1": + version: 8.57.1 + resolution: "@eslint/js@npm:8.57.1" + checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 languageName: node linkType: hard @@ -2267,8 +2232,8 @@ __metadata: linkType: hard "@formatjs/cli@npm:^6.1.1": - version: 6.2.15 - resolution: "@formatjs/cli@npm:6.2.15" + version: 6.3.8 + resolution: "@formatjs/cli@npm:6.3.8" peerDependencies: "@glimmer/env": ^0.1.7 "@glimmer/reference": ^0.91.1 || ^0.92.0 @@ -2297,129 +2262,200 @@ __metadata: optional: true bin: formatjs: bin/formatjs - checksum: 10c0/e947aa7f3994251392fe15673752a8d8e3c8a30733bb49de5e617d45a327a3e1d16419e2d6b01f7ef2cbe86e2946024342d5b3301e6a8f17de3de9e2e7aedb29 + checksum: 10c0/61fb0e56a2da26befad5ca6ff5a8bcf9c383d22634cf288f3cab5661bece7686e6f064adaa500954b37726a7745c73134b459d115d52c931b76d68d998c7b22d languageName: node linkType: hard -"@formatjs/ecma402-abstract@npm:2.0.0": - version: 2.0.0 - resolution: "@formatjs/ecma402-abstract@npm:2.0.0" - dependencies: - "@formatjs/intl-localematcher": "npm:0.5.4" - tslib: "npm:^2.4.0" - checksum: 10c0/94cba291aeadffa3ca416087c2c2352c8a741bb4dcb7f47f15c247b1f043ffcef1af5b20a1b7578fbba9e704fc5f1c079923f3537a273d50162be62f8037625c - languageName: node - linkType: hard - -"@formatjs/fast-memoize@npm:2.2.0": +"@formatjs/ecma402-abstract@npm:2.2.0": version: 2.2.0 - resolution: "@formatjs/fast-memoize@npm:2.2.0" + resolution: "@formatjs/ecma402-abstract@npm:2.2.0" dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/ae88c5a93b96235aba4bd9b947d0310d2ec013687a99133413361b24122b5cdea8c9bf2e04a4a2a8b61f1f4ee5419ef6416ca4796554226b5050e05a9ce6ef49 + "@formatjs/fast-memoize": "npm:2.2.1" + "@formatjs/intl-localematcher": "npm:0.5.5" + tslib: "npm:^2.7.0" + checksum: 10c0/3f8e5c1680ab3babf44a6324ae36d6355674562df61e0f0ce3bcec35c3b31d77f9c3b28596af79a9f52641aee834a11673dc4cf30093bbf27c4a96e18c8cc74b languageName: node linkType: hard -"@formatjs/icu-messageformat-parser@npm:2.7.8": - version: 2.7.8 - resolution: "@formatjs/icu-messageformat-parser@npm:2.7.8" +"@formatjs/ecma402-abstract@npm:2.2.3": + version: 2.2.3 + resolution: "@formatjs/ecma402-abstract@npm:2.2.3" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/icu-skeleton-parser": "npm:1.8.2" - tslib: "npm:^2.4.0" - checksum: 10c0/a3b759a825fb22ffd7b906f6a07b1a079bbc34f72c745de2c2514e439c4bb75bc1a9442eba1bac7ff3ea3010e12076374cd755ad12116b1d066cc90da5fbcbc9 + "@formatjs/fast-memoize": "npm:2.2.3" + "@formatjs/intl-localematcher": "npm:0.5.7" + tslib: "npm:2" + checksum: 10c0/611d12bf320fc5c5b85cb2b57e3dcebe8490a51c6a0459c857c7a3560656cd2bdba5b117e9dd7cf174f5aa120c11eaad7a65a6783637b816caa59a1bc5c727f6 languageName: node linkType: hard -"@formatjs/icu-skeleton-parser@npm:1.8.2": - version: 1.8.2 - resolution: "@formatjs/icu-skeleton-parser@npm:1.8.2" +"@formatjs/fast-memoize@npm:2.2.1": + version: 2.2.1 + resolution: "@formatjs/fast-memoize@npm:2.2.1" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - tslib: "npm:^2.4.0" - checksum: 10c0/9b15013acc47b8d560b52942e3dab2abaaa9c5a4410bbd1d490a4b22bf5ca36fdd88b71f241d05479bddf856d0d1d57b7ecc9e79738497ac518616aa6d4d0015 + tslib: "npm:^2.7.0" + checksum: 10c0/cb8cbf1aba907d395d1fe405f67a8da26686b2fc26eefde7541d49d748d2d9b939f2bc428b7d40d2c31366a6ce42cf16724c966965701186986c5882fdba3c8b languageName: node linkType: hard -"@formatjs/intl-displaynames@npm:6.6.8": - version: 6.6.8 - resolution: "@formatjs/intl-displaynames@npm:6.6.8" +"@formatjs/fast-memoize@npm:2.2.3": + version: 2.2.3 + resolution: "@formatjs/fast-memoize@npm:2.2.3" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/intl-localematcher": "npm:0.5.4" - tslib: "npm:^2.4.0" - checksum: 10c0/1a03e7644022741c1bcf10fcd07da88c434416a13603ace693a038114010463307b4130d3a3f53ad5665bd27fca9a6b19ac8e5bf58e17598b1ea84db173fdfbb + tslib: "npm:2" + checksum: 10c0/f1004c3b280de7e362bd37c5f48ff34c2ba1d6271d4a7b695fed561d1201a3379397824d8bffbf15fecee344d1e70398393bbb04297f242692310a305f12e75b languageName: node linkType: hard -"@formatjs/intl-listformat@npm:7.5.7": - version: 7.5.7 - resolution: "@formatjs/intl-listformat@npm:7.5.7" +"@formatjs/icu-messageformat-parser@npm:2.7.10": + version: 2.7.10 + resolution: "@formatjs/icu-messageformat-parser@npm:2.7.10" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/intl-localematcher": "npm:0.5.4" - tslib: "npm:^2.4.0" - checksum: 10c0/5d0478752d669d87c82aa80880df464d64a1c8974fcb6136bc854567f570a1696e5468005ffa266cfcb623adb7c7299b839c06ea33897f55d35dab6a7575cc84 + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/icu-skeleton-parser": "npm:1.8.4" + tslib: "npm:^2.7.0" + checksum: 10c0/7f2b9bb31c64d2b45584a77e2e6a7c4185f247eea22c0d8e2257ac95feff36894a0936d31778d17874cd249c39058fcb894c27e13a6cadb056996e7232957655 languageName: node linkType: hard -"@formatjs/intl-localematcher@npm:0.5.4": - version: 0.5.4 - resolution: "@formatjs/intl-localematcher@npm:0.5.4" +"@formatjs/icu-messageformat-parser@npm:2.9.3": + version: 2.9.3 + resolution: "@formatjs/icu-messageformat-parser@npm:2.9.3" dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/c9ff5d34ca8b6fe59f8f303a3cc31a92d343e095a6987e273e5cc23f0fe99feb557a392a05da95931c7d24106acb6988e588d00ddd05b0934005aafd7fdbafe6 + "@formatjs/ecma402-abstract": "npm:2.2.3" + "@formatjs/icu-skeleton-parser": "npm:1.8.7" + tslib: "npm:2" + checksum: 10c0/519b59f7b4cf90681315c5382f7fcd105eb1974486f0d62d9227b6d0498895114ccc818792c208baae1ef79571d93b0edb9914c676e5ab76924dddb7fd6c28a0 + languageName: node + linkType: hard + +"@formatjs/icu-skeleton-parser@npm:1.8.4": + version: 1.8.4 + resolution: "@formatjs/icu-skeleton-parser@npm:1.8.4" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.0" + tslib: "npm:^2.7.0" + checksum: 10c0/a6cd90e89b994e6fa2b66f83a80250d17fdddaeb755cd1f38be1d51a737a6f8a9b123912943d3dcad278833e3a04683a9081b187300f1a481791527954e63e82 + languageName: node + linkType: hard + +"@formatjs/icu-skeleton-parser@npm:1.8.7": + version: 1.8.7 + resolution: "@formatjs/icu-skeleton-parser@npm:1.8.7" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.3" + tslib: "npm:2" + checksum: 10c0/e29eb4151580f2d324e6591509dc4543e2326266fc209a08580c94d502acab14acc3560d98b3aaf9ffbd5ff8e2683601ff08c65b32886f22da015c31ca35c5d0 + languageName: node + linkType: hard + +"@formatjs/intl-displaynames@npm:6.8.3": + version: 6.8.3 + resolution: "@formatjs/intl-displaynames@npm:6.8.3" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.3" + "@formatjs/intl-localematcher": "npm:0.5.7" + tslib: "npm:2" + checksum: 10c0/54d3ecaabc45dc8494be4cd9633bbf5eb0bc40c5f62ed5e5073aa5b214c4a9a9620d61d1c8a6f0074618474fd9c2ccc42904605078d2f6341c242bf43627bb3a + languageName: node + linkType: hard + +"@formatjs/intl-listformat@npm:7.7.3": + version: 7.7.3 + resolution: "@formatjs/intl-listformat@npm:7.7.3" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.3" + "@formatjs/intl-localematcher": "npm:0.5.7" + tslib: "npm:2" + checksum: 10c0/2683513e86cc7885528f23237079e3ab9e3a8bc7111aa10d4c685dcbe368ef07039573115df240112fb20f2ec0b70c8ea189ea3b79cbfed7e3dc46024a4667ff + languageName: node + linkType: hard + +"@formatjs/intl-localematcher@npm:0.5.5": + version: 0.5.5 + resolution: "@formatjs/intl-localematcher@npm:0.5.5" + dependencies: + tslib: "npm:^2.7.0" + checksum: 10c0/a6bf466bae29ca838ab06ffa2ce2cc9d5dd98e096ec73986b45ca4354b6adc0ca9078d9fd3aa30dbf27677940cfb3fb050ca0bce3018cd6f3f4d7e4bdad91035 + languageName: node + linkType: hard + +"@formatjs/intl-localematcher@npm:0.5.7": + version: 0.5.7 + resolution: "@formatjs/intl-localematcher@npm:0.5.7" + dependencies: + tslib: "npm:2" + checksum: 10c0/1ae374ca146a0d7457794926eed808c99971628e594f704a42ae2540b1f38928b26cbf942a7bbcc2796cc9fe8d9d7a603ac422bd9b89b714d2f91b506da40792 languageName: node linkType: hard "@formatjs/intl-pluralrules@npm:^5.2.2": - version: 5.2.14 - resolution: "@formatjs/intl-pluralrules@npm:5.2.14" + version: 5.3.3 + resolution: "@formatjs/intl-pluralrules@npm:5.3.3" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/intl-localematcher": "npm:0.5.4" - tslib: "npm:^2.4.0" - checksum: 10c0/3c00109c8d4c8b221c2b9af38a38d31cd6293a0a412a1f2cdae2b8ef81bd71626c9ff4a647389682cb27ae5c223bd6f64ef54d03e3f6f19c372e0c6194b76b38 + "@formatjs/ecma402-abstract": "npm:2.2.3" + "@formatjs/intl-localematcher": "npm:0.5.7" + tslib: "npm:2" + checksum: 10c0/003d33af6f5d902517f230b7038e39b8336da3a84500fe5f4278fa5cac0c9a1b746de484f1c2bb2315026fd771491eafdc0aa59a809bb25189b63093efb8400d languageName: node linkType: hard -"@formatjs/intl@npm:2.10.5": - version: 2.10.5 - resolution: "@formatjs/intl@npm:2.10.5" +"@formatjs/intl@npm:2.10.13": + version: 2.10.13 + resolution: "@formatjs/intl@npm:2.10.13" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/fast-memoize": "npm:2.2.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - "@formatjs/intl-displaynames": "npm:6.6.8" - "@formatjs/intl-listformat": "npm:7.5.7" - intl-messageformat: "npm:10.5.14" - tslib: "npm:^2.4.0" + "@formatjs/ecma402-abstract": "npm:2.2.3" + "@formatjs/fast-memoize": "npm:2.2.3" + "@formatjs/icu-messageformat-parser": "npm:2.9.3" + "@formatjs/intl-displaynames": "npm:6.8.3" + "@formatjs/intl-listformat": "npm:7.7.3" + intl-messageformat: "npm:10.7.5" + tslib: "npm:2" peerDependencies: typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/d00ef00e41200947ed22895b73a0863283de4762ec238b4a81e2252e642e30a309cd9c73174e4917b6c675ab6f148eda5a4e3345c3caeef64e090fc8374d27c4 + checksum: 10c0/14edcc45addc181c7a45845bc34cec5c73bb5544dcf8ed455eca916bbd3a5023c7204a8e8e289060545b85006933c6f297c33c4f04a8a4cb3890aa7baae5bfbf languageName: node linkType: hard -"@formatjs/ts-transformer@npm:3.13.14": - version: 3.13.14 - resolution: "@formatjs/ts-transformer@npm:3.13.14" +"@formatjs/ts-transformer@npm:3.13.16": + version: 3.13.16 + resolution: "@formatjs/ts-transformer@npm:3.13.16" dependencies: - "@formatjs/icu-messageformat-parser": "npm:2.7.8" + "@formatjs/icu-messageformat-parser": "npm:2.7.10" "@types/json-stable-stringify": "npm:^1.0.32" - "@types/node": "npm:14 || 16 || 17" + "@types/node": "npm:14 || 16 || 17 || 18" chalk: "npm:^4.0.0" json-stable-stringify: "npm:^1.0.1" - tslib: "npm:^2.4.0" + tslib: "npm:^2.7.0" typescript: "npm:5" peerDependencies: ts-jest: ">=27" peerDependenciesMeta: ts-jest: optional: true - checksum: 10c0/38450cfce3ec5132f3548c1e9ab098909ca8d2db2b8b6b4b5bb87aa59a4ca1a19bbf6d339ace39bcc931fa80d9946b4c7cf039c9574069b317ae015cd6963bd3 + checksum: 10c0/de03e8bc8c730f2e122970d5843762e0c5183181ba58c9759db2f1ed45fcbfbb8046dbb3318f906574f89026481b9205f5bd6fbf3f410a5e5e1754f575baa489 + languageName: node + linkType: hard + +"@formatjs/ts-transformer@npm:3.13.22": + version: 3.13.22 + resolution: "@formatjs/ts-transformer@npm:3.13.22" + dependencies: + "@formatjs/icu-messageformat-parser": "npm:2.9.3" + "@types/json-stable-stringify": "npm:1" + "@types/node": "npm:14 || 16 || 17 || 18 || 20 || 22" + chalk: "npm:4" + json-stable-stringify: "npm:1" + tslib: "npm:2" + typescript: "npm:5" + peerDependencies: + ts-jest: ">=27" + peerDependenciesMeta: + ts-jest: + optional: true + checksum: 10c0/42503292248bcae728181fdf68e79eac4169c18064953beb9245097d2c58e5434ae7a7978e6ce2829dfd6eb4b4155f78fecef70ac6820626a338f231c66f60cb languageName: node linkType: hard @@ -2446,14 +2482,14 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.14": - version: 0.11.14 - resolution: "@humanwhocodes/config-array@npm:0.11.14" +"@humanwhocodes/config-array@npm:^0.13.0": + version: 0.13.0 + resolution: "@humanwhocodes/config-array@npm:0.13.0" dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.2" + "@humanwhocodes/object-schema": "npm:^2.0.3" debug: "npm:^4.3.1" minimatch: "npm:^3.0.5" - checksum: 10c0/66f725b4ee5fdd8322c737cb5013e19fac72d4d69c8bf4b7feb192fcb83442b035b92186f8e9497c220e58b2d51a080f28a73f7899bc1ab288c3be172c467541 + checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e languageName: node linkType: hard @@ -2464,10 +2500,10 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.2": - version: 2.0.2 - resolution: "@humanwhocodes/object-schema@npm:2.0.2" - checksum: 10c0/6fd83dc320231d71c4541d0244051df61f301817e9f9da9fd4cb7e44ec8aacbde5958c1665b0c419401ab935114fdf532a6ad5d4e7294b1af2f347dd91a6983f +"@humanwhocodes/object-schema@npm:^2.0.3": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c languageName: node linkType: hard @@ -2813,7 +2849,7 @@ __metadata: "@formatjs/intl-pluralrules": "npm:^5.2.2" "@gamestdio/websocket": "npm:^0.3.2" "@github/webauthn-json": "npm:^2.1.1" - "@rails/ujs": "npm:7.1.400" + "@rails/ujs": "npm:7.1.402" "@reduxjs/toolkit": "npm:^2.0.1" "@svgr/webpack": "npm:^5.5.0" "@testing-library/dom": "npm:^10.2.0" @@ -2875,13 +2911,13 @@ __metadata: eslint: "npm:^8.41.0" eslint-define-config: "npm:^2.0.0" eslint-import-resolver-typescript: "npm:^3.5.5" - eslint-plugin-formatjs: "npm:^4.10.1" + eslint-plugin-formatjs: "npm:^5.0.0" eslint-plugin-import: "npm:~2.30.0" eslint-plugin-jsdoc: "npm:^50.0.0" eslint-plugin-jsx-a11y: "npm:~6.10.0" eslint-plugin-promise: "npm:~7.1.0" eslint-plugin-react: "npm:^7.33.2" - eslint-plugin-react-hooks: "npm:^4.6.0" + eslint-plugin-react-hooks: "npm:^5.0.0" exif-js: "npm:^2.3.0" favico.js: "npm:^0.3.10" file-loader: "npm:^6.2.0" @@ -2994,7 +3030,7 @@ __metadata: prom-client: "npm:^15.0.0" typescript: "npm:^5.0.4" utf-8-validate: "npm:^6.0.3" - uuid: "npm:^10.0.0" + uuid: "npm:^11.0.0" ws: "npm:^8.12.1" dependenciesMeta: bufferutil: @@ -3115,16 +3151,16 @@ __metadata: languageName: node linkType: hard -"@rails/ujs@npm:7.1.400": - version: 7.1.400 - resolution: "@rails/ujs@npm:7.1.400" - checksum: 10c0/181329e731b925788a530dc5bc44eb4a07ae780e20b0309fd9140ebeeca30d9432ed50be0f25ae60f10beb3aa8883f6d662e4b9c6f6cd19a32c1f42ab2505c47 +"@rails/ujs@npm:7.1.402": + version: 7.1.402 + resolution: "@rails/ujs@npm:7.1.402" + checksum: 10c0/ccab74b8013ed8a8ab8d7497d0fa510a6ec079725b5fcf679936d80c342940e462b60243ad2cb98128f29db5708a094e319767e8f33a18eb63ceb745de63d1e0 languageName: node linkType: hard "@reduxjs/toolkit@npm:^2.0.1": - version: 2.2.8 - resolution: "@reduxjs/toolkit@npm:2.2.8" + version: 2.3.0 + resolution: "@reduxjs/toolkit@npm:2.3.0" dependencies: immer: "npm:^10.0.3" redux: "npm:^5.0.1" @@ -3138,7 +3174,7 @@ __metadata: optional: true react-redux: optional: true - checksum: 10c0/bf1356d71bfb82e5a181692c79c19b7bc19355260a9966f6562604c995f0cd0ce1154177ccd14095e8b319e73f64cfe86a4e46a83d24edba7876d4ae71fd5ae0 + checksum: 10c0/414e90b706331385a2122fc79e33f90c59a9caf9a59419f1bfd7f5e594bc8e4987902fd1bccbc53eb96d22c65ec2981ff5581f3d2df3ecd381a630f391edfc3e languageName: node linkType: hard @@ -3438,8 +3474,8 @@ __metadata: linkType: hard "@testing-library/jest-dom@npm:^6.0.0": - version: 6.5.0 - resolution: "@testing-library/jest-dom@npm:6.5.0" + version: 6.6.3 + resolution: "@testing-library/jest-dom@npm:6.6.3" dependencies: "@adobe/css-tools": "npm:^4.4.0" aria-query: "npm:^5.0.0" @@ -3448,7 +3484,7 @@ __metadata: dom-accessibility-api: "npm:^0.6.3" lodash: "npm:^4.17.21" redent: "npm:^3.0.0" - checksum: 10c0/fd5936a547f04608d8de15a7de3ae26516f21023f8f45169b10c8c8847015fd20ec259b7309f08aa1031bcbc37c6e5e6f532d1bb85ef8f91bad654193ec66a4c + checksum: 10c0/5566b6c0b7b0709bc244aec3aa3dc9e5f4663e8fb2b99d8cd456fc07279e59db6076cbf798f9d3099a98fca7ef4cd50e4e1f4c4dec5a60a8fad8d24a638a5bf6 languageName: node linkType: hard @@ -3493,7 +3529,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:*, @types/babel__core@npm:^7.1.12, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.1.7, @types/babel__core@npm:^7.20.1": +"@types/babel__core@npm:*, @types/babel__core@npm:^7.1.12, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.20.1, @types/babel__core@npm:^7.20.5": version: 7.20.5 resolution: "@types/babel__core@npm:7.20.5" dependencies: @@ -3515,12 +3551,12 @@ __metadata: languageName: node linkType: hard -"@types/babel__helper-plugin-utils@npm:^7.10.0": - version: 7.10.2 - resolution: "@types/babel__helper-plugin-utils@npm:7.10.2" +"@types/babel__helper-plugin-utils@npm:^7.10.3": + version: 7.10.3 + resolution: "@types/babel__helper-plugin-utils@npm:7.10.3" dependencies: "@types/babel__core": "npm:*" - checksum: 10c0/1c544e33b30ccfc02254b9fe090c52880c8bb05e5406f525bfdce71ce34e93677276f788b93e9fa5e1a16f6317b97e59a07d8a92bf4726d8f4639a0045ebb590 + checksum: 10c0/c22f68e8019c1e75e42fccc6eaca94a269fa177c4544599aa084b216b879b626f63f89755a4ac2dc9054b6e9ed4e0fab1e3460d36ce20767c99aef4a3c81fce3 languageName: node linkType: hard @@ -3534,12 +3570,12 @@ __metadata: languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6, @types/babel__traverse@npm:^7.1.7": - version: 7.20.3 - resolution: "@types/babel__traverse@npm:7.20.3" +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6, @types/babel__traverse@npm:^7.20.6": + version: 7.20.6 + resolution: "@types/babel__traverse@npm:7.20.6" dependencies: "@babel/types": "npm:^7.20.7" - checksum: 10c0/295ed9b837e62e17ee43be0df45d90fff5208986bd43af593c9020d152d3b2c55328e038c2f8585926b63cc22f887f28bf3f4c805aa881e2dd0bdd5ead92ece0 + checksum: 10c0/7ba7db61a53e28cac955aa99af280d2600f15a8c056619c05b6fc911cbe02c61aa4f2823299221b23ce0cce00b294c0e5f618ec772aa3f247523c2e48cf7b888 languageName: node linkType: hard @@ -3587,13 +3623,13 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:7 || 8": - version: 8.56.10 - resolution: "@types/eslint@npm:8.56.10" +"@types/eslint@npm:9": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" dependencies: "@types/estree": "npm:*" "@types/json-schema": "npm:*" - checksum: 10c0/674349d6c342c3864d70f4d5a9965f96fb253801532752c8c500ad6a1c2e8b219e01ccff5dc8791dcb58b5483012c495708bb9f3ff929f5c9322b3da126c15d3 + checksum: 10c0/69ba24fee600d1e4c5abe0df086c1a4d798abf13792d8cfab912d76817fe1a894359a1518557d21237fbaf6eda93c5ab9309143dee4c59ef54336d1b3570420e languageName: node linkType: hard @@ -3661,7 +3697,7 @@ __metadata: languageName: node linkType: hard -"@types/hoist-non-react-statics@npm:^3.3.1": +"@types/hoist-non-react-statics@npm:3, @types/hoist-non-react-statics@npm:^3.3.1": version: 3.3.5 resolution: "@types/hoist-non-react-statics@npm:3.3.5" dependencies: @@ -3720,12 +3756,12 @@ __metadata: linkType: hard "@types/jest@npm:^29.5.2": - version: 29.5.13 - resolution: "@types/jest@npm:29.5.13" + version: 29.5.14 + resolution: "@types/jest@npm:29.5.14" dependencies: expect: "npm:^29.0.0" pretty-format: "npm:^29.0.0" - checksum: 10c0/9c31af0b155387b9860908830de63c6b79011d7c87c8b61b39da124e26e55423dd51b006749aafe4f0ef3a065016619a1f93ef4b055157d43727f448e67824b7 + checksum: 10c0/18e0712d818890db8a8dab3d91e9ea9f7f19e3f83c2e50b312f557017dc81466207a71f3ed79cf4428e813ba939954fa26ffa0a9a7f153181ba174581b1c2aed languageName: node linkType: hard @@ -3747,17 +3783,17 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db languageName: node linkType: hard -"@types/json-stable-stringify@npm:^1.0.32": - version: 1.0.35 - resolution: "@types/json-stable-stringify@npm:1.0.35" - checksum: 10c0/67b50a86478f932c932ba21515b80700a8844d55e0656b3abe2c32c41c1c405c70fcd10b30ff8f38d1869871af2deae63ffdea54ce72cc2ee92e94a9d1cf2b6f +"@types/json-stable-stringify@npm:1, @types/json-stable-stringify@npm:^1.0.32": + version: 1.1.0 + resolution: "@types/json-stable-stringify@npm:1.1.0" + checksum: 10c0/8f69944701510243cd3a83aa44363a8a4d366f11a659b258f69fb3ad0f94ab1e2533206a2c929ac7fd18784d201b663b3f02a45934f545c926f051d8cb4df095 languageName: node linkType: hard @@ -3769,9 +3805,9 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.195": - version: 4.17.9 - resolution: "@types/lodash@npm:4.17.9" - checksum: 10c0/54de935e835508b5f835a5dfaedd2b9a299685a21d11e9c5cd2dde57331d03bc2f98b71d2424ca8460f447ecd55a673e45ccdb70e58f9f72745710f6b91abc60 + version: 4.17.13 + resolution: "@types/lodash@npm:4.17.13" + checksum: 10c0/c3d0b7efe7933ac0369b99f2f7bff9240d960680fdb74b41ed4bd1b3ca60cca1e31fe4046d9abbde778f941a41bc2a75eb629abf8659fa6c27b66efbbb0802a9 languageName: node linkType: hard @@ -3796,19 +3832,21 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*": - version: 20.8.10 - resolution: "@types/node@npm:20.8.10" +"@types/node@npm:*, @types/node@npm:14 || 16 || 17 || 18 || 20 || 22": + version: 22.8.6 + resolution: "@types/node@npm:22.8.6" dependencies: - undici-types: "npm:~5.26.4" - checksum: 10c0/caaa3ae9294f1bfdacb029a916c64af63cbcea613a52f53ea86f93c91779859af177b2b68113ef835194519f5e76cadda08559929b68297f1a8a568c207f9f66 + undici-types: "npm:~6.19.8" + checksum: 10c0/d3a11f2549234a91a4c5d0ff35ab4bdcb7ba34db4d3f1d189be39b8bd41c19aac98d117150a95a9c5a9d45b1014135477ea240b2b8317c86ae3d3cf1c3b3f8f4 languageName: node linkType: hard -"@types/node@npm:14 || 16 || 17": - version: 17.0.45 - resolution: "@types/node@npm:17.0.45" - checksum: 10c0/0db377133d709b33a47892581a21a41cd7958f22723a3cc6c71d55ac018121382de42fbfc7970d5ae3e7819dbe5f40e1c6a5174aedf7e7964e9cb8fa72b580b0 +"@types/node@npm:14 || 16 || 17 || 18": + version: 18.19.55 + resolution: "@types/node@npm:18.19.55" + dependencies: + undici-types: "npm:~5.26.4" + checksum: 10c0/19ffeca0086b45cba08d4585623cd0d80fbacb659debde82a4baa008fc0c25ba6c21cd721f3a9f0be74f70940694b00458cac61c89f8b2a1e55ca4322a9aad2b languageName: node linkType: hard @@ -3887,11 +3925,11 @@ __metadata: linkType: hard "@types/react-dom@npm:^18.2.4": - version: 18.3.0 - resolution: "@types/react-dom@npm:18.3.0" + version: 18.3.1 + resolution: "@types/react-dom@npm:18.3.1" dependencies: "@types/react": "npm:*" - checksum: 10c0/6c90d2ed72c5a0e440d2c75d99287e4b5df3e7b011838cdc03ae5cd518ab52164d86990e73246b9d812eaf02ec351d74e3b4f5bd325bf341e13bf980392fd53b + checksum: 10c0/8b416551c60bb6bd8ec10e198c957910cfb271bc3922463040b0d57cf4739cdcd24b13224f8d68f10318926e1ec3cd69af0af79f0291b599a992f8c80d47f1eb languageName: node linkType: hard @@ -3990,12 +4028,12 @@ __metadata: linkType: hard "@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7": - version: 18.3.10 - resolution: "@types/react@npm:18.3.10" + version: 18.3.12 + resolution: "@types/react@npm:18.3.12" dependencies: "@types/prop-types": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/f5be1de1b0331c1fdb33d577f4cf7f1b949d4bded5347b2351a537f03c51dade5be115e21b161dcf1b37061954d320f6a0bdf8d7b70e24eda51071fdd614383d + checksum: 10c0/8bae8d9a41619804561574792e29112b413044eb0d53746dde2b9720c1f9a59f71c895bbd7987cd8ce9500b00786e53bc032dced38cddf42910458e145675290 languageName: node linkType: hard @@ -4023,13 +4061,6 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^7.5.0": - version: 7.5.8 - resolution: "@types/semver@npm:7.5.8" - checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa - languageName: node - linkType: hard - "@types/send@npm:*": version: 0.17.4 resolution: "@types/send@npm:0.17.4" @@ -4135,8 +4166,8 @@ __metadata: linkType: hard "@types/webpack@npm:^4.41.33": - version: 4.41.39 - resolution: "@types/webpack@npm:4.41.39" + version: 4.41.40 + resolution: "@types/webpack@npm:4.41.40" dependencies: "@types/node": "npm:*" "@types/tapable": "npm:^1" @@ -4144,16 +4175,16 @@ __metadata: "@types/webpack-sources": "npm:*" anymatch: "npm:^3.0.0" source-map: "npm:^0.6.0" - checksum: 10c0/740420d092abb80b70263b02609bde209801b060d8e6f3a399a129945cb09182c2ce63dc816908bfbcdb123b35dc4c4fb51367aac2b5974537694cac2631db21 + checksum: 10c0/ecd530e5db4c21ec61795eec538026f96c126323836249a83e72805afd1d0b1141fc781f14d4a59d77f877523384b4c5d79dc391cfb901e7a781a9aa085f8198 languageName: node linkType: hard "@types/ws@npm:^8.5.9": - version: 8.5.12 - resolution: "@types/ws@npm:8.5.12" + version: 8.5.13 + resolution: "@types/ws@npm:8.5.13" dependencies: "@types/node": "npm:*" - checksum: 10c0/3fd77c9e4e05c24ce42bfc7647f7506b08c40a40fe2aea236ef6d4e96fc7cb4006a81ed1b28ec9c457e177a74a72924f4768b7b4652680b42dfd52bc380e15f9 + checksum: 10c0/a5430aa479bde588e69cb9175518d72f9338b6999e3b2ae16fc03d3bdcff8347e486dc031e4ed14601260463c07e1f9a0d7511dfc653712b047c439c680b0b34 languageName: node linkType: hard @@ -4174,14 +4205,14 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^8.0.0": - version: 8.1.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.1.0" + version: 8.10.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.10.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.1.0" - "@typescript-eslint/type-utils": "npm:8.1.0" - "@typescript-eslint/utils": "npm:8.1.0" - "@typescript-eslint/visitor-keys": "npm:8.1.0" + "@typescript-eslint/scope-manager": "npm:8.10.0" + "@typescript-eslint/type-utils": "npm:8.10.0" + "@typescript-eslint/utils": "npm:8.10.0" + "@typescript-eslint/visitor-keys": "npm:8.10.0" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" @@ -4192,104 +4223,68 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/7bbeae588f859b59c34d6a76cac06ef0fa605921b40c5d3b65b94829984280ea84c4dd3f5cb9ce2eb326f5563e9abb4c90ebff05c47f83f4def296c2ea1fa86c + checksum: 10c0/4b77ba9c865a2a14e238cd330b5901f0274b8ce1c13324fccd0339b8eea82a50a4709394c903fd8cd5bd0d3aebace0761ff9a4a19fa20b00bb61349b7671c035 languageName: node linkType: hard "@typescript-eslint/parser@npm:^8.0.0": - version: 8.1.0 - resolution: "@typescript-eslint/parser@npm:8.1.0" + version: 8.10.0 + resolution: "@typescript-eslint/parser@npm:8.10.0" dependencies: - "@typescript-eslint/scope-manager": "npm:8.1.0" - "@typescript-eslint/types": "npm:8.1.0" - "@typescript-eslint/typescript-estree": "npm:8.1.0" - "@typescript-eslint/visitor-keys": "npm:8.1.0" + "@typescript-eslint/scope-manager": "npm:8.10.0" + "@typescript-eslint/types": "npm:8.10.0" + "@typescript-eslint/typescript-estree": "npm:8.10.0" + "@typescript-eslint/visitor-keys": "npm:8.10.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/b94b2d3ab5ca505484d100701fad6a04a5dc8d595029bac1b9f5b8a4a91d80fd605b0f65d230b36a97ab7e5d55eeb0c28af2ab63929a3e4ab8fdefd2a548c36b + checksum: 10c0/7becb2457c085c239838d301796074b790f46dd38c9fbc14ec1dec8e993c7115cd8a66cdc07983c3a68a2dd92e24e8acc49d69a4ebcc29e9869957eb52d1cb74 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/scope-manager@npm:6.21.0" +"@typescript-eslint/scope-manager@npm:8.10.0": + version: 8.10.0 + resolution: "@typescript-eslint/scope-manager@npm:8.10.0" dependencies: - "@typescript-eslint/types": "npm:6.21.0" - "@typescript-eslint/visitor-keys": "npm:6.21.0" - checksum: 10c0/eaf868938d811cbbea33e97e44ba7050d2b6892202cea6a9622c486b85ab1cf801979edf78036179a8ba4ac26f1dfdf7fcc83a68c1ff66be0b3a8e9a9989b526 + "@typescript-eslint/types": "npm:8.10.0" + "@typescript-eslint/visitor-keys": "npm:8.10.0" + checksum: 10c0/b8bb8635c4d6c00a3578d6265e3ee0f5d96d0c9dee534ed588aa411c3f4497fd71cce730c3ae7571e52453d955b191bc9edcc47c9af21a20c90e9a20f2371108 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/scope-manager@npm:8.1.0" +"@typescript-eslint/type-utils@npm:8.10.0": + version: 8.10.0 + resolution: "@typescript-eslint/type-utils@npm:8.10.0" dependencies: - "@typescript-eslint/types": "npm:8.1.0" - "@typescript-eslint/visitor-keys": "npm:8.1.0" - checksum: 10c0/2bcf8cd176a1819bddcae16c572e7da8fba821b995a91cd53d64d8d6b85a17f5a895522f281ba57e34929574bddd4d6684ee3e545ec4e8096be4c3198e253a9a - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/type-utils@npm:8.1.0" - dependencies: - "@typescript-eslint/typescript-estree": "npm:8.1.0" - "@typescript-eslint/utils": "npm:8.1.0" + "@typescript-eslint/typescript-estree": "npm:8.10.0" + "@typescript-eslint/utils": "npm:8.10.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.3.0" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/62753941c4136e8d2daa72fe0410dea48e5317a6f12ece6382ca85e29912bd1b3f739b61d1060fc0a1f8c488dfc905beab4c8b8497951a21c3138a659c7271ec + checksum: 10c0/1af8fce8394279e6ac7bcef449a132072ee36e374c8d557564246ffe7150230844901ca0305e29525bf37c87010e03bf8bedec76fccbfe1e41931cb4f274e208 languageName: node linkType: hard -"@typescript-eslint/types@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/types@npm:6.21.0" - checksum: 10c0/020631d3223bbcff8a0da3efbdf058220a8f48a3de221563996ad1dcc30d6c08dadc3f7608cc08830d21c0d565efd2db19b557b9528921c78aabb605eef2d74d +"@typescript-eslint/types@npm:8.10.0": + version: 8.10.0 + resolution: "@typescript-eslint/types@npm:8.10.0" + checksum: 10c0/f27dd43c8383e02e914a254257627e393dfc0f08b0f74a253c106813ae361f090271b2f3f2ef588fa3ca1329897d873da595bb5641fe8e3091b25eddca24b5d2 languageName: node linkType: hard -"@typescript-eslint/types@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/types@npm:8.1.0" - checksum: 10c0/ceade44455f45974e68956016c4d1c6626580732f7f9675e14ffa63db80b551752b0df596b20473dae9f0dc6ed966e17417dc2cf36e1a82b6ab0edc97c5eaa50 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" +"@typescript-eslint/typescript-estree@npm:8.10.0": + version: 8.10.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.10.0" dependencies: - "@typescript-eslint/types": "npm:6.21.0" - "@typescript-eslint/visitor-keys": "npm:6.21.0" + "@typescript-eslint/types": "npm:8.10.0" + "@typescript-eslint/visitor-keys": "npm:8.10.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: 10c0/af1438c60f080045ebb330155a8c9bb90db345d5069cdd5d01b67de502abb7449d6c75500519df829f913a6b3f490ade3e8215279b6bdc63d0fb0ae61034df5f - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.1.0" - dependencies: - "@typescript-eslint/types": "npm:8.1.0" - "@typescript-eslint/visitor-keys": "npm:8.1.0" - debug: "npm:^4.3.4" - globby: "npm:^11.1.0" + fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" minimatch: "npm:^9.0.4" semver: "npm:^7.6.0" @@ -4297,58 +4292,31 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/a7bc8275df1c79c4cb14ef086c56674316dd4907efec53eddca35d0b5220428b69c82178ce2d95138da2e398269c8bd0764cae8020a36417e411e35c3c47bc4b + checksum: 10c0/535a740fe25be0e28fe68c41e3264273d1e5169c9f938e08cc0e3415c357726f43efa44621960108c318fc3305c425d29f3223b6e731d44d67f84058a8947304 languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/utils@npm:8.1.0" +"@typescript-eslint/utils@npm:8.10.0": + version: 8.10.0 + resolution: "@typescript-eslint/utils@npm:8.10.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:8.1.0" - "@typescript-eslint/types": "npm:8.1.0" - "@typescript-eslint/typescript-estree": "npm:8.1.0" + "@typescript-eslint/scope-manager": "npm:8.10.0" + "@typescript-eslint/types": "npm:8.10.0" + "@typescript-eslint/typescript-estree": "npm:8.10.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 - checksum: 10c0/c95503a6bdcd98b1ff04d1adbf46377b2036b1c510d90a4a056401f996f775f06c3108c95fb81cd6babc9c97b73b91b8e848f0337bc508de8a49c993582f0e75 + checksum: 10c0/a21a2933517176abd00fcd5d8d80023e35dc3d89d5746bbac43790b4e984ab1f371117db08048bce7f42d54c64f4e0e35161149f8f34fd25a27bff9d1110fd16 languageName: node linkType: hard -"@typescript-eslint/utils@npm:^6.18.1": - version: 6.21.0 - resolution: "@typescript-eslint/utils@npm:6.21.0" +"@typescript-eslint/visitor-keys@npm:8.10.0": + version: 8.10.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.10.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.21.0" - "@typescript-eslint/types": "npm:6.21.0" - "@typescript-eslint/typescript-estree": "npm:6.21.0" - semver: "npm:^7.5.4" - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - checksum: 10c0/ab2df3833b2582d4e5467a484d08942b4f2f7208f8e09d67de510008eb8001a9b7460f2f9ba11c12086fd3cdcac0c626761c7995c2c6b5657d5fa6b82030a32d - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.21.0" - dependencies: - "@typescript-eslint/types": "npm:6.21.0" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/7395f69739cfa1cb83c1fb2fad30afa2a814756367302fb4facd5893eff66abc807e8d8f63eba94ed3b0fe0c1c996ac9a1680bcbf0f83717acedc3f2bb724fbf - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.1.0" - dependencies: - "@typescript-eslint/types": "npm:8.1.0" + "@typescript-eslint/types": "npm:8.10.0" eslint-visitor-keys: "npm:^3.4.3" - checksum: 10c0/b7544dbb0eec1ddbfcd95c04b51b9a739c2e768c16d1c88508f976a2b0d1bc02fefb7491930e06e48073a5c07c6f488cd8403bba3a8b918888b93a88d5ac3869 + checksum: 10c0/14721c4ac939640d5fd1ee1b6eeb07604b11a6017e319e21dcc71e7aac2992341fc7ae1992d977bad4433b6a1d0d1c0c279e6927316b26245f6e333f922fa458 languageName: node linkType: hard @@ -4838,7 +4806,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:5.3.0, aria-query@npm:^5.0.0": +"aria-query@npm:5.3.0": version: 5.3.0 resolution: "aria-query@npm:5.3.0" dependencies: @@ -4847,12 +4815,10 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:~5.1.3": - version: 5.1.3 - resolution: "aria-query@npm:5.1.3" - dependencies: - deep-equal: "npm:^2.0.5" - checksum: 10c0/edcbc8044c4663d6f88f785e983e6784f98cb62b4ba1e9dd8d61b725d0203e4cfca38d676aee984c31f354103461102a3d583aa4fbe4fd0a89b679744f4e5faf +"aria-query@npm:^5.0.0, aria-query@npm:^5.3.2": + version: 5.3.2 + resolution: "aria-query@npm:5.3.2" + checksum: 10c0/003c7e3e2cff5540bf7a7893775fc614de82b0c5dde8ae823d47b7a28a9d4da1f7ed85f340bdb93d5649caa927755f0e31ecc7ab63edfdfc00c8ef07e505e03e languageName: node linkType: hard @@ -4877,7 +4843,7 @@ __metadata: languageName: node linkType: hard -"array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1": +"array-buffer-byte-length@npm:^1.0.1": version: 1.0.1 resolution: "array-buffer-byte-length@npm:1.0.1" dependencies: @@ -5250,21 +5216,21 @@ __metadata: linkType: hard "babel-plugin-formatjs@npm:^10.5.1": - version: 10.5.16 - resolution: "babel-plugin-formatjs@npm:10.5.16" + version: 10.5.24 + resolution: "babel-plugin-formatjs@npm:10.5.24" dependencies: - "@babel/core": "npm:^7.10.4" - "@babel/helper-plugin-utils": "npm:^7.10.4" - "@babel/plugin-syntax-jsx": "npm:7" - "@babel/traverse": "npm:7" - "@babel/types": "npm:^7.12.11" - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - "@formatjs/ts-transformer": "npm:3.13.14" - "@types/babel__core": "npm:^7.1.7" - "@types/babel__helper-plugin-utils": "npm:^7.10.0" - "@types/babel__traverse": "npm:^7.1.7" - tslib: "npm:^2.4.0" - checksum: 10c0/03d9d2b0b9cdc05c011bfb417a43e5c0f557868ed84d83acbc3cb9072b7fa98f5219473d0bd61f02741c151d6f2162da363bd337522c80af14721ae37f6da86b + "@babel/core": "npm:^7.25.0" + "@babel/helper-plugin-utils": "npm:^7.25.0" + "@babel/plugin-syntax-jsx": "npm:^7.25.0" + "@babel/traverse": "npm:^7.25.0" + "@babel/types": "npm:^7.25.0" + "@formatjs/icu-messageformat-parser": "npm:2.9.3" + "@formatjs/ts-transformer": "npm:3.13.22" + "@types/babel__core": "npm:^7.20.5" + "@types/babel__helper-plugin-utils": "npm:^7.10.3" + "@types/babel__traverse": "npm:^7.20.6" + tslib: "npm:2" + checksum: 10c0/a99c92e62edb30e0b6a5bf1115811eb18336b851109f8c096b5a9aa2be3eb72299eea3a8cb706e03705eb79edfa5a62d69bb52d80a375c1d5a1c963e3d00c40e languageName: node linkType: hard @@ -5920,6 +5886,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:4, chalk@npm:^4.0, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + "chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -5941,16 +5917,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 - languageName: node - linkType: hard - "chalk@npm:~5.3.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" @@ -6443,9 +6409,9 @@ __metadata: linkType: hard "core-js@npm:^3.30.2": - version: 3.38.1 - resolution: "core-js@npm:3.38.1" - checksum: 10c0/7df063b6f13a54e46515817ac3e235c6c598a4d3de65cd188a061fc250642be313b895fb9fb2f36e1e31890a1bb4ef61d82666a340413f540b7ce3c65689739b + version: 3.39.0 + resolution: "core-js@npm:3.39.0" + checksum: 10c0/f7602069b6afb2e3298eec612a5c1e0c3e6a458930fbfc7a4c5f9ac03426507f49ce395eecdd2d9bae9024f820e44582b67ffe16f2272395af26964f174eeb6b languageName: node linkType: hard @@ -6612,14 +6578,14 @@ __metadata: languageName: node linkType: hard -"css-blank-pseudo@npm:^7.0.0": - version: 7.0.0 - resolution: "css-blank-pseudo@npm:7.0.0" +"css-blank-pseudo@npm:^7.0.1": + version: 7.0.1 + resolution: "css-blank-pseudo@npm:7.0.1" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/74c6c0af773a8d2c8c5a53bcfc2b2c06f9c3fd4a8bd756b7aafc102b91a1060b179a4f0aa21475b54685b62bfd9724fee90778dd992b42e0cd3ea3698132af92 + checksum: 10c0/46c3d3a611972fdb0c264db7c0b34fe437bc4300961d11945145cf04962f52a545a6ef55bc8ff4afd82b605bd692b4970f2b54582616dea00441105e725d4618 languageName: node linkType: hard @@ -6639,16 +6605,16 @@ __metadata: languageName: node linkType: hard -"css-has-pseudo@npm:^7.0.0": - version: 7.0.0 - resolution: "css-has-pseudo@npm:7.0.0" +"css-has-pseudo@npm:^7.0.1": + version: 7.0.1 + resolution: "css-has-pseudo@npm:7.0.1" dependencies: - "@csstools/selector-specificity": "npm:^4.0.0" - postcss-selector-parser: "npm:^6.1.0" + "@csstools/selector-specificity": "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/2c72602ca9bcdb3afe2cce3b014e7dd17548658904c17560042ebf4bd6727b1ed8706961b1f44bff43bbdb8dc932c30a0b29f536c353df858e300e68e163b872 + checksum: 10c0/13789b08b70169204be786d652190356ace9313099d3656bd2fc38afbdd28f3d9620f0e0b07425480961b7a1ec789794961d0472f205b959d3f64c9a78ce511c languageName: node linkType: hard @@ -6784,10 +6750,10 @@ __metadata: languageName: node linkType: hard -"cssdb@npm:^8.1.1": - version: 8.1.1 - resolution: "cssdb@npm:8.1.1" - checksum: 10c0/d60facfad3bca70e21100fc35b9205cb9d3d0ac642f44f0a687e54bf787f21c43d28ce2d17fcd405f67950fb4709516108fe1f3cb15df570eff1007b5fbbc787 +"cssdb@npm:^8.2.1": + version: 8.2.1 + resolution: "cssdb@npm:8.2.1" + checksum: 10c0/d27d7db0a39e1105181aac119a98d6c92cd5ceba2e8bd349cdf2ba4a8d9ead149b685a1dba9542ca24f094cc70eca4a3e02973fe1f74c11a373b508606e5e1c0 languageName: node linkType: hard @@ -7070,32 +7036,6 @@ __metadata: languageName: node linkType: hard -"deep-equal@npm:^2.0.5": - version: 2.2.3 - resolution: "deep-equal@npm:2.2.3" - dependencies: - array-buffer-byte-length: "npm:^1.0.0" - call-bind: "npm:^1.0.5" - es-get-iterator: "npm:^1.1.3" - get-intrinsic: "npm:^1.2.2" - is-arguments: "npm:^1.1.1" - is-array-buffer: "npm:^3.0.2" - is-date-object: "npm:^1.0.5" - is-regex: "npm:^1.1.4" - is-shared-array-buffer: "npm:^1.0.2" - isarray: "npm:^2.0.5" - object-is: "npm:^1.1.5" - object-keys: "npm:^1.1.1" - object.assign: "npm:^4.1.4" - regexp.prototype.flags: "npm:^1.5.1" - side-channel: "npm:^1.0.4" - which-boxed-primitive: "npm:^1.0.2" - which-collection: "npm:^1.0.1" - which-typed-array: "npm:^1.1.13" - checksum: 10c0/a48244f90fa989f63ff5ef0cc6de1e4916b48ea0220a9c89a378561960814794a5800c600254482a2c8fd2e49d6c2e196131dc983976adb024c94a42dfe4949f - languageName: node - linkType: hard - "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -7769,26 +7709,9 @@ __metadata: languageName: node linkType: hard -"es-get-iterator@npm:^1.1.3": - version: 1.1.3 - resolution: "es-get-iterator@npm:1.1.3" - dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.1.3" - has-symbols: "npm:^1.0.3" - is-arguments: "npm:^1.1.1" - is-map: "npm:^2.0.2" - is-set: "npm:^2.0.2" - is-string: "npm:^1.0.7" - isarray: "npm:^2.0.5" - stop-iteration-iterator: "npm:^1.0.0" - checksum: 10c0/ebd11effa79851ea75d7f079405f9d0dc185559fd65d986c6afea59a0ff2d46c2ed8675f19f03dce7429d7f6c14ff9aede8d121fbab78d75cfda6a263030bac0 - languageName: node - linkType: hard - -"es-iterator-helpers@npm:^1.0.19": - version: 1.0.19 - resolution: "es-iterator-helpers@npm:1.0.19" +"es-iterator-helpers@npm:^1.0.19, es-iterator-helpers@npm:^1.1.0": + version: 1.1.0 + resolution: "es-iterator-helpers@npm:1.1.0" dependencies: call-bind: "npm:^1.0.7" define-properties: "npm:^1.2.1" @@ -7797,14 +7720,14 @@ __metadata: es-set-tostringtag: "npm:^2.0.3" function-bind: "npm:^1.1.2" get-intrinsic: "npm:^1.2.4" - globalthis: "npm:^1.0.3" + globalthis: "npm:^1.0.4" has-property-descriptors: "npm:^1.0.2" has-proto: "npm:^1.0.3" has-symbols: "npm:^1.0.3" internal-slot: "npm:^1.0.7" - iterator.prototype: "npm:^1.1.2" + iterator.prototype: "npm:^1.1.3" safe-array-concat: "npm:^1.1.2" - checksum: 10c0/ae8f0241e383b3d197383b9842c48def7fce0255fb6ed049311b686ce295595d9e389b466f6a1b7d4e7bb92d82f5e716d6fae55e20c1040249bf976743b038c5 + checksum: 10c0/84d6c240c7da6e62323b336cb1497781546dab16bebdbd879ccfdf588979712d3e941d41165b6c2ffce5a03a7b929d4e6131d3124d330da1a0e2bfa1da7cd99f languageName: node linkType: hard @@ -7963,24 +7886,24 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-formatjs@npm:^4.10.1": - version: 4.13.3 - resolution: "eslint-plugin-formatjs@npm:4.13.3" +"eslint-plugin-formatjs@npm:^5.0.0": + version: 5.1.1 + resolution: "eslint-plugin-formatjs@npm:5.1.1" dependencies: - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - "@formatjs/ts-transformer": "npm:3.13.14" - "@types/eslint": "npm:7 || 8" + "@formatjs/icu-messageformat-parser": "npm:2.7.10" + "@formatjs/ts-transformer": "npm:3.13.16" + "@types/eslint": "npm:9" "@types/picomatch": "npm:^2.3.0" - "@typescript-eslint/utils": "npm:^6.18.1" + "@typescript-eslint/utils": "npm:8.10.0" emoji-regex: "npm:^10.2.1" magic-string: "npm:^0.30.0" picomatch: "npm:^2.3.1" - tslib: "npm:2.6.2" + tslib: "npm:^2.7.0" typescript: "npm:5" unicode-emoji-utils: "npm:^1.2.0" peerDependencies: - eslint: 7 || 8 - checksum: 10c0/5e98f487a097189e3bdc64b678d19f4c83502c32d7c89a8959eda4ed9cb664bf16f13ad8871be89ca192cb39c1007d6a158c39bbf5b23c56962d949dbe9abfab + eslint: 9 + checksum: 10c0/b0cf41208fe1bdcd4e7879c0a7099273753ec1e2c5a855c0989679690a740b92123d1625cea7ce862a19412a588fd16e42c0c196807021f13462585ace719dc1 languageName: node linkType: hard @@ -8013,10 +7936,10 @@ __metadata: linkType: hard "eslint-plugin-jsdoc@npm:^50.0.0": - version: 50.2.2 - resolution: "eslint-plugin-jsdoc@npm:50.2.2" + version: 50.4.3 + resolution: "eslint-plugin-jsdoc@npm:50.4.3" dependencies: - "@es-joy/jsdoccomment": "npm:~0.48.0" + "@es-joy/jsdoccomment": "npm:~0.49.0" are-docs-informative: "npm:^0.0.2" comment-parser: "npm:1.4.1" debug: "npm:^4.3.6" @@ -8029,15 +7952,15 @@ __metadata: synckit: "npm:^0.9.1" peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - checksum: 10c0/f41d30246f6a4b6acb55e8cd75cf4fc256315e141ab25f7740fa6fa58cdd24e08cb672b4a350da93aeb126d210bd25981310a50f97cfb108f6a7ce8668b6b90a + checksum: 10c0/96067f8fc3553371e9afdc6d03c166228bfd3cb004fcd70c4357d49185732f384351e20f44c21b0a13ea318c8aabbd584b627804f62a2a80376507646708a786 languageName: node linkType: hard "eslint-plugin-jsx-a11y@npm:~6.10.0": - version: 6.10.0 - resolution: "eslint-plugin-jsx-a11y@npm:6.10.0" + version: 6.10.1 + resolution: "eslint-plugin-jsx-a11y@npm:6.10.1" dependencies: - aria-query: "npm:~5.1.3" + aria-query: "npm:^5.3.2" array-includes: "npm:^3.1.8" array.prototype.flatmap: "npm:^1.3.2" ast-types-flow: "npm:^0.0.8" @@ -8045,17 +7968,17 @@ __metadata: axobject-query: "npm:^4.1.0" damerau-levenshtein: "npm:^1.0.8" emoji-regex: "npm:^9.2.2" - es-iterator-helpers: "npm:^1.0.19" + es-iterator-helpers: "npm:^1.1.0" hasown: "npm:^2.0.2" jsx-ast-utils: "npm:^3.3.5" language-tags: "npm:^1.0.9" minimatch: "npm:^3.1.2" object.fromentries: "npm:^2.0.8" safe-regex-test: "npm:^1.0.3" - string.prototype.includes: "npm:^2.0.0" + string.prototype.includes: "npm:^2.0.1" peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - checksum: 10c0/9f8e29a3317fb6a82e2ecd333fe0fab3a69fff786d087eb65dc723d6e954473ab681d14a252d7cb2971f5e7f68816cb6f7731766558e1833a77bd73af1b5ab34 + checksum: 10c0/25bf28e3db4f6789c5d4f9300fc6fc54faca19ecc537d0f46e9c873f80ed37103a033e1f716f608fab5f5813dd38af65a9a6ae2e29dd079763ce539ebecf998e languageName: node linkType: hard @@ -8068,18 +7991,18 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:^4.6.0": - version: 4.6.2 - resolution: "eslint-plugin-react-hooks@npm:4.6.2" +"eslint-plugin-react-hooks@npm:^5.0.0": + version: 5.0.0 + resolution: "eslint-plugin-react-hooks@npm:5.0.0" peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - checksum: 10c0/4844e58c929bc05157fb70ba1e462e34f1f4abcbc8dd5bbe5b04513d33e2699effb8bca668297976ceea8e7ebee4e8fc29b9af9d131bcef52886feaa2308b2cc + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + checksum: 10c0/bcb74b421f32e4203a7100405b57aab85526be4461e5a1da01bc537969a30012d2ee209a2c2a6cac543833a27188ce1e6ad71e4628d0bb4a2e5365cad86c5002 languageName: node linkType: hard "eslint-plugin-react@npm:^7.33.2": - version: 7.35.2 - resolution: "eslint-plugin-react@npm:7.35.2" + version: 7.37.1 + resolution: "eslint-plugin-react@npm:7.37.1" dependencies: array-includes: "npm:^3.1.8" array.prototype.findlast: "npm:^1.2.5" @@ -8101,7 +8024,7 @@ __metadata: string.prototype.repeat: "npm:^1.0.0" peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - checksum: 10c0/5f891f5a77e902a0ca8d10b23d0b800e90a09400187febe5986c5078d6277baa4b974d6acdbba25baae065dbcf12eb9241b5f5782527d0780314c2ee5006a8af + checksum: 10c0/13cf55666f16d2ca45b14aad1b0e14741d1817679c86d20aff0bc1e802439a8541f40a42c4c8e3486ffb710f1bcc2f3e56697f2b5f724306a7fca174e1ad6433 languageName: node linkType: hard @@ -8140,14 +8063,14 @@ __metadata: linkType: hard "eslint@npm:^8.41.0": - version: 8.57.0 - resolution: "eslint@npm:8.57.0" + version: 8.57.1 + resolution: "eslint@npm:8.57.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.6.1" "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.57.0" - "@humanwhocodes/config-array": "npm:^0.11.14" + "@eslint/js": "npm:8.57.1" + "@humanwhocodes/config-array": "npm:^0.13.0" "@humanwhocodes/module-importer": "npm:^1.0.1" "@nodelib/fs.walk": "npm:^1.2.8" "@ungap/structured-clone": "npm:^1.2.0" @@ -8183,7 +8106,7 @@ __metadata: text-table: "npm:^0.2.0" bin: eslint: bin/eslint.js - checksum: 10c0/00bb96fd2471039a312435a6776fe1fd557c056755eaa2b96093ef3a8508c92c8775d5f754768be6b1dddd09fdd3379ddb231eeb9b6c579ee17ea7d68000a529 + checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 languageName: node linkType: hard @@ -8995,7 +8918,7 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": +"get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": version: 1.2.4 resolution: "get-intrinsic@npm:1.2.4" dependencies: @@ -9190,12 +9113,13 @@ __metadata: languageName: node linkType: hard -"globalthis@npm:^1.0.3": - version: 1.0.3 - resolution: "globalthis@npm:1.0.3" +"globalthis@npm:^1.0.3, globalthis@npm:^1.0.4": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" dependencies: - define-properties: "npm:^1.1.3" - checksum: 10c0/0db6e9af102a5254630351557ac15e6909bc7459d3e3f6b001e59fe784c96d31108818f032d9095739355a88467459e6488ff16584ee6250cd8c27dec05af4b0 + define-properties: "npm:^1.2.1" + gopd: "npm:^1.0.1" + checksum: 10c0/9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846 languageName: node linkType: hard @@ -9426,7 +9350,7 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": +"hoist-non-react-statics@npm:3, hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" dependencies: @@ -9842,7 +9766,7 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.7": +"internal-slot@npm:^1.0.7": version: 1.0.7 resolution: "internal-slot@npm:1.0.7" dependencies: @@ -9867,15 +9791,15 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:10.5.14, intl-messageformat@npm:^10.3.5": - version: 10.5.14 - resolution: "intl-messageformat@npm:10.5.14" +"intl-messageformat@npm:10.7.5, intl-messageformat@npm:^10.3.5": + version: 10.7.5 + resolution: "intl-messageformat@npm:10.7.5" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/fast-memoize": "npm:2.2.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - tslib: "npm:^2.4.0" - checksum: 10c0/8ec0a60539f67039356e211bcc8d81cf1bd9d62190a72ab0e94504da92f0242fe2f94ffb512b97cc6f63782b7891874d4038536ce04631e59d762c3441c60b4b + "@formatjs/ecma402-abstract": "npm:2.2.3" + "@formatjs/fast-memoize": "npm:2.2.3" + "@formatjs/icu-messageformat-parser": "npm:2.9.3" + tslib: "npm:2" + checksum: 10c0/1aa173a8c16ace50520af3de7d3f0ce9bafda90d47b6d674eb88cc47c12c3460d4d53c97ca412fae1141b00abb8ff2ba313250997a040837f01a25379165c949 languageName: node linkType: hard @@ -9958,7 +9882,7 @@ __metadata: languageName: node linkType: hard -"is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.1": +"is-arguments@npm:^1.0.4": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" dependencies: @@ -9968,7 +9892,7 @@ __metadata: languageName: node linkType: hard -"is-array-buffer@npm:^3.0.2, is-array-buffer@npm:^3.0.4": +"is-array-buffer@npm:^3.0.4": version: 3.0.4 resolution: "is-array-buffer@npm:3.0.4" dependencies: @@ -10233,7 +10157,7 @@ __metadata: languageName: node linkType: hard -"is-map@npm:^2.0.1, is-map@npm:^2.0.2": +"is-map@npm:^2.0.1": version: 2.0.3 resolution: "is-map@npm:2.0.3" checksum: 10c0/2c4d431b74e00fdda7162cd8e4b763d6f6f217edf97d4f8538b94b8702b150610e2c64961340015fe8df5b1fcee33ccd2e9b62619c4a8a3a155f8de6d6d355fc @@ -10358,7 +10282,7 @@ __metadata: languageName: node linkType: hard -"is-set@npm:^2.0.1, is-set@npm:^2.0.2": +"is-set@npm:^2.0.1": version: 2.0.3 resolution: "is-set@npm:2.0.3" checksum: 10c0/f73732e13f099b2dc879c2a12341cfc22ccaca8dd504e6edae26484bd5707a35d503fba5b4daad530a9b088ced1ae6c9d8200fd92e09b428fe14ea79ce8080b7 @@ -10585,16 +10509,16 @@ __metadata: languageName: node linkType: hard -"iterator.prototype@npm:^1.1.2": - version: 1.1.2 - resolution: "iterator.prototype@npm:1.1.2" +"iterator.prototype@npm:^1.1.3": + version: 1.1.3 + resolution: "iterator.prototype@npm:1.1.3" dependencies: define-properties: "npm:^1.2.1" get-intrinsic: "npm:^1.2.1" has-symbols: "npm:^1.0.3" reflect.getprototypeof: "npm:^1.0.4" set-function-name: "npm:^2.0.1" - checksum: 10c0/a32151326095e916f306990d909f6bbf23e3221999a18ba686419535dcd1749b10ded505e89334b77dc4c7a58a8508978f0eb16c2c8573e6d412eb7eb894ea79 + checksum: 10c0/68b0320c14291fbb3d8ed5a17e255d3127e7971bec19108076667e79c9ff4c7d69f99de4b0b3075c789c3f318366d7a0a35bb086eae0f2cf832dd58465b2f9e6 languageName: node linkType: hard @@ -11293,12 +11217,15 @@ __metadata: languageName: node linkType: hard -"json-stable-stringify@npm:^1.0.1": - version: 1.0.2 - resolution: "json-stable-stringify@npm:1.0.2" +"json-stable-stringify@npm:1, json-stable-stringify@npm:^1.0.1": + version: 1.1.1 + resolution: "json-stable-stringify@npm:1.1.1" dependencies: + call-bind: "npm:^1.0.5" + isarray: "npm:^2.0.5" jsonify: "npm:^0.0.1" - checksum: 10c0/502d021c3c59c09587faa40d7693d77c00460fd6c68bae95d6e35804909ec8c4aec71b136d3a09df61a7ebf803eb6e820f23ede76b77e74b8b02c76afb2ada8c + object-keys: "npm:^1.1.1" + checksum: 10c0/3801e3eeccbd030afb970f54bea690a079cfea7d9ed206a1b17ca9367f4b7772c764bf77a48f03e56b50e5f7ee7d11c52339fe20d8d7ccead003e4ca69e4cfde languageName: node linkType: hard @@ -12077,15 +12004,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:9.0.3": - version: 9.0.3 - resolution: "minimatch@npm:9.0.3" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/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" @@ -12554,7 +12472,7 @@ __metadata: languageName: node linkType: hard -"object-is@npm:^1.0.1, object-is@npm:^1.1.5": +"object-is@npm:^1.0.1": version: 1.1.6 resolution: "object-is@npm:1.1.6" dependencies: @@ -13155,8 +13073,8 @@ __metadata: linkType: hard "pg@npm:^8.5.0": - version: 8.13.0 - resolution: "pg@npm:8.13.0" + version: 8.13.1 + resolution: "pg@npm:8.13.1" dependencies: pg-cloudflare: "npm:^1.1.1" pg-connection-string: "npm:^2.7.0" @@ -13172,7 +13090,7 @@ __metadata: peerDependenciesMeta: pg-native: optional: true - checksum: 10c0/1521189063d2293d62f3fac61e797a3096a62a69668c223827d00b83c17a320805f31f0b5316feb80f8d9eed0c6c32f95146d8aca866af05816a66fd2ba8e32a + checksum: 10c0/c13bc661cbdb115337bc8519254836faf4bd79106dfd7ed588c8ece8c8b2dd3b7376bfec9a9a2f7646fa095b0b310cec77a83c3ba2ea4872331446eb93fd9055 languageName: node linkType: hard @@ -13185,10 +13103,10 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1, picocolors@npm:^1.1.0": - version: 1.1.0 - resolution: "picocolors@npm:1.1.0" - checksum: 10c0/86946f6032148801ef09c051c6fb13b5cf942eaf147e30ea79edb91dd32d700934edebe782a1078ff859fb2b816792e97ef4dab03d7f0b804f6b01a0df35e023 +"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 languageName: node linkType: hard @@ -13245,13 +13163,12 @@ __metadata: languageName: node linkType: hard -"pino-abstract-transport@npm:^1.0.0, pino-abstract-transport@npm:^1.2.0": - version: 1.2.0 - resolution: "pino-abstract-transport@npm:1.2.0" +"pino-abstract-transport@npm:^2.0.0": + version: 2.0.0 + resolution: "pino-abstract-transport@npm:2.0.0" dependencies: - readable-stream: "npm:^4.0.0" split2: "npm:^4.0.0" - checksum: 10c0/b4ab59529b7a91f488440147fc58ee0827a6c1c5ca3627292339354b1381072c1a6bfa9b46d03ad27872589e8477ecf74da12cf286e1e6b665ac64a3b806bf07 + checksum: 10c0/02c05b8f2ffce0d7c774c8e588f61e8b77de8ccb5f8125afd4a7325c9ea0e6af7fb78168999657712ae843e4462bb70ac550dfd6284f930ee57f17f486f25a9f languageName: node linkType: hard @@ -13268,8 +13185,8 @@ __metadata: linkType: hard "pino-pretty@npm:^11.0.0": - version: 11.2.2 - resolution: "pino-pretty@npm:11.2.2" + version: 11.3.0 + resolution: "pino-pretty@npm:11.3.0" dependencies: colorette: "npm:^2.0.7" dateformat: "npm:^4.6.3" @@ -13279,7 +13196,7 @@ __metadata: joycon: "npm:^3.1.1" minimist: "npm:^1.2.6" on-exit-leak-free: "npm:^2.1.0" - pino-abstract-transport: "npm:^1.0.0" + pino-abstract-transport: "npm:^2.0.0" pump: "npm:^3.0.0" readable-stream: "npm:^4.0.0" secure-json-parse: "npm:^2.4.0" @@ -13287,7 +13204,7 @@ __metadata: strip-json-comments: "npm:^3.1.1" bin: pino-pretty: bin.js - checksum: 10c0/3ce1769907886a5584f6c8123d9bc987712ad10a375797733a0fe95a238df587dac8e2b709bab291c4e30d41b0cf65808c708c96f8eb98b2778b6df60afa7e66 + checksum: 10c0/8e4d842bfce5fa3fc69d3a6adb1bca873051e000f0fb4879ae1cc5d1410387b2464a7208f6ecc70ec49bb149a9617ec233cb3ec7a5f017ec141cb482d79917c2 languageName: node linkType: hard @@ -13299,13 +13216,13 @@ __metadata: linkType: hard "pino@npm:^9.0.0": - version: 9.4.0 - resolution: "pino@npm:9.4.0" + version: 9.5.0 + resolution: "pino@npm:9.5.0" dependencies: atomic-sleep: "npm:^1.0.0" fast-redact: "npm:^3.1.1" on-exit-leak-free: "npm:^2.1.0" - pino-abstract-transport: "npm:^1.2.0" + pino-abstract-transport: "npm:^2.0.0" pino-std-serializers: "npm:^7.0.0" process-warning: "npm:^4.0.0" quick-format-unescaped: "npm:^4.0.3" @@ -13315,7 +13232,7 @@ __metadata: thread-stream: "npm:^3.0.0" bin: pino: bin.js - checksum: 10c0/12a3d74968964d92b18ca7d6095a3c5b86478dc22264a37486d64e102085ed08820fcbe75e640acc3542fdf2937a34e5050b624f98e6ac62dd10f5e1328058a2 + checksum: 10c0/b06590c5f4da43df59905af1aac344432b43154c4c1569ebea168e7ae7fd0a4181ccabb769a6568cf3e781e1d1b9df13d65b3603e25ebb05539bcb02ea04215e languageName: node linkType: hard @@ -13369,14 +13286,14 @@ __metadata: languageName: node linkType: hard -"postcss-attribute-case-insensitive@npm:^7.0.0": - version: 7.0.0 - resolution: "postcss-attribute-case-insensitive@npm:7.0.0" +"postcss-attribute-case-insensitive@npm:^7.0.1": + version: 7.0.1 + resolution: "postcss-attribute-case-insensitive@npm:7.0.1" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/ce2a96bc29f59a6113953f1f72bfa2d4d34e54b194ff4d49aad0d548aa738835afaf479f22060a2605952b842f63aeae278b44e41f8f3a05731df28d08e2df97 + checksum: 10c0/48945abe2024e2d2e4c37d30b8c1aaf37af720f24f6a996f7ea7e7ed33621f5c22cf247ed22028c0c922de040c58c0802729bc39b903cb1693f4b63c0b49da34 languageName: node linkType: hard @@ -13403,18 +13320,18 @@ __metadata: languageName: node linkType: hard -"postcss-color-functional-notation@npm:^7.0.3": - version: 7.0.3 - resolution: "postcss-color-functional-notation@npm:7.0.3" +"postcss-color-functional-notation@npm:^7.0.6": + version: 7.0.6 + resolution: "postcss-color-functional-notation@npm:7.0.6" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.6" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/5e04c81002512c960784043c096bc91ebc76b8fddb9259a2418b0e121eb65042944cc0f78946f6b7e5774ff1fee087849019655e4848af1f88879e3ab9ff7c17 + checksum: 10c0/15f6dfc9a24d6f5186fb054623a92bcf9e804f4eaa35b339551a8048cdb0c7bd2e4655fdbb09a0c9a89f854e9fb1d71e298e8749597660ac034e79bd0d38d7dd languageName: node linkType: hard @@ -13468,57 +13385,57 @@ __metadata: languageName: node linkType: hard -"postcss-custom-media@npm:^11.0.3": - version: 11.0.3 - resolution: "postcss-custom-media@npm:11.0.3" +"postcss-custom-media@npm:^11.0.5": + version: 11.0.5 + resolution: "postcss-custom-media@npm:11.0.5" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" - "@csstools/media-query-list-parser": "npm:^4.0.0" + "@csstools/cascade-layer-name-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/media-query-list-parser": "npm:^4.0.2" peerDependencies: postcss: ^8.4 - checksum: 10c0/bd3f0cf17d7422385d26afed510dc2acebb1d8c25fce13e2bbee1c49cdc7fe95ebe7f50b89ef0a88ebdd5f6826e89d99e26b905881ceff788df655670dba93d8 + checksum: 10c0/5ba1ca0383818e83d5f6f398a2b0c12cfda066b5d552adfc0e030a2c5f8690c2cc6224f9a1832a9c780dae3fd8d00d78c4a5c88eb36b731da1752f0c3917d488 languageName: node linkType: hard -"postcss-custom-properties@npm:^14.0.2": - version: 14.0.2 - resolution: "postcss-custom-properties@npm:14.0.2" +"postcss-custom-properties@npm:^14.0.4": + version: 14.0.4 + resolution: "postcss-custom-properties@npm:14.0.4" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/cascade-layer-name-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/utilities": "npm:^2.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/ea2e0cb60c558bb1afb4e601dcc64a38e1b28e5df3e47b83b858fc12d909d0e3453013e6b368fc05a7db7098ffcdc702a30a92f1a3c0ef67dfb97bf089021f1a + checksum: 10c0/5b101ee71289657cc2e5a16f4912009c10441052e2c54bd9e4f3d4d72b652bab56adb662ddaa96881413e375cf9852e2159b3c778d953442ce86efb781c3b2bf languageName: node linkType: hard -"postcss-custom-selectors@npm:^8.0.2": - version: 8.0.2 - resolution: "postcss-custom-selectors@npm:8.0.2" +"postcss-custom-selectors@npm:^8.0.4": + version: 8.0.4 + resolution: "postcss-custom-selectors@npm:8.0.4" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" - postcss-selector-parser: "npm:^6.1.0" + "@csstools/cascade-layer-name-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/81673ffb0874f63c0f5e14315a5808259ec80ae8452aaf10d28112d30a9aaabbf61d13edb02f8be2965f44b943968c7eda051a1693da436ef157e77fcff0d752 + checksum: 10c0/09d494d2580d0a99f57684f79793d03358286c32460b61a84063c33bdde24865771cb1205efe9a8e26a508be24eba4fb93fc7f1e96ba21ca96a5d17fadb24863 languageName: node linkType: hard -"postcss-dir-pseudo-class@npm:^9.0.0": - version: 9.0.0 - resolution: "postcss-dir-pseudo-class@npm:9.0.0" +"postcss-dir-pseudo-class@npm:^9.0.1": + version: 9.0.1 + resolution: "postcss-dir-pseudo-class@npm:9.0.1" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/debae71bf508c0e494ebb1892ce6b3c1c4eeb6b23231180151a93920a12fec771815510cdec54db54605e090ae56af9f07c68ef6a61260d0c837adc719f9e1e4 + checksum: 10c0/da9d3387648c5c3161a653d354c8f3e70a299108df3977e8aa65cf10793e4dd58a2711b3426cd63716245b13584ca8d95adcd6e10e3c9adbc61d08743e2d8690 languageName: node linkType: hard @@ -13573,25 +13490,25 @@ __metadata: languageName: node linkType: hard -"postcss-focus-visible@npm:^10.0.0": - version: 10.0.0 - resolution: "postcss-focus-visible@npm:10.0.0" +"postcss-focus-visible@npm:^10.0.1": + version: 10.0.1 + resolution: "postcss-focus-visible@npm:10.0.1" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/b86b825bac597092b300127c2686c0669ce0766165716ecda42f298f21ca69dda721e44917732cbcb2611a4ab650f1231bf8c5d4d07c9daefef815329251ae8a + checksum: 10c0/c5ecc8536a708a49a99d0abd68a88a160664e6c832c808db8edd9f0221e7017a258daa87e49daf2cb098cb037005d46cf492403c8c9c92ad8835d30adaccf665 languageName: node linkType: hard -"postcss-focus-within@npm:^9.0.0": - version: 9.0.0 - resolution: "postcss-focus-within@npm:9.0.0" +"postcss-focus-within@npm:^9.0.1": + version: 9.0.1 + resolution: "postcss-focus-within@npm:9.0.1" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/1d6f1b4f4d12e23a2824f394652d520942f00fd582d3016c933a492fe0ba38aaf26bc1855576878aaeaeda1d6fc38da39bb51e8e6470c50ef03f3ea9a286b3d1 + checksum: 10c0/d6ab49d2a7f33485a9e137dc77ec92c5619a3ec92e1e672734fc604853ff1f3c0c189085c12461614be4fcb03ea0347d91791a45986a18d50b5228d161eda57a languageName: node linkType: hard @@ -13625,18 +13542,18 @@ __metadata: languageName: node linkType: hard -"postcss-lab-function@npm:^7.0.3": - version: 7.0.3 - resolution: "postcss-lab-function@npm:7.0.3" +"postcss-lab-function@npm:^7.0.6": + version: 7.0.6 + resolution: "postcss-lab-function@npm:7.0.6" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.6" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/c50a73a9ed54b4194998c4627599d1f42074235f572edbbcdb0e00717f3ae2121dc8378d917792b281860c5650a617d923823da6f395515f610b5760d115354d + checksum: 10c0/8b8d498dbc939ee79737b29232b39d09cbda26cc92e8926fb74fe56a1bb05af1198e85a67a822f39cc69109ac6757a6ff7b20842ba5ffafce891abc9bc1c3c68 languageName: node linkType: hard @@ -13793,16 +13710,16 @@ __metadata: languageName: node linkType: hard -"postcss-nesting@npm:^13.0.0": - version: 13.0.0 - resolution: "postcss-nesting@npm:13.0.0" +"postcss-nesting@npm:^13.0.1": + version: 13.0.1 + resolution: "postcss-nesting@npm:13.0.1" dependencies: - "@csstools/selector-resolve-nested": "npm:^2.0.0" - "@csstools/selector-specificity": "npm:^4.0.0" - postcss-selector-parser: "npm:^6.1.0" + "@csstools/selector-resolve-nested": "npm:^3.0.0" + "@csstools/selector-specificity": "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/b82a3c7010f7c6097bd3f3fe6c03f3f3af9a63a58e255f120dadd506a0ea9444aeeaba994f2a3fa34fb26e666dc72032edf5786c5fbdade790b02ad07d91ef95 + checksum: 10c0/549307c272cdd4cb5105d8fbcd582f15a1cb74e5bba240b05b27f77fe0422730be966699a49a9ad15fd9d1bc551c1edbaefb21a69686a9b131b585dbc9d90ebf languageName: node linkType: hard @@ -13957,84 +13874,86 @@ __metadata: linkType: hard "postcss-preset-env@npm:^10.0.0": - version: 10.0.7 - resolution: "postcss-preset-env@npm:10.0.7" + version: 10.1.0 + resolution: "postcss-preset-env@npm:10.1.0" dependencies: - "@csstools/postcss-cascade-layers": "npm:^5.0.0" - "@csstools/postcss-color-function": "npm:^4.0.3" - "@csstools/postcss-color-mix-function": "npm:^3.0.3" - "@csstools/postcss-content-alt-text": "npm:^2.0.2" - "@csstools/postcss-exponential-functions": "npm:^2.0.2" + "@csstools/postcss-cascade-layers": "npm:^5.0.1" + "@csstools/postcss-color-function": "npm:^4.0.6" + "@csstools/postcss-color-mix-function": "npm:^3.0.6" + "@csstools/postcss-content-alt-text": "npm:^2.0.4" + "@csstools/postcss-exponential-functions": "npm:^2.0.5" "@csstools/postcss-font-format-keywords": "npm:^4.0.0" - "@csstools/postcss-gamut-mapping": "npm:^2.0.3" - "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.3" - "@csstools/postcss-hwb-function": "npm:^4.0.3" + "@csstools/postcss-gamut-mapping": "npm:^2.0.6" + "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.6" + "@csstools/postcss-hwb-function": "npm:^4.0.6" "@csstools/postcss-ic-unit": "npm:^4.0.0" "@csstools/postcss-initial": "npm:^2.0.0" - "@csstools/postcss-is-pseudo-class": "npm:^5.0.0" - "@csstools/postcss-light-dark-function": "npm:^2.0.5" + "@csstools/postcss-is-pseudo-class": "npm:^5.0.1" + "@csstools/postcss-light-dark-function": "npm:^2.0.7" "@csstools/postcss-logical-float-and-clear": "npm:^3.0.0" "@csstools/postcss-logical-overflow": "npm:^2.0.0" "@csstools/postcss-logical-overscroll-behavior": "npm:^2.0.0" "@csstools/postcss-logical-resize": "npm:^3.0.0" - "@csstools/postcss-logical-viewport-units": "npm:^3.0.2" - "@csstools/postcss-media-minmax": "npm:^2.0.2" - "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.2" + "@csstools/postcss-logical-viewport-units": "npm:^3.0.3" + "@csstools/postcss-media-minmax": "npm:^2.0.5" + "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.4" "@csstools/postcss-nested-calc": "npm:^4.0.0" "@csstools/postcss-normalize-display-values": "npm:^4.0.0" - "@csstools/postcss-oklab-function": "npm:^4.0.3" + "@csstools/postcss-oklab-function": "npm:^4.0.6" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" - "@csstools/postcss-relative-color-syntax": "npm:^3.0.3" - "@csstools/postcss-scope-pseudo-class": "npm:^4.0.0" - "@csstools/postcss-stepped-value-functions": "npm:^4.0.2" + "@csstools/postcss-random-function": "npm:^1.0.0" + "@csstools/postcss-relative-color-syntax": "npm:^3.0.6" + "@csstools/postcss-scope-pseudo-class": "npm:^4.0.1" + "@csstools/postcss-sign-functions": "npm:^1.0.0" + "@csstools/postcss-stepped-value-functions": "npm:^4.0.5" "@csstools/postcss-text-decoration-shorthand": "npm:^4.0.1" - "@csstools/postcss-trigonometric-functions": "npm:^4.0.2" + "@csstools/postcss-trigonometric-functions": "npm:^4.0.5" "@csstools/postcss-unset-value": "npm:^4.0.0" autoprefixer: "npm:^10.4.19" browserslist: "npm:^4.23.1" - css-blank-pseudo: "npm:^7.0.0" - css-has-pseudo: "npm:^7.0.0" + css-blank-pseudo: "npm:^7.0.1" + css-has-pseudo: "npm:^7.0.1" css-prefers-color-scheme: "npm:^10.0.0" - cssdb: "npm:^8.1.1" - postcss-attribute-case-insensitive: "npm:^7.0.0" + cssdb: "npm:^8.2.1" + postcss-attribute-case-insensitive: "npm:^7.0.1" postcss-clamp: "npm:^4.1.0" - postcss-color-functional-notation: "npm:^7.0.3" + postcss-color-functional-notation: "npm:^7.0.6" postcss-color-hex-alpha: "npm:^10.0.0" postcss-color-rebeccapurple: "npm:^10.0.0" - postcss-custom-media: "npm:^11.0.3" - postcss-custom-properties: "npm:^14.0.2" - postcss-custom-selectors: "npm:^8.0.2" - postcss-dir-pseudo-class: "npm:^9.0.0" + postcss-custom-media: "npm:^11.0.5" + postcss-custom-properties: "npm:^14.0.4" + postcss-custom-selectors: "npm:^8.0.4" + postcss-dir-pseudo-class: "npm:^9.0.1" postcss-double-position-gradients: "npm:^6.0.0" - postcss-focus-visible: "npm:^10.0.0" - postcss-focus-within: "npm:^9.0.0" + postcss-focus-visible: "npm:^10.0.1" + postcss-focus-within: "npm:^9.0.1" postcss-font-variant: "npm:^5.0.0" postcss-gap-properties: "npm:^6.0.0" postcss-image-set-function: "npm:^7.0.0" - postcss-lab-function: "npm:^7.0.3" + postcss-lab-function: "npm:^7.0.6" postcss-logical: "npm:^8.0.0" - postcss-nesting: "npm:^13.0.0" + postcss-nesting: "npm:^13.0.1" postcss-opacity-percentage: "npm:^3.0.0" postcss-overflow-shorthand: "npm:^6.0.0" postcss-page-break: "npm:^3.0.4" postcss-place: "npm:^10.0.0" - postcss-pseudo-class-any-link: "npm:^10.0.0" + postcss-pseudo-class-any-link: "npm:^10.0.1" postcss-replace-overflow-wrap: "npm:^4.0.0" - postcss-selector-not: "npm:^8.0.0" + postcss-selector-not: "npm:^8.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/f789000e0504fd827e854bb0feb8b4c218d381314e4d863c5a36df925df412d0844c912952fe27892a320433640aeaff03ee94a3057b42011bf5d32b3963f333 + checksum: 10c0/bd157dbed38c3c125b3bf86f5437a8094539ec5bf24428487c7bbf29da393731e48053afc695494cc9dbe4d182cfe405c398fcf0b22eb326b6db395e7315f892 languageName: node linkType: hard -"postcss-pseudo-class-any-link@npm:^10.0.0": - version: 10.0.0 - resolution: "postcss-pseudo-class-any-link@npm:10.0.0" +"postcss-pseudo-class-any-link@npm:^10.0.1": + version: 10.0.1 + resolution: "postcss-pseudo-class-any-link@npm:10.0.1" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/8357716e0ba0f01c70dba65a1efd268f610249ac2fbd41833e5e87dc19ffa7911c8d5e234d0d7c77d94ba6cdfa04fe7f0f98461c34f64cdbb59abd9737ab7d32 + checksum: 10c0/95e883996e87baf14fc09d25f9a763a2e9d599eb3b9c6b736e83a8c3d0b55841bcb886bccdf51b5b7fefc128cbd0187ad8841f59878f85bd1613642e592d7673 languageName: node linkType: hard @@ -14095,18 +14014,18 @@ __metadata: languageName: node linkType: hard -"postcss-selector-not@npm:^8.0.0": - version: 8.0.0 - resolution: "postcss-selector-not@npm:8.0.0" +"postcss-selector-not@npm:^8.0.1": + version: 8.0.1 + resolution: "postcss-selector-not@npm:8.0.1" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/677f2cd9d0cd481d276663b57001b2ba96db94ad5bba397f277e53d560ccb074b27c21792deff44720a9f2d96da85fa34f438bb1d33198305b5866b35f1a4708 + checksum: 10c0/491ea3dcc421cd90135be786078521605e2062fb93624ea8813cfd5ba0d35143f931e2e608d5f20effd5ea7d3f4786d2afea2afa42d117779a0288e135f132b6 languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.0, postcss-selector-parser@npm:^6.1.2": +"postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.2": version: 6.1.2 resolution: "postcss-selector-parser@npm:6.1.2" dependencies: @@ -14116,6 +14035,16 @@ __metadata: languageName: node linkType: hard +"postcss-selector-parser@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-selector-parser@npm:7.0.0" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10c0/e96e096afcce70bf5c97789f5ea09d7415ae5eb701d82b05b5e8532885d31363b484fcb1ca9488c9a331f30508d9e5bb6c3109eb2eb5067ef3d3919f9928cd9d + languageName: node + linkType: hard + "postcss-svgo@npm:^7.0.1": version: 7.0.1 resolution: "postcss-svgo@npm:7.0.1" @@ -14147,13 +14076,13 @@ __metadata: linkType: hard "postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.47": - version: 8.4.47 - resolution: "postcss@npm:8.4.47" + version: 8.4.49 + resolution: "postcss@npm:8.4.49" dependencies: nanoid: "npm:^3.3.7" - picocolors: "npm:^1.1.0" + picocolors: "npm:^1.1.1" source-map-js: "npm:^1.2.1" - checksum: 10c0/929f68b5081b7202709456532cee2a145c1843d391508c5a09de2517e8c4791638f71dd63b1898dba6712f8839d7a6da046c72a5e44c162e908f5911f57b5f44 + checksum: 10c0/f1b3f17aaf36d136f59ec373459f18129908235e65dbdc3aee5eef8eba0756106f52de5ec4682e29a2eab53eb25170e7e871b3e4b52a8f1de3d344a514306be3 languageName: node linkType: hard @@ -14597,26 +14526,26 @@ __metadata: linkType: hard "react-intl@npm:^6.4.2": - version: 6.7.0 - resolution: "react-intl@npm:6.7.0" + version: 6.8.6 + resolution: "react-intl@npm:6.8.6" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - "@formatjs/intl": "npm:2.10.5" - "@formatjs/intl-displaynames": "npm:6.6.8" - "@formatjs/intl-listformat": "npm:7.5.7" - "@types/hoist-non-react-statics": "npm:^3.3.1" + "@formatjs/ecma402-abstract": "npm:2.2.3" + "@formatjs/icu-messageformat-parser": "npm:2.9.3" + "@formatjs/intl": "npm:2.10.13" + "@formatjs/intl-displaynames": "npm:6.8.3" + "@formatjs/intl-listformat": "npm:7.7.3" + "@types/hoist-non-react-statics": "npm:3" "@types/react": "npm:16 || 17 || 18" - hoist-non-react-statics: "npm:^3.3.2" - intl-messageformat: "npm:10.5.14" - tslib: "npm:^2.4.0" + hoist-non-react-statics: "npm:3" + intl-messageformat: "npm:10.7.5" + tslib: "npm:2" peerDependencies: react: ^16.6.0 || 17 || 18 typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/210088bf0e934ad5f09d8e7c6d7d72682bb806583645fb333d4efd8ae55585b675ea8e47bb240140d5143ca15ecc0457c3ddc3e8ca45e9b576bce1fa2f9886b3 + checksum: 10c0/ec88cc2b1d0edf089f04c8061ffda730840fb3317177d0dc1a6df208245ec278f52b4ca8546ff9511b0b28ff2d89863c5837a274d33731d4c8f75a3b3baafbe2 languageName: node linkType: hard @@ -14777,8 +14706,8 @@ __metadata: linkType: hard "react-select@npm:^5.7.3": - version: 5.8.1 - resolution: "react-select@npm:5.8.1" + version: 5.8.3 + resolution: "react-select@npm:5.8.3" dependencies: "@babel/runtime": "npm:^7.12.0" "@emotion/cache": "npm:^11.4.0" @@ -14792,7 +14721,7 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/0fd73e1e472105f980e09c86f0e6adbdc9f2f5c1befa275b08c71653becdd1829f596155a81b5085cb86f18b20bf4f4cc439ab5fe23e68f326e169dcfe00ccf6 + checksum: 10c0/25aaf0ad964a31dcf991be8b9eb478f94b2ff5dfd2e74a894f692c6dec9247f6ded6258fbf875984d2ada5aeb0ee742b85c6a94f58fae89112e913526cfd0577 languageName: node linkType: hard @@ -14882,15 +14811,15 @@ __metadata: linkType: hard "react-textarea-autosize@npm:^8.4.1": - version: 8.5.3 - resolution: "react-textarea-autosize@npm:8.5.3" + version: 8.5.5 + resolution: "react-textarea-autosize@npm:8.5.5" dependencies: "@babel/runtime": "npm:^7.20.13" use-composed-ref: "npm:^1.3.0" use-latest: "npm:^1.2.1" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/33d38a6d96cf584842695b50c341980944ece23a42155bf0bd1958f02396adb185c7720b88678dc677817fe111783059c0ebcdf7761644006892583b10e258ee + checksum: 10c0/d708a31b39a409d0246cd8afbd956ce51db58ce0b6411b9d4e1dc876ce93c329d20875933ce5d337662fdcd3699596966dc630149236fee2835d74e302404c98 languageName: node linkType: hard @@ -15134,7 +15063,7 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.2": +"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.5.2": version: 1.5.2 resolution: "regexp.prototype.flags@npm:1.5.2" dependencies: @@ -16352,15 +16281,6 @@ __metadata: languageName: node linkType: hard -"stop-iteration-iterator@npm:^1.0.0": - version: 1.0.0 - resolution: "stop-iteration-iterator@npm:1.0.0" - dependencies: - internal-slot: "npm:^1.0.4" - checksum: 10c0/c4158d6188aac510d9e92925b58709207bd94699e9c31186a040c80932a687f84a51356b5895e6dc72710aad83addb9411c22171832c9ae0e6e11b7d61b0dfb9 - languageName: node - linkType: hard - "stream-browserify@npm:^2.0.1": version: 2.0.2 resolution: "stream-browserify@npm:2.0.2" @@ -16445,13 +16365,14 @@ __metadata: languageName: node linkType: hard -"string.prototype.includes@npm:^2.0.0": - version: 2.0.0 - resolution: "string.prototype.includes@npm:2.0.0" +"string.prototype.includes@npm:^2.0.1": + version: 2.0.1 + resolution: "string.prototype.includes@npm:2.0.1" dependencies: - define-properties: "npm:^1.1.3" - es-abstract: "npm:^1.17.5" - checksum: 10c0/32dff118c9e9dcc87e240b05462fa8ee7248d9e335c0015c1442fe18152261508a2146d9bb87ddae56abab69148a83c61dfaea33f53853812a6a2db737689ed2 + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.3" + checksum: 10c0/25ce9c9b49128352a2618fbe8758b46f945817a58a4420f4799419e40a8d28f116e176c7590d767d5327a61e75c8f32c86171063f48e389b9fdd325f1bd04ee5 languageName: node linkType: hard @@ -17155,13 +17076,6 @@ __metadata: languageName: node linkType: hard -"to-fast-properties@npm:^2.0.0": - version: 2.0.0 - resolution: "to-fast-properties@npm:2.0.0" - checksum: 10c0/b214d21dbfb4bce3452b6244b336806ffea9c05297148d32ebb428d5c43ce7545bdfc65a1ceb58c9ef4376a65c0cb2854d645f33961658b3e3b4f84910ddcdd7 - languageName: node - linkType: hard - "to-object-path@npm:^0.3.0": version: 0.3.0 resolution: "to-object-path@npm:0.3.0" @@ -17271,7 +17185,7 @@ __metadata: languageName: node linkType: hard -"ts-api-utils@npm:^1.0.1, ts-api-utils@npm:^1.3.0": +"ts-api-utils@npm:^1.3.0": version: 1.3.0 resolution: "ts-api-utils@npm:1.3.0" peerDependencies: @@ -17292,17 +17206,10 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.6.2": - version: 2.6.2 - resolution: "tslib@npm:2.6.2" - checksum: 10c0/e03a8a4271152c8b26604ed45535954c0a45296e32445b4b87f8a5abdb2421f40b59b4ca437c4346af0f28179780d604094eb64546bee2019d903d01c6c19bdb - languageName: node - linkType: hard - -"tslib@npm:^2.0.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2": - version: 2.7.0 - resolution: "tslib@npm:2.7.0" - checksum: 10c0/469e1d5bf1af585742128827000711efa61010b699cb040ab1800bcd3ccdd37f63ec30642c9e07c4439c1db6e46345582614275daca3e0f4abae29b0083f04a6 +"tslib@npm:2, tslib@npm:^2.0.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2, tslib@npm:^2.7.0": + version: 2.8.0 + resolution: "tslib@npm:2.8.0" + checksum: 10c0/31e4d14dc1355e9b89e4d3c893a18abb7f90b6886b089c2da91224d0a7752c79f3ddc41bc1aa0a588ac895bd97bb99c5bc2bfdb2f86de849f31caeb3ba79bbe5 languageName: node linkType: hard @@ -17484,6 +17391,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~6.19.8": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: 10c0/078afa5990fba110f6824823ace86073b4638f1d5112ee26e790155f481f2a868cc3e0615505b6f4282bdf74a3d8caad715fd809e870c2bb0704e3ea6082f344 + languageName: node + linkType: hard + "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" @@ -17737,12 +17651,12 @@ __metadata: linkType: hard "utf-8-validate@npm:^6.0.3": - version: 6.0.4 - resolution: "utf-8-validate@npm:6.0.4" + version: 6.0.5 + resolution: "utf-8-validate@npm:6.0.5" dependencies: node-gyp: "npm:latest" node-gyp-build: "npm:^4.3.0" - checksum: 10c0/f7042d94aec6ca02461b64e725bdc7262266610dbb787331e5bbd49374ef6f75fe9900600df3fc63d97906c23614a965c8989b4bf95d70bf35dc617da99215e7 + checksum: 10c0/6dc63c513adb001e47a51819072cdd414158430091c49c21d4947ea99f16df5167b671f680df8fb2b6f2ae6a7f30264b4ec111bd3e573720dfe371da1ab99a81 languageName: node linkType: hard @@ -17790,12 +17704,12 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^10.0.0": - version: 10.0.0 - resolution: "uuid@npm:10.0.0" +"uuid@npm:^11.0.0": + version: 11.0.3 + resolution: "uuid@npm:11.0.3" bin: - uuid: dist/bin/uuid - checksum: 10c0/eab18c27fe4ab9fb9709a5d5f40119b45f2ec8314f8d4cf12ce27e4c6f4ffa4a6321dc7db6c515068fa373c075b49691ba969f0010bf37f44c37ca40cd6bf7fe + uuid: dist/esm/bin/uuid + checksum: 10c0/cee762fc76d949a2ff9205770334699e0043d52bb766472593a25f150077c9deed821230251ea3d6ab3943a5ea137d2826678797f1d5f6754c7ce5ce27e9f7a6 languageName: node linkType: hard @@ -18296,7 +18210,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.9": +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.9": version: 1.1.15 resolution: "which-typed-array@npm:1.1.15" dependencies: @@ -18356,28 +18270,28 @@ __metadata: languageName: node linkType: hard -"workbox-background-sync@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-background-sync@npm:7.1.0" +"workbox-background-sync@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-background-sync@npm:7.3.0" dependencies: idb: "npm:^7.0.1" - workbox-core: "npm:7.1.0" - checksum: 10c0/9538c49a377d8eb06acee3848fbca09bac1940a2ca9e904fed765c39aa32f77c20d72c3ba6fa1eb47bee81289b1d527556a1cd3e02728960a4c40400ce6d0e91 + workbox-core: "npm:7.3.0" + checksum: 10c0/cc982d62702847fb16c4ef372a8bd243348a80c2d5da1649a860b0187b45060a799a65582c2d36f1a32e31d5d68dedcb037698c41d3b2f171ea5d54d73453cf1 languageName: node linkType: hard -"workbox-broadcast-update@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-broadcast-update@npm:7.1.0" +"workbox-broadcast-update@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-broadcast-update@npm:7.3.0" dependencies: - workbox-core: "npm:7.1.0" - checksum: 10c0/4a6e201cedcbc11b9d2f63f63477ba4564a35ce07bd54640198db6ff6a3b8347a65e0b4973c8f8463e8a622fd1ad93d7b3bab42338608811d23c7db01fef475e + workbox-core: "npm:7.3.0" + checksum: 10c0/25007acd3e845b5ca1f4c9ac9888ce661431723f7419cfa56b3029b6c56cbeca24902dae015c42a2d6f554f956274743e331d03ceeb4b0e3879cb7b908d0e82f languageName: node linkType: hard -"workbox-build@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-build@npm:7.1.0" +"workbox-build@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-build@npm:7.3.0" dependencies: "@apideck/better-ajv-errors": "npm:^0.3.1" "@babel/core": "npm:^7.24.4" @@ -18401,163 +18315,163 @@ __metadata: strip-comments: "npm:^2.0.1" tempy: "npm:^0.6.0" upath: "npm:^1.2.0" - workbox-background-sync: "npm:7.1.0" - workbox-broadcast-update: "npm:7.1.0" - workbox-cacheable-response: "npm:7.1.0" - workbox-core: "npm:7.1.0" - workbox-expiration: "npm:7.1.0" - workbox-google-analytics: "npm:7.1.0" - workbox-navigation-preload: "npm:7.1.0" - workbox-precaching: "npm:7.1.0" - workbox-range-requests: "npm:7.1.0" - workbox-recipes: "npm:7.1.0" - workbox-routing: "npm:7.1.0" - workbox-strategies: "npm:7.1.0" - workbox-streams: "npm:7.1.0" - workbox-sw: "npm:7.1.0" - workbox-window: "npm:7.1.0" - checksum: 10c0/c482fde713bad582bd7d4861113d7367ab4722eba9c102864c71048815792c623e9117a8f79957e0388d0c08e8303962d1fb23931456da73909e87d06638d101 + workbox-background-sync: "npm:7.3.0" + workbox-broadcast-update: "npm:7.3.0" + workbox-cacheable-response: "npm:7.3.0" + workbox-core: "npm:7.3.0" + workbox-expiration: "npm:7.3.0" + workbox-google-analytics: "npm:7.3.0" + workbox-navigation-preload: "npm:7.3.0" + workbox-precaching: "npm:7.3.0" + workbox-range-requests: "npm:7.3.0" + workbox-recipes: "npm:7.3.0" + workbox-routing: "npm:7.3.0" + workbox-strategies: "npm:7.3.0" + workbox-streams: "npm:7.3.0" + workbox-sw: "npm:7.3.0" + workbox-window: "npm:7.3.0" + checksum: 10c0/cb396f9c2a53429d1e11b4c1da2e21c9e1c98473ce15f20ae53277e47bd7ccbcb3f1f843694e588bb70b12d9332faafd098ca05b93abb0293d373f38a8de3ca8 languageName: node linkType: hard -"workbox-cacheable-response@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-cacheable-response@npm:7.1.0" +"workbox-cacheable-response@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-cacheable-response@npm:7.3.0" dependencies: - workbox-core: "npm:7.1.0" - checksum: 10c0/52ea73bb184c9ef9280cc8f00a1ab7d103d495e12a7a6378fae02fd0aa1a9b893aac5d8074f14ed8c198527123e4401f4703fbfd2be98e184ca783b9216cb4c5 + workbox-core: "npm:7.3.0" + checksum: 10c0/192c8a8878c53a205c55398bac78f2c32c0f36e55c95cab282d8a716ddf2fa72563afaed690d34d3438cc8df5fb0df4d98dcb2d93cc6d67c69a9ae592f7bf246 languageName: node linkType: hard -"workbox-core@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-core@npm:7.1.0" - checksum: 10c0/fb0b6e23a52e085da00b7a74b1f1854f06c695eb2bd4c244aa335165f59156a4febb4f116b9893b9fb7e0e8bac092d32eecceb4d00f930a93f64737cb2be9531 +"workbox-core@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-core@npm:7.3.0" + checksum: 10c0/b7dce640cd9665ed207f65f5b08a50e2e24e5599790c6ea4fec987539b9d2ef81765d8c5f94acfee3a8a45d5ade8e1a4ebd0b8847a1471302ef75a5b93c7bd04 languageName: node linkType: hard -"workbox-expiration@npm:7.1.0, workbox-expiration@npm:^7.0.0": - version: 7.1.0 - resolution: "workbox-expiration@npm:7.1.0" +"workbox-expiration@npm:7.3.0, workbox-expiration@npm:^7.0.0": + version: 7.3.0 + resolution: "workbox-expiration@npm:7.3.0" dependencies: idb: "npm:^7.0.1" - workbox-core: "npm:7.1.0" - checksum: 10c0/669d76f87c1550ce9b425232c3202a26fdea4c4c9bdc1b71c1cee741a5d011423098994452e508576174d3c0b4bec0f4b35012b6d7257e300684c87fdddb7949 + workbox-core: "npm:7.3.0" + checksum: 10c0/6040d72122ece901becfcc59974586e9cc9b6309840b83b652c9f9aafe32ff89783404a431cadf6f888f80e5371252820e425ced499742964d6d68687f6fad1a languageName: node linkType: hard -"workbox-google-analytics@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-google-analytics@npm:7.1.0" +"workbox-google-analytics@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-google-analytics@npm:7.3.0" dependencies: - workbox-background-sync: "npm:7.1.0" - workbox-core: "npm:7.1.0" - workbox-routing: "npm:7.1.0" - workbox-strategies: "npm:7.1.0" - checksum: 10c0/4178d94fb7f3f7b789f117c104b2ff33945256dc550418b0e9c81130c1e2c2bcd72ec6a1661d91326c04de360e6592edd505f0e2142e8e1043fe0c45f9c1a3fe + workbox-background-sync: "npm:7.3.0" + workbox-core: "npm:7.3.0" + workbox-routing: "npm:7.3.0" + workbox-strategies: "npm:7.3.0" + checksum: 10c0/5317a4bcc01f1aa87480f9708d7d382c15fb37d6119e71e0a2909dfd683f6060b5cc4f7b016a81fc67098f51a5d0cfd1cda20e228f2f3778ee3caf649b59996b languageName: node linkType: hard -"workbox-navigation-preload@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-navigation-preload@npm:7.1.0" +"workbox-navigation-preload@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-navigation-preload@npm:7.3.0" dependencies: - workbox-core: "npm:7.1.0" - checksum: 10c0/b667a3ba0cae4d43a53a6e211f0f33f6ebc1d9fec6cbb93de83f72a37b81cc39d887b969db9b1cd5c396a1ce34636c89c3b157cc64a5265635d0b274e362db0e + workbox-core: "npm:7.3.0" + checksum: 10c0/69e4d43c68c06889987e9fa437995378b0632c83bad8c7044b4ed812b05b94b3a4aa8700ea4c26b2ecf68ee6858e94ff41dfa3279815c1bc385ac19c0edfb200 languageName: node linkType: hard -"workbox-precaching@npm:7.1.0, workbox-precaching@npm:^7.0.0": - version: 7.1.0 - resolution: "workbox-precaching@npm:7.1.0" +"workbox-precaching@npm:7.3.0, workbox-precaching@npm:^7.0.0": + version: 7.3.0 + resolution: "workbox-precaching@npm:7.3.0" dependencies: - workbox-core: "npm:7.1.0" - workbox-routing: "npm:7.1.0" - workbox-strategies: "npm:7.1.0" - checksum: 10c0/53b2d0a658109b4d83ee2b1913f884ee1c757a12b8931a7102272bd1e228d29f9430e7d060f328f465bca2aa24bf0719d026eef4f4d21395fa1f678f8d6a3c06 + workbox-core: "npm:7.3.0" + workbox-routing: "npm:7.3.0" + workbox-strategies: "npm:7.3.0" + checksum: 10c0/15c4c5cf5dfec684711ce3536bbfa6873f7af16b712d02ded81d3ff490ea4097e46602705548f5872c49f06e3516fd69f17e72a7fc60631ff6d68460e48f7648 languageName: node linkType: hard -"workbox-range-requests@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-range-requests@npm:7.1.0" +"workbox-range-requests@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-range-requests@npm:7.3.0" dependencies: - workbox-core: "npm:7.1.0" - checksum: 10c0/bf4aa597d04cbb533796af64f4006a1f472f8a14ea91f96fe37b2d5e63ffe86dcb944dab9a41317e69d368d83bee20f03ff32b339ae5addef50f325703ad4b77 + workbox-core: "npm:7.3.0" + checksum: 10c0/d48e1484866442864d66b1891c4965b71e997a83a7634f11452ec1a73a30a5e642e6a95d5cff45578bef4dec7a5f57bc598aeedb6189d17ca210e2c5f2898244 languageName: node linkType: hard -"workbox-recipes@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-recipes@npm:7.1.0" +"workbox-recipes@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-recipes@npm:7.3.0" dependencies: - workbox-cacheable-response: "npm:7.1.0" - workbox-core: "npm:7.1.0" - workbox-expiration: "npm:7.1.0" - workbox-precaching: "npm:7.1.0" - workbox-routing: "npm:7.1.0" - workbox-strategies: "npm:7.1.0" - checksum: 10c0/5a8c2444f6338c6092be87cc6fd69c8b0cbb413bfc0a11a8f10961bfb2b8059359c4be0264ffa0c01deff3ab5dba15bbcf61d4dedbc93d8bfe1f8a2841b1657c + workbox-cacheable-response: "npm:7.3.0" + workbox-core: "npm:7.3.0" + workbox-expiration: "npm:7.3.0" + workbox-precaching: "npm:7.3.0" + workbox-routing: "npm:7.3.0" + workbox-strategies: "npm:7.3.0" + checksum: 10c0/c8146ece4247cbcbefba36a14f2cb65b5f74b2412f64cfc7955ff75ff653857161a1f1d94c987fbae4812f5b770eedcf99af965e512cc375fbc7fb5421bdc99c languageName: node linkType: hard -"workbox-routing@npm:7.1.0, workbox-routing@npm:^7.0.0": - version: 7.1.0 - resolution: "workbox-routing@npm:7.1.0" +"workbox-routing@npm:7.3.0, workbox-routing@npm:^7.0.0": + version: 7.3.0 + resolution: "workbox-routing@npm:7.3.0" dependencies: - workbox-core: "npm:7.1.0" - checksum: 10c0/efd630fff594bd50276770840bce274660972587e79c097a9f1a84e8347351736aac13f11c6d7655ff550b13195d370d5c3b81a075bf452f358fc144ee868ad9 + workbox-core: "npm:7.3.0" + checksum: 10c0/8ac1824211d0fbe0e916ecb2c2427bcb0ef8783f9225d8114fe22e6c326f2d8a040a089bead58064e8b096ec95abe070c04cd7353dd8830dba3ab8d608a053aa languageName: node linkType: hard -"workbox-strategies@npm:7.1.0, workbox-strategies@npm:^7.0.0": - version: 7.1.0 - resolution: "workbox-strategies@npm:7.1.0" +"workbox-strategies@npm:7.3.0, workbox-strategies@npm:^7.0.0": + version: 7.3.0 + resolution: "workbox-strategies@npm:7.3.0" dependencies: - workbox-core: "npm:7.1.0" - checksum: 10c0/b08712a69b1b13e354345cc228c29f0c759043f7ca7cf6ce9b82fe79c9d423142bfa4a118f91f1a57054047a730127fa4474d59d9306fb2ed42fe9ef568be01a + workbox-core: "npm:7.3.0" + checksum: 10c0/50f3c28b46b54885a9461ad6559010d9abb2a7e35e0128d05c268f3ea0a96b1a747934758121d0e821f7af63946d9db8f4d2d7e0146f12555fb05c768e6b82bb languageName: node linkType: hard -"workbox-streams@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-streams@npm:7.1.0" +"workbox-streams@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-streams@npm:7.3.0" dependencies: - workbox-core: "npm:7.1.0" - workbox-routing: "npm:7.1.0" - checksum: 10c0/1d75c046fcb7b25e1cf85457e3610309dd5513f68752ef333529fcf155df2114b72f3d6f416bb68393e51b5396e3f6df7171e8e2889d0e9e1805e315754b771e + workbox-core: "npm:7.3.0" + workbox-routing: "npm:7.3.0" + checksum: 10c0/2ae541343d187eb7a50da2cfd74051f15771d1ddd1cad6856ffd530f7cccdb8eed9a8af94ff7540b710fef73eeec37d652123ae42b0206fbbd0679dc25e66ff4 languageName: node linkType: hard -"workbox-sw@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-sw@npm:7.1.0" - checksum: 10c0/2084f1b58c8509d7ca53ce8a13d93e57d1f13307e0279fedc87942e83c8cb96bc2e5ed3992a89af6245ad2a66897a92908cb60d0717fb90492056eb6fbf20dc6 +"workbox-sw@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-sw@npm:7.3.0" + checksum: 10c0/9ae275e31dd5ec51245773b6d90fda16d0b7f70d59f3a71aec732814b5aedf08aedc7fcce57739e7e89d9e1479ef97e3a202a542a511d732cf5e8b5d1c293870 languageName: node linkType: hard "workbox-webpack-plugin@npm:^7.0.0": - version: 7.1.0 - resolution: "workbox-webpack-plugin@npm:7.1.0" + version: 7.3.0 + resolution: "workbox-webpack-plugin@npm:7.3.0" dependencies: fast-json-stable-stringify: "npm:^2.1.0" pretty-bytes: "npm:^5.4.1" upath: "npm:^1.2.0" webpack-sources: "npm:^1.4.3" - workbox-build: "npm:7.1.0" + workbox-build: "npm:7.3.0" peerDependencies: webpack: ^4.4.0 || ^5.91.0 - checksum: 10c0/516fa68a6a6958ee1560299dd1146032dda68474a2ab01643cbde78fc65b75a3157aef60cb45dcc1984cc458ce44d4e3090cda08dd7cefd0952351270e963a00 + checksum: 10c0/dd3625544fe08b099fd2b783584c6c2c5da3f0e0c3096fc1a86a0b96a26df5055dd178d3c60ab4cde4099474ab23d51c292356c6910dfa16a974c8a95f351c93 languageName: node linkType: hard -"workbox-window@npm:7.1.0, workbox-window@npm:^7.0.0": - version: 7.1.0 - resolution: "workbox-window@npm:7.1.0" +"workbox-window@npm:7.3.0, workbox-window@npm:^7.0.0": + version: 7.3.0 + resolution: "workbox-window@npm:7.3.0" dependencies: "@types/trusted-types": "npm:^2.0.2" - workbox-core: "npm:7.1.0" - checksum: 10c0/c989a6e3a0488f049eead3892f8249387604fb04898aa79d0cf14cd7b684f0758f1edf1996745f4755bd30c31c449f628803e507d39b2ea91cc9c36f7d5e9c72 + workbox-core: "npm:7.3.0" + checksum: 10c0/dbda33c4761ec40051cfe6e3f1701b2381b4f3b191f7a249c32f683503ea35cf8b42d1f99df5ba3b693fac78705d8ed0c191488bdd178c525d1291d0161ec8ff languageName: node linkType: hard