~cytrogen/masto-fe

01d6f7529faef97c0209ef11bbca2e856961bbab — Claire 3 years ago cbdb25a + c6c03b4
Merge branch 'main' into glitch-soc/merge-upstream

Conflicts:
- `README.md`:
  Upstream added a link to the roadmap, but we have a completely different README.
  Kept ours.
- `app/models/media_attachment.rb`:
  Upstream upped media attachment limits.
  Updated the default according to upstream's.
- `db/migrate/20180831171112_create_bookmarks.rb`:
  Upstream changed the migration compatibility level.
  Did so too.
- `config/initializers/content_security_policy.rb`:
  Upstream refactored this file but we have a different version.
  Kept our version.
- `app/controllers/settings/preferences_controller.rb`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  The file does not directly references individual settings anymore.
  Applied upstream changes.
- `app/lib/user_settings_decorator.rb`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  The file got removed entirely.
  Removed it as well.
- `app/models/user.rb`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  References to individual settings have been removed from the file.
  Removed them as well.
- `app/views/settings/preferences/appearance/show.html.haml`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  Applied upstream's changes and ported ours back.
- `app/views/settings/preferences/notifications/show.html.haml`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  Applied upstream's changes and ported ours back.
- `app/views/settings/preferences/other/show.html.haml`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  Applied upstream's changes and ported ours back.
- `config/settings.yml`:
  Upstream completely refactored user settings storage, and glitch-soc has a
  different set of settings.
  In particular, upstream removed user-specific and unused settings.
  Did the same in glitch-soc.
- `spec/controllers/application_controller_spec.rb`:
  Conflicts due to glitch-soc's theming system.
  Mostly kept our version, as upstream messed up the tests.
341 files changed, 4049 insertions(+), 2750 deletions(-)

D .codeclimate.yml
M .devcontainer/devcontainer.json
M .devcontainer/docker-compose.yml
M .devcontainer/post-create.sh
M .github/workflows/lint-haml.yml
M .github/workflows/test-migrations-one-step.yml
M .github/workflows/test-migrations-two-step.yml
M .github/workflows/test-ruby.yml
A .husky/pre-commit
M .rubocop.yml
M .rubocop_todo.yml
M .ruby-version
M .yarnclean
M Dockerfile
M Gemfile
M Gemfile.lock
M app/controllers/api/v1/accounts/credentials_controller.rb
M app/controllers/api/v1/streaming_controller.rb
M app/controllers/backups_controller.rb
M app/controllers/concerns/account_controller_concern.rb
M app/controllers/media_proxy_controller.rb
M app/controllers/settings/preferences_controller.rb
M app/controllers/statuses_controller.rb
M app/javascript/mastodon/actions/compose.js
M app/javascript/mastodon/components/account.jsx
M app/javascript/mastodon/components/status.jsx
M app/javascript/mastodon/components/status_action_bar.jsx
M app/javascript/mastodon/features/account/components/header.jsx
M app/javascript/mastodon/features/direct_timeline/index.jsx
M app/javascript/mastodon/features/explore/index.jsx
M app/javascript/mastodon/features/getting_started/index.jsx
M app/javascript/mastodon/features/status/components/action_bar.jsx
M app/javascript/mastodon/features/status/components/detailed_status.jsx
M app/javascript/mastodon/features/status/index.jsx
M app/javascript/mastodon/features/ui/components/navigation_panel.jsx
M app/javascript/mastodon/locales/af.json
M app/javascript/mastodon/locales/an.json
M app/javascript/mastodon/locales/ar.json
M app/javascript/mastodon/locales/ast.json
M app/javascript/mastodon/locales/be.json
M app/javascript/mastodon/locales/bg.json
M app/javascript/mastodon/locales/bn.json
M app/javascript/mastodon/locales/br.json
M app/javascript/mastodon/locales/bs.json
M app/javascript/mastodon/locales/ca.json
M app/javascript/mastodon/locales/ckb.json
M app/javascript/mastodon/locales/co.json
M app/javascript/mastodon/locales/cs.json
M app/javascript/mastodon/locales/csb.json
M app/javascript/mastodon/locales/cy.json
M app/javascript/mastodon/locales/da.json
M app/javascript/mastodon/locales/de.json
M app/javascript/mastodon/locales/defaultMessages.json
M app/javascript/mastodon/locales/el.json
M app/javascript/mastodon/locales/en-GB.json
M app/javascript/mastodon/locales/en.json
M app/javascript/mastodon/locales/eo.json
M app/javascript/mastodon/locales/es-AR.json
M app/javascript/mastodon/locales/es-MX.json
M app/javascript/mastodon/locales/es.json
M app/javascript/mastodon/locales/et.json
M app/javascript/mastodon/locales/eu.json
M app/javascript/mastodon/locales/fa.json
M app/javascript/mastodon/locales/fi.json
M app/javascript/mastodon/locales/fo.json
M app/javascript/mastodon/locales/fr-QC.json
M app/javascript/mastodon/locales/fr.json
M app/javascript/mastodon/locales/fy.json
M app/javascript/mastodon/locales/ga.json
M app/javascript/mastodon/locales/gd.json
M app/javascript/mastodon/locales/gl.json
M app/javascript/mastodon/locales/he.json
M app/javascript/mastodon/locales/hi.json
M app/javascript/mastodon/locales/hr.json
M app/javascript/mastodon/locales/hu.json
M app/javascript/mastodon/locales/hy.json
M app/javascript/mastodon/locales/id.json
M app/javascript/mastodon/locales/ig.json
M app/javascript/mastodon/locales/io.json
M app/javascript/mastodon/locales/is.json
M app/javascript/mastodon/locales/it.json
M app/javascript/mastodon/locales/ja.json
M app/javascript/mastodon/locales/ka.json
M app/javascript/mastodon/locales/kab.json
M app/javascript/mastodon/locales/kk.json
M app/javascript/mastodon/locales/kn.json
M app/javascript/mastodon/locales/ko.json
M app/javascript/mastodon/locales/ku.json
M app/javascript/mastodon/locales/kw.json
M app/javascript/mastodon/locales/la.json
M app/javascript/mastodon/locales/lt.json
M app/javascript/mastodon/locales/lv.json
M app/javascript/mastodon/locales/mk.json
M app/javascript/mastodon/locales/ml.json
M app/javascript/mastodon/locales/mr.json
M app/javascript/mastodon/locales/ms.json
M app/javascript/mastodon/locales/my.json
M app/javascript/mastodon/locales/nl.json
M app/javascript/mastodon/locales/nn.json
M app/javascript/mastodon/locales/no.json
M app/javascript/mastodon/locales/oc.json
M app/javascript/mastodon/locales/pa.json
M app/javascript/mastodon/locales/pl.json
M app/javascript/mastodon/locales/pt-BR.json
M app/javascript/mastodon/locales/pt-PT.json
M app/javascript/mastodon/locales/ro.json
M app/javascript/mastodon/locales/ru.json
M app/javascript/mastodon/locales/sa.json
M app/javascript/mastodon/locales/sc.json
M app/javascript/mastodon/locales/sco.json
M app/javascript/mastodon/locales/si.json
M app/javascript/mastodon/locales/sk.json
M app/javascript/mastodon/locales/sl.json
M app/javascript/mastodon/locales/sq.json
M app/javascript/mastodon/locales/sr-Latn.json
M app/javascript/mastodon/locales/sr.json
M app/javascript/mastodon/locales/sv.json
M app/javascript/mastodon/locales/szl.json
M app/javascript/mastodon/locales/ta.json
M app/javascript/mastodon/locales/tai.json
M app/javascript/mastodon/locales/te.json
M app/javascript/mastodon/locales/th.json
M app/javascript/mastodon/locales/tr.json
M app/javascript/mastodon/locales/tt.json
M app/javascript/mastodon/locales/ug.json
M app/javascript/mastodon/locales/uk.json
M app/javascript/mastodon/locales/ur.json
M app/javascript/mastodon/locales/uz.json
M app/javascript/mastodon/locales/vi.json
M app/javascript/mastodon/locales/zgh.json
M app/javascript/mastodon/locales/zh-CN.json
M app/javascript/mastodon/locales/zh-HK.json
M app/javascript/mastodon/locales/zh-TW.json
M app/javascript/mastodon/performance.js
D app/javascript/mastodon/utils/resize_image.js
M app/javascript/styles/mastodon-light/diff.scss
M app/javascript/styles/mastodon/about.scss
M app/javascript/styles/mastodon/accounts.scss
M app/javascript/styles/mastodon/admin.scss
M app/javascript/styles/mastodon/basics.scss
M app/javascript/styles/mastodon/components.scss
M app/javascript/styles/mastodon/containers.scss
M app/javascript/styles/mastodon/emoji_picker.scss
M app/javascript/styles/mastodon/forms.scss
M app/javascript/styles/mastodon/modal.scss
M app/javascript/styles/mastodon/polls.scss
M app/javascript/styles/mastodon/rich_text.scss
M app/javascript/styles/mastodon/rtl.scss
M app/javascript/styles/mastodon/statuses.scss
M app/javascript/styles/mastodon/tables.scss
M app/javascript/styles/mastodon/widgets.scss
M app/lib/admin/metrics/retention.rb
D app/lib/user_settings_decorator.rb
A app/lib/user_settings_serializer.rb
M app/models/account.rb
M app/models/account_stat.rb
M app/models/admin/action_log.rb
M app/models/backup.rb
M app/models/concerns/attachmentable.rb
A app/models/concerns/has_user_settings.rb
M app/models/custom_filter.rb
M app/models/email_domain_block.rb
M app/models/media_attachment.rb
M app/models/preview_card.rb
M app/models/report.rb
M app/models/status_edit.rb
M app/models/user.rb
A app/models/user_settings.rb
A app/models/user_settings/dsl.rb
A app/models/user_settings/glue.rb
A app/models/user_settings/namespace.rb
A app/models/user_settings/setting.rb
M app/serializers/rest/admin/webhook_event_serializer.rb
M app/services/notify_service.rb
M app/services/update_status_service.rb
A app/views/kaminari/_gap.html.haml
M app/views/settings/login_activities/_login_activity.html.haml
M app/views/settings/preferences/appearance/show.html.haml
M app/views/settings/preferences/notifications/show.html.haml
M app/views/settings/preferences/other/show.html.haml
M app/workers/poll_expiration_notify_worker.rb
M app/workers/scheduler/indexing_scheduler.rb
M config/initializers/inflections.rb
M config/initializers/paperclip.rb
M config/locales/activerecord.fi.yml
M config/locales/an.yml
M config/locales/ar.yml
M config/locales/ast.yml
M config/locales/be.yml
M config/locales/bg.yml
M config/locales/br.yml
M config/locales/ca.yml
M config/locales/ckb.yml
M config/locales/co.yml
M config/locales/cs.yml
M config/locales/cy.yml
M config/locales/da.yml
M config/locales/de.yml
M config/locales/devise.fi.yml
M config/locales/devise.hu.yml
M config/locales/devise.zh-TW.yml
M config/locales/doorkeeper.fi.yml
M config/locales/doorkeeper.gl.yml
M config/locales/doorkeeper.ko.yml
M config/locales/doorkeeper.th.yml
M config/locales/el.yml
M config/locales/en-GB.yml
M config/locales/eo.yml
M config/locales/es-AR.yml
M config/locales/es-MX.yml
M config/locales/es.yml
M config/locales/et.yml
M config/locales/eu.yml
M config/locales/fa.yml
M config/locales/fi.yml
M config/locales/fo.yml
M config/locales/fr-QC.yml
M config/locales/fr.yml
M config/locales/fy.yml
M config/locales/gd.yml
M config/locales/gl.yml
M config/locales/he.yml
M config/locales/hi.yml
M config/locales/hu.yml
M config/locales/hy.yml
M config/locales/id.yml
M config/locales/io.yml
M config/locales/is.yml
M config/locales/it.yml
M config/locales/ja.yml
M config/locales/kk.yml
M config/locales/ko.yml
M config/locales/ku.yml
M config/locales/lt.yml
M config/locales/lv.yml
M config/locales/my.yml
M config/locales/nl.yml
M config/locales/nn.yml
M config/locales/no.yml
M config/locales/oc.yml
M config/locales/pl.yml
M config/locales/pt-BR.yml
M config/locales/pt-PT.yml
M config/locales/ro.yml
M config/locales/ru.yml
M config/locales/sc.yml
M config/locales/sco.yml
M config/locales/si.yml
M config/locales/simple_form.fi.yml
M config/locales/simple_form.my.yml
M config/locales/simple_form.pt-BR.yml
M config/locales/simple_form.th.yml
M config/locales/simple_form.zh-TW.yml
M config/locales/sk.yml
M config/locales/sl.yml
M config/locales/sq.yml
M config/locales/sr-Latn.yml
M config/locales/sr.yml
M config/locales/sv.yml
M config/locales/th.yml
M config/locales/tr.yml
M config/locales/uk.yml
M config/locales/vi.yml
M config/locales/zh-CN.yml
M config/locales/zh-HK.yml
M config/locales/zh-TW.yml
M config/settings.yml
M db/migrate/20170918125918_ids_to_bigints.rb
M db/migrate/20170927215609_add_description_to_media_attachments.rb
M db/migrate/20170928082043_create_email_domain_blocks.rb
M db/migrate/20171005102658_create_account_moderation_notes.rb
M db/migrate/20171005171936_add_disabled_to_custom_emojis.rb
M db/migrate/20171006142024_add_uri_to_custom_emojis.rb
M db/migrate/20171010023049_add_foreign_key_to_account_moderation_notes.rb
M db/migrate/20171010025614_change_accounts_nonnullable_in_account_moderation_notes.rb
M db/migrate/20171020084748_add_visible_in_picker_to_custom_emoji.rb
M db/migrate/20171028221157_add_reblogs_to_follows.rb
M db/migrate/20171107143332_add_memorial_to_accounts.rb
M db/migrate/20171107143624_add_disabled_to_users.rb
M db/migrate/20171109012327_add_moderator_to_accounts.rb
M db/migrate/20171114080328_add_index_domain_to_email_domain_blocks.rb
M db/migrate/20171114231651_create_lists.rb
M db/migrate/20171116161857_create_list_accounts.rb
M db/migrate/20171118012443_add_moved_to_account_id_to_accounts.rb
M db/migrate/20171119172437_create_admin_action_logs.rb
M db/migrate/20171122120436_add_index_account_and_reblog_of_id_to_statuses.rb
M db/migrate/20171125024930_create_invites.rb
M db/migrate/20171125031751_add_invite_id_to_users.rb
M db/migrate/20171125185353_add_index_reblog_of_id_and_account_to_statuses.rb
M db/migrate/20171125190735_remove_old_reblog_index_on_statuses.rb
M db/migrate/20171129172043_add_index_on_stream_entries.rb
M db/migrate/20171130000000_add_embed_url_to_preview_cards.rb
M db/migrate/20171201000000_change_account_id_nonnullable_in_lists.rb
M db/migrate/20171212195226_remove_duplicate_indexes_in_lists.rb
M db/migrate/20171226094803_more_faster_index_on_notifications.rb
M db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb
M db/migrate/20180109143959_add_remember_token_to_users.rb
M db/migrate/20180204034416_create_identities.rb
M db/migrate/20180206000000_change_user_id_nonnullable.rb
M db/migrate/20180211015820_create_backups.rb
M db/migrate/20180304013859_add_featured_collection_url_to_accounts.rb
M db/migrate/20180310000000_change_columns_in_notifications_nonnullable.rb
M db/migrate/20180402031200_add_assigned_account_id_to_reports.rb
M db/migrate/20180402040909_create_report_notes.rb
M db/migrate/20180410204633_add_fields_to_accounts.rb
M db/migrate/20180514130000_improve_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb
M db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb
M db/migrate/20180528141303_fix_accounts_unique_index.rb
M db/migrate/20180831171112_create_bookmarks.rb
M db/migrate/20181024224956_migrate_account_conversations.rb
M db/migrate/20191031163205_change_list_account_follow_nullable.rb
M db/migrate/20200622213645_media_attachment_ids_to_timestamp_ids.rb
M db/migrate/20200917192924_add_notify_to_follows.rb
M db/migrate/20210306164523_account_ids_to_timestamp_ids.rb
A db/migrate/20230215074327_add_settings_to_users.rb
A db/migrate/20230215074423_move_user_settings.rb
M db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb
M db/post_migrate/20210308133107_remove_subscription_expires_at_from_accounts.rb
M db/schema.rb
M db/seeds.rb
M dist/nginx.conf
A lib/mastodon/migration_warning.rb
M lib/tasks/tests.rake
M package.json
M spec/controllers/api/v1/accounts/credentials_controller_spec.rb
M spec/controllers/application_controller_spec.rb
M spec/controllers/settings/preferences/notifications_controller_spec.rb
M spec/controllers/settings/preferences/other_controller_spec.rb
M spec/controllers/settings/profiles_controller_spec.rb
D spec/lib/settings/extend_spec.rb
D spec/lib/settings/scoped_settings_spec.rb
D spec/lib/user_settings_decorator_spec.rb
A spec/models/user_settings/namespace_spec.rb
A spec/models/user_settings/setting_spec.rb
A spec/models/user_settings_spec.rb
M spec/models/user_spec.rb
M spec/services/notify_service_spec.rb
M spec/services/report_service_spec.rb
M spec/services/update_status_service_spec.rb
M spec/workers/poll_expiration_notify_worker_spec.rb
M yarn.lock
D .codeclimate.yml => .codeclimate.yml +0 -39
@@ 1,39 0,0 @@
version: '2'
checks:
  argument-count:
    enabled: false
  complex-logic:
    enabled: false
  file-lines:
    enabled: false
  method-complexity:
    enabled: false
  method-count:
    enabled: false
  method-lines:
    enabled: false
  nested-control-flow:
    enabled: false
  return-statements:
    enabled: false
  similar-code:
    enabled: false
  identical-code:
    enabled: false
plugins:
  brakeman:
    enabled: true
  bundler-audit:
    enabled: false
  eslint:
    enabled: false
  rubocop:
    enabled: false
  sass-lint:
    enabled: false
exclude_patterns:
  - spec/
  - vendor/asset/

  - app/javascript/mastodon/locales/**/*.json
  - config/locales/**/*.yml

M .devcontainer/devcontainer.json => .devcontainer/devcontainer.json +1 -0
@@ 15,6 15,7 @@
  "forwardPorts": [3000, 4000],

  // Use 'postCreateCommand' to run commands after the container is created.
  "onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
  "postCreateCommand": ".devcontainer/post-create.sh",
  "waitFor": "postCreateCommand",


M .devcontainer/docker-compose.yml => .devcontainer/docker-compose.yml +10 -2
@@ 10,7 10,7 @@ services:
    environment:
      RAILS_ENV: development
      NODE_ENV: development

      BIND: 0.0.0.0
      REDIS_HOST: redis
      REDIS_PORT: '6379'
      DB_HOST: db


@@ 23,6 23,10 @@ services:
      LIBRE_TRANSLATE_ENDPOINT: http://libretranslate:5000
    # Overrides default command so things don't shut down after the process ends.
    command: sleep infinity
    ports:
      - '127.0.0.1:3000:3000'
      - '127.0.0.1:4000:4000'
      - '127.0.0.1:80:3000'
    networks:
      - external_network
      - internal_network


@@ 66,15 70,19 @@ services:
        hard: -1

  libretranslate:
    image: libretranslate/libretranslate:v1.2.9
    image: libretranslate/libretranslate:v1.3.10
    restart: unless-stopped
    volumes:
      - lt-data:/home/libretranslate/.local
    networks:
      - external_network
      - internal_network

volumes:
  postgres-data:
  redis-data:
  es-data:
  lt-data:

networks:
  external_network:

M .devcontainer/post-create.sh => .devcontainer/post-create.sh +3 -0
@@ 14,6 14,9 @@ git checkout -- Gemfile.lock
# [re]create, migrate, and seed the test database
RAILS_ENV=test ./bin/rails db:setup

# [re]create, migrate, and seed the development database
RAILS_ENV=development ./bin/rails db:setup

# Precompile assets for development
RAILS_ENV=development ./bin/rails assets:precompile


M .github/workflows/lint-haml.yml => .github/workflows/lint-haml.yml +3 -1
@@ 30,7 30,9 @@ jobs:
        uses: actions/checkout@v3

      - name: Install native Ruby dependencies
        run: sudo apt-get install -y libicu-dev libidn11-dev
        run: |
          sudo apt-get update
          sudo apt-get install -y libicu-dev libidn11-dev

      - name: Set up Ruby
        uses: ruby/setup-ruby@v1

M .github/workflows/test-migrations-one-step.yml => .github/workflows/test-migrations-one-step.yml +4 -2
@@ 16,7 16,7 @@ jobs:
      - id: skip_check
        uses: fkirc/skip-duplicate-actions@v5
        with:
          paths: '["Gemfile*", ".ruby-version", "**/*.rb", ".github/workflows/test-migrations-one-step.yml"]'
          paths: '["Gemfile*", ".ruby-version", "**/*.rb", ".github/workflows/test-migrations-one-step.yml", "lib/tasks/tests.rake"]'

  test:
    runs-on: ubuntu-latest


@@ 64,7 64,9 @@ jobs:
      - uses: actions/checkout@v3

      - name: Install native Ruby dependencies
        run: sudo apt-get install -y libicu-dev libidn11-dev
        run: |
          sudo apt-get update
          sudo apt-get install -y libicu-dev libidn11-dev

      - name: Set up bundler cache
        uses: ruby/setup-ruby@v1

M .github/workflows/test-migrations-two-step.yml => .github/workflows/test-migrations-two-step.yml +4 -2
@@ 16,7 16,7 @@ jobs:
      - id: skip_check
        uses: fkirc/skip-duplicate-actions@v5
        with:
          paths: '["Gemfile*", ".ruby-version", "**/*.rb", ".github/workflows/test-migrations-two-step.yml"]'
          paths: '["Gemfile*", ".ruby-version", "**/*.rb", ".github/workflows/test-migrations-two-step.yml", "lib/tasks/tests.rake"]'

  test:
    runs-on: ubuntu-latest


@@ 63,7 63,9 @@ jobs:
      - uses: actions/checkout@v3

      - name: Install native Ruby dependencies
        run: sudo apt-get install -y libicu-dev libidn11-dev
        run: |
          sudo apt-get update
          sudo apt-get install -y libicu-dev libidn11-dev

      - name: Set up bundler cache
        uses: ruby/setup-ruby@v1

M .github/workflows/test-ruby.yml => .github/workflows/test-ruby.yml +6 -1
@@ 32,7 32,9 @@ jobs:
          node-version-file: '.nvmrc'

      - name: Install native Ruby dependencies
        run: sudo apt-get install -y libicu-dev libidn11-dev
        run: |
          sudo apt-get update
          sudo apt-get install -y libicu-dev libidn11-dev

      - name: Set up bundler cache
        uses: ruby/setup-ruby@v1


@@ 119,6 121,9 @@ jobs:
          path: './public'
          name: ${{ github.sha }}

      - name: Update package index
        run: sudo apt-get update

      - name: Install native Ruby dependencies
        run: sudo apt-get install -y libicu-dev libidn11-dev


A .husky/pre-commit => .husky/pre-commit +4 -0
@@ 0,0 1,4 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

yarn lint-staged

M .rubocop.yml => .rubocop.yml +81 -7
@@ 1,5 1,7 @@
# Can be removed once all rules are addressed or moved to this file as documented overrides
inherit_from: .rubocop_todo.yml

# Used for merging with exclude lists with .rubocop_todo.yml
inherit_mode:
  merge:
    - Exclude


@@ 11,13 13,13 @@ require:
  - rubocop-capybara

AllCops:
  TargetRubyVersion: 2.7
  TargetRubyVersion: 2.7 # Set to minimum supported version of CI
  DisplayCopNames: true
  DisplayStyleGuide: true
  ExtraDetails: true
  UseCache: true
  CacheRootDirectory: tmp
  NewCops: enable
  NewCops: enable # Opt-in to newly added rules
  Exclude:
    - db/schema.rb
    - 'bin/*'


@@ 25,12 27,16 @@ AllCops:
    - 'node_modules/**/*'
    - 'Vagrantfile'
    - 'vendor/**/*'
    - 'lib/json_ld/*'
    - 'lib/json_ld/*' # Generated files
    - 'lib/templates/**/*'

# Reason: Prefer Hashes without extreme indentation
# https://docs.rubocop.org/rubocop/cops_layout.html#layoutfirsthashelementindentation
Layout/FirstHashElementIndentation:
  EnforcedStyle: consistent

# Reason: Currently disabled in .rubocop_todo.yml
# https://docs.rubocop.org/rubocop/cops_layout.html#layoutlinelength
Layout/LineLength:
  AllowedPatterns:
    # Allow comments to be long lines


@@ 41,20 47,50 @@ Layout/LineLength:
    - db/*migrate/**/*
    - db/seeds/**/*

# Reason:
# https://docs.rubocop.org/rubocop/cops_lint.html#lintuselessaccessmodifier
Lint/UselessAccessModifier:
  ContextCreatingMethods:
    - class_methods

# Reason: Currently disabled in .rubocop_todo.yml
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsabcsize
Metrics/AbcSize:
  Exclude:
    - 'lib/**/*cli*.rb'
    - db/*migrate/**/*

# Reason: Some functions cannot be broken up, but others may be refactor candidates
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsblocklength
Metrics/BlockLength:
  CountAsOne: [array, heredoc]
  CountAsOne: ['array', 'hash', 'heredoc', 'method_call']
  Exclude:
    - 'lib/mastodon/*_cli.rb'
    - 'lib/tasks/*.rake'
    - 'app/models/concerns/account_associations.rb'
    - 'app/models/concerns/account_interactions.rb'
    - 'app/models/concerns/ldap_authenticable.rb'
    - 'app/models/concerns/omniauthable.rb'
    - 'app/models/concerns/pam_authenticable.rb'
    - 'app/models/concerns/remotable.rb'
    - 'app/services/suspend_account_service.rb'
    - 'app/services/unsuspend_account_service.rb'
    - 'app/views/accounts/show.rss.ruby'
    - 'app/views/tags/show.rss.ruby'
    - 'config/environments/development.rb'
    - 'config/environments/production.rb'
    - 'config/initializers/devise.rb'
    - 'config/initializers/doorkeeper.rb'
    - 'config/initializers/omniauth.rb'
    - 'config/initializers/simple_form.rb'
    - 'config/navigation.rb'
    - 'config/routes.rb'
    - 'db/post_migrate/20221101190723_backfill_admin_action_logs.rb'
    - 'db/post_migrate/20221206114142_backfill_admin_action_logs_again.rb'
    - 'lib/paperclip/gif_transcoder.rb'

# Reason:
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsblocknesting
Metrics/BlockNesting:
  Exclude:
    - 'lib/mastodon/*_cli.rb'


@@ 103,22 139,32 @@ Metrics/ClassLength:
    - 'app/services/update_status_service.rb'
    - 'lib/paperclip/color_extractor.rb'

# Reason: Currently disabled in .rubocop_todo.yml
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricscyclomaticcomplexity
Metrics/CyclomaticComplexity:
  Exclude:
    - lib/mastodon/*cli*.rb
    - db/*migrate/**/*

# Reason: Currently disabled in .rubocop_todo.yml
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsmethodlength
Metrics/MethodLength:
  CountAsOne: [array, heredoc]
  Exclude:
    - 'lib/mastodon/*_cli.rb'

# Reason:
# https://docs.rubocop.org/rubocop/cops_style.html#stylerescuestandarderror
Metrics/ModuleLength:
  CountAsOne: [array, heredoc]

# Reason: Prevailing style uses numeric status codes, matches RSpec/Rails/HttpStatus
# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railshttpstatus
Rails/HttpStatus:
  EnforcedStyle: numeric

# Reason: Allowed only in the `tootctl` CLI application code
# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsexit
Rails/Exit:
  Exclude:
    - 'lib/mastodon/*_cli.rb'


@@ 146,9 192,18 @@ RSpec/FilePath:
    - 'spec/controllers/concerns/signature_verification_spec.rb'
    - 'spec/controllers/concerns/user_tracking_concern_spec.rb'

# Reason:
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecnamedsubject
RSpec/NamedSubject:
  EnforcedStyle: named_only

# Reason: Prevailing style choice
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecnottonot
RSpec/NotToNot:
  EnforcedStyle: to_not

# Reason: Prevailing style uses numeric status codes, matches Rails/HttpStatus
# https://docs.rubocop.org/rubocop-rspec/cops_rspec_rails.html#rspecrailshttpstatus
RSpec/Rails/HttpStatus:
  EnforcedStyle: numeric



@@ 162,26 217,45 @@ Style/ClassAndModuleChildren:
Style/Documentation:
  Enabled: false

# Reason: Enforce modern Ruby style
# https://docs.rubocop.org/rubocop/cops_style.html#stylehashsyntax
Style/HashSyntax:
  EnforcedStyle: ruby19_no_mixed_keys

# Reason:
# https://docs.rubocop.org/rubocop/cops_style.html#stylenumericliterals
Style/NumericLiterals:
  AllowedPatterns:
    - \d{4}_\d{2}_\d{2}_\d{6} # For DB migration date version number readability

# Reason:
# https://docs.rubocop.org/rubocop/cops_style.html#stylepercentliteraldelimiters
Style/PercentLiteralDelimiters:
  PreferredDelimiters:
    '%i': '()'
    '%w': '()'

# Reason: Prefer less indentation in conditional assignments
# https://docs.rubocop.org/rubocop/cops_style.html#styleredundantbegin
Style/RedundantBegin:
  Enabled: false

# Reason: Overridden to reduce implicit StandardError rescues
# https://docs.rubocop.org/rubocop/cops_style.html#stylerescuestandarderror
Style/RescueStandardError:
  EnforcedStyle: implicit

# Reason: Originally disabled for CodeClimate, and no config consensus has been found
# https://docs.rubocop.org/rubocop/cops_style.html#stylesymbolarray
Style/SymbolArray:
  Enabled: false

# Reason:
# https://docs.rubocop.org/rubocop/cops_style.html#styletrailingcommainarrayliteral
Style/TrailingCommaInArrayLiteral:
  EnforcedStyleForMultiline: 'comma'

# Reason:
# https://docs.rubocop.org/rubocop/cops_style.html#styletrailingcommainhashliteral
Style/TrailingCommaInHashLiteral:
  EnforcedStyleForMultiline: 'comma'

Style/SymbolArray:
  Enabled: false

M .rubocop_todo.yml => .rubocop_todo.yml +1 -229
@@ 117,7 117,6 @@ Lint/ConstantDefinitionInBlock:
    - 'spec/lib/activitypub/adapter_spec.rb'
    - 'spec/lib/connection_pool/shared_connection_pool_spec.rb'
    - 'spec/lib/connection_pool/shared_timed_stack_spec.rb'
    - 'spec/lib/settings/extend_spec.rb'
    - 'spec/models/concerns/remotable_spec.rb'

# Configuration parameters: IgnoreLiteralBranches, IgnoreConstantBranches.


@@ 233,11 232,6 @@ Lint/Void:
Metrics/AbcSize:
  Max: 150

# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns, inherit_mode.
# AllowedMethods: refine
Metrics/BlockLength:
  Max: 544

# Configuration parameters: CountBlocks, Max.
Metrics/BlockNesting:
  Exclude:


@@ 259,6 253,7 @@ Metrics/ModuleLength:
    - 'app/helpers/jsonld_helper.rb'
    - 'app/helpers/statuses_helper.rb'
    - 'app/models/concerns/account_interactions.rb'
    - 'app/models/concerns/has_user_settings.rb'

# Configuration parameters: Max, CountKeywordArgs, MaxOptionalParameters.
Metrics/ParameterLists:


@@ 730,7 725,6 @@ RSpec/LeakyConstantDeclaration:
    - 'spec/lib/activitypub/adapter_spec.rb'
    - 'spec/lib/connection_pool/shared_connection_pool_spec.rb'
    - 'spec/lib/connection_pool/shared_timed_stack_spec.rb'
    - 'spec/lib/settings/extend_spec.rb'
    - 'spec/models/concerns/remotable_spec.rb'

RSpec/LetSetup:


@@ 880,204 874,6 @@ RSpec/MultipleSubjects:
    - 'spec/controllers/follower_accounts_controller_spec.rb'
    - 'spec/controllers/following_accounts_controller_spec.rb'

# Configuration parameters: EnforcedStyle, IgnoreSharedExamples.
# SupportedStyles: always, named_only
RSpec/NamedSubject:
  Exclude:
    - 'spec/controllers/admin/account_moderation_notes_controller_spec.rb'
    - 'spec/controllers/admin/accounts_controller_spec.rb'
    - 'spec/controllers/admin/confirmations_controller_spec.rb'
    - 'spec/controllers/admin/custom_emojis_controller_spec.rb'
    - 'spec/controllers/admin/domain_blocks_controller_spec.rb'
    - 'spec/controllers/admin/instances_controller_spec.rb'
    - 'spec/controllers/admin/invites_controller_spec.rb'
    - 'spec/controllers/admin/report_notes_controller_spec.rb'
    - 'spec/controllers/api/v1/accounts/notes_controller_spec.rb'
    - 'spec/controllers/api/v1/accounts/pins_controller_spec.rb'
    - 'spec/controllers/api/v1/admin/domain_blocks_controller_spec.rb'
    - 'spec/controllers/auth/passwords_controller_spec.rb'
    - 'spec/controllers/auth/registrations_controller_spec.rb'
    - 'spec/controllers/home_controller_spec.rb'
    - 'spec/controllers/invites_controller_spec.rb'
    - 'spec/controllers/oauth/authorizations_controller_spec.rb'
    - 'spec/controllers/oauth/authorized_applications_controller_spec.rb'
    - 'spec/controllers/relationships_controller_spec.rb'
    - 'spec/controllers/settings/featured_tags_controller_spec.rb'
    - 'spec/controllers/settings/migrations_controller_spec.rb'
    - 'spec/controllers/settings/sessions_controller_spec.rb'
    - 'spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb'
    - 'spec/controllers/well_known/webfinger_controller_spec.rb'
    - 'spec/features/log_in_spec.rb'
    - 'spec/features/profile_spec.rb'
    - 'spec/lib/activitypub/activity/accept_spec.rb'
    - 'spec/lib/activitypub/activity/add_spec.rb'
    - 'spec/lib/activitypub/activity/announce_spec.rb'
    - 'spec/lib/activitypub/activity/block_spec.rb'
    - 'spec/lib/activitypub/activity/create_spec.rb'
    - 'spec/lib/activitypub/activity/delete_spec.rb'
    - 'spec/lib/activitypub/activity/flag_spec.rb'
    - 'spec/lib/activitypub/activity/follow_spec.rb'
    - 'spec/lib/activitypub/activity/like_spec.rb'
    - 'spec/lib/activitypub/activity/move_spec.rb'
    - 'spec/lib/activitypub/activity/reject_spec.rb'
    - 'spec/lib/activitypub/activity/remove_spec.rb'
    - 'spec/lib/activitypub/activity/undo_spec.rb'
    - 'spec/lib/activitypub/activity/update_spec.rb'
    - 'spec/lib/activitypub/adapter_spec.rb'
    - 'spec/lib/activitypub/dereferencer_spec.rb'
    - 'spec/lib/activitypub/linked_data_signature_spec.rb'
    - 'spec/lib/activitypub/tag_manager_spec.rb'
    - 'spec/lib/connection_pool/shared_connection_pool_spec.rb'
    - 'spec/lib/connection_pool/shared_timed_stack_spec.rb'
    - 'spec/lib/delivery_failure_tracker_spec.rb'
    - 'spec/lib/emoji_formatter_spec.rb'
    - 'spec/lib/entity_cache_spec.rb'
    - 'spec/lib/fast_ip_map_spec.rb'
    - 'spec/lib/feed_manager_spec.rb'
    - 'spec/lib/hashtag_normalizer_spec.rb'
    - 'spec/lib/html_aware_formatter_spec.rb'
    - 'spec/lib/link_details_extractor_spec.rb'
    - 'spec/lib/ostatus/tag_manager_spec.rb'
    - 'spec/lib/plain_text_formatter_spec.rb'
    - 'spec/lib/request_pool_spec.rb'
    - 'spec/lib/request_spec.rb'
    - 'spec/lib/sanitize_config_spec.rb'
    - 'spec/lib/status_finder_spec.rb'
    - 'spec/lib/status_reach_finder_spec.rb'
    - 'spec/lib/suspicious_sign_in_detector_spec.rb'
    - 'spec/lib/text_formatter_spec.rb'
    - 'spec/lib/vacuum/access_tokens_vacuum_spec.rb'
    - 'spec/lib/vacuum/backups_vacuum_spec.rb'
    - 'spec/lib/vacuum/feeds_vacuum_spec.rb'
    - 'spec/lib/vacuum/media_attachments_vacuum_spec.rb'
    - 'spec/lib/vacuum/preview_cards_vacuum_spec.rb'
    - 'spec/lib/vacuum/statuses_vacuum_spec.rb'
    - 'spec/lib/vacuum/system_keys_vacuum_spec.rb'
    - 'spec/models/account/field_spec.rb'
    - 'spec/models/account_migration_spec.rb'
    - 'spec/models/account_spec.rb'
    - 'spec/models/account_statuses_cleanup_policy_spec.rb'
    - 'spec/models/account_statuses_filter_spec.rb'
    - 'spec/models/admin/account_action_spec.rb'
    - 'spec/models/canonical_email_block_spec.rb'
    - 'spec/models/concerns/account_interactions_spec.rb'
    - 'spec/models/custom_emoji_filter_spec.rb'
    - 'spec/models/custom_emoji_spec.rb'
    - 'spec/models/follow_spec.rb'
    - 'spec/models/home_feed_spec.rb'
    - 'spec/models/media_attachment_spec.rb'
    - 'spec/models/notification_spec.rb'
    - 'spec/models/public_feed_spec.rb'
    - 'spec/models/relationship_filter_spec.rb'
    - 'spec/models/remote_follow_spec.rb'
    - 'spec/models/report_spec.rb'
    - 'spec/models/session_activation_spec.rb'
    - 'spec/models/setting_spec.rb'
    - 'spec/models/status_spec.rb'
    - 'spec/models/tag_spec.rb'
    - 'spec/models/trends/statuses_spec.rb'
    - 'spec/models/trends/tags_spec.rb'
    - 'spec/models/user_role_spec.rb'
    - 'spec/models/user_spec.rb'
    - 'spec/models/web/push_subscription_spec.rb'
    - 'spec/policies/account_moderation_note_policy_spec.rb'
    - 'spec/policies/account_policy_spec.rb'
    - 'spec/policies/backup_policy_spec.rb'
    - 'spec/policies/custom_emoji_policy_spec.rb'
    - 'spec/policies/domain_block_policy_spec.rb'
    - 'spec/policies/email_domain_block_policy_spec.rb'
    - 'spec/policies/instance_policy_spec.rb'
    - 'spec/policies/invite_policy_spec.rb'
    - 'spec/policies/relay_policy_spec.rb'
    - 'spec/policies/report_note_policy_spec.rb'
    - 'spec/policies/report_policy_spec.rb'
    - 'spec/policies/settings_policy_spec.rb'
    - 'spec/policies/status_policy_spec.rb'
    - 'spec/policies/tag_policy_spec.rb'
    - 'spec/policies/user_policy_spec.rb'
    - 'spec/presenters/familiar_followers_presenter_spec.rb'
    - 'spec/serializers/activitypub/note_serializer_spec.rb'
    - 'spec/serializers/activitypub/update_poll_serializer_spec.rb'
    - 'spec/serializers/rest/account_serializer_spec.rb'
    - 'spec/services/account_search_service_spec.rb'
    - 'spec/services/account_statuses_cleanup_service_spec.rb'
    - 'spec/services/activitypub/fetch_remote_account_service_spec.rb'
    - 'spec/services/activitypub/fetch_remote_actor_service_spec.rb'
    - 'spec/services/activitypub/fetch_remote_status_service_spec.rb'
    - 'spec/services/activitypub/fetch_replies_service_spec.rb'
    - 'spec/services/activitypub/process_account_service_spec.rb'
    - 'spec/services/activitypub/process_collection_service_spec.rb'
    - 'spec/services/activitypub/process_status_update_service_spec.rb'
    - 'spec/services/after_block_domain_from_account_service_spec.rb'
    - 'spec/services/after_block_service_spec.rb'
    - 'spec/services/app_sign_up_service_spec.rb'
    - 'spec/services/authorize_follow_service_spec.rb'
    - 'spec/services/batched_remove_status_service_spec.rb'
    - 'spec/services/block_domain_service_spec.rb'
    - 'spec/services/block_service_spec.rb'
    - 'spec/services/bootstrap_timeline_service_spec.rb'
    - 'spec/services/clear_domain_media_service_spec.rb'
    - 'spec/services/delete_account_service_spec.rb'
    - 'spec/services/fan_out_on_write_service_spec.rb'
    - 'spec/services/favourite_service_spec.rb'
    - 'spec/services/fetch_link_card_service_spec.rb'
    - 'spec/services/fetch_oembed_service_spec.rb'
    - 'spec/services/fetch_remote_status_service_spec.rb'
    - 'spec/services/fetch_resource_service_spec.rb'
    - 'spec/services/follow_service_spec.rb'
    - 'spec/services/import_service_spec.rb'
    - 'spec/services/mute_service_spec.rb'
    - 'spec/services/notify_service_spec.rb'
    - 'spec/services/post_status_service_spec.rb'
    - 'spec/services/precompute_feed_service_spec.rb'
    - 'spec/services/process_mentions_service_spec.rb'
    - 'spec/services/purge_domain_service_spec.rb'
    - 'spec/services/reblog_service_spec.rb'
    - 'spec/services/reject_follow_service_spec.rb'
    - 'spec/services/remove_from_followers_service_spec.rb'
    - 'spec/services/remove_status_service_spec.rb'
    - 'spec/services/report_service_spec.rb'
    - 'spec/services/resolve_account_service_spec.rb'
    - 'spec/services/resolve_url_service_spec.rb'
    - 'spec/services/search_service_spec.rb'
    - 'spec/services/suspend_account_service_spec.rb'
    - 'spec/services/unallow_domain_service_spec.rb'
    - 'spec/services/unblock_domain_service_spec.rb'
    - 'spec/services/unblock_service_spec.rb'
    - 'spec/services/unfollow_service_spec.rb'
    - 'spec/services/unsuspend_account_service_spec.rb'
    - 'spec/services/update_account_service_spec.rb'
    - 'spec/services/update_status_service_spec.rb'
    - 'spec/services/verify_link_service_spec.rb'
    - 'spec/validators/blacklisted_email_validator_spec.rb'
    - 'spec/validators/email_mx_validator_spec.rb'
    - 'spec/validators/note_length_validator_spec.rb'
    - 'spec/validators/reaction_validator_spec.rb'
    - 'spec/validators/status_length_validator_spec.rb'
    - 'spec/validators/status_pin_validator_spec.rb'
    - 'spec/validators/unique_username_validator_spec.rb'
    - 'spec/workers/activitypub/delivery_worker_spec.rb'
    - 'spec/workers/activitypub/distribute_poll_update_worker_spec.rb'
    - 'spec/workers/activitypub/distribution_worker_spec.rb'
    - 'spec/workers/activitypub/fetch_replies_worker_spec.rb'
    - 'spec/workers/activitypub/move_distribution_worker_spec.rb'
    - 'spec/workers/activitypub/processing_worker_spec.rb'
    - 'spec/workers/activitypub/status_update_distribution_worker_spec.rb'
    - 'spec/workers/activitypub/update_distribution_worker_spec.rb'
    - 'spec/workers/admin/domain_purge_worker_spec.rb'
    - 'spec/workers/domain_block_worker_spec.rb'
    - 'spec/workers/domain_clear_media_worker_spec.rb'
    - 'spec/workers/feed_insert_worker_spec.rb'
    - 'spec/workers/move_worker_spec.rb'
    - 'spec/workers/publish_scheduled_announcement_worker_spec.rb'
    - 'spec/workers/publish_scheduled_status_worker_spec.rb'
    - 'spec/workers/refollow_worker_spec.rb'
    - 'spec/workers/regeneration_worker_spec.rb'
    - 'spec/workers/scheduler/accounts_statuses_cleanup_scheduler_spec.rb'
    - 'spec/workers/scheduler/user_cleanup_scheduler_spec.rb'
    - 'spec/workers/unfollow_follow_worker_spec.rb'
    - 'spec/workers/web/push_notification_worker_spec.rb'

# Configuration parameters: AllowedGroups.
RSpec/NestedGroups:
  Max: 6


@@ 1476,7 1272,6 @@ Rails/CompactBlank:
    - 'app/helpers/statuses_helper.rb'
    - 'app/models/concerns/attachmentable.rb'
    - 'app/models/poll.rb'
    - 'app/models/user.rb'
    - 'app/services/import_service.rb'
    - 'config/initializers/paperclip.rb'



@@ 1527,7 1322,6 @@ Rails/FilePath:
    - 'app/validators/reaction_validator.rb'
    - 'config/environments/test.rb'
    - 'db/migrate/20170716191202_add_hide_notifications_to_mute.rb'
    - 'db/migrate/20170918125918_ids_to_bigints.rb'
    - 'db/migrate/20171005171936_add_disabled_to_custom_emojis.rb'
    - 'db/migrate/20171028221157_add_reblogs_to_follows.rb'
    - 'db/migrate/20171107143332_add_memorial_to_accounts.rb'


@@ 1637,18 1431,6 @@ Rails/I18nLocaleTexts:
    - 'lib/tasks/mastodon.rake'
    - 'spec/helpers/flashes_helper_spec.rb'

# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/IgnoredColumnsAssignment:
  Exclude:
    - 'app/models/account.rb'
    - 'app/models/account_stat.rb'
    - 'app/models/admin/action_log.rb'
    - 'app/models/custom_filter.rb'
    - 'app/models/email_domain_block.rb'
    - 'app/models/report.rb'
    - 'app/models/status_edit.rb'
    - 'app/models/user.rb'

# Configuration parameters: IgnoreScopes, Include.
# Include: app/models/**/*.rb
Rails/InverseOf:


@@ 2425,11 2207,6 @@ Style/HashTransformValues:
    - 'app/serializers/rest/web_push_subscription_serializer.rb'
    - 'app/services/import_service.rb'

# This cop supports unsafe autocorrection (--autocorrect-all).
Style/IdenticalConditionalBranches:
  Exclude:
    - 'config/initializers/content_security_policy.rb'

# This cop supports safe autocorrection (--autocorrect).
Style/IfUnlessModifier:
  Exclude:


@@ 2530,11 2307,6 @@ Style/PreferredHashMethods:
    - 'config/initializers/paperclip.rb'

# This cop supports safe autocorrection (--autocorrect).
Style/RedundantBegin:
  Exclude:
    - 'config/initializers/simple_form.rb'

# This cop supports safe autocorrection (--autocorrect).
Style/RedundantConstantBase:
  Exclude:
    - 'config/environments/production.rb'

M .ruby-version => .ruby-version +1 -1
@@ 1,1 1,1 @@
3.2.1
3.2.2

M .yarnclean => .yarnclean +3 -0
@@ 44,3 44,6 @@ Gruntfile.js
# for specific ignore
!.svgo.yml
!sass-lint/**/*.yml

# breaks lint-staged or generally anything using https://github.com/eemeli/yaml/issues/384
!**/yaml/dist/**/doc

M Dockerfile => Dockerfile +1 -1
@@ 2,7 2,7 @@
# This needs to be bullseye-slim because the Ruby image is built on bullseye-slim
ARG NODE_VERSION="16.19-bullseye-slim"

FROM ghcr.io/moritzheiber/ruby-jemalloc:3.2.1-slim as ruby
FROM ghcr.io/moritzheiber/ruby-jemalloc:3.2.2-slim as ruby
FROM node:${NODE_VERSION} as build

COPY --link --from=ruby /opt/ruby /opt/ruby

M Gemfile => Gemfile +2 -2
@@ 87,10 87,10 @@ gem 'simple-navigation', '~> 4.4'
gem 'simple_form', '~> 5.2'
gem 'sprockets-rails', '~> 3.4', require: 'sprockets/railtie'
gem 'stoplight', '~> 3.0.1'
gem 'strong_migrations', '~> 0.7'
gem 'strong_migrations', '~> 0.8'
gem 'tty-prompt', '~> 0.23', require: false
gem 'twitter-text', '~> 3.1.0'
gem 'tzinfo-data', '~> 1.2022'
gem 'tzinfo-data', '~> 1.2023'
gem 'webpacker', '~> 5.4'
gem 'webpush', github: 'ClearlyClaire/webpush', ref: 'f14a4d52e201128b1b00245d11b6de80d6cfdcd9'
gem 'webauthn', '~> 3.0'

M Gemfile.lock => Gemfile.lock +9 -9
@@ 109,16 109,16 @@ GEM
    attr_required (1.0.1)
    awrence (1.2.1)
    aws-eventstream (1.2.0)
    aws-partitions (1.711.0)
    aws-sdk-core (3.170.0)
    aws-partitions (1.735.0)
    aws-sdk-core (3.171.0)
      aws-eventstream (~> 1, >= 1.0.2)
      aws-partitions (~> 1, >= 1.651.0)
      aws-sigv4 (~> 1.5)
      jmespath (~> 1, >= 1.6.1)
    aws-sdk-kms (1.62.0)
    aws-sdk-kms (1.63.0)
      aws-sdk-core (~> 3, >= 3.165.0)
      aws-sigv4 (~> 1.1)
    aws-sdk-s3 (1.119.1)
    aws-sdk-s3 (1.119.2)
      aws-sdk-core (~> 3, >= 3.165.0)
      aws-sdk-kms (~> 1)
      aws-sigv4 (~> 1.4)


@@ 685,8 685,8 @@ GEM
    statsd-ruby (1.5.0)
    stoplight (3.0.1)
      redlock (~> 1.0)
    strong_migrations (0.7.9)
      activerecord (>= 5)
    strong_migrations (0.8.0)
      activerecord (>= 5.2)
    swd (1.3.0)
      activesupport (>= 3)
      attr_required (>= 0.0.5)


@@ 719,7 719,7 @@ GEM
      unf (~> 0.1.0)
    tzinfo (2.0.6)
      concurrent-ruby (~> 1.0)
    tzinfo-data (1.2022.7)
    tzinfo-data (1.2023.2)
      tzinfo (>= 1.0.0)
    unf (0.1.4)
      unf_ext


@@ 885,11 885,11 @@ DEPENDENCIES
  sprockets-rails (~> 3.4)
  stackprof
  stoplight (~> 3.0.1)
  strong_migrations (~> 0.7)
  strong_migrations (~> 0.8)
  thor (~> 1.2)
  tty-prompt (~> 0.23)
  twitter-text (~> 3.1.0)
  tzinfo-data (~> 1.2022)
  tzinfo-data (~> 1.2023)
  webauthn (~> 3.0)
  webmock (~> 3.18)
  webpacker (~> 5.4)

M app/controllers/api/v1/accounts/credentials_controller.rb => app/controllers/api/v1/accounts/credentials_controller.rb +7 -5
@@ 13,7 13,7 @@ class Api::V1::Accounts::CredentialsController < Api::BaseController
  def update
    @account = current_account
    UpdateAccountService.new.call(@account, account_params, raise_error: true)
    UserSettingsDecorator.new(current_user).update(user_settings_params) if user_settings_params
    current_user.update(user_params) if user_params
    ActivityPub::UpdateDistributionWorker.perform_async(@account.id)
    render json: @account, serializer: REST::CredentialAccountSerializer
  end


@@ 34,15 34,17 @@ class Api::V1::Accounts::CredentialsController < Api::BaseController
    )
  end

  def user_settings_params
  def user_params
    return nil if params[:source].blank?

    source_params = params.require(:source)

    {
      'setting_default_privacy' => source_params.fetch(:privacy, @account.user.setting_default_privacy),
      'setting_default_sensitive' => source_params.fetch(:sensitive, @account.user.setting_default_sensitive),
      'setting_default_language' => source_params.fetch(:language, @account.user.setting_default_language),
      settings_attributes: {
        default_privacy: source_params.fetch(:privacy, @account.user.setting_default_privacy),
        default_sensitive: source_params.fetch(:sensitive, @account.user.setting_default_sensitive),
        default_language: source_params.fetch(:language, @account.user.setting_default_language),
      },
    }
  end
end

M app/controllers/api/v1/streaming_controller.rb => app/controllers/api/v1/streaming_controller.rb +1 -1
@@ 5,7 5,7 @@ class Api::V1::StreamingController < Api::BaseController
    if Rails.configuration.x.streaming_api_base_url == request.host
      not_found
    else
      redirect_to streaming_api_url, status: 301
      redirect_to streaming_api_url, status: 301, allow_other_host: true
    end
  end


M app/controllers/backups_controller.rb => app/controllers/backups_controller.rb +5 -1
@@ 13,7 13,11 @@ class BackupsController < ApplicationController
    when :s3
      redirect_to @backup.dump.expiring_url(10)
    when :fog
      redirect_to @backup.dump.expiring_url(Time.now.utc + 10)
      if Paperclip::Attachment.default_options.dig(:storage, :fog_credentials, :openstack_temp_url_key).present?
        redirect_to @backup.dump.expiring_url(Time.now.utc + 10)
      else
        redirect_to full_asset_url(@backup.dump.url)
      end
    when :filesystem
      redirect_to full_asset_url(@backup.dump.url)
    end

M app/controllers/concerns/account_controller_concern.rb => app/controllers/concerns/account_controller_concern.rb +2 -1
@@ 10,7 10,8 @@ module AccountControllerConcern

  included do
    before_action :set_instance_presenter
    before_action :set_link_headers, if: -> { request.format.nil? || request.format == :html }

    after_action :set_link_headers, if: -> { request.format.nil? || request.format == :html }
  end

  private

M app/controllers/media_proxy_controller.rb => app/controllers/media_proxy_controller.rb +1 -1
@@ 23,7 23,7 @@ class MediaProxyController < ApplicationController
      redownload! if @media_attachment.needs_redownload? && !reject_media?
    end

    redirect_to full_asset_url(@media_attachment.file.url(version))
    redirect_to full_asset_url(@media_attachment.file.url(version)), allow_other_host: true
  end

  private

M app/controllers/settings/preferences_controller.rb => app/controllers/settings/preferences_controller.rb +1 -42
@@ 4,8 4,6 @@ class Settings::PreferencesController < Settings::BaseController
  def show; end

  def update
    user_settings.update(user_settings_params.to_h)

    if current_user.update(user_params)
      I18n.locale = current_user.locale
      redirect_to after_update_redirect_path, notice: I18n.t('generic.changes_saved_msg')


@@ 20,46 18,7 @@ class Settings::PreferencesController < Settings::BaseController
    settings_preferences_path
  end

  def user_settings
    UserSettingsDecorator.new(current_user)
  end

  def user_params
    params.require(:user).permit(
      :locale,
      chosen_languages: []
    )
  end

  def user_settings_params
    params.require(:user).permit(
      :setting_default_privacy,
      :setting_default_sensitive,
      :setting_default_language,
      :setting_unfollow_modal,
      :setting_boost_modal,
      :setting_favourite_modal,
      :setting_delete_modal,
      :setting_auto_play_gif,
      :setting_display_media,
      :setting_expand_spoilers,
      :setting_reduce_motion,
      :setting_disable_swiping,
      :setting_system_font_ui,
      :setting_system_emoji_font,
      :setting_noindex,
      :setting_hide_followers_count,
      :setting_aggregate_reblogs,
      :setting_show_application,
      :setting_advanced_layout,
      :setting_default_content_type,
      :setting_use_blurhash,
      :setting_use_pending_items,
      :setting_trends,
      :setting_crop_images,
      :setting_always_send_emails,
      notification_emails: %i(follow follow_request reblog favourite mention report pending_account trending_tag trending_link trending_status appeal),
      interactions: %i(must_be_follower must_be_following must_be_following_dm)
    )
    params.require(:user).permit(:locale, chosen_languages: [], settings_attributes: UserSettings.keys)
  end
end

M app/controllers/statuses_controller.rb => app/controllers/statuses_controller.rb +3 -2
@@ 9,11 9,12 @@ class StatusesController < ApplicationController
  before_action :require_account_signature!, only: [:show, :activity], if: -> { request.format == :json && authorized_fetch_mode? }
  before_action :set_status
  before_action :set_instance_presenter
  before_action :set_link_headers
  before_action :redirect_to_original, only: :show
  before_action :set_cache_headers
  before_action :set_body_classes, only: :embed

  after_action :set_link_headers

  skip_around_action :set_locale, if: -> { request.format == :json }
  skip_before_action :require_functional!, only: [:show, :embed], unless: :whitelist_mode?



@@ 71,6 72,6 @@ class StatusesController < ApplicationController
  end

  def redirect_to_original
    redirect_to ActivityPub::TagManager.instance.url_for(@status.reblog) if @status.reblog?
    redirect_to(ActivityPub::TagManager.instance.url_for(@status.reblog), allow_other_host: true) if @status.reblog?
  end
end

M app/javascript/mastodon/actions/compose.js => app/javascript/mastodon/actions/compose.js +34 -39
@@ 4,7 4,6 @@ import { defineMessages } from 'react-intl';
import api from 'mastodon/api';
import { search as emojiSearch } from 'mastodon/features/emoji/emoji_mart_search_light';
import { tagHistory } from 'mastodon/settings';
import resizeImage from 'mastodon/utils/resize_image';
import { showAlert, showAlertForError } from './alerts';
import { useEmoji } from './emojis';
import { importFetchedAccounts, importFetchedStatus } from './importer';


@@ 276,46 275,42 @@ export function uploadCompose(files) {

    dispatch(uploadComposeRequest());

    for (const [i, f] of Array.from(files).entries()) {
    for (const [i, file] of Array.from(files).entries()) {
      if (media.size + i > 3) break;

      resizeImage(f).then(file => {
        const data = new FormData();
        data.append('file', file);
        // Account for disparity in size of original image and resized data
        total += file.size - f.size;

        return api(getState).post('/api/v2/media', data, {
          onUploadProgress: function({ loaded }){
            progress[i] = loaded;
            dispatch(uploadComposeProgress(progress.reduce((a, v) => a + v, 0), total));
          },
        }).then(({ status, data }) => {
          // If server-side processing of the media attachment has not completed yet,
          // poll the server until it is, before showing the media attachment as uploaded

          if (status === 200) {
            dispatch(uploadComposeSuccess(data, f));
          } else if (status === 202) {
            dispatch(uploadComposeProcessing());

            let tryCount = 1;

            const poll = () => {
              api(getState).get(`/api/v1/media/${data.id}`).then(response => {
                if (response.status === 200) {
                  dispatch(uploadComposeSuccess(response.data, f));
                } else if (response.status === 206) {
                  const retryAfter = (Math.log2(tryCount) || 1) * 1000;
                  tryCount += 1;
                  setTimeout(() => poll(), retryAfter);
                }
              }).catch(error => dispatch(uploadComposeFail(error)));
            };

            poll();
          }
        });
      const data = new FormData();
      data.append('file', file);

      api(getState).post('/api/v2/media', data, {
        onUploadProgress: function({ loaded }){
          progress[i] = loaded;
          dispatch(uploadComposeProgress(progress.reduce((a, v) => a + v, 0), total));
        },
      }).then(({ status, data }) => {
        // If server-side processing of the media attachment has not completed yet,
        // poll the server until it is, before showing the media attachment as uploaded

        if (status === 200) {
          dispatch(uploadComposeSuccess(data, file));
        } else if (status === 202) {
          dispatch(uploadComposeProcessing());

          let tryCount = 1;

          const poll = () => {
            api(getState).get(`/api/v1/media/${data.id}`).then(response => {
              if (response.status === 200) {
                dispatch(uploadComposeSuccess(response.data, file));
              } else if (response.status === 206) {
                const retryAfter = (Math.log2(tryCount) || 1) * 1000;
                tryCount += 1;
                setTimeout(() => poll(), retryAfter);
              }
            }).catch(error => dispatch(uploadComposeFail(error)));
          };

          poll();
        }
      }).catch(error => dispatch(uploadComposeFail(error)));
    }
  };

M app/javascript/mastodon/components/account.jsx => app/javascript/mastodon/components/account.jsx +47 -6
@@ 10,6 10,9 @@ import { me } from '../initial_state';
import RelativeTimestamp from './relative_timestamp';
import Skeleton from 'mastodon/components/skeleton';
import { Link } from 'react-router-dom';
import { counterRenderer } from 'mastodon/components/common_counter';
import ShortNumber from 'mastodon/components/short_number';
import Icon from 'mastodon/components/icon';

const messages = defineMessages({
  follow: { id: 'account.follow', defaultMessage: 'Follow' },


@@ 23,6 26,26 @@ const messages = defineMessages({
  block: { id: 'account.block', defaultMessage: 'Block @{name}' },
});

class VerifiedBadge extends React.PureComponent {

  static propTypes = {
    link: PropTypes.string.isRequired,
    verifiedAt: PropTypes.string.isRequired,
  };

  render () {
    const { link } = this.props;

    return (
      <span className='verified-badge'>
        <Icon id='check' className='verified-badge__mark' />
        <span dangerouslySetInnerHTML={{ __html: link }} />
      </span>
    );
  }

}

class Account extends ImmutablePureComponent {

  static propTypes = {


@@ 77,7 100,11 @@ class Account extends ImmutablePureComponent {
          <div className='account__wrapper'>
            <div className='account__display-name'>
              <div className='account__avatar-wrapper'><Skeleton width={36} height={36} /></div>
              <DisplayName />

              <div>
                <DisplayName />
                <Skeleton width='7ch' />
              </div>
            </div>
          </div>
        </div>


@@ 131,18 158,32 @@ class Account extends ImmutablePureComponent {
      }
    }

    let mute_expires_at;
    let muteTimeRemaining;

    if (account.get('mute_expires_at')) {
      mute_expires_at =  <div><RelativeTimestamp timestamp={account.get('mute_expires_at')} futureDate /></div>;
      muteTimeRemaining = <>· <RelativeTimestamp timestamp={account.get('mute_expires_at')} futureDate /></>;
    }

    let verification;

    const firstVerifiedField = account.get('fields').find(item => !!item.get('verified_at'));

    if (firstVerifiedField) {
      verification = <>· <VerifiedBadge link={firstVerifiedField.get('value')} verifiedAt={firstVerifiedField.get('verified_at')} /></>;
    }

    return (
      <div className='account'>
        <div className='account__wrapper'>
          <Link key={account.get('id')} className='account__display-name' title={account.get('acct')} to={`/@${account.get('acct')}`}>
            <div className='account__avatar-wrapper'><Avatar account={account} size={size} /></div>
            {mute_expires_at}
            <DisplayName account={account} />
            <div className='account__avatar-wrapper'>
              <Avatar account={account} size={size} />
            </div>

            <div>
              <DisplayName account={account} />
              <ShortNumber value={account.get('followers_count')} renderer={counterRenderer('followers')} /> {verification} {muteTimeRemaining}
            </div>
          </Link>

          <div className='account__relationship'>

M app/javascript/mastodon/components/status.jsx => app/javascript/mastodon/components/status.jsx +7 -0
@@ 386,6 386,13 @@ class Status extends ImmutablePureComponent {

      account = status.get('account');
      status  = status.get('reblog');
    } else if (status.get('visibility') === 'direct') {
      prepend = (
        <div className='status__prepend'>
          <div className='status__prepend-icon-wrapper'><Icon id='at' className='status__prepend-icon' fixedWidth /></div>
          <FormattedMessage id='status.direct_indicator' defaultMessage='Private mention' />
        </div>
      );
    } else if (showThread && status.get('in_reply_to_id') && status.get('in_reply_to_account_id') === status.getIn(['account', 'id'])) {
      const display_name_html = { __html: status.getIn(['account', 'display_name_html']) };


M app/javascript/mastodon/components/status_action_bar.jsx => app/javascript/mastodon/components/status_action_bar.jsx +1 -1
@@ 14,7 14,7 @@ const messages = defineMessages({
  delete: { id: 'status.delete', defaultMessage: 'Delete' },
  redraft: { id: 'status.redraft', defaultMessage: 'Delete & re-draft' },
  edit: { id: 'status.edit', defaultMessage: 'Edit' },
  direct: { id: 'status.direct', defaultMessage: 'Direct message @{name}' },
  direct: { id: 'status.direct', defaultMessage: 'Privately mention @{name}' },
  mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },
  mute: { id: 'account.mute', defaultMessage: 'Mute @{name}' },
  block: { id: 'account.block', defaultMessage: 'Block @{name}' },

M app/javascript/mastodon/features/account/components/header.jsx => app/javascript/mastodon/features/account/components/header.jsx +1 -1
@@ 28,7 28,7 @@ const messages = defineMessages({
  linkVerifiedOn: { id: 'account.link_verified_on', defaultMessage: 'Ownership of this link was checked on {date}' },
  account_locked: { id: 'account.locked_info', defaultMessage: 'This account privacy status is set to locked. The owner manually reviews who can follow them.' },
  mention: { id: 'account.mention', defaultMessage: 'Mention @{name}' },
  direct: { id: 'account.direct', defaultMessage: 'Direct message @{name}' },
  direct: { id: 'account.direct', defaultMessage: 'Privately mention @{name}' },
  unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' },
  block: { id: 'account.block', defaultMessage: 'Block @{name}' },
  mute: { id: 'account.mute', defaultMessage: 'Mute @{name}' },

M app/javascript/mastodon/features/direct_timeline/index.jsx => app/javascript/mastodon/features/direct_timeline/index.jsx +2 -2
@@ 11,7 11,7 @@ import ColumnHeader from 'mastodon/components/column_header';
import ConversationsListContainer from './containers/conversations_list_container';

const messages = defineMessages({
  title: { id: 'column.direct', defaultMessage: 'Direct messages' },
  title: { id: 'column.direct', defaultMessage: 'Private mentions' },
});

class DirectTimeline extends React.PureComponent {


@@ 91,7 91,7 @@ class DirectTimeline extends React.PureComponent {
          timelineId='direct'
          onLoadMore={this.handleLoadMore}
          prepend={<div className='follow_requests-unlocked_explanation'><span><FormattedMessage id='compose_form.encryption_warning' defaultMessage='Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.' /> <a href='/terms' target='_blank'><FormattedMessage id='compose_form.direct_message_warning_learn_more' defaultMessage='Learn more' /></a></span></div>}
          emptyMessage={<FormattedMessage id='empty_column.direct' defaultMessage="You don't have any direct messages yet. When you send or receive one, it will show up here." />}
          emptyMessage={<FormattedMessage id='empty_column.direct' defaultMessage="You don't have any private mentions yet. When you send or receive one, it will show up here." />}
        />

        <Helmet>

M app/javascript/mastodon/features/explore/index.jsx => app/javascript/mastodon/features/explore/index.jsx +3 -1
@@ 88,7 88,9 @@ class Explore extends React.PureComponent {
                <Route path='/explore/tags' component={Tags} />
                <Route path='/explore/links' component={Links} />
                <Route path='/explore/suggestions' component={Suggestions} />
                <Route exact path={['/explore', '/explore/posts', '/search']} component={Statuses} componentParams={{ multiColumn }} />
                <Route exact path={['/explore', '/explore/posts', '/search']}>
                  <Statuses multiColumn={multiColumn} />
                </Route>
              </Switch>

              <Helmet>

M app/javascript/mastodon/features/getting_started/index.jsx => app/javascript/mastodon/features/getting_started/index.jsx +1 -1
@@ 23,7 23,7 @@ const messages = defineMessages({
  settings_subheading: { id: 'column_subheading.settings', defaultMessage: 'Settings' },
  community_timeline: { id: 'navigation_bar.community_timeline', defaultMessage: 'Local timeline' },
  explore: { id: 'navigation_bar.explore', defaultMessage: 'Explore' },
  direct: { id: 'navigation_bar.direct', defaultMessage: 'Direct messages' },
  direct: { id: 'navigation_bar.direct', defaultMessage: 'Private mentions' },
  bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },
  preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
  follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },

M app/javascript/mastodon/features/status/components/action_bar.jsx => app/javascript/mastodon/features/status/components/action_bar.jsx +1 -1
@@ 13,7 13,7 @@ const messages = defineMessages({
  delete: { id: 'status.delete', defaultMessage: 'Delete' },
  redraft: { id: 'status.redraft', defaultMessage: 'Delete & re-draft' },
  edit: { id: 'status.edit', defaultMessage: 'Edit' },
  direct: { id: 'status.direct', defaultMessage: 'Direct message @{name}' },
  direct: { id: 'status.direct', defaultMessage: 'Privately mention @{name}' },
  mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },
  reply: { id: 'status.reply', defaultMessage: 'Reply' },
  reblog: { id: 'status.reblog', defaultMessage: 'Boost' },

M app/javascript/mastodon/features/status/components/detailed_status.jsx => app/javascript/mastodon/features/status/components/detailed_status.jsx +8 -2
@@ 6,7 6,7 @@ import DisplayName from '../../../components/display_name';
import StatusContent from '../../../components/status_content';
import MediaGallery from '../../../components/media_gallery';
import { Link } from 'react-router-dom';
import { injectIntl, defineMessages, FormattedDate } from 'react-intl';
import { injectIntl, defineMessages, FormattedDate, FormattedMessage } from 'react-intl';
import Card from './card';
import ImmutablePureComponent from 'react-immutable-pure-component';
import Video from '../../video';


@@ 262,7 262,13 @@ class DetailedStatus extends ImmutablePureComponent {

    return (
      <div style={outerStyle}>
        <div ref={this.setRef} className={classNames('detailed-status', `detailed-status-${status.get('visibility')}`, { compact })}>
        <div ref={this.setRef} className={classNames('detailed-status', { compact })}>
          {status.get('visibility') === 'direct' && (
            <div className='status__prepend'>
              <div className='status__prepend-icon-wrapper'><Icon id='at' className='status__prepend-icon' fixedWidth /></div>
              <FormattedMessage id='status.direct_indicator' defaultMessage='Private mention' />
            </div>
          )}
          <a href={`/@${status.getIn(['account', 'acct'])}`} onClick={this.handleAccountClick} className='detailed-status__display-name'>
            <div className='detailed-status__display-avatar'><Avatar account={status.get('account')} size={46} /></div>
            <DisplayName account={status.get('account')} localDomain={this.props.domain} />

M app/javascript/mastodon/features/status/index.jsx => app/javascript/mastodon/features/status/index.jsx +1 -1
@@ 630,7 630,7 @@ class Status extends ImmutablePureComponent {
            {ancestors}

            <HotKeys handlers={handlers}>
              <div className={classNames('focusable', 'detailed-status__wrapper')} tabIndex='0' aria-label={textForScreenReader(intl, status, false)}>
              <div className={classNames('focusable', 'detailed-status__wrapper', `detailed-status__wrapper-${status.get('visibility')}`)} tabIndex='0' aria-label={textForScreenReader(intl, status, false)}>
                <DetailedStatus
                  key={`details-${status.get('id')}`}
                  status={status}

M app/javascript/mastodon/features/ui/components/navigation_panel.jsx => app/javascript/mastodon/features/ui/components/navigation_panel.jsx +1 -1
@@ 18,7 18,7 @@ const messages = defineMessages({
  explore: { id: 'explore.title', defaultMessage: 'Explore' },
  local: { id: 'tabs_bar.local_timeline', defaultMessage: 'Local' },
  federated: { id: 'tabs_bar.federated_timeline', defaultMessage: 'Federated' },
  direct: { id: 'navigation_bar.direct', defaultMessage: 'Direct messages' },
  direct: { id: 'navigation_bar.direct', defaultMessage: 'Private mentions' },
  favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favourites' },
  bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },
  lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },

M app/javascript/mastodon/locales/af.json => app/javascript/mastodon/locales/af.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Delete",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/an.json => app/javascript/mastodon/locales/an.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Borrar",
  "status.detailed_status": "Vista de conversación detallada",
  "status.direct": "Mensache directo a @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Editar",
  "status.edited": "Editau {date}",
  "status.edited_x_times": "Editau {count, plural, one {{count} vez} other {{count} veces}}",

M app/javascript/mastodon/locales/ar.json => app/javascript/mastodon/locales/ar.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "احذف",
  "status.detailed_status": "تفاصيل المحادثة",
  "status.direct": "رسالة خاصة إلى @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "تعديل",
  "status.edited": "عُدّل في {date}",
  "status.edited_x_times": "عُدّل {count, plural, zero {} one {مرةً واحدة} two {مرّتان} few {{count} مرات} many {{count} مرة} other {{count} مرة}}",

M app/javascript/mastodon/locales/ast.json => app/javascript/mastodon/locales/ast.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Desaniciar",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Unviar un mensaxe direutu a @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Editóse'l {date}",
  "status.edited_x_times": "Editóse {count, plural, one {{count} vegada} other {{count} vegaes}}",

M app/javascript/mastodon/locales/be.json => app/javascript/mastodon/locales/be.json +2 -1
@@ 163,7 163,7 @@
  "confirmations.domain_block.confirm": "Заблакіраваць дамен цалкам",
  "confirmations.domain_block.message": "Вы абсалютна дакладна ўпэўнены, што хочаце заблакіраваць {domain} зусім? У большасці выпадкаў, дастаткова некалькіх мэтавых блакіровак ці ігнараванняў. Вы перастанеце бачыць змесціва з гэтага дамену ва ўсіх стужках і апавяшчэннях. Вашы падпіскі з гэтага дамену будуць выдаленыя.",
  "confirmations.edit.confirm": "Рэдагаваць",
  "confirmations.edit.message": "Editing now will overwrite the message you are currently composing. Are you sure you want to proceed?",
  "confirmations.edit.message": "Калі вы зменіце зараз, гэта ператрэ паведамленне, якое вы пішаце. Вы ўпэўнены, што хочаце працягнуць?",
  "confirmations.logout.confirm": "Выйсці",
  "confirmations.logout.message": "Вы ўпэўненыя, што хочаце выйсці?",
  "confirmations.mute.confirm": "Ігнараваць",


@@ 558,6 558,7 @@
  "status.delete": "Выдаліць",
  "status.detailed_status": "Дэтальны агляд размовы",
  "status.direct": "Асабістае паведамленне @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Рэдагаваць",
  "status.edited": "Адрэдагавана {date}",
  "status.edited_x_times": "Рэдагавана {count, plural, one {{count} раз} few {{count} разы} many {{count} разоў} other {{count} разу}}",

M app/javascript/mastodon/locales/bg.json => app/javascript/mastodon/locales/bg.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Изтриване",
  "status.detailed_status": "Подробен изглед на разговора",
  "status.direct": "Директно съобщение до @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Редактиране",
  "status.edited": "Редактирано на {date}",
  "status.edited_x_times": "Редактирано {count, plural,one {{count} път} other {{count} пъти}}",

M app/javascript/mastodon/locales/bn.json => app/javascript/mastodon/locales/bn.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "মুছে ফেলতে",
  "status.detailed_status": "বিস্তারিত কথোপকথনের হিসেবে দেখতে",
  "status.direct": "@{name} কে সরাসরি লেখা পাঠাতে",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/br.json => app/javascript/mastodon/locales/br.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Dilemel",
  "status.detailed_status": "Gwel kaozeadenn munudek",
  "status.direct": "Kas ur c'hannad eeun da @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Kemmañ",
  "status.edited": "Aozet {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/bs.json => app/javascript/mastodon/locales/bs.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Delete",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/ca.json => app/javascript/mastodon/locales/ca.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Elimina",
  "status.detailed_status": "Vista detallada de la conversa",
  "status.direct": "Missatge directe a @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edita",
  "status.edited": "Editat {date}",
  "status.edited_x_times": "Editat {count, plural, one {{count} vegada} other {{count} vegades}}",

M app/javascript/mastodon/locales/ckb.json => app/javascript/mastodon/locales/ckb.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "سڕینەوە",
  "status.detailed_status": "ڕوانگەی گفتوگۆ بە وردەکاری",
  "status.direct": "پەیامی ڕاستەوخۆ @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "دەستکاری",
  "status.edited": "بەشداری {date}",
  "status.edited_x_times": "دەستکاریکراوە {count, plural, one {{count} کات} other {{count} کات}}",

M app/javascript/mastodon/locales/co.json => app/javascript/mastodon/locales/co.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Toglie",
  "status.detailed_status": "Vista in ditagliu di a cunversazione",
  "status.direct": "Mandà un missaghju @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/cs.json => app/javascript/mastodon/locales/cs.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Smazat",
  "status.detailed_status": "Podrobné zobrazení konverzace",
  "status.direct": "Poslat @{name} přímou zprávu",
  "status.direct_indicator": "Private mention",
  "status.edit": "Upravit",
  "status.edited": "Upraveno {date}",
  "status.edited_x_times": "Upraveno {count, plural, one {{count}krát} few {{count}krát} many {{count}krát} other {{count}krát}}",

M app/javascript/mastodon/locales/csb.json => app/javascript/mastodon/locales/csb.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Delete",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/cy.json => app/javascript/mastodon/locales/cy.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Dileu",
  "status.detailed_status": "Golwg manwl o'r sgwrs",
  "status.direct": "Neges breifat @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Golygu",
  "status.edited": "Golygwyd {date}",
  "status.edited_x_times": "Golygwyd {count, plural, one {waith} two {waith} other {{count} gwaith}}",

M app/javascript/mastodon/locales/da.json => app/javascript/mastodon/locales/da.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Slet",
  "status.detailed_status": "Detaljeret samtalevisning",
  "status.direct": "Direkte besked til @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Redigér",
  "status.edited": "Redigeret {date}",
  "status.edited_x_times": "Redigeret {count, plural, one {{count} gang} other {{count} gange}}",

M app/javascript/mastodon/locales/de.json => app/javascript/mastodon/locales/de.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Beitrag löschen",
  "status.detailed_status": "Detaillierte Ansicht der Unterhaltung",
  "status.direct": "Direktnachricht an @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Beitrag bearbeiten",
  "status.edited": "Bearbeitet {date}",
  "status.edited_x_times": "{count, plural, one {{count} mal} other {{count} mal}} bearbeitet",

M app/javascript/mastodon/locales/defaultMessages.json => app/javascript/mastodon/locales/defaultMessages.json +12 -8
@@ 560,7 560,7 @@
        "id": "status.edit"
      },
      {
        "defaultMessage": "Direct message @{name}",
        "defaultMessage": "Privately mention @{name}",
        "id": "status.direct"
      },
      {


@@ 762,6 762,10 @@
        "id": "status.reblogged_by"
      },
      {
        "defaultMessage": "Private mention",
        "id": "status.direct_indicator"
      },
      {
        "defaultMessage": "Replied to {name}",
        "id": "status.replied_to"
      }


@@ 1109,7 1113,7 @@
        "id": "account.mention"
      },
      {
        "defaultMessage": "Direct message @{name}",
        "defaultMessage": "Privately mention @{name}",
        "id": "account.direct"
      },
      {


@@ 1627,7 1631,7 @@
        "id": "privacy.private.long"
      },
      {
        "defaultMessage": "Mentioned people only",
        "defaultMessage": "Private mention",
        "id": "privacy.direct.short"
      },
      {


@@ 1925,7 1929,7 @@
  {
    "descriptors": [
      {
        "defaultMessage": "Direct messages",
        "defaultMessage": "Private mentions",
        "id": "column.direct"
      },
      {


@@ 1937,7 1941,7 @@
        "id": "compose_form.direct_message_warning_learn_more"
      },
      {
        "defaultMessage": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
        "defaultMessage": "You don't have any private mentions yet. When you send or receive one, it will show up here.",
        "id": "empty_column.direct"
      }
    ],


@@ 2432,7 2436,7 @@
        "id": "navigation_bar.explore"
      },
      {
        "defaultMessage": "Direct messages",
        "defaultMessage": "Private mentions",
        "id": "navigation_bar.direct"
      },
      {


@@ 3550,7 3554,7 @@
        "id": "status.edit"
      },
      {
        "defaultMessage": "Direct message @{name}",
        "defaultMessage": "Privately mention @{name}",
        "id": "status.direct"
      },
      {


@@ 4199,7 4203,7 @@
        "id": "tabs_bar.federated_timeline"
      },
      {
        "defaultMessage": "Direct messages",
        "defaultMessage": "Private mentions",
        "id": "navigation_bar.direct"
      },
      {

M app/javascript/mastodon/locales/el.json => app/javascript/mastodon/locales/el.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Διαγραφή",
  "status.detailed_status": "Προβολή λεπτομερειών συζήτησης",
  "status.direct": "Προσωπικό μήνυμα προς @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Επεξεργασία",
  "status.edited": "Επεξεργάστηκε στις {date}",
  "status.edited_x_times": "Επεξεργάστηκε {count, plural, one {{count} φορά} other {{count} φορές}}",

M app/javascript/mastodon/locales/en-GB.json => app/javascript/mastodon/locales/en-GB.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Delete",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/en.json => app/javascript/mastodon/locales/en.json +7 -6
@@ 20,7 20,7 @@
  "account.blocked": "Blocked",
  "account.browse_more_on_origin_server": "Browse more on the original profile",
  "account.cancel_follow_request": "Withdraw follow request",
  "account.direct": "Direct message @{name}",
  "account.direct": "Privately mention @{name}",
  "account.disable_notifications": "Stop notifying me when @{name} posts",
  "account.domain_blocked": "Domain blocked",
  "account.edit_profile": "Edit profile",


@@ 102,7 102,7 @@
  "column.blocks": "Blocked users",
  "column.bookmarks": "Bookmarks",
  "column.community": "Local timeline",
  "column.direct": "Direct messages",
  "column.direct": "Private mentions",
  "column.directory": "Browse profiles",
  "column.domain_blocks": "Blocked domains",
  "column.favourites": "Favourites",


@@ 220,7 220,7 @@
  "empty_column.blocks": "You haven't blocked any users yet.",
  "empty_column.bookmarked_statuses": "You don't have any bookmarked posts yet. When you bookmark one, it will show up here.",
  "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
  "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
  "empty_column.direct": "You don't have any private mentions yet. When you send or receive one, it will show up here.",
  "empty_column.domain_blocks": "There are no blocked domains yet.",
  "empty_column.explore_statuses": "Nothing is trending right now. Check back later!",
  "empty_column.favourited_statuses": "You don't have any favourite posts yet. When you favourite one, it will show up here.",


@@ 318,7 318,7 @@
  "keyboard_shortcuts.column": "Focus column",
  "keyboard_shortcuts.compose": "Focus compose textarea",
  "keyboard_shortcuts.description": "Description",
  "keyboard_shortcuts.direct": "to open direct messages column",
  "keyboard_shortcuts.direct": "to open private mentions column",
  "keyboard_shortcuts.down": "Move down in the list",
  "keyboard_shortcuts.enter": "Open post",
  "keyboard_shortcuts.favourite": "Favourite post",


@@ 380,7 380,7 @@
  "navigation_bar.bookmarks": "Bookmarks",
  "navigation_bar.community_timeline": "Local timeline",
  "navigation_bar.compose": "Compose new post",
  "navigation_bar.direct": "Direct messages",
  "navigation_bar.direct": "Private mentions",
  "navigation_bar.discover": "Discover",
  "navigation_bar.domain_blocks": "Blocked domains",
  "navigation_bar.edit_profile": "Edit profile",


@@ 562,7 562,8 @@
  "status.copy": "Copy link to post",
  "status.delete": "Delete",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct": "Privately mention @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/eo.json => app/javascript/mastodon/locales/eo.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Forigi",
  "status.detailed_status": "Detala konversacia vido",
  "status.direct": "Rekte mesaĝi @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Redakti",
  "status.edited": "Redaktita {date}",
  "status.edited_x_times": "Redactita {count, plural, one {{count} fojon} other {{count} fojojn}}",

M app/javascript/mastodon/locales/es-AR.json => app/javascript/mastodon/locales/es-AR.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Eliminar",
  "status.detailed_status": "Vista de conversación detallada",
  "status.direct": "Mensaje directo para @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Editar",
  "status.edited": "Editado {date}",
  "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}",

M app/javascript/mastodon/locales/es-MX.json => app/javascript/mastodon/locales/es-MX.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Borrar",
  "status.detailed_status": "Vista de conversación detallada",
  "status.direct": "Enviar mensaje a @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Editar",
  "status.edited": "Editado {date}",
  "status.edited_x_times": "Editado {count, plural, one {{count} time} other {{count} veces}}",

M app/javascript/mastodon/locales/es.json => app/javascript/mastodon/locales/es.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Borrar",
  "status.detailed_status": "Vista de conversación detallada",
  "status.direct": "Mensaje directo a @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Editar",
  "status.edited": "Editado {date}",
  "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}",

M app/javascript/mastodon/locales/et.json => app/javascript/mastodon/locales/et.json +2 -1
@@ 491,7 491,7 @@
  "report.category.title_status": "postitusega",
  "report.close": "Valmis",
  "report.comment.title": "Kas arvad, et on veel midagi, mida me peaks teadma?",
  "report.forward": "Edasta kasutajale {target}",
  "report.forward": "Edasta ka {target} domeeni",
  "report.forward_hint": "See kasutaja on teisest serverist. Kas saadan anonümiseeritud koopia sellest teatest sinna ka?",
  "report.mute": "Vaigista",
  "report.mute_explanation": "Sa ei näe tema postitusi. Ta võib ikka sind jälgida ja su postitusi näha. Ta ei saa teada, et ta on vaigistatud.",


@@ 558,6 558,7 @@
  "status.delete": "Kustuta",
  "status.detailed_status": "Detailne vestluskuva",
  "status.direct": "Saada otsesõnum @{name}'ile",
  "status.direct_indicator": "Private mention",
  "status.edit": "Muuda",
  "status.edited": "{date} muudetud",
  "status.edited_x_times": "Muudetud {count, plural, one{{count} kord} other {{count} korda}}",

M app/javascript/mastodon/locales/eu.json => app/javascript/mastodon/locales/eu.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Ezabatu",
  "status.detailed_status": "Elkarrizketaren ikuspegi xehetsua",
  "status.direct": "Mezu zuzena @{name}(r)i",
  "status.direct_indicator": "Private mention",
  "status.edit": "Editatu",
  "status.edited": "Editatua {date}",
  "status.edited_x_times": "{count, plural, one {behin} other {{count} aldiz}} editatua",

M app/javascript/mastodon/locales/fa.json => app/javascript/mastodon/locales/fa.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "حذف",
  "status.detailed_status": "نمایش کامل گفتگو",
  "status.direct": "پیام مستقیم به ‎@{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "ویرایش",
  "status.edited": "ویرایش شده در {date}",
  "status.edited_x_times": "{count, plural, one {{count} مرتبه} other {{count} مرتبه}} ویرایش شد",

M app/javascript/mastodon/locales/fi.json => app/javascript/mastodon/locales/fi.json +43 -42
@@ 1,6 1,6 @@
{
  "about.blocks": "Moderoidut palvelimet",
  "about.contact": "Yhteystiedot:",
  "about.contact": "Ota yhteyttä:",
  "about.disclaimer": "Mastodon on vapaa avoimen lähdekoodin ohjelmisto ja Mastodon gGmbH:n tavaramerkki.",
  "about.domain_blocks.no_reason_available": "Syytä ei ole ilmoitettu",
  "about.domain_blocks.preamble": "Yleisesti Mastodonin avulla voidaan tarkastella minkä tahansa muun fediverse-palvelinten sisältöä ja vuorovaikuttaa eri palvelinten käyttäjien kanssa. Nämä ovat tälle palvelimelle määritetyt poikkeukset.",


@@ 9,7 9,7 @@
  "about.domain_blocks.suspended.explanation": "Mitään tämän palvelimen tietoja ei käsitellä, tallenneta tai vaihdeta, mikä tekee vuorovaikutuksesta ja viestinnästä sen käyttäjien kanssa mahdotonta.",
  "about.domain_blocks.suspended.title": "Jäädytetty",
  "about.not_available": "Näitä tietoja ei ole julkaistu tällä palvelimella.",
  "about.powered_by": "Hajautettu sosiaalinen media, tarjoaa {mastodon}",
  "about.powered_by": "Hajautetun sosiaalisen median tarjoaa {mastodon}",
  "about.rules": "Palvelimen säännöt",
  "account.account_note_header": "Muistiinpano",
  "account.add_or_remove_from_list": "Lisää tai poista listoilta",


@@ 21,8 21,8 @@
  "account.browse_more_on_origin_server": "Selaile lisää alkuperäisellä palvelimella",
  "account.cancel_follow_request": "Peruuta seurantapyyntö",
  "account.direct": "Yksityisviesti käyttäjälle @{name}",
  "account.disable_notifications": "Lopeta @{name}:n julkaisuista ilmoittaminen",
  "account.domain_blocked": "Verkko-osoite estetty",
  "account.disable_notifications": "Lopeta ilmoittamasta minulle, kun @{name} julkaisee",
  "account.domain_blocked": "Palvelu estetty",
  "account.edit_profile": "Muokkaa profiilia",
  "account.enable_notifications": "Ilmoita kun käyttäjä @{name} julkaisee viestin",
  "account.endorse": "Suosittele profiilissasi",


@@ 50,7 50,7 @@
  "account.mute_notifications": "Mykistä käyttäjän @{name} ilmoitukset",
  "account.muted": "Mykistetty",
  "account.open_original_page": "Avaa alkuperäinen sivu",
  "account.posts": "Viestit",
  "account.posts": "Julkaisut",
  "account.posts_with_replies": "Viestit ja vastaukset",
  "account.report": "Ilmoita käyttäjästä @{name}",
  "account.requested": "Odottaa hyväksyntää. Peruuta seuraamispyyntö klikkaamalla",


@@ 58,7 58,7 @@
  "account.share": "Jaa käyttäjän @{name} profiili",
  "account.show_reblogs": "Näytä tehostukset käyttäjältä @{name}",
  "account.statuses_counter": "{count, plural, one {{counter} viesti} other {{counter} viestiä}}",
  "account.unblock": "Salli @{name}",
  "account.unblock": "Poista esto: @{name}",
  "account.unblock_domain": "Salli palvelu {domain}",
  "account.unblock_short": "Poista esto",
  "account.unendorse": "Poista suosittelu profiilistasi",


@@ 104,7 104,7 @@
  "column.community": "Paikallinen aikajana",
  "column.direct": "Yksityisviestit",
  "column.directory": "Selaa profiileja",
  "column.domain_blocks": "Estetytr verkkotunnukset",
  "column.domain_blocks": "Estetyt palvelut",
  "column.favourites": "Suosikit",
  "column.follow_requests": "Seuraamispyynnöt",
  "column.home": "Koti",


@@ 149,7 149,7 @@
  "compose_form.spoiler.unmarked": "Lisää sisältövaroitus",
  "compose_form.spoiler_placeholder": "Kirjoita varoituksesi tähän",
  "confirmation_modal.cancel": "Peruuta",
  "confirmations.block.block_and_report": "Estä ja raportoi",
  "confirmations.block.block_and_report": "Estä ja ilmianna",
  "confirmations.block.confirm": "Estä",
  "confirmations.block.message": "Haluatko varmasti estää käyttäjän {name}?",
  "confirmations.cancel_follow_request.confirm": "Peruuta pyyntö",


@@ 163,7 163,7 @@
  "confirmations.domain_block.confirm": "Estä koko palvelu",
  "confirmations.domain_block.message": "Haluatko aivan varmasti estää palvelun {domain} täysin? Useimmiten muutama kohdistettu esto tai mykistys on riittävä ja suositeltava toimenpide. Et näe kyseisen sisältöä kyseiseltä verkkoalueelta missään julkisissa aikajanoissa tai ilmoituksissa. Tälle verkkoalueelle kuuluvat seuraajasi poistetaan.",
  "confirmations.edit.confirm": "Muokkaa",
  "confirmations.edit.message": "Tässä tilanteessa muokkaus korvaa tällä hetkellä työstämäsi viestin. Haluatko varmasti jatkaa?",
  "confirmations.edit.message": "Muokkaaminen nyt korvaa viestin, jota paraikaa työstät. Haluatko varmasti jatkaa?",
  "confirmations.logout.confirm": "Kirjaudu ulos",
  "confirmations.logout.message": "Haluatko varmasti kirjautua ulos?",
  "confirmations.mute.confirm": "Mykistä",


@@ 210,15 210,15 @@
  "emoji_button.search_results": "Hakutulokset",
  "emoji_button.symbols": "Symbolit",
  "emoji_button.travel": "Matkailu ja paikat",
  "empty_column.account_suspended": "Tilin käyttäminen jäädytetty",
  "empty_column.account_suspended": "Tili jäädytetty",
  "empty_column.account_timeline": "Ei viestejä täällä.",
  "empty_column.account_unavailable": "Profiilia ei löydy",
  "empty_column.blocks": "Et ole vielä estänyt käyttäjiä.",
  "empty_column.blocks": "Et ole estänyt käyttäjiä.",
  "empty_column.bookmarked_statuses": "Et ole vielä lisännyt viestejä kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.",
  "empty_column.community": "Paikallinen aikajana on tyhjä. Kirjoita jotain julkista, niin homma lähtee käyntiin!",
  "empty_column.direct": "Sinulla ei ole vielä yksityisviestejä. Kun lähetät tai vastaanotat sellaisen, se näkyy tässä.",
  "empty_column.domain_blocks": "Palveluita ei ole vielä estetty.",
  "empty_column.explore_statuses": "Mikään ei ole nyt trendi. Tarkista myöhemmin!",
  "empty_column.explore_statuses": "Mikään ei trendaa nyt. Tarkista myöhemmin uudelleen!",
  "empty_column.favourited_statuses": "Et ole vielä lisännyt viestejä kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.",
  "empty_column.favourites": "Kukaan ei ole vielä lisännyt tätä viestiä suosikkeihinsa. Kun joku tekee niin, näkyy kyseinen henkilö tässä.",
  "empty_column.follow_recommendations": "Näyttää siltä, että sinulle ei voi luoda ehdotuksia. Voit yrittää etsiä ihmisiä, jotka saatat tuntea tai tutkia trendaavia aihetunnisteita.",


@@ 230,8 230,8 @@
  "empty_column.list": "Tässä luettelossa ei ole vielä mitään. Kun tämän luettelon jäsenet julkaisevat uusia viestejä, ne näkyvät täällä.",
  "empty_column.lists": "Sinulla ei ole vielä yhtään listaa. Kun luot sellaisen, näkyy se tässä.",
  "empty_column.mutes": "Et ole mykistänyt vielä yhtään käyttäjää.",
  "empty_column.notifications": "Sinulla ei ole vielä ilmoituksia. Kun muut ihmiset ovat vuorovaikutuksessa kanssasi, näet sen täällä.",
  "empty_column.public": "Täällä ei ole mitään! Kirjoita jotain julkisesti tai manuaalisesti seuraa muiden palvelimien käyttäjiä niin saat sisältöä",
  "empty_column.notifications": "Sinulla ei ole vielä ilmoituksia. Kun keskustelet muille, näet sen täällä.",
  "empty_column.public": "Täällä ei ole mitään! Kirjoita jotain julkisesti. Voit myös seurata muiden palvelimien käyttäjiä",
  "error.unexpected_crash.explanation": "Sivua ei voi näyttää oikein, johtuen bugista tai ongelmasta selaimen yhteensopivuudessa.",
  "error.unexpected_crash.explanation_addons": "Sivua ei voitu näyttää oikein. Tämä virhe johtuu todennäköisesti selaimen lisäosasta tai automaattisista käännöstyökaluista.",
  "error.unexpected_crash.next_steps": "Kokeile sivun päivitystä. Jos se ei auta, voi Mastodonin käyttö silti olla mahdollista eri selaimella tai natiivilla sovelluksella.",


@@ 242,7 242,7 @@
  "explore.suggested_follows": "Sinulle",
  "explore.title": "Selaa",
  "explore.trending_links": "Uutiset",
  "explore.trending_statuses": "Viestit",
  "explore.trending_statuses": "Julkaisut",
  "explore.trending_tags": "Aihetunnisteet",
  "filter_modal.added.context_mismatch_explanation": "Tämä suodatinluokka ei koske asiayhteyttä, jossa olet käyttänyt tätä viestiä. Jos haluat, että viesti suodatetaan myös tässä yhteydessä, sinun on muokattava suodatinta.",
  "filter_modal.added.context_mismatch_title": "Asiayhteys ei täsmää!",


@@ 265,7 265,7 @@
  "follow_recommendations.lead": "Seuraamiesi julkaisut näkyvät aikajärjestyksessä kotisyötteessä. Älä pelkää seurata vahingossa, voit lopettaa seuraamisen yhtä helposti!",
  "follow_request.authorize": "Valtuuta",
  "follow_request.reject": "Hylkää",
  "follow_requests.unlocked_explanation": "Vaikkei tiliäsi ole lukittu, palvelun {domain} ylläpito on arvioinut, että voi olla halukas tarkistamaan nämä seurauspyynnöt erikseen.",
  "follow_requests.unlocked_explanation": "Vaikkei tiliäsi ole lukittu, on palvelun {domain} ylläpito arvioinut, että saatat olla halukas tarkistamaan nämä seurauspyynnöt erikseen.",
  "followed_tags": "Seuratut aihetunnisteet",
  "footer.about": "Tietoja",
  "footer.directory": "Profiilihakemisto",


@@ 316,7 316,7 @@
  "keyboard_shortcuts.description": "Kuvaus",
  "keyboard_shortcuts.direct": "avataksesi yksityisviestisarakkeen",
  "keyboard_shortcuts.down": "Siirry listassa alaspäin",
  "keyboard_shortcuts.enter": "Avaa viesti",
  "keyboard_shortcuts.enter": "Avaa julkaisu",
  "keyboard_shortcuts.favourite": "Lisää suosikkeihin",
  "keyboard_shortcuts.favourites": "Avaa lista suosikeista",
  "keyboard_shortcuts.federated": "Avaa yleinen aikajana",


@@ 328,7 328,7 @@
  "keyboard_shortcuts.mention": "Mainitse julkaisija",
  "keyboard_shortcuts.muted": "Avaa lista mykistetyistä käyttäjistä",
  "keyboard_shortcuts.my_profile": "Avaa profiilisi",
  "keyboard_shortcuts.notifications": "Avaa ilmoitukset-sarake",
  "keyboard_shortcuts.notifications": "Avaa ilmoitukset-valikko",
  "keyboard_shortcuts.open_media": "Avaa media",
  "keyboard_shortcuts.pinned": "Avaa lista kiinnitetyistä viesteistä",
  "keyboard_shortcuts.profile": "Avaa kirjoittajan profiili",


@@ 336,10 336,10 @@
  "keyboard_shortcuts.requests": "Avaa lista seurauspyynnöistä",
  "keyboard_shortcuts.search": "siirry hakukenttään",
  "keyboard_shortcuts.spoilers": "Näytä/piilota sisältövaroituskenttä",
  "keyboard_shortcuts.start": "avaa \"Aloitus\"-sarake",
  "keyboard_shortcuts.start": "avaa \"Aloitus\"",
  "keyboard_shortcuts.toggle_hidden": "näytä/piilota sisältövaroituksella merkitty teksti",
  "keyboard_shortcuts.toggle_sensitivity": "näytä/piilota media",
  "keyboard_shortcuts.toot": "Aloita uusi viesti",
  "keyboard_shortcuts.toot": "Luo uusi julkaisu",
  "keyboard_shortcuts.unfocus": "Poistu teksti-/hakukentästä",
  "keyboard_shortcuts.up": "Siirry listassa ylöspäin",
  "lightbox.close": "Sulje",


@@ 375,7 375,7 @@
  "navigation_bar.blocks": "Estetyt käyttäjät",
  "navigation_bar.bookmarks": "Kirjanmerkit",
  "navigation_bar.community_timeline": "Paikallinen aikajana",
  "navigation_bar.compose": "Luo uusi viesti",
  "navigation_bar.compose": "Julkaise",
  "navigation_bar.direct": "Yksityisviestit",
  "navigation_bar.discover": "Löydä uutta",
  "navigation_bar.domain_blocks": "Estetyt palvelut",


@@ 395,10 395,10 @@
  "navigation_bar.public_timeline": "Yleinen aikajana",
  "navigation_bar.search": "Haku",
  "navigation_bar.security": "Turvallisuus",
  "not_signed_in_indicator.not_signed_in": "Sinun täytyy kirjautua sisään päästäksesi käsiksi tähän resurssiin.",
  "notification.admin.report": "{name} ilmoitti {target}",
  "not_signed_in_indicator.not_signed_in": "Sinun tulee kirjautua sisään nähdäksesi tämän.",
  "notification.admin.report": "{name} teki ilmoituksen käytäjästä {target}",
  "notification.admin.sign_up": "{name} rekisteröityi",
  "notification.favourite": "{name} tykkäsi viestistäsi",
  "notification.favourite": "{name} tykkäsi julkaisustasi",
  "notification.follow": "{name} seurasi sinua",
  "notification.follow_request": "{name} haluaa seurata sinua",
  "notification.mention": "{name} mainitsi sinut",


@@ 409,7 409,7 @@
  "notification.update": "{name} muokkasi viestiä",
  "notifications.clear": "Tyhjennä ilmoitukset",
  "notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?",
  "notifications.column_settings.admin.report": "Uudet raportit:",
  "notifications.column_settings.admin.report": "Uudet ilmoitukset:",
  "notifications.column_settings.admin.sign_up": "Uudet kirjautumiset:",
  "notifications.column_settings.alert": "Työpöytäilmoitukset",
  "notifications.column_settings.favourite": "Tykkäykset:",


@@ 424,7 424,7 @@
  "notifications.column_settings.reblog": "Tehostukset:",
  "notifications.column_settings.show": "Näytä sarakkeessa",
  "notifications.column_settings.sound": "Äänimerkki",
  "notifications.column_settings.status": "Uudet viestit:",
  "notifications.column_settings.status": "Uudet julkaisut:",
  "notifications.column_settings.unread_notifications.category": "Lukemattomat ilmoitukset",
  "notifications.column_settings.unread_notifications.highlight": "Korosta lukemattomat ilmoitukset",
  "notifications.column_settings.update": "Muokkaukset:",


@@ 474,32 474,32 @@
  "relative_time.full.just_now": "juuri nyt",
  "relative_time.full.minutes": "{number, plural, one {# minuutti} other {# minuuttia}} sitten",
  "relative_time.full.seconds": "{number, plural, one {# sekunti} other {# sekuntia}} sitten",
  "relative_time.hours": "{number} tuntia",
  "relative_time.hours": "{number} t",
  "relative_time.just_now": "nyt",
  "relative_time.minutes": "{number} min",
  "relative_time.seconds": "{number} sek",
  "relative_time.seconds": "{number} s",
  "relative_time.today": "tänään",
  "reply_indicator.cancel": "Peruuta",
  "report.block": "Estä",
  "report.block_explanation": "Et näe heidän viestejään, eivätkä he voi nähdä viestejäsi tai seurata sinua. He näkevät, että heidät on estetty.",
  "report.categories.other": "Muu",
  "report.block_explanation": "Et näe hänen viestejään, eikä hän voi nähdä viestejäsi tai seurata sinua. Hän näkevät, että olet estänyt hänet.",
  "report.categories.other": "muu",
  "report.categories.spam": "Roskaposti",
  "report.categories.violation": "Sisältö rikkoo yhtä tai useampaa palvelimen sääntöä",
  "report.category.subtitle": "Valitse paras vastaavuus",
  "report.category.title": "Kerro meille miksi tämä {type} pitää raportoida",
  "report.category.subtitle": "Valitse se, mikä sopii parhaiten",
  "report.category.title": "Kerro meille, miksi ilmiannat tämän: {type} ",
  "report.category.title_account": "profiili",
  "report.category.title_status": "viesti",
  "report.category.title_status": "julkaisu",
  "report.close": "Valmis",
  "report.comment.title": "Pitäisikö meidän tietää jotain muuta?",
  "report.comment.title": "Olisiko jotain muuta, mitä meidän pitäisi tietää?",
  "report.forward": "Välitä kohteeseen {target}",
  "report.forward_hint": "Tämä tili on toisella palvelimella. Haluatko lähettää nimettömän raportin myös sinne?",
  "report.mute": "Mykistä",
  "report.mute_explanation": "Et näe heidän viestejään. He voivat silti seurata sinua ja nähdä viestisi eivätkä tiedä, että heidät on mykistetty.",
  "report.mute_explanation": "Et näe hänen viestejään. Hän voi silti seurata sinua ja nähdä viestisi. Hän ei tiedä, että on mykistetty.",
  "report.next": "Seuraava",
  "report.placeholder": "Lisäkommentit",
  "report.reasons.dislike": "En pidä siitä",
  "report.reasons.dislike_description": "Et halua nähdä sitä",
  "report.reasons.other": "Se on jotain muuta",
  "report.reasons.other": "Jotain muuta",
  "report.reasons.other_description": "Ongelma ei sovi muihin kategorioihin",
  "report.reasons.spam": "Se on roskapostia",
  "report.reasons.spam_description": "Haitalliset linkit, väärennetyt sitoutumiset tai toistuvat vastaukset",


@@ 507,27 507,27 @@
  "report.reasons.violation_description": "Tiedät, että se rikkoo tiettyjä sääntöjä",
  "report.rules.subtitle": "Valitse kaikki jotka sopivat",
  "report.rules.title": "Mitä sääntöjä rikotaan?",
  "report.statuses.subtitle": "Valitse kaikki jotka sopivat",
  "report.statuses.subtitle": "Valitse kaikki sopivat",
  "report.statuses.title": "Onko olemassa yhtään viestiä, jotka tukevat tätä raporttia?",
  "report.submit": "Lähetä",
  "report.target": "Raportoidaan {target}",
  "report.thanks.take_action": "Tässä on vaihtoehtosi hallita näkemääsi Mastodonissa:",
  "report.thanks.take_action_actionable": "Sillä välin kun tarkistamme tätä, voit ryhtyä toimenpiteisiin käyttäjää @{name} vastaan:",
  "report.thanks.title": "Etkö halua nähdä tätä?",
  "report.thanks.title_actionable": "Kiitos raportista, tutkimme asiaa.",
  "report.thanks.title_actionable": "Kiitos ilmoituksesta, tarkistamme asian.",
  "report.unfollow": "Lopeta käyttäjän @{name} seuraaminen",
  "report.unfollow_explanation": "Seuraat tätä tiliä. Jotta et enää näe tilin viestejä, lopeta tilin seuraaminen.",
  "report_notification.attached_statuses": "{count, plural, one {{count} viesti} other {{count} viestiä}} liitteenä",
  "report_notification.categories.other": "Muu",
  "report_notification.categories.spam": "Roskaposti",
  "report_notification.categories.violation": "Sääntöjen rikkominen",
  "report_notification.open": "Avaa raportti",
  "report_notification.open": "Avaa ilmoitus",
  "search.placeholder": "Hae",
  "search.search_or_paste": "Etsi tai kirjoita URL-osoite",
  "search_popout.search_format": "Tarkennettu haku",
  "search_popout.tips.full_text": "Tekstihaku listaa tilapäivitykset, jotka olet kirjoittanut, lisännyt suosikkeihisi, tehostanut tai joissa sinut mainitaan, sekä tekstin sisältävät käyttäjänimet, nimimerkit ja aihetunnisteet.",
  "search_popout.tips.hashtag": "aihetunnisteet",
  "search_popout.tips.status": "viesti",
  "search_popout.tips.status": "julkaisu",
  "search_popout.tips.text": "Tekstihaku listaa hakua vastaavat nimimerkit, käyttäjänimet ja aihetunnisteet",
  "search_popout.tips.user": "käyttäjä",
  "search_results.accounts": "Ihmiset",


@@ 558,6 558,7 @@
  "status.delete": "Poista",
  "status.detailed_status": "Yksityiskohtainen keskustelunäkymä",
  "status.direct": "Yksityisviesti käyttäjälle @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Muokkaa",
  "status.edited": "Muokattu {date}",
  "status.edited_x_times": "Muokattu {count, plural, one {{count} kerran} other {{count} kertaa}}",


@@ 576,7 577,7 @@
  "status.mute_conversation": "Mykistä keskustelu",
  "status.open": "Laajenna julkaisu",
  "status.pin": "Kiinnitä profiiliin",
  "status.pinned": "Kiinnitetty viesti",
  "status.pinned": "Kiinnitetty julkaisu",
  "status.read_more": "Näytä enemmän",
  "status.reblog": "Tehosta",
  "status.reblog_private": "Tehosta alkuperäiselle yleisölle",


@@ 597,7 598,7 @@
  "status.show_more_all": "Näytä lisää kaikista",
  "status.show_original": "Näytä alkuperäinen",
  "status.translate": "Käännä",
  "status.translated_from_with": "Käännetty kielestä {lang} käyttäen palvelua {provider}",
  "status.translated_from_with": "Käännetty kielestä {lang} käyttäen {provider}",
  "status.uncached_media_warning": "Ei saatavilla",
  "status.unmute_conversation": "Poista keskustelun mykistys",
  "status.unpin": "Irrota profiilista",

M app/javascript/mastodon/locales/fo.json => app/javascript/mastodon/locales/fo.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Strika",
  "status.detailed_status": "Útgreinað samrøðusýni",
  "status.direct": "Beinleiðis boð @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Rætta",
  "status.edited": "Rættað {date}",
  "status.edited_x_times": "Rættað {count, plural, one {{count} ferð} other {{count} ferð}}",

M app/javascript/mastodon/locales/fr-QC.json => app/javascript/mastodon/locales/fr-QC.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Supprimer",
  "status.detailed_status": "Vue détaillée de la conversation",
  "status.direct": "Envoyer un message direct à @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Modifier",
  "status.edited": "Modifiée le {date}",
  "status.edited_x_times": "Modifiée {count, plural, one {{count} fois} other {{count} fois}}",

M app/javascript/mastodon/locales/fr.json => app/javascript/mastodon/locales/fr.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Supprimer",
  "status.detailed_status": "Vue détaillée de la conversation",
  "status.direct": "Envoyer un message direct à @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Éditer",
  "status.edited": "Édité le {date}",
  "status.edited_x_times": "Edité {count, plural, one {{count} fois} other {{count} fois}}",

M app/javascript/mastodon/locales/fy.json => app/javascript/mastodon/locales/fy.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Fuortsmite",
  "status.detailed_status": "Detaillearre petearoersjoch",
  "status.direct": "@{name} in direkt berjocht stjoere",
  "status.direct_indicator": "Private mention",
  "status.edit": "Bewurkje",
  "status.edited": "Bewurke op {date}",
  "status.edited_x_times": "{count, plural, one {{count} kear} other {{count} kearen}} bewurke",

M app/javascript/mastodon/locales/ga.json => app/javascript/mastodon/locales/ga.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Scrios",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Seol teachtaireacht dhíreach chuig @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Cuir in eagar",
  "status.edited": "Curtha in eagar in {date}",
  "status.edited_x_times": "Curtha in eagar {count, plural, one {{count} uair amháin} two {{count} uair} few {{count} uair} many {{count} uair} other {{count} uair}}",

M app/javascript/mastodon/locales/gd.json => app/javascript/mastodon/locales/gd.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Sguab às",
  "status.detailed_status": "Mion-shealladh a’ chòmhraidh",
  "status.direct": "Cuir teachdaireachd dhìreach gu @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Deasaich",
  "status.edited": "Air a dheasachadh {date}",
  "status.edited_x_times": "Chaidh a dheasachadh {count, plural, one {{counter} turas} two {{counter} thuras} few {{counter} tursan} other {{counter} turas}}",

M app/javascript/mastodon/locales/gl.json => app/javascript/mastodon/locales/gl.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Eliminar",
  "status.detailed_status": "Vista detallada da conversa",
  "status.direct": "Mensaxe directa a @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Editar",
  "status.edited": "Editado {date}",
  "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}",

M app/javascript/mastodon/locales/he.json => app/javascript/mastodon/locales/he.json +4 -3
@@ 153,7 153,7 @@
  "confirmations.block.confirm": "לחסום",
  "confirmations.block.message": "האם את/ה בטוח/ה שברצונך למחוק את \"{name}\"?",
  "confirmations.cancel_follow_request.confirm": "ויתור על בקשה",
  "confirmations.cancel_follow_request.message": "האם באמת לוותר על בקשת המעקב אחרי {name}?",
  "confirmations.cancel_follow_request.message": "לבטל את בקשת המעקב אחרי {name}?",
  "confirmations.delete.confirm": "למחוק",
  "confirmations.delete.message": "בטוח/ה שאת/ה רוצה למחוק את ההודעה?",
  "confirmations.delete_list.confirm": "למחוק",


@@ 163,7 163,7 @@
  "confirmations.domain_block.confirm": "חסמו לגמרי את שם המתחם (דומיין)",
  "confirmations.domain_block.message": "בטוחה שברצונך באמת לחסום את קהילת {domain}? ברב המקרים השתקה וחסימה של מספר משתמשים עשוייה להספיק. לא תראי תוכל מכלל שם המתחם בפידים הציבוריים או בהתראות שלך. העוקבים שלך מהקהילה הזאת יוסרו",
  "confirmations.edit.confirm": "עריכה",
  "confirmations.edit.message": "עריכת תגובה קודמת תדרוס את ההודעה שכבר התחלת לכתוב. האם את.ה בטוח.ה שברצונך להמשיך?",
  "confirmations.edit.message": "עריכה תדרוס את ההודעה שכבר התחלת לכתוב. האם להמשיך?",
  "confirmations.logout.confirm": "התנתקות",
  "confirmations.logout.message": "האם אתם בטוחים שאתם רוצים להתנתק?",
  "confirmations.mute.confirm": "להשתיק",


@@ 172,7 172,7 @@
  "confirmations.redraft.confirm": "מחיקה ועריכה מחדש",
  "confirmations.redraft.message": "בטוחה שאת רוצה למחוק ולהתחיל טיוטה חדשה? חיבובים והדהודים יאבדו, ותגובות להודעה המקורית ישארו יתומות.",
  "confirmations.reply.confirm": "תגובה",
  "confirmations.reply.message": "תגובה עכשיו תדרוס את ההודעה שכבר התחלתים לכתוב. האם אתם בטוחים שברצונכם להמשיך?",
  "confirmations.reply.message": "תגובה עכשיו תמחק את ההודעה שכבר התחלת לכתוב. להמשיך?",
  "confirmations.unfollow.confirm": "הפסקת מעקב",
  "confirmations.unfollow.message": "להפסיק מעקב אחרי {name}?",
  "conversation.delete": "מחיקת שיחה",


@@ 558,6 558,7 @@
  "status.delete": "מחיקה",
  "status.detailed_status": "תצוגת שיחה מפורטת",
  "status.direct": "הודעה ישירה ל@{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "עריכה",
  "status.edited": "נערך ב{date}",
  "status.edited_x_times": "נערך {count, plural, one {פעם {count}} other {{count} פעמים}}",

M app/javascript/mastodon/locales/hi.json => app/javascript/mastodon/locales/hi.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Delete",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/hr.json => app/javascript/mastodon/locales/hr.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Obriši",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Uredi",
  "status.edited": "Uređeno {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/hu.json => app/javascript/mastodon/locales/hu.json +140 -139
@@ 34,7 34,7 @@
  "account.followers.empty": "Ezt a felhasználót még senki sem követi.",
  "account.followers_counter": "{count, plural, one {{counter} Követő} other {{counter} Követő}}",
  "account.following": "Követve",
  "account.following_counter": "{count, plural, one {{counter} Követett} other {{counter} Követett}}",
  "account.following_counter": "{count, plural, one {{counter} követett} other {{counter} követett}}",
  "account.follows.empty": "Ez a felhasználó még senkit sem követ.",
  "account.follows_you": "Követ téged",
  "account.go_to_profile": "Ugrás a profilhoz",


@@ 53,8 53,8 @@
  "account.posts": "Bejegyzések",
  "account.posts_with_replies": "Bejegyzések és válaszok",
  "account.report": "@{name} jelentése",
  "account.requested": "Jóváhagysára vár. Kattints a követési kérés visszavonásához",
  "account.requested_follow": "{name} kérte, hogy követhessen téged",
  "account.requested": "Jóváhagysára vár. Kattintás a követési kérés törléséhez",
  "account.requested_follow": "{name} kérte, hogy követhessen",
  "account.share": "@{name} profiljának megosztása",
  "account.show_reblogs": "@{name} megtolásainak mutatása",
  "account.statuses_counter": "{count, plural, one {{counter} Bejegyzés} other {{counter} Bejegyzés}}",


@@ 66,7 66,7 @@
  "account.unmute": "@{name} némításának feloldása",
  "account.unmute_notifications": "@{name} némított értesítéseinek feloldása",
  "account.unmute_short": "Némitás feloldása",
  "account_note.placeholder": "Kattints jegyzet hozzáadásához",
  "account_note.placeholder": "Kattintás jegyzet hozzáadásához",
  "admin.dashboard.daily_retention": "Napi regisztráció utáni felhasználómegtartási arány",
  "admin.dashboard.monthly_retention": "Havi regisztráció utáni felhasználómegtartási arány",
  "admin.dashboard.retention.average": "Átlag",


@@ 96,7 96,7 @@
  "closed_registrations.other_server_instructions": "Mivel a Mastdon decentralizált, létrehozhatsz egy fiókot egy másik kiszolgálón és mégis kapcsolódhatsz ehhez.",
  "closed_registrations_modal.description": "Fiók létrehozása a {domain} kiszolgálón jelenleg nem lehetséges, de jó, ha tudod, hogy nem szükséges fiókkal rendelkezni pont a {domain} kiszolgálón, hogy használhasd a Mastodont.",
  "closed_registrations_modal.find_another_server": "Másik kiszolgáló keresése",
  "closed_registrations_modal.preamble": "A Mastodon decentralizált, így teljesen mindegy, hol hozod létre a fiókodat, követhetsz és kapcsolódhatsz bárkivel ezen a kiszolgálón is. Saját magad is üzemeltethetsz kiszolgálót!",
  "closed_registrations_modal.preamble": "A Mastodon nem központosított, így teljesen mindegy, hol történik a fiók létrehozása, követhető bárki és kapcsolatba lehet lépni bárkivel ezen a kiszolgálón is. Saját magunk is üzemeltethetünk kiszolgálót!",
  "closed_registrations_modal.title": "Regisztráció a Mastodonra",
  "column.about": "Névjegy",
  "column.blocks": "Letiltott felhasználók",


@@ 131,7 131,7 @@
  "compose_form.hashtag_warning": "Ez a bejegyzésed nem fog megjelenni semmilyen hashtag alatt, mivel nem nyilvános. Csak a nyilvános bejegyzések kereshetők hashtaggel.",
  "compose_form.lock_disclaimer": "A fiókod nincs {locked}. Bárki követni tud, hogy megtekintse a kizárólag követőknek szánt bejegyzéseket.",
  "compose_form.lock_disclaimer.lock": "lezárva",
  "compose_form.placeholder": "Mi jár a fejedben?",
  "compose_form.placeholder": "Mire gondolunk éppen?",
  "compose_form.poll.add_option": "Lehetőség hozzáadása",
  "compose_form.poll.duration": "Szavazás időtartama",
  "compose_form.poll.option_placeholder": "{number}. lehetőség",


@@ 145,25 145,25 @@
  "compose_form.sensitive.hide": "{count, plural, one {Média kényesnek jelölése} other {Média kényesnek jelölése}}",
  "compose_form.sensitive.marked": "{count, plural, one {A médiát kényesnek jelölték} other {A médiát kényesnek jelölték}}",
  "compose_form.sensitive.unmarked": "{count, plural, one {A médiát nem jelölték kényesnek} other {A médiát nem jelölték kényesnek}}",
  "compose_form.spoiler.marked": "Tartalmi figyelmeztetés törlése",
  "compose_form.spoiler.marked": "Tartalmi figyelmeztetés eltávolítása",
  "compose_form.spoiler.unmarked": "Tartalmi figyelmeztetés hozzáadása",
  "compose_form.spoiler_placeholder": "Írd ide a figyelmeztetést",
  "confirmation_modal.cancel": "Mégse",
  "compose_form.spoiler_placeholder": "A figyelmeztetés beírása ide",
  "confirmation_modal.cancel": "Mégsem",
  "confirmations.block.block_and_report": "Letiltás és jelentés",
  "confirmations.block.confirm": "Letiltás",
  "confirmations.block.message": "Biztos, hogy letiltod: {name}?",
  "confirmations.cancel_follow_request.confirm": "Kérés visszavonása",
  "confirmations.cancel_follow_request.message": "Biztos, hogy visszavonod a(z) {name} felhasználóra vonatkozó követési kérésedet?",
  "confirmations.cancel_follow_request.message": "Biztosan visszavonásra kerüljön {name} felhasználóra vonatkozó követési kérés?",
  "confirmations.delete.confirm": "Törlés",
  "confirmations.delete.message": "Biztos, hogy törölni szeretnéd ezt a bejegyzést?",
  "confirmations.delete_list.confirm": "Törlés",
  "confirmations.delete_list.message": "Biztos, hogy véglegesen törölni szeretnéd ezt a listát?",
  "confirmations.discard_edit_media.confirm": "Elvetés",
  "confirmations.discard_edit_media.message": "Elmentetlen változtatásaid vannak a média leírásában vagy előnézetében. Eldobjuk őket?",
  "confirmations.domain_block.confirm": "Teljes domain elrejtése",
  "confirmations.discard_edit_media.message": "Elmentetlen változtatások vannak a média leírásában vagy előnézetében. Elvetésre kerüljenek?",
  "confirmations.domain_block.confirm": "Teljes tartomány tiltása",
  "confirmations.domain_block.message": "Biztos, hogy le szeretnéd tiltani a teljes {domain} domaint? A legtöbb esetben néhány célzott tiltás vagy némítás elegendő, és kívánatosabb megoldás. Semmilyen tartalmat nem fogsz látni ebből a domainből se az idővonalakon, se az értesítésekben. Az ebben a domainben lévő követőidet is eltávolítjuk.",
  "confirmations.edit.confirm": "Szerkesztés",
  "confirmations.edit.message": "Ha most szerkeszted, ez felülírja a most szerkesztés alatt álló üzenetet. Mégis ezt szeretnéd?",
  "confirmations.edit.message": "A szerkesztés felülírja a most összeállítás alatt álló üzenetet. Folytatás?",
  "confirmations.logout.confirm": "Kijelentkezés",
  "confirmations.logout.message": "Biztos, hogy kijelentkezel?",
  "confirmations.mute.confirm": "Némítás",


@@ 178,21 178,21 @@
  "conversation.delete": "Beszélgetés törlése",
  "conversation.mark_as_read": "Megjelölés olvasottként",
  "conversation.open": "Beszélgetés megtekintése",
  "conversation.with": "{names}-el/al",
  "conversation.with": "{names} is",
  "copypaste.copied": "Másolva",
  "copypaste.copy": "Másolás",
  "directory.federated": "Az ismert fediverzumból",
  "directory.local": "Csak innen: {domain}",
  "directory.local": "Csak {domain} tartományból",
  "directory.new_arrivals": "Új csatlakozók",
  "directory.recently_active": "Nemrég aktív",
  "disabled_account_banner.account_settings": "Fiókbeállítások",
  "disabled_account_banner.text": "A(z) {disabledAccount} fiókod jelenleg le van tiltva.",
  "dismissable_banner.community_timeline": "Ezek a legfrissebb nyilvános bejegyzések, amelyeket a(z) {domain} kiszolgáló fiókjait használó emberek tették közzé.",
  "dismissable_banner.dismiss": "Eltüntetés",
  "dismissable_banner.explore_links": "Jelenleg ezekről a hírekről beszélgetnek az ezen és a decentralizált hálózat többi kiszolgálóján lévő emberek.",
  "dismissable_banner.explore_statuses": "Jelenleg ezek a bejegyzések hódítanak teret ezen és a decentralizált hálózat egyéb kiszolgálóin.",
  "dismissable_banner.explore_tags": "Jelenleg ezek a hashtagek hódítanak teret ezen és a decentralizált hálózat többi kiszolgálóján lévő emberek körében.",
  "dismissable_banner.public_timeline": "Ezek a legfrissebb bejegyzések azoktól, akik a decentralizált hálózat más kiszolgálóin vannak, és ez a kiszolgáló tud róluk.",
  "disabled_account_banner.text": "{disabledAccount} fiók jelenleg letilzásra került.",
  "dismissable_banner.community_timeline": "Ezek a legfrissebb nyilvános bejegyzések, amelyeket {domain} tartományban levő kiszolgáló fiókjait használó emberek tettek közzé.",
  "dismissable_banner.dismiss": "Elvetés",
  "dismissable_banner.explore_links": "Jelenleg ezekről a hírekről beszélgetnek az ezen és a központosítás nélküli hálózat többi kiszolgálóján lévő emberek.",
  "dismissable_banner.explore_statuses": "Jelenleg ezek a bejegyzések hódítanak teret ezen és a központosítás nélküli hálózat egyéb kiszolgálóin.",
  "dismissable_banner.explore_tags": "Jelenleg ezek a #címke elemek hódítanak teret ezen és a központosítás nélküli hálózat többi kiszolgálóján lévő emberek körében.",
  "dismissable_banner.public_timeline": "Ezek a legfrissebb bejegyzések azoktól, akik a központosítás nélküli hálózat más kiszolgálóin vannak és ez a kiszolgáló tud róluk.",
  "embed.instructions": "Ágyazd be ezt a bejegyzést a weboldaladba az alábbi kód kimásolásával.",
  "embed.preview": "Így fog kinézni:",
  "emoji_button.activity": "Tevékenység",


@@ 210,67 210,67 @@
  "emoji_button.search_results": "Keresési találatok",
  "emoji_button.symbols": "Szimbólumok",
  "emoji_button.travel": "Utazás és Helyek",
  "empty_column.account_suspended": "Fiók felfüggesztve",
  "empty_column.account_suspended": "A fiók felfüggesztésre került",
  "empty_column.account_timeline": "Itt nincs bejegyzés!",
  "empty_column.account_unavailable": "A profil nem érhető el",
  "empty_column.blocks": "Még senkit sem tiltottál le.",
  "empty_column.blocks": "Még senki sem került letiltásra.",
  "empty_column.bookmarked_statuses": "Még nincs egyetlen könyvjelzőzött bejegyzésed sem. Ha könyvjelzőzöl egyet, itt fog megjelenni.",
  "empty_column.community": "A helyi idővonal üres. Tégy közzé valamit nyilvánosan, hogy elindítsd az eseményeket!",
  "empty_column.direct": "Még nincs egy közvetlen üzeneted sem. Ha küldesz vagy kapsz egyet, itt fog megjelenni.",
  "empty_column.domain_blocks": "Még nem rejtettél el egyetlen domaint sem.",
  "empty_column.direct": "Még nincs egy közvetlen üzenet sem. Küldéskor vagy fogadáskor itt fog megjelenni.",
  "empty_column.domain_blocks": "Még nem lett letiltva egyetlen tartomány sem.",
  "empty_column.explore_statuses": "Jelenleg semmi sem felkapott. Nézz vissza később!",
  "empty_column.favourited_statuses": "Még nincs egyetlen kedvenc bejegyzésed sem. Ha kedvencnek jelölsz egyet, itt fog megjelenni.",
  "empty_column.favourites": "Még senki sem jelölte ezt a bejegyzést kedvencnek. Ha valaki mégis megteszi, itt fogjuk mutatni.",
  "empty_column.follow_recommendations": "Úgy tűnik, neked nem tudunk javaslatokat adni. Próbáld a keresést használni olyanok megtalálására, akiket ismerhetsz, vagy fedezd fel a felkapott hastageket.",
  "empty_column.follow_requests": "Még nincs egy követési kérésed sem. Ha kapsz egyet, itt fogjuk feltüntetni.",
  "empty_column.followed_tags": "Még egy hashtaget sem követtél be. Itt fognak megjelenni, ahogy bekövetsz egyet.",
  "empty_column.hashtag": "Jelenleg nem található semmi ezzel a hashtaggel.",
  "empty_column.home": "A saját idővonalad üres! Látogasd meg a {public} oldalt vagy használd a keresőt, hogy megismerj másokat.",
  "empty_column.follow_requests": "Még nincs egy követési kérés sem. Fogadáskor itt jelenik meg.",
  "empty_column.followed_tags": "Még egy #címke sincs követve. Ezek ekkor itt jelennek meg.",
  "empty_column.hashtag": "Jelenleg nem található semmi ezzel a #címkével.",
  "empty_column.home": "A saját idővonal üres! További emberek követése a kitöltéshez. {suggestions}",
  "empty_column.home.suggestions": "Nézzünk pár javaslatot",
  "empty_column.list": "A lista jelenleg üres. Ha a listatagok bejegyzést tesznek közzé, itt fog megjelenni.",
  "empty_column.lists": "Még nem hoztál létre listát. Ha csinálsz egyet, itt látszik majd.",
  "empty_column.mutes": "Még egy felhasználót sem némítottál le.",
  "empty_column.notifications": "Jelenleg nincsenek értesítéseid. Lépj kapcsolatba másokkal, hogy elindítsd a beszélgetést.",
  "empty_column.public": "Jelenleg itt nincs semmi! Írj valamit nyilvánosan vagy kövess más kiszolgálón levő felhasználókat, hogy megtöltsd.",
  "empty_column.lists": "Még nincs egyetlen lista sem. A létrehozáskor itt jelenik meg.",
  "empty_column.mutes": "Még nincs egyetlen némított felhasználót sem.",
  "empty_column.notifications": "Jelenleg nincsenek értesítések. Más emberekkel kapcsolatba lépés után ez itt lesz látható.",
  "empty_column.public": "Jelenleg itt nincs semmi! Írjunk valamit nyilvánosan vagy kövessünk más kiszolgálón levő felhasználókat a megjelenéshez.",
  "error.unexpected_crash.explanation": "Egy hiba vagy böngésző inkompatibilitás miatt ez az oldal nem jeleníthető meg rendesen.",
  "error.unexpected_crash.explanation_addons": "Ezt az oldalt nem lehet helyesen megjeleníteni. Ezt a hibát valószínűleg egy böngésző beépülő vagy egy automatikus fordító okozza.",
  "error.unexpected_crash.next_steps": "Próbáld frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy appon keresztül még mindig használhatod a Mastodont.",
  "error.unexpected_crash.next_steps_addons": "Próbáld letiltani őket és frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy appon keresztül még mindig használhatod a Mastodont.",
  "error.unexpected_crash.explanation_addons": "Ezt az oldalt nem lehet helyesen megjeleníteni. Ezt a hibát valószínűleg egy böngésző kiegészítő vagy egy automatikus fordító okozza.",
  "error.unexpected_crash.next_steps": "Próbáljuk meg frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy appon keresztül még mindig használható a Mastodon.",
  "error.unexpected_crash.next_steps_addons": "Próbáljuk meg letiltani őket és frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy alkalmazáson keresztül még mindig használható a Mastodon.",
  "errors.unexpected_crash.copy_stacktrace": "Veremkiíratás vágólapra másolása",
  "errors.unexpected_crash.report_issue": "Probléma jelentése",
  "explore.search_results": "Keresési találatok",
  "explore.suggested_follows": "Neked",
  "explore.suggested_follows": "Nekem",
  "explore.title": "Felfedezés",
  "explore.trending_links": "Hírek",
  "explore.trending_statuses": "Bejegyzések",
  "explore.trending_tags": "Hashtagek",
  "filter_modal.added.context_mismatch_explanation": "Ez a szűrőkategória nem érvényes abban a környezetben, amelyből elérted ezt a bejegyzést. Ha ebben a környezetben is szűrni szeretnéd a bejegyzést, akkor szerkesztened kell a szűrőt.",
  "explore.trending_tags": "#Címkék",
  "filter_modal.added.context_mismatch_explanation": "Ez a szűrőkategória nem érvényes abban a környezetben, amelyből ez a bejegyzés elérésre kerül. Ha ebben a környezetben is szűrni szeretnénk a bejegyzést, akkor szerkeszteni kell a szűrőt.",
  "filter_modal.added.context_mismatch_title": "Környezeti eltérés.",
  "filter_modal.added.expired_explanation": "Ez a szűrőkategória elévült, a használatához módosítanod kell az elévülési dátumot.",
  "filter_modal.added.expired_title": "Elévült szűrő.",
  "filter_modal.added.review_and_configure": "A szűrőkategória felülvizsgálatához és további beállításához ugorjon a {settings_link} oldalra.",
  "filter_modal.added.expired_explanation": "Ez a szűrőkategória elévült, a használatához módosítani kell a lejárati dátumot.",
  "filter_modal.added.expired_title": "A szűrő lejárt!",
  "filter_modal.added.review_and_configure": "A szűrőkategória felülvizsgálatához és további beállításához ugorás {settings_link} oldalra.",
  "filter_modal.added.review_and_configure_title": "Szűrőbeállítások",
  "filter_modal.added.settings_link": "beállítások oldal",
  "filter_modal.added.short_explanation": "A következő bejegyzés hozzá lett adva a következő szűrőkategóriához: {title}.",
  "filter_modal.added.title": "Szűrő hozzáadva.",
  "filter_modal.added.title": "A szűrő hozzáadásra került.",
  "filter_modal.select_filter.context_mismatch": "nem érvényes erre a környezetre",
  "filter_modal.select_filter.expired": "elévült",
  "filter_modal.select_filter.expired": "lejárt",
  "filter_modal.select_filter.prompt_new": "Új kategória: {name}",
  "filter_modal.select_filter.search": "Keresés vagy létrehozás",
  "filter_modal.select_filter.subtitle": "Válassz egy meglévő kategóriát, vagy hozz létre egy újat",
  "filter_modal.select_filter.subtitle": "Létező kategória használata vagy új létrehozása",
  "filter_modal.select_filter.title": "E bejegyzés szűrése",
  "filter_modal.title.status": "Egy bejegyzés szűrése",
  "follow_recommendations.done": "Kész",
  "follow_recommendations.heading": "Kövesd azokat, akiknek a bejegyzéseit látni szeretnéd! Itt van néhány javaslat.",
  "follow_recommendations.lead": "Az általad követettek bejegyzései a saját idővonaladon fognak megjelenni időrendi sorrendben. Ne félj attól, hogy hibázol! A követést bármikor, ugyanilyen könnyen visszavonhatod!",
  "follow_request.authorize": "Engedélyezés",
  "follow_request.authorize": "Hitelesítés",
  "follow_request.reject": "Elutasítás",
  "follow_requests.unlocked_explanation": "Bár a fiókod nincs zárolva, a(z) {domain} csapata úgy gondolta, hogy talán kézzel szeretnéd ellenőrizni a fiók követési kéréseit.",
  "followed_tags": "Követett hashtagek",
  "followed_tags": "Követett #címkék",
  "footer.about": "Névjegy",
  "footer.directory": "Profilok",
  "footer.get_app": "Töltsd le az appot",
  "footer.invite": "Mások meghívása",
  "footer.directory": "Profiltár",
  "footer.get_app": "Alkalmazás beszerzése",
  "footer.invite": "Emberek meghívása",
  "footer.keyboard_shortcuts": "Billentyűparancsok",
  "footer.privacy_policy": "Adatvédelmi szabályzat",
  "footer.source_code": "Forráskód megtekintése",


@@ 281,11 281,11 @@
  "hashtag.column_header.tag_mode.any": "vagy {additional}",
  "hashtag.column_header.tag_mode.none": "{additional} nélkül",
  "hashtag.column_settings.select.no_options_message": "Nincs javaslat",
  "hashtag.column_settings.select.placeholder": "Addj meg hashtageket…",
  "hashtag.column_settings.select.placeholder": "#Címkék megadása…",
  "hashtag.column_settings.tag_mode.all": "Mindegyik",
  "hashtag.column_settings.tag_mode.any": "Bármelyik",
  "hashtag.column_settings.tag_mode.none": "Egyik sem",
  "hashtag.column_settings.tag_toggle": "Új címkék felvétele ehhez az oszlophoz",
  "hashtag.column_settings.tag_toggle": "További címkék felvétele ehhez az oszlophoz",
  "hashtag.follow": "Hashtag követése",
  "hashtag.unfollow": "Hashtag követésének megszüntetése",
  "home.column_settings.basic": "Alapvető",


@@ 293,14 293,14 @@
  "home.column_settings.show_replies": "Válaszok megjelenítése",
  "home.hide_announcements": "Közlemények elrejtése",
  "home.show_announcements": "Közlemények megjelenítése",
  "interaction_modal.description.favourite": "Egy Mastodon fiókkal kedvencnek jelölheted ezt a bejegyzést, tudatva a szerzővel, hogy értékeled és elteszed későbbre.",
  "interaction_modal.description.follow": "Egy Mastodon fiókkal bekövetheted {name} fiókot, hogy lásd a bejegyzéseit a saját hírfolyamodban.",
  "interaction_modal.description.reblog": "Egy Mastodon fiókkal megtolhatod ezt a bejegyzést, hogy megoszd a saját követőiddel.",
  "interaction_modal.description.reply": "Egy Mastodon fiókkal válaszolhatsz erre a bejegyzésre.",
  "interaction_modal.description.favourite": "Egy Mastodon fiókkal kedvencnek jelölhető ez a bejegyzés, tudatva a szerzővel, hogy értékeljük és eltesszük későbbre.",
  "interaction_modal.description.follow": "Egy Mastodon fiókkal bekövethető {name} fiók a bejegyzései megjelenítéséhez a saját hírfolyamban.",
  "interaction_modal.description.reblog": "Egy Mastodon fiókkal megtolható ez a bejegyzés a saját követőkkel megosztáshoz.",
  "interaction_modal.description.reply": "Egy Mastodon fiókkal válaszolhatunk erre a bejegyzésre.",
  "interaction_modal.on_another_server": "Másik kiszolgálón",
  "interaction_modal.on_this_server": "Ezen a kiszolgálón",
  "interaction_modal.other_server_instructions": "Másold és illeszd be ezt a webcímet a kedvenc Mastodon alkalmazásod vagy a Mastodon-kiszolgálód webes felületének keresőmezőjébe.",
  "interaction_modal.preamble": "Mivel a Mastodon decentralizált, használhatod egy másik Mastodon kiszolgálón, vagy kompatibilis szolgáltatáson lévő fiókodat, ha ezen a kiszolgálón nincs fiókod.",
  "interaction_modal.other_server_instructions": "Másoljuk és illesszük be ezt a webcímet a kedvenc Mastodon alkalmazásd vagy a Mastodon kiszolgáló webes felületének keresőmezőjébe.",
  "interaction_modal.preamble": "Mivel a Mastodon nem központosított, használható egy másik Mastodon kiszolgálón vagy kompatibilis szolgáltatáson lévő fiók, ha ezen a kiszolgálón nincs saját fiók.",
  "interaction_modal.title.favourite": "{name} bejegyzésének megjelölése kedvencként",
  "interaction_modal.title.follow": "{name} követése",
  "interaction_modal.title.reblog": "{name} bejegyzésének megtolása",


@@ 308,47 308,47 @@
  "intervals.full.days": "{number, plural, one {# nap} other {# nap}}",
  "intervals.full.hours": "{number, plural, one {# óra} other {# óra}}",
  "intervals.full.minutes": "{number, plural, one {# perc} other {# perc}}",
  "keyboard_shortcuts.back": "visszafelé navigálás",
  "keyboard_shortcuts.blocked": "letiltott felhasználók listájának megnyitása",
  "keyboard_shortcuts.back": "Navigálás vissza",
  "keyboard_shortcuts.blocked": "Letiltott felhasználók listájának megnyitása",
  "keyboard_shortcuts.boost": "Bejegyzés megtolása",
  "keyboard_shortcuts.column": "Fókuszálás egy oszlopra",
  "keyboard_shortcuts.compose": "fókuszálás a szerkesztési szövegdobozra",
  "keyboard_shortcuts.compose": "Szerkesztési terület fókuszálása",
  "keyboard_shortcuts.description": "Leírás",
  "keyboard_shortcuts.direct": "közvetlen üzenetek megnyitása",
  "keyboard_shortcuts.down": "lefele navigálás a listában",
  "keyboard_shortcuts.down": "Mozgás lefelé a listában",
  "keyboard_shortcuts.enter": "Bejegyzés megnyitása",
  "keyboard_shortcuts.favourite": "Bejegyzés kedvencnek jelölése",
  "keyboard_shortcuts.favourites": "kedvenc lista megnyitása",
  "keyboard_shortcuts.favourites": "Kedvencek lista megnyitása",
  "keyboard_shortcuts.federated": "föderációs idővonal megnyitása",
  "keyboard_shortcuts.heading": "Billentyűparancsok",
  "keyboard_shortcuts.home": "saját idővonal megnyitása",
  "keyboard_shortcuts.home": "Saját idővonal megnyitása",
  "keyboard_shortcuts.hotkey": "Gyorsbillentyű",
  "keyboard_shortcuts.legend": "jelmagyarázat megjelenítése",
  "keyboard_shortcuts.local": "helyi idővonal megnyitása",
  "keyboard_shortcuts.mention": "szerző megemlítése",
  "keyboard_shortcuts.mention": "Szerző megemlítése",
  "keyboard_shortcuts.muted": "némított felhasználók listájának megnyitása",
  "keyboard_shortcuts.my_profile": "profilod megnyitása",
  "keyboard_shortcuts.notifications": "értesítések megnyitása",
  "keyboard_shortcuts.open_media": "média megnyitása",
  "keyboard_shortcuts.my_profile": "Saját profil megnyitása",
  "keyboard_shortcuts.notifications": "Értesítések oszlop megnyitása",
  "keyboard_shortcuts.open_media": "Média megnyitása",
  "keyboard_shortcuts.pinned": "Kitűzött bejegyzések listájának megnyitása",
  "keyboard_shortcuts.profile": "szerző profiljának megnyitása",
  "keyboard_shortcuts.profile": "Szerző profil megnyitása",
  "keyboard_shortcuts.reply": "Válasz bejegyzésre",
  "keyboard_shortcuts.requests": "követési kérések listájának megnyitása",
  "keyboard_shortcuts.search": "fókuszálás a keresőre",
  "keyboard_shortcuts.requests": "Követési kérések lista megnyitása",
  "keyboard_shortcuts.search": "Keresősáv fókuszálása",
  "keyboard_shortcuts.spoilers": "Tartalmi figyelmeztetés mező megjelenítése/elrejtése",
  "keyboard_shortcuts.start": "\"Első lépések\" megnyitása",
  "keyboard_shortcuts.toggle_hidden": "Tartalmi figyelmeztetéssel ellátott szöveg megjelenítése/elrejtése",
  "keyboard_shortcuts.start": "\"Első lépések\" oszlop megnyitása",
  "keyboard_shortcuts.toggle_hidden": "Tartalmi figyelmeztetéssel mögötti szöveg megjelenítése/elrejtése",
  "keyboard_shortcuts.toggle_sensitivity": "Média megjelenítése/elrejtése",
  "keyboard_shortcuts.toot": "Új bejegyzés írása",
  "keyboard_shortcuts.unfocus": "Szerkesztés/keresés fókuszból való kivétele",
  "keyboard_shortcuts.up": "felfelé mozdítás a listában",
  "keyboard_shortcuts.up": "Mozgás felfelé a listában",
  "lightbox.close": "Bezárás",
  "lightbox.compress": "Képnézet összecsukása",
  "lightbox.expand": "Képnézet kinagyítása",
  "lightbox.compress": "Képnéző doboz összezárása",
  "lightbox.expand": "Képnéző doboz kinyitása",
  "lightbox.next": "Következő",
  "lightbox.previous": "Előző",
  "limited_account_hint.action": "Mindenképpen mutassa a profilt",
  "limited_account_hint.title": "Ezt a profilt a(z) {domain} moderátorai elrejtették.",
  "limited_account_hint.action": "Profil megjelenítése mindenképpen",
  "limited_account_hint.title": "Ezt a profilt {domain} moderátorai elrejtették.",
  "lists.account.add": "Hozzáadás a listához",
  "lists.account.remove": "Eltávolítás a listából",
  "lists.delete": "Lista törlése",


@@ 359,17 359,17 @@
  "lists.replies_policy.followed": "Bármely követett felhasználó",
  "lists.replies_policy.list": "A lista tagjai",
  "lists.replies_policy.none": "Senki",
  "lists.replies_policy.title": "Nekik mutassuk a válaszokat:",
  "lists.replies_policy.title": "Válaszok megjelenítése:",
  "lists.search": "Keresés a követett személyek között",
  "lists.subheading": "Listáid",
  "lists.subheading": "Saját listák",
  "load_pending": "{count, plural, one {# új elem} other {# új elem}}",
  "loading_indicator.label": "Betöltés...",
  "media_gallery.toggle_visible": "{number, plural, one {Kép elrejtése} other {Képek elrejtése}}",
  "missing_indicator.label": "Nincs találat",
  "missing_indicator.sublabel": "Ez az erőforrás nem található",
  "moved_to_account_banner.text": "A(z) {disabledAccount} fiókod jelenleg le van tiltva, mert átköltöztél ide: {movedToAccount}.",
  "moved_to_account_banner.text": "{disabledAccount} fiók jelenleg le van tiltva, mert más {movedToAccount} fiókba került át.",
  "mute_modal.duration": "Időtartam",
  "mute_modal.hide_notifications": "Rejtsük el a felhasználótól származó értesítéseket?",
  "mute_modal.hide_notifications": "Értesítések elrejtése ettől a felhasználótól?",
  "mute_modal.indefinite": "Határozatlan",
  "navigation_bar.about": "Névjegy",
  "navigation_bar.blocks": "Letiltott felhasználók",


@@ 378,13 378,13 @@
  "navigation_bar.compose": "Új bejegyzés írása",
  "navigation_bar.direct": "Közvetlen üzenetek",
  "navigation_bar.discover": "Felfedezés",
  "navigation_bar.domain_blocks": "Rejtett domainek",
  "navigation_bar.domain_blocks": "Letiltott tartományok",
  "navigation_bar.edit_profile": "Profil szerkesztése",
  "navigation_bar.explore": "Felfedezés",
  "navigation_bar.favourites": "Kedvencek",
  "navigation_bar.filters": "Némított szavak",
  "navigation_bar.follow_requests": "Követési kérelmek",
  "navigation_bar.followed_tags": "Követett hashtagek",
  "navigation_bar.followed_tags": "Követett #címkék",
  "navigation_bar.follows_and_followers": "Követettek és követők",
  "navigation_bar.lists": "Listák",
  "navigation_bar.logout": "Kijelentkezés",


@@ 395,15 395,15 @@
  "navigation_bar.public_timeline": "Föderációs idővonal",
  "navigation_bar.search": "Keresés",
  "navigation_bar.security": "Biztonság",
  "not_signed_in_indicator.not_signed_in": "Az erőforrás eléréséhez be kell jelentkezned.",
  "not_signed_in_indicator.not_signed_in": "Az erőforrás eléréséhez be kell jelentkezni.",
  "notification.admin.report": "{name} jelentette: {target}",
  "notification.admin.sign_up": "{name} regisztrált",
  "notification.favourite": "{name} kedvencnek jelölte a bejegyzésedet",
  "notification.follow": "{name} követ téged",
  "notification.follow_request": "{name} követni szeretne téged",
  "notification.mention": "{name} megemlített",
  "notification.own_poll": "A szavazásod véget ért",
  "notification.poll": "Egy szavazás, melyben részt vettél, véget ért",
  "notification.follow": "{name} követ engem",
  "notification.follow_request": "{name} követni szeretne engem",
  "notification.mention": "{name} megemlített engem",
  "notification.own_poll": "A szavazás véget ért",
  "notification.poll": "Egy általam részt vett szavazás véget ért",
  "notification.reblog": "{name} megtolta a bejegyzésedet",
  "notification.status": "{name} bejegyzést tett közzé",
  "notification.update": "{name} szerkesztett egy bejegyzést",


@@ 413,47 413,47 @@
  "notifications.column_settings.admin.sign_up": "Új regisztrálók:",
  "notifications.column_settings.alert": "Asztali értesítések",
  "notifications.column_settings.favourite": "Kedvencek:",
  "notifications.column_settings.filter_bar.advanced": "Minden kategória megjelenítése",
  "notifications.column_settings.filter_bar.category": "Gyorskereső mező",
  "notifications.column_settings.filter_bar.show_bar": "Szűrősáv mutatása",
  "notifications.column_settings.filter_bar.advanced": "Összes kategória megjelenítése",
  "notifications.column_settings.filter_bar.category": "Gyorsszűrő sáv",
  "notifications.column_settings.filter_bar.show_bar": "Szűrősáv megjelenítése",
  "notifications.column_settings.follow": "Új követők:",
  "notifications.column_settings.follow_request": "Új követési kérelmek:",
  "notifications.column_settings.mention": "Megemlítések:",
  "notifications.column_settings.poll": "Szavazás eredménye:",
  "notifications.column_settings.poll": "Szavazási eredmények:",
  "notifications.column_settings.push": "Push értesítések",
  "notifications.column_settings.reblog": "Megtolások:",
  "notifications.column_settings.show": "Oszlopban mutatás",
  "notifications.column_settings.show": "Megjelenítés oszlopban",
  "notifications.column_settings.sound": "Hang lejátszása",
  "notifications.column_settings.status": "Új bejegyzések:",
  "notifications.column_settings.unread_notifications.category": "Olvasatlan értesítések",
  "notifications.column_settings.unread_notifications.highlight": "Olvasatlan értesítések kiemelése",
  "notifications.column_settings.update": "Szerkesztések:",
  "notifications.filter.all": "Mind",
  "notifications.filter.all": "Összes",
  "notifications.filter.boosts": "Megtolások",
  "notifications.filter.favourites": "Kedvencnek jelölések",
  "notifications.filter.favourites": "Kedvencek",
  "notifications.filter.follows": "Követések",
  "notifications.filter.mentions": "Megemlítések",
  "notifications.filter.polls": "Szavazások eredményei",
  "notifications.filter.statuses": "Frissítések azoktól, akiket követsz",
  "notifications.grant_permission": "Engedély megadása.",
  "notifications.group": "{count} értesítés",
  "notifications.mark_as_read": "Minden értesítés olvasottnak jelölése",
  "notifications.permission_denied": "Nem tudjuk engedélyezni az asztali értesítéseket, mert az engedélyt megtagadták.",
  "notifications.permission_denied_alert": "Az asztali értesítések nem engedélyezhetőek, mert az engedélyt megtagadták a böngészőben",
  "notifications.permission_required": "Az asztali értesítések nem elérhetőek, mert a szükséges engedélyt nem adtad meg.",
  "notifications.mark_as_read": "Összes értesítés megjelölése olvasottként",
  "notifications.permission_denied": "Az asztali értesítések nem érhetők el a korábban elutasított böngésző engedély kérelem miatt",
  "notifications.permission_denied_alert": "Az asztali értesítések nem engedélyezhetők a korábban elutasított böngésző engedély miatt",
  "notifications.permission_required": "Az asztali értesítések nem érhetők, mivel a szükséges engedély nem lett megadva.",
  "notifications_permission_banner.enable": "Asztali értesítések engedélyezése",
  "notifications_permission_banner.how_to_control": "Ahhoz, hogy értesítéseket kapj akkor, amikor a Mastodon nincs megnyitva, engedélyezd az asztali értesítéseket. Pontosan be tudod állítani, hogy milyen interakciókról értesülj a fenti {icon} gombon keresztül, ha egyszer már engedélyezted őket.",
  "notifications_permission_banner.title": "Soha ne mulassz el semmit",
  "picture_in_picture.restore": "Visszarakás",
  "notifications_permission_banner.how_to_control": "Bezárt Mastononnál értesések fogadásához engedélyezni kell az asztali értesítéseket. Pontosan lehet vezérelni, hogy milyen interakciókról érkezzen értesítés fenti {icon} gombon keresztül, ha már lorábban megtörtént az engedélyezés.",
  "notifications_permission_banner.title": "Soha ne mulasszunk el semmit",
  "picture_in_picture.restore": "Visszahelyezés",
  "poll.closed": "Lezárva",
  "poll.refresh": "Frissítés",
  "poll.total_people": "{count, plural, one {# személy} other {# személy}}",
  "poll.total_votes": "{count, plural, one {# szavazat} other {# szavazat}}",
  "poll.vote": "Szavazás",
  "poll.voted": "Erre a válaszra szavaztál",
  "poll.voted": "Megtörtént a szavazás erre a kérdésre",
  "poll.votes": "{votes, plural, one {# szavazat} other {# szavazat}}",
  "poll_button.add_poll": "Új szavazás",
  "poll_button.remove_poll": "Szavazás törlése",
  "poll_button.remove_poll": "Szavazás eltávolítása",
  "privacy.change": "Bejegyzés láthatóságának módosítása",
  "privacy.direct.long": "Csak a megemlített felhasználóknak látható",
  "privacy.direct.short": "Csak megemlítetteknek",


@@ 466,7 466,7 @@
  "privacy_policy.last_updated": "Utoljára frissítve: {date}",
  "privacy_policy.title": "Adatvédelmi szabályzat",
  "refresh": "Frissítés",
  "regeneration_indicator.label": "Töltődik…",
  "regeneration_indicator.label": "A betöltés folyamatban van…",
  "regeneration_indicator.sublabel": "A saját idővonalad épp készül!",
  "relative_time.days": "{number}n",
  "relative_time.full.days": "{number, plural, one {# napja} other {# napja}}",


@@ 481,7 481,7 @@
  "relative_time.today": "ma",
  "reply_indicator.cancel": "Mégsem",
  "report.block": "Letiltás",
  "report.block_explanation": "Nem fogod látni a bejegyzéseit. Nem fogja tudni megnézni a bejegyzéseidet és nem fog tudni követni sem. Azt is meg fogja tudni mondani, hogy letiltottad.",
  "report.block_explanation": "A bejegyzéseik nem áthatók. Nem nézheti meg a saját bejegyzéseimet és nem tudni követni sem. Azt is meg fogja tudni mondani, hogy letiltották.",
  "report.categories.other": "Egyéb",
  "report.categories.spam": "Kéretlen üzenet",
  "report.categories.violation": "A tartalom a kiszolgáló egy vagy több szabályát sérti",


@@ 492,11 492,11 @@
  "report.close": "Kész",
  "report.comment.title": "Van valami, amiről tudnunk kellene?",
  "report.forward": "Továbbítás: {target}",
  "report.forward_hint": "Ez a fiók egy másik kiszolgálóról van. Oda is elküldöd a jelentés egy anonimizált másolatát?",
  "report.forward_hint": "Ez a fiók egy másik kiszolgálóról van. Oda is elküldésre kerüljön a jelentés egy anonimizált másolata?",
  "report.mute": "Némítás",
  "report.mute_explanation": "Nem fogod látni a bejegyzéseit. Továbbra is fog tudni követni, és látni fogja a bejegyzéseidet, és nem fogja tudni, hogy némítottad.",
  "report.next": "Következő",
  "report.placeholder": "További megjegyzések",
  "report.placeholder": "További hozzászólások",
  "report.reasons.dislike": "Nem tetszik",
  "report.reasons.dislike_description": "Ezt nem szeretném látni",
  "report.reasons.other": "Valami más",


@@ 512,7 512,7 @@
  "report.submit": "Küldés",
  "report.target": "{target} jelentése",
  "report.thanks.take_action": "Itt vannak a beállítások, melyek szabályozzák, hogy mit látsz a Mastodonon:",
  "report.thanks.take_action_actionable": "Míg átnézzük, a következőket teheted @{name} ellen:",
  "report.thanks.take_action_actionable": "Míg átnézzük, a következőket lehet tenni @{name} ellen:",
  "report.thanks.title": "Nem akarod ezt látni?",
  "report.thanks.title_actionable": "Köszönjük, hogy jelentetted, megnézzük.",
  "report.unfollow": "@{name} követésének leállítása",


@@ 523,32 523,32 @@
  "report_notification.categories.violation": "Szabálysértés",
  "report_notification.open": "Bejelentés megnyitása",
  "search.placeholder": "Keresés",
  "search.search_or_paste": "Keresés vagy URL beillesztése",
  "search_popout.search_format": "Speciális keresés",
  "search.search_or_paste": "Keresés vagy webcím beillesztése",
  "search_popout.search_format": "Bővített keresési forma",
  "search_popout.tips.full_text": "Egyszerű szöveg, mely általad írt, kedvencnek jelölt vagy megtolt bejegyzéseket, rólad szóló megemlítéseket, felhasználói neveket, megjelenített neveket, hashtageket ad majd vissza.",
  "search_popout.tips.hashtag": "hashtag",
  "search_popout.tips.hashtag": "#címke",
  "search_popout.tips.status": "bejegyzés",
  "search_popout.tips.text": "Egyszerű szöveg. Illeszkedő megjelenített nevet, felhasználói nevet, hashtageket ad majd vissza",
  "search_popout.tips.text": "Az egyszerű szöveg illeszkedő megjelenített nevet, felhasználónevet, #címkéket ad vissza",
  "search_popout.tips.user": "felhasználó",
  "search_results.accounts": "Emberek",
  "search_results.all": "Összes",
  "search_results.hashtags": "Hashtagek",
  "search_results.hashtags": "#Címkék",
  "search_results.nothing_found": "Nincs találat ezekre a keresési kifejezésekre",
  "search_results.statuses": "Bejegyzések",
  "search_results.statuses_fts_disabled": "Ezen a Mastodon szerveren nem engedélyezett a bejegyzések tartalom szerinti keresése.",
  "search_results.title": "Keresés erre: {q}",
  "search_results.total": "{count, number} {count, plural, one {találat} other {találat}}",
  "server_banner.about_active_users": "Az elmúlt 30 napban ezt a kiszolgálót használók száma (Havi aktív felhasználók)",
  "server_banner.about_active_users": "Az elmúlt 30 napban ezt a kiszolgálót használó emberek (Havi aktív felhasználók)",
  "server_banner.active_users": "aktív felhasználó",
  "server_banner.administered_by": "Adminisztrátor:",
  "server_banner.introduction": "{domain} része egy decentralizált közösségi hálónak, melyet a {mastodon} hajt meg.",
  "server_banner.learn_more": "Tudj meg többet",
  "server_banner.server_stats": "Kiszolgálóstatisztika:",
  "server_banner.introduction": "{domain} része egy központ nélküliközösségi hálónak, melyet a {mastodon} hajt meg.",
  "server_banner.learn_more": "További információ",
  "server_banner.server_stats": "Szerver statisztika:",
  "sign_in_banner.create_account": "Fiók létrehozása",
  "sign_in_banner.sign_in": "Bejelentkezés",
  "sign_in_banner.text": "Jelentkezz be profilok vagy hashtagek követéséhez, kedvencnek jelöléséhez, bejegyzések megosztásához, megválaszolásához. A fiókodból más kiszolgálókon is kommunikálhatsz.",
  "sign_in_banner.text": "Jelentkezzünk be profilok vagy hashtagek követéséhez, kedvencnek jelöléséhez, bejegyzések megosztásához, megválaszolásához. A fiókból más kiszolgálókon is kommunikálhatunk.",
  "status.admin_account": "Moderációs felület megnyitása @{name} fiókhoz",
  "status.admin_domain": "A következő moderációs felületének megnyitása: @{domain}",
  "status.admin_domain": "Moderációs felület megnyitása {domain} esetében",
  "status.admin_status": "Bejegyzés megnyitása a moderációs felületen",
  "status.block": "@{name} letiltása",
  "status.bookmark": "Könyvjelzőzés",


@@ 558,6 558,7 @@
  "status.delete": "Törlés",
  "status.detailed_status": "Részletes beszélgetési nézet",
  "status.direct": "Közvetlen üzenet @{name} számára",
  "status.direct_indicator": "Private mention",
  "status.edit": "Szerkesztés",
  "status.edited": "Szerkesztve: {date}",
  "status.edited_x_times": "{count, plural, one {{count} alkalommal} other {{count} alkalommal}} szerkesztve",


@@ 595,19 596,19 @@
  "status.show_less_all": "Kevesebbet mindenhol",
  "status.show_more": "Többet",
  "status.show_more_all": "Többet mindenhol",
  "status.show_original": "Eredeti mutatása",
  "status.show_original": "Eredeti megjelenítése",
  "status.translate": "Fordítás",
  "status.translated_from_with": "{lang} nyelvről fordítva {provider} szolgáltatással",
  "status.uncached_media_warning": "Nem érhető el",
  "status.unmute_conversation": "Beszélgetés némításának feloldása",
  "status.unpin": "Kitűzés eltávolítása a profilodról",
  "subscribed_languages.lead": "A változtatás után csak a kiválasztott nyelvű bejegyzések fognak megjelenni a kezdőlapon és az idővonalakon. Ha egy sincs kiválasztva, akkor minden nyelven megjelennek a bejegyzések.",
  "subscribed_languages.lead": "A változtatás után csak a kiválasztott nyelvű bejegyzések fognak megjelenni a kezdőoldalon és az idővonalakon. Ha egy sincs kiválasztva, akkor az összes nyelvű bejegyzések megjelennek.",
  "subscribed_languages.save": "Változások mentése",
  "subscribed_languages.target": "Feliratkozott nyelvek módosítása a következőnél: {target}",
  "subscribed_languages.target": "Feliratkozott nyelvek módosítása {target} esetében",
  "suggestions.dismiss": "Javaslat elvetése",
  "suggestions.header": "Esetleg érdekelhet…",
  "tabs_bar.federated_timeline": "Föderációs",
  "tabs_bar.home": "Kezdőlap",
  "suggestions.header": "Esetleg érdeklődésre tarthat számot…",
  "tabs_bar.federated_timeline": "Összekapcsolt",
  "tabs_bar.home": "Kezdőoldal",
  "tabs_bar.local_timeline": "Helyi",
  "tabs_bar.notifications": "Értesítések",
  "time_remaining.days": "{number, plural, one {# nap} other {# nap}} van hátra",


@@ 621,29 622,29 @@
  "timeline_hint.resources.statuses": "Régi bejegyzések",
  "trends.counter_by_accounts": "{count, plural, one {{counter} ember} other {{counter} ember}} az elmúlt {days, plural,one {napban} other {{days} napban}}",
  "trends.trending_now": "Most felkapott",
  "ui.beforeunload": "A piszkozatod el fog veszni, ha elhagyod a Mastodont.",
  "ui.beforeunload": "A vázlat elveszik a Mastodon elhagyásakor.",
  "units.short.billion": "{count}Mrd",
  "units.short.million": "{count}M",
  "units.short.thousand": "{count}K",
  "upload_area.title": "Húzd ide a feltöltéshez",
  "upload_button.label": "Média hozzáadása",
  "upload_error.limit": "Túllépted a fájlfeltöltési korlátot.",
  "upload_area.title": "Húzás a feltöltéshez",
  "upload_button.label": "Képek, videó vagy audió fájl hozzáadása",
  "upload_error.limit": "A fájlfeltöltési korlát elérésre került.",
  "upload_error.poll": "Szavazásnál nem lehet fájlt feltölteni.",
  "upload_form.audio_description": "Írja le a hallássérültek számára",
  "upload_form.description": "Leírás látáskorlátozottak számára",
  "upload_form.audio_description": "Leírás be a siket vagy hallássérült embereknek",
  "upload_form.description": "Leírás be vak vagy gyengénlátó embereknek",
  "upload_form.description_missing": "Nincs leírás megadva",
  "upload_form.edit": "Szerkesztés",
  "upload_form.thumbnail": "Előnézet megváltoztatása",
  "upload_form.thumbnail": "Bélyegkép megváltoztatása",
  "upload_form.undo": "Törlés",
  "upload_form.video_description": "Írja le a hallás- vagy látássérültek számára",
  "upload_form.video_description": "Leírás be a siket, hallássérült, vak vagy gyengénlátó embereknek",
  "upload_modal.analyzing_picture": "Kép elemzése…",
  "upload_modal.apply": "Alkalmaz",
  "upload_modal.apply": "Alkalmazás",
  "upload_modal.applying": "Alkalmazás…",
  "upload_modal.choose_image": "Kép kiválasztása",
  "upload_modal.description_placeholder": "A gyors, barna róka átugrik a lusta kutya fölött",
  "upload_modal.detect_text": "Szöveg felismerése a képről",
  "upload_modal.edit_media": "Média szerkesztése",
  "upload_modal.hint": "Kattints vagy húzd a kört az előnézetben arra a fókuszpontra, mely minden megjelenített bélyegképen látható kell, legyen.",
  "upload_modal.hint": "Kattintás vagy kör húzása az előnézetben arra a fókuszpontra, mely minden megjelenített bélyegképen láthatónak kell lenni.",
  "upload_modal.preparing_ocr": "OCR előkészítése…",
  "upload_modal.preview_label": "Előnézet ({ratio})",
  "upload_progress.label": "Feltöltés...",

M app/javascript/mastodon/locales/hy.json => app/javascript/mastodon/locales/hy.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Ջնջել",
  "status.detailed_status": "Շղթայի ընդլայնուած դիտում",
  "status.direct": "Նամակ գրել {name} -ին",
  "status.direct_indicator": "Private mention",
  "status.edit": "Խմբագրել",
  "status.edited": "Խմբագրուել է՝ {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/id.json => app/javascript/mastodon/locales/id.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Hapus",
  "status.detailed_status": "Tampilan detail percakapan",
  "status.direct": "Pesan langsung @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Diedit {date}",
  "status.edited_x_times": "Diedit {count, plural, other {{count} kali}}",

M app/javascript/mastodon/locales/ig.json => app/javascript/mastodon/locales/ig.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Hichapụ",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/io.json => app/javascript/mastodon/locales/io.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Efacar",
  "status.detailed_status": "Detala konversvido",
  "status.direct": "Direta mesajigez @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Modifikez",
  "status.edited": "Modifikesis ye {date}",
  "status.edited_x_times": "Modifikesis {count, plural, one {{count} foyo} other {{count} foyi}}",

M app/javascript/mastodon/locales/is.json => app/javascript/mastodon/locales/is.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Eyða",
  "status.detailed_status": "Nákvæm spjallþráðasýn",
  "status.direct": "Bein skilaboð @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Breyta",
  "status.edited": "Breytt {date}",
  "status.edited_x_times": "Breytt {count, plural, one {{count} sinni} other {{count} sinnum}}",

M app/javascript/mastodon/locales/it.json => app/javascript/mastodon/locales/it.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Elimina",
  "status.detailed_status": "Vista conversazione dettagliata",
  "status.direct": "Messaggio diretto a @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Modifica",
  "status.edited": "Modificato il {date}",
  "status.edited_x_times": "Modificato {count, plural, one {{count} volta} other {{count} volte}}",

M app/javascript/mastodon/locales/ja.json => app/javascript/mastodon/locales/ja.json +1 -0
@@ 562,6 562,7 @@
  "status.delete": "削除",
  "status.detailed_status": "詳細な会話ビュー",
  "status.direct": "@{name}さんにダイレクトメッセージ",
  "status.direct_indicator": "Private mention",
  "status.edit": "編集",
  "status.edited": "{date}に編集",
  "status.edited_x_times": "{count}回編集",

M app/javascript/mastodon/locales/ka.json => app/javascript/mastodon/locales/ka.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "წაშლა",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "პირდაპირი წერილი @{name}-ს",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/kab.json => app/javascript/mastodon/locales/kab.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Kkes",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Izen usrid i @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Ẓreg",
  "status.edited": "Tettwaẓreg deg {date}",
  "status.edited_x_times": "Tettwaẓreg {count, plural, one {{count} n tikkelt} other {{count} n tikkal}}",

M app/javascript/mastodon/locales/kk.json => app/javascript/mastodon/locales/kk.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Өшіру",
  "status.detailed_status": "Толық пікірталас көрінісі",
  "status.direct": "Хат жіберу @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/kn.json => app/javascript/mastodon/locales/kn.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Delete",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/ko.json => app/javascript/mastodon/locales/ko.json +2 -1
@@ 71,7 71,7 @@
  "admin.dashboard.monthly_retention": "가입 후 월별 사용자 유지율",
  "admin.dashboard.retention.average": "평균",
  "admin.dashboard.retention.cohort": "가입한 달",
  "admin.dashboard.retention.cohort_size": "새로운 사용자",
  "admin.dashboard.retention.cohort_size": "새 사용자",
  "alert.rate_limited.message": "{retry_time, time, medium}에 다시 시도해 주세요.",
  "alert.rate_limited.title": "빈도 제한됨",
  "alert.unexpected.message": "예상하지 못한 에러가 발생했습니다.",


@@ 558,6 558,7 @@
  "status.delete": "삭제",
  "status.detailed_status": "대화 자세히 보기",
  "status.direct": "@{name}에게 다이렉트 메시지",
  "status.direct_indicator": "Private mention",
  "status.edit": "수정",
  "status.edited": "{date}에 편집됨",
  "status.edited_x_times": "{count}번 수정됨",

M app/javascript/mastodon/locales/ku.json => app/javascript/mastodon/locales/ku.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Jê bibe",
  "status.detailed_status": "Dîtina axaftina berfireh",
  "status.direct": "Peyama rasterast @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Serrast bike",
  "status.edited": "Di {date} de hate serrastkirin",
  "status.edited_x_times": "{count, plural, one {{count} car} other {{count} car}} hate serrastkirin",

M app/javascript/mastodon/locales/kw.json => app/javascript/mastodon/locales/kw.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Dilea",
  "status.detailed_status": "Gwel kesklapp a-vanyl",
  "status.direct": "Messach didro dhe @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/la.json => app/javascript/mastodon/locales/la.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Oblitterare",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Recolere",
  "status.edited": "Recultum {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/lt.json => app/javascript/mastodon/locales/lt.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Delete",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/lv.json => app/javascript/mastodon/locales/lv.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Dzēst",
  "status.detailed_status": "Detalizēts sarunas skats",
  "status.direct": "Privāta ziņa @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Rediģēt",
  "status.edited": "Rediģēts {date}",
  "status.edited_x_times": "Rediģēts {count, plural, one {{count} reizi} other {{count} reizes}}",

M app/javascript/mastodon/locales/mk.json => app/javascript/mastodon/locales/mk.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Delete",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/ml.json => app/javascript/mastodon/locales/ml.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "മായ്ക്കുക",
  "status.detailed_status": "വിശദമായ സംഭാഷണ കാഴ്‌ച",
  "status.direct": "@{name} ന് നേരിട്ട് മെസേജ് അയക്കുക",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/mr.json => app/javascript/mastodon/locales/mr.json +2 -1
@@ 54,7 54,7 @@
  "account.posts_with_replies": "Toots and replies",
  "account.report": "@{name} ची तक्रार करा",
  "account.requested": "Awaiting approval",
  "account.requested_follow": "{name} has requested to follow you",
  "account.requested_follow": "{name} ने आपल्याला फॉलो करण्याची रिक्वेस्ट केली आहे",
  "account.share": "@{name} चे प्रोफाइल शेअर करा",
  "account.show_reblogs": "{name}चे सर्व बुस्ट्स दाखवा",
  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",


@@ 558,6 558,7 @@
  "status.delete": "Delete",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/ms.json => app/javascript/mastodon/locales/ms.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Padam",
  "status.detailed_status": "Paparan perbualan terperinci",
  "status.direct": "Mesej terus @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Sunting",
  "status.edited": "Disunting {date}",
  "status.edited_x_times": "Disunting {count, plural, other {{count} kali}}",

M app/javascript/mastodon/locales/my.json => app/javascript/mastodon/locales/my.json +6 -5
@@ 194,7 194,7 @@
  "dismissable_banner.explore_tags": "ဤ hashtag များသည် ယခုအချိန်တွင် ဗဟိုချုပ်ကိုင်မှုလျှော့ချထားသော ကွန်ရက်၏ အခြားဆာဗာများပေါ်ရှိ လူများကြားတွင် ဆွဲဆောင်မှုရှိလာပါသည်",
  "dismissable_banner.public_timeline": "ဗဟိုချုပ်ကိုင်မှုလျှော့ချထားသော ဤဆာဗာနှင့် အခြားဆာဗာတို့တွင် တင်ထားသည့် လတ်တလော အများမြင်ပို့စ်များဖြစ်သည်။",
  "embed.instructions": "Embed this status on your website by copying the code below.",
  "embed.preview": "Here is what it will look like:",
  "embed.preview": "ဒါမျိုးမြင်ရမှာပါ။",
  "emoji_button.activity": "လုပ်ဆောင်ချက်",
  "emoji_button.clear": "ရှင်းလင်းမည်",
  "emoji_button.custom": "စိတ်ကြိုက်",


@@ 265,7 265,7 @@
  "follow_recommendations.lead": "သင်စောင့်ကြည့်ထားသူများ၏ ပို့စ်များမှာ သင့်ပင်မစာမျက်နှာတွင် အချိန်နှင့်တပြေးညီ ပေါ်လာပါမည်။ မကြောက်ပါနှင့်။ အချိန်မရွေး စောင့်ကြည့်ခြင်းအား ရပ်တန့်နိုင်ပါသည်။",
  "follow_request.authorize": "လုပ်ပိုင်ခွင့်",
  "follow_request.reject": "ဖယ်ရှားပါ",
  "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
  "follow_requests.unlocked_explanation": "သင့်အကောင့်ကို လော့ခ်ချမထားသော်လည်း၊ {domain} ဝန်ထမ်းများသည် ဤအကောင့်များမှ လိုက်နာရန်တောင်းဆိုမှုများကို ကိုယ်တိုင်ပြန်လည်စစ်ဆေးလိုမည်ဟု ထင်မြင်ယူဆပါသည်။",
  "followed_tags": "Hashtag ကို စောင့်ကြည့်ပါမည်",
  "footer.about": "အကြောင်း",
  "footer.directory": "ပရိုဖိုင်များလမ်းညွှန်",


@@ 414,7 414,7 @@
  "notifications.column_settings.alert": "Desktop သတိပေးချက်များ",
  "notifications.column_settings.favourite": "ကြိုက်နှစ်သက်မှုများ",
  "notifications.column_settings.filter_bar.advanced": "ခေါင်းစဥ်အားလုံးများကိုဖော်ပြပါ",
  "notifications.column_settings.filter_bar.category": "Quick filter bar",
  "notifications.column_settings.filter_bar.category": "အမြန်စစ်ထုတ်မှုဘား",
  "notifications.column_settings.filter_bar.show_bar": "စစ်ထုတ်မှုဘားကို ပြပါ",
  "notifications.column_settings.follow": "စောင့်ကြည့်သူအသစ်များ -",
  "notifications.column_settings.follow_request": "စောင့်ကြည့်ရန် တောင်းဆိုမှုအသစ်များ -",


@@ 442,7 442,7 @@
  "notifications.permission_denied_alert": "ဘရောက်ဆာခွင့်ပြုချက်ကို ငြင်းပယ်ခဲ့သောကြောင့် ဒက်စ်တော့ အသိပေးချက်များကို ဖွင့်၍မရပါ",
  "notifications.permission_required": "လိုအပ်သောခွင့်ပြုချက်ကို မပေးထားသောကြောင့် ဒက်စ်တော့ အသိပေးချက်များကို မရရှိနိုင်ပါ။",
  "notifications_permission_banner.enable": "ဒက်စ်တော့ အသိပေးချက်များကို ဖွင့်ပါ",
  "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
  "notifications_permission_banner.how_to_control": "Mastodon မဖွင့်သည့်အခါ အကြောင်းကြားချက်များကို လက်ခံရယူရန်၊ ဒက်စ်တော့ အသိပေးချက်များကို ဖွင့်ပါ။ ၎င်းတို့ကို ဖွင့်ပြီးသည်နှင့် ၎င်းတို့ကို ဖွင့်ပြီးသည်နှင့် အထက် {icon} ခလုတ်မှ ဒက်စ်တော့ အသိပေးချက်များကို ထုတ်ပေးသည့် အပြန်အလှန်တုံ့ပြန်မှု အမျိုးအစားများကို သင် အတိအကျ ထိန်းချုပ်နိုင်သည်။",
  "notifications_permission_banner.title": "လက်လွတ်မခံပါနှင့်",
  "picture_in_picture.restore": "ပြန်ထားပါ",
  "poll.closed": "ပိတ်သွားပြီ",


@@ 528,7 528,7 @@
  "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
  "search_popout.tips.hashtag": "ဟက်ရှ်တက်ခ်",
  "search_popout.tips.status": "ပို့စ်",
  "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
  "search_popout.tips.text": "ရိုးရှင်းသော စာသားသည် ကိုက်ညီသည့် ဖော်ပြအမည်များ၊ အသုံးပြုသူအမည်များနှင့် hashtag များကို ပြန်ဖော်ပြပေးသည်။\n",
  "search_popout.tips.user": "အသုံးပြုသူ",
  "search_results.accounts": "လူပုဂ္ဂိုလ်",
  "search_results.all": "အားလုံး",


@@ 558,6 558,7 @@
  "status.delete": "ဖျက်ရန်",
  "status.detailed_status": "အသေးစိတ်စကားပြောဆိုမှုမြင်ကွင်း",
  "status.direct": "@{name} ကို တိုက်ရိုက်စာပို့မည်",
  "status.direct_indicator": "Private mention",
  "status.edit": "ပြင်ဆင်ရန်",
  "status.edited": "{date} ကို ပြင်ဆင်ပြီးပါပြီ",
  "status.edited_x_times": "{count, plural, one {{count} time} other {{count} times}} ပြင်ဆင်ခဲ့သည်",

M app/javascript/mastodon/locales/nl.json => app/javascript/mastodon/locales/nl.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Verwijderen",
  "status.detailed_status": "Uitgebreide gespreksweergave",
  "status.direct": "@{name} een direct bericht sturen",
  "status.direct_indicator": "Private mention",
  "status.edit": "Bewerken",
  "status.edited": "Bewerkt op {date}",
  "status.edited_x_times": "{count, plural, one {{count} keer} other {{count} keer}} bewerkt",

M app/javascript/mastodon/locales/nn.json => app/javascript/mastodon/locales/nn.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Slett",
  "status.detailed_status": "Detaljert samtalevisning",
  "status.direct": "Send melding til @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Rediger",
  "status.edited": "Redigert {date}",
  "status.edited_x_times": "Redigert {count, plural, one {{count} gong} other {{count} gonger}}",

M app/javascript/mastodon/locales/no.json => app/javascript/mastodon/locales/no.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Slett",
  "status.detailed_status": "Detaljert samtalevisning",
  "status.direct": "Send direktemelding til @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Rediger",
  "status.edited": "Redigert {date}",
  "status.edited_x_times": "Redigert {count, plural,one {{count} gang} other {{count} ganger}}",

M app/javascript/mastodon/locales/oc.json => app/javascript/mastodon/locales/oc.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Escafar",
  "status.detailed_status": "Vista detalhada de la convèrsa",
  "status.direct": "Messatge per @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Modificar",
  "status.edited": "Modificat {date}",
  "status.edited_x_times": "Modificat {count, plural, un {{count} còp} other {{count} còps}}",

M app/javascript/mastodon/locales/pa.json => app/javascript/mastodon/locales/pa.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Delete",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/pl.json => app/javascript/mastodon/locales/pl.json +1 -0
@@ 563,6 563,7 @@
  "status.delete": "Usuń",
  "status.detailed_status": "Szczegółowy widok konwersacji",
  "status.direct": "Wyślij wiadomość bezpośrednią do @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edytuj",
  "status.edited": "Edytowano {date}",
  "status.edited_x_times": "Edytowano {count, plural, one {{count} raz} other {{count} razy}}",

M app/javascript/mastodon/locales/pt-BR.json => app/javascript/mastodon/locales/pt-BR.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Excluir",
  "status.detailed_status": "Visão detalhada da conversa",
  "status.direct": "Enviar toot direto para @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Editar",
  "status.edited": "Editado em {date}",
  "status.edited_x_times": "Editado {count, plural, one {{count} hora} other {{count} vezes}}",

M app/javascript/mastodon/locales/pt-PT.json => app/javascript/mastodon/locales/pt-PT.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Eliminar",
  "status.detailed_status": "Vista pormenorizada da conversa",
  "status.direct": "Mensagem direta @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Editar",
  "status.edited": "Editado em {date}",
  "status.edited_x_times": "Editado {count, plural,one {{count} vez} other {{count} vezes}}",

M app/javascript/mastodon/locales/ro.json => app/javascript/mastodon/locales/ro.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Șterge",
  "status.detailed_status": "Conversația detaliată",
  "status.direct": "Mesaj direct către @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Modifică",
  "status.edited": "Modificat în data de {date}",
  "status.edited_x_times": "Modificată {count, plural, one {o dată} few {de {count} ori} other {de {count} de ori}}",

M app/javascript/mastodon/locales/ru.json => app/javascript/mastodon/locales/ru.json +2 -1
@@ 163,7 163,7 @@
  "confirmations.domain_block.confirm": "Да, заблокировать узел",
  "confirmations.domain_block.message": "Вы точно уверены, что хотите заблокировать {domain} полностью? В большинстве случаев нескольких блокировок и игнорирований вполне достаточно. Вы перестанете видеть публичную ленту и уведомления оттуда. Ваши подписчики из этого домена будут удалены.",
  "confirmations.edit.confirm": "Редактировать",
  "confirmations.edit.message": "Editing now will overwrite the message you are currently composing. Are you sure you want to proceed?",
  "confirmations.edit.message": "В данный момент, редактирование перезапишет составляемое вами сообщение. Вы уверены, что хотите продолжить?",
  "confirmations.logout.confirm": "Выйти",
  "confirmations.logout.message": "Вы уверены, что хотите выйти?",
  "confirmations.mute.confirm": "Игнорировать",


@@ 558,6 558,7 @@
  "status.delete": "Удалить",
  "status.detailed_status": "Подробный просмотр обсуждения",
  "status.direct": "Написать @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Изменить",
  "status.edited": "Последнее изменение: {date}",
  "status.edited_x_times": "{count, plural, one {{count} изменение} many {{count} изменений} other {{count} изменения}}",

M app/javascript/mastodon/locales/sa.json => app/javascript/mastodon/locales/sa.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "मार्जय",
  "status.detailed_status": "विस्तृतसंभाषणदृश्यम्",
  "status.direct": "प्रत्यक्षसन्देशः @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "सम्पादय",
  "status.edited": "सम्पादितं {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} वारम्} other {{count} वारम्}}",

M app/javascript/mastodon/locales/sc.json => app/javascript/mastodon/locales/sc.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Cantzella",
  "status.detailed_status": "Visualizatzione de detàlliu de arresonada",
  "status.direct": "Messàgiu deretu a @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/sco.json => app/javascript/mastodon/locales/sco.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Delete",
  "status.detailed_status": "Detailt conversation view",
  "status.direct": "Direck message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Editit {date}",
  "status.edited_x_times": "Editit {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/si.json => app/javascript/mastodon/locales/si.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "මකන්න",
  "status.detailed_status": "විස්තරාත්මක සංවාද දැක්ම",
  "status.direct": "@{name} සෘජු පණිවිඩයක්",
  "status.direct_indicator": "Private mention",
  "status.edit": "සංස්කරණය",
  "status.edited": "සංශෝධිතයි {date}",
  "status.edited_x_times": "සංශෝධිතයි {count, plural, one {වාර {count}} other {වාර {count}}}",

M app/javascript/mastodon/locales/sk.json => app/javascript/mastodon/locales/sk.json +2 -1
@@ 558,6 558,7 @@
  "status.delete": "Zmazať",
  "status.detailed_status": "Podrobný náhľad celej konverzácie",
  "status.direct": "Priama správa pre @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Uprav",
  "status.edited": "Upravené {date}",
  "status.edited_x_times": "Upravený {count, plural, one {{count} krát} other {{count} krát}}",


@@ 597,7 598,7 @@
  "status.show_more_all": "Všetkým ukáž viac",
  "status.show_original": "Ukáž pôvodný",
  "status.translate": "Preložiť",
  "status.translated_from_with": "Translated from {lang} using {provider}",
  "status.translated_from_with": "Preložené z {lang} pomocou {provider}",
  "status.uncached_media_warning": "Nedostupný/é",
  "status.unmute_conversation": "Prestaň si nevšímať konverzáciu",
  "status.unpin": "Odopni z profilu",

M app/javascript/mastodon/locales/sl.json => app/javascript/mastodon/locales/sl.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Izbriši",
  "status.detailed_status": "Podroben pogled pogovora",
  "status.direct": "Neposredno sporočilo @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Uredi",
  "status.edited": "Urejeno {date}",
  "status.edited_x_times": "Urejeno {count, plural, one {#-krat} two {#-krat} few {#-krat} other {#-krat}}",

M app/javascript/mastodon/locales/sq.json => app/javascript/mastodon/locales/sq.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Fshije",
  "status.detailed_status": "Pamje e hollësishme bisede",
  "status.direct": "Mesazh i drejtpërdrejtë për @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Përpunojeni",
  "status.edited": "Përpunuar më {date}",
  "status.edited_x_times": "Përpunuar {count, plural, one {{count} herë} other {{count} herë}}",

M app/javascript/mastodon/locales/sr-Latn.json => app/javascript/mastodon/locales/sr-Latn.json +2 -1
@@ 540,7 540,7 @@
  "search_results.total": "{count, number} {count, plural, one {rezultat} few {rezultata} other {rezultata}}",
  "server_banner.about_active_users": "Ljudi koji su koristili ovaj server u prethodnih 30 dana (mesečno aktivnih korisnika)",
  "server_banner.active_users": "aktivnih korisnika",
  "server_banner.administered_by": "Administrirano od strane:",
  "server_banner.administered_by": "Administrira:",
  "server_banner.introduction": "{domain} je deo decentralizovane društvene mreže koju pokreće {mastodon}.",
  "server_banner.learn_more": "Saznajte više",
  "server_banner.server_stats": "Statistike servera:",


@@ 558,6 558,7 @@
  "status.delete": "Izbriši",
  "status.detailed_status": "Detaljan prikaz razgovora",
  "status.direct": "Pošalji poruku @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Uredi",
  "status.edited": "Uređeno {date}",
  "status.edited_x_times": "Uređeno {count, plural, one {{count} put} other {{count} puta}}",

M app/javascript/mastodon/locales/sr.json => app/javascript/mastodon/locales/sr.json +10 -9
@@ 155,7 155,7 @@
  "confirmations.cancel_follow_request.confirm": "Повуци захтев",
  "confirmations.cancel_follow_request.message": "Да ли сте сигурни да желите да повучете захтев да пратите {name}?",
  "confirmations.delete.confirm": "Избриши",
  "confirmations.delete.message": "Да ли сте сигурни да желите изришете ову објаву?",
  "confirmations.delete.message": "Да ли сте сигурни да желите да избришете ову објаву?",
  "confirmations.delete_list.confirm": "Избриши",
  "confirmations.delete_list.message": "Да ли сте сигурни да желите да трајно избришете ову листу?",
  "confirmations.discard_edit_media.confirm": "Одбаци",


@@ 167,12 167,12 @@
  "confirmations.logout.confirm": "Одјава",
  "confirmations.logout.message": "Да ли сте сигурни да желите да се одјавите?",
  "confirmations.mute.confirm": "Игнориши",
  "confirmations.mute.explanation": "Ово ће сакрити објаве од корисника и објаве које га помињу, али ће му и даље бити дозвољено да види ваше објаве и да вас прати.",
  "confirmations.mute.explanation": "Ово ће сакрити објаве корисника и објаве које га помињу, али ће му и даље бити дозвољено да види Ваше објаве и да Вас прати.",
  "confirmations.mute.message": "Да ли стварно желите да игноришете корисника {name}?",
  "confirmations.redraft.confirm": "Избриши и преправи",
  "confirmations.redraft.message": "Да ли сте сигурни да желите да избришете ову објаву и да је преправите? Подржавања и ознаке као омиљених ће бити изгубљени, а одговори ће остати без оригиналне објаве.",
  "confirmations.reply.confirm": "Одговори",
  "confirmations.reply.message": "Одговарањем ћете обрисати поруку коју састављате. Да ли сигурни да желите да наставите?",
  "confirmations.reply.message": "Одговарањем ћете обрисати поруку коју састављате. Да ли сте сигурни да желите да наставите?",
  "confirmations.unfollow.confirm": "Отпрати",
  "confirmations.unfollow.message": "Да ли сте сигурни да желите да отпратите корисника {name}?",
  "conversation.delete": "Избриши разговор",


@@ 181,7 181,7 @@
  "conversation.with": "Са {names}",
  "copypaste.copied": "Копирано",
  "copypaste.copy": "Копирај",
  "directory.federated": "Са знаног фидеверзума",
  "directory.federated": "Са знаног федиверзума",
  "directory.local": "Само са {domain}",
  "directory.new_arrivals": "Новопридошли",
  "directory.recently_active": "Недавно активни",


@@ 337,7 337,7 @@
  "keyboard_shortcuts.search": "Фокусирај траку претраге",
  "keyboard_shortcuts.spoilers": "Прикажи/сакриј поље текста упозорења о садржају (CW)",
  "keyboard_shortcuts.start": "Отвори колону „први кораци”",
  "keyboard_shortcuts.toggle_hidden": "Прикажи/сакриј текст иза CW-а",
  "keyboard_shortcuts.toggle_hidden": "Прикажи/сакриј текст иза упозорења",
  "keyboard_shortcuts.toggle_sensitivity": "Прикажи/сакриј мултимедију",
  "keyboard_shortcuts.toot": "Започни нову објаву",
  "keyboard_shortcuts.unfocus": "Уклони фокус са поља за унос текста/претраге",


@@ 366,7 366,7 @@
  "loading_indicator.label": "Учитавање...",
  "media_gallery.toggle_visible": "{number, plural, one {Сакриј слику} few {Сакриј слике} other {Сакриј слике}}",
  "missing_indicator.label": "Није пронађено",
  "missing_indicator.sublabel": "Овај ресурс није могуће пронаћи",
  "missing_indicator.sublabel": "Овај ресурс није било могуће пронаћи",
  "moved_to_account_banner.text": "Ваш налог {disabledAccount} је тренутно онемогућен јер сте прешли на {movedToAccount}.",
  "mute_modal.duration": "Трајање",
  "mute_modal.hide_notifications": "Сакрити обавештења од овог корисника?",


@@ 525,10 525,10 @@
  "search.placeholder": "Претрага",
  "search.search_or_paste": "Претражите или унесите адресу",
  "search_popout.search_format": "Напредни формат претраге",
  "search_popout.tips.full_text": "Једноставан текст враћа објаве које сте написали, додали у омиљене, подржали или у којима сте били поменути, као и подударање корисничких имена, приказана имена и хеш ознаке.",
  "search_popout.tips.full_text": "Једноставан текст враћа објаве које сте написали, додали у омиљене, подржали или у којима сте били поменути, као и одговарајућа корисничка имена, имена за приказ и хеш ознаке.",
  "search_popout.tips.hashtag": "хеш ознака",
  "search_popout.tips.status": "објава",
  "search_popout.tips.text": "Једноставан текст враћа подударање имена за приказ, корисничка имена и хеш ознаке",
  "search_popout.tips.text": "Једноставан текст враћа подударна имена за приказ, корисничка имена и хеш ознаке",
  "search_popout.tips.user": "корисник",
  "search_results.accounts": "Људи",
  "search_results.all": "Све",


@@ 540,7 540,7 @@
  "search_results.total": "{count, number} {count, plural, one {резултат} few {резултата} other {резултата}}",
  "server_banner.about_active_users": "Људи који су користили овај сервер у претходних 30 дана (месечно активних корисника)",
  "server_banner.active_users": "активних корисника",
  "server_banner.administered_by": "Администрирано од стране:",
  "server_banner.administered_by": "Администрира:",
  "server_banner.introduction": "{domain} је део децентрализоване друштвене мреже коју покреће {mastodon}.",
  "server_banner.learn_more": "Сазнајте више",
  "server_banner.server_stats": "Статистике сервера:",


@@ 558,6 558,7 @@
  "status.delete": "Избриши",
  "status.detailed_status": "Детаљан приказ разговора",
  "status.direct": "Пошаљи поруку @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Уреди",
  "status.edited": "Уређено {date}",
  "status.edited_x_times": "Уређено {count, plural, one {{count} пут} other {{count} пута}}",

M app/javascript/mastodon/locales/sv.json => app/javascript/mastodon/locales/sv.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Radera",
  "status.detailed_status": "Detaljerad samtalsvy",
  "status.direct": "Direktmeddela @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Redigera",
  "status.edited": "Ändrad {date}",
  "status.edited_x_times": "Redigerad {count, plural, one {{count} gång} other {{count} gånger}}",

M app/javascript/mastodon/locales/szl.json => app/javascript/mastodon/locales/szl.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Delete",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/ta.json => app/javascript/mastodon/locales/ta.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "நீக்கு",
  "status.detailed_status": "விரிவான உரையாடல் காட்சி",
  "status.direct": "நேரடி செய்தி @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/tai.json => app/javascript/mastodon/locales/tai.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Delete",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/te.json => app/javascript/mastodon/locales/te.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "తొలగించు",
  "status.detailed_status": "వివరణాత్మక సంభాషణ వీక్షణ",
  "status.direct": "@{name}కు నేరుగా సందేశం పంపు",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/th.json => app/javascript/mastodon/locales/th.json +3 -2
@@ 67,8 67,8 @@
  "account.unmute_notifications": "เลิกซ่อนการแจ้งเตือนจาก @{name}",
  "account.unmute_short": "เลิกซ่อน",
  "account_note.placeholder": "คลิกเพื่อเพิ่มหมายเหตุ",
  "admin.dashboard.daily_retention": "อัตราการเก็บรักษาผู้ใช้ตามวันหลังจากลงทะเบียน",
  "admin.dashboard.monthly_retention": "อัตราการเก็บรักษาผู้ใช้ตามเดือนหลังจากลงทะเบียน",
  "admin.dashboard.daily_retention": "อัตราการเก็บรักษาผู้ใช้ตามวันหลังจากการลงทะเบียน",
  "admin.dashboard.monthly_retention": "อัตราการเก็บรักษาผู้ใช้ตามเดือนหลังจากการลงทะเบียน",
  "admin.dashboard.retention.average": "ค่าเฉลี่ย",
  "admin.dashboard.retention.cohort": "เดือนที่ลงทะเบียน",
  "admin.dashboard.retention.cohort_size": "ผู้ใช้ใหม่",


@@ 558,6 558,7 @@
  "status.delete": "ลบ",
  "status.detailed_status": "มุมมองการสนทนาโดยละเอียด",
  "status.direct": "ส่งข้อความโดยตรงถึง @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "แก้ไข",
  "status.edited": "แก้ไขเมื่อ {date}",
  "status.edited_x_times": "แก้ไข {count, plural, other {{count} ครั้ง}}",

M app/javascript/mastodon/locales/tr.json => app/javascript/mastodon/locales/tr.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Sil",
  "status.detailed_status": "Ayrıntılı sohbet görünümü",
  "status.direct": "@{name} adlı kişiye direkt mesaj",
  "status.direct_indicator": "Private mention",
  "status.edit": "Düzenle",
  "status.edited": "{date} tarihinde düzenlenmiş",
  "status.edited_x_times": "{count, plural, one {{count} kez} other {{count} kez}} düzenlendi",

M app/javascript/mastodon/locales/tt.json => app/javascript/mastodon/locales/tt.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Бетерү",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Үзгәртү",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/ug.json => app/javascript/mastodon/locales/ug.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Delete",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/uk.json => app/javascript/mastodon/locales/uk.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Видалити",
  "status.detailed_status": "Детальний вигляд бесіди",
  "status.direct": "Пряме повідомлення до @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Редагувати",
  "status.edited": "Відредаговано {date}",
  "status.edited_x_times": "Відредаговано {count, plural, one {{count} раз} few {{count} рази} many {{counter} разів} other {{counter} разів}}",

M app/javascript/mastodon/locales/ur.json => app/javascript/mastodon/locales/ur.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Delete",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/uz.json => app/javascript/mastodon/locales/uz.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "Delete",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "Direct message @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/vi.json => app/javascript/mastodon/locales/vi.json +2 -1
@@ 272,7 272,7 @@
  "footer.get_app": "Ứng dụng",
  "footer.invite": "Mời bạn bè",
  "footer.keyboard_shortcuts": "Phím tắt",
  "footer.privacy_policy": "Chính sách bảo mật",
  "footer.privacy_policy": "Bảo mật",
  "footer.source_code": "Mã nguồn",
  "footer.status": "Trạng thái",
  "generic.saved": "Đã lưu",


@@ 558,6 558,7 @@
  "status.delete": "Xóa",
  "status.detailed_status": "Xem chi tiết thêm",
  "status.direct": "Nhắn riêng @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Sửa",
  "status.edited": "Đã sửa {date}",
  "status.edited_x_times": "Đã sửa {count, plural, other {{count} lần}}",

M app/javascript/mastodon/locales/zgh.json => app/javascript/mastodon/locales/zgh.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "ⴽⴽⵙ",
  "status.detailed_status": "Detailed conversation view",
  "status.direct": "ⵜⵓⵣⵉⵏⵜ ⵜⵓⵙⵔⵉⴷⵜ ⵉ @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "Edit",
  "status.edited": "Edited {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",

M app/javascript/mastodon/locales/zh-CN.json => app/javascript/mastodon/locales/zh-CN.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "删除",
  "status.detailed_status": "详细的对话视图",
  "status.direct": "私信 @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "编辑",
  "status.edited": "编辑于 {date}",
  "status.edited_x_times": "共编辑 {count, plural, one {{count} 次} other {{count} 次}}",

M app/javascript/mastodon/locales/zh-HK.json => app/javascript/mastodon/locales/zh-HK.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "刪除",
  "status.detailed_status": "詳細對話內容",
  "status.direct": "私訊 @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "編輯",
  "status.edited": "編輯於 {date}",
  "status.edited_x_times": "Edited {count, plural, one {{count} 次} other {{count} 次}}",

M app/javascript/mastodon/locales/zh-TW.json => app/javascript/mastodon/locales/zh-TW.json +1 -0
@@ 558,6 558,7 @@
  "status.delete": "刪除",
  "status.detailed_status": "詳細的對話內容",
  "status.direct": "發送私訊給 @{name}",
  "status.direct_indicator": "Private mention",
  "status.edit": "編輯",
  "status.edited": "編輯於 {date}",
  "status.edited_x_times": "已編輯 {count, plural, one {{count} 次} other {{count} 次}}",

M app/javascript/mastodon/performance.js => app/javascript/mastodon/performance.js +1 -0
@@ 12,6 12,7 @@ if (process.env.NODE_ENV === 'development') {
    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1331135
    performance.setResourceTimingBufferSize(Infinity);
  }
  // eslint-disable-next-line import/no-extraneous-dependencies
  marky = require('marky');
  // allows us to easily do e.g. ReactPerf.printWasted() while debugging
  //window.ReactPerf = require('react-addons-perf');

D app/javascript/mastodon/utils/resize_image.js => app/javascript/mastodon/utils/resize_image.js +0 -189
@@ 1,189 0,0 @@
import EXIF from 'exif-js';

const MAX_IMAGE_PIXELS = 2073600; // 1920x1080px

const _browser_quirks = {};

// Some browsers will automatically draw images respecting their EXIF orientation
// while others won't, and the safest way to detect that is to examine how it
// is done on a known image.
// See https://github.com/w3c/csswg-drafts/issues/4666
// and https://github.com/blueimp/JavaScript-Load-Image/commit/1e4df707821a0afcc11ea0720ee403b8759f3881
const dropOrientationIfNeeded = (orientation) => new Promise(resolve => {
  switch (_browser_quirks['image-orientation-automatic']) {
  case true:
    resolve(1);
    break;
  case false:
    resolve(orientation);
    break;
  default:
    // black 2x1 JPEG, with the following meta information set:
    // - EXIF Orientation: 6 (Rotated 90° CCW)
    const testImageURL =
      'data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAA' +
      'AAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA' +
      'QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE' +
      'BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/x' +
      'ABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAA' +
      'AAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==';
    const img = new Image();
    img.onload = () => {
      const automatic = (img.width === 1 && img.height === 2);
      _browser_quirks['image-orientation-automatic'] = automatic;
      resolve(automatic ? 1 : orientation);
    };
    img.onerror = () => {
      _browser_quirks['image-orientation-automatic'] = false;
      resolve(orientation);
    };
    img.src = testImageURL;
  }
});

// Some browsers don't allow reading from a canvas and instead return all-white
// or randomized data. Use a pre-defined image to check if reading the canvas
// works.
const checkCanvasReliability = () => new Promise((resolve, reject) => {
  switch(_browser_quirks['canvas-read-unreliable']) {
  case true:
    reject('Canvas reading unreliable');
    break;
  case false:
    resolve();
    break;
  default:
    // 2×2 GIF with white, red, green and blue pixels
    const testImageURL =
      'data:image/gif;base64,R0lGODdhAgACAKEDAAAA//8AAAD/AP///ywAAAAAAgACAAACA1wEBQA7';
    const refData =
      [255, 255, 255, 255,  255, 0, 0, 255,  0, 255, 0, 255,  0, 0, 255, 255];
    const img = new Image();
    img.onload = () => {
      const canvas  = document.createElement('canvas');
      const context = canvas.getContext('2d');
      context.drawImage(img, 0, 0, 2, 2);
      const imageData = context.getImageData(0, 0, 2, 2);
      if (imageData.data.every((x, i) => refData[i] === x)) {
        _browser_quirks['canvas-read-unreliable'] = false;
        resolve();
      } else {
        _browser_quirks['canvas-read-unreliable'] = true;
        reject('Canvas reading unreliable');
      }
    };
    img.onerror = () => {
      _browser_quirks['canvas-read-unreliable'] = true;
      reject('Failed to load test image');
    };
    img.src = testImageURL;
  }
});

const getImageUrl = inputFile => new Promise((resolve, reject) => {
  if (window.URL && URL.createObjectURL) {
    try {
      resolve(URL.createObjectURL(inputFile));
    } catch (error) {
      reject(error);
    }
    return;
  }

  const reader = new FileReader();
  reader.onerror = (...args) => reject(...args);
  reader.onload  = ({ target }) => resolve(target.result);

  reader.readAsDataURL(inputFile);
});

const loadImage = inputFile => new Promise((resolve, reject) => {
  getImageUrl(inputFile).then(url => {
    const img = new Image();

    img.onerror = (...args) => reject(...args);
    img.onload  = () => resolve(img);

    img.src = url;
  }).catch(reject);
});

const getOrientation = (img, type = 'image/png') => new Promise(resolve => {
  if (!['image/jpeg', 'image/webp'].includes(type)) {
    resolve(1);
    return;
  }

  EXIF.getData(img, () => {
    const orientation = EXIF.getTag(img, 'Orientation');
    if (orientation !== 1) {
      dropOrientationIfNeeded(orientation).then(resolve).catch(() => resolve(orientation));
    } else {
      resolve(orientation);
    }
  });
});

const processImage = (img, { width, height, orientation, type = 'image/png' }) => new Promise(resolve => {
  const canvas  = document.createElement('canvas');

  if (4 < orientation && orientation < 9) {
    canvas.width  = height;
    canvas.height = width;
  } else {
    canvas.width  = width;
    canvas.height = height;
  }

  const context = canvas.getContext('2d');

  switch (orientation) {
  case 2: context.transform(-1, 0, 0, 1, width, 0); break;
  case 3: context.transform(-1, 0, 0, -1, width, height); break;
  case 4: context.transform(1, 0, 0, -1, 0, height); break;
  case 5: context.transform(0, 1, 1, 0, 0, 0); break;
  case 6: context.transform(0, 1, -1, 0, height, 0); break;
  case 7: context.transform(0, -1, -1, 0, height, width); break;
  case 8: context.transform(0, -1, 1, 0, 0, width); break;
  }

  context.drawImage(img, 0, 0, width, height);

  canvas.toBlob(resolve, type);
});

const resizeImage = (img, type = 'image/png') => new Promise((resolve, reject) => {
  const { width, height } = img;

  const newWidth  = Math.round(Math.sqrt(MAX_IMAGE_PIXELS * (width / height)));
  const newHeight = Math.round(Math.sqrt(MAX_IMAGE_PIXELS * (height / width)));

  checkCanvasReliability()
    .then(getOrientation(img, type))
    .then(orientation => processImage(img, {
      width: newWidth,
      height: newHeight,
      orientation,
      type,
    }))
    .then(resolve)
    .catch(reject);
});

export default inputFile => new Promise((resolve) => {
  if (!inputFile.type.match(/image.*/) || inputFile.type === 'image/gif') {
    resolve(inputFile);
    return;
  }

  loadImage(inputFile).then(img => {
    if (img.width * img.height < MAX_IMAGE_PIXELS) {
      resolve(inputFile);
      return;
    }

    resizeImage(img, inputFile.type)
      .then(resolve)
      .catch(() => resolve(inputFile));
  }).catch(() => resolve(inputFile));
});

M app/javascript/styles/mastodon-light/diff.scss => app/javascript/styles/mastodon-light/diff.scss +9 -1
@@ 264,7 264,7 @@ html {

// Change the background colors of statuses
.focusable:focus {
  background: $ui-base-color;
  background: lighten($white, 4%);
}

.detailed-status,


@@ 697,3 697,11 @@ html {
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14.933 18.467' height='19.698' width='15.929'><path d='M3.467 14.967l-3.393-3.5H14.86l-3.392 3.5c-1.866 1.925-3.666 3.5-4 3.5-.335 0-2.135-1.575-4-3.5zm.266-11.234L7.467 0 11.2 3.733l3.733 3.734H0l3.733-3.734z' fill='#{hex-color(lighten($ui-base-color, 8%))}'/></svg>")
    no-repeat right 8px center / auto 16px;
}

.status__wrapper-direct {
  background-color: rgba($ui-highlight-color, 0.1);

  &:focus {
    background-color: rgba($ui-highlight-color, 0.15);
  }
}

M app/javascript/styles/mastodon/about.scss => app/javascript/styles/mastodon/about.scss +2 -2
@@ 28,14 28,14 @@ $fluid-breakpoint: $maximum-width + 20px;
    position: relative;
    border-bottom: 1px solid lighten($ui-base-color, 8%);
    padding: 1em 1.75em;
    padding-left: 3em;
    padding-inline-start: 3em;
    font-weight: 500;
    counter-increment: list-counter;

    &::before {
      content: counter(list-counter);
      position: absolute;
      left: 0;
      inset-inline-start: 0;
      top: 50%;
      transform: translateY(-50%);
      background: $highlight-text-color;

M app/javascript/styles/mastodon/accounts.scss => app/javascript/styles/mastodon/accounts.scss +8 -8
@@ 73,8 73,8 @@
    }

    .display-name {
      margin-left: 15px;
      text-align: left;
      margin-inline-start: 15px;
      text-align: start;

      i[data-hidden] {
        display: none;


@@ 138,22 138,22 @@
  }

  .older {
    float: left;
    padding-left: 0;
    float: inline-start;
    padding-inline-start: 0;

    .fa {
      display: inline-block;
      margin-right: 5px;
      margin-inline-end: 5px;
    }
  }

  .newer {
    float: right;
    padding-right: 0;
    float: inline-end;
    padding-inline-end: 0;

    .fa {
      display: inline-block;
      margin-left: 5px;
      margin-inline-start: 5px;
    }
  }


M app/javascript/styles/mastodon/admin.scss => app/javascript/styles/mastodon/admin.scss +44 -39
@@ 117,7 117,7 @@ $content-width: 840px;
        text-overflow: ellipsis;

        i.fa {
          margin-right: 5px;
          margin-inline-end: 5px;
        }

        &:hover {


@@ 186,7 186,10 @@ $content-width: 840px;
  }

  .content {
    padding: 55px 15px 20px 25px;
    padding-top: 55px;
    padding-bottom: 20px;
    padding-inline-start: 25px;
    padding-inline-end: 15px;

    @media screen and (max-width: $no-columns-breakpoint) {
      max-width: none;


@@ 202,11 205,12 @@ $content-width: 840px;
        flex-wrap: wrap;
        align-items: center;
        justify-content: space-between;
        margin: -15px -15px 0 0;
        margin-top: -15px;
        margin-inline-end: -15px;

        & > * {
          margin-top: 15px;
          margin-right: 15px;
          margin-inline-end: 15px;
        }
      }



@@ 385,7 389,7 @@ $content-width: 840px;
          z-index: 10;
          width: 100%;
          height: calc(100% - 56px);
          left: 0;
          inset-inline-start: 0;
          bottom: 0;
          overflow-y: auto;
          background: $ui-base-color;


@@ 470,10 474,11 @@ body,
.filters {
  display: flex;
  flex-wrap: wrap;
  gap: 40px;

  .filter-subset {
    flex: 0 0 auto;
    margin: 0 40px 20px 0;
    margin-bottom: 20px;

    &:last-child {
      margin-bottom: 30px;


@@ 485,7 490,7 @@ body,

      li {
        display: inline-block;
        margin-right: 5px;
        margin-inline-end: 5px;
      }
    }



@@ 588,7 593,7 @@ body,

  .activity-stream {
    flex: 2 0 0;
    margin-right: 20px;
    margin-inline-end: 20px;
    max-width: calc(100% - 60px);

    .entry {


@@ 641,12 646,12 @@ body,
  }

  .media-spoiler-toggle-buttons {
    margin-left: auto;
    margin-inline-start: auto;

    .button {
      overflow: visible;
      margin: 0 0 5px 5px;
      float: right;
      float: inline-end;
    }
  }
}


@@ 667,7 672,7 @@ body,

.special-action-button,
.back-link {
  text-align: right;
  text-align: end;
  flex: 1 1 auto;
}



@@ 685,7 690,7 @@ body,
  display: block;
  line-height: 20px;
  padding: 15px;
  padding-left: 15px * 2 + 40px;
  padding-inline-start: 15px * 2 + 40px;
  background: $ui-base-color;
  border-bottom: 1px solid darken($ui-base-color, 8%);
  position: relative;


@@ 712,7 717,7 @@ body,

  &__avatar {
    position: absolute;
    left: 15px;
    inset-inline-start: 15px;
    top: 15px;

    .avatar {


@@ 780,7 785,7 @@ a.name-tag,
  .avatar {
    display: block;
    margin: 0;
    margin-right: 5px;
    margin-inline-end: 5px;
    border-radius: 50%;
  }



@@ 794,7 799,7 @@ a.name-tag,

.speech-bubble {
  margin-bottom: 20px;
  border-left: 4px solid $ui-highlight-color;
  border-inset-inline-start: 4px solid $ui-highlight-color;

  &.positive {
    border-left-color: $success-green;


@@ 810,7 815,7 @@ a.name-tag,

  &__bubble {
    padding: 16px;
    padding-left: 14px;
    padding-inline-start: 14px;
    font-size: 15px;
    line-height: 20px;
    border-radius: 4px 4px 4px 0;


@@ 824,7 829,7 @@ a.name-tag,

  &__owner {
    padding: 8px;
    padding-left: 12px;
    padding-inline-start: 12px;
  }

  time {


@@ 848,7 853,7 @@ a.name-tag,
      border: 0;

      &__avatar-wrapper {
        margin-left: 0;
        margin-inline-start: 0;
      }
    }



@@ 857,7 862,7 @@ a.name-tag,
      font-weight: 500;
      color: $darker-text-color;
      text-transform: uppercase;
      text-align: right;
      text-align: end;

      a {
        color: inherit;


@@ 908,7 913,7 @@ a.name-tag,

        &__icon {
          color: $dark-text-color;
          margin-right: 4px;
          margin-inline-end: 4px;
          font-weight: 500;
        }
      }


@@ 1106,7 1111,7 @@ a.name-tag,

  > h4 {
    position: sticky;
    left: 0;
    inset-inline-start: 0;
  }

  &__table {


@@ 1118,7 1123,7 @@ a.name-tag,
    &__date {
      white-space: nowrap;
      padding: 10px 0;
      text-align: left;
      text-align: start;
      min-width: 120px;

      &.retention__table__average {


@@ 1176,7 1181,7 @@ a.name-tag,

    &__total {
      display: block;
      margin-right: 10px;
      margin-inline-end: 10px;
      font-weight: 500;
      font-size: 28px;
      color: $primary-text-color;


@@ 1278,7 1283,7 @@ a.sparkline {
    }

    &__value {
      text-align: right;
      text-align: end;
      color: $darker-text-color;
      padding: 11px 10px;
    }


@@ 1289,7 1294,7 @@ a.sparkline {
      height: 8px;
      border-radius: 50%;
      background: $ui-highlight-color;
      margin-right: 10px;
      margin-inline-end: 10px;

      @for $i from 0 through 10 {
        &--#{10 * $i} {


@@ 1325,7 1330,7 @@ a.sparkline {
    }

    &__rules {
      margin-left: 30px;
      margin-inline-start: 30px;
    }
  }



@@ 1447,7 1452,7 @@ a.sparkline {
      height: 21px;
      position: absolute;
      bottom: 0;
      right: 15px;
      inset-inline-end: 15px;
      background: linear-gradient(to left, $ui-base-color, transparent);
      pointer-events: none;
    }


@@ 1527,7 1532,7 @@ a.sparkline {
    background: $ui-base-color;
    position: relative;
    padding: 15px;
    padding-left: 15px * 2 + 40px;
    padding-inline-start: 15px * 2 + 40px;
    border-bottom: 1px solid darken($ui-base-color, 8%);

    &:first-child {


@@ 1547,7 1552,7 @@ a.sparkline {

    &__avatar {
      position: absolute;
      left: 15px;
      inset-inline-start: 15px;
      top: 15px;
      border-radius: 4px;
      width: 40px;


@@ 1563,7 1568,7 @@ a.sparkline {
      .username {
        color: $primary-text-color;
        font-weight: 500;
        margin-right: 5px;
        margin-inline-end: 5px;

        a {
          color: inherit;


@@ 1578,7 1583,7 @@ a.sparkline {
      }

      time {
        margin-left: 5px;
        margin-inline-start: 5px;
        vertical-align: baseline;
      }
    }


@@ 1613,8 1618,8 @@ a.sparkline {
    &__actions {
      position: absolute;
      top: 15px;
      right: 15px;
      text-align: right;
      inset-inline-end: 15px;
      text-align: end;
    }
  }
}


@@ 1637,7 1642,7 @@ a.sparkline {
      flex: 0 0 auto;
      width: 200px;
      padding: 15px;
      padding-right: 0;
      padding-inline-end: 0;

      .button {
        display: block;


@@ 1673,7 1678,7 @@ a.sparkline {
}

.section-skip-link {
  float: right;
  float: inline-end;

  a {
    color: $ui-highlight-color;


@@ 1723,7 1728,7 @@ a.sparkline {

  &__rules {
    list-style: disc;
    padding-left: 15px;
    padding-inline-start: 15px;
    margin-bottom: 20px;
    color: $darker-text-color;



@@ 1812,7 1817,7 @@ a.sparkline {

  li {
    counter-increment: step 1;
    padding-left: 2.5rem;
    padding-inline-start: 2.5rem;
    padding-bottom: 8px;
    position: relative;
    margin-bottom: 8px;


@@ 1822,7 1827,7 @@ a.sparkline {
      content: counter(step);
      font-size: 0.625rem;
      font-weight: 500;
      left: 0;
      inset-inline-start: 0;
      display: flex;
      justify-content: center;
      align-items: center;


@@ 1841,7 1846,7 @@ a.sparkline {
      background: $highlight-text-color;
      bottom: 0;
      top: calc(1.875rem + 1px);
      left: 0.6875rem;
      inset-inline-start: 0.6875rem;
    }

    &:last-child {

M app/javascript/styles/mastodon/basics.scss => app/javascript/styles/mastodon/basics.scss +1 -1
@@ 267,7 267,7 @@ button {
  overflow: hidden;
  position: absolute;
  top: 0;
  left: 0;
  inset-inline-start: 0;
  z-index: -1000;
}


M app/javascript/styles/mastodon/components.scss => app/javascript/styles/mastodon/components.scss +235 -173
@@ 309,7 309,7 @@
  &__counter {
    display: inline-block;
    width: auto;
    margin-left: 4px;
    margin-inline-start: 4px;
    font-size: 12px;
    font-weight: 500;
  }


@@ 413,7 413,7 @@ body > [data-popper-placement] {
      width: 18px;
      height: 18px;
      flex: 0 0 auto;
      margin-right: 10px;
      margin-inline-end: 10px;
      top: -1px;
      border-radius: 4px;
      vertical-align: middle;


@@ 465,7 465,7 @@ body > [data-popper-placement] {
  .emoji-picker-dropdown {
    position: absolute;
    top: 0;
    right: 0;
    inset-inline-end: 0;
  }

  .compose-form__autosuggest-wrapper {


@@ 527,7 527,7 @@ body > [data-popper-placement] {
    min-height: 100px;
    border-radius: 4px 4px 0 0;
    padding-bottom: 0;
    padding-right: 10px + 22px;
    padding-right: 10px + 22px; // Cannot use inline-end because of dir=auto
    resize: none;
    scrollbar-color: initial;



@@ 536,7 536,7 @@ body > [data-popper-placement] {
    }

    @media screen and (max-width: 600px) {
      height: 100px !important; // prevent auto-resize textarea
      height: 100px !important; // Prevent auto-resize textarea
      resize: vertical;
    }
  }


@@ 605,7 605,7 @@ body > [data-popper-placement] {

    &__uses {
      flex: 0 0 auto;
      text-align: right;
      text-align: end;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;


@@ 615,7 615,7 @@ body > [data-popper-placement] {
  .autosuggest-account-icon,
  .autosuggest-emoji img {
    display: block;
    margin-right: 8px;
    margin-inline-end: 8px;
    width: 16px;
    height: 16px;
  }


@@ 677,8 677,8 @@ body > [data-popper-placement] {
        position: absolute;
        z-index: 2;
        bottom: 0;
        left: 0;
        right: 0;
        inset-inline-start: 0;
        inset-inline-end: 0;
        box-sizing: border-box;
        background: linear-gradient(
          0deg,


@@ 737,7 737,7 @@ body > [data-popper-placement] {

    .character-counter__wrapper {
      align-self: center;
      margin-right: 4px;
      margin-inline-end: 4px;
    }
  }



@@ 826,7 826,7 @@ body > [data-popper-placement] {
}

.reply-indicator__cancel {
  float: right;
  float: inline-end;
  line-height: 24px;
}



@@ 836,13 836,13 @@ body > [data-popper-placement] {
  max-width: 100%;
  line-height: 24px;
  overflow: hidden;
  padding-right: 25px;
  padding-inline-end: 25px;
  text-decoration: none;
}

.reply-indicator__display-avatar {
  float: left;
  margin-right: 5px;
  float: inline-start;
  margin-inline-end: 5px;
}

.status__content--with-action {


@@ 1159,7 1159,7 @@ body > [data-popper-placement] {

.notification__relative_time {
  color: $dark-text-color;
  float: right;
  float: inline-end;
  font-size: 14px;
  padding-bottom: 1px;
}


@@ 1244,7 1244,7 @@ body > [data-popper-placement] {
.status__prepend {
  padding: 16px;
  padding-bottom: 0;
  display: flex;
  display: inline-flex;
  gap: 10px;
  font-size: 15px;
  line-height: 22px;


@@ 1262,6 1262,18 @@ body > [data-popper-placement] {
  }
}

.status__wrapper-direct {
  background: mix($ui-base-color, $ui-highlight-color, 95%);

  &:focus {
    background: mix(lighten($ui-base-color, 4%), $ui-highlight-color, 95%);
  }

  .status__prepend {
    color: $highlight-text-color;
  }
}

.status__action-bar {
  display: flex;
  justify-content: space-between;


@@ 1315,6 1327,11 @@ body > [data-popper-placement] {
  .audio-player {
    margin-top: 16px;
  }

  .status__prepend {
    padding: 0;
    margin-bottom: 16px;
  }
}

.detailed-status__meta {


@@ 1333,6 1350,32 @@ body > [data-popper-placement] {
  padding: 10px 0;
}

.detailed-status__wrapper-direct {
  .detailed-status,
  .detailed-status__action-bar {
    background: mix($ui-base-color, $ui-highlight-color, 95%);
  }

  &:focus {
    .detailed-status,
    .detailed-status__action-bar {
      background: mix(lighten($ui-base-color, 4%), $ui-highlight-color, 95%);
    }
  }

  .detailed-status__action-bar {
    border-top-color: mix(
      lighten($ui-base-color, 8%),
      $ui-highlight-color,
      95%
    );
  }

  .status__prepend {
    color: $highlight-text-color;
  }
}

.detailed-status__link {
  color: inherit;
  text-decoration: none;


@@ 1344,7 1387,7 @@ body > [data-popper-placement] {
  font-weight: 500;
  font-size: 12px;
  line-height: 17px;
  margin-left: 6px;
  margin-inline-start: 6px;
}

.reply-indicator__content {


@@ 1389,7 1432,7 @@ body > [data-popper-placement] {
    border-bottom: 0;

    .account__avatar-wrapper {
      margin-left: 0;
      margin-inline-start: 0;
    }
  }



@@ 1403,10 1446,12 @@ body > [data-popper-placement] {
    text-decoration: none;
    font-size: 14px;

    &--with-note {
      strong {
        display: inline;
      }
    .display-name {
      margin-bottom: 4px;
    }

    .display-name strong {
      display: inline;
    }
  }



@@ 1450,7 1495,7 @@ body > [data-popper-placement] {
  &-inline {
    display: inline-block;
    vertical-align: middle;
    margin-right: 5px;
    margin-inline-end: 5px;
  }

  &-composite {


@@ 1459,7 1504,7 @@ body > [data-popper-placement] {
    position: relative;

    & > div {
      float: left;
      float: inline-start;
      position: relative;
      box-sizing: border-box;
    }


@@ 1473,7 1518,7 @@ body > [data-popper-placement] {
      display: block;
      position: absolute;
      top: 50%;
      left: 50%;
      inset-inline-start: 50%;
      transform: translate(-50%, -50%);
      color: $primary-text-color;
      text-shadow: 1px 1px 2px $base-shadow-color;


@@ 1493,7 1538,7 @@ a .account__avatar {
  &-overlay {
    position: absolute;
    bottom: 0;
    right: 0;
    inset-inline-end: 0;
    z-index: 1;
  }
}


@@ 1550,15 1595,15 @@ a .account__avatar {

  .dropdown--active {
    .dropdown__content.dropdown__right {
      left: 6px;
      right: initial;
      inset-inline-start: 6px;
      inset-inline-end: initial;
    }

    &::after {
      bottom: initial;
      margin-left: 11px;
      margin-inline-start: 11px;
      margin-top: -7px;
      right: initial;
      inset-inline-end: initial;
    }
  }
}


@@ 1574,7 1619,7 @@ a .account__avatar {
  text-decoration: none;
  overflow: hidden;
  flex: 0 1 100%;
  border-right: 1px solid lighten($ui-base-color, 8%);
  border-inset-inline-end: 1px solid lighten($ui-base-color, 8%);
  padding: 10px 0;
  border-bottom: 4px solid transparent;



@@ 1614,8 1659,8 @@ a .account__avatar {
}

.account-authorize__avatar {
  float: left;
  margin-right: 10px;
  float: inline-start;
  margin-inline-end: 10px;
}

.status__display-name,


@@ 1629,7 1674,7 @@ a .account__avatar {

.status__display-name,
.account__display-name {
  strong {
  .display-name strong {
    color: $primary-text-color;
  }
}


@@ 1644,12 1689,12 @@ a .account__avatar {
.reply-indicator__display-name,
.detailed-status__display-name,
a.account__display-name {
  &:hover strong {
  &:hover .display-name strong {
    text-decoration: underline;
  }
}

.account__display-name strong {
.account__display-name .display-name strong {
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;


@@ 2087,7 2132,7 @@ a.account__display-name {
  }

  &.right {
    left: -9px;
    inset-inline-start: -9px;

    &::before {
      transform: rotate(-90deg);


@@ 2099,7 2144,7 @@ a.account__display-name {
  }

  &.left {
    right: -9px;
    inset-inline-end: -9px;

    &::before {
      transform: rotate(90deg);


@@ 2169,7 2214,7 @@ a.account__display-name {
  vertical-align: top;

  .account__avatar {
    margin-right: 5px;
    margin-inline-end: 5px;
    border-radius: 50%;
  }



@@ 2182,8 2227,8 @@ a.account__display-name {
  display: block;
  line-height: 18px;
  max-width: 311px;
  right: 0;
  text-align: left;
  inset-inline-end: 0;
  text-align: start;
  z-index: 9999;

  & > ul {


@@ 2197,12 2242,12 @@ a.account__display-name {
  }

  &.dropdown__right {
    right: 0;
    inset-inline-end: 0;
  }

  &.dropdown__left {
    & > ul {
      left: -98px;
      inset-inline-start: -98px;
    }
  }



@@ 2421,23 2466,23 @@ $ui-header-height: 55px;
  .drawer {
    flex: 0 0 auto;
    padding: 10px;
    padding-left: 5px;
    padding-right: 5px;
    padding-inline-start: 5px;
    padding-inline-end: 5px;

    &:first-child {
      padding-left: 10px;
      padding-inline-start: 10px;
    }

    &:last-child {
      padding-right: 10px;
      padding-inline-end: 10px;
    }
  }

  .columns-area > div {
    .column,
    .drawer {
      padding-left: 5px;
      padding-right: 5px;
      padding-inline-start: 5px;
      padding-inline-end: 5px;
    }
  }
}


@@ 2484,7 2529,7 @@ $ui-header-height: 55px;
  }

  span {
    margin-left: 5px;
    margin-inline-start: 5px;
    display: none;
  }
}


@@ 2526,7 2571,7 @@ $ui-header-height: 55px;
    line-height: 18px;
    font-size: 16px;
    padding: 15px;
    padding-right: 30px;
    padding-inline-end: 30px;
  }

  .search__icon .fa {


@@ 2594,7 2639,7 @@ $ui-header-height: 55px;
    .navigation-panel {
      margin: 0;
      background: $ui-base-color;
      border-left: 1px solid lighten($ui-base-color, 8%);
      border-inset-inline-start: 1px solid lighten($ui-base-color, 8%);
      height: 100vh;
    }



@@ 2666,7 2711,7 @@ $ui-header-height: 55px;

  &__badge {
    position: absolute;
    left: 9px;
    inset-inline-start: 9px;
    top: -13px;
    background: $ui-highlight-color;
    border: 2px solid lighten($ui-base-color, 8%);


@@ 2680,7 2725,7 @@ $ui-header-height: 55px;

  &__issue-badge {
    position: absolute;
    left: 11px;
    inset-inline-start: 11px;
    bottom: 1px;
    display: block;
    background: $error-red;


@@ 2736,7 2781,7 @@ $ui-header-height: 55px;

  &__background {
    position: absolute;
    left: 0;
    inset-inline-start: 0;
    bottom: 0;
    height: 220px;
    width: auto;


@@ 2862,7 2907,7 @@ $ui-header-height: 55px;
.drawer__inner {
  position: absolute;
  top: 0;
  left: 0;
  inset-inline-start: 0;
  background: lighten($ui-base-color, 13%);
  box-sizing: border-box;
  padding: 0;


@@ 2905,7 2950,7 @@ $ui-header-height: 55px;
.pseudo-drawer {
  background: lighten($ui-base-color, 13%);
  font-size: 13px;
  text-align: left;
  text-align: start;
}

.drawer__header {


@@ 3008,7 3053,7 @@ $ui-header-height: 55px;

.column-back-button__icon {
  display: inline-block;
  margin-right: 5px;
  margin-inline-end: 5px;
}

.column-back-button--slim {


@@ 3021,7 3066,7 @@ $ui-header-height: 55px;
  font-size: 16px;
  padding: 15px;
  position: absolute;
  right: 0;
  inset-inline-end: 0;
  top: -48px;
}



@@ 3086,7 3131,7 @@ $ui-header-height: 55px;
  margin-top: auto;
  margin-bottom: auto;
  line-height: 0;
  left: 8px;
  inset-inline-start: 8px;
  opacity: 0;
  transition: opacity 0.25s ease;
}


@@ 3105,7 3150,7 @@ $ui-header-height: 55px;
  margin-top: auto;
  margin-bottom: auto;
  line-height: 0;
  right: 10px;
  inset-inline-end: 10px;
  opacity: 1;
  transition: opacity 0.25s ease;
}


@@ 3117,7 3162,7 @@ $ui-header-height: 55px;
.react-toggle-thumb {
  position: absolute;
  top: 1px;
  left: 1px;
  inset-inline-start: 1px;
  width: 22px;
  height: 22px;
  border: 1px solid $ui-base-color;


@@ 3129,7 3174,7 @@ $ui-header-height: 55px;
}

.react-toggle--checked .react-toggle-thumb {
  left: 27px;
  inset-inline-start: 27px;
  border-color: $ui-highlight-color;
}



@@ 3183,7 3228,7 @@ $ui-header-height: 55px;

.column-link__icon {
  display: inline-block;
  margin-right: 5px;
  margin-inline-end: 5px;
}

.column-link__badge {


@@ 3277,7 3322,7 @@ $ui-header-height: 55px;

  thead {
    position: absolute;
    left: -9999px;
    inset-inline-start: -9999px;
  }

  td {


@@ 3381,9 3426,9 @@ button.icon-button.active i.fa-retweet {

  &__actions {
    bottom: 0;
    left: 0;
    inset-inline-start: 0;
    position: absolute;
    right: 0;
    inset-inline-end: 0;
    top: 0;
    display: flex;
    justify-content: center;


@@ 3489,7 3534,7 @@ a.status-card {
    position: absolute;
    transform-origin: 50% 50%;
    top: 50%;
    left: 50%;
    inset-inline-start: 50%;
    transform: translate(-50%, -50%);
  }
}


@@ 3556,7 3601,7 @@ a.status-card.compact:hover {
  object-fit: fill;
  position: absolute;
  top: 0;
  left: 0;
  inset-inline-start: 0;
  z-index: 0;
  background: $base-overlay-background;



@@ 3671,8 3716,8 @@ a.status-card.compact:hover {
      content: '';
      position: absolute;
      bottom: -13px;
      left: 0;
      right: 0;
      inset-inline-start: 0;
      inset-inline-end: 0;
      margin: 0 auto;
      width: 60%;
      pointer-events: none;


@@ 3707,11 3752,12 @@ a.status-card.compact:hover {
  & > button {
    margin: 0;
    border: 0;
    padding: 15px 0 15px 15px;
    padding: 15px;
    padding-inline-end: 0;
    color: inherit;
    background: transparent;
    font: inherit;
    text-align: left;
    text-align: start;
    text-overflow: ellipsis;
    overflow: hidden;
    white-space: nowrap;


@@ 3745,7 3791,7 @@ a.status-card.compact:hover {
}

.column-header__links .text-btn {
  margin-right: 10px;
  margin-inline-end: 10px;
}

.column-header__button {


@@ 3828,18 3874,18 @@ a.status-card.compact:hover {
}

.column-header__setting-arrows {
  float: right;
  float: inline-end;

  .column-header__setting-btn {
    padding: 5px;

    &:first-child {
      padding-right: 7px;
      padding-inline-end: 7px;
    }

    &:last-child {
      padding-left: 7px;
      margin-left: 5px;
      padding-inline-start: 7px;
      margin-inline-start: 5px;
    }
  }
}


@@ 3866,7 3912,7 @@ a.status-card.compact:hover {

.column-header__icon {
  display: inline-block;
  margin-right: 5px;
  margin-inline-end: 5px;
}

.loading-indicator {


@@ 3877,7 3923,7 @@ a.status-card.compact:hover {
  overflow: visible;
  position: absolute;
  top: 50%;
  left: 50%;
  inset-inline-start: 50%;
  transform: translate(-50%, -50%);
  display: flex;
  align-items: center;


@@ 4013,7 4059,7 @@ a.status-card.compact:hover {

.spoiler-button {
  top: 0;
  left: 0;
  inset-inline-start: 0;
  width: 100%;
  height: 100%;
  position: absolute;


@@ 4021,7 4067,7 @@ a.status-card.compact:hover {

  &--minified {
    display: block;
    left: 4px;
    inset-inline-start: 4px;
    top: 4px;
    width: auto;
    height: auto;


@@ 4138,12 4184,12 @@ a.status-card.compact:hover {

    &__placeholder {
      color: $dark-text-color;
      padding-left: 2px;
      padding-inline-start: 2px;
      font-size: 12px;
    }

    &__value-container {
      padding-left: 6px;
      padding-inline-start: 6px;
    }

    &__multi-value {


@@ 4240,7 4286,7 @@ a.status-card.compact:hover {
  color: $darker-text-color;
  display: inline-block;
  margin-bottom: 14px;
  margin-left: 8px;
  margin-inline-start: 8px;
  vertical-align: middle;
}



@@ 4425,7 4471,7 @@ a.status-card.compact:hover {
.emoji-picker-dropdown__modifiers {
  position: absolute;
  top: 60px;
  right: 11px;
  inset-inline-end: 11px;
  cursor: pointer;
}



@@ 4433,7 4479,7 @@ a.status-card.compact:hover {
  position: absolute;
  z-index: 4;
  top: -4px;
  left: -8px;
  inset-inline-start: -8px;
  background: $simple-background-color;
  border-radius: 4px;
  box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2);


@@ 4470,7 4516,7 @@ a.status-card.compact:hover {
  display: flex;
  height: 100vh;
  justify-content: center;
  left: 0;
  inset-inline-start: 0;
  opacity: 0;
  position: fixed;
  top: 0;


@@ 4495,9 4541,9 @@ a.status-card.compact:hover {
.upload-area__background {
  position: absolute;
  top: 0;
  right: 0;
  inset-inline-end: 0;
  bottom: 0;
  left: 0;
  inset-inline-start: 0;
  z-index: -1;
  border-radius: 4px;
  background: $ui-base-color;


@@ 4525,7 4571,7 @@ a.status-card.compact:hover {

  .fa {
    font-size: 34px;
    margin-right: 10px;
    margin-inline-end: 10px;
  }

  span {


@@ 4551,7 4597,7 @@ a.status-card.compact:hover {

.upload-progress__tracker {
  position: absolute;
  left: 0;
  inset-inline-start: 0;
  top: 0;
  height: 6px;
  background: $ui-highlight-color;


@@ 4560,7 4606,10 @@ a.status-card.compact:hover {

.emoji-button {
  display: block;
  padding: 5px 5px 2px 2px;
  padding-top: 5px;
  padding-bottom: 2px;
  padding-inline-start: 2px;
  padding-inline-end: 5px;
  outline: 0;
  cursor: pointer;



@@ 4648,7 4697,7 @@ a.status-card.compact:hover {
  display: flex;
  align-items: center;
  justify-content: center;
  margin-right: 10px;
  margin-inline-end: 10px;
}

.privacy-dropdown__option__content {


@@ 4714,11 4763,11 @@ a.status-card.compact:hover {
    }

    .emoji-mart-search {
      padding-right: 10px;
      padding-inline-end: 10px;
    }

    .emoji-mart-search-icon {
      right: 10px + 5px;
      inset-inline-end: 10px + 5px;
    }

    .emoji-mart-scroll {


@@ 4771,7 4820,7 @@ a.status-card.compact:hover {

  display: block;
  padding: 15px;
  padding-right: 30px;
  padding-inline-end: 30px;
  line-height: 18px;
  font-size: 16px;



@@ 4807,7 4856,7 @@ a.status-card.compact:hover {
  .fa {
    position: absolute;
    top: 16px;
    right: 10px;
    inset-inline-end: 10px;
    z-index: 2;
    display: inline-block;
    opacity: 0;


@@ 4861,7 4910,7 @@ a.status-card.compact:hover {

  .fa {
    display: inline-block;
    margin-right: 5px;
    margin-inline-end: 5px;
  }
}



@@ 4880,7 4929,7 @@ a.status-card.compact:hover {

    .fa {
      display: inline-block;
      margin-right: 5px;
      margin-inline-end: 5px;
    }
  }



@@ 4918,8 4967,8 @@ a.status-card.compact:hover {
.modal-root__overlay {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  inset-inline-start: 0;
  inset-inline-end: 0;
  bottom: 0;
  background: rgba($base-overlay-background, 0.7);
  transition: background 0.5s;


@@ 4928,7 4977,7 @@ a.status-card.compact:hover {
.modal-root__container {
  position: fixed;
  top: 0;
  left: 0;
  inset-inline-start: 0;
  width: 100%;
  height: 100%;
  box-sizing: border-box;


@@ 4981,16 5030,16 @@ a.status-card.compact:hover {
.media-modal__closer {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  inset-inline-start: 0;
  inset-inline-end: 0;
  bottom: 0;
}

.media-modal__navigation {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  inset-inline-start: 0;
  inset-inline-end: 0;
  bottom: 0;
  pointer-events: none;
  transition: opacity 0.3s linear;


@@ 5033,18 5082,18 @@ a.status-card.compact:hover {
}

.media-modal__nav--left {
  left: 0;
  inset-inline-start: 0;
}

.media-modal__nav--right {
  right: 0;
  inset-inline-end: 0;
}

.media-modal__overlay {
  max-width: 600px;
  position: absolute;
  left: 0;
  right: 0;
  inset-inline-start: 0;
  inset-inline-end: 0;
  bottom: 0;
  margin: 0 auto;



@@ 5131,14 5180,14 @@ a.status-card.compact:hover {

.media-modal__close {
  position: absolute;
  right: 8px;
  inset-inline-end: 8px;
  top: 8px;
  z-index: 100;
}

.media-modal__zoom-button {
  position: absolute;
  right: 64px;
  inset-inline-end: 64px;
  top: 8px;
  z-index: 100;
  pointer-events: auto;


@@ 5172,7 5221,7 @@ a.status-card.compact:hover {
  & > div {
    position: absolute;
    top: 0;
    left: 0;
    inset-inline-start: 0;
    width: 100%;
    height: 100%;
    box-sizing: border-box;


@@ 5268,7 5317,7 @@ a.status-card.compact:hover {
  display: inline-block;
  max-width: 30px;
  max-height: auto;
  margin-left: 10px;
  margin-inline-start: 10px;
}

.boost-modal,


@@ 5323,9 5372,9 @@ a.status-card.compact:hover {

  & > div {
    flex: 1 1 auto;
    text-align: right;
    text-align: end;
    color: $lighter-text-color;
    padding-right: 10px;
    padding-inline-end: 10px;
  }

  .button {


@@ 5528,7 5577,7 @@ a.status-card.compact:hover {
    & > span {
      font-size: 17px;
      font-weight: 500;
      margin-left: 10px;
      margin-inline-start: 10px;
    }
  }



@@ 5552,11 5601,11 @@ a.status-card.compact:hover {
  }

  .emoji-mart-search {
    padding-right: 10px;
    padding-inline-end: 10px;
  }

  .emoji-mart-search-icon {
    right: 10px + 5px;
    inset-inline-end: 10px + 5px;
  }
}



@@ 5619,7 5668,7 @@ a.status-card.compact:hover {

.report-modal__comment {
  padding: 20px;
  border-right: 1px solid $ui-secondary-color;
  border-inset-inline-end: 1px solid $ui-secondary-color;
  max-width: 320px;

  p {


@@ 5717,7 5766,7 @@ a.status-card.compact:hover {
        }

        button:first-child {
          margin-right: 10px;
          margin-inline-end: 10px;
        }
      }
    }


@@ 5781,7 5830,7 @@ a.status-card.compact:hover {
    border: 1px solid darken($simple-background-color, 14%);
    border-radius: 4px;
    padding: 6px 10px;
    padding-right: 30px;
    padding-inline-end: 30px;
  }
}



@@ 5805,7 5854,7 @@ a.status-card.compact:hover {
    &__label {
      color: $inverted-text-color;
      margin: 0;
      margin-left: 8px;
      margin-inline-start: 8px;
    }
  }
}


@@ 5816,7 5865,7 @@ a.status-card.compact:hover {
  .report-modal__close {
    position: absolute;
    top: 10px;
    right: 10px;
    inset-inline-end: 10px;
  }
}



@@ 5867,7 5916,7 @@ a.status-card.compact:hover {
  height: 3px;
  position: fixed;
  top: 0;
  left: 0;
  inset-inline-start: 0;
  z-index: 9999;
}



@@ 5877,7 5926,7 @@ a.status-card.compact:hover {
  color: $primary-text-color;
  background: rgba($base-overlay-background, 0.5);
  bottom: 6px;
  left: 6px;
  inset-inline-start: 6px;
  padding: 2px 6px;
  border-radius: 2px;
  font-size: 11px;


@@ 5910,7 5959,7 @@ a.status-card.compact:hover {
    color: $dark-text-color;
    padding: 8px 18px;
    cursor: default;
    border-right: 1px solid lighten($ui-base-color, 8%);
    border-inset-inline-end: 1px solid lighten($ui-base-color, 8%);
    display: flex;
    flex-direction: column;
    align-items: center;


@@ 5925,7 5974,7 @@ a.status-card.compact:hover {
  &__list {
    list-style: none;
    padding: 4px 0;
    padding-left: 8px;
    padding-inline-start: 8px;
    display: flex;
    flex-direction: column;
    justify-content: center;


@@ 5975,7 6024,7 @@ a.status-card.compact:hover {
  border: 0;
  box-sizing: border-box;
  display: block;
  float: left;
  float: inline-start;
  position: relative;
  border-radius: 4px;
  overflow: hidden;


@@ 6013,7 6062,7 @@ a.status-card.compact:hover {
  object-fit: cover;
  position: absolute;
  top: 0;
  left: 0;
  inset-inline-start: 0;
  z-index: 0;
  background: $base-overlay-background;



@@ 6181,8 6230,8 @@ a.status-card.compact:hover {
    position: absolute;
    z-index: 2;
    bottom: 0;
    left: 0;
    right: 0;
    inset-inline-start: 0;
    inset-inline-end: 0;
    box-sizing: border-box;
    background: linear-gradient(
      0deg,


@@ 6210,7 6259,7 @@ a.status-card.compact:hover {
    display: none;
    position: absolute;
    top: 0;
    left: 0;
    inset-inline-start: 0;
    width: 100%;
    height: 100%;
    z-index: 4;


@@ 6326,7 6375,7 @@ a.status-card.compact:hover {
    &.active {
      overflow: visible;
      width: 50px;
      margin-right: 16px;
      margin-inline-end: 16px;
    }

    &::before {


@@ 6337,7 6386,7 @@ a.status-card.compact:hover {
      display: block;
      position: absolute;
      height: 4px;
      left: 0;
      inset-inline-start: 0;
      top: 50%;
      transform: translate(0, -50%);
    }


@@ 6347,7 6396,7 @@ a.status-card.compact:hover {
      position: absolute;
      height: 4px;
      border-radius: 4px;
      left: 0;
      inset-inline-start: 0;
      top: 50%;
      transform: translate(0, -50%);
      background: lighten($ui-highlight-color, 8%);


@@ 6360,8 6409,8 @@ a.status-card.compact:hover {
      width: 12px;
      height: 12px;
      top: 50%;
      left: 0;
      margin-left: -6px;
      inset-inline-start: 0;
      margin-inline-start: -6px;
      transform: translate(0, -50%);
      background: lighten($ui-highlight-color, 8%);
      box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2);


@@ 6432,7 6481,7 @@ a.status-card.compact:hover {
      width: 12px;
      height: 12px;
      top: 10px;
      margin-left: -6px;
      margin-inline-start: -6px;
      background: lighten($ui-highlight-color, 8%);
      box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2);



@@ 6508,7 6557,7 @@ a.status-card.compact:hover {
  &__icons {
    position: absolute;
    top: 50%;
    left: 50%;
    inset-inline-start: 50%;
    transform: translate(-50%, -50%);
    font-size: 24px;
  }


@@ 6551,7 6600,7 @@ a.status-card.compact:hover {
        content: '';
        position: absolute;
        bottom: 0;
        left: 50%;
        inset-inline-start: 50%;
        width: 0;
        height: 0;
        transform: translateX(-50%);


@@ 6627,7 6676,7 @@ a.status-card.compact:hover {
    width: 18px;
    height: 18px;
    flex: 0 0 auto;
    margin-right: 10px;
    margin-inline-end: 10px;
    top: -1px;
    border-radius: 50%;
    vertical-align: middle;


@@ 6704,10 6753,10 @@ noscript {

  .navigation-bar {
    & > a:first-child {
      will-change: margin-top, margin-left, margin-right, width;
      will-change: margin-top, margin-inline-start, margin-inline-end, width;
      transition: margin-top $duration $delay,
        margin-left $duration ($duration + $delay),
        margin-right $duration ($duration + $delay);
        margin-inline-start $duration ($duration + $delay),
        margin-inline-end $duration ($duration + $delay);
    }

    & > .navigation-bar__profile-edit {


@@ 6889,7 6938,7 @@ noscript {
  cursor: pointer;
  position: absolute;
  top: 0;
  left: 0;
  inset-inline-start: 0;
  width: 100%;
  height: 100%;
  background: rgba($base-overlay-background, 0.5);


@@ 7027,13 7076,13 @@ noscript {
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    inset-inline-start: 0;
  }

  &__preview {
    position: absolute;
    bottom: 10px;
    right: 10px;
    inset-inline-end: 10px;
    z-index: 2;
    cursor: move;
    transition: opacity 0.1s ease;


@@ 7110,7 7159,7 @@ noscript {
  &__info {
    position: absolute;
    top: 10px;
    left: 10px;
    inset-inline-start: 10px;
  }

  &__image {


@@ 7153,7 7202,7 @@ noscript {
    padding-top: 10px;
    gap: 8px;
    overflow: hidden;
    margin-left: -2px; // aligns the pfp with content below
    margin-inline-start: -2px; // aligns the pfp with content below

    &__buttons {
      display: flex;


@@ 7356,6 7405,19 @@ noscript {
  }
}

.verified-badge {
  display: inline-flex;
  align-items: center;
  color: $valid-value-color;
  gap: 4px;

  a {
    color: inherit;
    font-weight: 500;
    text-decoration: none;
  }
}

.trends {
  &__header {
    color: $dark-text-color;


@@ 7368,7 7430,7 @@ noscript {

    .fa {
      display: inline-block;
      margin-right: 5px;
      margin-inline-end: 5px;
    }
  }



@@ 7418,7 7480,7 @@ noscript {
      flex: 0 0 auto;
      font-size: 24px;
      font-weight: 500;
      text-align: right;
      text-align: end;
      color: $secondary-text-color;
      text-decoration: none;
    }


@@ 7523,7 7585,7 @@ noscript {
  &__content {
    flex: 1 1 auto;
    padding: 10px 5px;
    padding-right: 15px;
    padding-inline-end: 15px;
    overflow: hidden;

    &__info {


@@ 7536,7 7598,7 @@ noscript {
    &__relative-time {
      font-size: 15px;
      color: $darker-text-color;
      padding-left: 15px;
      padding-inline-start: 15px;
    }

    &__names {


@@ 7626,13 7688,13 @@ noscript {
      display: block;
      font-weight: 500;
      margin-bottom: 10px;
      padding-right: 18px;
      padding-inline-end: 18px;
    }

    &__unread {
      position: absolute;
      top: 19px;
      right: 19px;
      inset-inline-end: 19px;
      display: block;
      background: $highlight-text-color;
      border-radius: 50%;


@@ 7646,7 7708,7 @@ noscript {
    color: $darker-text-color;
    position: absolute;
    bottom: 3px;
    right: 0;
    inset-inline-end: 0;
  }
}



@@ 7663,7 7725,7 @@ noscript {
  flex-wrap: wrap;
  align-items: center;
  margin-top: 15px;
  margin-left: -2px;
  margin-inline-start: -2px;
  width: calc(100% - (90px - 33px));

  &__item {


@@ 7704,7 7766,7 @@ noscript {
      font-size: 13px;
      font-weight: 500;
      text-align: center;
      margin-left: 6px;
      margin-inline-start: 6px;
      color: $darker-text-color;
    }



@@ 7783,10 7845,10 @@ noscript {
      content: '';
      position: absolute;
      top: 0;
      left: 0;
      inset-inline-start: 0;
      width: 100%;
      height: 100%;
      border-left: 4px solid $highlight-text-color;
      border-inset-inline-start: 4px solid $highlight-text-color;
      pointer-events: none;
    }
  }


@@ 7795,7 7857,7 @@ noscript {
.picture-in-picture {
  position: fixed;
  bottom: 20px;
  right: 20px;
  inset-inline-end: 20px;
  width: 300px;

  &__footer {


@@ 7821,7 7883,7 @@ noscript {
    }

    .account__avatar {
      margin-right: 10px;
      margin-inline-end: 10px;
    }

    .display-name {


@@ 7887,7 7949,7 @@ noscript {
  &__close {
    position: absolute;
    top: 10px;
    right: 10px;
    inset-inline-end: 10px;
  }

  h2 {


@@ 7922,7 7984,7 @@ noscript {

  .search .fa {
    top: 10px;
    right: 10px;
    inset-inline-end: 10px;
    color: $dark-text-color;
  }



@@ 8006,7 8068,7 @@ noscript {
      object-fit: fill;
      position: absolute;
      top: 0;
      left: 0;
      inset-inline-start: 0;
      z-index: 0;

      &--hidden {


@@ 8092,7 8154,7 @@ noscript {
  }

  .account__avatar-wrapper {
    margin-left: 0;
    margin-inline-start: 0;
  }

  .spacer {


@@ 8312,7 8374,7 @@ noscript {
    &::before {
      content: counter(list-counter) '.';
      position: absolute;
      left: 0;
      inset-inline-start: 0;
    }
  }



@@ 8324,13 8386,13 @@ noscript {
    width: 0.375em;
    height: 0.375em;
    top: 0.5em;
    left: 0.25em;
    inset-inline-start: 0.25em;
  }

  ul > li,
  ol > li {
    position: relative;
    padding-left: 1.75em;
    padding-inline-start: 1.75em;
  }

  & > ul > li p {


@@ 8463,7 8525,7 @@ noscript {
  &__preview {
    position: absolute;
    top: 0;
    left: 0;
    inset-inline-start: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;


@@ 8669,7 8731,7 @@ noscript {
  }

  .account__avatar-wrapper {
    margin-left: 0;
    margin-inline-start: 0;
  }

  .account__relationship {

M app/javascript/styles/mastodon/containers.scss => app/javascript/styles/mastodon/containers.scss +3 -3
@@ 18,7 18,7 @@

    .logo {
      height: 42px;
      margin-right: 10px;
      margin-inline-end: 10px;
    }

    a {


@@ 73,7 73,7 @@
  .avatar {
    width: 40px;
    height: 40px;
    margin-right: 10px;
    margin-inline-end: 10px;

    img {
      width: 100%;


@@ 101,6 101,6 @@
    display: block;
    font-size: 32px;
    line-height: 40px;
    margin-left: 10px;
    margin-inline-start: 10px;
  }
}

M app/javascript/styles/mastodon/emoji_picker.scss => app/javascript/styles/mastodon/emoji_picker.scss +5 -5
@@ 71,7 71,7 @@
.emoji-mart-anchor-bar {
  position: absolute;
  bottom: -5px;
  left: 0;
  inset-inline-start: 0;
  width: 100%;
  height: 4px;
  background-color: $highlight-text-color;


@@ 106,7 106,7 @@

.emoji-mart-search {
  padding: 10px;
  padding-right: 45px;
  padding-inline-end: 45px;
  background: $simple-background-color;
  position: relative;



@@ 114,7 114,7 @@
    font-size: 16px;
    font-weight: 400;
    padding: 7px 9px;
    padding-right: 25px;
    padding-inline-end: 25px;
    font-family: inherit;
    display: block;
    width: 100%;


@@ 142,7 142,7 @@
.emoji-mart-search-icon {
  position: absolute;
  top: 18px;
  right: 45px + 5px;
  inset-inline-end: 45px + 5px;
  z-index: 2;
  padding: 2px 5px 1px;
  border: 0;


@@ 177,7 177,7 @@
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    inset-inline-start: 0;
    width: 100%;
    height: 100%;
    background-color: rgba($ui-secondary-color, 0.7);

M app/javascript/styles/mastodon/forms.scss => app/javascript/styles/mastodon/forms.scss +17 -17
@@ 54,12 54,12 @@ code {

      .radio > label {
        position: relative;
        padding-left: 28px;
        padding-inline-start: 28px;

        input {
          position: absolute;
          top: -2px;
          left: 0;
          inset-inline-start: 0;
        }
      }
    }


@@ 79,7 79,7 @@ code {

      .label_input,
      .hint {
        padding-left: 28px;
        padding-inline-start: 28px;
      }

      .label_input__wrapper {


@@ 89,7 89,7 @@ code {
      label.checkbox {
        position: absolute;
        top: 2px;
        left: 0;
        inset-inline-start: 0;
      }

      label a {


@@ 159,7 159,7 @@ code {

    li {
      list-style: disc;
      margin-left: 18px;
      margin-inline-start: 18px;
    }
  }



@@ 225,7 225,7 @@ code {

    &.select .hint {
      margin-top: 6px;
      margin-left: 150px;
      margin-inline-start: 150px;
    }
  }



@@ 380,13 380,13 @@ code {
        width: auto;
        position: relative;
        padding-top: 5px;
        padding-left: 25px;
        padding-inline-start: 25px;
        flex: 1 1 auto;
      }

      input[type='checkbox'] {
        position: absolute;
        left: 0;
        inset-inline-start: 0;
        top: 5px;
        margin: 0;
      }


@@ 517,10 517,10 @@ code {
    font-weight: 500;
    outline: 0;
    margin-bottom: 10px;
    margin-right: 10px;
    margin-inline-end: 10px;

    &:last-child {
      margin-right: 0;
      margin-inline-end: 0;
    }

    &:active,


@@ 572,8 572,8 @@ code {
      no-repeat right 8px center / auto 16px;
    border: 1px solid darken($ui-base-color, 14%);
    border-radius: 4px;
    padding-left: 10px;
    padding-right: 30px;
    padding-inline-start: 10px;
    padding-inline-end: 30px;
    height: 41px;
  }



@@ 588,7 588,7 @@ code {

    &__append {
      position: absolute;
      right: 3px;
      inset-inline-end: 3px;
      top: 1px;
      padding: 10px;
      padding-bottom: 9px;


@@ 606,7 606,7 @@ code {
        display: block;
        position: absolute;
        top: 0;
        right: 0;
        inset-inline-end: 0;
        bottom: 1px;
        width: 5px;
        background-image: linear-gradient(


@@ 780,7 780,7 @@ code {

  li {
    display: inline-block;
    margin-right: 10px;
    margin-inline-end: 10px;
  }

  a {


@@ 939,7 939,7 @@ code {

  .actions {
    padding: 30px 0;
    padding-right: 20px;
    padding-inline-end: 20px;
    flex: 0 0 auto;
  }
}


@@ 992,7 992,7 @@ code {
  border-radius: 4px;
  display: flex;
  align-items: center;
  padding-right: 4px;
  padding-inline-end: 4px;
  position: relative;
  top: 1px;
  transition: border-color 300ms linear;

M app/javascript/styles/mastodon/modal.scss => app/javascript/styles/mastodon/modal.scss +1 -1
@@ 25,7 25,7 @@
      height: 100%;
      position: absolute;
      bottom: 0;
      left: 0;
      inset-inline-start: 0;
    }
  }
}

M app/javascript/styles/mastodon/polls.scss => app/javascript/styles/mastodon/polls.scss +1 -1
@@ 269,7 269,7 @@
    border: 1px solid darken($simple-background-color, 14%);
    border-radius: 4px;
    padding: 6px 10px;
    padding-right: 30px;
    padding-inline-end: 30px;
  }

  .icon-button.disabled {

M app/javascript/styles/mastodon/rich_text.scss => app/javascript/styles/mastodon/rich_text.scss +3 -3
@@ 13,8 13,8 @@
  }

  blockquote {
    padding-left: 10px;
    border-left: 3px solid $darker-text-color;
    padding-inline-start: 10px;
    border-inset-inline-start: 3px solid $darker-text-color;
    color: $darker-text-color;
    white-space: normal;



@@ 40,7 40,7 @@

  ul,
  ol {
    margin-left: 2em;
    margin-inline-start: 2em;

    p {
      margin: 0;

M app/javascript/styles/mastodon/rtl.scss => app/javascript/styles/mastodon/rtl.scss +2 -303
@@ 1,273 1,30 @@
body.rtl {
  direction: rtl;

  .column-header > button {
    text-align: right;
    padding-left: 0;
    padding-right: 15px;
  }

  .radio-button__input {
    margin-right: 0;
    margin-left: 10px;
  }

  .display-name,
  .announcements__item {
    text-align: right;
  }

  .announcements__item__range {
    padding-right: 0;
    padding-left: 18px;
  }

  .reactions-bar {
    margin-left: auto;
    margin-right: -2px;
    direction: rtl;
  }

  .reactions-bar__item__count {
    margin-left: 0;
    margin-right: 6px;
  }

  .announcements__pagination {
    right: auto;
    left: 0;
  }

  .notification__message {
    margin-left: 0;
    margin-right: 68px;
  }

  .announcements__mastodon,
  .drawer__inner__mastodon > img {
    transform: scaleX(-1);
  }

  .notification__favourite-icon-wrapper {
    left: auto;
    right: -26px;
  }

  .column-link__icon,
  .column-header__icon {
    margin-right: 0;
    margin-left: 5px;
  }

  .compose-form .compose-form__buttons-wrapper .character-counter__wrapper {
    margin-right: 0;
    margin-left: 4px;
  }

  .navigation-bar__profile {
    margin-left: 0;
    margin-right: 8px;
  }

  .search__input {
  .compose-form .autosuggest-textarea__textarea {
    padding-right: 10px;
    padding-left: 30px;
  }

  .search__icon .fa {
    right: auto;
    left: 10px;
    padding-left: 10px + 22px;
  }

  .columns-area {
    direction: rtl;
  }

  .column-header__buttons {
    left: 0;
    right: auto;
    margin-left: 0;
    margin-right: -15px;
  }

  .column-inline-form .icon-button {
    margin-left: 0;
    margin-right: 5px;
  }

  .column-header__links .text-btn {
    margin-left: 10px;
    margin-right: 0;
  }

  .account__avatar-wrapper {
    float: right;
  }

  .column-header__back-button {
    padding-left: 5px;
    padding-right: 0;
  }

  .column-header__setting-arrows {
    float: left;

    .column-header__setting-btn {
      &:first-child {
        padding-left: 7px;
        padding-right: 5px;
      }

      &:last-child {
        padding-right: 7px;
        padding-left: 5px;
        margin-right: 5px;
        margin-left: 0;
      }
    }
  }

  .setting-toggle__label {
    margin-left: 0;
    margin-right: 8px;
  }

  .account__header__tabs__buttons > .icon-button {
    margin-right: 0;
    margin-left: 8px;
  }

  .account__avatar-overlay-overlay {
    right: auto;
    left: 0;
  }

  .column-back-button--slim-button {
    right: auto;
    left: 0;
  }

  .status__action-bar {
    &__counter {
      margin-right: 0;
      margin-left: 11px;

      .status__action-bar-button {
        margin-right: 0;
        margin-left: 4px;
      }
    }
  }

  .privacy-dropdown__dropdown {
    margin-left: 0;
    margin-right: 40px;
  }

  .privacy-dropdown__option__icon {
    margin-left: 10px;
    margin-right: 0;
  }

  .picture-in-picture__header__account .display-name,
  .detailed-status__display-name .display-name {
    text-align: right;
  }

  .detailed-status__display-avatar {
    margin-right: 0;
    margin-left: 10px;
  }

  .picture-in-picture__header__account .account__avatar {
    margin-right: 0;
    margin-left: 10px;
  }

  .icon-button__counter {
    margin-left: 0;
    margin-right: 4px;
  }

  .notifications-permission-banner__close {
    right: auto;
    left: 10px;
  }

  .detailed-status__favorites,
  .detailed-status__reblogs {
    margin-left: 0;
    margin-right: 6px;
  }

  .fa-ul {
    margin-left: 2.14285714em;
  }

  .fa-li {
    left: auto;
    right: -2.14285714em;
  }

  .admin-wrapper {
    direction: rtl;
  }

  .admin-wrapper .sidebar ul a i.fa,
  a.table-action-link i.fa {
    margin-right: 0;
    margin-left: 5px;
  }

  .simple_form .check_boxes .checkbox label {
    padding-left: 0;
    padding-right: 25px;
  }

  .simple_form .input.with_label.boolean label.checkbox {
    padding-left: 25px;
    padding-right: 0;
  }

  .simple_form .check_boxes .checkbox input[type='checkbox'],
  .simple_form .input.boolean input[type='checkbox'] {
    left: auto;
    right: 0;
  }

  .simple_form .input.radio_buttons .radio {
    left: auto;
    right: 0;
  }

  .simple_form .input.radio_buttons .radio > label {
    padding-right: 28px;
    padding-left: 0;
  }

  .simple_form .input-with-append .input input {
    padding-left: 142px;
    padding-right: 0;
  }

  .simple_form .input.boolean label.checkbox {
    left: auto;
    right: 0;
  }

  .simple_form .input.boolean .label_input,
  .simple_form .input.boolean .hint {
    padding-left: 0;
    padding-right: 28px;
  }

  .simple_form .label_input__append {
    right: auto;
    left: 3px;

    &::after {
      right: auto;
      left: 0;
      background-image: linear-gradient(
        to left,
        rgba(darken($ui-base-color, 10%), 0),


@@ 282,49 39,6 @@ body.rtl {
      no-repeat left 8px center / auto 16px;
  }

  .table th,
  .table td {
    text-align: right;
  }

  .filters .filter-subset {
    margin-right: 0;
    margin-left: 45px;
  }

  @media screen and (min-width: 631px) {
    .column,
    .drawer {
      padding-left: 5px;
      padding-right: 5px;

      &:first-child {
        padding-left: 5px;
        padding-right: 10px;
      }
    }

    .columns-area > div {
      .column,
      .drawer {
        padding-left: 5px;
        padding-right: 5px;
      }
    }
  }

  .columns-area--mobile .column,
  .columns-area--mobile .drawer {
    padding-left: 0;
    padding-right: 0;
  }

  .card__bar .display-name {
    margin-left: 0;
    margin-right: 15px;
    text-align: right;
  }

  .fa-chevron-left::before {
    content: '\F054';
  }


@@ 332,19 46,4 @@ body.rtl {
  .fa-chevron-right::before {
    content: '\F053';
  }

  .column-back-button__icon {
    margin-right: 0;
    margin-left: 5px;
  }

  .simple_form .input.radio_buttons .radio > label input {
    left: auto;
    right: 0;
  }

  .picture-in-picture {
    right: auto;
    left: 20px;
  }
}

M app/javascript/styles/mastodon/statuses.scss => app/javascript/styles/mastodon/statuses.scss +4 -4
@@ 97,7 97,7 @@
    width: 20px;
    height: auto;
    vertical-align: middle;
    margin-right: 5px;
    margin-inline-end: 5px;
    fill: $primary-text-color;
  }



@@ 162,7 162,7 @@ a.button.logo-button {
    min-height: 48px + 2px;

    &__avatar {
      left: 15px;
      inset-inline-start: 15px;
      top: 17px;

      .account__avatar {


@@ 176,12 176,12 @@ a.button.logo-button {
    }

    &__prepend {
      margin-left: 48px + 15px * 2;
      margin-inline-start: 48px + 15px * 2;
      padding-top: 15px;
    }

    &__prepend-icon-wrapper {
      left: -32px;
      inset-inline-start: -32px;
    }

    .media-gallery,

M app/javascript/styles/mastodon/tables.scss => app/javascript/styles/mastodon/tables.scss +11 -11
@@ 10,7 10,7 @@
    line-height: 18px;
    vertical-align: top;
    border-top: 1px solid $ui-base-color;
    text-align: left;
    text-align: start;
    background: darken($ui-base-color, 4%);
  }



@@ 91,12 91,12 @@

      &:first-child {
        border-radius: 4px 0 0;
        border-left: 1px solid darken($ui-base-color, 8%);
        border-inset-inline-start: 1px solid darken($ui-base-color, 8%);
      }

      &:last-child {
        border-radius: 0 4px 0 0;
        border-right: 1px solid darken($ui-base-color, 8%);
        border-inset-inline-end: 1px solid darken($ui-base-color, 8%);
      }
    }
  }


@@ 125,7 125,7 @@ button.table-action-link,
a.table-action-link {
  text-decoration: none;
  display: inline-block;
  margin-right: 5px;
  margin-inline-end: 5px;
  padding: 0 10px;
  color: $darker-text-color;
  font-weight: 500;


@@ 136,11 136,11 @@ a.table-action-link {

  i.fa {
    font-weight: 400;
    margin-right: 5px;
    margin-inline-end: 5px;
  }

  &:first-child {
    padding-left: 0;
    padding-inline-start: 0;
  }
}



@@ 172,7 172,7 @@ a.table-action-link {
    &__actions,
    &__content {
      padding: 8px 0;
      padding-right: 16px;
      padding-inline-end: 16px;
      flex: 1 1 auto;
    }
  }


@@ 188,8 188,8 @@ a.table-action-link {
    align-items: center;

    &__actions {
      text-align: right;
      padding-right: 16px - 5px;
      text-align: end;
      padding-inline-end: 16px - 5px;
    }
  }



@@ 296,7 296,7 @@ a.table-action-link {
        display: flex;
        justify-content: center;
        align-items: center;
        margin-right: 10px;
        margin-inline-end: 10px;

        .emojione {
          width: 32px;


@@ 315,7 315,7 @@ a.table-action-link {

      &__extra {
        flex: 0 0 auto;
        text-align: right;
        text-align: end;
        color: $darker-text-color;
        font-weight: 500;
      }

M app/javascript/styles/mastodon/widgets.scss => app/javascript/styles/mastodon/widgets.scss +8 -8
@@ 39,8 39,8 @@
      width: 20px;
      height: 20px;
      margin: -3px 0 0;
      margin-left: 0.075em;
      margin-right: 0.075em;
      margin-inline-start: 0.075em;
      margin-inline-end: 0.075em;
    }

    p {


@@ 171,7 171,7 @@
    margin-bottom: 15px;

    .fa {
      margin-right: 5px;
      margin-inline-end: 5px;
      color: $darker-text-color;
    }
  }


@@ 284,7 284,7 @@
    }

    .trends__item__current {
      padding-right: 0;
      padding-inline-end: 0;
    }
  }
}


@@ 309,7 309,7 @@
    padding: 10px;

    &:first-child {
      text-align: left;
      text-align: start;
    }
  }



@@ 340,9 340,9 @@

  tbody td.accounts-table__extra {
    width: 120px;
    text-align: right;
    text-align: end;
    color: $darker-text-color;
    padding-right: 16px;
    padding-inline-end: 16px;

    a {
      text-decoration: none;


@@ 363,7 363,7 @@

  tbody td.accounts-table__interrelationships {
    width: 21px;
    padding-right: 16px;
    padding-inline-end: 16px;
  }

  .fa {

M app/lib/admin/metrics/retention.rb => app/lib/admin/metrics/retention.rb +33 -23
@@ 42,25 42,54 @@ class Admin::Metrics::Retention
  end

  def perform_query
    sql = <<-SQL.squish
    report_rows.each_with_object([]) do |row, arr|
      current_cohort = arr.last

      if current_cohort.nil? || current_cohort.period != row['cohort_period']
        current_cohort = Cohort.new(period: row['cohort_period'], frequency: @frequency, data: [])
        arr << current_cohort
      end

      value, rate = row['retention_value_and_rate'].delete('{}').split(',')

      current_cohort.data << CohortData.new(
        date: row['retention_period'],
        rate: rate.to_f,
        value: value.to_s
      )
    end
  end

  def report_rows
    ActiveRecord::Base.connection.select_all(sanitized_sql_string)
  end

  def sanitized_sql_string
    ActiveRecord::Base.sanitize_sql_array(
      [sql_query_string, { start_at: @start_at, end_at: @end_at, frequency: @frequency }]
    )
  end

  def sql_query_string
    <<~SQL.squish
      SELECT axis.*, (
        WITH new_users AS (
          SELECT users.id
          FROM users
          WHERE date_trunc($3, users.created_at)::date = axis.cohort_period
          WHERE date_trunc(:frequency, users.created_at)::date = axis.cohort_period
        ),
        retained_users AS (
          SELECT users.id
          FROM users
          INNER JOIN new_users on new_users.id = users.id
          WHERE date_trunc($3, users.current_sign_in_at) >= axis.retention_period
          WHERE date_trunc(:frequency, users.current_sign_in_at) >= axis.retention_period
        )
        SELECT ARRAY[count(*), (count(*))::float / (SELECT GREATEST(count(*), 1) FROM new_users)] AS retention_value_and_rate
        FROM retained_users
      )
      FROM (
        WITH cohort_periods AS (
          SELECT generate_series(date_trunc($3, $1::timestamp)::date, date_trunc($3, $2::timestamp)::date, ('1 ' || $3)::interval) AS cohort_period
          SELECT generate_series(date_trunc(:frequency, :start_at::timestamp)::date, date_trunc(:frequency, :end_at::timestamp)::date, ('1 ' || :frequency)::interval) AS cohort_period
        ),
        retention_periods AS (
          SELECT cohort_period AS retention_period FROM cohort_periods


@@ 70,24 99,5 @@ class Admin::Metrics::Retention
        WHERE retention_period >= cohort_period
      ) as axis
    SQL

    rows = ActiveRecord::Base.connection.select_all(sql, nil, [[nil, @start_at], [nil, @end_at], [nil, @frequency]])

    rows.each_with_object([]) do |row, arr|
      current_cohort = arr.last

      if current_cohort.nil? || current_cohort.period != row['cohort_period']
        current_cohort = Cohort.new(period: row['cohort_period'], frequency: @frequency, data: [])
        arr << current_cohort
      end

      value, rate = row['retention_value_and_rate'].delete('{}').split(',')

      current_cohort.data << CohortData.new(
        date: row['retention_period'],
        rate: rate.to_f,
        value: value.to_s
      )
    end
  end
end

D app/lib/user_settings_decorator.rb => app/lib/user_settings_decorator.rb +0 -180
@@ 1,180 0,0 @@
# frozen_string_literal: true

class UserSettingsDecorator
  attr_reader :user, :settings

  def initialize(user)
    @user = user
  end

  def update(settings)
    @settings = settings
    process_update
  end

  private

  def process_update
    user.settings['notification_emails'] = merged_notification_emails if change?('notification_emails')
    user.settings['interactions']        = merged_interactions if change?('interactions')
    user.settings['default_privacy']     = default_privacy_preference if change?('setting_default_privacy')
    user.settings['default_sensitive']   = default_sensitive_preference if change?('setting_default_sensitive')
    user.settings['default_language']    = default_language_preference if change?('setting_default_language')
    user.settings['unfollow_modal']      = unfollow_modal_preference if change?('setting_unfollow_modal')
    user.settings['boost_modal']         = boost_modal_preference if change?('setting_boost_modal')
    user.settings['favourite_modal']     = favourite_modal_preference if change?('setting_favourite_modal')
    user.settings['delete_modal']        = delete_modal_preference if change?('setting_delete_modal')
    user.settings['auto_play_gif']       = auto_play_gif_preference if change?('setting_auto_play_gif')
    user.settings['display_media']       = display_media_preference if change?('setting_display_media')
    user.settings['expand_spoilers']     = expand_spoilers_preference if change?('setting_expand_spoilers')
    user.settings['reduce_motion']       = reduce_motion_preference if change?('setting_reduce_motion')
    user.settings['disable_swiping']     = disable_swiping_preference if change?('setting_disable_swiping')
    user.settings['system_font_ui']      = system_font_ui_preference if change?('setting_system_font_ui')
    user.settings['system_emoji_font']   = system_emoji_font_preference if change?('setting_system_emoji_font')
    user.settings['noindex']             = noindex_preference if change?('setting_noindex')
    user.settings['hide_followers_count'] = hide_followers_count_preference if change?('setting_hide_followers_count')
    user.settings['flavour']             = flavour_preference if change?('setting_flavour')
    user.settings['skin']                = skin_preference if change?('setting_skin')
    user.settings['aggregate_reblogs']   = aggregate_reblogs_preference if change?('setting_aggregate_reblogs')
    user.settings['show_application']    = show_application_preference if change?('setting_show_application')
    user.settings['advanced_layout']     = advanced_layout_preference if change?('setting_advanced_layout')
    user.settings['default_content_type']= default_content_type_preference if change?('setting_default_content_type')
    user.settings['use_blurhash']        = use_blurhash_preference if change?('setting_use_blurhash')
    user.settings['use_pending_items']   = use_pending_items_preference if change?('setting_use_pending_items')
    user.settings['trends']              = trends_preference if change?('setting_trends')
    user.settings['crop_images']         = crop_images_preference if change?('setting_crop_images')
    user.settings['always_send_emails']  = always_send_emails_preference if change?('setting_always_send_emails')
  end

  def merged_notification_emails
    user.settings['notification_emails'].merge coerced_settings('notification_emails').to_h
  end

  def merged_interactions
    user.settings['interactions'].merge coerced_settings('interactions').to_h
  end

  def default_privacy_preference
    settings['setting_default_privacy']
  end

  def default_sensitive_preference
    boolean_cast_setting 'setting_default_sensitive'
  end

  def unfollow_modal_preference
    boolean_cast_setting 'setting_unfollow_modal'
  end

  def boost_modal_preference
    boolean_cast_setting 'setting_boost_modal'
  end

  def favourite_modal_preference
    boolean_cast_setting 'setting_favourite_modal'
  end

  def delete_modal_preference
    boolean_cast_setting 'setting_delete_modal'
  end

  def system_font_ui_preference
    boolean_cast_setting 'setting_system_font_ui'
  end

  def system_emoji_font_preference
    boolean_cast_setting 'setting_system_emoji_font'
  end

  def auto_play_gif_preference
    boolean_cast_setting 'setting_auto_play_gif'
  end

  def display_media_preference
    settings['setting_display_media']
  end

  def expand_spoilers_preference
    boolean_cast_setting 'setting_expand_spoilers'
  end

  def reduce_motion_preference
    boolean_cast_setting 'setting_reduce_motion'
  end

  def disable_swiping_preference
    boolean_cast_setting 'setting_disable_swiping'
  end

  def noindex_preference
    boolean_cast_setting 'setting_noindex'
  end

  def flavour_preference
    settings['setting_flavour']
  end

  def skin_preference
    settings['setting_skin']
  end

  def hide_followers_count_preference
    boolean_cast_setting 'setting_hide_followers_count'
  end

  def show_application_preference
    boolean_cast_setting 'setting_show_application'
  end

  def default_language_preference
    settings['setting_default_language']
  end

  def aggregate_reblogs_preference
    boolean_cast_setting 'setting_aggregate_reblogs'
  end

  def advanced_layout_preference
    boolean_cast_setting 'setting_advanced_layout'
  end

  def default_content_type_preference
    settings['setting_default_content_type']
  end

  def use_blurhash_preference
    boolean_cast_setting 'setting_use_blurhash'
  end

  def use_pending_items_preference
    boolean_cast_setting 'setting_use_pending_items'
  end

  def trends_preference
    boolean_cast_setting 'setting_trends'
  end

  def crop_images_preference
    boolean_cast_setting 'setting_crop_images'
  end

  def always_send_emails_preference
    boolean_cast_setting 'setting_always_send_emails'
  end

  def boolean_cast_setting(key)
    ActiveModel::Type::Boolean.new.cast(settings[key])
  end

  def coerced_settings(key)
    coerce_values settings.fetch(key, {})
  end

  def coerce_values(params_hash)
    params_hash.transform_values { |x| ActiveModel::Type::Boolean.new.cast(x) }
  end

  def change?(key)
    !settings[key].nil?
  end
end

A app/lib/user_settings_serializer.rb => app/lib/user_settings_serializer.rb +19 -0
@@ 0,0 1,19 @@
# frozen_string_literal: true

class UserSettingsSerializer
  def self.load(value)
    json = begin
      if value.blank?
        {}
      else
        Oj.load(value, symbol_keys: true)
      end
    end

    UserSettings.new(json)
  end

  def self.dump(value)
    Oj.dump(value.as_json)
  end
end

M app/models/account.rb => app/models/account.rb +1 -1
@@ 53,7 53,7 @@
#

class Account < ApplicationRecord
  self.ignored_columns = %w(
  self.ignored_columns += %w(
    subscription_expires_at
    secret
    remote_url

M app/models/account_stat.rb => app/models/account_stat.rb +1 -1
@@ 16,7 16,7 @@

class AccountStat < ApplicationRecord
  self.locking_column = nil
  self.ignored_columns = %w(lock_version)
  self.ignored_columns += %w(lock_version)

  belongs_to :account, inverse_of: :account_stat


M app/models/admin/action_log.rb => app/models/admin/action_log.rb +1 -1
@@ 17,7 17,7 @@
#

class Admin::ActionLog < ApplicationRecord
  self.ignored_columns = %w(
  self.ignored_columns += %w(
    recorded_changes
  )


M app/models/backup.rb => app/models/backup.rb +1 -1
@@ 18,6 18,6 @@
class Backup < ApplicationRecord
  belongs_to :user, inverse_of: :backups

  has_attached_file :dump, s3_permissions: 'private'
  has_attached_file :dump, s3_permissions: ->(*) { ENV['S3_PERMISSION'] == '' ? nil : 'private' }
  validates_attachment_content_type :dump, content_type: /\Aapplication/
end

M app/models/concerns/attachmentable.rb => app/models/concerns/attachmentable.rb +1 -1
@@ 5,7 5,7 @@ require 'mime/types/columnar'
module Attachmentable
  extend ActiveSupport::Concern

  MAX_MATRIX_LIMIT = 16_777_216 # 4096x4096px or approx. 16MB
  MAX_MATRIX_LIMIT = 33_177_600 # 7680x4320px or approx. 847MB in RAM
  GIF_MATRIX_LIMIT = 921_600    # 1280x720px

  # For some file extensions, there exist different content

A app/models/concerns/has_user_settings.rb => app/models/concerns/has_user_settings.rb +141 -0
@@ 0,0 1,141 @@
# frozen_string_literal: true

module HasUserSettings
  extend ActiveSupport::Concern

  included do
    serialize :settings, UserSettingsSerializer
  end

  def settings_attributes=(attributes)
    settings.update(attributes)
  end

  def prefers_noindex?
    settings['noindex']
  end

  def preferred_posting_language
    valid_locale_cascade(settings['default_language'], locale, I18n.locale)
  end

  def setting_auto_play_gif
    settings['web.auto_play']
  end

  def setting_default_sensitive
    settings['default_sensitive']
  end

  def setting_unfollow_modal
    settings['web.unfollow_modal']
  end

  def setting_boost_modal
    settings['web.reblog_modal']
  end

  def setting_delete_modal
    settings['web.delete_modal']
  end

  def setting_reduce_motion
    settings['web.reduce_motion']
  end

  def setting_system_font_ui
    settings['web.use_system_font']
  end

  def setting_noindex
    settings['noindex']
  end

  def setting_theme
    settings['theme']
  end

  def setting_display_media
    settings['web.display_media']
  end

  def setting_expand_spoilers
    settings['web.expand_content_warnings']
  end

  def setting_default_language
    settings['default_language']
  end

  def setting_aggregate_reblogs
    settings['aggregate_reblogs']
  end

  def setting_show_application
    settings['show_application']
  end

  def setting_advanced_layout
    settings['web.advanced_layout']
  end

  def setting_use_blurhash
    settings['web.use_blurhash']
  end

  def setting_use_pending_items
    settings['web.use_pending_items']
  end

  def setting_trends
    settings['web.trends']
  end

  def setting_crop_images
    settings['web.crop_images']
  end

  def setting_disable_swiping
    settings['web.disable_swiping']
  end

  def setting_always_send_emails
    settings['always_send_emails']
  end

  def setting_default_privacy
    settings['default_privacy'] || (account.locked? ? 'private' : 'public')
  end

  def allows_report_emails?
    settings['notification_emails.report']
  end

  def allows_pending_account_emails?
    settings['notification_emails.pending_account']
  end

  def allows_appeal_emails?
    settings['notification_emails.appeal']
  end

  def allows_trends_review_emails?
    settings['notification_emails.trends']
  end

  def aggregates_reblogs?
    settings['aggregate_reblogs']
  end

  def shows_application?
    settings['show_application']
  end

  def show_all_media?
    settings['web.display_media'] == 'show_all'
  end

  def hide_all_media?
    settings['web.display_media'] == 'hide_all'
  end
end

M app/models/custom_filter.rb => app/models/custom_filter.rb +1 -1
@@ 15,7 15,7 @@
#

class CustomFilter < ApplicationRecord
  self.ignored_columns = %w(whole_word irreversible)
  self.ignored_columns += %w(whole_word irreversible)

  alias_attribute :title, :phrase
  alias_attribute :filter_action, :action

M app/models/email_domain_block.rb => app/models/email_domain_block.rb +1 -1
@@ 12,7 12,7 @@
#

class EmailDomainBlock < ApplicationRecord
  self.ignored_columns = %w(
  self.ignored_columns += %w(
    ips
    last_refresh_at
  )

M app/models/media_attachment.rb => app/models/media_attachment.rb +5 -5
@@ 39,11 39,11 @@ class MediaAttachment < ApplicationRecord

  MAX_DESCRIPTION_LENGTH = 1_500

  IMAGE_LIMIT = (ENV['MAX_IMAGE_SIZE'] || 10.megabytes).to_i
  VIDEO_LIMIT = (ENV['MAX_VIDEO_SIZE'] || 40.megabytes).to_i
  IMAGE_LIMIT = (ENV['MAX_IMAGE_SIZE'] || 16.megabytes).to_i
  VIDEO_LIMIT = (ENV['MAX_VIDEO_SIZE'] || 99.megabytes).to_i

  MAX_VIDEO_MATRIX_LIMIT = 2_304_000 # 1920x1200px
  MAX_VIDEO_FRAME_RATE   = 60
  MAX_VIDEO_MATRIX_LIMIT = 8_294_400 # 3840x2160px
  MAX_VIDEO_FRAME_RATE   = 120

  IMAGE_FILE_EXTENSIONS = %w(.jpg .jpeg .png .gif .webp .heic .heif .avif).freeze
  VIDEO_FILE_EXTENSIONS = %w(.webm .mp4 .m4v .mov).freeze


@@ 69,7 69,7 @@ class MediaAttachment < ApplicationRecord

  IMAGE_STYLES = {
    original: {
      pixels: 2_073_600, # 1920x1080px
      pixels: 8_294_400, # 3840x2160px
      file_geometry_parser: FastGeometryParser,
    }.freeze,


M app/models/preview_card.rb => app/models/preview_card.rb +2 -2
@@ 36,7 36,7 @@ class PreviewCard < ApplicationRecord
  include Attachmentable

  IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze
  LIMIT = 1.megabytes
  LIMIT = 2.megabytes

  BLURHASH_OPTIONS = {
    x_comp: 4,


@@ 121,7 121,7 @@ class PreviewCard < ApplicationRecord
    def image_styles(file)
      styles = {
        original: {
          geometry: '400x400>',
          pixels: 230_400, # 640x360px
          file_geometry_parser: FastGeometryParser,
          convert_options: '-coalesce',
          blurhash: BLURHASH_OPTIONS,

M app/models/report.rb => app/models/report.rb +1 -1
@@ 21,7 21,7 @@
#

class Report < ApplicationRecord
  self.ignored_columns = %w(action_taken)
  self.ignored_columns += %w(action_taken)

  include Paginable
  include RateLimitable

M app/models/status_edit.rb => app/models/status_edit.rb +1 -1
@@ 21,7 21,7 @@
class StatusEdit < ApplicationRecord
  include RateLimitable

  self.ignored_columns = %w(
  self.ignored_columns += %w(
    media_attachments_changed
  )


M app/models/user.rb => app/models/user.rb +5 -62
@@ 39,10 39,11 @@
#  webauthn_id               :string
#  sign_up_ip                :inet
#  role_id                   :bigint(8)
#  settings                  :text
#

class User < ApplicationRecord
  self.ignored_columns = %w(
  self.ignored_columns += %w(
    remember_created_at
    remember_token
    current_sign_in_ip


@@ 51,9 52,9 @@ class User < ApplicationRecord
    filtered_languages
  )

  include Settings::Extend
  include Redisable
  include LanguagesHelper
  include HasUserSettings

  # The home and list feeds will be stored in Redis for this amount
  # of time, and status fan-out to followers will include only people


@@ 132,13 133,6 @@ class User < ApplicationRecord

  has_many :session_activations, dependent: :destroy

  delegate :auto_play_gif, :default_sensitive, :unfollow_modal, :boost_modal, :favourite_modal, :delete_modal,
           :reduce_motion, :system_font_ui, :noindex, :flavour, :skin, :display_media, :hide_followers_count,
           :expand_spoilers, :default_language, :aggregate_reblogs, :show_application,
           :advanced_layout, :use_blurhash, :use_pending_items, :trends, :crop_images,
           :disable_swiping, :always_send_emails, :default_content_type, :system_emoji_font,
           to: :settings, prefix: :setting, allow_nil: false

  delegate :can?, to: :role

  attr_reader :invite_code


@@ 303,50 297,6 @@ class User < ApplicationRecord
    save!
  end

  def prefers_noindex?
    setting_noindex
  end

  def preferred_posting_language
    valid_locale_cascade(settings.default_language, locale, I18n.locale)
  end

  def setting_default_privacy
    settings.default_privacy || (account.locked? ? 'private' : 'public')
  end

  def allows_report_emails?
    settings.notification_emails['report']
  end

  def allows_pending_account_emails?
    settings.notification_emails['pending_account']
  end

  def allows_appeal_emails?
    settings.notification_emails['appeal']
  end

  def allows_trending_tags_review_emails?
    settings.notification_emails['trending_tag']
  end

  def allows_trending_links_review_emails?
    settings.notification_emails['trending_link']
  end

  def allows_trending_statuses_review_emails?
    settings.notification_emails['trending_status']
  end

  def aggregates_reblogs?
    @aggregates_reblogs ||= settings.aggregate_reblogs
  end

  def shows_application?
    @shows_application ||= settings.show_application
  end

  def token_for_app(app)
    return nil if app.nil? || app.owner != self



@@ 426,14 376,6 @@ class User < ApplicationRecord
    send_reset_password_instructions
  end

  def show_all_media?
    setting_display_media == 'show_all'
  end

  def hide_all_media?
    setting_display_media == 'hide_all'
  end

  protected

  def send_devise_notification(notification, *args, **kwargs)


@@ 503,7 445,8 @@ class User < ApplicationRecord
  def sanitize_languages
    return if chosen_languages.nil?

    chosen_languages.reject!(&:blank?)
    chosen_languages.compact_blank!

    self.chosen_languages = nil if chosen_languages.empty?
  end


A app/models/user_settings.rb => app/models/user_settings.rb +99 -0
@@ 0,0 1,99 @@
# frozen_string_literal: true

class UserSettings
  class Error < StandardError; end
  class KeyError < Error; end

  include UserSettings::DSL
  include UserSettings::Glue

  setting :always_send_emails, default: false
  setting :aggregate_reblogs, default: true
  setting :theme, default: -> { ::Setting.theme }
  setting :noindex, default: -> { ::Setting.noindex }
  setting :show_application, default: true
  setting :default_language, default: nil
  setting :default_sensitive, default: false
  setting :default_privacy, default: nil

  namespace :web do
    setting :crop_images, default: true
    setting :advanced_layout, default: false
    setting :trends, default: true
    setting :use_blurhash, default: true
    setting :use_pending_items, default: false
    setting :use_system_font, default: false
    setting :disable_swiping, default: false
    setting :delete_modal, default: true
    setting :reblog_modal, default: false
    setting :unfollow_modal, default: true
    setting :reduce_motion, default: false
    setting :expand_content_warnings, default: false
    setting :display_media, default: 'default', in: %w(default show_all hide_all)
    setting :auto_play, default: false
  end

  namespace :notification_emails do
    setting :follow, default: true
    setting :reblog, default: false
    setting :favourite, default: false
    setting :mention, default: true
    setting :follow_request, default: true
    setting :report, default: true
    setting :pending_account, default: true
    setting :trends, default: true
    setting :appeal, default: true
  end

  namespace :interactions do
    setting :must_be_follower, default: false
    setting :must_be_following, default: false
    setting :must_be_following_dm, default: false
  end

  def initialize(original_hash)
    @original_hash = original_hash || {}
  end

  def [](key)
    key = key.to_sym

    raise KeyError, "Undefined setting: #{key}" unless self.class.definition_for?(key)

    if @original_hash.key?(key)
      @original_hash[key]
    else
      self.class.definition_for(key).default_value
    end
  end

  def []=(key, value)
    key = key.to_sym

    raise KeyError, "Undefined setting: #{key}" unless self.class.definition_for?(key)

    typecast_value = self.class.definition_for(key).type_cast(value)

    if typecast_value.nil?
      @original_hash.delete(key)
    else
      @original_hash[key] = typecast_value
    end
  end

  def update(params)
    params.each do |k, v|
      self[k] = v unless v.nil?
    end
  end

  keys.each do |key|
    define_method(key) do
      self[key]
    end
  end

  def as_json
    @original_hash
  end
end

A app/models/user_settings/dsl.rb => app/models/user_settings/dsl.rb +37 -0
@@ 0,0 1,37 @@
# frozen_string_literal: true

module UserSettings::DSL
  module ClassMethods
    def setting(key, options = {})
      @definitions ||= {}

      UserSettings::Setting.new(key, options).tap do |s|
        @definitions[s.key] = s
      end
    end

    def namespace(key, &block)
      @definitions ||= {}

      UserSettings::Namespace.new(key).configure(&block).tap do |n|
        @definitions.merge!(n.definitions)
      end
    end

    def keys
      @definitions.keys
    end

    def definition_for(key)
      @definitions[key.to_sym]
    end

    def definition_for?(key)
      @definitions.key?(key.to_sym)
    end
  end

  def self.included(base)
    base.extend ClassMethods
  end
end

A app/models/user_settings/glue.rb => app/models/user_settings/glue.rb +23 -0
@@ 0,0 1,23 @@
# frozen_string_literal: true

module UserSettings::Glue
  def to_model
    self
  end

  def to_key
    ''
  end

  def persisted?
    false
  end

  def type_for_attribute(key)
    self.class.definition_for(key)&.type
  end

  def has_attribute?(key) # rubocop:disable Naming/PredicateName
    self.class.definition_for?(key)
  end
end

A app/models/user_settings/namespace.rb => app/models/user_settings/namespace.rb +21 -0
@@ 0,0 1,21 @@
# frozen_string_literal: true

class UserSettings::Namespace
  attr_reader :name, :definitions

  def initialize(name)
    @name        = name.to_sym
    @definitions = {}
  end

  def configure(&block)
    instance_eval(&block)
    self
  end

  def setting(key, options = {})
    UserSettings::Setting.new(key, options.merge(namespace: name)).tap do |s|
      @definitions[s.key] = s
    end
  end
end

A app/models/user_settings/setting.rb => app/models/user_settings/setting.rb +49 -0
@@ 0,0 1,49 @@
# frozen_string_literal: true

class UserSettings::Setting
  attr_reader :name, :namespace, :in

  def initialize(name, options = {})
    @name          = name.to_sym
    @default_value = options[:default]
    @namespace     = options[:namespace]
    @in            = options[:in]
  end

  def default_value
    if @default_value.respond_to?(:call)
      @default_value.call
    else
      @default_value
    end
  end

  def type
    case default_value
    when TrueClass, FalseClass
      ActiveModel::Type::Boolean.new
    else
      ActiveModel::Type::String.new
    end
  end

  def type_cast(value)
    if type.respond_to?(:cast)
      type.cast(value)
    else
      value
    end
  end

  def to_a
    [key, default_value]
  end

  def key
    if namespace
      "#{namespace}.#{name}".to_sym
    else
      name
    end
  end
end

M app/serializers/rest/admin/webhook_event_serializer.rb => app/serializers/rest/admin/webhook_event_serializer.rb +2 -0
@@ 7,6 7,8 @@ class REST::Admin::WebhookEventSerializer < ActiveModel::Serializer
      REST::Admin::AccountSerializer
    when 'Report'
      REST::Admin::ReportSerializer
    when 'Status'
      REST::StatusSerializer
    else
      super
    end

M app/services/notify_service.rb => app/services/notify_service.rb +9 -4
@@ 3,6 3,11 @@
class NotifyService < BaseService
  include Redisable

  NON_EMAIL_TYPES = %i(
    admin.report
    admin.sign_up
  ).freeze

  def call(recipient, type, activity)
    @recipient    = recipient
    @activity     = activity


@@ 36,11 41,11 @@ class NotifyService < BaseService
  end

  def optional_non_follower?
    @recipient.user.settings.interactions['must_be_follower']  && !@notification.from_account.following?(@recipient)
    @recipient.user.settings['interactions.must_be_follower']  && !@notification.from_account.following?(@recipient)
  end

  def optional_non_following?
    @recipient.user.settings.interactions['must_be_following'] && !following_sender?
    @recipient.user.settings['interactions.must_be_following'] && !following_sender?
  end

  def message?


@@ 82,7 87,7 @@ class NotifyService < BaseService

  def optional_non_following_and_direct?
    direct_message? &&
      @recipient.user.settings.interactions['must_be_following_dm'] &&
      @recipient.user.settings['interactions.must_be_following_dm'] &&
      !following_sender? &&
      !response_to_recipient?
  end


@@ 171,6 176,6 @@ class NotifyService < BaseService
  end

  def send_email_for_notification_type?
    @recipient.user.settings.notification_emails[@notification.type.to_s]
    NON_EMAIL_TYPES.exclude?(@notification.type) && @recipient.user.settings["notification_emails.#{@notification.type}"]
  end
end

M app/services/update_status_service.rb => app/services/update_status_service.rb +2 -2
@@ 143,9 143,9 @@ class UpdateStatusService < BaseService
    poll = @status.preloadable_poll

    # If the poll had no expiration date set but now has, or now has a sooner
    # expiration date, and people have voted, schedule a notification
    # expiration date, schedule a notification

    return unless poll.present? && poll.expires_at.present? && poll.votes.exists?
    return unless poll.present? && poll.expires_at.present?

    PollExpirationNotifyWorker.remove_from_scheduled(poll.id) if @previous_expires_at.present? && @previous_expires_at > poll.expires_at
    PollExpirationNotifyWorker.perform_at(poll.expires_at + 5.minutes, poll.id)

A app/views/kaminari/_gap.html.haml => app/views/kaminari/_gap.html.haml +9 -0
@@ 0,0 1,9 @@
-#
  Non-link tag that stands for skipped pages...
  available local variables
    current_page:  a page object for the currently displayed page
    total_pages:   total number of pages
    per_page:      number of items to fetch per page
    remote:        data-remote
%span.page.gap
  != t('pagination.truncate')

M app/views/settings/login_activities/_login_activity.html.haml => app/views/settings/login_activities/_login_activity.html.haml +1 -1
@@ 1,6 1,6 @@
- method_str = content_tag(:span, login_activity.omniauth? ? t(login_activity.provider, scope: 'auth.providers') : t(login_activity.authentication_method, scope: 'login_activities.authentication_methods'), class: 'target')
- ip_str = content_tag(:span, login_activity.ip, class: 'target')
- browser_str = content_tag(:span, t('sessions.description', browser: t("sessions.browsers.#{login_activity.browser}", default: login_activity.browser.to_s), platform: t("sessions.platforms.#{login_activity.platform}", default: login_activity.platform.to_)), class: 'target', title: login_activity.user_agent)
- browser_str = content_tag(:span, t('sessions.description', browser: t("sessions.browsers.#{login_activity.browser}", default: login_activity.browser.to_s), platform: t("sessions.platforms.#{login_activity.platform}", default: login_activity.platform.to_s)), class: 'target', title: login_activity.user_agent)

.log-entry
  .log-entry__header

M app/views/settings/preferences/appearance/show.html.haml => app/views/settings/preferences/appearance/show.html.haml +36 -35
@@ 5,8 5,9 @@
  = button_tag t('generic.save_changes'), class: 'button', form: 'edit_user'

= simple_form_for current_user, url: settings_preferences_appearance_path, html: { method: :put, id: 'edit_user' } do |f|
  .fields-group
    = f.input :locale, collection: I18n.available_locales, wrapper: :with_label, include_blank: false, label_method: lambda { |locale| native_locale_name(locale) }, selected: I18n.locale, hint: false
  .fields-row
    .fields-group
      = f.input :locale, collection: I18n.available_locales, wrapper: :with_label, include_blank: false, label_method: lambda { |locale| native_locale_name(locale) }, selected: I18n.locale, hint: false

  - unless I18n.locale == :en
    .flash-message.translation-prompt


@@ 14,53 15,53 @@
      = link_to t('appearance.localization.glitch_guide_link'), target: '_blank', rel: 'noopener noreferrer' do
        = t('appearance.localization.glitch_guide_link_text')

  %h4= t 'appearance.advanced_web_interface'
  = f.simple_fields_for :settings, current_user.settings do |ff|
    %h4= t 'appearance.advanced_web_interface'

  %p.hint= t 'appearance.advanced_web_interface_hint'
    %p.hint= t 'appearance.advanced_web_interface_hint'

  .fields-group
    = f.input :setting_advanced_layout, as: :boolean, wrapper: :with_label, hint: false
    .fields-group
      = ff.input :'web.advanced_layout', wrapper: :with_label, hint: false, label: I18n.t('simple_form.labels.defaults.setting_advanced_layout')
    %h4= t 'appearance.animations_and_accessibility'

  %h4= t 'appearance.animations_and_accessibility'
    .fields-group
      = ff.input :'web.use_pending_items', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_use_pending_items'), hint: I18n.t('simple_form.hints.defaults.setting_use_pending_items')

  .fields-group
    = f.input :setting_use_pending_items, as: :boolean, wrapper: :with_label
    .fields-group
      = ff.input :'web.auto_play', wrapper: :with_label, recommended: true, label: I18n.t('simple_form.labels.defaults.setting_auto_play_gif')
      = ff.input :'web.reduce_motion', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_reduce_motion')
      = ff.input :'web.disable_swiping', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_disable_swiping')
      = ff.input :'web.use_system_font', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_system_font_ui')
      = ff.input :'web.use_system_emoji_font', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_system_emoji_font'), glitch_only: true

  .fields-group
    = f.input :setting_auto_play_gif, as: :boolean, wrapper: :with_label, recommended: true
    = f.input :setting_reduce_motion, as: :boolean, wrapper: :with_label
    = f.input :setting_disable_swiping, as: :boolean, wrapper: :with_label
    = f.input :setting_system_font_ui, as: :boolean, wrapper: :with_label
    = f.input :setting_system_emoji_font, as: :boolean, wrapper: :with_label, glitch_only: true
    %h4= t 'appearance.toot_layout'

  %h4= t 'appearance.toot_layout'
    .fields-group
      = ff.input :'web.crop_images', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_crop_images')

  .fields-group
    = f.input :setting_crop_images, as: :boolean, wrapper: :with_label
    %h4= t 'appearance.discovery'

  %h4= t 'appearance.discovery'
    .fields-group
      = ff.input :'web.trends', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_trends')

  .fields-group
    = f.input :setting_trends, as: :boolean, wrapper: :with_label
    %h4= t 'appearance.confirmation_dialogs'

  %h4= t 'appearance.confirmation_dialogs'
    .fields-group
      = ff.input :'web.unfollow_modal', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_unfollow_modal')
      = ff.input :'web.reblog_modal', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_boost_modal')
      = ff.input :'web.favourite_modal', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_favourite_modal'), glitch_only: true
      = ff.input :'web.delete_modal', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_delete_modal')

  .fields-group
    = f.input :setting_unfollow_modal, as: :boolean, wrapper: :with_label
    = f.input :setting_boost_modal, as: :boolean, wrapper: :with_label
    = f.input :setting_favourite_modal, as: :boolean, wrapper: :with_label, glitch_only: true
    = f.input :setting_delete_modal, as: :boolean, wrapper: :with_label
    %h4= t 'appearance.sensitive_content'

  %h4= t 'appearance.sensitive_content'
    .fields-group
      = ff.input :'web.display_media', collection: ['default', 'show_all', 'hide_all'],label_method: lambda { |item| t("simple_form.hints.defaults.setting_display_media_#{item}") }, hint: false, as: :radio_buttons, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', wrapper: :with_floating_label, label: I18n.t('simple_form.labels.defaults.setting_display_media')

  .fields-group
    = f.input :setting_display_media, collection: ['default', 'show_all', 'hide_all'], label_method: lambda { |item| t("simple_form.hints.defaults.setting_display_media_#{item}") }, hint: false, as: :radio_buttons, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', wrapper: :with_floating_label
    .fields-group
      = ff.input :'web.use_blurhash', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_use_blurhash'), hint: I18n.t('simple_form.hints.defaults.setting_use_blurhash')

  .fields-group
    = f.input :setting_use_blurhash, as: :boolean, wrapper: :with_label

  .fields-group
    = f.input :setting_expand_spoilers, as: :boolean, wrapper: :with_label
    .fields-group
      = ff.input :'web.expand_content_warnings', wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_expand_spoilers')

  .actions
    = f.button :button, t('generic.save_changes'), type: :submit

M app/views/settings/preferences/notifications/show.html.haml => app/views/settings/preferences/notifications/show.html.haml +20 -20
@@ 11,27 11,27 @@

  %p.hint= t 'notifications.email_events_hint'

  .fields-group
    = f.simple_fields_for :notification_emails, hash_to_object(current_user.settings.notification_emails) do |ff|
      = ff.input :follow, as: :boolean, wrapper: :with_label
      = ff.input :follow_request, as: :boolean, wrapper: :with_label
      = ff.input :reblog, as: :boolean, wrapper: :with_label
      = ff.input :favourite, as: :boolean, wrapper: :with_label
      = ff.input :mention, as: :boolean, wrapper: :with_label
      = ff.input :report, as: :boolean, wrapper: :with_label if current_user.can?(:manage_reports)
      = ff.input :appeal, as: :boolean, wrapper: :with_label if current_user.can?(:manage_appeals)
      = ff.input :pending_account, as: :boolean, wrapper: :with_label if current_user.can?(:manage_users)
      = ff.input :trending_tag, as: :boolean, wrapper: :with_label if current_user.can?(:manage_taxonomies)
      = ff.input :trending_link, as: :boolean, wrapper: :with_label if current_user.can?(:manage_taxonomies)
      = ff.input :trending_status, as: :boolean, wrapper: :with_label if current_user.can?(:manage_taxonomies)

  .fields-group
    = f.input :setting_always_send_emails, as: :boolean, wrapper: :with_label
  = f.simple_fields_for :settings, current_user.settings do |ff|
    .fields-group
      = ff.input :'notification_emails.follow', wrapper: :with_label, label: I18n.t('simple_form.labels.notification_emails.follow')
      = ff.input :'notification_emails.follow_request', wrapper: :with_label, label: I18n.t('simple_form.labels.notification_emails.follow_request')
      = ff.input :'notification_emails.reblog', wrapper: :with_label, label: I18n.t('simple_form.labels.notification_emails.reblog')
      = ff.input :'notification_emails.favourite', wrapper: :with_label, label: I18n.t('simple_form.labels.notification_emails.favourite')
      = ff.input :'notification_emails.mention', wrapper: :with_label, label: I18n.t('simple_form.labels.notification_emails.mention')
      = ff.input :'notification_emails.report', wrapper: :with_label, label: I18n.t('simple_form.labels.notification_emails.report') if current_user.can?(:manage_reports)
      = ff.input :'notification_emails.appeal', as: :boolean, wrapper: :with_label, label: I18n.t('simple_form.labels.notification_emails.appeal') if current_user.can?(:manage_appeals)
      = ff.input :'notification_emails.pending_account', wrapper: :with_label, label: I18n.t('simple_form.labels.notification_emails.pending_account') if current_user.can?(:manage_users)
      = ff.input :'notification_emails.trends', wrapper: :with_label, label: I18n.t('simple_form.labels.notification_emails.trending_tag') if current_user.can?(:manage_taxonomies)
      = ff.input :'notification_emails.link_trends', wrapper: :with_label, label: I18n.t('simple_form.labels.notification_emails.trending_link') if current_user.can?(:manage_taxonomies)
      = ff.input :'notification_emails.status_trends', wrapper: :with_label, label: I18n.t('simple_form.labels.notification_emails.trending_status') if current_user.can?(:manage_taxonomies)

    .fields-group
      = ff.input :always_send_emails, wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_always_send_emails'), hint: I18n.t('simple_form.hints.defaults.setting_always_send_emails')

  %h4= t 'notifications.other_settings'

  .fields-group
    = f.simple_fields_for :interactions, hash_to_object(current_user.settings.interactions) do |ff|
      = ff.input :must_be_follower, as: :boolean, wrapper: :with_label
      = ff.input :must_be_following, as: :boolean, wrapper: :with_label
      = ff.input :must_be_following_dm, as: :boolean, wrapper: :with_label
    = f.simple_fields_for :settings, current_user.settings do |ff|
      = ff.input :'interactions.must_be_follower', wrapper: :with_label, label: I18n.t('simple_form.labels.interactions.must_be_follower')
      = ff.input :'interactions.must_be_following', wrapper: :with_label, label: I18n.t('simple_form.labels.interactions.must_be_following')
      = ff.input :'interactions.must_be_following_dm', wrapper: :with_label, label: I18n.t('simple_form.labels.interactions.must_be_following_dm')

M app/views/settings/preferences/other/show.html.haml => app/views/settings/preferences/other/show.html.haml +18 -17
@@ 7,30 7,31 @@
= simple_form_for current_user, url: settings_preferences_other_path, html: { method: :put, id: 'edit_preferences' } do |f|
  = render 'shared/error_messages', object: current_user

  .fields-group
    = f.input :setting_noindex, as: :boolean, wrapper: :with_label

  .fields-group
    = f.input :setting_aggregate_reblogs, as: :boolean, wrapper: :with_label, recommended: true
  = f.simple_fields_for :settings, current_user.settings do |ff|
    .fields-group
      = ff.input :noindex, wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_noindex'), hint: I18n.t('simple_form.hints.defaults.setting_noindex')

  - unless Setting.hide_followers_count
    .fields-group
      = f.input :setting_hide_followers_count, as: :boolean, wrapper: :with_label, glitch_only: true
      = ff.input :aggregate_reblogs, wrapper: :with_label, recommended: true, label: I18n.t('simple_form.labels.defaults.setting_aggregate_reblogs'), hint: I18n.t('simple_form.hints.defaults.setting_aggregate_reblogs')

  %h4= t 'preferences.posting_defaults'
    - unless Setting.hide_followers_count
      .fields-group
        = ff.input :hide_followers_count, wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_hide_followers_count'), glitch_only: true

  .fields-row
    .fields-group.fields-row__column.fields-row__column-6
      = f.input :setting_default_privacy, collection: Status.selectable_visibilities, wrapper: :with_label, include_blank: false, label_method: lambda { |visibility| safe_join([I18n.t("statuses.visibilities.#{visibility}"), I18n.t("statuses.visibilities.#{visibility}_long")], ' - ') }, required: false, hint: false
    %h4= t 'preferences.posting_defaults'

    .fields-group.fields-row__column.fields-row__column-6
      = f.input :setting_default_language, collection: [nil] + filterable_languages, wrapper: :with_label, label_method: lambda { |locale| locale.nil? ? I18n.t('statuses.default_language') : native_locale_name(locale) }, required: false, include_blank: false, hint: false
    .fields-row
      .fields-group.fields-row__column.fields-row__column-6
        = ff.input :default_privacy, collection: Status.selectable_visibilities, wrapper: :with_label, include_blank: false, label_method: lambda { |visibility| safe_join([I18n.t("statuses.visibilities.#{visibility}"), I18n.t("statuses.visibilities.#{visibility}_long")], ' - ') }, required: false, hint: false, label: I18n.t('simple_form.labels.defaults.setting_default_privacy')

  .fields-group
    = f.input :setting_default_sensitive, as: :boolean, wrapper: :with_label
      .fields-group.fields-row__column.fields-row__column-6
        = ff.input :default_language, collection: [nil] + filterable_languages, wrapper: :with_label, label_method: lambda { |locale| locale.nil? ? I18n.t('statuses.default_language') : native_locale_name(locale) }, required: false, include_blank: false, hint: false, label: I18n.t('simple_form.labels.defaults.setting_default_language')

  .fields-group
    = f.input :setting_show_application, as: :boolean, wrapper: :with_label, recommended: true
    .fields-group
      = ff.input :default_sensitive, wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_default_sensitive'), hint: I18n.t('simple_form.hints.defaults.setting_default_sensitive')

    .fields-group
      = ff.input :show_application, wrapper: :with_label, recommended: true, label: I18n.t('simple_form.labels.defaults.setting_show_application'), hint: I18n.t('simple_form.hints.defaults.setting_show_application')

  .fields-group
    = f.input :setting_default_content_type, collection: ['text/plain', 'text/markdown', 'text/html'], wrapper: :with_label, include_blank: false, label_method: lambda { |item| safe_join([t("simple_form.labels.defaults.setting_default_content_type_#{item.split('/')[1]}"), content_tag(:span, t("simple_form.hints.defaults.setting_default_content_type_#{item.split('/')[1]}"), class: 'hint')]) }, required: false, as: :radio_buttons, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', glitch_only: true

M app/workers/poll_expiration_notify_worker.rb => app/workers/poll_expiration_notify_worker.rb +1 -1
@@ 3,7 3,7 @@
class PollExpirationNotifyWorker
  include Sidekiq::Worker

  sidekiq_options lock: :until_executed
  sidekiq_options lock: :until_executing

  def perform(poll_id)
    @poll = Poll.find(poll_id)

M app/workers/scheduler/indexing_scheduler.rb => app/workers/scheduler/indexing_scheduler.rb +10 -6
@@ 6,17 6,21 @@ class Scheduler::IndexingScheduler

  sidekiq_options retry: 0

  IMPORT_BATCH_SIZE = 1000
  SCAN_BATCH_SIZE = 10 * IMPORT_BATCH_SIZE

  def perform
    return unless Chewy.enabled?

    indexes.each do |type|
      with_redis do |redis|
        ids = redis.smembers("chewy:queue:#{type.name}")

        type.import!(ids)

        redis.pipelined do |pipeline|
          ids.each { |id| pipeline.srem("chewy:queue:#{type.name}", id) }
        redis.sscan_each("chewy:queue:#{type.name}", count: SCAN_BATCH_SIZE) do |ids|
          redis.pipelined do
            ids.each_slice(IMPORT_BATCH_SIZE) do |slice_ids|
              type.import!(slice_ids)
              redis.srem("chewy:queue:#{type.name}", slice_ids)
            end
          end
        end
      end
    end

M config/initializers/inflections.rb => config/initializers/inflections.rb +1 -0
@@ 26,6 26,7 @@ ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.acronym 'URL'
  inflect.acronym 'ASCII'
  inflect.acronym 'DeepL'
  inflect.acronym 'DSL'

  inflect.singular 'data', 'data'
end

M config/initializers/paperclip.rb => config/initializers/paperclip.rb +1 -0
@@ 130,6 130,7 @@ elsif ENV['SWIFT_ENABLED'] == 'true'
      openstack_domain_name: ENV.fetch('SWIFT_DOMAIN_NAME') { 'default' },
      openstack_region: ENV['SWIFT_REGION'],
      openstack_cache_ttl: ENV.fetch('SWIFT_CACHE_TTL') { 60 },
      openstack_temp_url_key: ENV['SWIFT_TEMP_URL_KEY'],
    },
    
    fog_file: { 'Cache-Control' => 'public, max-age=315576000, immutable' },

M config/locales/activerecord.fi.yml => config/locales/activerecord.fi.yml +2 -2
@@ 24,11 24,11 @@ fi:
        admin/webhook:
          attributes:
            url:
              invalid: ei ole kelvollinen URL
              invalid: ei ole kelvollinen verkko-osoite
        doorkeeper/application:
          attributes:
            website:
              invalid: ei ole kelvollinen URL
              invalid: ei ole kelvollinen verkko-osoite
        import:
          attributes:
            data:

M config/locales/an.yml => config/locales/an.yml +0 -1
@@ 1643,7 1643,6 @@ an:
    seamless_external_login: Has iniciau sesión dende un servicio externo, asinas que los achustes de clau y correu no son disponibles.
    signed_in_as: 'Sesión iniciada como:'
  verification:
    explanation_html: 'Puetz <strong> verificar-te a tu mesmo como lo duenyo d''os links en os metadatos d''o tuyo perfil </strong>. Pa ixo, lo puesto vinculau ha de contener un vinclo a lo tuyo perfil de Mastodon. Lo vinclo en o tuyo puesto <strong> debe </strong> tener un atributo <code> rel="me"</code>. Lo texto d''o vinclo no importa. Aquí un eixemplo:'
    verification: Verificación
  webauthn_credentials:
    add: Adhibir nueva clau de seguranza

M config/locales/ar.yml => config/locales/ar.yml +0 -1
@@ 1730,7 1730,6 @@ ar:
    seamless_external_login: لقد قمت بتسجيل الدخول عبر خدمة خارجية، إنّ إعدادات الكلمة السرية و البريد الإلكتروني غير متوفرة.
    signed_in_as: 'تم تسجيل دخولك بصفة:'
  verification:
    explanation_html: 'يمكنك <strong>التحقق من نفسك كمالك لروابط البيانات التعريفية على صفحتك الشخصية</strong>. لذلك، يجب أن يحتوي الموقع المقترِن على رابط إلى صفحتك التعريفية الشخصية على ماستدون. الرابط الخلفي <strong>يجب أن</strong> يحتوي على رمز <code>rel="me"</code>. محتوى النص في الرابط غير مهم. على سبيل المثال:'
    verification: التحقق
  webauthn_credentials:
    add: إضافة مفتاح أمان جديد

M config/locales/ast.yml => config/locales/ast.yml +0 -1
@@ 905,7 905,6 @@ ast:
    seamless_external_login: Aniciesti la sesión pente un serviciu esternu, polo que la configuración de la contraseña ya de la direición de corréu electrónicu nun tán disponibles.
    signed_in_as: 'Aniciesti la sesión como:'
  verification:
    explanation_html: 'Pues <strong>verificate como la persona propietaria de los enllaces nos metadatos del to perfil</strong>. Pa ello, el sitiu web enllaciáu ha contener un enllaz al to perfil de Mastodon. Esti enllaz <strong>ha</strong> tener l''atributu <code>rel="me"</code>. El testu del enllaz nun importa. Equí tienes un exemplu:'
    verification: Verificación
  webauthn_credentials:
    create:

M config/locales/be.yml => config/locales/be.yml +9 -1
@@ 840,6 840,12 @@ be:
        message_html: Вы не вызначылі ніякіх правілаў сервера.
      sidekiq_process_check:
        message_html: Не працуе працэс Sidekiq для %{value} чаргі. Калі ласка праверце вашу канфігурацыю Sidekiq
      upload_check_privacy_error:
        action: Для падрабязнасцей націсніце тут
        message_html: "<strong>Ваш сервер не наладжаны. Прыватнасць карыстальнікаў пад пагрозай.</strong>"
      upload_check_privacy_error_object_storage:
        action: Для падрабязнасцей націсніце тут
        message_html: "<strong>Ваша сховішча не наладжана. Прыватнасць карыстальнікаў пад пагрозай.</strong>"
    tags:
      review: Стан праверкі
      updated_msg: Налады хэштэгаў паспяхова змененыя


@@ 1457,6 1463,7 @@ be:
    confirm_remove_selected_followers: Вы ўпэўнены, што жадаеце выдаліць выбраных падпісчыкаў?
    confirm_remove_selected_follows: Вы ўпэўнены, што жадаеце выдаліць выбраныя падпіскі?
    dormant: Занядбаны
    follow_failure: Вы не можаце падпісацца на некаторыя акаўнты.
    follow_selected_followers: Падпісацца на выбраных падпісчыкаў
    followers: Падпісчыкі
    following: Падпісаны


@@ 1747,12 1754,13 @@ be:
      title: Рады вітаць вас, %{name}!
  users:
    follow_limit_reached: Вы не можаце падпісацца на большую колькасць людзей чым %{limit}
    go_to_sso_account_settings: Перайдзіце ў налады ідэнтыфікацыі вашага ўліковага запісу
    invalid_otp_token: Няправільны код двухфактарнай аўтэнтыфікацыі
    otp_lost_help_html: Калі вы страцілі доступ да абодвух, вы можаце скарыстацца %{email}
    seamless_external_login: Вы ўвайшлі праз знешні сэрвіс, таму налады пароля і эл. пошты недаступныя.
    signed_in_as: 'Увайшлі як:'
  verification:
    explanation_html: 'Вы можаце <strong>пацвердзіць сябе як уладальніка спасылак у метададзеных вашага профілю</strong>. Для гэтага спасылка на вэб-сайт павінна ўтрымліваць спасылку на ваш профіль Mastodon. Зваротная спасылка <strong>павінна</strong> мець атрыбут <code>rel="me"</code>. Тэкставы змест спасылкі не мае значэння. Вось прыклад:'
    explanation_html: 'Вы можаце <strong>пацвердзіць сябе як уладальніка спасылак у метададзеных вашага профілю</strong>. Для гэтага спасылка на вэб-сайт павінна ўтрымліваць спасылку на ваш профіль Mastodon. Пасля дадавання спасылка, вам спатрэбіцца вярнуцца і перазахаваць свой профіль, каб усё адбыдося. Зваротная спасылка <strong>павінна</strong> мець атрыбут <code>rel="me"</code>. Тэкставы змест спасылкі не мае значэння. Вось прыклад:'
    verification: Верыфікацыя
  webauthn_credentials:
    add: Дадаць новы ключ бяспекі

M config/locales/bg.yml => config/locales/bg.yml +8 -1
@@ 812,6 812,12 @@ bg:
        message_html: Не сте определили никакви правила на сървъра.
      sidekiq_process_check:
        message_html: Не работи процес Sidekiq за %{value} опашка/и. Прегледайте настройките си за Sidekiq
      upload_check_privacy_error:
        action: Щракнете тук за повече информация
        message_html: "<strong>Вашият уеб сървър е погрешно конфигуриран. Поверителността на потребителите ви е изложена на риск.</strong>"
      upload_check_privacy_error_object_storage:
        action: Щракнете тук за повече информация
        message_html: "<strong>Вашето съхранение на предмети е погрешно конфигурирано. Поверителността на потребителите ви е изложена на риск.</strong>"
    tags:
      review: Преглед на състояние
      updated_msg: Успешно осъвременени настройки на хаштага


@@ 1684,12 1690,13 @@ bg:
      title: Добре дошли на борда, %{name}!
  users:
    follow_limit_reached: Не може да последвате повече от %{limit} души
    go_to_sso_account_settings: Отидете при настройките на акаунта на своя доставчик на идентичност
    invalid_otp_token: Невалиден код
    otp_lost_help_html: Ако загубите достъп до двете, то може да се свържете с %{email}
    seamless_external_login: Влезли сте чрез външна услуга, така че настройките за парола и имейл не са налични.
    signed_in_as: 'Влезли като:'
  verification:
    explanation_html: 'Можете да <strong>удостоверите самоличността си като собственик на линковете в метаданните на своя профил</strong>. За целта сайтът, към който води линк от метаданните, трябва да съдържа линк обратно към вашия профил в Mastodon. Линкът от сайта <strong>трябва</strong> да съдържа атрибут <code>rel="me"</code>. Текстовото съдържание на линка няма значение. Ето пример:'
    explanation_html: 'Може да <strong>потвърдите себе си като собственик на връзките в метаданните на профила си</strong>. За целта свързаният уебсайт трябва да съдържа обратна връзка към профилa ви в Mastodon. След добавянето на връзката, може да се наложи да се върнете тук и да запазите пак профила си, за да влезе в сила потвърждаването. Връзката обратно <strong>трябва</strong> да има атрибут <code>rel="me"</code>. Текстовото съдържание на връзката няма значение. Ето пример:'
    verification: Проверка
  webauthn_credentials:
    add: Добавяне на нов ключ за сигурност

M config/locales/br.yml => config/locales/br.yml +0 -1
@@ 535,7 535,6 @@ br:
  users:
    signed_in_as: 'Aet-tre evel:'
  verification:
    explanation_html: 'Gallout a rit <strong>gwiriañ c''hwi a zo perc''henn. ez liammoù metadata ho profil</strong>. Ret eo d''al lec''hienn web staget enderc''hel ul liamm evit mont d''ho profil Mastodon. <strong>Ret eo<strong> d''al liamm-se enderc''hel un doarenn <code>rel="me"</code>. Ne ra forzh an destenn a zo e-barzh al liamm. Setu ur skouer:'
    verification: Amprouadur
  webauthn_credentials:
    add: Ouzphennañ un alc'hwez surentez nevez

M config/locales/ca.yml => config/locales/ca.yml +8 -1
@@ 812,6 812,12 @@ ca:
        message_html: No has definit cap norma del servidor.
      sidekiq_process_check:
        message_html: No hi ha cap procés de Sidekiq executant-se per a la cua (o cues) de %{value}. Si us plau revisa la teva configuració de Sidekiq
      upload_check_privacy_error:
        action: Consulta aquí per a més informació
        message_html: "<strong>El teu servidor no està ben configurat. La privacitat dels teus usuaris està en risc.</strong>"
      upload_check_privacy_error_object_storage:
        action: Consulta aquí per a més informació
        message_html: "<strong>El teu emagatzamatge d'objectes no està ben configurat. La privacitat dels teus usuaris està en risc.</strong>"
    tags:
      review: Revisar l'estat
      updated_msg: Ajustaments d'etiquetes actualitzats amb èxit


@@ 1684,12 1690,13 @@ ca:
      title: Benvingut a bord, %{name}!
  users:
    follow_limit_reached: No pots seguir més de %{limit} persones
    go_to_sso_account_settings: Ves a la configuració del compte del teu proveïdor d'identitat
    invalid_otp_token: El codi de dos factors no és correcte
    otp_lost_help_html: Si has perdut l'accés a tots dos pots contactar per %{email}
    seamless_external_login: Has iniciat sessió via un servei extern per tant els ajustos de contrasenya i correu electrònic no estan disponibles.
    signed_in_as: 'Sessió iniciada com a:'
  verification:
    explanation_html: 'Pots <strong>verificar-te com a propietari dels enllaços a les metadades del teu perfil</strong>. Per això, el lloc web enllaçat ha de contenir un enllaç al teu perfil de Mastodon. El vincle <strong>ha de</strong> tenir l''atribut <code>rel="me"</code>. El contingut del text de l''enllaç no importa. Aquí tens un exemple:'
    explanation_html: 'Pots <strong>verificar-te com a propietari dels enllaços a les metadades del teu perfil</strong>. Per això, el lloc web enllaçat ha de contenir un enllaç al teu perfil de Mastodon. Després d''afegir l''enllaç, podries necessitar tornar aquí a desar el teu perfil per a fer efectiva la verificació. El vincle <strong>ha de</strong> tenir l''atribut <code>rel="me"</code>. El contingut del text de l''enllaç no importa. Aquí tens un exemple:'
    verification: Verificació
  webauthn_credentials:
    add: Afegir nova clau de seguretat

M config/locales/ckb.yml => config/locales/ckb.yml +0 -1
@@ 1070,7 1070,6 @@ ckb:
    seamless_external_login: تۆ لە ڕێگەی خزمەتگوزاری دەرەکیەوە داخڵ بووی، بۆیە ڕێکبەندەکانی نهێنوشە و ئیمەیل بەردەست نین.
    signed_in_as: 'چوونە ژوورەوە وەک:'
  verification:
    explanation_html: 'دەتوانیت <strong> خۆت بسەلمێنیت وەک خاوەنی لینکەکان لە مێتاداتای پرۆفایلەکەت</strong>. بۆ ئەمە، ماڵپەڕە لینککراوەکە پێویستە لینکێکی تێدا بێت بۆ پرۆفایلی ماستۆدۆنەکەت. بەستەری <strong> دەبێت </strong> هەبێت <code>="me"</code>. ناوەڕۆکی دەقی لینکەکە گرنگ نییە. ئەمە نموونەیەکە:'
    verification: ساغ کردنەوە
  webauthn_credentials:
    add: زیادکردنی کلیلی ئاسایشی نوێ

M config/locales/co.yml => config/locales/co.yml +0 -1
@@ 1089,7 1089,6 @@ co:
    seamless_external_login: Site cunnettatu·a dapoi un serviziu esternu, allora i parametri di chjave d’accessu è d’indirizzu e-mail ùn so micca dispunibili.
    signed_in_as: 'Cunnettatu·a cum’è:'
  verification:
    explanation_html: 'Pudete <strong>verificavi cum''è u pruprietariu di i ligami in i metadati di u vostru prufile</strong>. Per quessa, u vostru situ deve avè un ligame versu a vostra pagina Mastodon. U ligame <strong>deve</strong> avè un''attributu <code>rel="me"</code>. U cuntenutu di u testu di u ligame ùn hè micca impurtante. Eccu un''esempiu:'
    verification: Verificazione
  webauthn_credentials:
    add: Aghjunghje una chjave di sicurità

M config/locales/cs.yml => config/locales/cs.yml +0 -1
@@ 1730,7 1730,6 @@ cs:
    seamless_external_login: Jste přihlášeni přes externí službu, nastavení hesla a e-mailu proto nejsou dostupná.
    signed_in_as: 'Přihlášeni jako:'
  verification:
    explanation_html: 'Můžete se <strong>ověřit jako vlastník odkazů v metadatech profilu</strong>. Pro tento účel musí stránka v odkazu obsahovat odkaz zpět na váš profil na Mastodonu. Odkaz zpět <strong>musí</strong> mít atribut <code>rel="me"</code>. Na textu odkazu nezáleží. Zde je příklad:'
    verification: Ověření
  webauthn_credentials:
    add: Přidat nový bezpečnostní klíč

M config/locales/cy.yml => config/locales/cy.yml +8 -1
@@ 868,6 868,12 @@ cy:
        message_html: Nid ydych wedi diffinio unrhyw reolau gweinydd.
      sidekiq_process_check:
        message_html: Does dim proses Sidekiq yn rhedeg ar gyfer y ciw(iau) %{value}. Adolygwch eich ffurfweddiad Sidekiq
      upload_check_privacy_error:
        action: Ewch yma am fwy o wybodaeth
        message_html: "<strong>Mae eich gweinydd gwe wedi'i gam ffurfweddu.. Mae preifatrwydd eich defnyddwyr mewn perygl.</strong>"
      upload_check_privacy_error_object_storage:
        action: Ewch yma am fwy o wybodaeth
        message_html: "<strong>Mae eich storfa gwrthrychau wedi'i cham ffurfweddu. Mae preifatrwydd eich defnyddwyr mewn perygl.</strong>"
    tags:
      review: Adolygu statws
      updated_msg: Gosodiadau hashnodau wedi'i diweddaru'n llwyddiannus


@@ 1812,12 1818,13 @@ cy:
      title: Croeso, %{name}!
  users:
    follow_limit_reached: Nid oes modd i chi ddilyn mwy na %{limit} o bobl
    go_to_sso_account_settings: Ewch i osodiadau cyfrif eich darparwr hunaniaeth
    invalid_otp_token: Côd dau-ffactor annilys
    otp_lost_help_html: Os colloch chi fynediad i'r ddau, mae modd i chi gysylltu a %{email}
    seamless_external_login: Yr ydych wedi'ch mewngofnodi drwy wasanaeth allanol, felly nid yw gosodiadau cyfrinair ac e-bost ar gael.
    signed_in_as: 'Wedi mewngofnodi fel:'
  verification:
    explanation_html: 'Mae modd i chi <strong>ddilysu eich hun fel perchenog y dolenni yn metadata eich proffil</strong>. Rhaid i''r wefan â dolen iddi gynnwys dolen yn ôl i''ch proffil Mastodon. <strong>Rhaid</strong> i''r ddolen yn ôl cynnwys y nodwedd <code>rel="me"</code>. Does dim ots beth yw cynnwys testun y ddolen. Dyma enghraifft:'
    explanation_html: 'Gallwch <strong>wirio eich hun fel perchennog y dolenni ym metadata eich proffil</strong> . Ar gyfer gwneud hynny, rhaid i''r wefan gysylltiedig gynnwys dolen yn ôl i''ch proffil Mastodon. Ar ôl ychwanegu''r ddolen efallai y bydd angen i chi ddod yn ôl yma ac ail-gadw''ch proffil er mwyn i''r dilysiad ddod i rym. <strong>Rhaid</strong> i''r ddolen yn ôl gael priodoledd <code>rêl="me"</code>. Nid yw cynnwys testun y ddolen o bwys. Dyma enghraifft:'
    verification: Dilysu
  webauthn_credentials:
    add: Ychwanegu allwedd ddiogelwch newydd

M config/locales/da.yml => config/locales/da.yml +8 -1
@@ 812,6 812,12 @@ da:
        message_html: Ingen serverregler defineret.
      sidekiq_process_check:
        message_html: Ingen Sidekiq-proces kører for %{value}-kø(er). Gennemgå Sidekiq-opsætningen
      upload_check_privacy_error:
        action: Tjek her for flere oplysninger
        message_html: "<strong>Webserveren er fejlopsat. Brugernes fortrolighed er i fare.</strong>"
      upload_check_privacy_error_object_storage:
        action: Tjek her for flere oplysninger
        message_html: "<strong>Objektlageret er fejlopsat. Brugernes fortrolighed er i fare.</strong>"
    tags:
      review: Revisionsstatus
      updated_msg: Hashtag-indstillinger opdateret


@@ 1684,12 1690,13 @@ da:
      title: Velkommen ombord, %{name}!
  users:
    follow_limit_reached: Du kan maks. følge %{limit} personer
    go_to_sso_account_settings: Gå til identitetsudbyderens kontoindstillinger
    invalid_otp_token: Ugyldig tofaktorkode
    otp_lost_help_html: Har du mistet adgang til begge, kan du kontakte %{email}
    seamless_external_login: Du er logget ind via en ekstern tjeneste, så adgangskode- og e-mailindstillinger er utilgængelige.
    signed_in_as: 'Logget ind som:'
  verification:
    explanation_html: 'Du kan <strong>bekræfte dig selv som ejer af linkene i din profilmetadata</strong>. For at gøre det, skal det linkede websted indeholde et link pegende tilbage til din Mastodon-profil. Returlinket <strong>skal</strong> have en <code>rel="me"</code>-attribut. Linkets tekstindhold betyder ikke noget. Her er et eksempel:'
    explanation_html: 'Man kan <strong>bekræfte sig selv som ejer af linkene i profilmetadataene</strong>. For at gøre dette, skal det linkede websted indeholde et link tilbage til Mastodon-profilen. Efter tilføjelse af linket, skal man muligvis returnere hertil og gemme sin profil igen, før bekræftelsen effektueres. Returlinket <strong>skal</strong> have en <code>rel="me"</code>-attribut. Linkets tekstindhold er ligegyldigt. Her er et eksempel:'
    verification: Bekræftelse
  webauthn_credentials:
    add: Tilføj ny sikkerhedsnøgle

M config/locales/de.yml => config/locales/de.yml +7 -1
@@ 812,6 812,12 @@ de:
        message_html: Du hast keine Serverregeln definiert.
      sidekiq_process_check:
        message_html: Kein Sidekiq-Prozess läuft für die %{value} Warteschlange(n). Bitte überprüfe deine Sidekiq-Konfiguration
      upload_check_privacy_error:
        action: Für weitere Informationen hier klicken
        message_html: "<strong>Die Konfiguration deines Servers ist fehlerhaft. Die Privatsphäre deiner Benutzer*innen ist gefährdet.</strong>"
      upload_check_privacy_error_object_storage:
        action: Für weitere Informationen hier klicken
        message_html: "<strong>Die Konfiguration deines Objektspeichers ist fehlerhaft. Die Privatsphäre deiner Benutzer*innen ist gefährdet.</strong>"
    tags:
      review: Prüfstatus
      updated_msg: Hashtageinstellungen wurden erfolgreich aktualisiert


@@ 1684,12 1690,12 @@ de:
      title: Willkommen an Bord, %{name}!
  users:
    follow_limit_reached: Du kannst nicht mehr als %{limit} Leuten folgen
    go_to_sso_account_settings: Kontoeinstellungen des Identitätsanbieters aufrufen
    invalid_otp_token: Ungültiger Code der Zwei-Faktor-Authentisierung (2FA)
    otp_lost_help_html: Wenn du beides nicht mehr weißt, melde dich bitte bei uns unter der E-Mail-Adresse %{email}
    seamless_external_login: Du bist über einen externen Dienst angemeldet, daher sind Passwort- und E-Mail-Einstellungen nicht verfügbar.
    signed_in_as: 'Angemeldet als:'
  verification:
    explanation_html: 'Du kannst <strong>bestätigen, dass die Links in deinen Profil-Metadaten dir gehören</strong>. Dafür muss die verlinkte Website einen Link zurück auf dein Mastodon-Profil enthalten. Dieser Link <strong>muss</strong> ein <code>rel="me"</code>-Attribut enthalten. Der Linktext ist dabei egal. Hier ist ein Beispiel:'
    verification: Verifizierung
  webauthn_credentials:
    add: Sicherheitsschlüssel hinzufügen

M config/locales/devise.fi.yml => config/locales/devise.fi.yml +19 -19
@@ 2,17 2,17 @@
fi:
  devise:
    confirmations:
      confirmed: Sähköpostiosoitteesi on vahvistettu onnistuneesti.
      confirmed: Sähköpostiosoitteesi on vahvistettu.
      send_instructions: Saat pian sähköpostitse ohjeet sähköpostiosoitteesi vahvistamiseen. Jos et saanut viestiä, tarkista roskapostikansiosi.
      send_paranoid_instructions: Jos sähköpostiosoitteesi on tietokannassamme, saat pian ohjeet osoitteesi vahvistamiseen. Jos et saanut viestiä, tarkista roskapostikansiosi.
      send_paranoid_instructions: Jos sähköpostiosoitteesi on tiedossammme, saat pian sähköpostiisi ohjeet sen vahvistamiseen. Jos et saanut viestiä, tarkista roskapostikansiosi.
    failure:
      already_authenticated: Olet jo kirjautunut sisään.
      inactive: Tiliäsi ei ole vielä aktivoitu.
      invalid: Virheellinen %{authentication_keys} tai salasana.
      last_attempt: Sinulla on vielä yksi yritys ennen kuin tunnuksesi lukitaan.
      last_attempt: Sinulla on vielä yksi yritys ennen kuin tilisi lukitaan.
      locked: Tilisi on lukittu.
      not_found_in_database: Virheellinen %{authentication_keys} tai salasana.
      pending: Tämä tili on vielä tarkistamatta.
      pending: Tilisi on vielä tarkistamatta.
      timeout: Istuntosi on umpeutunut. Jatka kirjautumalla uudelleen sisään.
      unauthenticated: Sinun pitää kirjautua sisään tai rekisteröityä ennen kuin voit jatkaa.
      unconfirmed: Vahvista sähköpostiosoitteesi, ennen kuin jatkat.


@@ 33,41 33,41 @@ fi:
      password_change:
        explanation: Tilisi salasana on vaihdettu.
        extra: Jos et vaihtanut salasanaasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä. Jos et pääse kirjautumaan tilillesi, ota yhteyttä instanssin ylläpitäjään.
        subject: 'Mastodon: Salasana vaihdettu'
        subject: 'Mastodon: salasana vaihdettu'
        title: Salasana vaihdettu
      reconfirmation_instructions:
        explanation: Vahvista uusi sähköpostiosoite, niin muutos astuu voimaan.
        extra: Jos et tehnyt muutosta itse, voit jättää tämän viestin huomiotta. Mastodon-tilin sähköpostiosoitetta ei vaihdeta, ennen kuin klikkaat yllä olevaa linkkiä.
        subject: 'Mastodon: Vahvista sähköpostiosoite instanssille %{instance}'
        subject: 'Mastodon: vahvista sähköpostiosoite: %{instance}'
        title: Vahvista sähköpostiosoite
      reset_password_instructions:
        action: Vaihda salasana
        explanation: Pyysit tilillesi uuden salasanan.
        extra: Jos et tehnyt pyyntöä itse, voit jättää tämän viestin huomiotta. Salasanaasi ei vaihdeta, ennen kuin klikkaat yllä olevaa linkkiä ja luot uuden salasanan.
        subject: 'Mastodon: Ohjeet salasanan vaihtoon'
        subject: 'Mastodon: ohjeet salasanan vaihtoon'
        title: Salasanan vaihto
      two_factor_disabled:
        explanation: Kaksivaiheinen tunnistus tilillesi on otettu pois käytöstä. Kirjautuminen onnistuu nyt pelkällä sähköpostiosoitteella ja salasanalla.
        subject: 'Mastodon: Kaksivaiheinen tunnistut otettu pois käytöstä'
        title: 2FA poistettu käytöstä
        explanation: Kaksivaiheinen todennus tilillesi poistettiin käytöstä. Kirjautuminen onnistuu nyt käyttäen pelkkää sähköpostiosoitetta ja salasanaa.
        subject: 'Mastodon: kaksivaiheinen todennus poistettu käytöstä'
        title: 2-vaiheinen todennus pois käytöstä
      two_factor_enabled:
        explanation: Kaksivaiheinen tunnistus on otettu käyttöön tilillesi. Koodi kaksivaiheisen tunnistuksen sovelluksesta tarvitaan kirjautumiseen.
        subject: 'Mastodon: Kaksivaiheinen tunnistus otettu käyttöön'
        title: 2FA käytössä
        explanation: Kaksivaiheinen tunnistus on otettu käyttöön tilillesi. Kaksivaiheisen tunnistuksen sovelluksesta saatu koodi tarvitaan kirjautumiseen.
        subject: 'Mastodon: kaksivaiheinen todennus otettu käyttöön'
        title: 2-vaiheinen todennus käytössä
      two_factor_recovery_codes_changed:
        explanation: Aiemmat palautuskoodi on poistettu käytöstä ja uudet on luotu.
        subject: 'Mastodon: Kaksivaiheisen tunnistuksen palautuskoodit uudelleenluotu'
        title: 2FA palautuskoodit vaihdettu
        explanation: Uudet palautuskoodit on nyt luotu ja vanhat on mitätöity.
        subject: 'Mastodon: kaksivaiheisen todennuksen palautuskoodit luotiin uudelleen'
        title: 2-vaiheisen todennuksen palautuskoodit vaihdettiin
      unlock_instructions:
        subject: 'Mastodon: Ohjeet lukituksen poistoon'
        subject: 'Mastodon: lukituksen poistamisen ohjeet'
      webauthn_credential:
        added:
          explanation: Seuraava suojausavain on lisätty tilillesi
          subject: 'Mastodon: Uusi suojausavain'
          subject: 'Mastodon: uusi suojausavain'
          title: Uusi suojausavain on lisätty
        deleted:
          explanation: Seuraava suojausavain on poistettu tililtäsi
          subject: 'Mastodon: Suojausavain poistettu'
          subject: 'Mastodon: suojausavain poistettu'
          title: Yksi suojausavaimistasi on poistettu
      webauthn_disabled:
        explanation: Suojausavaimilla todennus on poistettu käytöstä tililtäsi. Kirjautuminen on nyt mahdollista käyttämällä vain paritetun TOTP-sovelluksen luomaa tokenia.

M config/locales/devise.hu.yml => config/locales/devise.hu.yml +52 -52
@@ 7,43 7,43 @@ hu:
      send_paranoid_instructions: Ha az e-mail címed már szerepel az adatbázisunkban, néhány percen belül kapsz egy levelet az e-mail cím megerősítésére vonatkozó utasításokkal. Kérjük, ellenőrizd a spam mappád, ha nem látod az e-mailt.
    failure:
      already_authenticated: Már bejelentkeztél.
      inactive: A fiókod még nincs aktiválva.
      inactive: A fiók még nincs aktiválva.
      invalid: Helytelen %{authentication_keys} vagy jelszó.
      last_attempt: Már csak egy próbálkozásod maradt, mielőtt a fiókodat zároljuk.
      locked: A fiókodat zároltuk.
      not_found_in_database: Helytelen %{authentication_keys} vagy jelszó.
      pending: A fiókod még engedélyezésre vár.
      pending: A fiók még áttekintés alatt áll.
      timeout: A munkameneted lejárt. Kérjük, a folytatáshoz jelentkezz be újra.
      unauthenticated: A folytatás előtt be kell jelentkezned vagy regisztrálnod kell.
      unconfirmed: A folytatás előtt meg kell erősítened az e-mail címed.
      unconfirmed: A folytatás előtt meg kell erősíteni az email címet.
    mailer:
      confirmation_instructions:
        action: Erősítsd meg az e-mail címedet
        action_with_app: Megerősítés majd vissza ide %{app}
        explanation: Ezzel az e-mail címmel kezdeményeztek regisztrációt a(z) %{host} oldalon. Csak egy kattintás, és a felhasználói fiókodat aktiváljuk. Ha a regisztrációt nem te kezdeményezted, kérjük tekintsd ezt az e-mailt tárgytalannak.
        explanation_when_pending: Ezzel az e-mail címmel meghívást kértél a(z) %{host} oldalon. Ahogy megerősíted az e-mail címed, átnézzük a jelentkezésedet. Ennek ideje alatt nem tudsz belépni. Ha a jelentkezésed elutasítjuk, az adataidat töröljük, más teendőd nincs. Ha a kérelmet nem te kezdeményezted, kérjük tekintsd ezt az e-mailt tárgytalannak.
        extra_html: Tekintsd át a <a href="%{terms_path}">a kiszolgáló szabályait</a> és <a href="%{policy_path}">a felhasználási feltételeket</a>.
        subject: 'Mastodon: Megerősítési lépések ehhez az instancehez: %{instance}'
        title: E-mail cím megerősítése
        action: Email cím ellenőrzése
        action_with_app: 'Megerősítés majd visszatérés: %{app}'
        explanation: Ezzel az email címmel kezdeményeztek regisztrációt %{host} kiszolgálón. Csak egy kattintás, és a felhasználói fiók bekapcsolásra kerül. Ha a regisztráció kezdeményezése téves volt, tekintsük ezt az emailt tárgytalannak.
        explanation_when_pending: Ezzel az email címmel meghívás kérés történt %{host} kiszolgálón. Az email cím megerősítése után a jelentkezés áttekintésre kerül. Ennek ideje alatt nem lehet belépni. Ha a jelentkezés elutasításra kerül, az adatok törlésre kerülnek, más teendő nincs. Ha a kérelem kezdeményezése téves volt, tekintsük ezt az emailt tárgytalannak.
        extra_html: Tekintsük át a <a href="%{terms_path}">a kiszolgáló szabályait</a> és a <a href="%{policy_path}">felhasználási feltételeket</a>.
        subject: 'Mastodon: Megerősítési utasítások: %{instance}'
        title: Email cím megerősítése
      email_changed:
        explanation: 'A fiókodhoz tartozó e-mail cím a következőre változik:'
        extra: Ha nem változtattad meg az e-mail címed, akkor valószínű, hogy valaki hozzáférhetett a fiókodhoz. Kérjük, azonnal változtasd meg a jelszavadat, vagy lépj kapcsolatba a szerver adminisztrátorával, ha ki vagy zárva a fiókodból.
        subject: 'Mastodon: a fiókodhoz tartozó e-mail címet megváltoztattuk'
        title: Új e-mail cím
        subject: 'Mastodon: a fiókhoz tartozó email cím megváltoztatásra került'
        title: Új email cím
      password_change:
        explanation: A fiókodhoz tartozó jelszót megváltoztattuk.
        extra: Ha nem te kérted a fiókod jelszavának módosítását, akkor valaki hozzáférhetett a fiókodhoz. Legjobb, ha azonnal megváltoztatod a jelszavadat; ha nem férsz hozzá a fiókodhoz, vedd fel a kapcsolatot a kiszolgálód adminisztrátorával.
        subject: 'Mastodon: Jelszavad megváltoztattuk'
        title: Sikeres jelszómódosítás
        explanation: A fiókhoz tartozó jelszó megváltoztatásra került.
        extra: Ha a fiók jelszavának módosítási kérelme téves volt, akkor valaki hozzáférhetett a fiókhoz. Legjobb, a jelszó azonnali megváltoztatása vagy ha kizárásra kerültünk a fiókból, vegyük fel a kapcsolatot a kiszolgáló adminisztrátorával.
        subject: 'Mastodon: A jelszó megváltoztatásra került'
        title: A jelszó megváltoztatásra került
      reconfirmation_instructions:
        explanation: Az e-mail cím megváltoztatásához meg kell erősítened az új címet.
        extra: Amennyiben nem te kezdeményezted a módosítást, kérjük tekintsd ezt az e-mailt tárgytalannak. A Mastodon fiókodhoz tartozó e-mail címed változatlan marad mindaddig, amíg rá nem kattintasz a fenti linkre.
        subject: 'Mastodon: erősítsd meg a(z) %{instance} szerverhez tartozó e-mail címed'
        title: E-mail cím megerősítése
        explanation: Az email cím megváltoztatásához meg kell erősíteni az új email címet.
        extra: Amennyiben a kezdeményezés téves volt, tekintsük ezt az emailt tárgytalannak. A Mastodon fiókhoz tartozó email cím változatlan marad a fenti hivatkozásra kattintásig.
        subject: 'Mastodon: Email cím megerősítése: %{instance}'
        title: Email cím megerősítése
      reset_password_instructions:
        action: Jelszó módosítása
        explanation: A fiókodhoz tartozó jelszó módosítását kezdeményezted.
        extra: Amennyiben nem te kezdeményezted a módosítást, kérjük tekintsd ezt az e-mailt tárgytalannak. A Mastodon fiókodhoz tartozó jelszavad változatlan marad mindaddig, amíg újat nem hozol létre a fenti linkre kattintva.
        explanation: A fiókhoz tartozó jelszó módosítása kezdeményezésre került.
        extra: Amennyiben a kezdeményezés téves volt, tekintsük ezt az emailt tárgytalannak. A Mastodon fiókhoz tartozó jelszó változatlan marad a fenti hivatkozásra kattintásig.
        subject: 'Mastodon: Jelszó visszaállítási lépések'
        title: Jelszó visszaállítása
      two_factor_disabled:


@@ 55,54 55,54 @@ hu:
        subject: Kétlépcsős azonosítás engedélyezve
        title: Kétlépcsős hitelesítés engedélyezve
      two_factor_recovery_codes_changed:
        explanation: A korábbi helyreállítási kódokat letiltottuk, és újakat generáltunk.
        explanation: A korábbi helyreállítási kódok letiltásra és újragenerálásra kerültek.
        subject: Kétlépcsős helyreállítási kódok újra létrejöttek
        title: A kétlépcsős kódok megváltozott
        title: A kétlépcsős kódok megváltoztak
      unlock_instructions:
        subject: 'Mastodon: Feloldási lépések'
      webauthn_credential:
        added:
          explanation: A következő biztonsági kulcsot hozzáadtuk a fiókodhoz
          explanation: A következő biztonsági kulcs a fiókhoz hozzáadásra került
          subject: 'Mastodon: Új biztonsági kulcs'
          title: Új biztonsági kulcsot vettünk fel
          title: Új biztonsági kulcs lett hozzáadva
        deleted:
          explanation: A következő biztonsági kulcsot töröltük a fiókodból
          subject: 'Mastodon: Biztonsági kulcs törölve'
          title: Az egyik biztonsági kulcsodat törölték
          explanation: A következő biztonsági kulcs törlésre került a fiókból
          subject: 'Mastodon: A biztonsági kulcs törlésre került'
          title: Az egyik biztonsági kulcs törlésre került
      webauthn_disabled:
        explanation: A biztonsági kulccsal történő hitelesítést letiltottuk a fiókodon. Bejelentkezni csak a párosított TOTP app által generált tokennel lehet.
        subject: 'Mastodon: Biztonsági kulccsal történő hitelesítés letiltva'
        title: Biztonsági kulcsok letiltva
        explanation: A biztonsági kulccsal történő hitelesítés letiltásra kerüt a fióknál. Bejelentkezni csak a párosított TOTP app által generált vezérjellel lehet.
        subject: 'Mastodon: A biztonsági kulccsal történő hitelesítés letiltásra került'
        title: A bztonsági kulcsok letiltásra kerültek
      webauthn_enabled:
        explanation: A biztonsági kulccsal történő hitelesítést engedélyeztük a fiókodon. A biztonsági kulcsodat mostantól használhatod bejelentkezésre.
        subject: 'Mastodon: Biztonsági kulcsos hitelesítés engedélyezve'
        title: Biztonsági kulcsok engedélyezve
        explanation: A biztonsági kulccsal történő hitelesítést engedélyezve lett a fióknál. A biztonsági kulcs mostantól használható a bejelentkezésre.
        subject: 'Mastodon: A biztonsági kulcsos hitelesítés engedélyezésre került'
        title: A bztonsági kulcsok engedélyezésre kerültek
    omniauth_callbacks:
      failure: Sikertelen hitelesítés %{kind} fiókról, mert "%{reason}".
      success: Sikeres hitelesítés %{kind} fiókról.
    passwords:
      no_token: Nem férhetsz hozzá ehhez az oldalhoz jelszó visszaállító e-mail nélkül. Ha egy jelszó visszaállító e-mail hozott ide, ellenőrizd, hogy a megadott teljes URL-t használd.
      send_instructions: Pár percen belül kapni fogsz egy e-mailt arról, hogy hogyan tudod visszaállítani a jelszavadat. Kérlek ellenőrizd a levélszemét mappádat, ha nem kaptál ilyen e-mailt.
      send_paranoid_instructions: Ha létezik az e-mail cím, pár percen belül kapni fogsz egy e-mailt arról, hogy hogyan tudod visszaállítani a jelszavadat. Kérlek ellenőrizd a levélszemét mappádat, ha nem kaptál ilyen e-mailt.
      updated: Jelszavad sikeresen frissült. Bejelentkeztél.
      updated_not_active: Jelszavad sikeresen megváltoztattuk.
      no_token: Nem lehet hozzáférni ehhez az oldalhoz jelszó visszaállító email nélkül. Ha egy jelszó visszaállító email miatt érkeztünk ide, ellenőrizzük a megadott teljes webcím használatát.
      send_instructions: Ha az email cím létezik az adatbázisban, néhány perc alatt megérkezik jelszó helyreállítási hivatkozás az email címre. Ellenőrizzük a spam mappát, ha nem érkezett meg ez az email.
      send_paranoid_instructions: Ha az email cím létezik az adatbázisban, néhány perc alatt megérkezik jelszó helyreállítási hivatkozás az email címre. Ellenőrizzük a spam mappát, ha nem érkezett meg ez az email.
      updated: A jelszó sikeresen megváltozott. Megtörtént a bejelentkezés.
      updated_not_active: A jelszó sikeresen megváltoztatásra került.
    registrations:
      destroyed: Viszlát! A fiókodat sikeresen töröltük. Reméljük hamarosan viszontláthatunk.
      signed_up: Üdvözlünk! Sikeresen regisztráltál.
      signed_up_but_inactive: Sikeresen regisztráltál. Ennek ellenére nem tudunk beléptetni, ugyanis a fiókodat még nem aktiválták.
      signed_up_but_locked: Sikeresen regisztráltál. Ennek ellenére nem tudunk beléptetni, ugyanis a fiókod le van zárva.
      destroyed: Viszontásátásra! A fiók sikeresen törlésre került. Reméljük hamarosan visszatér.
      signed_up: Üdvözlet! A regisztráció sikeres volt.
      signed_up_but_inactive: A regisztráció sikeres volt. Ennek ellenére nem lehet belépni, mert a fiók még nem lett aktiválva.
      signed_up_but_locked: A regisztráció sikeres volt. Ennek ellenére nem lehet belépni, mert a fiók lezárásra került.
      signed_up_but_pending: Egy megerősítési hivatkozással ellátott üzenetet kiküldtünk az e-mail címedre. Ha kattintasz a hivatkozásra, átnézzük a kérelmedet. Értesítünk, ha jóváhagytuk.
      signed_up_but_unconfirmed: Egy megerősítési hivatkozással ellátott üzenetet kiküldtünk az e-mail címedre. Kérjük használd a hivatkozást a fiókod aktiválásához. Ellenőrizd a spam mappádat, ha nem kaptad meg ezt a levelet.
      update_needs_confirmation: Sikeresen frissítetted a fiókodat, de szükségünk van az e-mail címed megerősítésére. Kérlek ellenőrizd az e-mailedet és kövesd a levélben szereplő megerősítési linket az e-mail címed megerősítéséhez. Ellenőrizd a levélszemét mappád, ha nem kaptál volna ilyen levelet.
      updated: Fiókod frissítése sikeres.
      update_needs_confirmation: A fiókodat sikeresen frissítésre került, de szükség van az email cím megerősítésére. Ellenőrizzük az emailt és kövessük a benne levő megerősítési hivatkozást az email cím megerősítéséhez. Ellenőrizzük a levélszemét mappát, ha nemérkezett volna meg ez az email.
      updated: A fiók sikeresen frissítésre került.
    sessions:
      already_signed_out: Sikeres kijelentkezés.
      signed_in: Sikeres bejelentkezés.
      signed_out: Sikeres kijelentkezés.
      already_signed_out: A kijelentkezés sikeres volt.
      signed_in: A bejelentkezés sikeres volt.
      signed_out: A kijelentkezés sikeres volt.
    unlocks:
      send_instructions: Pár percen belül egy e-mailt fogsz kapni a feloldáshoz szükséges lépésekkel. Ellenőrizd a levélszemét mappád, ha nem kaptál volna ilyen levelet.
      send_paranoid_instructions: Ha a fiókod létezik, pár percen belül egy e-mailt fogsz kapni a feloldáshoz szükséges lépésekkel. Ellenőrizd a levélszemét mappád, ha nem kaptál volna ilyen levelet.
      unlocked: A fiókodat sikeresen feloldottuk. Jelentkezz be a folytatáshoz.
      send_instructions: Néhány perc múlva egy email érkezik a fiók feloldásáról. Ellenőrizzük a spam mappát, ha nem érkezett volna meg at email.
      send_paranoid_instructions: Ha a fiók létezik, pár percen belül egy email érkezik a feloldáshoz szükséges lépésekkel. Ellenőrizzük a levélszemét mappát, ha nem érkezett volna ilyen email.
      unlocked: A fiók sikeresen feloldásra került. Jelentkezzünk be a folytatáshoz.
  errors:
    messages:
      already_confirmed: már meg lett erősítve, kérjük jelentkezz be

M config/locales/devise.zh-TW.yml => config/locales/devise.zh-TW.yml +3 -3
@@ 82,8 82,8 @@ zh-TW:
      success: 成功透過 %{kind} 帳號登入。
    passwords:
      no_token: 您必須透過密碼重設信件才能存取此頁面。若確實如此,請確定輸入的網址是完整的。
      send_instructions: 若電子郵件地址存在於我們的資料庫,幾分鐘後您將在信箱中收到密碼復原連結。若未收到請檢查垃圾郵件資料夾。
      send_paranoid_instructions: 若電子郵件地址存在於我們的資料庫,幾分鐘後您將在信箱中收到密碼復原連結。若未收到請檢查垃圾郵件資料夾。
      send_instructions: 若電子郵件地址存在於我們的資料庫,幾分鐘後您將於信箱中收到密碼復原連結。若未收到請檢查垃圾郵件資料夾。
      send_paranoid_instructions: 若電子郵件地址存在於我們的資料庫,幾分鐘後您將於信箱中收到密碼復原連結。若未收到請檢查垃圾郵件資料夾。
      updated: 您的密碼已成功變更,現在已經登入。
      updated_not_active: 您的密碼已成功變更。
    registrations:


@@ 101,7 101,7 @@ zh-TW:
      signed_out: 已成功登出。
    unlocks:
      send_instructions: 幾分鐘後您將收到解鎖帳號的指引信件。若未收到請檢查垃圾郵件資料夾。
      send_paranoid_instructions: 若此帳號存在,您將在幾分鐘後收到解鎖指引信件。若未收到請檢查垃圾郵件資料夾。
      send_paranoid_instructions: 若此帳號存在,您將於幾分鐘後收到解鎖指引信件。若未收到請檢查垃圾郵件資料夾。
      unlocked: 已解鎖您的帳號,請登入繼續。
  errors:
    messages:

M config/locales/doorkeeper.fi.yml => config/locales/doorkeeper.fi.yml +11 -11
@@ 14,14 14,14 @@ fi:
            redirect_uri:
              fragment_present: ei voi sisältää osia.
              invalid_uri: on oltava kelvollinen URI.
              relative_uri: on oltava täydellinen URI.
              relative_uri: on oltava täysi URI.
              secured_uri: on oltava HTTPS/SSL-URI.
  doorkeeper:
    applications:
      buttons:
        authorize: Valtuuta
        cancel: Peruuta
        destroy: Tuhoa
        destroy: Poista
        edit: Muokkaa
        submit: Lähetä
      confirmations:


@@ 29,11 29,11 @@ fi:
      edit:
        title: Muokkaa sovellusta
      form:
        error: Hups! Tarkista, että lomakkeessa ei ole virheitä
        error: Hupsis! Tarkista, ettei lomakkeessasi ole virheitä
      help:
        native_redirect_uri: Käytä %{native_redirect_uri} paikallisiin testeihin
        redirect_uri: Lisää jokainen URI omalle rivilleen
        scopes: Erota oikeudet välilyönnein. Jos kenttä jätetään tyhjäksi, käytetään oletusoikeuksia.
        scopes: Erota oikeudet välilyönneillä. Jätä kenttä tyhjäksi, jos haluat käyttää oletusoikeuksia.
      index:
        application: Sovellus
        callback_url: Takaisinkutsu-URL


@@ 48,19 48,19 @@ fi:
        title: Uusi sovellus
      show:
        actions: Toiminnot
        application_id: Asiakasohjelman tunnus
        application_id: Ohjelman tunnus
        callback_urls: Takaisinkutsu-URL:t
        scopes: Oikeudet
        secret: Asiakasohjelman salainen avain
        secret: Ohjelman salaisuus
        title: 'Sovellus: %{name}'
    authorizations:
      buttons:
        authorize: Valtuuta
        deny: Evää
        deny: Estä
      error:
        title: Tapahtui virhe
      new:
        prompt_html: "%{client_name} pyytää lupaa käyttää tiliäsi. Se on kolmannen osapuolen sovellus. <strong>Jos et luota siihen, sinun ei pitäisi sallia sitä.</strong>"
        prompt_html: "%{client_name} pyytää lupaa käyttää tiliäsi. Se on kolmannen osapuolen sovellus. <strong>Jos et luota siihen, älä valtuuta sitä.</strong>"
        review_permissions: Tarkista käyttöoikeudet
        title: Valtuutus vaaditaan
      show:


@@ 81,7 81,7 @@ fi:
    errors:
      messages:
        access_denied: Resurssin omistaja tai valtuutuspalvelin hylkäsi pyynnön.
        credential_flow_not_configured: Resurssin omistajan salasana epäonnistui, koska asetusta Doorkeeper.configure.resource_owner_from_credentials ei ole konfiguroitu.
        credential_flow_not_configured: Resurssin omistajan salasanatietojen luku epäonnistui, koska asetusta Doorkeeper.configure.resource_owner_from_credentials ei ole konfiguroitu.
        invalid_client: Asiakasohjelman valtuutus epäonnistui, koska asiakas on tuntematon, asiakkaan valtuutus ei ollut mukana tai valtuutustapaa ei tueta.
        invalid_grant: Valtuutuslupa on virheellinen, umpeutunut, peruttu, valtuutuspyynnössä käytettyä uudelleenohjaus-URI:tä vastaamaton tai myönnetty toiselle asiakkaalle.
        invalid_redirect_uri: Uudelleenohjaus-URI on virheellinen.


@@ 111,12 111,12 @@ fi:
          notice: Sovellus päivitetty.
      authorized_applications:
        destroy:
          notice: Sovellus peruttu.
          notice: Sovellus poistettu.
    grouped_scopes:
      access:
        read: Vain luku
        read/write: Luku- ja kirjoitusoikeudet
        write: Vain kirjoitus
        write: Vain kirjoitusoikeus
      title:
        accounts: Tilit
        admin/accounts: Tilien hallinta

M config/locales/doorkeeper.gl.yml => config/locales/doorkeeper.gl.yml +3 -3
@@ 120,7 120,7 @@ gl:
      title:
        accounts: Contas
        admin/accounts: Administración das contas
        admin/all: Tódalas funcións administrativas
        admin/all: Todas as funcións administrativas
        admin/reports: Administración das denuncias
        all: Acceso completo á túa conta de Mastodon
        blocks: Bloqueos


@@ 129,7 129,7 @@ gl:
        crypto: Cifrado extremo-a-extremo
        favourites: Favoritas
        filters: Filtros
        follow: Seguidas, Silenciadas e Bloqueadas
        follow: Seguidas, Acaladas e Bloqueadas
        follows: Seguimentos
        lists: Listas
        media: Anexos multimedia


@@ 150,7 150,7 @@ gl:
      admin:read: ler todos os datos no servidor
      admin:read:accounts: ler información sensible de todas as contas
      admin:read:canonical_email_blocks: ler a información sensíbel de tódolos bloqueos de correos electrónicos canónicos
      admin:read:domain_allows: ler a información sensible de tódolos dominios permitidos
      admin:read:domain_allows: ler a información sensible de todos os dominios permitidos
      admin:read:domain_blocks: ler a información sensible de tódolos bloqueos de dominio
      admin:read:email_domain_blocks: ler a información sensible de tódolos dominios de correo electrónico
      admin:read:ip_blocks: ler a información sensible de tódolos bloqueos de IP

M config/locales/doorkeeper.ko.yml => config/locales/doorkeeper.ko.yml +8 -8
@@ 40,7 40,7 @@ ko:
        delete: 삭제
        empty: 앱이 없습니다.
        name: 이름
        new: 새로운 앱
        new: 새 애플리케이션
        scopes: 범위
        show: 표시
        title: 내 응용프로그램


@@ 67,12 67,12 @@ ko:
        title: 이 승인 코드를 복사해 앱에 붙여 넣어야 합니다.
    authorized_applications:
      buttons:
        revoke: 삭제
        revoke: 취소
      confirmations:
        revoke: 확실합니까?
      index:
        authorized_at: "%{date}에 승인됨"
        description_html: 이 계정에 API를 통해 접근 가능한 앱의 목록입니다. 알 수 없는 앱이나 잘못된 행위를 하는 앱이 있다면 권한을 취소할 수 있습니다.
        description_html: 이 계정에 API를 통해 접근 가능한 애플리케이션의 목록입니다. 알 수 없는 애플리케이션이나 잘못된 행위를 하는 애플리케이션이 있다면 권한을 취소할 수 있습니다.
        last_used_at: "%{date}에 마지막으로 사용됨"
        never_used: 사용되지 않음
        scopes: 권한


@@ 93,7 93,7 @@ ko:
        invalid_scope: 요청한 범위가 올바르지 않거나, 알 수 없거나, 잘못 된 형식입니다.
        invalid_token:
          expired: 액세스 토큰이 만료되었습니다.
          revoked: 액세스 토큰이 삭제되었습니다.
          revoked: 액세스 토큰이 취소되었습니다.
          unknown: 액세스 토큰이 잘못되었습니다.
        resource_owner_authenticator_not_configured: Doorkeeper.configure.resource_owner_authenticator가 설정되지 않아 리소스 소유자 찾기가 실패하였습니다.
        server_error: 권한 부여 서버에 예기치 않은 상태가 발생하여, 요청을 수행할 수 없습니다.


@@ 104,14 104,14 @@ ko:
    flash:
      applications:
        create:
          notice: 앱이 생성 되었습니다.
          notice: 애플리케이션을 만들었습니다.
        destroy:
          notice: 앱을 삭제했습니다.
          notice: 애플리케이션을 삭제하였습니다.
        update:
          notice: 앱을 갱신했습니다.
          notice: 애플리케이션을 갱신했습니다.
      authorized_applications:
        destroy:
          notice: 운영자에 의해 앱이 해지되었습니다.
          notice: 애플리케이션을 취소하였습니다.
    grouped_scopes:
      access:
        read: 읽기 전용 권한

M config/locales/doorkeeper.th.yml => config/locales/doorkeeper.th.yml +1 -1
@@ 99,7 99,7 @@ th:
        server_error: เซิร์ฟเวอร์การรับรองความถูกต้องพบเงื่อนไขที่ไม่คาดคิดซึ่งป้องกันไม่ให้เซิร์ฟเวอร์ดำเนินการตามคำขอ
        temporarily_unavailable: เซิร์ฟเวอร์การรับรองความถูกต้องไม่สามารถจัดการคำขอได้ในปัจจุบันเนื่องจากการทำงานเกินพิกัดชั่วคราวหรือการบำรุงรักษาเซิร์ฟเวอร์
        unauthorized_client: ไคลเอ็นต์ไม่ได้รับอนุญาตให้ทำคำขอนี้โดยใช้วิธีการนี้
        unsupported_grant_type: ชนิดการให้การรับรองความถูกต้องไม่รองรับโดยเซิร์ฟเวอร์การรับรองความถูกต้อง
        unsupported_grant_type: ไม่รองรับชนิดการให้การรับรองความถูกต้องโดยเซิร์ฟเวอร์การรับรองความถูกต้อง
        unsupported_response_type: เซิร์ฟเวอร์การอนุญาตไม่รองรับชนิดการตอบสนองนี้
    flash:
      applications:

M config/locales/el.yml => config/locales/el.yml +474 -187
@@ 11,17 11,17 @@ el:
    followers:
      one: Ακόλουθος
      other: Ακόλουθοι
    following: Ακολουθεί
    instance_actor_flash: Αυτός ο λογαριασμός είναι εικονικός και χρησιμοποιείται για να αντιπροσωπεύει τον ίδιο τον εξυπηρετητή και όχι κάποιον μεμονωμένο χρήστη. Χρησιμοποιείται για ομοσπονδιακούς σκοπούς και δεν πρέπει να ανασταλεί.
    following: Ακολουθείτε
    instance_actor_flash: Αυτός ο λογαριασμός είναι εικονικός και χρησιμοποιείται για να αντιπροσωπεύει τον ίδιο τον διακομιστή και όχι κάποιον μεμονωμένο χρήστη. Χρησιμοποιείται για ομοσπονδιακούς σκοπούς και δεν πρέπει να ανασταλεί.
    last_active: τελευταία ενεργός/ή
    link_verified_on: Η κυριότητα αυτού του συνδέσμου ελέγχθηκε στις %{date}
    link_verified_on: Η ιδιοκτησία αυτού του συνδέσμου ελέγχθηκε στις %{date}
    nothing_here: Δεν υπάρχει τίποτα εδώ!
    pin_errors:
      following: Πρέπει ήδη να ακολουθείς το άτομο που θέλεις να επιδοκιμάσεις
    posts:
      one: Τουτ
      other: Τουτ
    posts_tab_heading: Τουτ
      one: Ανάρτηση
      other: Αναρτήσεις
    posts_tab_heading: Αναρτήσεις
  admin:
    account_actions:
      action: Εκτέλεση ενέργειας


@@ 31,11 31,11 @@ el:
      created_msg: Επιτυχής δημιουργία σημειώματος συντονισμού!
      destroyed_msg: Η σημείωση συντονισμού καταστράφηκε επιτυχώς!
    accounts:
      add_email_domain_block: Εγγραφή τομέα email σε μαύρη λίστα
      add_email_domain_block: Αποκλεισμός τομέα email
      approve: Έγκριση
      approved_msg: Επιτυχής έγκριση αίτησης εγγραφής του/της %{username}
      are_you_sure: Σίγουρα;
      avatar: Αβατάρ
      avatar: Άβαταρ
      by_domain: Τομέας
      change_email:
        changed_msg: Το email άλλαξε επιτυχώς!


@@ 57,27 57,27 @@ el:
      deleted: Διαγραμμένοι
      demote: Υποβίβαση
      destroyed_msg: Τα δεδομένα του/της %{username} εκκρεμούν για άμεση διαγραφή
      disable: Απενεργοποίηση
      disable: Πάγωμα
      disable_sign_in_token_auth: Απενεργοποίηση επαλήθευσης μέσω email
      disable_two_factor_authentication: Απενεργοποίηση 2FA
      disabled: Απενεργοποιημένο
      display_name: Όνομα εμφάνισης
      disabled: Παγωμένος
      display_name: Εμφανιζόμενο όνομα
      domain: Τομέας
      edit: Επεξεργασία
      email: Email
      email_status: Κατάσταση email
      enable: Ενεργοποίηση
      enable: Ξεπάγωμα
      enable_sign_in_token_auth: Ενεργοποίηση ελέγχου ταυτότητας μέσω e-mail
      enabled: Ενεργοποιημένο
      enabled_msg: Επιτυχές ξεπάγωμα λογαριασμού του/της %{username}
      followers: Ακόλουθοι
      follows: Ακολουθεί
      header: Επικεφαλίδα
      header: Κεφαλίδα
      inbox_url: URL εισερχομένων
      invite_request_text: Λόγοι για εγγραφή
      invite_request_text: Λόγοι για συμμετοχή
      invited_by: Προσκλήθηκε από
      ip: IP
      joined: Γράφτηκε
      joined: Έγινε μέλος
      location:
        all: Όλες
        local: Τοπική


@@ 85,15 85,15 @@ el:
        title: Τοποθεσία
      login_status: Κατάσταση σύνδεσης
      media_attachments: Συνημμένα πολυμέσα
      memorialize: Μετατροπή σε νεκρολογία
      memorialized: Μετατροπή σε αναμνηστικό
      memorialized_msg: Επιτυχής μετατροπή λογαριασμού του/της %{username} σε αναμνηστικό
      memorialize: Μετατροπή σε εις μνήμην
      memorialized: Μετατράπηκε σε εις μνήμην
      memorialized_msg: Επιτυχής μετατροπή λογαριασμού του/της %{username} σε εις μνήμην
      moderation:
        active: Ενεργός/ή
        all: Όλα
        active: Ενεργός
        all: Όλοι
        disabled: Απενεργοποιημένο
        pending: Εκκρεμούν
        silenced: Περιορισμένοι
        silenced: Περιορισμένη
        suspended: Σε αναστολή
        title: Συντονισμός
      moderation_notes: Σημειώσεις συντονισμού


@@ 102,8 102,8 @@ el:
      no_account_selected: Κανείς λογαριασμός δεν ενημερώθηκε αφού κανείς δεν ήταν επιλεγμένος
      no_limits_imposed: Χωρίς όρια
      no_role_assigned: Δεν έχει ανατεθεί ρόλος
      not_subscribed: Άνευ συνδρομής
      pending: Εκκρεμεί έγκριση
      not_subscribed: Δεν έγινε εγγραφή
      pending: Εκκρεμεί αξιολόγηση
      perform_full_suspension: Αναστολή
      previous_strikes: Προηγούμενα παραπτώματα
      previous_strikes_description_html:


@@ 113,15 113,15 @@ el:
      protocol: Πρωτόκολλο
      public: Δημόσιο
      push_subscription_expires: Η εγγραφή PuSH λήγει
      redownload: Ανανέωση αβατάρ
      redownloaded_msg: Επιτυχής ανανέωη προφίλ του/της %{username} από την πηγή
      redownload: Ανανέωση άβαταρ
      redownloaded_msg: Επιτυχής ανανέωση προφίλ του/της %{username} από την πηγή
      reject: Απόρριψη
      rejected_msg: Επιτυχής απόρριψη αίτησης εγγραφής του/της %{username}
      remote_suspension_irreversible: Τα δεδομένα αυτού του λογαριασμού έχουν διαγραφεί αμετάκλητα.
      remote_suspension_reversible_hint_html: Ο λογαριασμός έχει ανασταλλεί στον server του και τα δεδομένα του θα διαγραφούν πλήρως στις %{date}. Μέχρι τότε, ο απομακρυσμένος server μπορεί να επαναφέρει τον λογαριασμό χωρίς επιπτώσεις. Αν θέλεις να διαγράψεις αμέσως όλα τα δεδομένα του λογαριασμού, μπορείς να το κάνεις παρακάτω.
      remove_avatar: Απομακρυσμένο αβατάρ
      remove_header: Αφαίρεση επικεφαλίδας
      removed_avatar_msg: Επιτυχής αφαίρεση εικόνας προφίλ του/της%{username}
      remote_suspension_reversible_hint_html: Ο λογαριασμός έχει ανασταλλεί στον διακομιστή του και τα δεδομένα του θα διαγραφούν πλήρως στις %{date}. Μέχρι τότε, ο απομακρυσμένος διακομιστής μπορεί να επαναφέρει τον λογαριασμό χωρίς επιπτώσεις. Αν θέλεις να διαγράψεις αμέσως όλα τα δεδομένα του λογαριασμού, μπορείς να το κάνεις παρακάτω.
      remove_avatar: Αφαίρεση άβαταρ
      remove_header: Αφαίρεση κεφαλίδας
      removed_avatar_msg: Επιτυχής αφαίρεση εικόνας προφίλ του/της %{username}
      removed_header_msg: Επιτυχής αφαίρεση εικόνας κεφαλίδας του/της %{username}
      resend_confirmation:
        already_confirmed: Ήδη επιβεβαιωμένος χρήστης


@@ 139,14 139,14 @@ el:
        only_password: Μόνο κωδικός πρόσβασης
        password_and_2fa: Κωδικός πρόσβασης και 2FA
      sensitive: Ευαίσθητο
      sensitized: σήμανση ως ευαίσθητο
      sensitized: Επισημάνθηκε ως ευαίσθητος
      shared_inbox_url: URL κοινόχρηστων εισερχομένων
      show:
        created_reports: Αναφορές από αυτόν το λογαριασμό
        targeted_reports: Αναφορές για αυτόν το λογαριασμό
      silence: Αποσιώπησε
      silenced: Αποσιωπημένοι
      statuses: Καταστάσεις
        created_reports: Αναφορές από τον ίδιο
        targeted_reports: Αναφορές από άλλους
      silence: Περιορισμός
      silenced: Περιορισμένος
      statuses: Αναρτήσεις
      strikes: Προηγούμενα παραπτώματα
      subscribe: Εγγραφή
      suspend: Αναστολή


@@ 154,20 154,20 @@ el:
      suspension_irreversible: Τα δεδομένα αυτού του λογαριασμού έχουν διαγραφεί οριστικά. Μπορείς να άρεις την αναστολή του λογαριασμού για να μπορέσει να χρησιμοποιηθεί αλλά αυτό δεν θα επαναφέρει όσα δεδομένα είχε προηγουμένως.
      suspension_reversible_hint_html: Ο λογαριασμός έχει ανασταλλεί και τα δεδομένα του θα διαγραφούν πλήρως στις %{date}. Μέχρι τότε ο λογαριασμός μπορεί να επανέλθει κανονικά. Αν θέλεις να διαγράψεις όλα τα δεδομένα του λογαριασμού, μπορείς να το κάνεις παρακάτω.
      title: Λογαριασμοί
      unblock_email: Ξεμπλοκάρισμα διεύθυνσης email
      unblocked_email_msg: Επιτυχής κατάργηση αποκλεισμού διεύθυνσης ηλεκτρονικού ταχυδρομείου %{username}
      unblock_email: Άρση αποκλεισμού διεύθυνσης email
      unblocked_email_msg: Επιτυχής άρση αποκλεισμού διεύθυνσης email %{username}
      unconfirmed_email: Ανεπιβεβαίωτο email
      undo_sensitized: Αναίρεση ευαίσθητου
      undo_silenced: Αναίρεση αποσιώπησης
      undo_sensitized: Άρση ευαίσθητου
      undo_silenced: Άρση περιορισμού
      undo_suspension: Αναίρεση παύσης
      unsilenced_msg: Επιτυχής άρση περιορισμών λογαριασμού του/της %{username}
      unsubscribe: Κατάργηση εγγραφής
      unsuspended_msg: Επιτυχής άρση αναστολής λογαριασμού του/της %{username}
      username: Όνομα χρήστη
      view_domain: Προβολή περίληψης για τομέα
      view_domain: Προβολή περίληψης τομέα
      warn: Προειδοποίηση
      web: Διαδίκτυο
      whitelisted: Εγκεκριμένοι
      whitelisted: Εγκεκριμένοι για συναλλαγές
    action_logs:
      action_types:
        approve_appeal: Έγκριση Έφεσης


@@ 180,9 180,9 @@ el:
        create_announcement: Δημιουργία Ανακοίνωσης
        create_canonical_email_block: Δημιουργία αποκλεισμού e-mail
        create_custom_emoji: Δημιουργία Προσαρμοσμένου Emoji
        create_domain_allow: Δημιουργία Επιτρεπτού Τομέα
        create_domain_block: Δημιουργία Αποκλεισμένου Τομέα
        create_email_domain_block: Δημουργία Αποκλεισμένου Τομέα email
        create_domain_allow: Δημιουργία ΑποδεκτούΤομέα
        create_domain_block: Δημιουργία Αποκλεισμού Τομέα
        create_email_domain_block: Δημουργία Αποκλεισμού Τομέα email
        create_ip_block: Δημιουργία κανόνα IP
        create_unavailable_domain: Δημιουργία Μη Διαθέσιμου Τομέα
        create_user_role: Δημιουργία ρόλου


@@ 190,7 190,7 @@ el:
        destroy_announcement: Διαγραφή Ανακοίνωσης
        destroy_canonical_email_block: Διαγραφή Αποκλεισμού email
        destroy_custom_emoji: Διαγραφή Προσαρμοσμένου Emoji
        destroy_domain_allow: Διαγραφή Επιτρεπτού Τομέα
        destroy_domain_allow: Διαγραφή Αποδεκτού Τομέα
        destroy_domain_block: Διαγραφή Αποκλεισμού Τομέα
        destroy_email_domain_block: Διαγραφή Αποκλεισμένου Τομέα email
        destroy_instance: Εκκαθάριση Τομέα


@@ 205,33 205,33 @@ el:
        enable_custom_emoji: Ενεργοποίηση Προσαρμοσμένων Emoji
        enable_sign_in_token_auth_user: Ενεργοποίηση Ελέγχου Ταυτότητας Μέσω E-mail για το Χρήστη
        enable_user: Ενεργοποίηση Χρήστη
        memorialize_account: Μετατροπή Λογαριασμού σε Αναμνηστικό
        memorialize_account: Μετατροπή Λογαριασμού σε Εις Μνήμην
        promote_user: Προαγωγή Χρήστη
        reject_appeal: Απόρριψη Έφεσης
        reject_user: Απόρριψη Χρήστη
        remove_avatar_user: Αφαίρεση Avatar
        reopen_report: Ξανάνοιγμα Καταγγελίας
        remove_avatar_user: Αφαίρεση Άβαταρ
        reopen_report: Ξανάνοιγμα Ανααφοράς
        resend_user: Επαναποστολή του email επιβεβαίωσης
        reset_password_user: Επαναφορά Συνθηματικού
        resolve_report: Επίλυση Καταγγελίας
        sensitive_account: Σήμανση των πολυμέσων στον λογαριασμό σας ως ευαίσθητων
        silence_account: Σίγαση Λογαριασμού
        resolve_report: Επίλυση Αναφοράς
        sensitive_account: Ευαίσθητος Λογιαριασμός
        silence_account: Περιορισμός Λογαριασμού
        suspend_account: Αναστολή Λογαριασμού
        unassigned_report: Αποδέσμευση Καταγγελίας
        unblock_email_account: Ξεμπλοκάρισμα διεύθυνσης email
        unsensitive_account: Αφαίρεση σήμανσης των πολυμέσων στον λογαριασμό σας ως ευαίσθητων
        unsilence_account: Άρση Σίγασης Λογαριασμού
        unassigned_report: Αποδέσμευση Αναφοράς
        unblock_email_account: Άρση αποκλεισμού διεύθυνσης email
        unsensitive_account: Άρση επισήμανσης Λογαριασμού ως Ευαίσθητο
        unsilence_account: Άρση Περιορισμού Λογαριασμού
        unsuspend_account: Άρση Αναστολής Λογαριασμού
        update_announcement: Ενημέρωση Ανακοίνωσης
        update_custom_emoji: Ενημέρωση Προσαρμοσμένου Emoji
        update_domain_block: Ενημέρωση Αποκλεισμού Τομέα
        update_ip_block: Ενημέρωση κανόνα IP
        update_status: Ενημέρωση Κατάστασης
        update_status: Ενημέρωση Ανάρτησης
        update_user_role: Ενημέρωση ρόλου
      actions:
        approve_appeal_html: Ο/Η %{name} ενέκρινε την ένσταση της απόφασης των συντονιστών από %{target}
        approve_user_html: "%{name} εγκρίθηκε εγγραφή από %{target}"
        assigned_to_self_report_html: Ο/Η %{name} ανάθεσε την καταγγελία %{target} στον εαυτό του/της
        approve_user_html: ο/η %{name} ενέκρινε την εγγραφή του %{target}
        assigned_to_self_report_html: Ο/Η %{name} ανάθεσε την αναφορά %{target} στον εαυτό του/της
        change_email_user_html: Ο/Η %{name} άλλαξε τη διεύθυνση email του χρήστη %{target}
        change_role_user_html: Ο/Η %{name} άλλαξε ρόλο του/της %{target}
        confirm_user_html: Ο/Η %{name} επιβεβαίωσε τη διεύθυνση email του χρήστη %{target}


@@ 239,7 239,7 @@ el:
        create_announcement_html: Ο/Η %{name} δημιούργησε νέα ανακοίνωση %{target}
        create_canonical_email_block_html: Ο/Η %{name} απέκλεισε e-mail με το hash %{target}
        create_custom_emoji_html: Ο/Η %{name} ανέβασε νέο emoji %{target}
        create_domain_allow_html: Ο/Η %{name} έβαλε τον τομέα %{target} σε λευκή λίστα
        create_domain_allow_html: Ο/Η %{name} επέτρεψε την συναλλαγή με τον τομέα %{target}
        create_domain_block_html: Ο/Η %{name} απέκλεισε τον τομέα %{target}
        create_email_domain_block_html: Ο/Η %{name} απέκλεισε τον τομέα email %{target}
        create_ip_block_html: Ο/Η %{name} δημιούργησε κανόνα για την IP %{target}


@@ 257,18 257,18 @@ el:
        destroy_status_html: Ο/Η %{name} αφαίρεσε την ανάρτηση του/της %{target}
        destroy_unavailable_domain_html: Ο/Η %{name} ξανάρχισε να τροφοδοτεί το domain %{target}
        destroy_user_role_html: Ο/Η %{name} διέγραψε τον ρόλο του %{target}
        disable_2fa_user_html: Ο/Η %{name} απενεργοποίησε το two factor requirement για τον χρήστη %{target}
        disable_2fa_user_html: Ο/Η %{name} απενεργοποίησε την απαίτηση για ταυτοποίηση δύο παραγόντων για τον χρήστη %{target}
        disable_custom_emoji_html: Ο/Η %{name} απενεργοποίησε το emoji %{target}
        disable_sign_in_token_auth_user_html: Ο/Η %{name} απενεργοποίησε την πιστοποίηση e-mail token του %{target}
        disable_sign_in_token_auth_user_html: Ο/Η %{name} απενεργοποίησε την ταυτοποίηση χαρακτηριστικού μέσω e-mail του %{target}
        disable_user_html: Ο/Η %{name} απενεργοποίησε τη σύνδεση για τον χρήστη %{target}
        enable_custom_emoji_html: Ο/Η %{name} ενεργοποίησε το emoji %{target}
        enable_sign_in_token_auth_user_html: Ο/Η %{name} ενεργοποίησε την πιστοποίηση e-mail token του %{target}
        enable_sign_in_token_auth_user_html: Ο/Η %{name} ενεργοποίησε την ταυτοποίηση χαρακτηριστικού μέσω e-mail του %{target}
        enable_user_html: Ο/Η %{name} ενεργοποίησε τη σύνδεση για τον χρήστη %{target}
        memorialize_account_html: O/H %{name} μετέτρεψε τον λογαριασμό του %{target} σε σελίδα μνήμης
        memorialize_account_html: O/H %{name} μετέτρεψε τον λογαριασμό του %{target} σε σελίδα εις μνήμην
        promote_user_html: Ο/Η %{name} προβίβασε το χρήστη %{target}
        reject_appeal_html: Ο/Η %{name} απέρριψε την ένσταση της απόφασης των συντονιστών από %{target}
        reject_user_html: "%{name} απορρίφθηκε εγγραφή από %{target}"
        remove_avatar_user_html: Ο/Η %{name} αφαίρεσε το αβατάρ του/της %{target}
        reject_user_html: ο/η %{name} απέρριψε την εγγραφή από %{target}
        remove_avatar_user_html: ο/η %{name} αφαίρεσε το άβαταρ του/της %{target}
        reopen_report_html: Ο/Η %{name} ξανάνοιξε την αναφορά %{target}
        resend_user_html: Ο/Η %{name} έστειλε ξανά e-mail επιβεβαίωσης για τον/την %{target}
        reset_password_user_html: Ο/Η %{name} επανέφερε το συνθηματικό του χρήστη %{target}


@@ 277,11 277,11 @@ el:
        silence_account_html: Ο/Η %{name} περιόρισε τον λογαριασμό του/της %{target}
        suspend_account_html: Ο/Η %{name} ανέστειλε τον λογαριασμό του/της %{target}
        unassigned_report_html: Ο/Η %{name} αποδέσμευσε την αναφορά %{target}
        unblock_email_account_html: "%{name} ξεμπλόκαρε τη διεύθυνση ηλεκτρονικού ταχυδρομείου του %{target}"
        unsensitive_account_html: Ο/Η %{name} επισήμανε τα πολυμέσα του/της %{target} ως ευαίσθητα
        unsilence_account_html: Ο/Η %{name} αφαίρεσε το όριο του λογαριασμού του/της %{target}
        unblock_email_account_html: "%{name} έκανε άρση αποκλεισμού στη διεύθυνση email του %{target}"
        unsensitive_account_html: Ο/Η %{name} επισήμανε τα πολυμέσα του/της %{target} ως μη ευαίσθητα
        unsilence_account_html: Ο/Η %{name} αφαίρεσε το περιορισμό του λογαριασμού του/της %{target}
        unsuspend_account_html: Ο/Η %{name} επανέφερε τον λογαριασμό του/της %{target}
        update_announcement_html: Ο/Η %{name} ενημέρωση την ανακοίνωση %{target}
        update_announcement_html: Ο/Η %{name} ενημέρωσε την ανακοίνωση %{target}
        update_custom_emoji_html: Ο/Η %{name} ενημέρωσε το emoji %{target}
        update_domain_block_html: Ο/Η %{name} ενημέρωσε τον αποκλεισμό τομέα για %{target}
        update_ip_block_html: Ο/Η %{name} άλλαξε τον κανόνα για την IP %{target}


@@ 310,12 310,12 @@ el:
      unpublished_msg: Επιτυχής ακύρωση δημοσίευσης ανακοίνωσης!
      updated_msg: Επιτυχής ενημέρωση ανακοίνωσης!
    custom_emojis:
      assign_category: Κατηγορία
      assign_category: Ανάθεση κατηγορίας
      by_domain: Τομέας
      copied_msg: Επιτυχής δημιουργία τοπικού αντίγραφου του emoji
      copy: Αντιγραφή
      copy_failed_msg: Αδυναμία δημιουργίας τοπικού αντίγραφου αυτού του emoji
      create_new_category: Νέα κατηγορία
      create_new_category: Δημιούργησε νέα κατηγορία
      created_msg: Επιτυχής δημιουργία του emoji!
      delete: Διαγραφή
      destroyed_msg: Επιτυχής καταστροφή του emojo!


@@ 327,7 327,7 @@ el:
      enabled: Ενεργοποιημένα
      enabled_msg: Επιτυχής ενεργοποίηση αυτού του emoji
      image_hint: PNG ή GIF έως %{size}
      list: Εμφάνιση
      list: Παράθεση
      listed: Αναφερθέντα
      new:
        title: Προσθήκη νέου προσαρμοσμένου emoji


@@ 338,17 338,20 @@ el:
      shortcode_hint: Τουλάχιστον 2 χαρακτήρες, μόνο αλφαριθμητικοί και κάτω παύλες
      title: Προσαρμοσμένα emoji
      uncategorized: Χωρίς κατηγορία
      unlist: Απόκρυψη
      unlist: Αφαίρεση από λίστα
      unlisted: Μη καταχωρημένα
      update_failed_msg: Αδυναμία ενημέρωσης του emoji
      updated_msg: Επιτυχής ενημέρωση του emoji!
      upload: Ανέβασμα
      upload: Μεταμόρφωση
    dashboard:
      active_users: ενεργοί χρήστες
      interactions: αλληλεπιδράσεις
      media_storage: Αποθηκευτικός Χώρος
      media_storage: Χώρος πολυμέσων
      new_users: νέοι χρήστες
      opened_reports: αναφορές που ανοίχτηκαν
      opened_reports: ανοιγμένες αναφορές
      pending_appeals_html:
        one: "<strong>%{count}</strong> έφεση σε εκκρεμότητα"
        other: "<strong>%{count}</strong> εφέσεις σε εκκρεμότητα"
      pending_reports_html:
        one: "<strong>%{count}</strong> εκκρεμής αναφορά"
        other: "<strong>%{count}</strong> εκκρεμείς αναφορές"


@@ 372,17 375,17 @@ el:
        title: Εφέσεις
    domain_allows:
      add_new: Έγκριση τομέα
      created_msg: Ο τομέας εγκρίθηκε με επιτυχία
      destroyed_msg: Ο τομέας δεν είναι πια εγκεκριμένος
      created_msg: Ο τομέας εγκρίθηκε με επιτυχία για συναλλαγές
      destroyed_msg: Ο τομέας δεν είναι πια εγκεκριμένος για συναλλαγές
      export: Εξαγωγή
      import: Εισαγωγή
      undo: Αφαίρεση έγκρισης
      undo: Αφαίρεση συναλλαγής με τον τομέα
    domain_blocks:
      add_new: Προσθήκη νέου
      add_new: Προσθήκη νέου αποκλεισμού τομέα
      created_msg: Ο αποκλεισμός τομέα είναι υπό επεξεργασία
      destroyed_msg: Ο αποκλεισμός τομέα άρθηκε
      destroyed_msg: Ο αποκλεισμός τομέα αναιρέθηκε
      domain: Τομέας
      edit: Επεξεργασία αποκλεισμένου τομέα
      edit: Επεξεργασία αποκλεισμού τομέα
      existing_domain_block: Έχετε ήδη επιβάλει αυστηρότερα όρια στο %{name}.
      existing_domain_block_html: Έχεις ήδη επιβάλλει αυστηρότερους περιορισμούς στο %{name}, πρώτα θα πρέπει να τους <a href="%{unblock_url}">αναιρέσεις</a>.
      export: Εξαγωγή


@@ 391,7 394,7 @@ el:
        create: Δημιουργία αποκλεισμού
        hint: Ο αποκλεισμός τομέα δεν θα αποτρέψει νέες καταχωρίσεις λογαριασμών στην βάση δεδομένων, αλλά θα εφαρμόσει αναδρομικά και αυτόματα συγκεκριμένες πολιτικές συντονισμού σε αυτούς τους λογαριασμούς.
        severity:
          desc_html: Ο <strong>περιορισμός</strong> θα κάνει αόρατες τις δημοσιεύσεις ενός λογαριασμού σε όσους δεν τον ακολουθούν. Η <strong>αναστολή</strong> θα αφαιρέσει όλο το περιεχόμενο, τα πολυμέσα και τα στοιχεία προφίλ ενός λογαριασμού. Χρησιμοποίησε το <strong>κανένα</strong> αν θέλεις απλά να απορρίψεις τα αρχεία πολυμέσων.
          desc_html: Ο <strong>περιορισμός</strong> θα κάνει αόρατες τις ανάρτησεις ενός λογαριασμού σε όσους δεν τον ακολουθούν. Η <strong>αναστολή</strong> θα αφαιρέσει όλο το περιεχόμενο, τα πολυμέσα και τα στοιχεία προφίλ ενός λογαριασμού. Χρησιμοποίησε το <strong>κανένα</strong> αν θέλεις απλά να απορρίψεις τα αρχεία πολυμέσων.
          noop: Κανένα
          silence: Περιορισμός
          suspend: Αναστολή


@@ 403,33 406,33 @@ el:
      private_comment: Ιδιωτικό σχόλιο
      private_comment_hint: Σχόλιο για τον περιορισμό αυτού του τομέα για εσωτερική χρήση από τους συντονιστές.
      public_comment: Δημόσιο σχόλιο
      public_comment_hint: Σχόλιο σχετικά με τον περιορισμό αυτού του τομέα προς το κοινό, αν η λειτουργία δημοσιοποίησης των περιορισμένων τομέων είναι ενεργοποιημένη.
      reject_media: Απόρριψη πολυμέσων
      public_comment_hint: Σχόλιο σχετικά με τον περιορισμό αυτού του τομέα προς το κοινό, αν η λειτουργία διαφήμισης των περιορισμένων τομέων είναι ενεργοποιημένη.
      reject_media: Απόρριψη αρχείων πολυμέσων
      reject_media_hint: Αφαιρεί τα τοπικά αποθηκευμένα αρχεία πολυμέσων και αποτρέπει τη λήψη άλλων στο μέλλον. Δεν έχει σημασία για τις αναστολές
      reject_reports: Απόρριψη καταγγελιών
      reject_reports_hint: Αγνόηση όσων καταγγελιών προέρχονται από αυτό τον τομέα. Δεν σχετίζεται με τις παύσεις
      undo: Αναίρεση
      reject_reports: Απόρριψη αναφορών
      reject_reports_hint: Αγνόησε όσων αναφορών που προέρχονται από αυτό τον τομέα. Δεν σχετίζεται με τις παύσεις
      undo: Αναίρεση αποκλεισμού τομέα
      view: Εμφάνιση αποκλεισμού τομέα
    email_domain_blocks:
      add_new: Πρόσθεση νέου
      attempts_over_week:
        one: "%{count} προσπάθεια την τελευταία εβδομάδα"
        other: "%{count} προσπάθειες εγγραφής την τελευταία εβδομάδα"
      created_msg: Επιτυχής πρόσθεση email τομέα σε μαύρη λίστα
      created_msg: Επιτυχής αποκλεισμού email τομέα
      delete: Διαγραφή
      dns:
        types:
          mx: Εγγραφή MX
      domain: Τομέας
      new:
        create: Πρόσθεση τομέα
        create: Προσθήκη τομέα
        resolve: Επίλυση τομέα
        title: Νέα εγγραφή email στη μαύρη λίστα
        title: Αποκλεισμός νέου τομέα email
      no_email_domain_block_selected: Δεν άλλαξαν οι αποκλεισμοί τομέα καθώς δεν επιλέχθηκε κανένας
      not_permitted: Δεν επιτρέπεται
      resolved_dns_records_hint_html: Το όνομα τομέα επιλύεται στους ακόλουθους τομείς MX, οι οποίοι είναι τελικά υπεύθυνοι για την αποδοχή των e-mail. Αποκλείοντας έναν τομέα MX θα μπλοκάρει τις εγγραφές από οποιαδήποτε διεύθυνση email που χρησιμοποιεί τον ίδιο τομέα MX, ακόμη και αν το ορατό όνομα τομέα είναι διαφορετικό. <strong>Προσέξτε να μην αποκλείσετε τους μεγάλους παρόχους ηλεκτρονικού ταχυδρομείου.</strong>
      resolved_through_html: Επιλύθηκε μέσω %{domain}
      title: Μαύρη λίστα email
      title: Αποκλεισμένοι τομείς email
    export_domain_allows:
      new:
        title: Εισαγωγή επιτρεπόμενων τομέων


@@ 451,14 454,14 @@ el:
      status: Κατάσταση
      suppress: Καταστολή της πρότασης ακολούθησης
      suppressed: Κατασταλμένο
      title: Ακολουθήστε τις προτάσεις
      title: Ακολούθησε τις προτάσεις
      unsuppress: Επαναφορά των συστάσεων ακολούθησης
    instances:
      availability:
        description_html:
          one: Εάν η παράδοση στον τομέα αποτύχει για <strong>%{count} ημέρα</strong>, δεν θα γίνουν περαιτέρω προσπάθειες παράδοσης εκτός αν μια παράδοση <em>από</em> τον τομέα παραληφθεί.
          other: Εάν η παράδοση στον τομέα αποτύχει για <strong>%{count} διαφορετικές ημέρες</strong>, δεν θα γίνουν περαιτέρω προσπάθειες παράδοσης εκτός αν μια παράδοση <em>από</em> τον τομέα παραληφθεί.
        failure_threshold_reached: Το όριο αποτυχίας έφτασε στο %{date}.
          one: Εάν η παράδοση στον τομέα αποτύχει για <strong>%{count} ημέρα</strong>, δεν θα γίνουν περαιτέρω προσπάθειες παράδοσης εκτός αν μια παράδοση <em>από</em> τον τομέα ληφθεί.
          other: Εάν η παράδοση στον τομέα αποτύχει για <strong>%{count} διαφορετικές ημέρες</strong>, δεν θα γίνουν περαιτέρω προσπάθειες παράδοσης εκτός αν μια παράδοση <em>από</em> τον τομέα ληφθεί.
        failure_threshold_reached: Το όριο αποτυχίας επετεύχθη στις %{date}.
        failures_recorded:
          one: Αποτυχία προσπάθειας την %{count} ημέρα.
          other: Αποτυχημένες προσπάθειες σε %{count} διαφορετικές ημέρες.


@@ 467,13 470,13 @@ el:
        warning: Η τελευταία προσπάθεια σύνδεσης σε αυτόν τον διακομιστή απέτυχε
      back_to_all: Όλα
      back_to_limited: Περιορισμένα
      back_to_warning: Προσοχή
      back_to_warning: Προειδοποίηση
      by_domain: Τομέας
      confirm_purge: Είστε βέβαιοι ότι θέλετε να διαγράψετε μόνιμα τα δεδομένα από αυτόν τον τομέα;
      confirm_purge: Είσαι βέβαιος ότι θες να διαγράψεις μόνιμα τα δεδομένα από αυτόν τον τομέα;
      content_policies:
        comment: Εσωτερική σημείωση
        description_html: Μπορείτε να ορίσετε τις πολιτικές περιεχομένου που θα εφαρμόζονται σε όλους τους λογαριασμούς από αυτόν τον τομέα και οποιονδήποτε από τους υποτομείς του.
        limited_federation_mode_description_html: Μπορείτε να επιλέξετε αν θα επιτρέψετε την ομοσπονδία με αυτόν τον τομέα.
        description_html: Μπορείς να ορίσεις τις πολιτικές περιεχομένου που θα εφαρμόζονται σε όλους τους λογαριασμούς από αυτόν τον τομέα και οποιονδήποτε από τους υποτομείς του.
        limited_federation_mode_description_html: Μπορείτε να επιλέξετε αν θα επιτρέψετε τις συναλλαγές με αυτόν τον τομέα.
        policies:
          reject_media: Απόρριψη πολυμέσων
          reject_reports: Απόρριψη αναφορών


@@ 490,11 493,11 @@ el:
        instance_languages_dimension: Κορυφαίες γλώσσες
        instance_media_attachments_measure: αποθηκευμένα συνημμένα πολυμέσων
        instance_reports_measure: αναφορές γι' αυτές
        instance_statuses_measure: αποθηκευμένες δημοσιεύσεις
        instance_statuses_measure: αποθηκευμένες αναρτήσεις
      delivery:
        all: Όλες
        clear: Εκκαθάριση σφαλμάτων παράδοσης
        failing: Αποτυγχάνει
        failing: Αποτυχημένες
        restart: Επανεκκίνηση παράδοσης
        stop: Διακοπή παράδοσης
        unavailable: Μη διαθέσιμο


@@ 513,12 516,12 @@ el:
      private_comment: Ιδιωτικό σχόλιο
      public_comment: Δημόσιο σχόλιο
      purge: Εκκαθάριση
      purge_description_html: Εάν πιστεύετε ότι αυτός ο τομέας είναι εκτός σύνδεσης για πάντα, μπορείτε να διαγράψετε όλες τις καταχωρήσεις λογαριασμών και τα σχετικά δεδομένα από αυτόν τον τομέα από τον αποθηκευτικό σας χώρο. Αυτό μπορεί να διαρκέσει λίγη ώρα.
      title: Γνωστοί κόμβοι
      total_blocked_by_us: Μπλοκάρονται από εμάς
      purge_description_html: Εάν πιστεύεις ότι αυτός ο τομέας είναι πλήρως εκτός σύνδεσης, μπορείς να διαγράψεις όλες τις καταχωρήσεις λογαριασμών και τα σχετικά δεδομένα από αυτόν τον τομέα από τον αποθηκευτικό σου χώρο. Αυτό μπορεί να διαρκέσει λίγη ώρα.
      title: Συναλλαγές
      total_blocked_by_us: Αποκλεισμένοι από εμάς
      total_followed_by_them: Ακολουθούνται από εκείνους
      total_followed_by_us: Ακολουθούνται από εμάς
      total_reported: Καταγγελίες προς εκείνους
      total_reported: Αναφορές προς εκείνους
      total_storage: Συνημμένα πολυμέσα
      totals_time_period_hint_html: Τα σύνολα που εμφανίζονται παρακάτω περιλαμβάνουν στοιχεία από την αρχή.
    invites:


@@ 545,26 548,26 @@ el:
      no_ip_block_selected: Δεν άλλαξαν οι κανόνες IP καθώς κανένας δεν επιλέχθηκε
      title: Κανόνες IP
    relationships:
      title: Σχέσεις %{acct}
      title: Σχέσεις του %{acct}
    relays:
      add_new: Πρόσθεσε νέο ανταποκριτή (relay)
      add_new: Προσθήκη νέου ανταποκριτή
      delete: Διαγραφή
      description_html: Ο <strong>ομοσπονδιακός ανταποκριτής</strong> είναι ένας ενδιάμεσος εξυπηρετητής (server) που ανταλλάσσει μεγάλους όγκους δημόσιων τουτ μεταξύ εξυπηρετητών που εγγράφονται και δημοσιεύουν σε αυτόν. <strong>Βοηθάει μικρούς και μεσαίους εξυπηρετητές να ανακαλύψουν περιεχόμενο στο fediverse</strong>, που υπό άλλες συνθήκες θα χρειαζόταν κάποιους τοπικούς χρήστες που να ακολουθούν χρήστες σε απομακρυσμένους εξυπηρετητές.
      description_html: Ο <strong>ανταποκριτής συναλλαγών</strong> είναι ένας ενδιάμεσος διακομιστής που ανταλλάσσει μεγάλους όγκους δημόσιων αναρτήσεων μεταξύ διακομιστών που εγγράφονται και δημοσιεύουν σε αυτόν. <strong>Βοηθάει μικρούς και μεσαίους να ανακαλύψουν περιεχόμενο στο fediverse</strong>, που υπό άλλες συνθήκες θα χρειαζόταν κάποιους τοπικούς χρήστες που να ακολουθούν χρήστες σε απομακρυσμένους διακομιστές.
      disable: Απενεργοποίηση
      disabled: Απενεργοποιημένο
      enable: Ενεργοποίηση
      enable_hint: Μόλις ενεργοποιηθεί, ο εξυπηρετητής (server) σου θα εγγραφεί σε όλα τα δημόσια τουτ αυτού του ανταποκριτή (relay) και θα αρχίσει να προωθεί τα δικά του δημόσια τουτ σε αυτόν.
      enable_hint: Μόλις ενεργοποιηθεί, ο διακομιστής σου θα εγγραφεί σε όλα τις δημόσιες αναρτήσεις αυτού του ανταποκριτή και θα αρχίσει να προωθεί τις δικές του δημόσιες αναρτήσεις σε αυτόν.
      enabled: Ενεργοποιημένο
      inbox_url: URL ανταποκριτή
      pending: Περιμένοντας την έγκριση του ανταποκριτή
      save_and_enable: Αποθήκευση και ενεργοποίηση
      setup: Όρισε μια σύνδεση ανταπόκρισης
      signatures_not_enabled: Οι ανταποκριτές δεν θα λειτουργούν σωστά όσο είναι ενεργοποιημένες οι επιλογές ασφαλούς λειτουργίας ή επιτρεπόμενων συνδέσεων
      signatures_not_enabled: Οι ανταποκριτές δεν θα λειτουργούν σωστά όσο είναι ενεργοποιημένες οι επιλογές ασφαλούς λειτουργίας ή περιορισμένων συναλλαγών
      status: Κατάσταση
      title: Ανταποκριτές
    report_notes:
      created_msg: Επιτυχής δημιουργία σημείωσης καταγγελίας!
      destroyed_msg: Επιτυχής διαγραφή σημείωσης καταγγελίας!
      created_msg: Επιτυχής δημιουργία σημείωσης αναφοράς!
      destroyed_msg: Επιτυχής διαγραφή σημείωσης αναφοράς!
    reports:
      account:
        notes:


@@ 576,16 579,16 @@ el:
        delete_description_html: Οι δημοσιεύσεις με αναφορά θα διαγραφούν και θα καταγραφεί μια ποινή που θα σας βοηθήσει να αποφασίσετε σε μελλοντικές παραβάσεις από τον ίδιο λογαριασμό.
        mark_as_sensitive_description_html: Τα πολυμέσα με αναφορά θα επισημανθούν ως ευαίσθητα και θα καταγραφεί μια ποινή που θα σας βοηθήσει να αποφασίσετε σε μελλοντικές παραβάσεις από τον ίδιο λογαριασμό.
        other_description_html: Δείτε περισσότερες επιλογές για τον έλεγχο της συμπεριφοράς του λογαριασμού και προσαρμόσετε την επικοινωνία στον αναφερόμενο λογαριασμό.
        resolve_description_html: Δεν θα ληφθούν μέτρα κατά του αναφερόμενου λογαριασμού, δεν θα καταγραφεί καμία ποινή, και η αναφορά θα κλείσει.
        resolve_description_html: Δεν θα ληφθούν μέτρα κατά του αναφερόμενου λογαριασμού, δεν θα καταγραφεί κανένα παράπτωμα, και η αναφορά θα κλείσει.
        silence_description_html: Ο λογαριασμός θα είναι ορατός μόνο σε εκείνους που ήδη τον ακολουθούν ή τον αναζητούν χειροκίνητα, περιορίζοντας κατά πολύ την εμβέλειά του. Η ενέργεια αυτή είναι αναστρέψιμη. Κλείνει όλες τις αναφορές εναντίον αυτού του λογαριασμού.
        suspend_description_html: Ο λογαριασμός και όλο το περιεχόμενό του θα είναι απρόσιτα και τελικά θα διαγραφούν και η αλληλεπίδραση με αυτόν θα είναι αδύνατη. Αναστρέψιμη εντός 30 ημερών. Κλείνει όλες τις αναφορές εναντίον αυτού του λογαριασμού.
      actions_description_html: Αποφασίστε ποια μέτρα θα ληφθούν για την επίλυση αυτής της αναφοράς. Εάν προβείτε σε τιμωρητική ενέργεια κατά του αναφερόμενου λογαριασμού, θα αποσταλεί ειδοποίηση μέσω ηλεκτρονικού ταχυδρομείου σε αυτούς, εκτός όταν η κατηγορία <strong>Σπαμ</strong> είναι επιλεγμένη.
      actions_description_remote_html: Αποφασίστε ποια μέτρα θα ληφθούν για την επίλυση αυτής της αναφοράς. Αυτό θα επηρεάσει μόνο το πώς <strong>ο δικός σας</strong> διακομιστής επικοινωνεί με αυτόν τον απομακρυσμένο λογαριασμό και χειρίζεται το περιεχόμενό του.
      add_to_report: Προσθέστε περισσότερα στην αναφορά
      actions_description_html: Αποφάσισε ποια μέτρα θα ληφθούν για την επίλυση αυτής της αναφοράς. Εάν προβείς σε τιμωρητική ενέργεια κατά του αναφερόμενου λογαριασμού, θα αποσταλεί ειδοποίηση μέσω ηλεκτρονικού ταχυδρομείου σε αυτόν, εκτός όταν η κατηγορία <strong>Σπαμ</strong> είναι επιλεγμένη.
      actions_description_remote_html: Αποφάσισε ποια μέτρα θα ληφθούν για την επίλυση αυτής της αναφοράς. Αυτό θα επηρεάσει μόνο το πώς <strong>ο δικός σας</strong> διακομιστής επικοινωνεί με αυτόν τον απομακρυσμένο λογαριασμό και χειρίζεται το περιεχόμενό του.
      add_to_report: Πρόσθεσε περισσότερα στην αναφορά
      are_you_sure: Σίγουρα;
      assign_to_self: Ανάθεση σε μένα
      assigned: Αρμόδιος συντονιστής
      by_target_domain: Κόμβος του λογαριασμού υπό καταγγελία
      by_target_domain: Τομέας του αναφερόμενου λογαριασμού
      cancel: Άκυρο
      category: Κατηγορία
      category_description_html: Ο λόγος για τον οποίο αναφέρθηκε αυτός ο λογαριασμός και/ή το περιεχόμενο θα εσωκλείεται σε επικοινωνία με τον αναφερόμενο λογαριασμό


@@ 593,57 596,57 @@ el:
        none: Κανένα
      comment_description_html: 'Για να δώσει περισσότερες πληροφορίες, ο/η %{name} έγραψε:'
      confirm: Επιβεβαίωση
      confirm_action: Επιβεβαίωση ενέργειαςδιαχείρισης ενάντια στον λογαριασμό @%{acct}
      created_at: Καταγγέλθηκε
      delete_and_resolve: Διαγραφή δημοσιεύσεων
      confirm_action: Επιβεβαίωση ενέργειας συντονισμού ενάντια στον λογαριασμό @%{acct}
      created_at: Αναφέρθηκε
      delete_and_resolve: Διαγραφή αναρτήσεων
      forwarded: Προωθημένα
      forwarded_to: Προώθημένα προς %{domain}
      mark_as_resolved: Σημειωμένο ως επιλυμένο
      mark_as_resolved: Σημείωση ως επιλυμένο
      mark_as_sensitive: Σήμανση ως ευαίσθητο
      mark_as_unresolved: Σημειωμένο ως ανεπίλυτο
      mark_as_unresolved: Σήμανση ως ανεπίλυτο
      no_one_assigned: Κανένας
      notes:
        create: Πρόσθεσε σημείωση
        create_and_resolve: Επίλυσε με σημείωση
        create_and_unresolve: Ξανάνοιξε με σημείωση
        create_and_resolve: Επίλυσε μέ σημείωση
        create_and_unresolve: Ξανάνοιξε μέ σημείωση
        delete: Διαγραφή
        placeholder: Περιέγραψε τις ενέργειες που έγιναν, ή οποιαδήποτε άλλη ενημέρωση...
        placeholder: Περιέγραψε τις ενέργειες που έγιναν, ή οποιαδήποτε άλλη σχετική ενημέρωση...
        title: Σημειώσεις
      notes_description_html: Δείτε και αφήστε σημειώσεις σε άλλους διαχειριστές και τον μελλοντικό εαυτό σας
      notes_description_html: Δες και άφησε σημειώσεις σε άλλους συντονιστές και τον μελλοντικό εαυτό σου
      processed_msg: 'Η αναφορά #%{id} διεκπεραιώθηκε με επιτυχία'
      quick_actions_description_html: 'Κάντε μια γρήγορη ενέργεια ή μετακινηθείτε προς τα κάτω για να δείτε το αναφερόμενο περιεχόμενο:'
      quick_actions_description_html: 'Κάνε μια γρήγορη ενέργεια ή μετακινήσου προς τα κάτω για να δεις το αναφερόμενο περιεχόμενο:'
      remote_user_placeholder: ο απομακρυσμένος χρήστης από %{instance}
      reopen: Ξανάνοιξε την καταγγελία
      report: 'Καταγγελία #%{id}'
      reopen: Ξανάνοιξε την αναφορά
      report: 'Αναφορά #%{id}'
      reported_account: Αναφερόμενος λογαριασμός
      reported_by: Αναφέρθηκε από
      resolved: Επιλύθηκε
      resolved_msg: Η καταγγελία επιλύθηκε επιτυχώς!
      resolved_msg: Η αναφορά επιλύθηκε επιτυχώς!
      skip_to_actions: Μετάβαση στις ενέργειες
      status: Κατάσταση
      statuses: Αναφερόμενο περιεχόμενο
      statuses_description_html: Το προσβλητικό θα εσωκλείεται στην επικοινωνία με τον αναφερόμενο λογαριασμό
      statuses_description_html: Το προσβλητικό περιεχόμενο θα εσωκλείεται στην επικοινωνία με τον αναφερόμενο λογαριασμό
      summary:
        action_preambles:
          delete_html: 'Πρόκειται να <strong>αφαιρέσετε</strong> μερικές από τις δημοσιεύσεις του <strong>@%{acct}</strong>. Αυτό θα:'
          mark_as_sensitive_html: 'Πρόκειται να <strong>επισημάνετε</strong> μερικές από τις δημοσιεύσεις του <strong>@%{acct}</strong> ως <strong>ευαίσθητες</strong>. Αυτό θα:'
          silence_html: 'Πρόκειται να <strong>περιορίσετε</strong> τον λογαριασμό <strong>@%{acct}</strong>. Αυτό θα:'
          suspend_html: 'Πρόκειται να <strong>αναστείλετε</strong> τον λογαριασμό <strong>@%{acct}</strong>. Αυτό θα:'
          delete_html: 'Πρόκειται να <strong>αφαιρέσεις</strong> μερικές από τις αναρτήσεις του <strong>@%{acct}</strong>. Αυτό θα:'
          mark_as_sensitive_html: 'Πρόκειται να <strong>επισημάνεις</strong> μερικές από τις αναρτήσεις του <strong>@%{acct}</strong> ως <strong>ευαίσθητες</strong>. Αυτό θα:'
          silence_html: 'Πρόκειται να <strong>περιορίσεις</strong> τον λογαριασμό του <strong>@%{acct}</strong>. Αυτό θα:'
          suspend_html: 'Πρόκειται να <strong>αναστείλεις</strong> τον λογαριασμό του <strong>@%{acct}</strong>. Αυτό θα:'
        actions:
          delete_html: Αφαιρέστε τις προσβλητικές δημοσιεύσεις
          delete_html: Αφαίρεσε τις προσβλητικές αναρτήσεις
          mark_as_sensitive_html: Σημειώστε τα πολυμέσα των προσβλητικών αναρτήσεων ως ευαίσθητα
          silence_html: Περιορίστε σοβαρά την εμβέλεια του <strong>@%{acct}</strong> κάνοντας το προφίλ και το περιεχόμενό του ορατά μόνο σε άτομα που ήδη τον ακολουθούν ή που αναζητούν χειροκίνητα το προφίλ του
          silence_html: Περιορίσε σοβαρά την εμβέλεια του <strong>@%{acct}</strong> κάνοντας το προφίλ και το περιεχόμενό του ορατά μόνο σε άτομα που ήδη τον ακολουθούν ή που αναζητούν χειροκίνητα το προφίλ του
          suspend_html: Αναστολή του <strong>@%{acct}</strong>, καθιστώντας το προφίλ και το περιεχόμενό του μη προσβάσιμα και αδύνατο να αλληλεπιδράσει κανείς με αυτά
        close_report: 'Επισήμανση αναφοράς #%{id} ως επιλυμένη'
        close_reports_html: Επισημάνετε <strong>όλες τις</strong> αναφορές ενάντια στον λογαριασμό <strong>@%{acct}</strong> ως επιλυμένες
        delete_data_html: Διαγράψτε το προφίλ και το περιεχόμενο του <strong>@%{acct}</strong> σε 30 ημέρες από τώρα εκτός και αν ανακληθεί η αναστολή εν τω μεταξύ
        close_reports_html: Επισήμανε <strong>όλες </strong> τις αναφορές ενάντια στον λογαριασμό <strong>@%{acct}</strong> ως επιλυμένες
        delete_data_html: Διάγραψε το προφίλ και το περιεχόμενο του <strong>@%{acct}</strong> σε 30 ημέρες από τώρα εκτός αν, εν τω μεταξύ, ανακληθεί η αναστολή
        preview_preamble_html: 'Ο <strong>@%{acct}</strong> θα λάβει μια προειδοποίηση με τα ακόλουθο περιεχόμενο:'
        record_strike_html: Καταγράψτε μια ποινή εναντίον του <strong>@%{acct}</strong> για να σας βοηθήσει να αποφασίσετε σε μελλοντικές παραβιάσεις από αυτόν τον λογαριασμό
        send_email_html: Στείλτε στον <strong>@%{acct}</strong> ένα προειδοποιητικό e-mail
        warning_placeholder: Προαιρετικές επιπλέον εξηγήσεις για αυτή την ενέργεια από τη διαχείριση.
        record_strike_html: Κατάγραψε ένα παράπτωμα εναντίον του <strong>@%{acct}</strong> για να σε βοηθήσει να αποφασίσει; σε μελλοντικές παραβιάσεις από αυτόν τον λογαριασμό
        send_email_html: Στείλε στον <strong>@%{acct}</strong> ένα προειδοποιητικό e-mail
        warning_placeholder: Προαιρετικές επιπλέον εξηγήσεις για αυτή την ενέργεια από την ομάδα συντονισμού.
      target_origin: Προέλευση του αναφερόμενου λογαριασμού
      title: Αναφορές
      unassign: Αποσύνδεση
      unassign: Αναίρεση ανάθεσης
      unknown_action_msg: 'Άγνωστη ενέργεια: %{action}'
      unresolved: Άλυτη
      updated_at: Ενημερωμένη


@@ 655,12 658,12 @@ el:
        other: "%{count} χρήστες"
      categories:
        administration: Διαχείριση
        devops: Devops
        devops: DevOps
        invites: Προσκλήσεις
        moderation: Συντονισμός
        special: Ειδικός
      delete: Διαγραφή
      description_html: Με τους <strong>ρόλους χρηστών</strong>, μπορείτε να προσαρμόσετε σε ποιες λειτουργίες και περιοχές του Mastodon, οι χρήστες σας μπορούν να έχουν πρόσβαση.
      description_html: Με τους <strong>ρόλους χρηστών</strong>, μπορείς να προσαρμόσεις σε ποιες λειτουργίες και περιοχές του Mastodon, οι χρήστες σας μπορούν να έχουν πρόσβαση.
      edit: Επεξεργασία ρόλου '%{name}'
      everyone: Προεπιλεγμένα δικαιώματα
      everyone_full_description_html: Αυτός είναι ο <strong>βασικός ρόλος</strong> που επηρεάζει <strong>όλους τους χρήστες</strong>, ακόμη και εκείνους που δεν έχουν κάποιον ρόλο. Όλοι οι άλλοι ρόλοι κληρονομούν δικαιώματα από αυτόν.


@@ 672,18 675,18 @@ el:
        administrator_description: Οι χρήστες με αυτό το δικαίωμα θα παρακάμπτουν κάθε δικαίωμα
        delete_user_data: Διαγραφή Δεδομένων Χρήστη
        delete_user_data_description: Επιτρέπει στους χρήστες να διαγράφουν τα δεδομένα άλλων χρηστών χωρίς καθυστέρηση
        invite_users: Πρόσκληση χρηστών
        invite_users: Πρόσκληση Χρηστών
        invite_users_description: Επιτρέπει στους χρήστες να προσκαλούν νέα άτομα στον διακομιστή
        manage_announcements: Διαχείριση ανακοινώσεων
        manage_announcements: Διαχείριση Ανακοινώσεων
        manage_announcements_description: Επιτρέπει στους χρήστες να διαχειρίζονται ανακοινώσεις στον διακομιστή
        manage_appeals: Διαχείριση Εφέσεων
        manage_appeals_description: Επιτρέπει στους χρήστες να εξετάζουν τις εφέσεις κατά των ενεργειών της συντονισμού
        manage_appeals_description: Επιτρέπει στους χρήστες να εξετάζουν τις εφέσεις κατά των ενεργειών της ομάδας συντονισμού
        manage_blocks: Διαχείριση Αποκλεισμών
        manage_blocks_description: Επιτρέπει στους χρήστες να αποκλείουν παρόχους e-mail και διευθύνσεις IP
        manage_custom_emojis: Διαχείριση Προσαρμοσμένων Emojis
        manage_custom_emojis_description: Επιτρέπει στους χρήστες να διαχειρίζονται προσαρμοσμένα emojis στον διακομιστή
        manage_federation: Διαχείριση Ομοσπονδίας
        manage_federation_description: Επιτρέπει στους χρήστες να αποκλείουν ή να επιτρέπουν την ομοσπονδία με άλλους τομείς και να ελέγχουν την παράδοση
        manage_federation: Διαχείριση Συναλλαγών
        manage_federation_description: Επιτρέπει στους χρήστες να αποκλείουν ή να επιτρέπουν τις συναλλαγές με άλλους τομείς και να ελέγχουν την παράδοση
        manage_invites: Διαχείριση Προσκλήσεων
        manage_invites_description: Επιτρέπει στους χρήστες να περιηγούνται και να απενεργοποιούν τους συνδέσμους πρόσκλησης
        manage_reports: Διαχείριση Αναφορών


@@ 704,7 707,7 @@ el:
        manage_webhooks_description: Επιτρέπει στους χρήστες να ορίζουν webhooks για συμβάντα διαχείρισης
        view_audit_log: Προβολή Καταλόγου Καταγραφών
        view_audit_log_description: Επιτρέπει στους χρήστες να βλέπουν ένα ιστορικό ενεργειών διαχείρισης στον διακομιστή
        view_dashboard: Προβολή Ταμπλό πληροφοριών
        view_dashboard: Προβολή Ταμπλό
        view_dashboard_description: Επιτρέπει στους χρήστες να έχουν πρόσβαση στον ταμπλό πληροφοριών και σε διάφορες μετρήσεις
        view_devops: DevOps
        view_devops_description: Επιτρέπει στους χρήστες να έχουν πρόσβαση στα ταμπλό πληροφοριών Sidekiq και pgHero


@@ 712,7 715,7 @@ el:
    rules:
      add_new: Προσθήκη κανόνα
      delete: Διαγραφή
      description_html: Ενώ οι περισσότεροι ισχυρίζονται ότι έχουν διαβάσει και συμφωνούν με τους όρους της υπηρεσίας, συνήθως οι άνθρωποι δεν διαβάζουν μέχρι μετά την εμφάνιση ενός προβλήματος. <strong>Κάντε ευκολότερο να δουν τους κανόνες του διακομιστή σας με μια ματιά παρέχοντας τους σε μια λίστα σημείων.</strong> Προσπαθήστε να κρατήσετε μεμονωμένους κανόνες σύντομους και απλούς, αλλά προσπαθήστε να μην τους χωρίσετε σε πολλά ξεχωριστά αντικείμενα.
      description_html: Ενώ οι περισσότεροι ισχυρίζονται ότι έχουν διαβάσει και συμφωνούν με τους όρους της υπηρεσίας, συνήθως οι άνθρωποι δεν διαβάζουν μέχρι μετά την εμφάνιση ενός προβλήματος. <strong>Κάνε ευκολότερο να δουν τους κανόνες του διακομιστή σας με μια ματιά παρέχοντας τους σε μια λίστα.</strong> Προσπάθησε να κρατήσεις τους μεμονωμένους κανόνες σύντομους και απλούς, αλλά προσπάθησε να μην τους χωρίσεις σε πολλά ξεχωριστά αντικείμενα.
      edit: Επεξεργασία κανόνα
      empty: Δεν έχουν οριστεί ακόμα κανόνες διακομιστή.
      title: Κανόνες διακομιστή


@@ 723,20 726,20 @@ el:
        rules_hint: Υπάρχει μια ειδική περιοχή για τους κανόνες που αναμένεται να τηρούν οι χρήστες σας.
        title: Σχετικά με
      appearance:
        preamble: Προσαρμόστε τη διεπαφή ιστού του Mastodon.
        preamble: Προσάρμοσε την ιστοσελίδα του Mastodon.
        title: Εμφάνιση
      branding:
        preamble: Η ταυτότητα του διακομιστή σας, τον διαφοροποιεί από άλλους διακομιστές του δικτύου. Αυτές οι πληροφορίες μπορεί να εμφανίζονται σε διάφορα περιβάλλοντα, όπως η διαδικτυακή διεπαφή του Mastodon, εγγενείς εφαρμογές, σε προεπισκοπήσεις συνδέσμου σε άλλους ιστότοπους και εντός εφαρμογών μηνυμάτων και ούτω καθεξής. Γι' αυτό, είναι καλύτερο να διατηρούνται αυτές οι πληροφορίες σαφείς, σύντομες και συνοπτικές.
        preamble: Η ταυτότητα του διακομιστή σου, τον διαφοροποιεί από άλλους διακομιστές του δικτύου. Αυτές οι πληροφορίες μπορεί να εμφανίζονται σε διάφορα περιβάλλοντα, όπως η ιστοσελίδα του Mastodon, εγγενείς εφαρμογές, σε προεπισκοπήσεις συνδέσμου σε άλλους ιστότοπους και εντός εφαρμογών μηνυμάτων και ούτω καθεξής. Γι' αυτό, είναι καλύτερο να διατηρούνται αυτές οι πληροφορίες σαφείς, σύντομες και συνοπτικές.
        title: Ταυτότητα
      content_retention:
        preamble: Ελέγξτε πώς αποθηκεύεται το περιεχόμενο που δημιουργείται από τους χρήστες στο Mastodon.
        preamble: Έλεγξε πώς αποθηκεύεται το περιεχόμενο που δημιουργείται από τους χρήστες στο Mastodon.
        title: Διατήρηση περιεχομένου
      default_noindex:
        desc_html: Επηρεάζει όσους χρήστες δεν έχουν αλλάξει αυτή τη ρύθμιση οι ίδιοι
        desc_html: Επηρεάζει όσους χρήστες δεν έχουν αλλάξει οι ίδιοι αυτή τη ρύθμιση
        title: Εξαίρεση χρηστών από τις μηχανές αναζήτησης
      discovery:
        follow_recommendations: Ακολουθήστε τις προτάσεις
        preamble: Δημοσιεύοντας ενδιαφέρον περιεχόμενο είναι καθοριστικό για την ενσωμάτωση νέων χρηστών που μπορεί να μη γνωρίζουν κανέναν στο Mastodon. Ελέγξτε πώς λειτουργούν διάφορες δυνατότητες ανακάλυψης στον διακομιστή σας.
        follow_recommendations: Ακολούθησε τις προτάσεις
        preamble: Δημοσιεύοντας ενδιαφέρον περιεχόμενο είναι καθοριστικό για την ενσωμάτωση νέων χρηστών που μπορεί να μη γνωρίζουν κανέναν στο Mastodon. Έλεγξε πώς λειτουργούν διάφορες δυνατότητες ανακάλυψης στον διακομιστή σας.
        profile_directory: Κατάλογος προφίλ
        public_timelines: Δημόσιες ροές
        publish_discovered_servers: Δημοσίευση διακομιστών που έχουν ανακαλυφθεί


@@ 748,7 751,7 @@ el:
        disabled: Για κανέναν
        users: Προς συνδεδεμένους τοπικούς χρήστες
      registrations:
        preamble: Ελέγξτε ποιος μπορεί να δημιουργήσει ένα λογαριασμό στον διακομιστή σας.
        preamble: Έλεγξε ποιος μπορεί να δημιουργήσει ένα λογαριασμό στον διακομιστή σας.
        title: Εγγραφές
      registrations_mode:
        modes:


@@ 776,17 779,17 @@ el:
        title: Πολυμέσα
      metadata: Μεταδεδομένα
      no_status_selected: Καμία δημοσίευση δεν άλλαξε αφού καμία δεν ήταν επιλεγμένη
      open: Άνοιγμα δημοσίευσης
      original_status: Αρχική δημοσίευση
      open: Άνοιγμα ανάρτησης
      original_status: Αρχική ανάρτηση
      reblogs: Αναδημοσιεύσεις
      status_changed: Η ανάρτηση άλλαξε
      title: Καταστάσεις λογαριασμού
      trending: Δημοφιλή
      trending: Τάσεις
      visibility: Ορατότητα
      with_media: Με πολυμέσα
    strikes:
      actions:
        delete_statuses: Ο/Η %{name} διέγραψε τις δημοσιεύσεις του/της %{target}
        delete_statuses: Ο/Η %{name} διέγραψε τις αναρτήσεις του/της %{target}
        disable: Ο/Η %{name} πάγωσε τον λογαριασμό του/της %{target}
        mark_statuses_as_sensitive: Ο/Η %{name} επισήμανε τα πολυμέσα του/της %{target} ως ευαίσθητα
        none: Ο/Η %{name} έστειλε προειδοποίηση προς τον/την %{target}


@@ 795,65 798,162 @@ el:
        suspend: ο/η %{name} ανέστειλε τον λογαριασμό %{target}
      appeal_approved: Έγινε έφεση
      appeal_pending: Έφεση σε εκκρεμότητα
      appeal_rejected: Η αίτηση απορρίφθηκε
      appeal_rejected: Η έφεση απορρίφθηκε
    system_checks:
      database_schema_check:
        message_html: Υπάρχουν μετακινήσεις βάσης δεδομένων που εκκρεμούν. Παρακαλώ εκτελέστε τις για να βεβαιωθείτε ότι η εφαρμογή συμπεριφέρεται όπως αναμένεται
        message_html: Υπάρχουν μετακινήσεις βάσεων δεδομένων που εκκρεμούν. Παρακαλώ εκτέλεσέ τες για να βεβαιωθείς ότι η εφαρμογή συμπεριφέρεται όπως αναμένεται
      elasticsearch_running_check:
        message_html: Δεν ήταν δυνατή η σύνδεση στο Elasticsearch. Παρακαλώ ελέγξτε ότι εκτελείται ή απενεργοποιήστε την αναζήτηση πλήρους κειμένου
        message_html: Δεν ήταν δυνατή η σύνδεση στο Elasticsearch. Παρακαλώ έλεγξε ότι εκτελείται ή απενεργοποίησε την αναζήτηση πλήρους κειμένου
      elasticsearch_version_check:
        message_html: 'Μη συμβατή έκδοση Elasticsearch: %{value}'
        version_comparison: Η έκδοση Elasticsearch %{running_version} εκτελείται ενώ η %{required_version} απαιτείται
        version_comparison: Εκτελείται η έκδοση Elasticsearch %{running_version} ενώ απαιτείται %{required_version}
      rules_check:
        action: Διαχείριση κανόνων διακομιστή
        message_html: Δεν έχετε ορίσει κανέναν κανόνα διακομιστή.
        message_html: Δεν έχεις ορίσει κανέναν κανόνα διακομιστή.
      sidekiq_process_check:
        message_html: Καμία διεργασία Sidekiq δεν εκτελείται για την ουρά %{value}. Παρακαλώ έλεγξε τη διαμόρφωση του Sidekiq
      upload_check_privacy_error:
        action: Δες εδώ για περισσότερες πληροφορίες
        message_html: "<strong>Ο διακομιστής σας δεν έχει ρυθμιστεί σωστά. Το απόρρητο των χρηστών σας κινδυνεύει.</strong>"
      upload_check_privacy_error_object_storage:
        action: Δες εδώ για περισσότερες πληροφορίες
        message_html: "<strong>Ο χώρος αποθήκευσης αντικειμένων σας δεν έχει ρυθμιστεί σωστά. Το απόρρητο των χρηστών σας κινδυνεύει.</strong>"
    tags:
      review: Κατάσταση έγκρισης
      review: Κατάσταση αξιολόγησης
      updated_msg: Οι ρυθμίσεις των ετικετών ενημερώθηκαν επιτυχώς
    title: Διαχείριση
    trends:
      not_allowed_to_trend: Δεν επιτρέπεται η τάση
      allow: Επιτρέπεται
      approved: Εγκρίθηκε
      disallow: Να μην επιτρέπεται
      links:
        allow: Να επιτρέπεται σύνδεσμος
        allow_provider: Να επιτρέπεται ο εκδότης
        description_html: Αυτοί οι σύνδεσμοι μοιράζονται αρκετά από λογαριασμούς των οποίων τις δημοσιεύσεις, βλέπει ο διακομιστής σας. Μπορεί να βοηθήσει τους χρήστες σας να μάθουν τί συμβαίνει στον κόσμο. Οι σύνδεσμοι δεν εμφανίζονται δημόσια μέχρι να εγκρίνετε τον εκδότη. Μπορείτε επίσης να επιτρέψετε ή να απορρίψετε μεμονωμένους συνδέσμους.
        disallow: Να μην επιτρέπεται ο σύνδεσμος
        disallow_provider: Να μην επιτρέπεται ο εκδότης
        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: Σύνδεσμοι από αυτόν τον εκδότη μπορούν να γίνουν δημοφιλείς
        description_html: Αυτοί είναι τομείς από τους οποίους οι σύνδεσμοι συχνά μοιράζονται στον διακομιστή σας. Σύνδεσμοι δεν γίνουν δημοφιλείς δημοσίως εκτός και αν ο τομέας του συνδέσμου εγκριθεί. Η έγκρισή σας (ή απόρριψη) περιλαμβάνει και τους υποτομείς.
        rejected: Σύνδεσμοι από αυτόν τον εκδότη δε θα γίνουν δημοφιλείς
        title: Εκδότες
      rejected: Απορρίφθηκε
      statuses:
        allow: Να επιτρέπεται η ανάρτηση
        allow_account: Να επιτρέπεται ο συγγραφέας
        description_html: Αυτές είναι αναρτήσεις για τις οποίες ο διακομιστής σας γνωρίζει ότι κοινοποιούνται και αρέσουν πολύ αυτή τη περίοδο. Μπορεί να βοηθήσει νέους και χρήστες που επιστρέφουν, να βρουν περισσότερα άτομα να ακολουθήσουν. Καμία ανάρτηση δεν εμφανίζεται δημόσια μέχρι να εγκρίνετε το συντάκτη και ο συντάκτης να επιτρέπει ο λογαριασμός του να προτείνεται και σε άλλους. Μπορείτε επίσης να επιτρέψετε ή να απορρίψετε μεμονωμένες δημοσιεύσεις.
        disallow: Να μην επιτρέπεται η δημοσίευση
        disallow_account: Να μην επιτρέπεται ο συντάκτης
        no_status_selected: Καμία δημοφιλής ανάρτηση δεν άλλαξε αφού καμία δεν επιλέχθηκε
        not_discoverable: Ο συντάκτης δεν έχει επιλέξει να είναι ανακαλύψιμος
        shared_by:
          one: Μοιράστηκε ή προστέθηκε στα αγαπημένα μία φορά
          other: Μοιράστηκε και προστέθηκε στα αγαπημένα %{friendly_count} φορές
        title: Δημοφιλείς αναρτήσεις
      tags:
        current_score: Τρέχουσα βαθμολογία %{score}
        dashboard:
          tag_accounts_measure: μοναδικές χρήσεις
          tag_languages_dimension: Κορυφαίες γλώσσες
          tag_servers_dimension: Κορυφαίοι διακομιστές
          tag_servers_measure: διαφορετικοί διακομιστές
      trending: Δημοφιλή
          tag_uses_measure: συνολικές χρήσεις
        description_html: Αυτές είναι ετικέτες που εμφανίζονται αυτή τη στιγμή σε πολλές αναρτήσεις που βλέπει ο διακομιστής σας. Μπορεί να βοηθήσει τους χρήστες σας να μάθουν τί συζητείται αυτή τη στιγμή. Δεν εμφανίζονται ετικέτες δημοσίως μέχρι να τις εγκρίνετε.
        listable: Μπορεί να προταθεί
        no_tag_selected: Καμία ετικέτα δεν άλλαξε αφού καμία δεν ήταν επιλεγμένη
        not_listable: Δεν θα προτείνεται
        not_trendable: Δεν θα εμφανίζεται στις τάσεις
        not_usable: Δεν μπορεί να χρησιμοποιηθεί
        peaked_on_and_decaying: Κορυφαία θέση στις %{date}, τώρα φθίνει
        title: Δημοφιλείς ετικέτες
        trendable: Μπορεί να εμφανιστεί στις τάσεις
        trending_rank: 'Δημοφιλές #%{rank}'
        usable: Μπορεί να χρησιμοποιηθεί
        usage_comparison: Χρησιμοποιήθηκε %{today} φορές σήμερα, σε σύγκριση με %{yesterday} χθες
        used_by_over_week:
          one: Χρησιμοποιήθηκε από ένα άτομο την τελευταία εβδομάδα
          other: Χρησιμοποιήθηκε από %{count} άτομα την τελευταία εβδομάδα
      title: Δημοφιλή
      trending: Τάσεις
    warning_presets:
      add_new: Πρόσθεση νέου
      delete: Διαγραφή
      edit_preset: Ενημέρωση προκαθορισμένης προειδοποίησης
      empty: Δεν έχετε ακόμη ορίσει κάποια προεπιλογή προειδοποίησης.
      empty: Δεν έχετε ακόμη ορίσει κάποια προκαθορισμένη προειδοποίηση.
      title: Διαχείριση προκαθορισμένων προειδοποιήσεων
    webhooks:
      add_new: Προσθήκη σημείου τερματισμού
      delete: Διαγραφή
      description_html: Ένα <strong>webhook</strong> επιτρέπει στο Mastodon να στείλει <strong>ειδοποιήσεις πραγματικού χρόνου</strong> σχετικά με επιλεγμένα γεγονότα στη δική σας εφαρμογή, ώστε η εφαρμογή να σας μπορεί <strong>να προκαλέσει αντιδράσεις αυτόματα</strong>.
      disable: Απενεργοποίηση
      disabled: Απενεργοποιημένα
      edit: Επεξεργασία σημείου τερματισμού
      empty: Δεν έχετε ακόμα ρυθμισμένα σημεία τερματισμού webhook.
      enable: Ενεργοποίηση
      enabled: Ενεργό
      enabled_events:
        one: 1 ενεργό συμβάν
        other: "%{count} ενεργά συμβάντα"
      events: Συμβάντα
      new: Νέο webhook
      rotate_secret: Περιστροφή μυστικού
      secret: Υπογραφή μυστικού
      status: Κατάσταση
      title: Webhooks
      webhook: Webhook
  admin_mailer:
    new_appeal:
      actions:
        delete_statuses: διαγραφή των αναρτήσεών του
        disable: να παγώσει τον λογαριασμό του
        mark_statuses_as_sensitive: να επισημάνουν τις δημοσιεύσεις του ως ευαίσθητες
        none: μια προειδοποίηση
        sensitive: να επισημάνουν τον λογαριασμό του ως ευαίσθητο
        silence: να περιορίσουν το λογαριασμό του
        suspend: να αναστείλουν τον λογαριασμό του
      body: 'Ο/Η %{target} κάνει έφεση στην απόφαση συντονισμού που έγινε από τον/την %{action_taken_by} στις %{date}, η οποία ήταν %{type}. Έγραψαν:'
      next_steps: Μπορείτε να εγκρίνετε την έφεση για να αναιρέσετε την απόφαση της ομάδας συντονισμού ή να την αγνοήσετε.
      subject: Ο/Η %{username} κάνει έφεση σε μια απόφαση της ομάδας συντονισμού στον %{instance}
    new_pending_account:
      body: Τα στοιχεία του νέου λογαριασμού είναι παρακάτω. Μπορείς να εγκρίνεις ή να απορρίψεις αυτή την αίτηση.
      subject: Νέος λογαριασμός προς έγκριση στο %{instance} (%{username})
    new_report:
      body: Ο/Η %{reporter} κατήγγειλε τον/την %{target}
      body_remote: Κάποιος/α από τον τομέα %{domain} κατήγγειλε τον/την %{target}
      subject: Νέα καταγγελία για %{instance} (#%{id})
      body: Ο/Η %{reporter} ανέφερε τον/την %{target}
      body_remote: Κάποιος/α από τον τομέα %{domain} ανέφερε τον/την %{target}
      subject: Νέα αναφορά για %{instance} (#%{id})
    new_trends:
      body: 'Τα ακόλουθα στοιχεία χρειάζονται αξιολόγηση για να μπορούν να προβληθούν δημόσια:'
      new_trending_links:
        title: Σύνδεσμοι σε τάση
      new_trending_statuses:
        title: Αναρτήσεις σε τάση
      new_trending_tags:
        no_approved_tags: Προς το παρόν δεν υπάρχουν εγκεκριμένες δημοφιλείς ετικέτες.
        requirements: 'Οποιοσδήποτε από αυτούς τους υποψηφίους θα μπορούσε να ξεπεράσει την #%{rank} εγκεκριμένη δημοφιλή ετικέτα, που επί του παρόντος είναι #%{lowest_tag_name} με βαθμολογία %{lowest_tag_score}.'
        title: Δημοφιλείς ετικέτες
      subject: Νέες τάσεις προς αξιολόγηση στο %{instance}
  aliases:
    add_new: Δημιουργία ψευδώνυμου
    created_msg: Δημιουργήθηκε νέο ψευδώνυμο. Τώρα μπορείς να ξεκινήσεις τη μεταφορά από τον παλιό λογαριασμό.
    deleted_msg: Αφαιρέθηκε το ψευδώνυμο. Η μεταφορά από εκείνον τον λογαριασμό σε αυτόν εδώ δε θα είναι πλέον δυνατή.
    empty: Δεν έχεις ψευδώνυμα.
    hint_html: Αν θέλεις να μετακομίσεις από έναν άλλο λογαριασμό σε αυτόν εδώ, μπορείς εδώ να δημιουργήσεις ένα ψευδώνυμο, πράγμα που απαιτείται πριν προχωρήσεις για να μεταφέρεις τους ακολούθους σου από τον παλιό λογαριασμό σε αυτόν εδώ. Η ενέργεια αυτή είναι <strong>ακίνδυνη και αναστρέψιμη</strong>.<strong>Η μετακόμιση του λογαριασμού ξεκινάει από τον παλιό λογαριασμό</strong>.
    hint_html: Αν θέλεις να μετακομίσεις από έναν άλλο λογαριασμό σε αυτόν εδώ, εδώ μπορείς να δημιουργήσεις ένα ψευδώνυμο, πράγμα που απαιτείται πριν προχωρήσεις για να μεταφέρεις τους ακολούθους σου από τον παλιό λογαριασμό σε αυτόν εδώ. Η ενέργεια αυτή είναι <strong>ακίνδυνη και αναστρέψιμη</strong>.<strong>Η μετακόμιση του λογαριασμού ξεκινάει από τον παλιό λογαριασμό</strong>.
    remove: Αφαίρεση ψευδώνυμου
  appearance:
    advanced_web_interface: Προηγμένη λειτουργία χρήσης
    advanced_web_interface_hint: 'Αν θέλεις να χρησιμοποιήσεις ολόκληρο το πλάτος της οθόνης σου, η προηγμένη λειτουργία χρήσης σου επιτρέπει να ορίσεις πολλαπλές κολώνες ώστε να βλέπεις ταυτόχρονα όση πληροφορία θέλεις: Την αρχική ροή, τις ειδοποιήσεις, την ομοσπονδιακή ροή και όσες λίστες και ετικέτες θέλεις.'
    animations_and_accessibility: Κίνηση και προσβασιμότητα
    advanced_web_interface: Προηγμένη διεπαφή ιστού
    advanced_web_interface_hint: 'Αν θέλεις να χρησιμοποιήσεις ολόκληρο το πλάτος της οθόνης σου, η προηγμένη λειτουργία χρήσης σου επιτρέπει να ορίσεις πολλαπλές στύλες ώστε να βλέπεις ταυτόχρονα όση πληροφορία θέλεις: Την αρχική ροή, τις ειδοποιήσεις, την ροή συναλλαγών και όσες λίστες και ετικέτες θέλεις.'
    animations_and_accessibility: Εφέ κινήσεων και προσβασιμότητα
    confirmation_dialogs: Ερωτήσεις επιβεβαίωσης
    discovery: Εξερεύνηση
    localization:


@@ 861,30 961,32 @@ el:
      guide_link: https://crowdin.com/project/mastodon
      guide_link_text: Μπορεί να συνεισφέρει ο οποιοσδήποτε.
    sensitive_content: Ευαίσθητο περιεχόμενο
    toot_layout: Διαρρύθμιση τουτ
    toot_layout: Διαρρύθμιση αναρτήσεων
  application_mailer:
    notification_preferences: Αλλαγή προτιμήσεων email
    salutation: "%{name},"
    settings: 'Άλλαξε τις προτιμήσεις email: %{link}'
    view: 'Προβολή:'
    view_profile: Προβολή προφίλ
    view_status: Προβολή κατάστασης
    view_status: Προβολή ανάρτησης
  applications:
    created: Η εφαρμογή δημιουργήθηκε επιτυχώς
    destroyed: Η εφαρμογή διαγράφηκε επιτυχώς
    logout: Αποσύνδεση
    regenerate_token: Αναδημιουργία του διακριτικού πρόσβασης (access token)
    token_regenerated: Το διακριτικό πρόσβασης (access token) αναδημιουργήθηκε επιτυχώς
    warning: Μεγάλη προσοχή με αυτά τα στοιχεία. Μην τα μοιραστείς ποτέ με κανέναν!
    your_token: Το διακριτικό πρόσβασής σου (access token)
    token_regenerated: Το διακριτικό πρόσβασης αναδημιουργήθηκε επιτυχώς
    warning: Να είσαι πολύ προσεκτικός με αυτά τα στοιχεία. Μην τα μοιραστείς ποτέ με κανέναν!
    your_token: Το διακριτικό πρόσβασής σου
  auth:
    apply_for_account: Ζητήστε έναν λογαριασμό
    change_password: Συνθηματικό
    confirmations:
      wrong_email_hint: Εάν αυτή η διεύθυνση email δεν είναι σωστή, μπορείς να την αλλάξεις στις ρυθμίσεις λογαριασμού.
    delete_account: Διαγραφή λογαριασμού
    delete_account_html: Αν θέλεις να διαγράψεις το λογαριασμό σου, μπορείς <a href="%{path}">να συνεχίσεις εδώ</a>. Θα σου ζητηθεί επιβεβαίωση.
    description:
      prefix_invited_by_user: Ο/Η @%{name} σε προσκαλεί να συνδεθείς με αυτό τον διακομιστή του Mastodon!
      prefix_sign_up: Άνοιξε λογαριασμό στο Mastodon σήμερα!
      prefix_sign_up: Κάνε εγγραφή στο Mastodon σήμερα!
      suffix: Ανοίγοντας λογαριασμό θα μπορείς να ακολουθείς άλλους, να ανεβάζεις ενημερώσεις και να ανταλλάζεις μηνύματα με χρήστες σε οποιοδήποτε διακομιστή Mastodon, καθώς και άλλα!
    didnt_get_confirmation: Δεν έλαβες τις οδηγίες επιβεβαίωσης;
    dont_have_your_security_key: Δεν έχετε κλειδί ασφαλείας;


@@ 898,6 1000,7 @@ el:
    migrate_account: Μετακόμιση σε διαφορετικό λογαριασμό
    migrate_account_html: Αν θέλεις να ανακατευθύνεις αυτό τον λογαριασμό σε έναν διαφορετικό, μπορείς να το <a href="%{path}">διαμορφώσεις εδώ</a>.
    or_log_in_with: Ή συνδέσου με
    privacy_policy_agreement_html: Έχω διαβάσει και συμφωνώ με την <a href="%{privacy_policy_path}" target="_blank">πολιτική απορρήτου</a>
    providers:
      cas: Υπηρεσία Κεντρικής Πιστοποίησης (CAS)
      saml: Πρωτόκολλο SAML


@@ 908,6 1011,7 @@ el:
    rules:
      accept: Αποδοχή
      back: Πίσω
      preamble: Αυτά ορίζονται και επιβάλλονται από τους συντονιστές του%{domain}.
      title: Ορισμένοι βασικοί κανόνες.
    security: Ασφάλεια
    set_new_password: Ορισμός νέου συνθηματικού


@@ 916,14 1020,18 @@ el:
      email_settings_hint_html: Το email επιβεβαίωσης στάλθηκε στο %{email}. Αν η διεύθυνση αυτή δεν είναι σωστή, μπορείτε να την ενημερώσετε στις ρυθμίσεις λογαριασμού.
      title: Ρυθμίσεις
    sign_in:
      preamble_html: Συνδεθείτε με τα διαπιστευτήριά σας στον <strong>%{domain}</strong>. Αν ο λογαριασμός σας φιλοξενείται σε διαφορετικό διακομιστή, δε θα μπορείτε να συνδεθείτε εδώ.
      title: Συνδεθείτε στο %{domain}
    sign_up:
      preamble: Με έναν λογαριασμό σ' αυτόν τον διακομιστή Mastodon, θα μπορείτε να ακολουθήσετε οποιοδήποτε άλλο άτομο στο δίκτυο, ανεξάρτητα από το πού φιλοξενείται ο λογαριασμός του.
      title: Ας ξεκινήσουμε τις ρυθμίσεις στο %{domain}.
    status:
      account_status: Κατάσταση λογαριασμού
      confirming: Αναμονή για ολοκλήρωση επιβεβαίωσης του email.
      functional: Ο λογαριασμός σας είναι πλήρως λειτουργικός.
      pending: Η εφαρμογή σας εκκρεμεί έγκρισης, πιθανόν θα διαρκέσει κάποιο χρόνο. Θα λάβετε email αν εγκριθεί.
      redirecting_to: Ο λογαριασμός σου είναι ανενεργός γιατί επί του παρόντος ανακατευθύνει στον %{acct}.
      view_strikes: Προβολή προηγούμενων ποινών εναντίον του λογαριασμού σας
    too_fast: Η φόρμα υποβλήθηκε πολύ γρήγορα, προσπαθήστε ξανά.
    use_security_key: Χρήση κλειδιού ασφαλείας
  authorize_follow:


@@ 947,6 1055,10 @@ el:
    errors:
      invalid_key: δεν είναι έγκυρο κλειδί Ed25519 ή Curve25519
      invalid_signature: δεν είναι έγκυρη υπογραφή Ed25519
  date:
    formats:
      default: "%b %d, %Y"
      with_month_name: "%B %d, %Y"
  datetime:
    distance_in_words:
      about_x_hours: "%{count}ω"


@@ 980,8 1092,34 @@ el:
      username_unavailable: Το όνομα χρήστη σου θα παραμείνει μη διαθέσιμο
  disputes:
    strikes:
      action_taken: Ενέργεια που πραγματοποιήθηκε
      appeal: Έφεση
      appeal_approved: Αυτή η ποινή έχει αναιρεθεί επιτυχώς και δεν είναι πλέον έγκυρη
      appeal_rejected: Η έφεση απορρίφθηκε
      appeal_submitted_at: Η έφεση υποβλήθηκε
      appealed_msg: Η έφεσή σας έχει υποβληθεί. Αν εγκριθεί, θα ειδοποιηθείτε.
      appeals:
        submit: Υποβολή έφεσης
      approve_appeal: Έγκριση έφεσης
      associated_report: Συσχετισμένη αναφορά
      created_at: Χρονολογείται
      description_html: Αυτές είναι ενέργειες που λήφθηκαν κατά του λογαριασμού σας και προειδοποιήσεις που σας έχουν σταλεί από το προσωπικό του %{instance}.
      recipient: Απευθύνεται σε
      reject_appeal: Απόρριψη έφεσης
      status: 'Δημοσίευση #%{id}'
      status_removed: Η δημοσιεύση έχει ήδη αφαιρεθεί από το σύστημα
      title: "%{action} στις %{date}"
      title_actions:
        delete_statuses: Αφαίρεση δημοσίευσης
        disable: Πάγωμα λογαριασμού
        mark_statuses_as_sensitive: Σήμανση δημοσιεύσεων ως ευαίσθητες
        none: Προειδοποίηση
        sensitive: Σήμανση λογαριασμού ως ευαίσθητο
        silence: Περιορισμός λογαριασμού
        suspend: Αναστολή λογαριασμού
      your_appeal_approved: Η έφεση σας έχει εγκριθεί
      your_appeal_pending: Υποβάλατε έφεση
      your_appeal_rejected: Η έφεση σας απορρίφθηκε
  domain_validator:
    invalid_domain: δεν είναι έγκυρο όνομα τομέα
  errors:


@@ 1019,6 1157,8 @@ el:
    storage: Αποθήκευση πολυμέσων
  featured_tags:
    add_new: Προσθήκη νέας
    errors:
      limit: Έχεις ήδη προσθέσει το μέγιστο αριθμό ετικετών
    hint_html: "<strong>Τι είναι οι προβεβλημένες ετικέτες;</strong> Προβάλλονται στο δημόσιο προφίλ σου επιτρέποντας σε όποιον το βλέπει να χαζέψει τις δημοσιεύσεις που τις χρησιμοποιούν. Είναι ένας ωραίος τρόπος να παρακολουθείς την πορεία μιας δημιουργία ή ενός μακροπρόθεσμου έργου."
  filters:
    contexts:


@@ 1030,8 1170,11 @@ el:
    edit:
      add_keyword: Προσθήκη λέξης-κλειδιού
      keywords: Λέξεις-κλειδιά
      statuses: Μεμονωμένες δημοσιεύσεις
      statuses_hint_html: Αυτό το φίλτρο εφαρμόζεται για την επιλογή μεμονωμένων δημοσιεύσεων, ανεξάρτητα από το αν ταιριάζουν με τις λέξεις - κλειδιά παρακάτω. <a href="%{path}">Επισκόπηση ή αφαίρεση δημοσιεύσεων από το φίλτρο</a>.
      title: Ενημέρωση φίλτρου
    errors:
      deprecated_api_multiple_keywords: Αυτές οι παράμετροι δεν μπορούν να αλλάξουν από αυτήν την εφαρμογή επειδή ισχύουν για περισσότερες από μία λέξεις - κλειδιά φίλτρου. Χρησιμοποιήστε μια πιο πρόσφατη εφαρμογή ή την ιστοσελίδα.
      invalid_context: Έδωσες λάθος ή ανύπαρκτο πλαίσιο
    index:
      contexts: Φίλτρα σε %{contexts}


@@ 1039,17 1182,44 @@ el:
      empty: Δεν έχεις φίλτρα.
      expires_in: Λήγει σε %{distance}
      expires_on: Λήγει στις %{date}
      keywords:
        one: "%{count} λέξη - κλειδί"
        other: "%{count} λέξεις - κλειδιά"
      statuses:
        one: "%{count} δημοσίευση"
        other: "%{count} δημοσιεύσεις"
      statuses_long:
        one: "%{count} κρυμμένη μεμονωμένη δημοσίευση"
        other: "%{count} κρυμμένες μεμονωμένες δημοσιεύσεις"
      title: Φίλτρα
    new:
      save: Αποθήκευση νέου φίλτρου
      title: Πρόσθεσε νέο φίλτρο
    statuses:
      back_to_filter: Πίσω στο φίλτρο
      batch:
        remove: Αφαίρεση από φίλτρο
      index:
        hint: Αυτό το φίλτρο ισχύει για την επιλογή μεμονωμένων δημοσιεύσεων ανεξάρτητα από άλλα κριτήρια. Μπορείτε να προσθέσετε περισσότερες δημοσιεύσεις σε αυτό το φίλτρο από την ιστοσελίδα.
        title: Φιλτραρισμένες δημοσιεύσεις
  generic:
    all: Όλα
    all_items_on_page_selected_html:
      one: "<strong>%{count}</strong> στοιχείο σε αυτή τη σελίδα είναι επιλεγμένο."
      other: Όλα τα <strong>%{count}</strong> 5 στοιχεία σε αυτή τη σελίδα είναι επιλεγμένα.
    all_matching_items_selected_html:
      one: "<strong>%{count}</strong> στοιχείο που ταιριάζει με την αναζήτησή σας είναι επιλεγμένο."
      other: Όλα τα <strong>%{count}</strong> στοιχεία που ταιριάζουν στην αναζήτησή σας είναι επιλεγμένα.
    changes_saved_msg: Οι αλλαγές αποθηκεύτηκαν!
    copy: Αντιγραφή
    delete: Διαγραφή
    deselect: Αποεπιλογή όλων
    none: Κανένα
    order_by: Ταξινόμηση κατά
    save_changes: Αποθήκευση αλλαγών
    select_all_matching_items:
      one: Επιλέξτε %{count} στοιχείο που ταιριάζει με την αναζήτησή σας.
      other: Επιλέξτε και τα %{count} αντικείμενα που ταιριάζουν στην αναζήτησή σας.
    today: σήμερα
    validation_errors:
      one: Κάτι δεν είναι εντάξει ακόμα! Για κοίταξε το παρακάτω σφάλμα


@@ 1094,6 1264,20 @@ el:
      expires_at: Λήγει
      uses: Χρήσεις
    title: Προσκάλεσε κόσμο
  lists:
    errors:
      limit: Έχεις φτάσει το μέγιστο αριθμό λιστών
  login_activities:
    authentication_methods:
      otp: εφαρμογή ταυτοποίησης δύο παραγόντων
      password: συνθηματικό
      sign_in_token: κωδικός ασφαλείας e-mail
      webauthn: κλειδιά ασφαλείας
    description_html: Αν δείτε δραστηριότητα που δεν αναγνωρίζετε, σκεφτείτε να αλλάξετε τον κωδικό πρόσβασής σας και να ενεργοποιήσετε τον έλεγχο ταυτότητας δύο παραγόντων.
    empty: Δεν υπάρχει διαθέσιμο ιστορικό ελέγχου ταυτότητας
    failed_sign_in_html: Αποτυχημένη προσπάθεια σύνδεσης με %{method} από %{ip} (%{browser})
    successful_sign_in_html: Επιτυχής σύνδεση με %{method} από %{ip} (%{browser})
    title: Ιστορικό ελέγχου ταυτότητας
  media_attachments:
    validations:
      images_and_video: Δεν γίνεται να προσθέσεις βίντεο σε ενημέρωση που ήδη περιέχει εικόνες


@@ 1162,6 1346,8 @@ el:
      body: 'Αναφέρθηκες από τον/την %{name} στο:'
      subject: Αναφέρθηκες από τον/την %{name}
      title: Νέα αναφορά
    poll:
      subject: Μια δημοσκόπηση του %{name} έληξε
    reblog:
      body: 'Η κατάστασή σου προωθήθηκε από τον/την %{name}:'
      subject: Ο/Η %{name} προώθησε την κατάστασή σου


@@ 1186,8 1372,12 @@ el:
          trillion: τρις.
  otp_authentication:
    code_hint: Για να συνεχίσεις, γράψε τον κωδικό που δημιούργησε η εφαρμογή πιστοποίησης
    description_html: Αν ενεργοποιήσεις την <strong>ταυτοποίηση δύο παραγόντων</strong> χρησιμοποιώντας εφαρμογή ταυτοποίησης, για να συνδεθείς θα πρέπει να έχεις το τηλέφωνό σου, που θα σού δημιουργήσει κλειδιά εισόδου.
    enable: Ενεργοποίηση
    instructions_html: "<strong>Σάρωσε αυτόν τον κωδικό QR με την εφαρμογή Google Authenticator ή κάποια άλλη αντίστοιχη στο τηλέφωνό σου</strong>. Από εδώ και στο εξής, η εφαρμογή θα δημιουργεί κλειδιά που θα πρέπει να εισάγεις όταν συνδέεσαι."
    manual_instructions: 'Αν δεν μπορείς να σαρώσεις τον κωδικό QR και χρειάζεσαι να τον εισάγεις χειροκίνητα, ορίστε η μυστική φράση σε μορφή κειμένου:'
    setup: Ρύθμιση
    wrong_code: Ο κωδικός που έβαλες ήταν άκυρος! Η ώρα στον διακομιστή και τη συσκευή είναι σωστή;
  pagination:
    newer: Νεότερο
    next: Επόμενο


@@ 1217,8 1407,12 @@ el:
      unrecognized_emoji: δεν αναγνωρίζεται ως emoji
  relationships:
    activity: Δραστηριότητα λογαριασμού
    confirm_follow_selected_followers: Είσαι βέβαιος ότι θες να ακολουθήσεις τους επιλεγμένους ακόλουθους;
    confirm_remove_selected_followers: Είσαι βέβαιος ότι θες να αφαιρέσεις τους επιλεγμένους ακόλουθους;
    confirm_remove_selected_follows: Είσαι βέβαιος ότι θες να αφαιρέσεις τα επιλεγμένα άτομα που ακολουθείς;
    dormant: Αδρανείς
    follow_failure: Δεν ήταν δυνατή η παρακολούθηση ορισμένων από τους επιλεγμένους λογαριασμούς.
    follow_selected_followers: Ακολουθήστε τους επιλεγμένους ακόλουθους
    followers: Σε ακολουθούν
    following: Ακολουθείς
    invited: Προσκεκλημένοι


@@ 1239,6 1433,9 @@ el:
      invalid_rules: δεν παραπέμπει σε έγκυρους κανόνες
  rss:
    content_warning: 'Προειδοποίηση περιεχομένου:'
    descriptions:
      account: Δημόσιες δημοσιεύσεις από @%{acct}
      tag: 'Δημόσιες δημοσιεύσεις με ετικέτα #%{hashtag}'
  scheduled_statuses:
    over_daily_limit: Έχεις υπερβεί το όριο των %{limit} προγραμματισμένων τουτ για εκείνη τη μέρα
    over_total_limit: Έχεις υπερβεί το όριο των %{limit} προγραμματισμένων τουτ


@@ 1247,13 1444,17 @@ el:
    activity: Τελευταία δραστηριότητα
    browser: Φυλλομετρητής (Browser)
    browsers:
      alipay: Alipay
      blackberry: BlackBerry
      chrome: Chrome
      edge: Microsoft Edge
      electron: Electron
      firefox: Firefox
      generic: Άγνωστος φυλλομετρητής
      huawei_browser: Huawei Browser
      ie: Internet Explorer
      micro_messenger: MicroMessenger
      nokia: Nokia S40 Ovi Browser
      opera: Opera
      otter: Otter
      phantom_js: PhantomJS


@@ 1261,10 1462,13 @@ el:
      safari: Safari
      uc_browser: UC Browser
      unknown_browser: Άγνωστος φυλλομετρητής
      weibo: Weibo
    current_session: Τρέχουσα σύνδεση
    description: "%{browser} σε %{platform}"
    explanation: Αυτοί είναι οι φυλλομετρητές (browsers) που είναι συνδεδεμένοι στον λογαριασμό σου στο Mastodon αυτή τη στιγμή.
    ip: IP
    platforms:
      adobe_air: Adobe Air
      android: Android
      blackberry: BlackBerry
      chrome_os: ChromeOS


@@ 1274,9 1478,13 @@ el:
      linux: Linux
      mac: Mac
      unknown_platform: Άγνωστη Πλατφόρμα
      windows: Windows
      windows_mobile: Windows Mobile
      windows_phone: Windows Phone
    revoke: Ανακάλεσε
    revoke_success: Η σύνδεση ανακλήθηκε επιτυχώς
    title: Σύνδεση
    view_authentication_history: Δείτε το ιστορικό ταυτοποιήσεων του λογαριασμού σας
  settings:
    account: Λογαριασμός
    account_settings: Ρυθμίσεις λογαριασμού


@@ 1296,7 1504,10 @@ el:
    preferences: Προτιμήσεις
    profile: Προφίλ
    relationships: Ακολουθείς και σε ακολουθούν
    statuses_cleanup: Αυτοματοποιημένη διαγραφή δημοσιεύσεων
    strikes: Ποινές από ομάδα συντονισμού
    two_factor_authentication: Πιστοποίηση 2 παραγόντων (2FA)
    webauthn_authentication: Κλειδιά ασφαλείας
  statuses:
    attached:
      audio:


@@ 1338,7 1549,9 @@ el:
    show_older: Εμφάνιση παλαιότερων
    show_thread: Εμφάνιση νήματος
    sign_in_to_participate: Συνδέσου για να συμμετάσχεις στη συζήτηση
    title: '%{name}: "%{quote}"'
    visibilities:
      direct: Άμεση
      private: Μόνο ακόλουθοι
      private_long: Εμφάνιση μόνο σε ακόλουθους
      public: Δημόσιο


@@ 1346,6 1559,26 @@ el:
      unlisted: Μη καταχωρημένο
      unlisted_long: Βλέπει οποιοσδήποτε, αλλά δεν καταχωρείται στις δημόσιες ροές
  statuses_cleanup:
    enabled: Αυτόματη διαγραφή παλιών δημοσιεύσεων
    enabled_hint: Διαγράφει αυτόματα τις δημοσιεύσεις σας μόλις φτάσουν σε ένα καθορισμένο όριο ηλικίας, εκτός αν ταιριάζουν με μία από τις παρακάτω εξαιρέσεις
    exceptions: Εξαιρέσεις
    explanation: Επειδή η διαγραφή δημοσιέυσεων είναι μια κοστοβόρα διαδικασία, γίνεται σε αραιά τακτά διαστήματα, όταν ο διακομιστής δεν είναι ιδιαίτερα απασχολημένος. Γι' αυτό, οι δημοσιεύσεις σας μπορεί να διαγραφούν λίγο μετά το πέρας του ορίου ηλικίας.
    ignore_favs: Αγνόηση αγαπημένων
    ignore_reblogs: Αγνόηση ενισχύσεων
    interaction_exceptions: Εξαιρέσεις βασισμένες σε αλληλεπιδράσεις
    interaction_exceptions_explanation: Σημειώστε ότι δεν υπάρχει εγγύηση για πιθανή διαγραφή δημοσιεύσεων αν αυτά πέσουν κάτω από το όριο αγαπημένων ή ενισχύσεων ακόμα και αν κάποτε το είχαν ξεπεράσει.
    keep_direct: Διατήρηση άμεσων μηνυμάτων
    keep_direct_hint: Δεν διαγράφει κανένα από τα άμεσα μηνύματά σας
    keep_media: Διατήρηση δημοσιεύσεων με συνημμένα πολυμέσων
    keep_media_hint: Δεν διαγράφει καμία από τις δημοσιεύσεις σας που έχουν συνημμένα πολυμέσων
    keep_pinned: Διατήρηση καρφιτσωμένων δημοσιεύσεων
    keep_pinned_hint: Δεν διαγράφει καμία από τις καρφιτσωμένες δημοσιεύσεις σας
    keep_polls: Διατήρηση δημοσκοπήσεων
    keep_polls_hint: Δεν διαγράφει καμία από τις δημοσκοπήσεις σας
    keep_self_bookmark: Διατήρηση δημοσιεύσεων που έχετε σελιδοδείκτη
    keep_self_bookmark_hint: Δεν διαγράφει τις δημοσιεύσεις σας αν τις έχετε προσθέσει στους σελιδοδείκτες
    keep_self_fav: Κρατήστε τις δημοσιεύσεις που έχετε στα αγαπημένες
    keep_self_fav_hint: Δεν διαγράφει τις δημοσιεύσεις σας αν τις έχετε στα αγαπημένα
    min_age:
      '1209600': 2 εβδομάδες
      '15778476': 6 μήνες


@@ 1355,10 1588,18 @@ el:
      '604800': 1 εβδομάδα
      '63113904': 2 χρόνια
      '7889238': 3 μήνες
    min_age_label: Όριο ηλικίας
    min_favs: Κρατήστε τις δημοσιεύσεις που έχουν γίνει αγαπημένες τουλάχιστον
    min_favs_hint: Δεν διαγράφει καμία από τις δημοσιεύσεις σας που έχει λάβει τουλάχιστον αυτόν τον αριθμό αγαπημένων. Αφήστε κενό για να διαγράψετε δημοσιεύσεις ανεξάρτητα από τον αριθμό των αγαπημένων
    min_reblogs: Διατήρηση δημοσιεύσεων που έχουν ενισχυθεί τουλάχιστον
    min_reblogs_hint: Δεν διαγράφει καμία από τις δημοσιεύσεις σας που έχει λάβει τουλάχιστον αυτόν τον αριθμό ενισχύσεων. Αφήστε κενό για να διαγράψετε δημοσιεύσεις ανεξάρτητα από τον αριθμό των ενισχύσεων
  stream_entries:
    pinned: Καρφιτσωμένο τουτ
    reblogged: προωθημένο
    sensitive_content: Ευαίσθητο περιεχόμενο
  strikes:
    errors:
      too_late: Είναι πολύ αργά για να κάνετε έφεση σε αυτήν την ποινή
  tags:
    does_not_match_previous_name: δεν ταιριάζει με το προηγούμενο όνομα
  themes:


@@ 1367,64 1608,110 @@ el:
    mastodon-light: Mastodon (Ανοιχτόχρωμο)
  time:
    formats:
      default: "%b %d, %Y, %H:%M"
      month: "%b %Y"
      time: "%H:%M"
  two_factor_authentication:
    add: Προσθήκη
    disable: Απενεργοποίησε
    disabled_success: Η ταυτοποίηση δύο παραγόντων απενεργοποιήθηκε επιτυχώς
    edit: Επεξεργασία
    enabled: Η πιστοποίηση 2 παραγόντων (2FA) είναι ενεργοποιημένη
    enabled_success: Η πιστοποίηση 2 παραγόντων (2FA) ενεργοποιήθηκε επιτυχώς
    generate_recovery_codes: Δημιούργησε κωδικούς ανάκτησης
    lost_recovery_codes: Οι κωδικοί ανάκτησης σου επιτρέπουν να ανακτήσεις ξανά πρόσβαση στον λογαριασμό σου αν χάσεις το τηλέφωνό σου. Αν έχεις χάσει τους κωδικούς ανάκτησης, μπορείς να τους δημιουργήσεις ξανά εδώ. Οι παλιοί κωδικοί σου θα ακυρωθούν.
    methods: Μέθοδοι δύο παραγόντων
    otp: Εφαρμογή επαλήθευσης
    recovery_codes: Εφεδρικοί κωδικοί ανάκτησης
    recovery_codes_regenerated: Οι εφεδρικοί κωδικοί ανάκτησης δημιουργήθηκαν επιτυχώς
    recovery_instructions_html: Αν ποτέ δεν έχεις πρόσβαση στο κινητό σου, μπορείς να χρησιμοποιήσεις έναν από τους παρακάτω κωδικούς ανάκτησης για να αποκτήσεις πρόσβαση στο λογαριασμό σου. <strong>Διαφύλαξε τους κωδικούς ανάκτησης</strong>. Για παράδειγμα, μπορείς να τους εκτυπώσεις και να τους φυλάξεις μαζί με άλλα σημαντικά σου έγγραφα.
    webauthn: Κλειδιά ασφαλείας
  user_mailer:
    appeal_approved:
      action: Μετάβαση στον λογαριασμό σας
      explanation: Η έφεση της ποινής εναντίον του λογαριασμού σας στις %{strike_date}, που υποβάλλατε στις %{appeal_date}, έχει εγκριθεί. Ο λογαριασμός σας είναι και πάλι σε καλή κατάσταση.
      subject: Η έφεση σας από τις %{date} έχει εγκριθεί
      title: Έφεση εγκρίθηκε
    appeal_rejected:
      explanation: Η έφεση της ποινής εναντίον του λογαριασμού σας στις %{strike_date}, που υποβάλλατε στις %{appeal_date}, έχει απορριφθεί.
      subject: Η έφεση σας από τις %{date} έχει απορριφθεί
      title: Έφεση απορρίφθηκε
    backup_ready:
      explanation: Είχες ζητήσει εφεδρικό αντίγραφο του λογαριασμού σου στο Mastodon. Είναι έτοιμο για κατέβασμα!
      subject: Το εφεδρικό αντίγραφό σου είναι έτοιμο για κατέβασμα
      title: Λήψη εφεδρικού αρχείου
    suspicious_sign_in:
      change_password: αλλάξτε τον κωδικό πρόσβασής σας
      details: 'Εδώ είναι οι λεπτομέρειες της σύνδεσης:'
      explanation: Εντοπίσαμε μια σύνδεση στο λογαριασμό σας από μια νέα διεύθυνση IP.
      further_actions_html: Αν δεν ήσασταν εσείς, σας συνιστούμε να %{action} αμέσως και να ενεργοποιήσετε τον έλεγχο ταυτοποίησης δύο παραγόντων για να διατηρήσετε τον λογαριασμό σας ασφαλή.
      subject: Ο λογαριασμός σας έχει συνδεθεί από μια νέα διεύθυνση IP
      title: Μια νέα σύνδεση
    warning:
      appeal: Υποβολή έφεσης
      appeal_description: Αν πιστεύετε ότι έγινε λάθος, μπορείτε να υποβάλετε μια αίτηση στο προσωπικό του %{instance}.
      categories:
        spam: Ανεπιθύμητο
        violation: Το περιεχόμενο παραβιάζει τις ακόλουθες οδηγίες κοινότητας
      explanation:
        delete_statuses: Μερικές από τις δημοσιεύσεις σου έχουν βρεθεί να παραβιάζουν μία ή περισσότερες οδηγίες κοινότητας και έχουν συνεπώς αφαιρεθεί από τους συντονιστές του %{instance}.
        disable: Δεν μπορείς πλέον να χρησιμοποιήσεις τον λογαριασμό σου, αλλά το προφίλ σου και άλλα δεδομένα παραμένουν άθικτα. Μπορείς να ζητήσετε ένα αντίγραφο ασφαλείας των δεδομένων σου, να αλλάξεις τις ρυθμίσεις του λογαριασμού σου ή να διαγράψεις τον λογαριασμό σου.
        mark_statuses_as_sensitive: Μερικές από τις δημοσιεύσεις σου έχουν επισημανθεί ως ευαίσθητες από τους συντονιστές του %{instance}. Αυτό σημαίνει ότι οι άνθρωποι θα πρέπει να πατήσουν τα πολυμέσα στις δημοσιεύσεις πριν εμφανιστεί μια προεπισκόπηση. Μπορείς να επισημάνεις τα πολυμέσα ως ευαίσθητα όταν δημοσιεύεις στο μέλλον.
        sensitive: Από δω και στο εξής, όλα τα μεταφορτωμένα αρχεία πολυμέσων σου θα επισημανθούν ως ευαίσθητα και κρυμμένα πίσω από μια προειδοποίηση πατήστε - για - εμφάνιση.
        silence: Μπορείς ακόμα να χρησιμοποιείς το λογαριασμό σου, αλλά μόνο άτομα που σε ακολουθούν ήδη θα δουν τις δημοσιεύσεις σου σε αυτόν τον διακομιστή και μπορεί να αποκλειστείς από διάφορες δυνατότητες ανακάλυψης. Ωστόσο, οι άλλοι μπορούν ακόμα να σε ακολουθήσουν με μη αυτόματο τρόπο.
        suspend: Δε μπορείς πλέον να χρησιμοποιήσεις τον λογαριασμό σου και το προφίλ σου και άλλα δεδομένα δεν είναι πλέον προσβάσιμα. Μπορείς ακόμα να συνδεθείς για να αιτηθείς αντίγραφο των δεδομένων σου μέχρι να αφαιρεθούν πλήρως σε περίπου 30 μέρες αλλά, θα διατηρήσουμε κάποια βασικά δεδομένα για να σε αποτρέψουμε να παρακάμψεις την αναστολή.
      reason: 'Αιτιολογία:'
      statuses: 'Αναφερόμενες δημοσιεύσεις:'
      subject:
        delete_statuses: Οι δημοσιεύσεις σου στον %{acct} έχουν αφαιρεθεί
        disable: Ο λογαριασμός σου %{acct} έχει παγώσει
        mark_statuses_as_sensitive: Οι δημοσιεύσεις σου στον %{acct} έχουν επισημανθεί ως ευαίσθητες
        none: Προειδοποίηση προς %{acct}
        sensitive: Οι δημοσιεύσεις σου στο %{acct} θα επισημανθούν ως ευαίσθητες από 'δω και στο εξής
        silence: Ο λογαριασμός σου %{acct} έχει περιοριστεί
        suspend: Ο λογαριασμός σου %{acct} έχει ανασταλεί
      title:
        delete_statuses: Οι δημοσιεύσεις αφαιρέθηκαν
        disable: Παγωμένος λογαριασμός
        mark_statuses_as_sensitive: Οι δημοσιέυσεις επισημάνθηκαν ως ευαίσθητες
        none: Προειδοποίηση
        sensitive: Ο λογαριασμός επισημάνθηκε ως ευαίσθητος
        silence: Περιορισμένος λογαριασμός
        suspend: Λογαριασμός σε αναστολή
    welcome:
      edit_profile_action: Στήσιμο προφίλ
      edit_profile_step: Μπορείς να προσαρμόσεις το προφίλ σου ανεβάζοντας μια εικόνα προφίλ, αλλάζοντας το εμφνιζόμενο όνομα και άλλα. Μπορείς να επιλέξεις να αξιολογείς νέους ακόλουθους πριν τους επιτραπεί να σε ακολουθήσουν.
      explanation: Μερικές συμβουλές για να ξεκινήσεις
      final_action: Ξεκίνα τις δημοσιεύσεις
      final_step: 'Ξεκίνα να δημοσιεύεις! Ακόμα και χωρίς ακόλουθους τις δημόσιες δημοσιεύσεις σου μπορεί να τις δουν άλλοι, για παράδειγμα στην τοπική ροή ή στις ετικέτες. Ίσως να θέλεις να μας γνωρίσεις τον εαυτό σου με την ετικέτα #introductions.'
      full_handle: Το πλήρες όνομά σου
      full_handle_hint: Αυτό θα εδώ θα πεις στους φίλους σου για να σου μιλήσουν ή να σε ακολουθήσουν από άλλο κόμβο.
      subject: Καλώς ήρθες στο Mastodon
      title: Καλώς όρισες, %{name}!
  users:
    follow_limit_reached: Δεν μπορείς να ακολουθήσεις περισσότερα από %{limit} άτομα
    go_to_sso_account_settings: Μεταβείτε στις ρυθμίσεις λογαριασμού του παρόχου ταυτότητας σας
    invalid_otp_token: Άκυρος κωδικός πιστοποίησης 2 παραγόντων (2FA)
    otp_lost_help_html: Αν χάσεις και τα δύο, μπορείς να επικοινωνήσεις με τον/την %{email}
    seamless_external_login: Επειδή έχεις συνδεθεί μέσω τρίτης υπηρεσίας, οι ρυθμίσεις συνθηματικού και email δεν είναι διαθέσιμες.
    signed_in_as: 'Έχεις συνδεθεί ως:'
  verification:
    explanation_html: 'Μπορείς να <strong>πιστοποιήσεις τον εαυτό σου ως ιδιοκτήτη των συνδέσμων που εμφανίζεις στα μεταδεδομένα του προφίλ σου</strong>. Για να συμβεί αυτό, ο συνδεδεμένος ιστότοπος πρέπει να περιέχει ένα σύνδεσμο που να επιστρέφει προς το προφίλ σου στο Mastodon. Ο σύνδεσμος επιστροφής <strong>πρέπει</strong> περιέχει την ιδιότητα (attribute) <code>rel="me"</code>. Το περιεχόμενο του κειμένου δεν έχει σημασία. Για παράδειγμα:'
    explanation_html: 'Μπορείς να <strong>επαληθεύσεις τον εαυτό σου ως ιδιοκτήτη των συνδέσμων που εμφανίζεις στα μεταδεδομένα του προφίλ σου</strong>. Για να συμβεί αυτό, ο συνδεδεμένος ιστότοπος πρέπει να περιέχει ένα σύνδεσμο που να επιστρέφει προς το προφίλ σου στο Mastodon. Ο σύνδεσμος επιστροφής <strong>πρέπει</strong> να περιέχει την ιδιότητα <code>rel="me"</code>. Το περιεχόμενο του κειμένου δεν έχει σημασία. Για παράδειγμα:'
    verification: Πιστοποίηση
  webauthn_credentials:
    add: Προσθήκη νέου κλειδιού ασφαλείας
    create:
      error: Παρουσιάστηκε πρόβλημα κατά την προσθήκη του κλειδιού ασφαλείας. Παρακαλώ δοκίμασε ξανά.
      success: Το κλειδί ασφαλείας σας προστέθηκε με επιτυχία.
    delete: Διαγραφή
    delete_confirmation: Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το κλειδί ασφαλείας;
    description_html: Αν ενεργοποιήσεις την <strong>ταυτοποίηση κλειδιού ασφαλείας</strong>, κατά τη σύνδεσή σου θα χρειαστεί να χρησιμοποιήσεις ένα από τα κλειδιά ασφαλείας σου.
    destroy:
      error: Παρουσιάστηκε πρόβλημα κατά την διαγραφή του κλειδιού ασφαλείας. Παρακαλώ δοκίμασε ξανά.
      success: Το κλειδί ασφαλείας σας διαγράφηκε με επιτυχία.
    invalid_credential: Άκυρο κλειδί ασφαλείας
    nickname_hint: Εισάγετε το ψευδώνυμο του νέου κλειδιού ασφαλείας σου
    not_enabled: Δεν έχεις ενεργοποιήσει το WebAuthn ακόμα
    not_supported: Αυτό το πρόγραμμα περιήγησης δεν υποστηρίζει κλειδιά ασφαλείας
    otp_required: Για να χρησιμοποιήσεις κλειδιά ασφαλείας, ενεργοποιήσε πρώτα την ταυτοποίηση δύο παραγόντων.
    registered_on: Εγγραφή στις %{date}

M config/locales/en-GB.yml => config/locales/en-GB.yml +119 -1
@@ 475,6 475,67 @@ en-GB:
      confirm_purge: Are you sure you want to permanently delete data from this domain?
      content_policies:
        comment: Internal note
        description_html: You can define content policies that will be applied to all accounts from this domain and any of its subdomains.
        limited_federation_mode_description_html: You can chose whether to allow federation with this domain.
        policies:
          reject_media: Reject media
          reject_reports: Reject reports
          silence: Limit
          suspend: Suspend
        policy: Policy
        reason: Public reason
        title: Content policies
      dashboard:
        instance_accounts_dimension: Most followed accounts
        instance_accounts_measure: stored accounts
        instance_followers_measure: our followers there
        instance_follows_measure: their followers here
        instance_languages_dimension: Top languages
        instance_media_attachments_measure: stored media attachments
        instance_reports_measure: reports about them
        instance_statuses_measure: stored posts
      delivery:
        all: All
        clear: Clear delivery errors
        failing: Failing
        restart: Restart delivery
        stop: Stop delivery
        unavailable: Unavailable
      delivery_available: Delivery is available
      delivery_error_days: Delivery error days
      delivery_error_hint: If delivery is not possible for %{count} days, it will be automatically marked as undeliverable.
      destroyed_msg: Data from %{domain} is now queued for imminent deletion.
      empty: No domains found.
      known_accounts:
        one: "%{count} known account"
        other: "%{count} known accounts"
      moderation:
        all: All
        limited: Limited
        title: Moderation
      private_comment: Private comment
      public_comment: Public comment
      purge: Purge
      purge_description_html: If you believe this domain is offline for good, you can delete all account records and associated data from this domain from your storage. This may take a while.
      title: Federation
      total_blocked_by_us: Blocked by us
      total_followed_by_them: Followed by them
      total_followed_by_us: Followed by us
      total_reported: Reports about them
      total_storage: Media attachments
      totals_time_period_hint_html: The totals displayed below include data for all time.
    invites:
      deactivate_all: Deactivate all
      filter:
        all: All
        available: Available
        expired: Expired
        title: Filter
      title: Invites
    ip_blocks:
      add_new: Create rule
      created_msg: Successfully added new IP rule
      delete: Delete
    roles:
      categories:
        devops: DevOps


@@ 523,8 584,12 @@ en-GB:
  invites:
    delete: Deactivate
    expired: Expired
  navigation:
    toggle_menu: Toggle menu
  notification_mailer:
    admin:
      report:
        subject: "%{name} submitted a report"
      sign_up:
        subject: "%{name} signed up"
    favourite:


@@ 539,8 604,60 @@ en-GB:
      action: Manage follow requests
      body: "%{name} has requested to follow you"
      subject: 'Pending follower: %{name}'
      title: New follow request
    mention:
      action: Reply
      body: 'You were mentioned by %{name} in:'
      subject: You were mentioned by %{name}
      title: New mention
    poll:
      subject: A poll by %{name} has ended
    reblog:
      body: 'Your post was boosted by %{name}:'
      subject: "%{name} boosted your post"
      title: New boost
    status:
      subject: "%{name} just posted"
    update:
      subject: "%{name} edited a post"
  notifications:
    email_events: Events for e-mail notifications
    email_events_hint: 'Select events that you want to receive notifications for:'
    other_settings: Other notifications settings
  number:
    human:
      decimal_units:
        format: "%n%u"
        units:
          billion: B
          million: M
          quadrillion: Q
          thousand: K
          trillion: T
  otp_authentication:
    code_hint: Enter the code generated by your authenticator app to confirm
    description_html: If you enable <strong>two-factor authentication</strong> using an authenticator app, logging in will require you to be in possession of your phone, which will generate tokens for you to enter.
    enable: Enable
    instructions_html: "<strong>Scan this QR code into Google Authenticator or a similar TOTP app on your phone</strong>. From now on, that app will generate tokens that you will have to enter when logging in."
    manual_instructions: 'If you can''t scan the QR code and need to enter it manually, here is the plain-text secret:'
    setup: Set up
    wrong_code: The entered code was invalid! Are server time and device time correct?
  pagination:
    newer: Newer
    next: Next
    older: Older
    prev: Prev
    truncate: "&hellip;"
  polls:
    errors:
      already_voted: You have already voted on this poll
      duplicate_options: contain duplicate items
      duration_too_long: is too far into the future
      duration_too_short: is too soon
      expired: The poll has already ended
      invalid_choice: The chosen vote option does not exist
      over_character_limit: cannot be longer than %{max} characters each
      too_few_options: must have more than one item
      too_many_options: can't contain more than %{max} items
  preferences:
    other: Other


@@ 837,12 954,13 @@ en-GB:
      title: Welcome aboard, %{name}!
  users:
    follow_limit_reached: You cannot follow more than %{limit} people
    go_to_sso_account_settings: Go to your identity provider's account settings
    invalid_otp_token: Invalid two-factor code
    otp_lost_help_html: If you lost access to both, you may get in touch with %{email}
    seamless_external_login: You are logged in via an external service, so password and e-mail settings are not available.
    signed_in_as: 'Signed in as:'
  verification:
    explanation_html: 'You can <strong>verify yourself as the owner of the links in your profile metadata</strong>. For that, the linked website must contain a link back to your Mastodon profile. The link back <strong>must</strong> have a <code>rel="me"</code> attribute. The text content of the link does not matter. Here is an example:'
    explanation_html: 'You can <strong>verify yourself as the owner of the links in your profile metadata</strong>. For that, the linked website must contain a link back to your Mastodon profile. After adding the link you may need to come back here and re-save your profile for the verification to take effect. The link back <strong>must</strong> have a <code>rel="me"</code> attribute. The text content of the link does not matter. Here is an example:'
    verification: Verification
  webauthn_credentials:
    add: Add new security key

M config/locales/eo.yml => config/locales/eo.yml +0 -1
@@ 1691,7 1691,6 @@ eo:
    seamless_external_login: Vi estas ensalutinta per ekstera servo, do pasvortaj kaj retadresaj agordoj ne estas disponeblaj.
    signed_in_as: 'Salutinta kiel:'
  verification:
    explanation_html: 'Vi povas <strong>pruvi, ke vi estas la posedanto de la ligiloj en viaj profilaj metadatumoj</strong>. Por fari tion, la alligita retejo devas enhavi ligilon reen al via Mastodon-profilo. La religilo <strong>devas</strong> havi la atributon <code>rel="me"</code>. Ne gravas la teksta enhavo de la religilo. Jen ekzemplo:'
    verification: Kontrolo
  webauthn_credentials:
    add: Aldoni novan sekurecan ŝlosilon

M config/locales/es-AR.yml => config/locales/es-AR.yml +8 -1
@@ 812,6 812,12 @@ es-AR:
        message_html: No definiste ninguna regla del servidor.
      sidekiq_process_check:
        message_html: No hay ningún proceso Sidekiq en ejecución para la/s cola/s %{value}. Por favor, revisá tu configuración de Sidekiq
      upload_check_privacy_error:
        action: Revisá acá para más información
        message_html: "<strong>Tu servidor web está mal configurado. La privacidad de tus usuarios está en riesgo.</strong>"
      upload_check_privacy_error_object_storage:
        action: Revisá acá para más información
        message_html: "<strong>El almacenamiento de tu objeto está mal configurado. La privacidad de tus usuarios está en riesgo.</strong>"
    tags:
      review: Estado de revisión
      updated_msg: La configuración de la etiqueta se actualizó exitosamente


@@ 1684,12 1690,13 @@ es-AR:
      title: "¡Bienvenido a bordo, %{name}!"
  users:
    follow_limit_reached: No podés seguir a más de %{limit} cuentas
    go_to_sso_account_settings: Andá a la configuración de cuenta de tu proveedor de identidad
    invalid_otp_token: Código de dos factores no válido
    otp_lost_help_html: Si perdiste al acceso a ambos, podés ponerte en contacto con %{email}
    seamless_external_login: Iniciaste sesión desde un servicio externo, así que la configuración de contraseña y correo electrónico no están disponibles.
    signed_in_as: 'Iniciaste sesión como:'
  verification:
    explanation_html: 'Podés <strong>verificarte a vos mismo como el propietario de los enlaces en los metadatos de tu perfil</strong>. Para eso, el sitio web del enlace debe contener un enlace de vuelta a tu perfil de Mastodon. El enlace en tu sitio <strong>debe</strong> tener un atributo <code>rel="me"</code>. El contenido del texto del enlace no importa. Acá tenés un ejemplo:'
    explanation_html: 'Podés <strong>verificarte a vos mismo como el propietario de los enlaces en los metadatos de tu perfil</strong>. Para eso, el sitio web del enlace debe contener un enlace de vuelta a tu perfil de Mastodon. Después de agregar el enlace, puede que tengás que volver acá y volver a guardar los cambios en tu perfil para que la verificación surta efecto. El enlace en tu sitio <strong>debe</strong> tener un atributo <code>rel="me"</code>. El contenido del texto del enlace no importa. Acá tenés un ejemplo:'
    verification: Verificación
  webauthn_credentials:
    add: Agregar nueva llave de seguridad

M config/locales/es-MX.yml => config/locales/es-MX.yml +8 -1
@@ 812,6 812,12 @@ es-MX:
        message_html: No ha definido ninguna regla del servidor.
      sidekiq_process_check:
        message_html: No hay ningún proceso Sidekiq en ejecución para la(s) cola(s) %{value}. Por favor, revise su configuración de Sidekiq
      upload_check_privacy_error:
        action: Para más información aquí
        message_html: "<strong>Su servidor web no está configurado. Está en riesgo la privacidad de sus usuarios.</strong>"
      upload_check_privacy_error_object_storage:
        action: Para más información aquí
        message_html: "<strong>Su almacenamiento no está configurado. Está en riesgo la privacidad de sus usuarios.</strong>"
    tags:
      review: Estado de revisión
      updated_msg: Hashtags actualizados exitosamente


@@ 1684,12 1690,13 @@ es-MX:
      title: Te damos la bienvenida a bordo, %{name}!
  users:
    follow_limit_reached: No puedes seguir a más de %{limit} personas
    go_to_sso_account_settings: Diríjete a la configuración de la cuenta de su proveedor de identidad
    invalid_otp_token: Código de dos factores incorrecto
    otp_lost_help_html: Si perdiste al acceso a ambos, puedes ponerte en contancto con %{email}
    seamless_external_login: Has iniciado sesión desde un servicio externo, así que los ajustes de contraseña y correo no están disponibles.
    signed_in_as: 'Sesión iniciada como:'
  verification:
    explanation_html: 'Puedes <strong> verificarte a ti mismo como el dueño de los links en los metadatos de tu perfil </strong>. Para eso, el sitio vinculado debe contener un vínculo a tu perfil de Mastodon. El vínculo en tu sitio <strong> debe </strong> tener un atributo <code> rel="me"</code>. El texto del vínculo no importa. Aquí un ejemplo:'
    explanation_html: 'Puedes <strong>verificarte a ti mismo como el dueño de los links en los metadatos de tu perfil</strong>. Para eso, el sitio enlazado debe contener un enlace a tu perfil de Mastodon. Después de añadir el enlace, necesitarás regresar aquí y volver a guardar tu perfil para que la verificación tenga efecto. El enlace en tu sitio <strong>debe</strong> tener un atributo <code>rel="me"</code>. El texto del contenido del enlace no importa. Aquí un ejemplo:'
    verification: Verificación
  webauthn_credentials:
    add: Agregar nueva clave de seguridad

M config/locales/es.yml => config/locales/es.yml +7 -1
@@ 812,6 812,12 @@ es:
        message_html: No ha definido ninguna regla del servidor.
      sidekiq_process_check:
        message_html: No hay ningún proceso Sidekiq en ejecución para la(s) cola(s) %{value}. Por favor, revise su configuración de Sidekiq
      upload_check_privacy_error:
        action: Haga clic aquí para obtener más información
        message_html: "<strong>Su servidor web está mal configurado. La privacidad de sus usuarios está en riesgo.</strong>"
      upload_check_privacy_error_object_storage:
        action: Haga clic aquí para obtener más información
        message_html: "<strong>El almacenamiento de su objeto está mal configurado. La privacidad de sus usuarios está en riesgo.</strong>"
    tags:
      review: Estado de revisión
      updated_msg: Hashtags actualizados exitosamente


@@ 1684,12 1690,12 @@ es:
      title: Te damos la bienvenida a bordo, %{name}!
  users:
    follow_limit_reached: No puedes seguir a más de %{limit} personas
    go_to_sso_account_settings: Diríjase a la configuración de la cuenta de su proveedor de identidad
    invalid_otp_token: Código de dos factores incorrecto
    otp_lost_help_html: Si perdiste al acceso a ambos, puedes ponerte en contancto con %{email}
    seamless_external_login: Has iniciado sesión desde un servicio externo, así que los ajustes de contraseña y correo no están disponibles.
    signed_in_as: 'Sesión iniciada como:'
  verification:
    explanation_html: 'Puedes <strong> verificarte a ti mismo como el dueño de los links en los metadatos de tu perfil </strong>. Para eso, el sitio vinculado debe contener un vínculo a tu perfil de Mastodon. El vínculo en tu sitio <strong> debe </strong> tener un atributo <code> rel="me"</code>. El texto del vínculo no importa. Aquí un ejemplo:'
    verification: Verificación
  webauthn_credentials:
    add: Agregar nueva clave de seguridad

M config/locales/et.yml => config/locales/et.yml +9 -2
@@ 600,7 600,7 @@ et:
      created_at: Teavitatud
      delete_and_resolve: Kustuta postitused
      forwarded: Edastatud
      forwarded_to: Edastatud domeenile %{domain}
      forwarded_to: Edastatud %{domain} domeeni
      mark_as_resolved: Märgi lahendatuks
      mark_as_sensitive: Märgi kui tundlik sisu
      mark_as_unresolved: Märgi lahendamata


@@ 812,6 812,12 @@ et:
        message_html: Serverireegleid pole defineeritud.
      sidekiq_process_check:
        message_html: Ühtegi Sidekiq protsessi pole %{value} järjekorra jaoks. Sidekiq seadistus vajab üle vaatamist
      upload_check_privacy_error:
        action: Klõpsa lisainfo saamiseks siia
        message_html: "<strong>Veebiserver on valesti seadistatud. Kasutajate privaatsus on ohustatud.</strong>"
      upload_check_privacy_error_object_storage:
        action: Klõpsa lisainfo saamiseks siia
        message_html: "<strong>Objektihoidla on valesti seadistatud. Kasutajate privaatsus on ohustatud.</strong>"
    tags:
      review: Vaata olek üle
      updated_msg: Sildi sätted edukalt uuendatud


@@ 1689,12 1695,13 @@ et:
      title: Tere tulemast, %{name}!
  users:
    follow_limit_reached: Ei saa jälgida rohkem kui %{limit} inimest
    go_to_sso_account_settings: Mine oma idenditeedipakkuja kontosätetesse
    invalid_otp_token: Vale kaheastmeline võti
    otp_lost_help_html: Kui kaotasid ligipääsu mõlemale, saad võtta ühendust %{email}-iga
    seamless_external_login: Välise teenuse kaudu sisse logides pole salasõna ja e-posti sätted saadaval.
    signed_in_as: 'Sisse logitud kasutajana:'
  verification:
    explanation_html: 'Saad <strong>kinnitada ennast oma profiili veebiviidete omanikuna</strong>. Selleks peab viidatud veebilehel olema link tagasi su Mastodoni profiilile. Tagasi saatval lingil <strong>peab</strong> olema <code>rel="me"</code> atribuut. Lingi tekstiline sisu ei ole oluline. Siin on üks näide:'
    explanation_html: 'Saad <strong>kinnitada ennast oma profiili metaandmete veebiviidete omanikuna.</strong> Selleks peab lingitud veebilehel olema viide tagasi sinu Mastodoni profiilile. Pärast lingi lisamist pead võib-olla siia tagasi tulema ja oma profiili uuesti salvestama, et kinnitus jõustuks. Tagasiviide <strong>peab</strong> sisaldama <code>rel="me"</code> atribuuti. Lingi tekstiline sisu ei ole oluline. Siin on näide:'
    verification: Kinnitamine
  webauthn_credentials:
    add: Uue turvavõtme lisamine

M config/locales/eu.yml => config/locales/eu.yml +8 -1
@@ 814,6 814,12 @@ eu:
        message_html: Ez duzu zerbitzariaren araurik definitu.
      sidekiq_process_check:
        message_html: Ez da ari Sidekiq prozesurik exekutatzen %{value} ilad(et)an. Egiaztatu Sidekiq konfigurazioa
      upload_check_privacy_error:
        action: Ikus hemen informazio gehiagorako
        message_html: "<strong>Zure zerbitzaria ez dago ongi konfiguratua. Zure erabiltzaileen pribatutasuna arriskuan dago.</strong>"
      upload_check_privacy_error_object_storage:
        action: Ikus hemen informazio gehiagorako
        message_html: "<strong>Zure objektuen biltegiratzea ez dago ongi konfiguratua. Zure erabiltzaileen pribatutasuna arriskuan dago.</strong>"
    tags:
      review: Berrikusketaren egoera
      updated_msg: Traola-ezarpenak ongi eguneratu dira


@@ 1686,12 1692,13 @@ eu:
      title: Ongi etorri, %{name}!
  users:
    follow_limit_reached: Ezin dituzu %{limit} pertsona baino gehiago jarraitu
    go_to_sso_account_settings: Jo zure identitate-hornitzaileko kontuaren ezarpenetara
    invalid_otp_token: Bi faktoreetako kode baliogabea
    otp_lost_help_html: 'Bietara sarbidea galdu baduzu, jarri kontaktuan hemen: %{email}'
    seamless_external_login: Kanpo zerbitzu baten bidez hasi duzu saioa, beraz pasahitza eta e-mail ezarpenak ez daude eskuragarri.
    signed_in_as: 'Saioa honela hasita:'
  verification:
    explanation_html: 'Ezin duzu <strong>zure burua zure profileko metadatuen esteken jabe gisa egiaztatu</strong>. Horretarako, estekatutako webgunean zure Mastodon profilera daraman esteka bat egon behar du. Mastodonera daraman esteka horrek<strong>derrigorrez</strong> <code>rel="me"</code> artibutua izan behar du . Estekaren testuak ez du axola. Hona adibide bat:'
    explanation_html: '<strong>Zure profileko metadatuetako esteken jabe zarela egiazta</strong> dezakezu. Horretarako, webguneak zure Mastodoneko profilaren esteka eduki behar du. Esteka webgunean erantsi ondoren, aldaketak berriro gorde beharko dituzu egiaztapena burutu ahal izateko. Estekak <code>rel="me"</code> atributua eduki <strong>behar</strong> du. Estekaren testu-edukia ez da aintzat hartzen. Hemen duzu adibide bat:'
    verification: Egiaztaketa
  webauthn_credentials:
    add: Gehitu segurtasun gako berria

M config/locales/fa.yml => config/locales/fa.yml +0 -1
@@ 1319,7 1319,6 @@ fa:
    seamless_external_login: شما با یک سرویس خارج از مجموعه وارد شده‌اید، به همین دلیل تنظیمات ایمیل و رمز برای شما در دسترس نیست.
    signed_in_as: 'واردشده به نام:'
  verification:
    explanation_html: 'شما می‌توانید <strong>خود را به عنوان مالک صفحه‌ای که در نمایه‌تان به آن پیوند داده‌اید تأیید کنید.</strong> برای این کار، صفحه‌ای که به آن پیوند داده‌اید، خودش باید پیوندی به نمایهٔ ماستودون شما داشته باشد. پیوند در آن صفحه <strong>باید</strong> عبارت <code>rel="me"‎</code> را به عنوان مشخّصهٔ (attribute) در خود داشته باشد. محتوای متن پیوند اهمتی ندارد. یک نمونه از چنین پیوندی:'
    verification: تأیید
  webauthn_credentials:
    add: افزودن کلید امنیتی

M config/locales/fi.yml => config/locales/fi.yml +17 -10
@@ 134,7 134,7 @@ fi:
      search: Hae
      search_same_email_domain: Muut käyttäjät, joilla on sama sähköpostin verkkotunnus
      search_same_ip: Muut käyttäjät, joilla on sama IP-osoite
      security: Suojaus
      security: Turvallisuus
      security_measures:
        only_password: Vain salasana
        password_and_2fa: Salasana ja kaksivaiheinen tunnistautuminen


@@ 316,9 316,9 @@ fi:
      copy: Kopioi
      copy_failed_msg: Emojista ei voitu tehdä paikallista kopiota
      create_new_category: Luo uusi kategoria
      created_msg: Emojin luonti onnistui!
      created_msg: Emojin luotu!
      delete: Poista
      destroyed_msg: Emojon poisto onnistui!
      destroyed_msg: Emojo poistettu!
      disable: Poista käytöstä
      disabled: Ei käytössä
      disabled_msg: Emojin poisto käytöstä onnistui


@@ 333,7 333,7 @@ fi:
        title: Lisää uusi mukautettu emoji
      no_emoji_selected: Emojeita ei muutettu, koska yhtään ei valittu
      not_permitted: Sinulla ei ole oikeutta suorittaa tätä toimintoa
      overwrite: Kirjoita yli
      overwrite: Korvaa
      shortcode: Lyhennekoodi
      shortcode_hint: Vähintään kaksi merkkiä, vain kirjaimia, numeroita ja alaviivoja
      title: Mukautetut emojit


@@ 812,6 812,12 @@ fi:
        message_html: Et ole määrittänyt mitään palvelimen sääntöä.
      sidekiq_process_check:
        message_html: Ei ole Sidekiq-prosessia käynnissä jonossa %{value}. Tarkista Sidekiq-asetukset
      upload_check_privacy_error:
        action: Katso täältä lisätietoja
        message_html: "<strong>Verkkopalvelimesi on määritetty virheellisesti, ja käyttäjiesi yksityisyys on vaarassa.</strong>"
      upload_check_privacy_error_object_storage:
        action: Katso täältä lisätietoja
        message_html: "<strong>Objektivarastosi on määritetty virheellisesti, ja käyttäjiesi yksityisyys on vaarassa.</strong>"
    tags:
      review: Tarkista tila
      updated_msg: Aihetunnisteen asetukset päivitetty onnistuneesti


@@ 966,7 972,7 @@ fi:
  applications:
    created: Sovelluksen luonti onnistui
    destroyed: Sovelluksen poisto onnistui
    logout: Uloskirjautuminen
    logout: Kirjaudu ulos
    regenerate_token: Luo pääsytunnus uudelleen
    token_regenerated: Pääsytunnuksen uudelleenluonti onnistui
    warning: Säilytä tietoa hyvin. Älä milloinkaan jaa sitä muille!


@@ 1152,7 1158,7 @@ fi:
  featured_tags:
    add_new: Lisää uusi
    errors:
      limit: Olet jo lisännyt enimmäismäärän aihetunnisteita
      limit: Olet jo nostanut esille enimmäismäärän aihetunnisteita
    hint_html: "<strong>Mitä ovat näkyvillä olevat hashtagit eli aihetunnisteet?</strong> Ne ovat näkyvissä julkisessa profiilissasi ja niiden avulla ihmiset voivat selata julkisia viestejäsi nimenomaan näiden aihetunnisteiden alla. Ne auttavat esimerkiksi luovan työn tai pitkäaikaisten projektien seurannassa."
  filters:
    contexts:


@@ 1260,7 1266,7 @@ fi:
    title: Kutsu ihmisiä
  lists:
    errors:
      limit: Olet saavuttanut listojen enimmäismäärän
      limit: Sinulla on enimmäismäärä listoja
  login_activities:
    authentication_methods:
      otp: kaksivaiheinen todennussovellus


@@ 1584,7 1590,7 @@ fi:
      '7889238': 3 kuukautta
    min_age_label: Ikäraja
    min_favs: Pidä viestit suosikeissa vähintään
    min_favs_hint: Ei poista julkaisujasi, joita on tykätty vähintään näin monta kertaa. Jätä tyhjäksi poistaaksesi julkaisut tykkäyskertojen määrästä riippumatta
    min_favs_hint: Toiminto ei poista julkaisujasi, joista on tykätty vähintään tässä kohtaa määritellyn monesti. Jätä kenttä tyhjäksi, jos haluat poistaa julkaisut tykkäyksistä huolimatta
    min_reblogs: Pidä viestit tehostettuna vähintään
    min_reblogs_hint: Ei poista yhtään viestiäsi, jota on tehostettu vähintään näin monta kertaa. Jätä tyhjäksi poistaaksesi viestejä riippumatta niiden tehosteiden määrästä
  stream_entries:


@@ 1604,7 1610,7 @@ fi:
    formats:
      default: "%d.%m.%Y klo %H.%M"
      month: "%b %Y"
      time: "%H:%M"
      time: "%H.%M"
  two_factor_authentication:
    add: Lisää
    disable: Poista käytöstä


@@ 1684,12 1690,13 @@ fi:
      title: Tervetuloa mukaan, %{name}!
  users:
    follow_limit_reached: Et voi seurata yli %{limit} henkilöä
    go_to_sso_account_settings: Avaa identiteettitarjoajasi tiliasetukset
    invalid_otp_token: Virheellinen kaksivaiheisen todentamisen koodi
    otp_lost_help_html: Jos sinulla ei ole pääsyä kumpaankaan, voit ottaa yhteyttä osoitteeseen %{email}
    seamless_external_login: Olet kirjautunut ulkoisen palvelun kautta, joten salasana- ja sähköpostiasetukset eivät ole käytettävissä.
    signed_in_as: 'Kirjautunut tilillä:'
  verification:
    explanation_html: 'Voit <strong>vahvistaa olevasi profiilisi metatiedoissa olevien linkkien omistaja.</strong>. Tätä varten linkitetyn verkkosivuston täytyy sisältää linkki takaisin Mastodon-profiiliisi. Palauttavalla linkillä <strong>täytyy</strong> olla <code>rel="me"</code>-arvo. Linkin tekstisisällöllä ei ole merkitystä. Tässä on esimerkki:'
    explanation_html: 'Voit <strong>vahvistaa olevasi profiilisi metatietojen sisältämien linkkien omistaja</strong>. Tätä varten linkitetyn verkkosivuston täytyy sisältää paluulinkki Mastodon-profiiliisi. Paluulinkillä <strong>täytyy</strong> olla <code>rel="me"</code>-attribuutti, mutta sen tekstisisältö voi olla mitä tahansa. Tässä esimerkki:'
    verification: Vahvistus
  webauthn_credentials:
    add: Lisää uusi suojausavain

M config/locales/fo.yml => config/locales/fo.yml +9 -2
@@ 812,6 812,12 @@ fo:
        message_html: Tú hevur ikki ásett nakrar ambætarareglur.
      sidekiq_process_check:
        message_html: Eingin Sidekiq gongd koyrir fyri %{value} bíðirøðina(r). Vinarliga eftirkanna Sidekiq uppsetingina
      upload_check_privacy_error:
        action: Kekka her fyri at fáa fleiri upplýsingar
        message_html: "<strong>Vevambætarin hjá tær er skeivt uppsettur. Privatlívið hjá brúkarunum hjá tær er í vanda.</strong>"
      upload_check_privacy_error_object_storage:
        action: Kekka her fyri at fáa fleiri upplýsingar
        message_html: "<strong>Objekt-goymslan hjá tær er skeivt uppsett. Privatlívið hjá brúkarunum hjá tær er í vanda.</strong>"
    tags:
      review: Eftirkanna støðu
      updated_msg: Frámerkjastillingar dagførdar


@@ 1495,7 1501,7 @@ fo:
    import_and_export: Innflyt og útflyt
    migrate: Flyting av kontu
    notifications: Fráboðanir
    preferences: Sertokki
    preferences: Stillingar
    profile: Vangi
    relationships: Fylging og fylgjarar
    statuses_cleanup: Sjálvvirkandi striking av postum


@@ 1684,12 1690,13 @@ fo:
      title: Vælkomin umborð, %{name}!
  users:
    follow_limit_reached: Tú kanst ikki fylgja fleiri enn %{limit} fólk
    go_to_sso_account_settings: Far til kontustillingarnar hjá samleikaveitaranum hjá tær
    invalid_otp_token: Ógyldug tvey-stigs koda
    otp_lost_help_html: Hevur tú mist atgongd til bæði, so kanst tú koma í samband við %{email}
    seamless_external_login: Tú er ritað/ur inn umvegis eina uttanhýsis tænastu, so loyniorð og teldupoststillingar eru ikki tøkar.
    signed_in_as: 'Ritað/ur inn sum:'
  verification:
    explanation_html: 'Tú kanst <strong>vátta teg sjálva/n sum eigara av leinkjunum í metadátunum á vanganum hjá tær</strong>. Til tess má leinkjaða vevstaðið innihalda eitt leinki aftur til Mastodon vangan hjá tær. Leinkið <strong>má</strong> hava eina <code>rel="me"</code> viðseting. Tekstinnihaldið í leikinum er óviðkomandi. Her er eitt dømi:'
    explanation_html: 'Tú kanst <strong>vátta teg sjálva/n sum eigara av leinkjunum í metadátunum á vanganum hjá tær</strong>. Til tess má leinkjaða vevstaðið innihalda eitt leinki aftur til Mastodon vangan hjá tær. Eftir at tú hevur lagt leinkið afturat, so er møguliga neyðugt at koma aftur her og goyma vangan hjá tær av nýggjum fyri at fáa góðkenningina at rigga. Leinkið <strong>má</strong> hava eina <code>rel="me"</code> viðseting. Tekstinnihaldið í leikinum er óviðkomandi. Her er eitt dømi:'
    verification: Váttan
  webauthn_credentials:
    add: Legg nýggjan trygdarlykil afturat

M config/locales/fr-QC.yml => config/locales/fr-QC.yml +0 -1
@@ 1689,7 1689,6 @@ fr-QC:
    seamless_external_login: Vous êtes connecté via un service externe, donc les paramètres concernant le mot de passe et le courriel ne sont pas disponibles.
    signed_in_as: 'Connecté·e en tant que :'
  verification:
    explanation_html: 'Vous pouvez <strong>vous vérifier en tant que propriétaire des liens dans les métadonnées de votre profil</strong>. Pour cela, le site web lié doit contenir un lien vers votre profil Mastodon. Le lien de retour <strong>doit</strong> avoir un attribut <code>rel="me"</code> . Le texte du lien n’a pas d’importance. Voici un exemple :'
    verification: Vérification
  webauthn_credentials:
    add: Ajouter une nouvelle clé de sécurité

M config/locales/fr.yml => config/locales/fr.yml +7 -0
@@ 812,6 812,12 @@ fr:
        message_html: Vous n'avez pas défini de règles pour le serveur.
      sidekiq_process_check:
        message_html: Aucun processus Sidekiq en cours d'exécution pour la/les file(s) d'attente %{value}. Veuillez vérifier votre configuration de Sidekiq
      upload_check_privacy_error:
        action: Pour plus d'informations, cliquez ici
        message_html: "<strong>Votre serveur web est mal configuré. La confidentialité de vos utilisateurs est en péril.</strong>"
      upload_check_privacy_error_object_storage:
        action: Pour plus d'informations, cliquez ici
        message_html: "<strong>Votre serveur web est mal configuré. La confidentialité de vos utilisateurs est en péril.</strong>"
    tags:
      review: État du traitement
      updated_msg: Paramètres du hashtag mis à jour avec succès


@@ 1684,6 1690,7 @@ fr:
      title: Bienvenue à bord, %{name} !
  users:
    follow_limit_reached: Vous ne pouvez pas suivre plus de %{limit} personnes
    go_to_sso_account_settings: Accédez aux paramètres du compte de votre fournisseur d'identité
    invalid_otp_token: Le code d’authentification à deux facteurs est invalide
    otp_lost_help_html: Si vous perdez accès aux deux, vous pouvez contacter %{email}
    seamless_external_login: Vous êtes connecté via un service externe, donc les paramètres concernant le mot de passe et le courriel ne sont pas disponibles.

M config/locales/fy.yml => config/locales/fy.yml +8 -1
@@ 812,6 812,12 @@ fy:
        message_html: Jo hawwe foar dizze server gjin regels opsteld.
      sidekiq_process_check:
        message_html: Der draait gjin Sidekiq-proses foar de wachtrige(n) %{value}. Kontrolearje jo Sidekiq-konfiguraasje
      upload_check_privacy_error:
        action: Klik hjir foar mear ynformaasje
        message_html: "<strong>Jo webserver is ferkeard konfigurearre. De privacy fan jo brûkers is yn gefaar.</strong>"
      upload_check_privacy_error_object_storage:
        action: Klik hjir foar mear ynformaasje
        message_html: "<strong>Jo objektûnthâld is ferkeard konfigurearre. De privacy fan jo brûkers is yn gefaar.</strong>"
    tags:
      review: Steat beoardiele
      updated_msg: Hashtagynstellingen mei sukses bywurke


@@ 1684,12 1690,13 @@ fy:
      title: Wolkom oan board %{name}!
  users:
    follow_limit_reached: Jo kinne net mear as %{limit} accounts folgje
    go_to_sso_account_settings: Gean nei de accountynstellingen fan jo identiteitsprovider
    invalid_otp_token: Unjildige twa-stapstagongskoade
    otp_lost_help_html: As jo tagong ta beide kwytrekke binne, nim dan kontakt op fia %{email}
    seamless_external_login: Jo binne oanmeld fia in eksterne tsjinst, dêrom binne wachtwurden en e-mailynstellingen net beskikber.
    signed_in_as: 'Oanmeld as:'
  verification:
    explanation_html: 'Jo kinne <strong>josels ferifiearje as de eigener fan de keppelingen yn de metadata fan jo profyl</strong>. Hjirfoar moat op de keppele website in keppeling werom nei jo Mastodon-profyl stean. Dizze keppeling <strong>moat</strong> it <code>rel="me"</code>-attribút befetsje. De omskriuwing fan de keppeling makket net út. Hjir is in foarbyld:'
    explanation_html: 'Jo kinne <strong>josels ferifiearje as de eigener fan de keppelingen yn de metadata fan jo profyl</strong>. Hjirfoar moat op de keppele website in keppeling werom nei jo Mastodon-profyl stean. Nei it tafoegjen fan de keppeling moatte jo miskien hjir werom komme en jo profyl opnij bewarje om de ferifikaasje te befêstigjen. Dizze keppeling <strong>moat</strong> it <code>rel="me"</code>-attribút befetsje. De omskriuwing fan de keppeling makket net út. Hjir is in foarbyld:'
    verification: Ferifikaasje
  webauthn_credentials:
    add: Nije befeiligingskaai tafoegje

M config/locales/gd.yml => config/locales/gd.yml +2 -3
@@ 653,7 653,7 @@ gd:
        actions:
          delete_html: Thoir air falbh na postaichean oilbheumach
          mark_as_sensitive_html: Cuir comharra gu bheil meadhanan nam postaichean oilbheumach frionasach
          silence_html: Thèid cò ruigeas <strong>@%{acct}</strong> a chuingeachadh gu mòr air sgàth ’s nach fhaic ach an fheadhainn a bheil ’ga leantainn mu thràth no a tha a’ lorg na pròifil aca a làimh a’ phròifil is an t-susbaint aca.
          silence_html: Thèid cò ruigeas <strong>@%{acct}</strong> a chuingeachadh gu mòr air sgàth ’s nach fhaic ach an fheadhainn a bheil ’ga leantainn mu thràth no a tha a’ lorg na pròifil aca a làimh a’ phròifil is an t-susbaint aca
          suspend_html: Thèid <strong>@%{acct}</strong> a chur à rèim agus cha ghabh a’ phròifil is an t-susbaint aca a ruigsinn no eadar-ghabhail
        close_report: 'Cuir comharra gun deach gearan #%{id} fhuasgladh'
        close_reports_html: Cuir comharra gun deach <strong>gach</strong> gearan an aghaidh <strong>@%{acct}</strong> fhuasgladh


@@ 661,7 661,7 @@ gd:
        preview_preamble_html: 'Gheibh <strong>@%{acct}</strong> rabhadh leis an t-susbaint seo:'
        record_strike_html: Clàraich rabhadh an aghaidh <strong>@%{acct}</strong> airson do chuideachadh ach am bi thu nas teinne le droch-ghiùlan on chunntas seo san àm ri teachd
        send_email_html: Cuir post-d rabhaidh gu <strong>@%{acct}</strong>
        warning_placeholder: Adhbharan roghainneil eile air gnìomh na maorsainneachd
        warning_placeholder: Adhbharan roghainneil eile air gnìomh na maorsainneachd.
      target_origin: Tùs cunntas a’ ghearain
      title: Gearanan
      unassign: Dì-iomruin


@@ 1731,7 1731,6 @@ gd:
    seamless_external_login: Rinn thu clàradh a-steach le seirbheis on taobh a-muigh, mar sin chan eil roghainnean an fhacail-fhaire ’s a’ phuist-d ri làimh dhut.
    signed_in_as: 'Chlàraich thu a-steach mar:'
  verification:
    explanation_html: '’S urrainn dhut <strong>dearbhadh gur e seilbheadair nan ceanglaichean ann am meata-dàta na pròifil agad a th’ annad</strong>. Airson sin a dhèanamh, feumaidh ceangal air ais dhan phròifil Mastodon a bhith aig an làrach-lìn cheangailte. <strong>Feumaidh</strong> buadh <code>rel="me"</code> a bhith aig a’ cheangal air ais. Chan eil e gu diofar dè an t-susbaint a tha ann an teacsa a’ cheangail. Seo ball-eisimpleir dhut:'
    verification: Dearbhadh
  webauthn_credentials:
    add: Cuir iuchair tèarainteachd ùr ris

M config/locales/gl.yml => config/locales/gl.yml +10 -3
@@ 444,7 444,7 @@ gl:
        private_comment_description_html: 'Para axudarche a lembrar de onde veñen os bloqueos importados, imos crealos engadindo o seguinte comentario privado: <q>%{comment}</q>'
        private_comment_template: Importada desde %{source} o %{date}
        title: Importar bloqueos de dominio
      invalid_domain_block: 'Un ou varios dominios non se bloquearon debido ao seguintes erros: %{error}'
      invalid_domain_block: 'Un ou varios dominios non se bloquearon debido ao seguinte erro(s): %{error}'
      new:
        title: Importar bloqueos de dominio
      no_file: Ningún ficheiro seleccionado


@@ 476,7 476,7 @@ gl:
      content_policies:
        comment: Nota interna
        description_html: Podes definir políticas acerca do contido que serán aplicadas a tódalas contas deste dominio e tódolos seus subdominios.
        limited_federation_mode_description_html: Podes elexir se permites a federación con este dominio.
        limited_federation_mode_description_html: Podes elexir se permites ou non a federación con este dominio.
        policies:
          reject_media: Rexeitar multimedia
          reject_reports: Rexeitar denuncias


@@ 812,6 812,12 @@ gl:
        message_html: Non tes definidas regras para o servidor.
      sidekiq_process_check:
        message_html: Non hai procesos Sidekiq a funcionar para a cola(s) %{value}. Revisa a túa configuración para Sidekiq
      upload_check_privacy_error:
        action: Mira aquí para máis información
        message_html: "<strong>O teu servidor non está ben configurado. A privacidade das usuarias está en risco.</strong>"
      upload_check_privacy_error_object_storage:
        action: Mira aquí para máis información
        message_html: "<strong>A almacenaxe de obxectos está mal configurada. A privacidade das usuarias está en risco.</strong>"
    tags:
      review: Estado de revisión
      updated_msg: Actualizaronse os axustes dos cancelos


@@ 1684,12 1690,13 @@ gl:
      title: Benvida, %{name}!
  users:
    follow_limit_reached: Non pode seguir a máis de %{limit} persoas
    go_to_sso_account_settings: Ir aos axustes da conta no teu provedor de identidade
    invalid_otp_token: O código do segundo factor non é válido
    otp_lost_help_html: Se perdes o acceso a ambos, podes contactar con %{email}
    seamless_external_login: Accedeches a través dun servizo externo, polo que os axustes de contrasinal e email non están dispoñibles.
    signed_in_as: 'Rexistrada como:'
  verification:
    explanation_html: 'Podes <strong>validarte a ti mesma como a dona das ligazóns nos metadatos do teu perfil</strong>. Para esto, o sitio web ligado debe conter unha ligazón de retorno ao perfil de Mastodon. Esta ligazón de retorno <strong>ten que</strong> ter un atributo <code>rel="me"</code>. O texto da ligazón non importa. Aquí tes un exemplo:'
    explanation_html: 'Podes <strong>validarte a ti mesma como a dona das ligazóns nos metadatos do perfil</strong>. Para isto, o sitio web ligado debe conter unha ligazón de retorno ao perfil de Mastodon. Despois de engadir a ligazón tes que volver aquí e volver a gardar o teu perfil para que a verificación tome efecto. A ligazón de retorno <strong>ten que</strong> ter un atributo <code>rel="me"</code>. O texto da ligazón non ten importancia. Aquí tes un exemplo:'
    verification: Validación
  webauthn_credentials:
    add: Engadir nova chave de seguridade

M config/locales/he.yml => config/locales/he.yml +8 -1
@@ 840,6 840,12 @@ he:
        message_html: לא הוגדרו שום כללי שרת.
      sidekiq_process_check:
        message_html: שום הליכי Sidekiq לא רצים עבור %{value} תור(ות). בחנו בבקשה את הגדרות Sidekiq
      upload_check_privacy_error:
        action: למידע נוסף
        message_html: "<strong>שרת הווב שלך אינו מכוון כראוי. פרטיות המשתמשות והמשתמשים שלך בסכנה.</strong>"
      upload_check_privacy_error_object_storage:
        action: למידע נוסף
        message_html: "<strong>שרות אחסון הענן שלך אינו מוגדר כראוי. פרטיות המשתמשות והמשתמשים שלך בסכנה.</strong>"
    tags:
      review: סקירת מצב
      updated_msg: הגדרות תגיות עודכנו בהצלחה


@@ 1748,12 1754,13 @@ he:
      title: ברוך/ה הבא/ה, %{name} !
  users:
    follow_limit_reached: לא תוכל לעקוב אחר יותר מ %{limit} אנשים
    go_to_sso_account_settings: מעבר לאפיוני החשבון שלך בשרת הזהות
    invalid_otp_token: קוד דו-שלבי שגוי
    otp_lost_help_html: אם איבדת גישה לשניהם, ניתן ליצור קשר ב-%{email}
    seamless_external_login: את.ה מחובר דרך שירות חיצוני, לכן אפשרויות הסיסמא והדוא"ל לא מאופשרות.
    signed_in_as: 'מחובר בתור:'
  verification:
    explanation_html: 'ניתן <strong>לאמת את עצמך כבעלים של הקישורית במטא-נתונים של פרופילך</strong>. כדי לעשות זאת, האתר המקושר חייב להכיל קישורית חוזרת לפרופיל המסטודון שלך. הקישורית החוזרת <strong>חייבת</strong> להכיל תכונת <code>rel="me"</code>. התוכן הטקסטואלי של הקישורית לא משנה. הנה דוגמא:'
    explanation_html: 'תוכל/י <strong>לאמת את עצמך כבעל/ת הקישורים שבפרופיל שלך</strong>. לשם כך, על האתר המקושר להכיל קישור חוזר לפרופיל המסטודון שלך. אחרי הוספת הקישור ניתן לשוב לפה ולשמור מחדש את הפרופיל כדי להפעיל את אימות הקישור. הקישור החוזר <strong>חייב</strong> להכיל בקוד ה-HTML שלו את התכונה <code>rel="me"</code>. התוכן הטקסטואלי של הקישור לא משנה. הנה דוגמא:'
    verification: אימות
  webauthn_credentials:
    add: הוספת מפתח אבטחה חדש

M config/locales/hi.yml => config/locales/hi.yml +9 -0
@@ 1,5 1,12 @@
---
hi:
  admin:
    system_checks:
      upload_check_privacy_error:
        message_html: "<strong> आपके वेब सर्वर का कन्फिगरेशन सही नहीं है। उपयोगकर्ताओं की निजता खतरे में है। </strong>"
      upload_check_privacy_error_object_storage:
        action: अधिक जानकारी हेतु यहां क्लिक करें।
        message_html: "<strong> आपके वेब सर्वर का कन्फिगरेशन सही नहीं है। उपयोगकर्ताओं की निजता खतरे में है। </strong>"
  errors:
    '400': The request you submitted was invalid or malformed.
    '403': You don't have permission to view this page.


@@ 17,3 24,5 @@ hi:
    platforms:
      kai_os: काइ ओएस
      unknown_platform: अनजान प्लेटफॉर्म
  verification:
    explanation_html: 'आप अपने <strong> प्रोफाइल में इस्तेमाल किए गए लिंक वेरिफाई कर सकते हैं</strong>। इसके लिए आपके वेबसाइट पर आपके मॅस्टोडॉन प्रोफाइल का लिंक होना चाहिए। वेरिफिकेशन पूरा करने के लिए लिंक जोड़ने के बाद यहाँ वापस आकर अपना प्रोफाइल पुनः सेव करें। लिंक बैक में <code>rel="me"</code> अट्रीब्यूट <strong>ज़रूर</strong> होना चाहिए। लिंक पर लिखे टेक्स्ट से कोई मतलब नहीं। ये रहा उदाहरण:'

M config/locales/hu.yml => config/locales/hu.yml +8 -1
@@ 812,6 812,12 @@ hu:
        message_html: Még nem definiáltál egy szerver szabályt sem.
      sidekiq_process_check:
        message_html: Nincs Sidekiq folyamat, mely a %{value} sorhoz van rendelve. Kérlek, nézd át a Sidekiq beállításait
      upload_check_privacy_error:
        action: Itt találsz több információt
        message_html: "<strong>A webkiszolgálód félre van konfigurálva. Kockázat merül fel a felhasználóid adatainak biztonságával kapcsolatban.</strong>"
      upload_check_privacy_error_object_storage:
        action: Itt találsz több információt
        message_html: "<strong>Az objektumtárolód félre van konfigurálva. Kockázat merül fel a felhasználóid adatainak biztonságával kapcsolatban.</strong>"
    tags:
      review: Engedélyezés állapota
      updated_msg: A hashtag beállításokat sikeresen frissítettük


@@ 1684,12 1690,13 @@ hu:
      title: Üdv a fedélzeten, %{name}!
  users:
    follow_limit_reached: Nem követhetsz több, mint %{limit} embert
    go_to_sso_account_settings: Ugrás az azonosítási szolgáltatód fiókbeállításaihoz
    invalid_otp_token: Érvénytelen ellenőrző kód
    otp_lost_help_html: Ha mindkettőt elvesztetted, kérhetsz segítséget itt %{email}
    seamless_external_login: Külső szolgáltatáson keresztül jelentkeztél be, így a jelszó és e-mail beállítások nem elérhetőek.
    signed_in_as: Bejelentkezve mint
  verification:
    explanation_html: 'A profilodon <strong>hitelesítheted magad, mint az itt található linkek tulajdonosa</strong>. Ehhez a linkelt weboldalnak tartalmaznia kell egy linket vissza a Mastodon profilodra. Ennek <strong>tartalmaznia kell</strong> a <code>rel="me"</code> attribútumot. A link szövege bármi lehet. Itt egy példa:'
    explanation_html: 'A profilodon <strong>hitelesítheted magad, mint az itt található hivatkozások tulajdonosa</strong>. Ehhez a hivatkozott weboldalnak tartalmaznia kell egy visszahivatkozást a Mastodon-profilodra. A hivatkozás hozzáadása után lehet, hogy vissza kell ide térned, és újra mentened kell a profilodat, hogy az ellenőrzés életbe lépjen. A visszahivatkozásnak <strong>tartalmaznia kell</strong> a <code>rel="me"</code> attribútumot. A hivatkozás szövege bármi lehet. Itt egy példa:'
    verification: Hitelesítés
  webauthn_credentials:
    add: Biztonsági kulcs hozzáadása

M config/locales/hy.yml => config/locales/hy.yml +0 -1
@@ 881,7 881,6 @@ hy:
    invalid_otp_token: Անվաւեր 2F կոդ
    signed_in_as: Մոտք գործել որպէս․
  verification:
    explanation_html: Պիտակների յղումների հեղինակութիւնը կարելի է վաւերացնել։ Անհրաժեշտ է որ յղուած կայքը պարունակի յետադարձ յղում ձեր մաստադոնի էջին, որը <strong>պէտք է</strong> ունենայ <code>rel="me"</code> նիշքը։ Յղման բովանդակութիւնը կարևոր չէ։ Օրինակ՝
    verification: Ստուգում
  webauthn_credentials:
    delete: Ջնջել

M config/locales/id.yml => config/locales/id.yml +0 -1
@@ 1603,7 1603,6 @@ id:
    seamless_external_login: Anda masuk via layanan eksternal, sehingga pengaturan kata sandi dan email tidak tersedia.
    signed_in_as: 'Masuk sebagai:'
  verification:
    explanation_html: 'Anda dapat <strong>memverifikasi diri Anda sebagai pemiliki tautan pada metadata profil</strong>. Situsweb yang ditautkan haruslah berisi tautan ke profil Mastodon Anda. Tautan tersebut <strong>harus</strong> memiliki atribut <code>rel="me"</code>. Isi teks tautan tidaklah penting. Ini contohnya:'
    verification: Verifikasi
  webauthn_credentials:
    add: Tambahkan kunci keamanan baru

M config/locales/io.yml => config/locales/io.yml +0 -1
@@ 1592,7 1592,6 @@ io:
    seamless_external_login: Vu enirar tra externa serveso, do pasvorto e retpostoopcioni ne esas disponebla.
    signed_in_as: 'Eniris quale:'
  verification:
    explanation_html: 'Vu povas <strong>verifikar su kom proprietero di ligili en vua profilmetainformi</strong>. En ta kazo, ligita retsito <strong>mustas</strong> havar <code>rel="me"</code> atributo. Textokontenajo di ligilo ne esas importanta. Co esas exemplo:'
    verification: Verifikeso
  webauthn_credentials:
    add: Insertez nova sekuresklefo

M config/locales/is.yml => config/locales/is.yml +8 -1
@@ 812,6 812,12 @@ is:
        message_html: Þú hefur ekki skilgreint neinar reglur fyrir netþjón.
      sidekiq_process_check:
        message_html: Ekkert Sidekiq-ferli er í gangi fyrir %{value} biðröð/biðraðir. Endilega athugaðu Sidekiq-uppsetninguna þína
      upload_check_privacy_error:
        action: Skoðaðu hér til að fá frekari upplýsingar
        message_html: "<strong>Vefþjónninn þinn er ekki rétt stilltur. Friðhelgi notendanna þinna gæti verið í hættu.</strong>"
      upload_check_privacy_error_object_storage:
        action: Skoðaðu hér til að fá frekari upplýsingar
        message_html: "<strong>Gagnageymslan þín er ekki rétt stillt. Friðhelgi notendanna þinna gæti verið í hættu.</strong>"
    tags:
      review: Yfirfara stöðufærslu
      updated_msg: Það tókst að uppfæra stillingar myllumerkja


@@ 1684,12 1690,13 @@ is:
      title: Velkomin/n um borð, %{name}!
  users:
    follow_limit_reached: Þú getur ekki fylgst með fleiri en %{limit} aðilum
    go_to_sso_account_settings: Fara í stillingar aðgangsins hjá auðkennisveitunni þinni
    invalid_otp_token: Ógildur tveggja-þátta kóði
    otp_lost_help_html: Ef þú hefur misst aðganginn að hvoru tveggja, geturðu sett þig í samband við %{email}
    seamless_external_login: Innskráning þín er í gegnum utanaðkomandi þjónustu, þannig að stillingar fyrir lykilorð og tölvupóst eru ekki aðgengilegar.
    signed_in_as: 'Skráð inn sem:'
  verification:
    explanation_html: 'Þú getur <strong>vottað að þú sért eigandi og ábyrgur fyrir tenglunum í lýsigögnum notandasniðsins þíns</strong>. Til að það virki, þurfa vefsvæðin sem vísað er í að innihalda tengil til baka í Mastodon-notandasniðið. Tengillinn sem vísar til baka <strong>verður</strong> að vera með <code>rel="me"</code> eigindi. Textinn í tenglinum skiptir ekki máli. Hérna er dæmi:'
    explanation_html: 'Þú getur <strong>sannvottað sjálfa/n þig sem eiganda tenglanna í notandasniðinu þinu</strong>. Til að það virki, þarf tilvísaða vefsvæðið að innihalda tengil til baka á notandasnið þitt á Mastodon. Eftir að tenglinum hefur verið bætt inn, gætirðu þurft að koma aftur hingað og vista aftur notandasniðið þitt áður en sannvottunin fer að virka. Tengillinn til baka <strong>verður</strong> að innihalda <code>rel="me"</code> eigindi. Efni textans í tenglinum skiptir ekki máli. Hér er dæmi:'
    verification: Sannprófun
  webauthn_credentials:
    add: Bæta við nýjum öryggislykli

M config/locales/it.yml => config/locales/it.yml +8 -1
@@ 812,6 812,12 @@ it:
        message_html: Non hai definito alcuna regola del server.
      sidekiq_process_check:
        message_html: Nessun processo di Sidekiq in esecuzione per le code di %{value}. Sei pregato di revisionare la tua configurazione di Sidekiq
      upload_check_privacy_error:
        action: Controlla qui per maggiori informazioni
        message_html: "<strong>Il tuo server web è mal configurato. La privacy dei tuoi utenti è a rischio.</strong>"
      upload_check_privacy_error_object_storage:
        action: Controlla qui per maggiori informazioni
        message_html: "<strong>La tua archiviazione oggetti è mal configurata. La privacy dei tuoi utenti è a rischio.</strong>"
    tags:
      review: Esamina status
      updated_msg: Impostazioni hashtag aggiornate con successo


@@ 1686,12 1692,13 @@ it:
      title: Benvenuto a bordo, %{name}!
  users:
    follow_limit_reached: Non puoi seguire più di %{limit} persone
    go_to_sso_account_settings: Vai alle impostazioni dell'account del tuo provider di identità
    invalid_otp_token: Codice d'accesso non valido
    otp_lost_help_html: Se perdessi l'accesso ad entrambi, puoi entrare in contatto con %{email}
    seamless_external_login: Hai effettuato l'accesso tramite un servizio esterno, quindi le impostazioni di password e e-mail non sono disponibili.
    signed_in_as: 'Hai effettuato l''accesso come:'
  verification:
    explanation_html: 'Puoi <strong>certificare te stesso come proprietario dei link nei metadati del tuo profilo</strong>. Per farlo, il sito a cui punta il link deve contenere un link che punta al tuo profilo Mastodon. Il link di ritorno <strong>deve</strong> avere l''attributo <code>rel="me"</code>. Il testo del link non ha importanza. Ecco un esempio:'
    explanation_html: 'Puoi <strong>verificarti come proprietario dei link nei metadati del tuo profilo</strong>. Per questo, il sito web collegato deve contenere un collegamento al tuo profilo Mastodon. Dopo aver aggiunto il collegamento, potrebbe essere necessario tornare qui e salvare nuovamente il profilo affinché la verifica abbia effetto. Il link di ritorno <strong>deve</strong> avere un attributo <code>rel="me"</code>. Il contenuto del testo del collegamento non ha importanza. Ecco un esempio:'
    verification: Verifica
  webauthn_credentials:
    add: Aggiungi una nuova chiave di sicurezza

M config/locales/ja.yml => config/locales/ja.yml +8 -1
@@ 798,6 798,12 @@ ja:
        message_html: サーバーのルールを定義していません。
      sidekiq_process_check:
        message_html: "%{value}キューに対応するSidekiqプロセスがありません。Sidekiqの設定を確認してください。"
      upload_check_privacy_error:
        action: ここを開いて詳細を確認してください
        message_html: "<strong>Web サーバーが正しく設定されていません。ユーザーのプライバシーが危険な状態になっています。</strong>"
      upload_check_privacy_error_object_storage:
        action: ここを開いて詳細を確認してください
        message_html: "<strong>オブジェクトストレージが正しく設定されていません。ユーザーのプライバシーが危険な状態になっています。</strong>"
    tags:
      review: 審査状況
      updated_msg: ハッシュタグ設定が更新されました


@@ 1654,12 1660,13 @@ ja:
      title: ようこそ、%{name}さん!
  users:
    follow_limit_reached: あなたは現在 %{limit}人以上フォローできません
    go_to_sso_account_settings: 外部サービスアカウントの設定はこちらで行ってください
    invalid_otp_token: 二要素認証コードが間違っています
    otp_lost_help_html: どちらも使用できない場合、%{email}に連絡を取ると解決できるかもしれません
    seamless_external_login: あなたは外部サービスを介してログインしているため、パスワードとメールアドレスの設定は利用できません。
    signed_in_as: '下記でログイン中:'
  verification:
    explanation_html: <strong>プロフィール内のリンクの所有者であることを認証することができます</strong>。そのためにはリンクされたウェブサイトにMastodonプロフィールへのリンクが含まれている必要があります。リンクには<code>rel="me"</code>属性を<strong>必ず</strong>与えなければなりません。リンクのテキストについては重要ではありません。以下は例です:
    explanation_html: <strong>プロフィール補足情報のリンクの所有者であることを認証できます</strong>。認証するには、リンク先のウェブサイトにMastodonプロフィールへのリンクを追加してください。リンクを追加後、このページで変更の保存を再実行すると認証が反映されます。プロフィールへのリンクには<code>rel="me"</code>属性が<strong>かならず</strong>付与してください。リンク内のテキストは自由に記述できます。以下は一例です:
    verification: 認証
  webauthn_credentials:
    add: セキュリティキーを追加

M config/locales/kk.yml => config/locales/kk.yml +0 -1
@@ 758,5 758,4 @@ kk:
    seamless_external_login: Сыртқы сервис арқылы кіріпсіз, сондықтан құпиясөз және электрондық пошта параметрлері қол жетімді емес.
    signed_in_as: 'Былай кірдіңіз:'
  verification:
    explanation_html: 'Өзіңіздің профиль метадеректеріңіздегі сілтемелердің иесі ретінде өзіңізді <strong>тексере аласыз</strong>. Ол үшін байланыстырылған веб-сайтта Mastodon профиліне <strong>сілтеме болуы керек. </strong> Сілтемеде <code>rel = «me»</code> атрибуты болуы керек. Сілтеме мәтінінің мазмұны маңызды емес. Міне мысал:'
    verification: Растау

M config/locales/ko.yml => config/locales/ko.yml +17 -10
@@ 344,7 344,7 @@ ko:
      active_users: 활성 사용자
      interactions: 상호 작용
      media_storage: 미디어 저장소
      new_users: 새로운 사용자
      new_users: 새 사용자
      opened_reports: 신고 열림
      pending_appeals_html:
        other: "<strong>%{count}</strong>개의 대기 중인 이의 제기"


@@ 800,6 800,12 @@ ko:
        message_html: 아직 서버규칙을 정하지 않았습니다.
      sidekiq_process_check:
        message_html: "%{value} 큐에 대한 사이드킥 프로세스가 발견되지 않았습니다. 사이드킥 설정을 검토해주세요"
      upload_check_privacy_error:
        action: 더 많은 정보를 보려면 여기를 확인하세요.
        message_html: "<strong>웹 서버가 잘못 구성되었습니다. 사용자의 프라이버시에 위협이 됩니다.</strong>"
      upload_check_privacy_error_object_storage:
        action: 더 많은 정보를 보려면 여기를 확인하세요
        message_html: "<strong>오브젝트 스토리지가 잘못 구성되었습니다. 사용자의 프라이버시에 위협이 됩니다.</strong>"
    tags:
      review: 심사 상태
      updated_msg: 해시태그 설정이 성공적으로 갱신되었습니다


@@ 992,7 998,7 @@ ko:
      preamble: 다음은 %{domain}의 중재자들에 의해 설정되고 적용되는 규칙들입니다.
      title: 몇 개의 규칙이 있습니다.
    security: 보안
    set_new_password: 새 암호
    set_new_password: 새 암호 설정
    setup:
      email_below_hint_html: 아래의 이메일 계정이 올바르지 않을 경우, 여기서 변경하고 새 확인 메일을 받을 수 있습니다.
      email_settings_hint_html: 확인 메일이 %{email}로 보내졌습니다. 이메일 주소가 올바르지 않은 경우, 계정 설정에서 변경하세요.


@@ 1028,7 1034,7 @@ ko:
    confirm: 계속
    hint_html: "<strong>팁:</strong> 한 시간 동안 다시 암호를 묻지 않을 것입니다."
    invalid_password: 잘못된 암호
    prompt: 계속하려면 암호 확인
    prompt: 계속하려면 암호를 확인하세요.
  crypto:
    errors:
      invalid_key: 유효하지 않은 Ed25519 또는 Curve25519 키


@@ 1105,7 1111,7 @@ ko:
    '403': 이 페이지를 표시할 권한이 없습니다.
    '404': 찾으려는 페이지가 존재하지 않습니다.
    '406': 이 페이지는 요청한 자료형으로 제공되지 않습니다.
    '410': 보려는 페이지는 더 이상 여기에 존재하지 않습니다.
    '410': 찾는 페이지가 더 이상 존재하지 않습니다.
    '422':
      content: 보안 인증에 실패했습니다. 쿠키를 차단하고 있진 않습니까?
      title: 보안 인증 실패


@@ 1385,7 1391,7 @@ ko:
    follow_selected_followers: 선택한 팔로워들을 팔로우
    followers: 팔로워
    following: 팔로잉
    invited: 초대됨
    invited: 초대함
    last_active: 마지막 활동
    most_recent: 가장 최근
    moved: 이동함


@@ 1451,8 1457,8 @@ ko:
      windows: 윈도우
      windows_mobile: 윈도우 모바일
      windows_phone: 윈도우 폰
    revoke: 삭제
    revoke_success: 세션이 성공적으로 삭제되었습니다
    revoke: 취소
    revoke_success: 세션을 성공적으로 취소하였습니다.
    title: 세션
    view_authentication_history: 내 계정에 대한 인증 이력 보기
  settings:


@@ 1460,7 1466,7 @@ ko:
    account_settings: 계정 설정
    aliases: 계정 별명
    appearance: 외관
    authorized_apps: 인증된 애플리케이션
    authorized_apps: 승인된 애플리케이션
    back: 마스토돈으로 돌아가기
    delete: 계정 삭제
    development: 개발


@@ 1560,7 1566,7 @@ ko:
  stream_entries:
    pinned: 고정된 게시물
    reblogged: 님이 부스트 했습니다
    sensitive_content: 민감한 콘텐츠
    sensitive_content: 민감한 내용
  strikes:
    errors:
      too_late: 이의를 제기하기에 너무 늦었습니다


@@ 1654,12 1660,13 @@ ko:
      title: 환영합니다 %{name} 님!
  users:
    follow_limit_reached: 당신은 %{limit}명의 사람을 넘어서 팔로우 할 수 없습니다
    go_to_sso_account_settings: ID 공급자의 계정 설정으로 이동
    invalid_otp_token: 2단계 인증 코드가 올바르지 않습니다
    otp_lost_help_html: 만약 양쪽 모두를 잃어버렸다면 %{email}을 통해 복구할 수 있습니다
    seamless_external_login: 외부 서비스를 이용해 로그인했으므로 이메일과 암호는 설정할 수 없습니다.
    signed_in_as: '다음과 같이 로그인 중:'
  verification:
    explanation_html: '당신은 <strong>프로필 메타데이터의 링크 소유자임을 검증할 수 있습니다</strong>. 이것을 하기 위해서는, 링크 된 웹사이트에서 당신의 마스토돈 프로필을 역으로 링크해야 합니다. 역링크는 <strong>반드시</strong> <code>rel="me"</code> 속성을 가지고 있어야 합니다. 링크의 텍스트는 상관이 없습니다. 여기 예시가 있습니다:'
    explanation_html: '<strong>내 프로필 메타데이터에 담긴 링크의 소유 여부를 검증</strong>할 수 있습니다. 이를 위해서 반드시 링크한 웹사이트에 Mastodon 프로필에 대한 역링크가 포함되어야 합니다. 링크를 추가한 후 이곳으로 돌아와서 프로필을 다시 저장해야 인증을 적용할 수 있습니다. 돌아오는 링크에는 <strong>반드시</strong> <code>rel="me"</code> 속성이 있어야 합니다. 링크의 텍스트 콘텐트는 중요하지 않습니다. 다음 예제를 참고하세요:'
    verification: 검증
  webauthn_credentials:
    add: 보안 키 추가

M config/locales/ku.yml => config/locales/ku.yml +0 -1
@@ 1637,7 1637,6 @@ ku:
    seamless_external_login: Te bi rajekarke biyanî re têketina xwe kir, ji ber vê yekê borînpeyv û e-name nayê bikaranîn.
    signed_in_as: 'Têketin wekî:'
  verification:
    explanation_html: 'Tu dikarî <strong>xwe wekî xwediyê girêdanên li daneyê meta profîla xwe piştrast bikî</strong>. Ji bo vê, hewceye girêda malperê di nav profîla te ya mastodonê de girêdanekî paş hebe. Girêdana paş<strong>hewceye</strong> taybetîyek <code>rel="me"</code>hebe. Naveroka nivîsa girêdanê ne girîng e. Ev jî mînakek e:'
    verification: Piştrastkirin
  webauthn_credentials:
    add: Kilîteke ewlehiyê nû tevlî bike

M config/locales/lt.yml => config/locales/lt.yml +0 -1
@@ 517,5 517,4 @@ lt:
    seamless_external_login: Jūs esate prisijungę per išorini įrenginį, todėl slaptąžodis ir el pašto nustatymai neprieinami.
    signed_in_as: 'Prisijungta kaip:'
  verification:
    explanation_html: 'Jūs galite <strong>patvirtinti savę kaip savininką nuorodų savo profilio meta duomenyse</strong>. Kad tai padarytumėte, susieta svetainė privalo turėti nuorodą atgal į Jūsų Mastodon profilį. Nuoroda atgal <strong> privalo </strong> turėti <code>rel="me"</code> savybę. Teksto turinys nuorodoje nesvarbus. Štai pavyzdys:'
    verification: Patvirtinimas

M config/locales/lv.yml => config/locales/lv.yml +8 -1
@@ 826,6 826,12 @@ 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
      upload_check_privacy_error:
        action: Pārbaudi šeit, lai iegūtu plašāku informāciju
        message_html: "<strong>Tavs tīmekļa serveris ir nepareizi konfigurēts. Tavu lietotāju privātums ir apdraudēts.</strong>"
      upload_check_privacy_error_object_storage:
        action: Pārbaudi šeit, lai iegūtu plašāku informāciju
        message_html: "<strong>Tava objektu krātuve ir nepareizi konfigurēta. Tavu lietotāju privātums ir apdraudēts.</strong>"
    tags:
      review: Pārskatīt statusu
      updated_msg: Tēmtura iestatījumi ir veiksmīgi atjaunināti


@@ 1716,12 1722,13 @@ lv:
      title: Laipni lūgts uz borta, %{name}!
  users:
    follow_limit_reached: Tu nevari sekot vairāk par %{limit} cilvēkiem
    go_to_sso_account_settings: Dodies uz sava identitātes nodrošinātāja konta iestatījumiem
    invalid_otp_token: Nederīgs divfaktora kods
    otp_lost_help_html: Ja esi zaudējis piekļuvi abiem, tu vari sazināties ar %{email}
    seamless_external_login: Tu esi pieteicies, izmantojot ārēju pakalpojumu, tāpēc paroles un e-pasta iestatījumi nav pieejami.
    signed_in_as: 'Pierakstījies kā:'
  verification:
    explanation_html: 'Tu vari <strong>apstiprināt sevi kā sava profila metadatos esošo saišu īpašnieku</strong>. Lai to izdarītu, saistītajā vietnē ir jābūt saitei uz tavu Mastodon profilu. Atpakaļsaitē <strong>jābūt</strong> atribūtam <code>rel="me"</code>. Saites teksta saturam nav nozīmes. Šeit ir piemērs:'
    explanation_html: 'Tu vari <strong>apstiprināt sevi kā sava profila metadatos esošo saišu īpašnieku</strong>. Lai to izdarītu, saistītajā vietnē ir jābūt saitei uz tavu Mastodon profilu. Pēc saites pievienošanas tev, iespējams, vajadzēs atgriezties šeit un atkārtoti saglabāt savu profilu, lai pārbaude stātos spēkā. Atpakaļsaitē <strong>jābūt</strong> atribūtam <code>rel="me"</code>. Saites teksta saturam nav nozīmes. Šeit ir piemērs:'
    verification: Pārbaude
  webauthn_credentials:
    add: Pievienot jaunu drošības atslēgu

M config/locales/my.yml => config/locales/my.yml +354 -6
@@ 2,6 2,7 @@
my:
  about:
    about_mastodon_html: အနာဂတ်အတွက်လူမှုကွန်ရက် - ကြော်ငြာများမရှိခြင်း၊ အဖွဲ့သားများအား စောင့်ကြည့်မှုမရှိခြင်း၊ ကျင့်ဝတ်ပိုင်းဆိုင်ရာစိတ်ချရခြင်းနှင့် ဗဟိုချုပ်ကိုင်မှုမရှိခြင်း၊ သင့်အချက်အလက်များကို Mastodon နှင့်သာ မျှဝေအသုံးပြုလိုက်ပါ။
    contact_missing: မသတ်မှတ်ထား
    contact_unavailable: မရှိ
    hosted_on: "%{domain} မှ လက်ခံဆောင်ရွက်ထားသော Mastodon"
    title: အကြောင်း


@@ 11,6 12,7 @@ my:
      other: စောင့်ကြည့်သူ
    following: စောင့်ကြည့်နေသည်
    last_active: နောက်ဆုံးအသုံးပြုခဲ့သည့်အချိန်
    link_verified_on: ဤလင့်ခ်၏ ပိုင်ဆိုင်မှုကို %{date} တွင် စစ်ဆေးခဲ့သည်
    nothing_here: ဤနေရာတွင် မည်သည့်အရာမျှမရှိပါ။
    pin_errors:
      following: သင်ထောက်ခံလိုသောလူနောက်သို့ စောင့်ကြည့်ပြီးသားဖြစ်နေပါမည်


@@ 19,6 21,7 @@ my:
    posts_tab_heading: ပို့စ်များ
  admin:
    account_actions:
      action: ဆောင်ရွက်ရန်
      title: "%{acct} စိစစ်မှုလုပ်ဆောင်ရန်"
    account_moderation_notes:
      create: မှတ်စုမှထွက်ရန်


@@ 49,16 52,21 @@ my:
      custom: စိတ်ကြိုက်
      delete: အချက်အလက်များဖျက်ပါ
      deleted: ဖျက်ပြီးပါပြီ
      demote: အဆင့်လျော့မည်
      destroyed_msg: "%{username} ၏ အချက်အလက်ကို မကြာမီ ဖျက်ပါမည်"
      disable: ရပ်တန့်
      disable_sign_in_token_auth: အီးမေးတိုကင် အထောက်အထားပြခြင်းကို ပိတ်ပါ
      disable_two_factor_authentication: 2FA ကို ပိတ်ပါ
      disabled: အကောင့်ပိတ်သိမ်းထားသည်
      display_name: ဖော်ပြမည့်အမည်
      domain: ဒိုမိန်း
      edit: ပြင်ဆင်ရန်
      email: အီးမေးလ်
      email_status: အီးမေးလ်အခြေအနေ
      enable: မပိတ်သိမ်းထားသော
      enable_sign_in_token_auth: အီးမေးတိုကင် စစ်မှန်ကြောင်းအတည်ပြုချက်ကို ဖွင့်ပါ
      enabled: ဖွင့်ထားသည်
      enabled_msg: "%{username} ၏ အကောင့်ကို ပိတ်သိမ်းထားသည်"
      followers: စောင့်ကြည့်သူများ
      follows: စောင့်ကြည့်မယ်
      header: မျက်နှာဖုံးပုံ


@@ 75,6 83,7 @@ my:
      login_status: အကောင့်ဝင်ရောက်မှုအခြေအနေ
      media_attachments: မီဒီယာ ပူးတွဲချက်များ
      memorialize: အမှတ်တရအဖြစ် ပြောင်းပါ
      memorialized: အမှတ်တရ
      memorialized_msg: "%{username} ကို အမှတ်တရအကောင့်အဖြစ် ပြောင်းလဲခဲ့သည်"
      moderation:
        active: လက်ရှိအသုံးပြုလျက်ရှိခြင်း


@@ 88,17 97,24 @@ my:
      most_recent_activity: နောက်ဆုံးအသုံးပြုခဲ့သည့်အချိန်
      most_recent_ip: အသုံးပြုလေ့ရှိသည့် IP လိပ်စာ
      no_account_selected: မည်သည့်အကောင့်ကိုမျှ ရွေးချယ်ထားခြင်းမရှိသောကြောင့် ပြောင်းလဲခြင်းမရှိပါ
      no_limits_imposed: ကန့်သတ်ချက် မရှိပါ။
      no_role_assigned: တာဝန်ပေးအပ်ထားခြင်း မရှိပါ
      not_subscribed: စာရင်းသွင်းထားခြင်းမရှိပါ
      pending: ဆိုင်းငံ့ထားသော သုံးသပ်ချက်
      perform_full_suspension: ရပ်ဆိုင်းရန်
      previous_strikes: ယခင်လုပ်ဆောင်ချက်များ
      previous_strikes_description_html:
        other: ဤအကောင့်တွင် လုပ်ဆောင်ချက်<strong>%{count}</strong> ရှိသည်။
      promote: အထောက်အကူ
      protocol: လုပ်ထုံးလုပ်နည်း
      public: အများမြင်
      push_subscription_expires: PuSH စာရင်းသွင်းမှုမှာ သက်တမ်းကုန်ဆုံးသွားပါပြီ
      redownload: ပရိုဖိုင်ကို ပြန်လည်စတင်ရန်
      redownloaded_msg: မူလမှစ၍ %{username} ၏ ပရိုဖိုင်ကို ပြန်လည်စတင်ပြီးပါပြီ
      reject: ဖယ်ရှားပါ
      rejected_msg: "%{username} ၏ အကောင့်ဖွင့်အက်ပလီကေးရှင်းကို ဖယ်ရှားလိုက်ပါပြီ"
      remote_suspension_irreversible: ဤအကောင့်၏အချက်အလက်ကို လုံးဝ ဖျက်လိုက်ပါပြီ။
      remote_suspension_reversible_hint_html: အကောင့်ကို ၎င်းတို့၏ဆာဗာတွင် ဆိုင်းငံ့ထားပြီး အချက်အလက်ကို %{date} နေ့တွင် လုံးဝဖယ်ရှားလိုက်ပါမည်။ ထိုအချိန်အထိ အဝေးမှထိန်းချုပ်နိုင်သောဆာဗာက ဤအကောင့်ကို ပြန်လည်ရယူနိုင်သည်။ အကောင့်အချက်အလက်အားလုံးကို ချက်ချင်းဖယ်ရှားလိုပါက အောက်ပါအတိုင်း ပြုလုပ်နိုင်ပါသည်။
      remove_avatar: ကိုယ်စားပြုရုပ်ပုံကို ဖယ်ရှားပါ
      remove_header: မျက်နှာဖုံးပုံ ဖယ်ရှားရန်
      removed_avatar_msg: "%{username} ၏ ကိုယ်စားပြုရုပ်ပုံအား ဖယ်ရှားပြီးပါပြီ"


@@ 108,6 124,9 @@ my:
        send: အတည်ပြုထားသောအီးမေးလ် ပြန်ပို့ပေးရန်
        success: အတည်ပြုထားသောအီးမေးလ် ပို့ပြီးပါပြီ။
      reset: ပြန်သတ်မှတ်မည်
      reset_password: 'လျှို့ဝှတ်နံပါတ်အားပြန်သတ်မှတ်မည်

        '
      resubscribe: ပြန်လည်စာရင်းသွင်းပါ
      role: အခန်းကဏ္ဍ
      search: ရှာရန်


@@ 125,13 144,18 @@ my:
      silence: ကန့်သတ်
      silenced: ကန့်သတ်ထားသည်
      statuses: ပို့စ်များ
      strikes: ယခင်လုပ်ဆောင်ချက်များ
      subscribe: စာရင်းသွင်းပါ
      suspend: ရပ်ဆိုင်းပါ
      suspended: ရပ်ဆိုင်းထားသည်
      suspension_irreversible: ဤအကောင့်၏ဒေတာကို နောက်ပြန်မဆုတ်ဘဲ ဖျက်လိုက်ပါပြီ။ ၎င်းကိုအသုံးပြုနိုင်စေရန် အကောင့်အား ဆိုင်းငံ့ထားနိုင်သော်လည်း ၎င်းတွင် ယခင်ကရှိထားသည့် မည်သည့်ဒေတာကိုမှ ပြန်လည်ရယူမည်မဟုတ်ပါ။
      suspension_reversible_hint_html: အကောင့်ကို ဆိုင်းငံ့ထားပြီး၊ ဒေတာကို %{date} တွင် အပြည့်အဝ ဖယ်ရှားပါမည်။ ထိုအချိန်အထိ မည်သည့်ဆိုးကျိုးများမရှိဘဲ အကောင့်ကို ပြန်လည်ရယူနိုင်သည်။ အကောင့်၏ဒေတာအားလုံးကို ချက်ချင်းဖယ်ရှားလိုပါက အောက်ပါအတိုင်း ပြုလုပ်နိုင်ပါသည်။
      title: အကောင့်များ
      unblock_email: အီးမေးလ်ကိုပြန်ဖွင့်မည်
      unblocked_email_msg: " %{username} အီးမေးလ်ကိုပြန်ဖွင့်လိုက်ပါပြီ"
      unconfirmed_email: အတည်မပြုရသေးသော အီးမေးလ်
      undo_silenced: ကန့်သတ်ချက်မလုပ်တော့ပါ
      unsilenced_msg: "%{username} ၏ အကောင့်၏ ကန့်သတ်ချက်ကို အောင်မြင်စွာ ပယ်ဖျက်ခဲ့သည်။"
      unsubscribe: စာရင်းမှထွက်ရန်
      unsuspended_msg: "%{username} ၏ အကောင့်ကို ရပ်ဆိုင်းလိုက်ပါပြီ"
      username: အသုံးပြုသူအမည်


@@ 143,6 167,7 @@ my:
      action_types:
        approve_appeal: အယူခံကို အတည်ပြုပါ
        approve_user: အသုံးပြုသူကို အတည်ပြုရန်
        assigned_to_self_report: မှတ်တမ်းကိုတစ်ယောက်ယောက်အားလုပ်ခိုင်းမည်
        change_email_user: အသုံးပြုသူအတွက် အီးမေးလ်ပြောင်းရန်
        change_role_user: အသုံးပြုသူ၏ အခန်းကဏ္ဍကို ပြောင်းလဲရန်
        confirm_user: အသုံးပြုသူကို လက်ခံရန်


@@ 156,6 181,7 @@ my:
        create_ip_block: IP စည်းမျဉ်း ဖန်တီးရန်
        create_unavailable_domain: အသုံးမပြုနိုင်သောဒိုမိန်းကို ဖန်တီးပါ
        create_user_role: အခန်းကဏ္ဍဖန်တီးပါ
        demote_user: အသုံးပြုသူကိုအဆင့်လျော့ချမည်
        destroy_announcement: ကြေညာချက်ကို ဖျက်ပါ
        destroy_canonical_email_block: အီးမေးလ်ပိတ်ပင်ခြင်းအား ဖျက်ရန်
        destroy_custom_emoji: စိတ်ကြိုက်အီမိုဂျီကို ဖျက်ရန်


@@ 183,10 209,13 @@ my:
        resend_user: အတည်ပြုရန် မေးလ်ကို ပြန်ပို့ပေးရန်
        reset_password_user: စကားဝှက်ကို ပြန်လည်ရယူမည်
        resolve_report: အစီရင်ခံစာကို ဖြေရှင်းရန်
        sensitive_account: Force-Sensitive အကောင့်
        silence_account: အကောင့် ကန့်သတ်ပါ
        suspend_account: အကောင့် ရပ်ဆိုင်းပါ
        unassigned_report: အစီရင်ခံစာ ဖြုတ်ရန်
        unblock_email_account: အီးမေးလ်လိပ်စာ ပြန်ဖွင့်ရန်
        unsilence_account: ကန့်သတ်အကောင့်ကို မလုပ်တော့ပါ
        unsuspend_account: အကောင့်ကို ရပ်ဆိုင်းပါ။
        update_announcement: ကြေညာချက်ပြင်ဆင်ရန်
        update_custom_emoji: စိတ်ကြိုက်အီမိုဂျီကို ပြင်ဆင်ရန်
        update_domain_block: ဒိုမိန်းပိတ်ပင်ခြင်းအား ပြင်ဆင်ရန်


@@ 244,6 273,7 @@ my:
        unassigned_report_html: "%{name} က အစီရင်ခံစာ %{target} ကို ဖြုတ်ထားသည်"
        unblock_email_account_html: "%{name} က %{target} ၏ အီးမေးလ်လိပ်စာကို ပြန်ဖွင့်ခဲ့သည်"
        unsensitive_account_html: "%{name} က %{target} ၏ မီဒီယာကို သတိထားရသောမီဒီယာအဖြစ် အမှတ်အသားပြုထားခြင်းမရှိပါ"
        unsilence_account_html: "%{target} ၏ အကောင့်၏ %{name} ကန့်သတ်ချက် မရှိပါ။"
        unsuspend_account_html: "%{name} က %{target} ၏ အကောင့်ကို ဆိုင်းငံ့ထားသည်"
        update_announcement_html: "%{name} က ကြေညာချက် %{target} ကို ပြင်ဆင်ခဲ့သည်"
        update_custom_emoji_html: "%{name} က အီမိုဂျီ %{target} ကို ပြင်ဆင်ခဲ့သည်"


@@ 261,12 291,14 @@ my:
      edit:
        title: ကြေညာချက် ပြင်ဆင်ရန်
      empty: ကြေညာချက်များမတွေ့ပါ
      live: လက်ရှိ
      new:
        create: ကြေညာချက်ဖန်တီးပါ
        title: ကြေညာချက်အသစ်
      publish: ပို့စ်တင်မည်
      published_msg: ကြေညာချက်တင်ပြီးပါပြီ။
      scheduled_for: "%{time} အတွက် စီစဉ်ထားသည်"
      scheduled_msg: ကြေညာချက်ထုတ်ပြန်ရန် စီစဉ်ထားသည်။
      title: ကြေညာချက်များ
      unpublish: ပြန်ဖြုတ်ပါ
      unpublished_msg: ကြေညာချက်ကို ဖြုတ်ပြီးပါပြီ


@@ 274,7 306,9 @@ my:
    custom_emojis:
      assign_category: အမျိုးအစားသတ်မှတ်ရန်
      by_domain: ဒိုမိန်း
      copied_msg: အီမိုဂျီ၏စက်အတွင်းကူးထားသည်များကို အောင်မြင်စွာ ဖန်တီးခဲ့သည်။
      copy: ကူးယူပါ
      copy_failed_msg: အီမိုဂျီ၏စက်အတွင်းမကူးနိုင်ပါ
      create_new_category: အမျိုးအစားအသစ်ဖန်တီးရန်
      created_msg: အီမိုဂျီ ဖန်တီးပြီးပါပြီ။
      delete: ဖျက်ပါ


@@ 293,6 327,11 @@ my:
        title: စိတ်ကြိုက်အီမိုဂျီအသစ် ထည့်ပါ
      no_emoji_selected: မည်သည့်အီမိုဂျီကိုမျှ ရွေးချယ်ထားခြင်းမရှိသောကြောင့် ပြောင်းလဲခြင်းမရှိပါ
      not_permitted: ဤလုပ်ဆောင်ချက်ကို ဆောင်ရွက်ရန် သင့်ကို ခွင့်မပြုပါ။
      overwrite: ထပ်ရေးရန်
      shortcode: 'တိုတိုကုတ်

        '
      shortcode_hint: အက္ခရာဂဏန်းများနှင့် underscore များဖြင့် အနည်းဆုံး စာလုံး ၂ လုံးရှိရပါမည်
      title: စိတ်ကြိုက်အီမိုဂျီများ
      uncategorized: အမျိုးအစားခွဲခြားထားခြင်းမရှိပါ
      unlist: စာရင်းမသွင်းထားပါ


@@ 305,6 344,7 @@ my:
      interactions: အပြန်အလှန်ဆက်သွယ်မှုများ
      media_storage: မီဒီယာသိုလှောင်မှု
      new_users: အသုံးပြုသူအသစ်များ
      opened_reports: မှတ်တမ်းများကိုဖွင့်လှစ်ခဲ့သည်
      pending_appeals_html:
        other: "<strong>%{count}</strong> အယူခံဝင်မှုကို ဆိုင်းငံ့ထားခြင်း"
      pending_reports_html:


@@ 313,6 353,7 @@ my:
        other: "<strong>%{count}</strong> hashtag ဆောင်ရွက်ဆဲ"
      pending_users_html:
        other: "<strong>%{count}</strong> ဆိုင်းငံ့အသုံးပြုသူ"
      resolved_reports: မှတ်တမ်းများဖြေရှင်းခဲ့သည်
      software: ဆော့ဖ်ဝဲလ်
      sources: အကောင့်ဖွင့်ခြင်းဆိုင်ရာ သတင်းရင်းမြစ်များ
      space: နေရာလွတ်အသုံးပြုမှု


@@ 334,18 375,26 @@ my:
    domain_blocks:
      add_new: ဒိုမိန်းပိတ်ပင်ခြင်းအသစ် ထည့်ပါ
      created_msg: ဒိုမိန်းပိတ်ပင်ခြင်းကို ယခုလုပ်ဆောင်နေပါသည်
      destroyed_msg: ဒိုမိန်းပိတ်ဆို့ခြင်းကို ပြန်ပြင်လိုက်ပါပြီ။
      domain: ဒိုမိန်း
      edit: ဒိုမိန်းပိတ်ပင်ခြင်းကို ပြင်ဆင်ရန်
      existing_domain_block: "%{name}  အပေါ် ပိုမိုတင်းကျပ်သောကန့်သတ်ချက်များကို ချမှတ်ထားပြီးဖြစ်သည်။"
      existing_domain_block_html: '%{name} အပေါ် ပိုမိုတင်းကျပ်သော ကန့်သတ်ချက်များကို ချမှတ်ထားပြီး <a href="%{unblock_url}">၎င်းကို ပြန်ဖွင့်ရန်</a> လိုအပ်ပါသည်။'
      export: ထုတ်ယူခြင်း
      import: ထည့်သွင်းခြင်း
      new:
        create: ပိတ်ပင်ခြင်း ဖန်တီးရန်
        hint: ဒိုမိန်းပိတ်ဆို့ခြင်းသည် ဒေတာဘေ့စ်အတွင်း အကောင့်ထည့်သွင်းမှုများကို မတားဆီးသော်လည်း ထိုအကောင့်များအတွက် တိကျစွာစိစစ်ခြင်းနည်းလမ်းများကို အလိုအလျောက်ပြန်လည်အသုံးချမည်ဖြစ်သည်။
        severity:
          desc_html: "<strong>ကန့်သတ်ချက်</strong> သည် ဤဒိုမိန်းရှိ အကောင့်များမှ ပို့စ်များကို ၎င်းတို့ကို မလိုက်ကြည့်သူတိုင်းကို မမြင်နိုင်စေမည်ဖြစ်သည်။ <strong>ဆိုင်းငံ့ထားရန်</strong> သည် ဤဒိုမိန်းအကောင့်များအတွက် အကြောင်းအရာ၊ မီဒီယာနှင့် ပရိုဖိုင်ဒေတာအားလုံးကို သင့်ဆာဗာမှ ဖယ်ရှားပါမည်။ မီဒီယာဖိုင်များကို ငြင်းပယ်လိုပါက <strong>None</strong> ကို အသုံးပြုပါ။"
          noop: တစ်ခုမျှမရှိ
          silence: ကန့်သတ်
          suspend: ရပ်ဆိုင်းပါ
        title: ဒိုမိန်းပိတ်ပင်ထားခြင်းအသစ်
      no_domain_block_selected: မည်သည့်ဒိုမိန်းပိတ်ပင်ထားခြင်းကိုမျှ ရွေးချယ်ထားခြင်းမရှိသောကြောင့် ပြောင်းလဲခြင်းမရှိပါ
      not_permitted: ဤလုပ်ဆောင်ချက်ကို ဆောင်ရွက်ရန် သင့်ကို ခွင့်မပြုပါ။
      obfuscate: မှတ်ရခက်သောဒိုမိန်းအမည်
      obfuscate_hint: ဒိုမိန်းကန့်သတ်ချက်များစာရင်းကို ဖွင့်ထားပါက စာရင်းရှိ ဒိုမိန်းအမည်များမှာ ရှုပ်ထွေးစေနိုင်ပါသည်။
      private_comment: သီးသန့်မှတ်ချက်
      private_comment_hint: စိစစ်သူများ၏အတွင်းပိုင်းအသုံးပြုမှုအတွက် ဤဒိုမိန်းကန့်သတ်ချက်ဆိုင်ရာမှတ်ချက်။
      public_comment: အများမြင်မှတ်ချက်


@@ 372,12 421,16 @@ my:
        title: အီးမေးလ်ဒိုမိန်းအသစ်ကို ပိတ်ရန်
      no_email_domain_block_selected: မည်သည့်အီးမေးလ်ဒိုမိန်းပိတ်ပင်ခြင်းကိုမျှ ရွေးချယ်ထားခြင်းမရှိသောကြောင့် ပြောင်းလဲခြင်းမရှိပါ
      not_permitted: ခွင့်ပြုထားခြင်းမရှိပါ
      resolved_dns_records_hint_html: ဒိုမိန်းအမည်သည် အီးမေးလ်လက်ခံခြင်းအတွက် နောက်ဆုံးတွင် တာဝန်ရှိသည့် အောက်ပါ MX ဒိုမိန်းများသို့ ဖြေရှင်းပေးသည်။ MX ဒိုမိန်းကို ပိတ်ဆို့ခြင်းသည် တူညီသော MX ဒိုမိန်းကို အသုံးပြုသည့် မည်သည့်အီးမေးလ်လိပ်စာမှ အကောင့်ဖွင့်ခြင်းများကို ပိတ်ဆို့စေမည်၊ မြင်နိုင်သောဒိုမိန်းအမည်သည် ကွဲပြားသော်လည်း၊ <strong>အဓိက အီးမေးလ်ဝန်ဆောင်မှုပေးသူများကို မပိတ်ဆို့ရန် သတိထားပါ။</strong>
      resolved_through_html: "%{domain} မှတစ်ဆင့် ဖြေရှင်းခဲ့သည်"
      title: ပိတ်ပင်ထားသော အီးမေးလ်ဒိုမိန်းများ
    export_domain_allows:
      new:
        title: ဒိုမိန်းတင်သွင်းခွင့်ပြုသည်
      no_file: ဖိုင်ရွေးထားခြင်းမရှိပါ။
    export_domain_blocks:
      import:
        existing_relationships_warning: လက်ရှိစောင့်ကြည့်သူများနှင့် ဆက်ဆံရေး
        private_comment_template: "%{date} တွင် %{source} မှ ထည့်သွင်းခဲ့သည်"
        title: ဒိုမိန်းပိတ်ပင်ထားမှုများကို ထည့်သွင်းရန်
      invalid_domain_block: အောက်ပါအမှား(များ)ကြောင့် တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော ဒိုမိန်းပိတ်ပင်ထားမှုများကို ကျော်သွားခဲ့သည် - %{error}


@@ 393,6 446,7 @@ my:
      availability:
        failures_recorded:
          other: "%{count} ရက်နေ့တွင် ကြိုးစားမှု မအောင်မြင်ပါ။"
        no_failures_recorded: မှတ်တမ်းမရှိပါ။
        title: ရရှိနိုင်မှု
      back_to_all: အားလုံး
      back_to_limited: ကန့်သတ်ထားသည်


@@ 400,6 454,8 @@ my:
      by_domain: ဒိုမိန်း
      confirm_purge: ဤဒိုမိန်းမှ အချက်အလက်များကို အပြီးတိုင်ဖျက်လိုသည်မှာ သေချာပါသလား။
      content_policies:
        comment: အတွင်းပိုင်းမှတ်ချက်
        description_html: ဤဒိုမိန်းနှင့် ဒိုမိန်းခွဲများမှ အကောင့်အားလုံးအတွက် အသုံးချမည့် အကြောင်းအရာမူဝါဒများကို သတ်မှတ်နိုင်သည်။
        limited_federation_mode_description_html: ဤဒိုမိန်းဖြင့် ဖက်ဒီကို ခွင့်ပြုမလား။
        policies:
          reject_media: မီဒီယာဖယ်ရှားရန်


@@ 419,22 475,33 @@ my:
        instance_statuses_measure: သိမ်းဆည်းထားသောပို့စ်များ
      delivery:
        all: အားလုံး
        clear: ပေးပို့မှု အမှားအယွင်းများကို ရှင်းလင်းပါ
        failing: မအောင်မြင်ခြင်း
        restart: ပေးပို့မှုကို ပြန်လည်စတင်ရန်
        stop: ပေးပို့မှုကို ရပ်ရန်
        unavailable: မရရှိနိုင်ပါ
      delivery_available: ပေးပို့နိုင်ပါပြီ
      delivery_error_days: ပေးပို့မှု မှားယွင်းသည့်ရက်များ
      delivery_error_hint: "%{count} ရက်အတွင်း မပေးပို့နိုင်ပါက ၎င်းကို ပေးပို့မရနိုင်ဟု အလိုအလျောက် အမှတ်အသားပြုပါမည်။"
      destroyed_msg: "%{domain} မှ အချက်အလက်များကို မကြာမီ ဖျက်ပါမည်။"
      empty: ဒိုမိန်းများ မတွေ့ပါ။
      known_accounts:
        other: လူသိများသော အကောင့် %{count} ခု
      moderation:
        all: အားလုံး
        limited: ကန့်သတ်ထားသော
        title: စိစစ်ခြင်း
      private_comment: သီးသန့်မှတ်ချက်
      public_comment: အများမြင်မှတ်ချက်
      purge: ဖျက်
      purge_description_html: ဤဒိုမိန်းသည် အော့ဖ်လိုင်းဖြစ်နေပါက သင့်သိုလှောင်မှုမှ အကောင့်မှတ်တမ်းများနှင့် ဆက်စပ်အချက်အလက်အားလုံးကို ဖျက်နိုင်သည်။ အချိန်အနည်းငယ် ကြာနိုင်ပါသည်။
      title: ဖက်ဒီ
      total_blocked_by_us: ကျွန်ုပ်တို့မှ ပိတ်ပင်ထားခြင်း
      total_followed_by_them: "၎င်းတို့မှ စောင့်ကြည့်ခဲ့သည်"
      total_followed_by_us: ကျွန်ုပ်တို့မှ စောင့်ကြည့်ခဲ့သည်
      total_reported: "၎င်းတို့နှင့်ဆိုင်သော အစီရင်ခံစာများ"
      total_storage: မီဒီယာ ပူးတွဲချက်များ
      totals_time_period_hint_html: အောက်တွင်ဖော်ပြထားသော စုစုပေါင်းမှာ အချိန်တိုင်းအတွက် အချက်အလက်များဖြစ်သည်။
    invites:
      deactivate_all: အားလုံးပယ်ဖျက်ရန်
      filter:


@@ 483,15 550,19 @@ my:
          other: "%{count} မှတ်စု"
      action_log: မှတ်တမ်းများစစ်ဆေးခြင်း
      action_taken_by: ဆောင်ရွက်ခဲ့ပါသည်
      add_to_report: အစီရင်ခံစာထပ်ထည့်ရန်
      are_you_sure: သေချာပါသလား။
      assign_to_self: ကျွန်ုပ်ကို တာဝန်ပေးရန်
      assigned: စိစစ်သူကို တာဝန်ပေးရန်
      by_target_domain: တိုင်ကြားထားသော အကောင့်၏ ဒိုမိန်း
      cancel: ပယ်ဖျက်မည်
      category: အမျိုးအစား
      comment:
        none: တစ်ခုမျှမရှိ
      comment_description_html: "%{name} က နောက်ထပ်အချက်အလက်များ ပံ့ပိုးပေးနိုင်ရန်အတွက် ရေးသားခဲ့သည် -"
      confirm: အတည်ပြုမည်
      confirm_action: "@%{acct} ကို စိစစ်အကဲဖြတ်ခြင်းအား အတည်ပြုပါ"
      created_at: အကြောင်းကြားပြီးပါပြီ
      delete_and_resolve: ပို့စ်များကို ဖျက်ပါ
      forwarded: ထပ်ဆင့်ပို့ပြီးပါပြီ
      forwarded_to: "%{domain} သို့ ထပ်ဆင့်ပို့ထားသည်"


@@ 505,13 576,17 @@ my:
        create_and_unresolve: မှတ်စုဖြင့် ပြန်ဖွင့်ရန်
        delete: ဖျက်ပါ
        title: မှတ်စုများ
      processed_msg: 'အကြောင်းကြားမှု #%{id} ကို ဆောင်ရွက်ပြီးပါပြီ'
      remote_user_placeholder: "%{instance} မှ အဝေးကနေအသုံးပြုသူ"
      reopen: အစီရင်ခံစာပြန်ဖွင့်ရန်
      report: "#%{id} အစီရင်ခံရန်"
      reported_account: တိုင်ကြားထားသောအကောင့်
      reported_by: မှ တိုင်ကြားထားသည်
      resolved: ဖြေရှင်းပြီးပါပြီ
      resolved_msg: မှတ်တမ်းကို ဖြေရှင်းပြီးပါပြီ။
      skip_to_actions: လုပ်ဆောင်ချက်များသို့ ကျော်သွားရန်
      status: အခြေအနေ
      statuses: တိုင်ကြားထားသောအကြောင်းအရာ
      summary:
        action_preambles:
          delete_html: သင်သည် <strong>@%{acct}</strong> ၏ ပို့စ်အချို့ကို <strong>ဖယ်ရှား</strong> တော့မည်ဖြစ်သည်။ ၎င်းတို့မှာ -


@@ 519,10 594,15 @@ my:
          silence_html: သင်သည် <strong>@%{acct}</strong> ၏ အကောင့်ကို <strong>ကန့်သတ်</strong> တော့မည်ဖြစ်သည်။ ၎င်းမှာ -
          suspend_html: သင်သည် <strong>@%{acct}</strong> ၏ အကောင့်ကို <strong>ဆိုင်းငံ့</strong> တော့မည်ဖြစ်သည်။ ၎င်းမှာ -
        actions:
          delete_html: စိတ်အနှောင့်အယှက်ဖြစ်စေသောပို့စ်များကို ဖယ်ရှားပါ
          mark_as_sensitive_html: စိတ်အနှောင့်အယှက်ဖြစ်စေသောပို့စ်များ၏ မီဒီယာကို သတိထားရသောမီဒီယာအဖြစ် အမှတ်အသားပြုပါ
          suspend_html: "<strong>@%{acct}</strong> ကို ဆိုင်းငံ့ထားသောကြောင့် ပရိုဖိုင်နှင့် အကြောင်းအရာများအား ဝင်ရောက်ခွင့်မရှိတော့သဖြင့် အပြန်အလှန် တုံ့ပြန်၍ မရတော့ခြင်း"
        close_report: 'တိုင်ကြားစာ #%{id} ကို ဖြေရှင်းပြီးကြောင်း အမှတ်အသားပြုပါ'
        close_reports_html: "<strong>@%{acct}</strong> နှင့်ပတ်သက်သည့် အစီရင်ခံစာ<strong>အားလုံး</strong> ကို ဖြေရှင်းပြီးကြောင်း အမှတ်အသားပြုပါ"
        delete_data_html: "<strong>@%{acct}</strong> ၏ ပရိုဖိုင်နှင့် အကြောင်းအရာများကို ဆိုင်းငံ့ထားခြင်းမရှိပါက ယခုမှ ရက်ပေါင်း ၃၀ အတွင်း ဖျက်ရန်"
        preview_preamble_html: "<strong>@%{acct}</strong> သည် အောက်ပါအကြောင်းအရာများကြောင့် သတိပေးချက်ကို လက်ခံရရှိပါမည် -"
        send_email_html: သတိပေးချက် အီးမေးလ်တစ်စောင် <strong>@%{acct}</strong> ပေးပို့ပါ
      target_origin: တိုင်ကြားထားသောအကောင့်၏ မူလအစ
      title: မှတ်တမ်းများ
      unassign: တာဝန်မှဖြုတ်ရန်
      unknown_action_msg: အမည်မသိလုပ်ဆောင်ချက်- %{action}


@@ 540,6 620,7 @@ my:
        moderation: စိစစ်ခြင်း
        special: အထူး
      delete: ဖျက်ပါ
      description_html: "<strong>အသုံးပြုသူအခန်းကဏ္ဍများ</strong>ဖြင့် Mastodon အသုံးပြုသူများ၏ မည်သည့်လုပ်ဆောင်ချက်များနှင့် နေရာများကိုမဆို သင် စိတ်ကြိုက်ပြင်ဆင်နိုင်ပါသည်။"
      edit: "'%{name} ၏ အခန်းကဏ္ဍကို ပြင်ဆင်ရန်"
      everyone: မူလသတ်မှတ်ထားသည့် ခွင့်ပြုချက်များ
      permissions_count:


@@ 564,18 645,22 @@ my:
        manage_invites: ဖိတ်ခေါ်ခြင်းကို စီမံရန်
        manage_invites_description: အသုံးပြုသူများအား ဖိတ်ခေါ်ထားသည့်လင့်များကို ရှာဖွေကြည့်ရှုပြီး ပိတ်ရန် ခွင့်ပြုသည်
        manage_reports: အစီရင်ခံစာများကို စီမံပါ
        manage_reports_description: အသုံးပြုသူများအား အစီရင်ခံစာများကို ပြန်လည်သုံးသပ်ရန်နှင့် ၎င်းတို့နှင့် ဆန့်ကျင်သည့် စိစစ်အရေးယူမှုများကို လုပ်ဆောင်ရန် ခွင့်ပြုသည်
        manage_roles: အခန်းကဏ္ဍများကို စီမံပါ
        manage_roles_description: အသုံးပြုသူများအား ၎င်းတို့၏အောက်တွင်ရှိသော အခန်းကဏ္ဍများကို စီမံခန့်ခွဲရန်နှင့် သတ်မှတ်ရန် ခွင့်ပြုထားသည်
        manage_rules: စည်းမျဉ်းများကို စီမံပါ
        manage_rules_description: အသုံးပြုသူများအား ဆာဗာစည်းမျဉ်းများကို ပြောင်းလဲခွင့် ပြုထားသည်
        manage_settings: သတ်မှတ်ချက်များကို စီမံပါ
        manage_settings_description: အသုံးပြုသူများကို ဆိုက်သတ်မှတ်ချက်များ ပြောင်းလဲခွင့် ပြုရန်
        manage_taxonomies: အမျိုးအစားခွဲခြားပါ
        manage_taxonomies_description: ခေတ်စားနေသော အကြောင်းအရာများကို ပြန်လည်သုံးသပ်ရန်နှင့် hashtag သတ်မှတ်ချက်များကို ပြင်ဆင်ရန်အတွက် အသုံးပြုသူများကို ခွင့်ပြုသည်
        manage_user_access: အသုံးပြုသူဝင်ရောက်မှုကို စီမံပါ
        manage_user_access_description: အသုံးပြုသူများကို အခြားအသုံးပြုသူများ၏ နှစ်ဆင့်ခံလုံခြုံရေးစနစ်ကို ပိတ်ရန်၊ ၎င်းတို့၏ အီးမေးလ်လိပ်စာကို ပြောင်းလဲရန်နှင့် စကားဝှက်ကို ပြန်လည်သတ်မှတ်ရန် ခွင့်ပြုသည်
        manage_users: အသုံးပြုသူများကို စီမံပါ
        manage_users_description: အသုံးပြုသူများအား အခြားအသုံးပြုသူများ၏ အသေးစိတ်အချက်အလက်များကို ကြည့်ရှုနိုင်ပြီး ၎င်းတို့နှင့် ဆန့်ကျင်သည့် စိစစ်အရေးယူမှုများကို လုပ်ဆောင်ခွင့်ပြုသည်
        manage_webhooks: Webhooks ကို စီမံပါ
        manage_webhooks_description: စီမံခန့်ခွဲရေးဆိုင်ရာ ဖြစ်ရပ်များအတွက် အသုံးပြုသူများအား webhook စနစ်ထည့်သွင်းရန် ခွင့်ပြုထားသည်
        view_audit_log: စာရင်းမှတ်တမ်းကို ကြည့်ရန်
        view_audit_log_description: အသုံးပြုသူများကို ဆာဗာပေါ်တွင် စီမံခန့်ခွဲရေးဆိုင်ရာ လုပ်ဆောင်ချက်မှတ်တမ်းကို ကြည့်ရှုခွင့်ပြုသည်။
        view_dashboard: ဒက်ရှ်ဘုတ်မြင်ကွင်းကို ကြည့်ရန်
        view_dashboard_description: အသုံးပြုသူများကို ဒက်ရှ်ဘုတ်မြင်ကွင်းနှင့် အမျိုးမျိုးသော ဆိုဒ်နှင့်ဆိုင်သောဂဏန်းများအား ဝင်ရောက်ကြည့်ရှုခွင့်ပြုသည်


@@ 586,6 671,7 @@ my:
      add_new: စည်းမျဉ်းထည့်ပါ
      delete: ဖျက်ပါ
      edit: စည်းမျဉ်းကို ပြင်ဆင်မည်
      empty: ဆာဗာစည်းမျဉ်းများကို မသတ်မှတ်ရသေးပါ။
      title: ဆာဗာစည်းမျဉ်းများ
    settings:
      about:


@@ 594,12 680,15 @@ my:
      appearance:
        preamble: Mastodon ၏ ဝဘ်ပုံစံကို စိတ်ကြိုက်ပြင်ဆင်ပါ။
        title: ပုံပန်းသဏ္ဌာန်
      content_retention:
        preamble: Mastodon တွင် အသုံးပြုသူဖန်တီးထားသော အကြောင်းအရာများ မည်သို့သိမ်းဆည်းမည်ကို ထိန်းချုပ်ပါ။
      default_noindex:
        desc_html: ဤသတ်မှတ်ချက်ကို ကိုယ်တိုင်မပြောင်းရသေးသော အသုံးပြုသူအားလုံးအပေါ် သက်ရောက်မှုရှိသည်
      discovery:
        follow_recommendations: အကြံပြုချက်များကို စောင့်ကြည့်ပါ
        profile_directory: ပရိုဖိုင်လမ်းညွှန်
        public_timelines: အများမြင်စာမျက်နှာ
        publish_discovered_servers: ရှာဖွေတွေ့ရှိထားသော ဆာဗာများကို ထုတ်ပြန်ပါ
        title: ရှာဖွေတွေ့ရှိမှု
        trends: လက်ရှိခေတ်စားမှုများ
      domain_blocks:


@@ 621,6 710,7 @@ my:
      account: ရေးသားသူ
      application: အက်ပလီကေးရှင်း
      back_to_account: အကောင့်စာမျက်နှာသို့ ပြန်သွားရန်
      back_to_report: အစီရင်ခံစာ စာမျက်နှာသို့ ပြန်သွားရန်
      batch:
        remove_from_report: တိုင်ကြားစာမှ ဖယ်ရှားပါ
        report: တိုင်ကြားစာ


@@ 639,19 729,31 @@ my:
      status_changed: ပို့စ်ပြောင်းပြီးပါပြီ
      title: အကောင့်ပို့စ်များ
      trending: လက်ရှိခေတ်စားနေခြင်း
      visibility: မြင်နိုင်မှု
      with_media: မီဒီယာနှင့်အတူ
    strikes:
      actions:
        delete_statuses: "%{name} မှ %{target} ၏ ပို့စ်များကို ဖျက်ခဲ့သည်"
        disable: "%{name} က %{target} ၏ အကောင့်ကို ရပ်ထားသည်"
        mark_statuses_as_sensitive: "%{name} က %{target} ၏ ပို့စ်များကို သတိထားရသောပို့စ်များအဖြစ် အမှတ်အသားပြုထားသည်"
        none: "%{name} မှ %{target} သို့ သတိပေးချက်တစ်ခု ပေးပို့ခဲ့သည်"
        sensitive: "%{name} က %{target} ၏ အကောင့်ကို သတိထားရသောအကောင့်အဖြစ် အမှတ်အသားပြုထားသည်"
        silence: "%{name} က %{target} ၏ အကောင့်ကို ကန့်သတ်ထားသည်"
        suspend: "%{name} က %{target} ၏ အကောင့်ကို ဆိုင်းငံ့ထားသည်"
      appeal_approved: အတည်ပြုခဲ့ပြီး
      appeal_pending: အတည်ပြုမှုဆိုင်းငံ့ထားခြင်း
      appeal_rejected: တင်ပြခြင်းကို ပယ်ချခဲ့သည်
    system_checks:
      rules_check:
        action: ဆာဗာစည်းမျဉ်းများကို စီမံရန်
        message_html: သင်သည် မည်သည့်ဆာဗာစည်းမျဉ်းများကိုမျှ မသတ်မှတ်ထားပါ။
      upload_check_privacy_error:
        action: နောက်ထပ်အချက်အလက်များအတွက် ဤနေရာတွင် ကြည့်ပါ
      upload_check_privacy_error_object_storage:
        action: နောက်ထပ်အချက်အလက်များအတွက် ဤနေရာတွင် ကြည့်ပါ
    tags:
      review: အခြေအနေသုံးသပ်ရန်
      updated_msg: ဟက်ရှ်တဂျ်သတ်မှတ်ချက်များကို အပ်ဒိတ်လုပ်ပြီးပါပြီ
    title: စီမံခန့်ခွဲခြင်း
    trends:
      allow: ခွင့်ပြု


@@ 659,13 761,30 @@ my:
      disallow: ခွင့်မပြု
      links:
        allow: လင့်ခ်ကို ခွင့်ပြုရန်
        allow_provider: ပို့စ်တင်သူကိုခွင့်ပြုရန်
        disallow: လင့်ခ်ကို ခွင့်မပြုရန်
        disallow_provider: ပို့စ်တင်သူကို ခွင့်မပြုရန်
        no_link_selected: မည်သည့်လင့်ခ်ကိုမျှ ရွေးချယ်ထားခြင်းမရှိသောကြောင့် ပြောင်းလဲခြင်းမရှိပါ
        publishers:
          no_publisher_selected: မည်သည့်ပို့စ်တင်သူကိုမျှ ရွေးချယ်ထားခြင်းမရှိသောကြောင့် ပြောင်းလဲခြင်းမရှိပါ
        shared_by_over_week:
          other: ပြီးခဲ့သည့်အပတ်တွင် လူ %{count} ဦး မှ မျှဝေခဲ့သည်
        title: လက်ရှိခေတ်စားနေသော လင့်များ
        usage_comparison: မနေ့က %{yesterday} နှင့် နှိုင်းယှဉ်၍ ယနေ့ %{today} ကြိမ် မျှဝေခဲ့သည်
      only_allowed: သာခွင့်ပြုသည်
      pending_review: ဆိုင်းငံ့ထားသော သုံးသပ်ချက်
      preview_card_providers:
        allowed: ဤပို့စ်တင်သူထံမှ လင့်ခ်များ ခေတ်စားနိုင်သည်
        title: ပို့စ်တင်သူများ
      rejected: ဖယ်ရှားပြီးပါပြီ
      statuses:
        allow: ပို့စ်တင်ခွင့်ပြုရန်
        allow_account: ပို့စ်တင်သူကို ခွင့်ပြုပါ
        disallow: ပို့စ်ကို တင်ခွင့်မပြုရန်
        disallow_account: ပို့စ်တင်သူကို ခွင့်မပြုပါနဲ့
        no_status_selected: မည်သည့်ခေတ်စားနေသောပို့စ်ကိုမျှ ရွေးချယ်ထားခြင်းမရှိသောကြောင့် ပြောင်းလဲခြင်းမရှိပါ
        shared_by:
          other: မျှဝေမှုနှင့် နှစ်သက်မှု %{friendly_count} ကြိမ်
        title: လက်ရှိခေတ်စားနေသော ပို့စ်များ
      tags:
        current_score: "%{score} လက်ရှိရမှတ်"


@@ 675,10 794,12 @@ my:
          tag_servers_measure: မတူညီသောဆာဗာများ
          tag_uses_measure: စုစုပေါင်းအသုံးပြုမှု
        listable: အကြံပြုနိုင်ပါသည်
        no_tag_selected: မည်သည့်တဂျ်ကိုမျှ ရွေးချယ်ထားခြင်းမရှိသောကြောင့် ပြောင်းလဲခြင်းမရှိပါ
        not_listable: အကြံပြုမည်မဟုတ်ပါ
        not_trendable: လက်ရှိခေတ်စားနေသာပို့စ်များအောက်တွင် ပေါ်လာမည်မဟုတ်ပါ
        not_usable: အသုံးမပြုနိုင်ပါ
        title: လက်ရှိခေတ်စားနေသော hashtag များ
        trendable: လက်ရှိခေတ်စားနေသာပို့စ်များအောက်တွင် ပေါ်လာမည်
        trending_rank: "#%{rank} ခေတ်စားနေခြင်း"
        usable: အသုံးပြုနိုင်သည်
        usage_comparison: မနေ့က %{yesterday} နှင့် နှိုင်းယှဉ်လျှင် ယနေ့ %{today} ကြိမ် အသုံးပြုခဲ့သည်


@@ 698,10 819,14 @@ my:
      disable: ပိတ်ပါ
      disabled: ပိတ်ထားသည်
      edit: ဆုံးမှတ် ပြင်ဆင်ပါ
      empty: မည်သည့် webhook endpoints မှ မစီစဉ်ရသေးပါ။
      enable: ဖွင့်ပါ
      enabled: လက်ရှိ
      enabled_events:
        other: ဖွင့်ထားသောအစီအစဉ်များ %{count} ခု
      events: ပွဲအစီအစဉ်များ
      new: webhook အသစ်
      secret: လျှို့ဝှက်လက်မှတ်ထိုးခြင်း
      status: အခြေအနေ
      title: Webhook များ
      webhook: Webhook


@@ 715,12 840,15 @@ my:
        sensitive: "၎င်းတို့၏ အကောင့်များကို သတိထားရသော အကောင့်များအဖြစ် အမှတ်အသားပြုရန်"
        silence: "၎င်းတို့၏ ပို့စ်များကို ကန့်သတ်ရန်"
        suspend: "၎င်းတို့၏ အကောင့်ကို ရပ်ဆိုင်းရန်"
      next_steps: စိစစ်ဆုံးဖြတ်ချက်ပြန်ဖျက်ရန်အတွက် တင်ပြနိုင်သည် သို့မဟုတ် ၎င်းကို လျစ်လျူရှုနိုင်သည်။
      subject: "%{username} က %{instance} တွင် စိစစ်ဆုံးဖြတ်ချက်ကို တင်ပြနေသည်"
    new_pending_account:
      body: အကောင့်သစ်၏အသေးစိတ်ကို အောက်တွင်ဖော်ပြထားသည်။ ၎င်းကို အတည်ပြုနိုင်သည် သို့မဟုတ် ငြင်းပယ်နိုင်သည်။
      subject: " (%{username}) %{instance} ပေါ်ရှိ ပြန်လည်သုံးသပ်ရမည့် အကောင့်သစ်"
    new_report:
      body: "%{reporter} က %{target} ကို တိုင်ကြားခဲ့သည်"
      body_remote: "%{domain} မှ တစ်စုံတစ်ယောက်က %{target} ကို တိုင်ကြားခဲ့သည်"
      subject: "%{instance} (#%{id}) အတွက် တိုင်ကြားစာအသစ်"
    new_trends:
      body: အောက်ပါအရာများကို အများကိုမပြမီ ပြန်လည်သုံးသပ်ရန် လိုအပ်သည် -
      new_trending_links:


@@ 736,8 864,10 @@ my:
    created_msg: နာမည်တူတစ်ခုကို ဖန်တီးပြီးပါပြီ။ အကောင့်ဟောင်းမှ စတင်ရွှေ့နိုင်ပါပြီ။
    deleted_msg: နာမည်တူကို ဖယ်ရှားထားပြီးပါပြီ။ ထိုအကောင့်မှ ဤအကောင့်သို့ပြောင်းရန် မဖြစ်နိုင်တော့ပါ။
    empty: သင့်တွင် နာမည်တူများ မရှိပါ။
    remove: နာမည်တူများကို လင့်ခ်ဖြုတ်ပါ
  appearance:
    advanced_web_interface: အဆင့်မြင့်ဝဘ်ပုံစံ
    confirmation_dialogs: အတည်ပြုချက် ဒိုင်ယာလော့ခ်များ
    discovery: ရှာဖွေတွေ့ရှိမှု
    localization:
      body: Mastodon ကို စေတနာ့ဝန်ထမ်းများမှ ဘာသာပြန်ထားပါသည်။


@@ 756,42 886,66 @@ my:
    created: အက်ပလီကေးရှင်းကို ဖန်တီးပြီးပါပြီ
    destroyed: အက်ပလီကေးရှင်းကို ဖျက်ပြီးပါပြီ
    logout: ထွက်မယ်
    regenerate_token: ဝင်ရောက်ခွင့် တိုကင်ကို ပြန်ထုတ်ပါ
    token_regenerated: အသုံးပြုခွင့်တိုကင်ကို ပြန်လည်ထုတ်ပေးသည်
    warning: ဤအချက်အလက်ကို သတိထားပါ။ မည်သူ့ကိုမျှ မမျှဝေပါနှင့်။
    your_token: သင့် အသုံးပြုခွင့်တိုကင်
  auth:
    apply_for_account: အကောင့်တစ်ခုတောင်းဆိုပါ
    change_password: စကားဝှက်
    confirmations:
      wrong_email_hint: ထိုအီးမေးလ်လိပ်စာ မမှန်ပါက အကောင့်သတ်မှတ်ချက်များတွင် ပြောင်းလဲနိုင်သည်။
    delete_account: အကောင့်ဖျက်ပါ
    delete_account_html: သင့်အကောင့်ဖျက်လိုပါက<a href="%{path}">ဤနေရာတွင် ဆက်လက်လုပ်ဆောင်နိုင်သည်</a>။ အတည်ပြုချက်တောင်းပါမည်။
    description:
      prefix_invited_by_user: "@%{name} က Mastodon ၏ ဆာဗာတွင် ပါဝင်ရန် သင့်ကို ဖိတ်ခေါ်ထားသည်။"
      prefix_sign_up: ယနေ့တွင် Mastodon ၌ စာရင်းသွင်းလိုက်ပါ။
      suffix: အကောင့်တစ်ခုဖြင့် မည်သည့် Mastodon ဆာဗာများမှ အသုံးပြုသူများနှင့်မဆို စောင့်ကြည့်နိုင်၊ ပို့စ်အသစ်များ တင်နိုင်ပြီး မက်ဆေ့ချ်များ ပေးပို့နိုင်ပါသည်။
    didnt_get_confirmation: အတည်ပြုချက်ညွှန်ကြားချက်များကို မရရှိခဲ့ဘူးလား။
    dont_have_your_security_key: သင့်တွင် လုံခြုံရေးကီး မရှိဘူးလား။
    forgot_password: သင့်စကားဝှက် မေ့နေပါသလား။
    link_to_otp: သင့်ဖုန်းမှ နှစ်ဆင့်ခံလုံခြုံရေးကုဒ် သို့မဟုတ် ပြန်လည်ရယူရေးကုဒ် ထည့်ပါ
    link_to_webauth: လုံခြုံရေးကီး အသုံးပြုပါ
    log_in_with: ဖြင့် ဝင်ရောက်ပါ
    login: အကောင့်ဝင်ရန်
    logout: ထွက်မယ်
    migrate_account: အခြားအကောင့်တစ်ခုသို့ ရွှေ့ရန်
    migrate_account_html: ဤအကောင့်ကို အခြားအကောင့်သို့ ပြန်ညွှန်းလိုပါက <a href="%{path}">ဤနေရာတွင် စီစဉ်သတ်မှတ်နိုင်သည်</a>။
    or_log_in_with: သို့မဟုတ် အကောင့်ဖြင့် ဝင်ရောက်ပါ
    privacy_policy_agreement_html: <a href="%{privacy_policy_path}" target="_blank">ကိုယ်ရေးအချက်အလက်မူဝါဒ</a> ကို ဖတ်ပြီး သဘောတူလိုက်ပါပြီ
    providers:
      cas: CAS
      saml: SAML
    register: အကောင့်ဖွင့်ရန်
    registration_closed: "%{instance} သည် အဖွဲ့ဝင်အသစ်များကို လက်ခံထားခြင်းမရှိပါ"
    resend_confirmation: အတည်ပြုချက်ညွှန်ကြားမှုများကို ပြန်ပို့ရန်
    rules:
      accept: လက်ခံပါ
      back: နောက်သို့
      title: အခြေခံစည်းမျဉ်းအချို့
    security: လုံခြုံရေး
    set_new_password: စကားဝှက်အသစ် သတ်မှတ်ပါ။
    setup:
      email_below_hint_html: အောက်ဖော်ပြပါ အီးမေးလ်လိပ်စာ မှားယွင်းနေပါက ဤနေရာတွင် ပြောင်းလဲနိုင်ပြီး အတည်ပြုအီးမေးလ်အသစ် လက်ခံရရှိမည်ဖြစ်ပါသည်။
      email_settings_hint_html: အတည်ပြုအီးမေးလ်ကို %{email} သို့ ပေးပို့ခဲ့သည်။ ထိုအီးမေးလ်လိပ်စာ မှားယွင်းနေပါက ၎င်းကို အကောင့်သတ်မှတ်ချက်များတွင် ပြောင်းလဲနိုင်သည်။
      title: သတ်မှတ်
    sign_in:
      preamble_html: သင်၏ <strong>%{domain}</strong> အထောက်အထားများဖြင့် ဝင်ရောက်ပါ။ သင့်အကောင့်ကို အခြားဆာဗာတစ်ခုတွင် ဖွင့်ထားပါက ဤနေရာ၌ အကောင့်ဝင်ရောက်နိုင်မည်မဟုတ်ပါ။
      title: "%{domain} သို့ အကောင့်ဝင်ရန်"
    sign_up:
      title: "%{domain} တွင် ထည့်သွင်းရန်။"
    status:
      account_status: အကောင့်အခြေအနေ
      confirming: အီးမေးလ်အတည်ပြုချက် အပြီးသတ်ရန် စောင့်ဆိုင်းခြင်း
      functional: သင့်အကောင့်မှာ အပြည့်အဝလုပ်ဆောင်နေပါပြီ။
      view_strikes: သင့်အကောင့်ကို ဆန့်ကျင်သည့် ယခင်ကလုပ်ဆောင်ချက်များကို ကြည့်ပါ
    use_security_key: လုံခြုံရေးကီးကို သုံးပါ
  authorize_follow:
    already_following: သင်သည် ဤအကောင့်ကို စောင့်ကြည့်နေပြီဖြစ်ပါသည်
    already_requested: သင်သည် ထိုအကောင့်စောင့်ကြည့်ရန် တောင်းဆိုမှုတစ်ခု ပေးပို့ခဲ့ပြီးပါပြီ
    follow: စောင့်ကြည့်မယ်
    follow_request: သင်သည် စောင့်ကြည့်မည် တောင်းဆိုချက်တစ်ခု ပေးပို့ထားသည်-
    following: သင် ယခု အောက်ပါအတိုင်း လုပ်ဆောင်နေပါသည် -
    post_follow:
      close: သို့မဟုတ် သင်သည် ဤဝင်းဒိုးကို ပိတ်နိုင်သည်
      return: အသုံးပြုသူ၏ ပရိုဖိုင်ကိုပြရန်


@@ 799,8 953,13 @@ my:
    title: "%{acct} ကို စောင့်ကြည့်မယ်"
  challenge:
    confirm: ဆက်လုပ်မည်
    hint_html: "<strong>အကြံပြုချက် -</strong> နောက်နာရီများတွင် သင့်စကားဝှက်ကို ထပ်မံတောင်းဆိုမည်မဟုတ်ပါ။"
    invalid_password: စကားဝှက် မမှန်ပါ
    prompt: ဆက်လက်လုပ်ဆောင်ရန်အတွက် စကားဝှက်အတည်ပြုပါ
  crypto:
    errors:
      invalid_key: မှန်ကန်သော Ed25519 သို့မဟုတ် Curve25519 ကီး မဟုတ်ပါ။
      invalid_signature: မှန်ကန်သော Ed25519 လက်မှတ်မဟုတ်ပါ
  date:
    formats:
      default: "%b %d, %Y"


@@ 820,38 979,73 @@ my:
      x_months: "%{count}mo"
      x_seconds: "%{count}s"
  deletes:
    challenge_not_passed: သင်ထည့်လိုက်သော အချက်အလက်မှာ မမှန်ပါ
    confirm_password: အထောက်အထားကိုအတည်ပြုရန်အတွက် သင့်လက်ရှိစကားဝှက်ကို ထည့်ပါ
    confirm_username: လုပ်ငန်းစဉ်ကို အတည်ပြုရန်အတွက် သင့်အသုံးပြုသူအမည်ကို ထည့်သွင်းပါ
    proceed: အကောင့်ဖျက်ပါ
    success_msg: သင့်အကောင့်ကို အောင်မြင်စွာ ဖျက်လိုက်ပါပြီ
    warning:
      before: ရှေ့မဆက်မီ ဤမှတ်စုများကို သေချာဖတ်ပါ -
      caches: အခြားဆာဗာများမှ ကက်ရှ်လုပ်ထားသော အကြောင်းအရာမှာ ဆက်ရှိနေနိုင်သည်
      data_removal: သင့်ပို့စ်များနှင့် အခြားအချက်အလက်များကို အပြီးတိုင် ဖယ်ရှားပါမည်
      email_change_html: သင့်အကောင့်မဖျက်ဘဲ <a href="%{path}">သင့်အီးမေးလ်လိပ်စာကို ပြောင်းလဲနိုင်သည်</a>
      email_contact_html: မရောက်သေးပါက အကူအညီအတွက် <a href="mailto:%{email}">%{email}</a> သို့ အီးမေးလ်ပို့နိုင်ပါသည်
      email_reconfirmation_html: အတည်ပြုချက်အီးမေးလ် လက်ခံမရရှိပါက <a href="%{path}">ထပ်မံတောင်းဆိုနိုင်သည်</a>
      irreversible: အကောင့်ကို ပြန်လည်ရယူရန် သို့မဟုတ် ပြန်လည်အသုံးပြုရန် မဖြစ်နိုင်တော့ပါ
      more_details_html: အသေးစိတ်အချက်အလက်များအတွက်၊ <a href="%{terms_path}">ကိုယ်ရေးကိုယ်တာမူဝါဒ</a> ကို ကြည့်ပါ။
      username_available: သင့်အသုံးပြုသူအမည်ကို ပြန်လည်ရရှိနိုင်ပါမည်
  disputes:
    strikes:
      action_taken: ဆောင်ရွက်ခဲ့သည်
      appeal: အယူခံဝင်ခြင်း
      appeal_rejected: တင်သွင်းခြင်းကို ပယ်ချလိုက်သည်
      appeal_submitted_at: အယူခံဝင်မှုကို တင်သွင်းပြီးချိန်
      appealed_msg: အယူခံဝင်မှုကို တင်သွင်းပြီးဖြစ်သည်။ အတည်ပြုပြီးပါက အကြောင်းကြားပါမည်။
      appeals:
        submit: အယူခံဝင်ခွင့်ပြုရန်
      approve_appeal: တင်သွင်းခြင်းကို အတည်ပြုပါ
      associated_report: ဆက်စပ်အစီရင်ခံစာ
      created_at: ရက်စွဲ
      description_html: ဤအရာများမှာ သင့်အကောင့်နှင့် %{instance} မှ သင့်ထံပေးပို့ထားသော သတိပေးချက်များကို ဆန့်ကျင်သည့် လုပ်ဆောင်ချက်များဖြစ်သည်။
      recipient: လိပ်မူထားသည်
      reject_appeal: တင်သွင်းခြင်းကို ပယ်ချပါ
      status: "#%{id} ပို့စ်"
      status_removed: ပို့စ်ကို စနစ်မှ ဖယ်ရှားပြီးဖြစ်သည်
      title: "%{date} မှ %{action}"
      title_actions:
        delete_statuses: ပို့စ်ဖယ်ရှားခြင်း
        disable: အကောင့်ပိတ်သိမ်းခြင်း
        mark_statuses_as_sensitive: သတိထားရသောပို့စ်များအဖြစ် အမှတ်အသားပြုခြင်း
        none: သတိပေးချက်
        sensitive: သတိထားရသောအကောင့်အဖြစ် အမှတ်အသားပြုခြင်း
        silence: အကောင့်ကန့်သတ်ချက်
        suspend: အကောင့်ပိတ်ခြင်း
      your_appeal_approved: သင့်တင်သွင်းခြင်းကို အတည်ပြုပြီးပါပြီ
      your_appeal_pending: အယူခံဝင်ရန် တင်သွင်းထားသည်
      your_appeal_rejected: အယူခံဝင်မှုကို ပယ်ချလိုက်သည်
  domain_validator:
    invalid_domain: တရားဝင်ဒိုမိန်းအမည်မဟုတ်ပါ
  errors:
    '400': The request you submitted was invalid or malformed.
    '403': You don't have permission to view this page.
    '404': The page you are looking for isn't here.
    '406': This page is not available in the requested format.
    '410': The page you were looking for doesn't exist here anymore.
    '400': သင်တင်ပြသော တောင်းဆိုချက်မှာ မမှန်ကန်ပါ သို့မဟုတ် ပုံစံမမှန်ပါ။
    '403': ဤစာမျက်နှာကြည့်ရှုရန် သင့်တွင် ခွင့်ပြုချက်မရှိပါ။
    '404': သင်ရှာဖွေနေသော စာမျက်နှာသည် ဤနေရာတွင် မရှိပါ။
    '406': ဤစာမျက်နှာကို တောင်းဆိုထားသော ပုံစံဖြင့် မရရှိနိုင်ပါ။
    '410': သင်ရှာဖွေနေသည့် စာမျက်နှာသည် ဤနေရာတွင် မရှိတော့ပါ။
    '422':
      content: လုံခြုံရေး အတည်ပြုခြင်း မအောင်မြင်ပါ။ သင်သည် ကွတ်ကီးများကို ပိတ်ပင်ထားပါသလား။
      title: လုံခြုံရေး အတည်ပြုခြင်း မအောင်မြင်ပါ
    '429': တောင်းဆိုမှု များနေပါသည်
    '500':
      content: စိတ်မကောင်းပါ။ အဆုံးတွင် တစ်ခုမှားယွင်းသွားပါသည်။
      title: ဤစာမျက်နှာမှာ မမှန်ကန်ပါ
    '503': The page could not be served due to a temporary server failure.
    '503': ယာယီဆာဗာချို့ယွင်းမှုကြောင့် စာမျက်နှာကို ကြည့်ရှု၍မရပါ။
  existing_username_validator:
    not_found_multiple: "%{usernames} ကို ရှာမတွေ့ပါ"
  exports:
    archive_takeout:
      date: ရက်စွဲ
      download: သင်၏မှတ်တမ်းကို ဒေါင်းလုဒ်လုပ်ပါ
      in_progress: သင့်မှတ်တမ်းကို ပြုစုနေသည်...
      request: မှတ်တမ်း တောင်းဆိုရန်
      size: အရွယ်အစား
    blocks: သင်ပိတ်ပင်ထားသည့်လူများစာရင်း


@@ 859,6 1053,7 @@ my:
    csv: CSV
    domain_blocks: ဒိုမိန်းပိတ်ပင်ထားမှုများ
    lists: စာရင်းများ
    mutes: အသံပိတ်
    storage: မီဒီယာသိုလှောင်မှု
  featured_tags:
    add_new: အသစ် ထည့်ပါ


@@ 884,6 1079,8 @@ my:
        other: "%{count} အဓိကစကားလုံး"
      statuses:
        other: "%{count} ပို့စ်"
      statuses_long:
        other: တစ်ဦးချင်းပို့စ် %{count} များ ကို ဖျောက်ထားသည်
      title: စစ်ထုတ်ခြင်းများ
    new:
      save: စစ်ထုတ်မှုအသစ် သိမ်းပါ


@@ 896,21 1093,39 @@ my:
        title: စစ်ထုတ်ထားသော ပို့စ်များ
  generic:
    all: အားလုံး
    changes_saved_msg: အပြောင်းအလဲများကို သိမ်းဆည်းပြီးပါပြီ။
    copy: ကူးယူပါ
    delete: ဖျက်ပါ
    deselect: အားလုံး ရွေးထားခြင်းကို ဖျက်မည်
    none: တစ်ခုမျှ
    order_by: စီထားသည်
    save_changes: ပြောင်းလဲမှုများကို သိမ်းဆည်းပါ
    select_all_matching_items:
      other: သင့်ရှာဖွေမှုနှင့် ကိုက်ညီသည့် %{count} ခု အားလုံးကို ရွေးပါ။
    today: ယနေ့
    validation_errors:
      other: မမှန်သေးပါ။ ကျေးဇူးပြု၍ အောက်ပါ %{count} အမှားများကို ပြန်လည်သုံးသပ်ပါ
  imports:
    errors:
      invalid_csv_file: မမှန်ကန်သော CSV ဖိုင်။ အမှား - %{error}
      over_rows_processing_limit: "%{count} တန်းထက် ပိုနေပါသည်"
    modes:
      merge: ပေါင်း
      merge_long: ရှိပြီးသားမှတ်တမ်းများ သိမ်းဆည်းပြီး အသစ်များ ထပ်ထည့်ပါ
      overwrite: ထပ်ရေးရန်
      overwrite_long: လက်ရှိမှတ်တမ်းများကို အသစ်များဖြင့် အစားထိုးပါ
    preface: သင်စောင့်ကြည့်နေသည့်လူများစာရင်း သို့မဟုတ် ပိတ်ပင်ထားသည့်စာရင်းကဲ့သို့သော အခြားဆာဗာတစ်ခုမှ သင်ထုတ်ယူထားသည့်အချက်အလက်များကို ပြန်လည်ထည့်သွင်းနိုင်သည်။
    success: သင့်အချက်အလက်ကို အပ်လုဒ်လုပ်ပြီး သတ်မှတ်ချိန်အတွင်း ဆောင်ရွက်ပါမည်
    types:
      blocking: ပိတ်ပင်ထားသည့်စာရင်း
      bookmarks: Bookmarks
      domain_blocking: ဒိုမိန်းပိတ်ပင်ထားသည့်စာရင်း
      following: စောင့်ကြည့်စာရင်း
      muting: ပိတ်ထားသောစာရင်း
    upload: တင္ရန်
  invites:
    delete: အကောင့်ပိတ်ရန်
    expired: သက်တမ်းကုန်သွားပါပြီ
    expires_in:
      '1800': ၃၀ မိနစ်
      '21600': ၆ နာရီ


@@ 918,33 1133,78 @@ my:
      '43200': ၁၂ နာရီ
      '604800': ၁ ပတ်
      '86400': ၁ ရက်
    expires_in_prompt: ဘယ်တော့မှ
    generate: ဖိတ်ကြားချက်လင့်ခ် ဖန်တီးပါ
    invited_by: သင့်ကို ဖိတ်ခေါ်ထားသည် -
    max_uses:
      other: "%{count} အသုံးပြုမှုများ"
    max_uses_prompt: အကန့်အသတ်မဲ့
    prompt: ဤဆာဗာသို့ ဝင်ရောက်ရန်အတွက် လင့်ခ်များဖန်တီးပြီး အခြားသူများကို မျှဝေပါ
    table:
      expires_at: သက်တမ်းကုန်သည်
      uses: အသုံးပြုမှုများ
    title: ဖိတ်ခေါ်ရန်
  lists:
    errors:
      limit: သင်သည် အများဆုံးစာရင်း အရေအတွက်သို့ ရောက်ရှိသွားပါပြီ
  login_activities:
    authentication_methods:
      otp: နှစ်ဆင့်ခံလုံခြုံရေးစနစ်အက်ပ်
      password: စကားဝှက်
      sign_in_token: အီးမေးလ်လုံခြုံရေးကုဒ်
      webauthn: လုံခြုံရေးကီးများ
    description_html: သင်မပြုလုပ်သည့် လုပ်ဆောင်ချက်တွေ့ရှိပါက သင့်စကားဝှက်ကို ပြောင်းလဲပြီး နှစ်ဆင့်ခံလုံခြုံရေးစနစ်ကို အသုံးပြုသင့်ပါသည်။
    empty: စစ်မှန်ကြောင်းအထောက်အထားမရရှိနိုင်ပါ
    failed_sign_in_html: "%{ip} (%{browser}) မှ %{method} ဖြင့် အကောင့်ဝင်ရောက်ခြင်း မအောင်မြင်ပါ"
    successful_sign_in_html: "%{ip} (%{browser}) မှ %{method} ဖြင့် အကောင့်ဝင်၍ရပါပြီ"
    title: အထောက်အထားမှတ်တမ်း
  media_attachments:
    validations:
      images_and_video: ရုပ်ပုံပါရှိပြီးသားပို့စ်တွင် ဗီဒီယို ပူးတွဲ၍မရပါ
      not_ready: မပြီးသေးသောဖိုင်များကို ပူးတွဲ၍မရပါ။ ခဏအကြာတွင် ထပ်စမ်းကြည့်ပါ။
      too_many: ဖိုင် ၄ ဖိုင်ထက် ပို၍တွဲမရပါ
  migrations:
    acct: သို့ ပြောင်းရွှေ့ရန်
    cancel: ပြန်ညွှန်းခြင်းကို ပယ်ဖျက်ရန်
    cancelled_msg: ပြန်ညွှန်းခြင်းကို ပယ်ဖျက်ပြီးပါပြီ။
    errors:
      already_moved: သင်ပြောင်းရွှေ့ပြီးသော အကောင့်နှင့် တူညီပါသည်
      missing_also_known_as: ဤအကောင့်၏ အမည်တူမဟုတ်ပါ
      move_to_self: လက်ရှိအကောင့်မဖြစ်နိုင်ပါ
      not_found: ရှာမတွေ့ပါ
    followers_count: ပြောင်းရွှေ့ချိန်၌ စောင့်ကြည့်သူများအရေအတွက်
    incoming_migrations: အခြားအကောင့်တစ်ခုမှ ပြောင်းရွှေ့ခြင်း
    incoming_migrations_html: အခြားအကောင့်မှ ဤအကောင့်သို့ ရွှေ့ရန် ဦးစွာ သင်သည် <a href="%{path}">အကောင့်အမည်တူတစ်ခု ဖန်တီးရန်</a> လိုအပ်ပါသည်။
    moved_msg: သင့်အကောင့်မှာ ယခု %{acct} သို့ ပြန်ညွှန်းနေပြီး စောင့်ကြည့်သူများကို ရွှေ့ပြောင်းနေလျက်ရှိပါသည်။
    not_redirecting: သင့်အကောင့်သည် လက်ရှိတွင် အခြားအကောင့်တစ်ခုသို့ ပြန်ညွှန်းနေခြင်းမဟုတ်ပါ။
    on_cooldown: မကြာသေးမီက သင့်အကောင့်ကို ပြောင်းရွှေ့ခဲ့သည်။ ဤလုပ်ဆောင်ချက်ကို %{count} ရက်များတွင် ထပ်မံရရှိနိုင်ပါမည်။
    past_migrations: ယခင်ရွှေ့ပြောင်းမှုများ
    proceed_with_move: စောင့်ကြည့်သူများကို ရွှေ့ရန်
    redirected_msg: သင့်အကောင့်သည် %{acct} သို့ ယခုပြန်ညွှန်းနေပါသည်။
    redirecting_to: သင့်အကောင့်က %{acct} သို့ ပြန်ညွှန်းနေသည်။
    set_redirect: ပြန်ညွှန်းသတ်မှတ်ပါ
    warning:
      backreference_required: အကောင့်အသစ်က ဤအကောင့်ကို ပြန်ကိုးကားရန်အတွက် ဦးစွာ ပြင်ဆင်သတ်မှတ်ရပါမည်
      before: ဆက်လက်မလုပ်ဆောင်မီ ဤမှတ်စုများကို သေချာဖတ်ပါ -
      cooldown: ရွှေ့ပြီးပါက နောက်တစ်ကြိမ် ထပ်ရွှေ့ရန် အချိန်စောင့်ရပါမည်
      followers: ဤလုပ်ဆောင်ချက်မှာ စောင့်ကြည့်သူအားလုံးကို လက်ရှိအကောင့်မှ အကောင့်အသစ်သို့ ရွှေ့ပြောင်းခြင်းဖြစ်သည်
      only_redirect_html: တနည်းအားဖြင့် သင်သည် <a href="%{path}">သင့်ပရိုဖိုင်ပေါ်တွင် ပြန်ညွှန်းခြင်းကိုသာ ပြုလုပ်နိုင်သည်</a>။
      other_data: အခြားအချက်အလက်များကို အလိုအလျောက်ရွှေ့မည်မဟုတ်ပါ
      redirect: သင့်လက်ရှိအကောင့်၏ပရိုဖိုင်ကို ပြန်လည်ညွှန်းပေးသည့်အသိပေးချက်ဖြင့် ပြင်ဆင်ပေးမည်ဖြစ်ပြီး ရှာဖွေမှုများမှ ဖယ်ထုတ်ပေးမည်ဖြစ်သည်
  moderation:
    title: စိစစ်ခြင်း
  move_handler:
    carry_blocks_over_text: ဤအသုံးပြုသူသည် သင်ပိတ်ဆို့ထားသော %{acct} မှ ပြောင်းရွှေ့ခဲ့သည်။
    carry_mutes_over_text: ဤအသုံးပြုသူသည် သင်အသံပိတ်ထားသော %{acct} မှ ပြောင်းရွှေ့ခဲ့သည်။
    copy_account_note_text: ဤအသုံးပြုသူသည် %{acct} မှ ပြောင်းရွှေ့ခဲ့သည်။ ဤသည်မှာ ၎င်းတို့နှင့်ပတ်သက်သော ယခင်မှတ်စုများဖြစ်သည် -
  navigation:
    toggle_menu: 'မီနူးပြောင်းရန်

      '
  notification_mailer:
    admin:
      report:
        subject: "%{name} က တိုင်ကြားစာတစ်စောင် ပို့ခဲ့သည်"
      sign_up:
        subject: "%{name} က အကောင့်ဖွင့်ထားသည်"
    favourite:


@@ 957,17 1217,28 @@ my:
      title: စောင့်ကြည့်သူအသစ်
    follow_request:
      action: စောင့်ကြည့်ရန်တောင်းဆိုမှုများကို ပြင်ဆင်ရန်
      body: "%{name} က သင့်ကို စောင့်ကြည့်ရန် တောင်းဆိုထားသည်"
      subject: ဆိုင်းငံ့ထားသော စောင့်ကြည့်သူ - %{name}
      title: စောင့်ကြည့်ခွင့်ပြုရန် တောင်းဆိုမှုအသစ်
    mention:
      action: စာပြန်ရန်
      body: သင့်ကို %{name} မှ ဖော်ပြခဲ့သည်-
      subject: သင့်ကို %{name} မှ ဖော်ပြခဲ့သည်
      title: ဖော်ပြမှုအသစ်
    poll:
      subject: "%{name} ၏ စစ်တမ်းတစ်ခု ပြီးသွားပါပြီ"
    reblog:
      body: "%{name} က သင့်ပို့စ်ကို  Boost လုပ်ခဲ့သည် -"
      subject: "%{name} က သင့်ပို့စ်ကို Boost လုပ်ခဲ့သည်"
      title: Boost အသစ်
    status:
      subject: "%{name} က အခုလေးတင် ပို့စ်တင်လိုက်ပါပြီ"
    update:
      subject: "%{name} က ပို့စ်တစ်ခုကို ပြင်ဆင်ခဲ့သည်"
  notifications:
    email_events: အီးမေးလ်သတိပေးချက်များအတွက်အကြောင်းအရာများ
    email_events_hint: အသိပေးချက်များရယူမည့် အစီအစဉ်များကို ရွေးပါ -
    other_settings: အခြားအသိပေးချက်များ၏ သတ်မှတ်ချက်များ
  number:
    human:
      decimal_units:


@@ 979,7 1250,11 @@ my:
          thousand: K
          trillion: T
  otp_authentication:
    code_hint: အတည်ပြုရန်အတွက် အထောက်အထားစိစစ်အက်ပ်မှ ထုတ်ပေးသည့်ကုဒ်ကို ထည့်သွင်းပါ
    enable: ဖွင့်ပါ
    manual_instructions: QR ကုဒ်စကင်န်ဖတ်၍မရပါက ကိုယ်တိုင်ရိုက်ထည့်ရန်လိုအပ်ပြီး ဤနေရာသည် စာရွက်အလွတ်နေရာဖြစ်သည်။
    setup: သတ်မှတ်ရန်
    wrong_code: ထည့်သွင်းထားသောကုဒ်သည် မမှန်ကန်ပါ။ ဆာဗာအချိန်နှင့် စက်အချိန်မှာ မှန်ကန်ပါသလား။
  pagination:
    newer: ပိုသစ်သော
    next: ရှေ့သို့


@@ 999,14 1274,20 @@ my:
      too_many_options: သတ်မှတ်ထားသောအရေအတွက် %{max} ကိုကျော်လွန်နေသည်
  preferences:
    other: အခြား
    posting_defaults: ပို့စ်တင်ရာတွင် သတ်မှတ်ချက်များ
    public_timelines: အများမြင်စာမျက်နှာ
  privacy_policy:
    title: ကိုယ်ရေးအချက်အလက်မူဝါဒ
  reactions:
    errors:
      limit_reached: မတူညီသော တုံ့ပြန်မှုများ၏ ကန့်သတ်ချက်သို့ ရောက်ရှိခဲ့သည်။
      unrecognized_emoji: အသိအမှတ်ပြုထားသော အီမိုဂျီမဟုတ်ပါ
  relationships:
    activity: အကောင့်လုပ်ဆောင်ချက်
    confirm_follow_selected_followers: ရွေးချယ်စောင့်ကြည့်သူများကို စောင့်ကြည့်လိုသည်မှာ သေချာပါသလား။
    confirm_remove_selected_followers: ရွေးချယ်စောင့်ကြည့်သူများကို ဖယ်ရှားလိုသည်မှာ သေချာပါသလား။
    confirm_remove_selected_follows: ရွေးချယ်စောင့်ကြည့်သူများကို ဖယ်ရှားလိုသည်မှာ သေချာပါသလား။
    dormant: Dormant
    follow_failure: ရွေးချယ်ထားသော အကောင့်အချို့ကို စောင့်ကြည့်၍ရမည်မဟုတ်ပါ။
    follow_selected_followers: ရွေးချယ်စောင့်ကြည့်သူများကို စောင့်ကြည့်ပါ
    followers: စောင့်ကြည့်သူများ


@@ 1024,11 1305,18 @@ my:
    status: အကောင့်အခြေအနေ
  remote_follow:
    missing_resource: သင့်အကောင့်အတွက် လိုအပ်သော ပြန်ညွှန်းမည့် URL ကို ရှာမတွေ့ပါ
  reports:
    errors:
      invalid_rules: မှန်ကန်သောစည်းမျဉ်းများကို ကိုးကားထားခြင်း မရှိပါ
  rss:
    content_warning: 'အကြောင်းအရာသတိပေးချက် - '
    descriptions:
      account: "@%{acct} မှ အများမြင်ပို့စ်များ"
      tag: "#%{hashtag} ကို တဂ်ထားသော အများမြင်ပို့စ်များ"
  scheduled_statuses:
    over_daily_limit: ယနေ့အတွက် စီစဉ်ထားသည့် ပို့စ်များ၏ ကန့်သတ်ချက် %{limit} ကို ကျော်လွန်သွားပါပြီ
    over_total_limit: စီစဉ်ထားသည့် ပို့စ်များ၏ ကန့်သတ်ချက် %{limit} ကို ကျော်လွန်သွားပါပြီ
    too_soon: စီစဉ်ထားသောရက်စွဲမှာ အနာဂတ်အတွက်ဖြစ်သည်
  sessions:
    activity: နောက်ဆုံးလုပ်ဆောင်ချက်
    browser: ဘရောက်ဇာ


@@ 1054,6 1342,7 @@ my:
      weibo: Weibo
    current_session: လက်ရှိဆက်ရှင်
    description: "%{platform} ပေါ်ရှိ %{browser}"
    explanation: ဤသည်မှာ သင်၏ Mastodon အကောင့်သို့ လက်ရှိဝင်ရောက်ထားသည့် ဝဘ်ဘရောက်ဆာများဖြစ်သည်။
    ip: IP
    platforms:
      adobe_air: Adobe Air


@@ 1081,14 1370,19 @@ my:
    authorized_apps: ခွင့်ပြုထားသောအက်ပ်များ
    back: Mastodon သို့ ပြန်သွားရန်
    delete: အကောင့်ဖျက်သိမ်းခြင်း
    development: Development
    edit_profile: ပရိုဖိုင်ပြင်ဆင်ရန်
    export: အချက်အလက်ထုတ်ယူခြင်း
    featured_tags: အသားပေးဖော်ပြထားသည့် ဟက်ရှ်တဂျ်များ
    import: ထည့်သွင်းခြင်း
    import_and_export: ထည့်သွင်းခြင်းနှင့် ထုတ်ယူခြင်း
    migrate: အကောင့်ပြောင်းရွှေ့ခြင်း
    notifications: အသိပေးချက်များ
    preferences: သတ်မှတ်ချက်များ
    profile: ပရိုဖိုင်
    relationships: စောင့်ကြည့်သူများနှင့် စောင့်ကြည့်စာရင်း
    statuses_cleanup: အလိုအလျောက်ပို့စ်ဖျက်ခြင်း
    strikes: စိစစ်လုပ်ဆောင်ချက်များ
    two_factor_authentication: နှစ်ဆင့်ခံလုံခြုံရေးစနစ်
    webauthn_authentication: လုံခြုံရေးကီးများ
  statuses:


@@ 1106,8 1400,14 @@ my:
    disallowed_hashtags:
      other: ခွင့်မပြုထားသော hashtags များပါရှိသည် - %{tags}
    edited_at_html: "%{date} ကို ပြင်ဆင်ပြီးပါပြီ"
    errors:
      in_reply_not_found: သင် စာပြန်နေသည့်ပို့စ်မှာ မရှိတော့ပါ။
    open_in_web: ဝဘ်တွင် ဖွင့်ပါ
    over_character_limit: စာလုံးကန့်သတ်ချက် %{max} ကို ကျော်လွန်သွားပါပြီ
    pin_errors:
      direct: အမည်ဖော်ပြထားသည့် ပို့စ်များကို ပင်တွဲ၍မရပါ
      limit: သင်သည် ပို့စ်အရေအတွက်အများဆုံးကို ပင်တွဲထားပြီးဖြစ်သည်
      ownership: အခြားသူ၏ပို့စ်ကို ပင်တွဲ၍မရပါ
      reblog: Boost လုပ်ထားသောပို့စ်ကို ပင်ထား၍မရပါ
    poll:
      total_people:


@@ 1131,16 1431,25 @@ my:
      unlisted_long: လူတိုင်းမြင်နိုင်သော်လည်း အများမြင်မည့်စာမျက်နှာများတွင် စာရင်းမသွင်းထားပါ။
  statuses_cleanup:
    enabled: ပို့စ်အဟောင်းများကို အလိုအလျောက် ဖျက်ပါ
    enabled_hint: အောက်ပါခြွင်းချက်များထဲမှ တစ်ခုနှင့် မကိုက်ညီပါက သတ်မှတ်ထားသည့်ကာလအပိုင်းအခြားသို့ ရောက်သည်နှင့် သင့်ပို့စ်များကို အလိုအလျောက် ဖျက်ပါမည်
    exceptions: ခြွင်းချက်များ
    explanation: ပို့စ်များကို ဖျက်ခြင်းသည် စျေးကြီးသော လုပ်ဆောင်မှုတစ်ခုဖြစ်သောကြောင့်၊ ဆာဗာမှမဟုတ်ရင် အလုပ်ရှုပ်နေချိန်တွင် အချိန်ကြာလာသည်နှင့်အမျှ ၎င်းကို ဖြည်းဖြည်းချင်း လုပ်ဆောင်ပါသည်။ ထို့ကြောင့်၊ သင့်ပို့စ်များသည် အချိန်သတ်မှတ်ချက်သို့ရောက်ရှိပြီးနောက် ခဏအကြာတွင် ဖျက်လိုက်နိုင်ပါသည်။
    ignore_favs: နှစ်သက်မှုများကို လျစ်လျူရှုပါ
    ignore_reblogs: Boost များကို လျစ်လျူရှုပါ
    interaction_exceptions: အပြန်အလှန်တုံ့ပြန်မှုများအပေါ်အခြေခံသည့် ခြွင်းချက်များ
    interaction_exceptions_explanation: ပို့စ်များသည် အကြိုက်ဆုံးအဆင့်အောက်သို့ရောက်သွားပါက သို့မဟုတ် ၎င်းတို့ကို တစ်ကြိမ်ကျော်ပြီးပါက ဖျက်ပစ်ရန် အာမခံချက်မရှိကြောင်း သတိပြုပါ။
    keep_direct: တိုက်ရိုက်မက်ဆေ့ချ်များကို သိမ်းထားပါ
    keep_direct_hint: တိုက်ရိုက်စကားပြောထားသည်များကို မဖျက်ပါနှင့်
    keep_media: မီဒီယာဖိုင်များပါသောပို့စ်များကို သိမ်းဆည်းပါ
    keep_media_hint: မီဒီယာဖိုင်များပါသောပို့စ်များကို မဖျက်ပါနှင့်
    keep_pinned: ပင်ထိုးထားသော ပို့စ်များကို သိမ်းထားပါ
    keep_pinned_hint: ပင်ထိုးထားသော ပို့စ်များကို မဖျက်ပါ
    keep_polls: စစ်တမ်းကိုဆက်လက်ထားမည်
    keep_polls_hint: သင့်မှတ်တမ်းတစ်ခုမှ မပျက်ပါ
    keep_self_bookmark: မှတ်ထားသောပို့စ်များကို သိမ်းဆည်းပါ
    keep_self_bookmark_hint: မှတ်ထားပြီးသော ပို့စ်များကို မဖျက်ပါနှင့်
    keep_self_fav: သင်နှစ်သက်ခဲ့သောပို့စ်များကို သိမ်းထားပါ
    keep_self_fav_hint: နှစ်သက်ထားပြီးသော ပို့စ်များကို မဖျက်ပါနှင့်
    min_age:
      '1209600': ၂ ပတ်
      '15778476': ၆ လ


@@ 1150,10 1459,20 @@ my:
      '604800': ၁ ပတ်
      '63113904': ၂ နှစ်
      '7889238': ၃ လ
    min_age_label: ကာလအပိုင်းအခြား
    min_favs: အနည်းဆုံးအားဖြင့် နှစ်သက်သည့်ပို့စ်များကို သိမ်းဆည်းပါ
    min_favs_hint: အနည်းဆုံး ဤအကြိုက်ဆုံးအရေအတွက်ကို လက်ခံရရှိထားသည့် သင့်ပို့စ်များကို မဖျက်ပါ။ ပို့စ်များကို ၎င်းတို့၏ စိတ်ကြိုက်အရေအတွက်မခွဲခြားဘဲ ဖျက်ရန် ချန်ထားပါ။
    min_reblogs: အနည်းဆုံးအားဖြင့် Boost လုပ်ထားသည့်ပို့စ်များကို သိမ်းဆည်းပါ
    min_reblogs_hint: အနည်းဆုံး ဤအကြိမ်အရေအတွက်ကို မြှင့်တင်ထားသည့် သင့်ပို့စ်များကို မဖျက်ပါ။ ၎င်းတို့၏ မြှင့်တင်မှုအရေအတွက်ကို မခွဲခြားဘဲ ပို့စ်များကို ဖျက်ရန် ချန်ထားပါ
  stream_entries:
    pinned: ပင်တွဲထားသောပို့စ်
    reblogged: Boost လုပ်ခဲ့သည်
    sensitive_content: သတိထားရသော အကြောင်းအရာ
  strikes:
    errors:
      too_late: ဤလုပ်ဆောင်ချက်တင်ပြရန် နောက်ကျသွားပါပြီ
  tags:
    does_not_match_previous_name: ယခင်အမည်နှင့် မကိုက်ညီပါ
  themes:
    default: Mastodon (အနက်)
    mastodon-light: Mastodon (အလင်းနောက်ခံ)


@@ 1169,33 1488,55 @@ my:
    edit: ပြင်ဆင်ရန်
    enabled: နှစ်ဆင့်ခံလုံခြုံရေးစနစ်ကို ဖွင့်ထားသည်
    enabled_success: နှစ်ဆင့်ခံလုံခြုံရေးစနစ်ကို ဖွင့်ပြီးပါပြီ
    generate_recovery_codes: ပြန်လည်ရယူရေးကုဒ်များ ဖန်တီးပါ
    lost_recovery_codes: သင့်ဖုန်းပျောက်ဆုံးသွားပါက ပြန်လည်ရယူခြင်းကုဒ်များသည် သင့်အကောင့်သို့ ပြန်လည်ဝင်ရောက်ခွင့်ရရှိစေမည်ဖြစ်သည်။ သင်၏ ပြန်လည်ရယူရေးကုဒ်များ ပျောက်ဆုံးသွားပါက ၎င်းတို့ကို ဤနေရာတွင် ပြန်လည်ထုတ်ပေးနိုင်ပါသည်။ သင်၏ ပြန်လည်ရယူရေး ကုဒ်ဟောင်းများ ပျက်သွားပါမည်။
    methods: နှစ်ဆင့်ခံလုံခြုံရေးနည်းလမ်းများ
    otp: Authenticator အက်ပ်
    recovery_codes: အရန်ပြန်လည်ရယူရေးကုဒ်များ
    recovery_codes_regenerated: ပြန်လည်ရယူရေးကုဒ်များကို ပြန်ထုတ်ပေးပြီးပါပြီ
    recovery_instructions_html: သင့်ဖုန်းသို့ ဝင်ရောက်သုံးစွဲခွင့် ဆုံးရှုံးခဲ့ဖူးပါက၊ သင့်အကောင့်သို့ ပြန်လည်ဝင်ရောက်ခွင့်ရရန် အောက်ပါ ပြန်လည်ရယူရေးကုဒ်များထဲမှ တစ်ခုကို အသုံးပြုနိုင်ပါသည်။ <strong>ပြန်လည်ရယူရေးကုဒ်များကို လုံခြုံအောင်ထားပါ။</strong> ဥပမာအားဖြင့်၊ သင်သည် ၎င်းတို့ကို ပရင့်ထုတ်ပြီး အခြားအရေးကြီးစာရွက်စာတမ်းများဖြင့် သိမ်းဆည်းနိုင်သည်။
    webauthn: လုံခြုံရေးကီးများ
  user_mailer:
    appeal_approved:
      action: သင့်အကောင့်သို့ သွားပါ
      explanation: "%{appeal_date} တွင် သင်တင်သွင်းခဲ့သည့် %{strike_date} တွင် သင့်အကောင့်ကို ဆန့်ကျင်သည့် တိုင်ချက်၏ အယူခံဝင်မှုကို အတည်ပြုပြီးဖြစ်သည်။ သင့်အကောင့်သည် ကောင်းမွန်သောအနေအထားတွင် ရှိနေပြန်သည်။"
      subject: "%{date} တွင် သင့်အယူခံဝင်ချက်ကို အတည်ပြုပြီးပါပြီ"
      title: အယူခံဝင်သည်
    appeal_rejected:
      explanation: "%{appeal_date} တွင် သင်တင်သွင်းခဲ့သည့် %{strike_date} တွင် သင့်အကောင့်ကို ဆန့်ကျင်သည့် တိုင်ချက်၏ အယူခံဝင်မှုကို ပယ်ချခဲ့သည်။"
      subject: "%{date} တွင် သင့်တင်ပြချက်ကို ပယ်ချခဲ့သည်"
      title: အယူခံကို ပယ်ချခဲ့သည်
    backup_ready:
      explanation: သင့် Mastodon အကောင့် အရန်ကူးယူရန် တောင်းဆိုပြီးဖြစ်သည်။ ယခု ဒေါင်းလုဒ်လုပ်နိုင်ပါပြီ။
      subject: သင့်မှတ်တမ်း ဒေါင်းလုဒ်ဆွဲရန် အသင့်ဖြစ်ပါပြီ
    suspicious_sign_in:
      change_password: သင်၏ စကားဝှက်ပြောင်းလဲပါ
      details: ဤသည်မှာ အကောင့်ဝင်ရောက်ခြင်းအတွက် အသေးစိတ်အချက်များဖြစ်သည် -
      explanation: IP လိပ်စာအသစ်တစ်ခုမှနေ၍ သင့်အကောင့်ဝင်ရောက်သည်ကို တွေ့ရှိခဲ့ပါသည်။
      further_actions_html: သင် မဟုတ်ပါက သင့်အကောင့်လုံခြုံစေရန်အတွက် %{action} ကို ချက်ချင်းဆောင်ရွက်ပြီး နှစ်ဆင့်ခံလုံခြုံရေးစနစ်ဖွင့်ထားရန် အကြံပြုပါသည်။
      subject: သင့်အကောင့်ကို IP လိပ်စာအသစ်တစ်ခုမှ ဝင်ရောက်အသုံးပြုလျက်ရှိသည်
      title: အကောင့်ဝင်ရောက်မှုအသစ်
    warning:
      appeal: အယူခံတင်သွင်းပါ
      appeal_description: အမှားအယွင်းတစ်ခုဟု သင်ယုံကြည်ပါက %{instance} ဝန်ထမ်းများထံ တင်ပြနိုင်သည်။
      categories:
        spam: Spam
        violation: အကြောင်းအရာသည် အောက်ပါကွန်မြူနတီလမ်းညွှန်ချက်များကို ချိုးဖောက်သည်။
      explanation:
        delete_statuses: သင့်ပို့စ်အချို့သည် တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော ကွန်မြူနတီလမ်းညွှန်ချက်များကို ချိုးဖောက်ကြောင်း တွေ့ရှိပြီး %{instance} ၏ ကြီးကြပ်သူများမှ ဖယ်ရှားလိုက်ပါသည်။
        disable: သင့်အကောင့်ကို အသုံးမပြုနိုင်တော့သော်လည်း သင့်ပရိုဖိုင်နှင့် အခြားအချက်အလက်များမှာ ကျန်ရှိနေမည်ဖြစ်သည်။ သင့်အချက်အလက်ကို မိတ္တူကူးရန်၊ အကောင့်သတ်မှတ်ချက်များကို ပြောင်းလဲရန် သို့မဟုတ် သင့်အကောင့်ဖျက်သိမ်းရန်တို့အတွက် အရန်သိမ်းဆည်းမှုအား သင် တောင်းဆိုနိုင်သည်။
        silence: သင့်အကောင့်ကို ဆက်လက်အသုံးပြုနိုင်သော်လည်း သင့်စောင့်ကြည့်သူများသာ ဤဆာဗာတွင် သင့်ပို့စ်များကို မြင်နိုင်မည်ဖြစ်ပြီး အကြောင်းအရာခေါင်းစဉ်အမျိုးမျိုးမှ သင့်ကို ဖယ်ထုတ်ထားနိုင်သည်။ သို့သော် အခြားသူများက သင့်ကို စောင့်ကြည့်နေနိုင်ပါသေးသည်။
        suspend: သင့်အကောင့်ကို အသုံးမပြုနိုင်တော့သည့်အပြင် ပရိုဖိုင်နှင့် အခြားအချက်အလက်များကိုလည်း အသုံးပြု၍မရတော့ပါ။ သင့်အချက်အလက်ကို ရက်ပေါင်း ၃၀ ခန့်အတွင်း အပြည့်အဝ မဖယ်ရှားမချင်း အချက်အလက်များ အရန်ကူးယူရန်အတွက် အကောင့်သို့ ဝင်ရောက်နိုင်ပါသေးသည်။ သို့သော် အကောင့်ရပ်ဆိုင်းထားမှုရှောင်လွှဲခြင်းမှ ကာကွယ်ရန်အတွက် အခြေခံအချက်အလက်အချို့ကို ကျွန်ုပ်တို့ ထိန်းသိမ်းထားရပါမည်။
      reason: အကြောင်းပြချက် -
      statuses: ကိုးကားထားသောပို့စ်များ -
      subject:
        delete_statuses: "%{acct} ရှိ သင့်ပို့စ်များကို ဖယ်ရှားလိုက်ပါပြီ"
        disable: သင့်အကောင့် %{acct} ကို ပိတ်သိမ်းထားသည်
        mark_statuses_as_sensitive: "%{acct} ရှိ သင့်ပို့စ်များကို သတိထားရသောပို့စ်များအဖြစ် အမှတ်အသားပြုထားသည်"
        none: "%{acct} အတွက် သတိပေးချက်"
        sensitive: "%{acct} ရှိ သင့်ပို့စ်များကို ယခုမှစပြီး သတိထားရသောပို့စ်များအဖြစ် အမှတ်အသားပြုပါမည်"
        silence: သင့်အကောင့် %{acct} ကို ကန့်သတ်ထားသည်
        suspend: သင့်အကောင့် %{acct} ကို ဆိုင်းငံ့ထားသည်
      title:
        delete_statuses: ပို့စ်များကို ဖယ်ရှားခဲ့သည်
        disable: အကောင့်ပိတ်သွားပါပြီ။


@@ 1209,10 1550,17 @@ my:
      edit_profile_step: ပရိုဖိုင်ဓာတ်ပုံတစ်ပုံ တင်ခြင်း၊ ဖော်ပြမည့်အမည် ပြောင်းလဲခြင်းနှင့် အခြားအရာများပြုလုပ်ခြင်းတို့ဖြင့် သင့်ပရိုဖိုင်ကို စိတ်ကြိုက်ပြင်ဆင်နိုင်ပါသည်။ စောင့်ကြည့်သူအသစ်များ သင့်ကိုစောင့်ကြည့်ခွင့်မပြုမီ ပြန်လည်သုံးသပ်ရန်အတွက် ဆုံးဖြတ်နိုင်ပါသည်။
      explanation: ဤသည်မှာ သင် စတင်အသုံးပြုနိုင်ရန်အတွက် အကြံပြုချက်အချို့ဖြစ်ပါသည်
      final_action: ပို့စ် တင်ရန်
      final_step: 'ပို့စ်စပြီး တင်နိုင်ပါပြီ။ စောင့်ကြည့်သူများမရှိသေးသော်လည်း သင့်အများမြင်ပို့စ်များကို ဒေသတွင်းစာမျက်နှာ သို့မဟုတ် ဟက်ရှ်တက်စာမျက်နှာတို့တွင် အခြားသူများက မြင်နိုင်ပါသည်။ #introductions ဟက်ရှ်တက်ဖြင့် သင့်ကိုယ်သင် မိတ်ဆက်နိုင်ပါသည်။'
      full_handle: ကိုယ်တိုင်ထိန်းချုပ်နိုင်သည်
      full_handle_hint: ဤသည်မှာ သင့်သူငယ်ချင်းများကို အခြားဆာဗာတစ်ခုမှ မက်ဆေ့ချ်ပို့နိုင်ကြောင်း သို့မဟုတ် စောင့်ကြည့်နိုင်ကြောင်း အသိပေးပါမည်။
      subject: Mastodon မှ လှိုက်လှဲစွာကြိုဆိုပါသည်။
      title: "%{name} က ကြိုဆိုပါတယ်။"
  users:
    follow_limit_reached: လူ %{limit} ထက် ပိုပြီး စောင့်ကြည့်၍မရပါ
    go_to_sso_account_settings: အထောက်အထားပေးသူ၏အကောင့်သတ်မှတ်ချက်များသို့ သွားပါ
    invalid_otp_token: မမှန်ကန်သော နှစ်ဆင့်ခံလုံခြုံရေးကုဒ်
    otp_lost_help_html: နှစ်ခုစလုံးကို ဝင်ရောက်ခွင့် ဆုံးရှုံးသွားပါက %{email} နှင့် ဆက်သွယ်နိုင်ပါသည်
    seamless_external_login: ပြင်ပဝန်ဆောင်မှုမှတစ်ဆင့် အကောင့်ဝင်ထားသောကြောင့် စကားဝှက်နှင့် အီးမေးလ်သတ်မှတ်ချက်များကို မရနိုင်ပါ။
    signed_in_as: အဖြစ် အကောင့်ဝင်ခဲ့သည် -
  verification:
    verification: စိစစ်ခြင်း

M config/locales/nl.yml => config/locales/nl.yml +8 -1
@@ 812,6 812,12 @@ nl:
        message_html: Je hebt voor deze server geen regels opgesteld.
      sidekiq_process_check:
        message_html: Er draait geen Sidekiqproces voor de wachtrij(en) %{value}. Controleer je Sidekiqconfiguratie
      upload_check_privacy_error:
        action: Klik hier voor meer informatie
        message_html: "<strong>Uw webserver is verkeerd geconfigureerd. De privacy van uw gebruikers is in gevaar.</strong>"
      upload_check_privacy_error_object_storage:
        action: Klik hier voor meer informatie
        message_html: "<strong>Je objectopslag is verkeerd geconfigureerd. De privacy van je gebruikers is in gevaar.</strong>"
    tags:
      review: Status beoordelen
      updated_msg: Instellingen hashtag succesvol bijgewerkt


@@ 1684,12 1690,13 @@ nl:
      title: Welkom aan boord %{name}!
  users:
    follow_limit_reached: Je kunt niet meer dan %{limit} accounts volgen
    go_to_sso_account_settings: Ga naar de accountinstellingen van uw identiteitsprovider
    invalid_otp_token: Ongeldige tweestaps-toegangscode
    otp_lost_help_html: Als je toegang tot beiden kwijt bent geraakt, neem dan contact op via %{email}
    seamless_external_login: Je bent ingelogd via een externe dienst, daarom zijn wachtwoorden en e-mailinstellingen niet beschikbaar.
    signed_in_as: 'Ingelogd als:'
  verification:
    explanation_html: 'Je kunt <strong>jezelf verifiëren als de eigenaar van de links in de metadata van jouw profiel</strong>. Hiervoor moet op de gelinkte website een link terug naar jouw Mastodonprofiel staan. Deze link <strong>moet</strong> het <code>rel="me"</code>-attribuut bevatten. De omschrijving van de link maakt niet uit. Hier is een voorbeeld:'
    explanation_html: 'Je kunt <strong>jezelf verifiëren als de eigenaar van de koppelingen in de metadata van jouw profiel</strong>. Hiervoor moet op de gekoppelde website een koppeling terug naar jouw Mastodonprofiel staan. Na het toevoegen van de koppeling moet je wellicht hier terug komen en je profiel opnieuw bewaren om de verificatie te bevestigen. Deze koppeling <strong>moet</strong> het <code>rel="me"</code>-attribuut bevatten. De omschrijving van de koppeling maakt niet uit. Hier is een voorbeeld:'
    verification: Verificatie
  webauthn_credentials:
    add: Nieuwe beveiligingssleutel toevoegen

M config/locales/nn.yml => config/locales/nn.yml +0 -1
@@ 1659,7 1659,6 @@ nn:
    seamless_external_login: Du er logga inn gjennom eit eksternt reiskap, so passord og e-postinstillingar er ikkje tilgjengelege.
    signed_in_as: 'Logga inn som:'
  verification:
    explanation_html: 'Du kan <strong>bekrefte at du selv er eieren av lenkene i din profilmetadata</strong>. For å gjøre det, må det tillenkede nettstedet inneholde en lenke som fører tilbake til Mastodon-profilen din. Lenken tilbake <strong>må</strong> ha en <code>rel="me"</code>-attributt. Tekstinnholdet til lenken er irrelevant. Her er et eksempel:'
    verification: Stadfesting
  webauthn_credentials:
    add: Legg til ny sikkerhetsnøkkel

M config/locales/no.yml => config/locales/no.yml +0 -1
@@ 1612,7 1612,6 @@
    seamless_external_login: Du er logget inn via en ekstern tjeneste, så passord og e-post innstillinger er ikke tilgjengelige.
    signed_in_as: 'Innlogget som:'
  verification:
    explanation_html: 'Du kan <strong>bekrefte at du selv er eieren av lenkene i din profilmetadata</strong>. For å gjøre det, må det tillenkede nettstedet inneholde en lenke som fører tilbake til Mastodon-profilen din. Lenken tilbake <strong>må</strong> ha en <code>rel="me"</code>-attributt. Tekstinnholdet til lenken er irrelevant. Her er et eksempel:'
    verification: Bekreftelse
  webauthn_credentials:
    add: Legg til ny sikkerhetsnøkkel

M config/locales/oc.yml => config/locales/oc.yml +0 -1
@@ 1004,7 1004,6 @@ oc:
    seamless_external_login: Sètz connectat via un servici extèrn, los paramètres de senhal e de corrièl son doncas pas disponibles.
    signed_in_as: 'Session a :'
  verification:
    explanation_html: 'Podètz <strong>verificar vosautres meteisses coma proprietari dels ligams per las metadonadas de vòstre perfil</strong>. Per aquò far, lo site Web ligat deu conténer un ligam cap a vòstre perfil Mastodon. Lo ligam <strong>deu</strong> aver un atribut <code>rel="me"</code>. Lo contengut tèxte del ligam impòrta pas. Vaquí un exemple :'
    verification: Verificacion
  webauthn_credentials:
    add: Apondre una clau de seguretat novèla

M config/locales/pl.yml => config/locales/pl.yml +7 -0
@@ 840,6 840,12 @@ pl:
        message_html: Nie zdefiniowano żadnych reguł serwera.
      sidekiq_process_check:
        message_html: Brak uruchomionego procesu Sidekiq dla kolejki(-ek) %{value}. Sprawdź konfigurację Sidekiq
      upload_check_privacy_error:
        action: Kliknij tutaj, aby dowiedzieć się więcej
        message_html: "<strong>Twój serwer internetowy jest nieprawidłowo skonfigurowany. Prywatność twoich użytkowników jest zagrożona.</strong>"
      upload_check_privacy_error_object_storage:
        action: Kliknij tutaj, aby dowiedzieć się więcej
        message_html: "<strong>Pamięć obiektu jest nieprawidłowa. Prywatność twoich użytkowników jest zagrożona.</strong>"
    tags:
      review: Stan przeglądu
      updated_msg: Pomyślnie uaktualniono ustawienia hashtagów


@@ 1748,6 1754,7 @@ pl:
      title: Witaj na pokładzie, %{name}!
  users:
    follow_limit_reached: Nie możesz obserwować więcej niż %{limit} osób
    go_to_sso_account_settings: Przejdź do ustawień konta dostawcy tożsamości
    invalid_otp_token: Kod uwierzytelniający jest niepoprawny
    otp_lost_help_html: Jeżeli utracisz dostęp do obu, możesz skontaktować się z %{email}
    seamless_external_login: Zalogowano z użyciem zewnętrznej usługi, więc ustawienia hasła i adresu e-mail nie są dostępne.

M config/locales/pt-BR.yml => config/locales/pt-BR.yml +19 -1
@@ 441,8 441,10 @@ pt-BR:
      import:
        description_html: Você está prestes a importar uma lista de boqueio de domínio. Por favor, revise esta lista com muito cuidado, especialmente se você mesmo não criou esta lista.
        existing_relationships_warning: Existem relações de seguimento
        private_comment_description_html: 'Para ajudá-lo a rastrear de onde vêm os blocos importados, serão criados blocos importados com o seguinte comentário privado: <q>%{comment}</q>'
        private_comment_template: Importado de %{source} em %{date}
        title: Importar bloqueio de domínios
      invalid_domain_block: 'Um ou mais blocos de domínio foram ignorados devido ao(s) seguinte(s) erro(s): %{error}'
      new:
        title: Importar bloqueio de domínios
      no_file: Nenhum arquivo selecionado


@@ 474,6 476,7 @@ pt-BR:
      content_policies:
        comment: Nota interna
        description_html: Você pode definir políticas de conteúdo que serão aplicadas a todas as contas deste domínio e a qualquer um dos seus subdomínios.
        limited_federation_mode_description_html: Você pode escolher se deseja permitir a associação com este domínio.
        policies:
          reject_media: Rejeitar mídia
          reject_reports: Rejeitar denúncias


@@ 578,7 581,9 @@ pt-BR:
        other_description_html: Veja mais opções para controlar o comportamento da conta e personalizar a comunicação com a conta denunciada.
        resolve_description_html: Nenhuma ação será tomada contra a conta denunciada, nenhuma violação será guardada e a denúncia será encerrada.
        silence_description_html: A conta ficará visível apenas para aqueles que já a seguem ou que a procuram manualmente, limitando severamente seu alcance. Pode ser revertido a qualquer momento. Fecha todas as denúncias desta conta.
        suspend_description_html: A conta e todo o seu conteúdo ficará inacessível e, eventualmente, excluído e interagir com ela será impossível. Reversível dentro de 30 dias. Encerra todas as denúncias contra esta conta.
      actions_description_html: Decida que medidas tomar para resolver esta denúncia. Se você decidir punir a conta denunciada, ela receberá uma notificação por e-mail, exceto quando for selecionada a categoria <strong>spam</strong> for selecionada.
      actions_description_remote_html: Decida quais medidas tomará para resolver esta denúncia. Isso só afetará como <strong>seu servidor</strong> se comunica com esta conta remota e manipula seu conteúdo.
      add_to_report: Adicionar mais à denúncia
      are_you_sure: Você tem certeza?
      assign_to_self: Atribuir para si


@@ 629,12 634,16 @@ pt-BR:
          suspend_html: 'Você está prestes a <strong>suspender</strong> <strong>a conta de @%{acct}</strong>. Isso irá:'
        actions:
          delete_html: Remover as publicações ofensivas
          mark_as_sensitive_html: Marcar a mídia de posts ofensivos como sensível
          silence_html: Limitar firmemente o alcance de <strong>@%{acct}</strong>, tornando seus perfis e conteúdos apenas visíveis para pessoas que já os estão seguindo ou olhando manualmente o perfil
          suspend_html: Suspender <strong>@%{acct}</strong>, tornando seu perfil e conteúdo inacessíveis, impossibilitando a interação
        close_report: 'Marcar denúncia #%{id} como resolvida'
        close_reports_html: Marcar <strong>todas</strong> as denúncias contra <strong>@%{acct}</strong> como resolvidas
        delete_data_html: Exclua o perfil e o conteúdo de <strong>@%{acct}</strong> daqui a 30 dias, a menos que a suspensão seja desfeita nesse meio tempo
        preview_preamble_html: "<strong>@%{acct}</strong> receberá um aviso com o seguinte conteúdo:"
        record_strike_html: Registre uma ação contra <strong>@%{acct}</strong> para te ajudar em futuras violações desta conta
        send_email_html: Enviar <strong>@%{acct}</strong> um e-mail de aviso
        warning_placeholder: Argumentos adicionais para a ação de moderação.
      target_origin: Origem da conta denunciada
      title: Denúncias
      unassign: Desatribuir


@@ 803,6 812,12 @@ pt-BR:
        message_html: Você não definiu nenhuma regra de servidor.
      sidekiq_process_check:
        message_html: Nenhum processo Sidekiq rodando para a(s) fila(s) %{value}. Por favor, revise a sua configuração para Sidekiq
      upload_check_privacy_error:
        action: Confira aqui para mais informações
        message_html: "<strong>Seu servidor está mal configurado. A privacidade de seus usuários está em risco.</strong>"
      upload_check_privacy_error_object_storage:
        action: Confira aqui para mais informações
        message_html: "<strong>Seu armazenamento de objetos está mal configurado. A privacidade de seus usuários está em risco.</strong>"
    tags:
      review: Status da revisão
      updated_msg: Configurações de hashtag atualizadas


@@ 825,6 840,7 @@ pt-BR:
          other: Compartilhado por %{count} pessoas na última semana
        title: Em alta no momento
        usage_comparison: Compartilhado %{today} vezes hoje, em comparação com %{yesterday} de ontem
      not_allowed_to_trend: Não tem permissão para criar tendências
      only_allowed: Somente permitido
      pending_review: Revisão pendente
      preview_card_providers:


@@ 1574,6 1590,7 @@ pt-BR:
      '7889238': 3 meses
    min_age_label: Validade
    min_favs: Manter publicações favoritadas por ao menos
    min_favs_hint: Não exclui suas publicações que receberam pelo menos esta quantidade de favoritos. Deixe em branco para excluir publicações independentemente da quantidade de favoritos
    min_reblogs: Manter publicações impulsionadas por ao menos
    min_reblogs_hint: Não exclui publicações que receberam pelo menos esta quantidade de impulsos. Deixe em branco para excluir publicações independentemente da quantidade de impulsos
  stream_entries:


@@ 1673,12 1690,13 @@ pt-BR:
      title: Boas vindas, %{name}!
  users:
    follow_limit_reached: Você não pode seguir mais de %{limit} pessoas
    go_to_sso_account_settings: Vá para as configurações de conta do seu provedor de identidade
    invalid_otp_token: Código de dois fatores inválido
    otp_lost_help_html: Se você perder o acesso à ambos, você pode entrar em contato com %{email}
    seamless_external_login: Você entrou usando um serviço externo, então configurações de e-mail e senha não estão disponíveis.
    signed_in_as: 'Entrou como:'
  verification:
    explanation_html: 'Você pode <strong>verificar os links nos metadados do seu perfil</strong>. Para isso, o site citado deve conter um link de volta para o seu perfil do Mastodon. O link de volta <strong>deve</strong> conter um atributo <code>rel="me"</code>. O conteúdo ou texto do link não importa. Aqui está um exemplo:'
    explanation_html: 'Você pode <strong>se verificar como proprietário dos links nos metadados do seu perfil</strong>. Para isso, o site vinculado deve conter um link de volta para o seu perfil de Mastodon. Depois de adicionar o link, talvez você precise voltar aqui e salvar novamente o seu perfil para que a verificação tenha efeito. O link de volta <strong>deve</strong> ter um atributo <code>rel="me"</code>. O conteúdo do texto do link não importa. Aqui está um exemplo:'
    verification: Verificação
  webauthn_credentials:
    add: Adicionar nova chave de segurança

M config/locales/pt-PT.yml => config/locales/pt-PT.yml +8 -1
@@ 812,6 812,12 @@ pt-PT:
        message_html: Não definiu nenhuma regra para a instância.
      sidekiq_process_check:
        message_html: Nenhum processo Sidekiq em execução para a(s) fila(s) %{value}. Reveja a configuração do seu Sidekiq
      upload_check_privacy_error:
        action: Verifique aqui para mais informações
        message_html: "<strong>O seu servidor web está mal configurado. A privacidade dos seus utilizadores está em risco.</strong>"
      upload_check_privacy_error_object_storage:
        action: Verifique aqui para mais informações
        message_html: "<strong>O seu armazenamento de objetos está mal configurado. A privacidade dos seus utilizadores está em risco.</strong>"
    tags:
      review: Estado da revisão
      updated_msg: 'Definições de #etiquetas correctamente actualizadas'


@@ 1684,12 1690,13 @@ pt-PT:
      title: Bem-vindo a bordo, %{name}!
  users:
    follow_limit_reached: Não pode seguir mais do que %{limit} pessoas
    go_to_sso_account_settings: Ir para as definições de conta do seu fornecedor de identidade
    invalid_otp_token: Código de autenticação inválido
    otp_lost_help_html: Se perdeu o acesso a ambos, pode entrar em contacto com %{email}
    seamless_external_login: Tu estás ligado via um serviço externo. Por isso, as configurações da palavra-passe e do e-mail não estão disponíveis.
    signed_in_as: 'Registado como:'
  verification:
    explanation_html: 'Pode <strong>comprovar que é o dono das hiperligações nos metadados do seu perfil</strong>. Para isso, a página para a qual a ligação aponta tem de conter uma outra para o seu perfil do Mastodon. Essa ligação <strong>tem</strong> de ter um atributo <code>rel="me"</code>. O conteúdo do texto não é importante. Eis um exemplo:'
    explanation_html: 'Pode <strong>comprovar que é o dono das hiperligações nos metadados do seu perfil</strong>. Para isso, a página para a qual a hiperligação aponta tem de conter uma outra para o seu perfil do Mastodon. Após adicionar a hiperligação, poderá ter de voltar aqui e voltar a guardar o seu perfil para que a verificação produza efeito. Essa hiperligação <strong>tem</strong> de ter um atributo <code>rel="me"</code>. O conteúdo do texto não é importante. Eis um exemplo:'
    verification: Verificação
  webauthn_credentials:
    add: Adicionar nova chave de segurança

M config/locales/ro.yml => config/locales/ro.yml +0 -1
@@ 749,5 749,4 @@ ro:
    seamless_external_login: Sunteți autentificat prin intermediul unui serviciu extern, astfel încât parola și setările de e-mail nu sunt disponibile.
    signed_in_as: 'Conectat ca:'
  verification:
    explanation_html: 'Poți <strong>să te verifici ca proprietar al link-urilor din metadatele profilului tău</strong>. Pentru aceasta, site-ul web asociat trebuie să conțină un link înapoi la profilul tău. Link-ul înapoi <strong>trebuie</strong> să aibă un atribut <code>rel="me"</code>. Conținut textului link-ului nu contează. Iată un exemplu:'
    verification: Verificare

M config/locales/ru.yml => config/locales/ru.yml +1 -1
@@ 650,6 650,7 @@ ru:
      statuses_description_html: Нарушающее правила содержимое будет процитировано при коммуникации с фигурирующим в жалобе аккаунтом
      summary:
        action_preambles:
          delete_html: 'Вы собираетесь <strong>удалить</strong> некоторые посты <strong>@%{acct}</strong>. В результате этого:'
          suspend_html: 'Вы собираетесь <strong>заморозить</strong> учетную запись <strong>@%{acct}</strong>. В результате этого:'
        actions:
          delete_html: Удалить оскорбительные сообщения


@@ 1732,7 1733,6 @@ ru:
    seamless_external_login: Вы залогинены через сторонний сервис, поэтому настройки e-mail и пароля недоступны.
    signed_in_as: 'Выполнен вход под именем:'
  verification:
    explanation_html: 'Вы можете <strong>подтвердить владение</strong> любой из ссылок в таблице. Для этого страница по ссылке должна содержать обратную ссылку на ваш профиль Mastodon, а у самой ссылки <strong>должен</strong> атрибут <code>rel="me"</code>. Текст ссылки значения не имеет. Вот пример:'
    verification: Верификация ссылок
  webauthn_credentials:
    add: Добавить новый ключ безопасности

M config/locales/sc.yml => config/locales/sc.yml +0 -1
@@ 1020,7 1020,6 @@ sc:
    seamless_external_login: As abertu sa sessione pro mèdiu de unu servìtziu esternu, e pro custa resone is cunfiguratziones de sa crae de intrada e de posta eletrònica non sunt a disponimentu.
    signed_in_as: 'Sessione aberta comente:'
  verification:
    explanation_html: 'Ti podes <strong>verificare a sa sola comente mere de is ligòngios in is metadatos de su profilu tuo</strong>. Pro ddu fàghere su situ ligadu depet cuntènnere unu ligòngiu chi torret a su profilu de Mastodon tuo. Su ligòngiu in su situ <strong>depet</strong> tènnere un''atributu <code>rel="me"</code>. Su testu cuntenutu in su ligòngiu no est de importu. Custu est un''esèmpiu:'
    verification: Verìfica
  webauthn_credentials:
    add: Agiunghe una crae de seguresa noa

M config/locales/sco.yml => config/locales/sco.yml +0 -1
@@ 1627,7 1627,6 @@ sco:
    seamless_external_login: Ye'r logged in via a external service, sae passwird an email settins urnae available.
    signed_in_as: 'Signt in as:'
  verification:
    explanation_html: 'Ye kin <strong>verify yersel as the ainer o the links in yer profile metadata</strong>. Fir that, the linkt wabsteid haes tae contain a link back tae yer Mastodon profile. The link back <strong>haes tae</strong> hae a <code>rel="me"</code> attribute. The text content o the link disnae maitter. Here a example:'
    verification: Verification
  webauthn_credentials:
    add: Add new security key

M config/locales/si.yml => config/locales/si.yml +0 -1
@@ 1413,7 1413,6 @@ si:
    seamless_external_login: ඔබ බාහිර සේවාවක් හරහා ලොග් වී ඇත, එබැවින් මුරපදය සහ ඊමේල් සැකසුම් නොමැත.
    signed_in_as: 'මෙසේ පුරනය වී ඇත:'
  verification:
    explanation_html: 'ඔබගේ පැතිකඩ පාරදත්ත</strong>හි ඇති සබැඳි වල හිමිකරු ලෙස ඔබට <strong>සත්‍යාපනය කළ හැක. ඒ සඳහා, සම්බන්ධිත වෙබ් අඩවියේ ඔබේ Mastodon පැතිකඩ වෙත ආපසු සබැඳියක් තිබිය යුතුය. සබැඳිය ආපසු <strong></code> </strong> <code>යුතුය. සබැඳියේ පෙළ අන්තර්ගතය වැදගත් නොවේ. මෙන්න උදාහරණයක්:'
    verification: සත්යාපනය
  webauthn_credentials:
    add: නව ආරක්ෂක යතුර එක් කරන්න

M config/locales/simple_form.fi.yml => config/locales/simple_form.fi.yml +2 -2
@@ 91,13 91,13 @@ fi:
        site_short_description: Lyhyt kuvaus auttaa yksilöimään palvelimesi. Kuka sitä johtaa, kenelle se on tarkoitettu?
        site_terms: Käytä omaa tietosuojakäytäntöä tai jätä tyhjäksi, jos haluat käyttää oletusta. Voidaan jäsentää Markdown-syntaksilla.
        site_title: Kuinka ihmiset voivat viitata palvelimeen sen verkkotunnuksen lisäksi.
        status_page_url: URL-osoite, jonka kautta palvelimen tila voidaan tarkastaa sen ollessa tavoittamattomissa
        status_page_url: URL-osoite sivulle, jonka kautta tämän palvelimen tila voidaan ongelmatilanteissa tarkastaa
        theme: Teema, jonka uloskirjautuneet vierailijat ja uudet käyttäjät näkevät.
        thumbnail: Noin 2:1 kuva näytetään palvelimen tietojen rinnalla.
        timeline_preview: Uloskirjautuneet vierailijat voivat selata uusimpia julkisia viestejä, jotka ovat saatavilla palvelimella.
        trendable_by_default: Ohita suositun sisällön manuaalinen tarkistus. Yksittäisiä kohteita voidaan edelleen poistaa jälkikäteen.
        trends: Trendit osoittavat, mitkä julkaisut, aihetunnisteet ja uutiset ovat saamassa vetoa palvelimellasi.
        trends_as_landing_page: Näytä suosittu sisältö uloskirjautuneille käyttäjille ja kävijöille palvelimen kuvauksen sijaan. Edellyttää suositun sisällön käyttöönottoa.
        trends_as_landing_page: Näytä vierailijoille ja uloskirjautuneille käyttäjille suosittu sisältö palvelininstanssin kuvaustekstin sijaan. Edellytyksenä on, että suosittu sisältö -ominaisuus on käytössä.
      form_challenge:
        current_password: Olet menossa suojatulle alueelle
      imports:

M config/locales/simple_form.my.yml => config/locales/simple_form.my.yml +48 -3
@@ 2,16 2,29 @@
my:
  simple_form:
    hints:
      account_alias:
        acct: သင်ပြောင်းရွှေ့လိုသောအကောင့်၏ username@domain ကိုသတ်မှတ်ပါ
      account_warning_preset:
        text: URLs၊ hashtags နှင့် mentions များကဲ့သို့ ပို့စ်ကို သုံးနိုင်သည်
        title: လက်ခံသူမှ မြင်နိုင်၊ မမြင်နိုင် ရွေးချယ်ခွင့်
      admin_account_action:
        include_statuses: အသုံးပြုသူသည် မည်သည့်ပို့စ်များမှာ စိစစ်ထားခြင်း သို့မဟုတ် သတိပေးထားခြင်းဖြစ်စေသည်ကို တွေ့မြင်နိုင်ပါသည်
        send_email_notification: အသုံးပြုသူသည် ၎င်းတို့၏အကောင့်နှင့် ဖြစ်ပျက်ခဲ့သော ရှင်းလင်းချက်ကို လက်ခံရရှိမည်ဖြစ်သည်
        text_html: Post Syntax ကို သုံးနိုင်သည်။ အချိန်ကုန်သက်သာစေရန်အတွက် <a href="%{path}">ကြိုတင်သတိပေးချက်များ ထည့်နိုင်သည်</a>
        type_html: "<strong>%{acct}</strong> နှင့် ဘာလုပ်ရမည်ကို ရွေးပါ။"
        types:
          disable: အသုံးပြုသူကို ၄င်း၏အကောင့်အား သုံးစွဲခြင်းမှ ဟန့်တားပါ။ သို့သော် ၄င်းဖန်တီးထားသည့် အချက်အလက်များကို မဖျက်ပါ။ မဖျောက်ပါ။
          none: အခြားလုပ်ဆောင်ချက်တစ်ခုမှ မလုပ်ဘဲ အသုံးပြုသူထံ သတိပေးချက်ပေးပို့ရန် ၎င်းကို အသုံးပြုပါ။
          sensitive: ဤအသုံးပြုသူ၏ မီဒီယာပူးတွဲပါဖိုင်များအားလုံးကို သတိထားရသောမီဒီယာအဖြစ် သတ်မှတ်ရန် တိုက်တွန်းပါ။
          silence: စောင့်ကြည့်မထားသူများ၏ ပို့စ်များနှင့် အသိပေးချက်များကို ဖျောက်ထားနိုင်ပြီး အသုံးပြုသူအား အများမြင်မည့်ပို့စ် တင်ခြင်းကို တားမြစ်နိုင်သည်။ ဤအကောင့်နှင့်ပတ်သက်သည့် အစီရင်ခံစာအားလုံးကို ပိတ်ထားနိုင်သည်။
          suspend: ဤအကောင့်မှ သို့မဟုတ် ဤအကောင့်နှင့် အပြန်အလှန်တုံ့ပြန်မှုကို တားဆီးပြီး အကြောင်းအရာများကို ဖျက်ပါ။ ရက်ပေါင်း ၃၀ အတွင်း ပြန်ပြောင်းနိုင်သည်။ ဤအကောင့်နှင့်ပတ်သက်သည့် အစီရင်ခံစာအားလုံးကို ပိတ်ရန်။
        warning_preset_id: ကြိုတင်သတ်မှတ်မှုအဆုံးတွင် စိတ်ကြိုက်စာသားကို ထည့်နိုင်သည်
      announcement:
        all_day: အချိန်အပိုင်းအခြား ရက်စွဲများကိုသာ ပြသပါမည်
        ends_at: ကြေညာချက်ထုတ်ပြန်ခြင်းကို ဤအချိန်တွင် အလိုအလျောက် ရပ်တန့်လိုက်ပါမည်
        scheduled_at: ကြေညာချက်ချက်ချင်းထုတ်ပြန်ရန်အတွက် နေရာလွတ်ချန်ထားပါ
        starts_at: သင့်ကြေညာချက်သည် အချိန်အပိုင်းအခြားတစ်ခုနှင့် ဆက်စပ်နိုင်ပါသည်
        text: Post Syntax ကို သုံးနိုင်သည်။ အသုံးပြုသူ၏ဖန်သားပြင်တွင် ပေါ်လာမည့် ကြေညာချက်နေရာကို သတိထားပါ
      appeal:
        text: လုပ်ဆောင်ချက်တစ်ကြိမ်သာ အသုံးပြုနိုင်သည်
      defaults:
        autofollow: ဖိတ်ကြားချက်မှတစ်ဆင့် အကောင့်ဖွင့်သူများမှာ သင့်ကို အလိုအလျောက်စောင့်ကြည့်မည်ဖြစ်ပါသည်
        avatar: PNG၊ GIF သို့မဟုတ် JPG။ အများဆုံး %{size}။ %{dimensions}px သို့ လျှော့ချပါမည်။


@@ 25,9 38,11 @@ my:
        fields: သင့်ပရိုဖိုင်တွင် ၄ ခုအထိ ပြသထားနိုင်သည်
        header: PNG၊ GIF သို့မဟုတ် JPG။ အများဆုံး %{size}။ %{dimensions}px သို့ လျှော့ချပါမည်
        inbox_url: သင်အသုံးပြုလိုသော relay ၏ ရှေ့စာမျက်နှာမှ URL ကို ကူးယူပါ
        irreversible: စစ်ထုတ်ခြင်းကိုဖယ်ရှားလိုက်ပါက စစ်ထုတ်ထားသော ပို့စ်များမှာ ပျောက်ကွယ်သွားပါမည်
        locale: အသုံးပြုသူမှ လက်ရှိသုံးနေသည့်ဘာသာစကား၊ အီးမေးလ်များနှင့် ရရှိစေရန်ပေးပို့သည့် အသိပေးချက်များ
        locked: စောင့်ကြည့်ရန်အတွက် တောင်းဆိုမှုများကို အတည်ပြုခြင်းဖြင့် စောင့်ကြည့်သူများကို ထိန်းချုပ်နိုင်သည်
        password: အနည်းဆုံး စာလုံး ၈ လုံး အသုံးပြုပါ။
        scopes: API အက်ပလီကေးရှင်းများကို ဝင်ရောက်ကြည့်ရှုခွင့်ပြုပါမည်။ ထိပ်တန်းအဆင့်နယ်ပယ်ကို ရွေးချယ်ထားပါက တစ်ခုချင်းစီရွေးချယ်ရန် မလိုအပ်တော့ပါ။
        setting_aggregate_reblogs: မကြာသေးခင်က Boost လုပ်ထားသောပို့စ်များအတွက် Boost  အသစ်များကို မပြပါနှင့် (အသစ်ရရှိထားသော Boost များကိုသာ ပြသပါရန်)
        setting_always_send_emails: Mastodon ကို လက်ရှိအသုံးပြုနေချိန်တွင် ပုံမှန်အားဖြင့် အီးမေးလ်အသိပေးချက်များကို ပေးပို့မည်မဟုတ်ပါ
        setting_default_sensitive: သတိထားရသောမီဒီယာကို မူလအားဖြင့် ဖျောက်ထားနိုင်ပြီး ကလစ်တစ်ချက်နှိပ်ရုံဖြင့် ပြန်လည်ဖော်ပြနိုင်သည်


@@ 38,26 53,40 @@ my:
        setting_noindex: သင်၏ အများမြင်သည့်ပရိုဖိုင်နှင့် ပို့စ်စာမျက်နှာများကို အကျိုးသက်ရောက်သည်
        setting_show_application: ပို့စ်တင်ရန်အတွက် သင်အသုံးပြုသည့် အက်ပလီကေးရှင်းကို သင့်ပို့စ်များ၏ အသေးစိတ်ကြည့်ရှုမှုတွင် ပြသမည်ဖြစ်သည်
        username: "%{domain} ရှိ သင့်အသုံးပြုသူအမည်မှာ တူညီ၍မရပါ"
        whole_word: အဓိကစကားလုံး သို့မဟုတ် စကားစုသည် အက္ခရာဂဏန်းများသာဖြစ်ပါကစကားလုံးတစ်ခုလုံးနှင့် ကိုက်ညီမှသာ အသုံးပြုနိုင်မည်ဖြစ်သည်
      domain_allow:
        domain: ဤဒိုမိန်းသည် ဤဆာဗာမှ အချက်အလက်များကို ရယူနိုင်မည်ဖြစ်ပြီး ဝင်လာသောအချက်အလက်များကို စီမံဆောင်ရွက်ပေးပြီး သိမ်းဆည်းသွားမည်ဖြစ်သည်
      email_domain_block:
        domain: "၎င်းမှာ အီးမေးလ်လိပ်စာ သို့မဟုတ် အသုံးပြုသည့် MX မှတ်တမ်းတွင် ပေါ်လာသည့် ဒိုမိန်းအမည် ဖြစ်နိုင်သည်။ အကောင့်ဖွင့်ပြီးပါက စစ်ဆေးနိုင်မည်ဖြစ်သည်။"
        with_dns_records: ပေးထားသော ဒိုမိန်း၏ DNS မှတ်တမ်းများကို ဖြေရှင်းရန် ကြိုးပမ်းမှု ပြုလုပ်မည်ဖြစ်ပြီး ရလဒ်များကိုလည်း ပိတ်ဆို့သွားမည်ဖြစ်သည်။
      featured_tag:
        name: ဤသည်မှာ သင်မကြာသေးမီက အသုံးပြုခဲ့သော hashtag အချို့ဖြစ်သည် -
      filters:
        action: ပို့စ်တစ်ခုသည် စစ်ထုတ်မှုနှင့် ကိုက်ညီချိန်တွင် မည်သည့်လုပ်ဆောင်ချက် ဆောင်ရွက်မည်ကို ရွေးချယ်ပါ
        actions:
          hide: စစ်ထုတ်ထားသော အကြောင်းအရာကို လုံးဝဖျောက်ထားပြီး မရှိသကဲ့သို့ ပြပါ
          warn: စစ်ထုတ်မှုခေါင်းစဉ်ကိုဖော်ပြသည့်သတိပေးချက်နောက်တွင် စစ်ထုတ်ထားသောအကြောင်းအရာကို ဖျောက်ထားပါ
      form_admin_settings:
        activity_api_enabled: အပတ်စဉ် စာရင်းများတွင် ဒေသတွင်းတင်ထားသောပို့စ်များ၊ လက်ရှိအသုံးပြုသူများနှင့် စာရင်းသွင်းမှုအသစ်များ
        backups_retention_period: သတ်မှတ်ထားသော ရက်အရေအတွက်အလိုက် အသုံးပြုသူမှတ်တမ်းများကို သိမ်းဆည်းပါ။
        bootstrap_timeline_accounts: ဤအကောင့်များကို အသုံးပြုသူအသစ်များ၏ စောင့်ကြည့်မှု အကြံပြုချက်များ၏ထိပ်ဆုံးတွင် ပင်ချိတ်ထားပါမည်။
        closed_registrations_message: အကောင့်ဖွင့်ခြင်းများကို ပိတ်ထားသည့်အခါတွင် ပြသထားသည်
        content_cache_retention_period: သတ်မှတ်ထားသောရက်များပြီးနောက် အခြားဆာဗာများမှ ပို့စ်များကို ဖျက်လိုက်ပါမည်။ ပြန်လည်ပြင်ဆင်၍မရပါ။
        custom_css: Mastodon ဝဘ်ဗားရှင်းတွင် စိတ်ကြိုက်စတိုင်များကို အသုံးပြုနိုင်ပါသည်။
        mascot: အဆင့်မြင့် ဝဘ်ပုံစံတွင်တွင် ရုပ်ပုံဖြင့်ဖော်ပြထားသည်။
        media_cache_retention_period: သတ်မှတ်ထားသောရက်များပြီးနောက် ဒေါင်းလုဒ်လုပ်ထားသော မီဒီယာဖိုင်များကို ဖျက်လိုက်ပါမည်။ တောင်းဆိုပါက ပြန်လည်ဒေါင်းလုဒ် လုပ်ခွင့်ရှိသည်။
        profile_directory: ပရိုဖိုင်လမ်းညွှန်တွင် ရှာဖွေ‌နိုင်သည့်အသုံးပြုသူအားလုံးကို စာရင်းပြုစုထားသည်။
        site_contact_email: ဥပဒေရေးရာ သို့မဟုတ် အကူအညီ စုံစမ်းမေးမြန်းရန် လူများက သင့်ထံ မည်သို့ဆက်သွယ်နိုင်မည်နည်း။
        site_contact_username: Mastodon တွင် အခြားသူများက သင့်ကို မည်သို့သိရှိနိုင်မည်နည်း။
        site_extended_description: ဝင်ရောက်ကြည့်ရှုသူများနှင့် အသုံးပြုသူများအတွက် အသုံးဝင်မည့် နောက်ထပ်အချက်အလက်များကို Markdown စာကြောင်းများဖြင့် ရေးသားနိုင်သည်။
        site_short_description: သင်၏ဆာဗာအား သိသားထင်ရှားစွာ အမှတ်အသားပြုနိုင်မည့် အကျဉ်းရုံးဖော်ပြချက်။ မည်သူမှ ဆာဗာအား ထိန်းကြောင်းလည်ပတ်နေသည်၊ မည်သူ့အတွက် ဖြစ်သည်?
        site_terms: သင့်ကိုယ်ပိုင် ကိုယ်ရေးအချက်အလက်မူဝါဒကို အသုံးပြုပါ သို့မဟုတ် မူလသတ်မှတ်ချက်ကို အသုံးပြုရန်အတွက် ကွက်လပ်ထားပါ။ Markdown စာများဖြင့် ရေးသားနိုင်သည်။
        site_title: ဒိုမိန်းအမည်မှတပါး သင့်ဆာဗာကို လူများက မည်သို့သိရှိနိုင်မည်နည်း။
        status_page_url: ပြတ်တောက်နေစဉ်အတွင်း လူများက ဤဆာဗာအခြေအနေကို မြင်နိုင်မည့် စာမျက်နှာ URL
        theme: အကောင့်မှထွက်ပြီး အသုံးပြုသူအသစ်များနှင့် ဝင်ကြည့်မည့်သူများအတွက် မြင်ရမည့်ပုံစံ။
        thumbnail: သင့်ဆာဗာအချက်အလက်နှင့်အတူ အကြမ်းဖျင်းအားဖြင့် ၂:၁ ဖြင့် ပြသထားသောပုံတစ်ပုံ။
        timeline_preview: အကောင့်မှထွက်ထားသူများသည် ဆာဗာပေါ်ရှိ လတ်တလော အများမြင်ပို့စ်များကို ရှာဖွေကြည့်ရှုနိုင်မည်ဖြစ်သည်။
        trendable_by_default: ခေတ်စားနေသော အကြောင်းအရာများ၏ ကိုယ်တိုင်သုံးသပ်ချက်ကို ကျော်ပါ။ နောက်ပိုင်းတွင် အချက်အလက်တစ်ခုချင်းစီကို ခေတ်စားနေသောအကြောင်းအရာများကဏ္ဍမှ ဖယ်ရှားနိုင်ပါသေးသည်။
        trends: လက်ရှိခေတ်စားနေသာပို့စ်များ၊ hashtag များနှင့် သတင်းဇာတ်လမ်းများကို သင့်ဆာဗာပေါ်တွင် တွေ့မြင်နိုင်ပါမည်။
        trends_as_landing_page: ဤဆာဗာဖော်ပြချက်အစား အကောင့်မှ ထွက်ထားသူများနှင့် ဝင်ရောက်ကြည့်ရှုသူများအတွက် ခေတ်စားနေသော အကြောင်းအရာများကို ပြသပါ။ ခေတ်စားနေသောပို့စ်များကို ဖွင့်ထားရန် လိုအပ်သည်။
      form_challenge:


@@ 67,7 96,9 @@ my:
      invite_request:
        text: "၎င်းသည် သင့်အက်ပလီကေးရှင်းကို ပြန်လည်သုံးသပ်ရန်အတွက် ကူညီပေးနိုင်ပါသည်"
      ip_block:
        comment: ရွေးချယ်ခွင့်ရှိသည်။ ဤစည်းမျဉ်းကို ဘာကြောင့်ထည့်ခဲ့တာလဲဆိုတာ သတိရပါ။
        comment: ဤစည်းမျဉ်း ဘာကြောင့်ထည့်ခဲ့သည်အား သတိရရန်။
        expires_in: အိုင်ပီလိပ်စာများမှာ အကန့်အသတ်ရှိသည့် အရင်းအမြစ်ဖြစ်သည်။ တခါတရံ လိပ်စာများအား မျှဝေသုံးစွဲကြသည်။ အခါအားလျှော်စွာ လက်လွှဲသုံးစွဲမှုများလည်း ရှီတတ်သည်။ ထို့အတွက်ကြောင့် အကန့်အသတ်မဲ့ အိုင်ပီကန့်သတ်ထိန်းချုပ်မှု လုပ်ဆောင်ခြင်းကို အားမပေးပါ။
        ip: IPv4 သို့မဟုတ် IPv6 လိပ်စာကို ထည့်ပါ။ CIDR syntax ကို အသုံးပြု၍ အတိုင်းအတာတစ်ခုလုံးကို ပိတ်ဆို့နိုင်သည်။ ကိုယ်တိုင် လော့ခ်မချမိစေရန် သတိထားပါ။
        severities:
          no_access: အရင်းအမြစ်များအားလုံးသို့ ဝင်ရောက်ခွင့်ကို ပိတ်ပါ
          sign_up_block: အကောင့်အသစ်များ မဖွင့်နိုင်တော့ပါ


@@ 88,6 119,7 @@ my:
        highlighted: ယင်းက အခန်းကဏ္ဍကို အများမြင်အောင် ဖွင့်ပေးထားသည်။
        name: အကယ်၍ အခန်းကဏ္ဍကို သင်္ကေတတစ်ခုအဖြစ်ပြသရန် သတ်မှတ်ထားပါက အခန်းကဏ္ဍကို အများမြင်မည့်အမည်
        permissions_as_keys: ဤအခန်းကဏ္ဍဖြင့် အသုံးပြုသူများသာ အသုံးပြုခွင့်ရှိပါမည်...
        position: အခန်းကဏ္ဍအဆင့်မြင့်သူအနေဖြင့် အချို့သောအခြေအနေများတွင် ပဋိပက္ခများကို ဖြေရှင်းနိုင်သည်။ အချို့လုပ်ဆောင်ချက်များမှာ အဆင့်နိမ့်အခန်းကဏ္ဍများတွင်သာ လုပ်ဆောင်နိုင်သည်။
      webhook:
        events: ပို့မည့်အကြောင်းအရာများကို ရွေးချယ်ပါ
        url: အကြောင်းအရာများကို ဘယ်ကို ပို့မလဲ။


@@ 109,6 141,7 @@ my:
        text: စိတ်ကြိုက်သတိပေးချက်
        type: လုပ်ဆောင်ချက်
        types:
          disable: ရပ်တန့်
          none: သတိပေးချက်ပေးပို့ပါ
          sensitive: သတိထားရသော
          silence: ကန့်သတ်


@@ 117,8 150,11 @@ my:
      announcement:
        all_day: တစ်နေ့တာလုပ်ငန်းစဉ်
        ends_at: အကြောင်းအရာ၏အဆုံး
        scheduled_at: ထုတ်ပြန်မည့်အချိန်
        starts_at: အကြောင်းအရာ၏အစ
        text: ကြေညာချက်
      appeal:
        text: ဆုံးဖြတ်ချက် ပြောင်းပြန်ချသင့်သောအကြောင်းရင်းအား ရှင်းပြပါ။
      defaults:
        autofollow: သင့်အကောင့်စောင့်ကြည့်ရန် ဖိတ်ခေါ်ပါ
        avatar: ကိုယ်စားပြုရုပ်ပုံ


@@ 133,8 169,10 @@ my:
        display_name: ဖော်ပြမည့်အမည်
        email: အီးမေးလ်လိပ်စာ
        expires_in: သက်တမ်းကုန်ဆုံးမည့်ရက်
        fields: ပရိုဖိုင်မီတာဒေတာ
        header: မျက်နှာဖုံးပုံ
        honeypot: "%{label} (မဖြည့်ပါနှင့်)"
        inbox_url: ထပ်ဆင့်ဝင်စာ၏ URL
        locale: ဘာသာစကား
        locked: စောင့်ကြည့်တောင်းဆိုမှုများ လိုအပ်သည်
        max_uses: အများဆုံးအသုံးပြုမှုအရေအတွက်


@@ 148,10 186,12 @@ my:
        setting_always_send_emails: အီးမေးလ်သတိပေးချက်များကို အမြဲပို့ပါ
        setting_auto_play_gif: ကာတွန်း GIF များကို အလိုအလျောက်ဖွင့်ပါ
        setting_boost_modal: Boost မလုပ်မီ အတည်ပြုချက်ပြပါ
        setting_crop_images: အကျယ်မချဲ့ထားသော စာစုများတွင် ပုံများကို ၁၆း၉ အရွယ် ဖြတ်တောက်ပါ။
        setting_default_language: ပို့စ်တင်မည့်ဘာသာစကား
        setting_default_privacy: ပို့စ်ကို ဘယ်သူမြင်နိုင်မလဲ
        setting_default_sensitive: သတိထားရသောမီဒီယာအဖြစ် အမြဲအမှတ်အသားပြုပါ
        setting_delete_modal: ပို့စ်တစ်ခုမဖျက်မီ အတည်ပြုချက်ပြပါ။
        setting_disable_swiping: ပွတ်ဆွဲခြင်းများကို ပိတ်ပါ
        setting_display_media: မီဒီယာဖော်ပြမှု
        setting_display_media_default: မူလသတ်မှတ်ချက်
        setting_display_media_hide_all: အားလုံးကို ဖျောက်ပါ


@@ 159,12 199,15 @@ my:
        setting_expand_spoilers: အကြောင်းအရာသတိပေးချက်များဖြင့် အမှတ်အသားပြုထားသော ပို့စ်များကို အမြဲချဲ့ပါ
        setting_hide_network: သင့် Social Graph ကို ဖျောက်ထားပါ
        setting_noindex: ရှာဖွေရေးအညွှန်းမှ ဖယ်ထုတ်ပါ
        setting_reduce_motion: ကာတွန်းများတွင် လှုပ်ရှားမှုကို လျှော့ချပါ
        setting_show_application: ပို့စ်များ ပေးပို့ရာတွင် အသုံးပြုသည့် အက်ပလီကေးရှင်း
        setting_system_font_ui: စနစ်ရှိ နဂိုမူလ စာလုံးပုံစံကို အသုံးပြုပါ
        setting_theme: ဆိုက်အပြင်အဆင်
        setting_trends: ယနေ့ ရေပန်းစားသည်များကို ပြပါ
        setting_unfollow_modal: တစ်စုံတစ်ဦးကို မစောင့်ကြည့်မီ အတည်ပြုချက် ဒိုင်ယာလော့ခ်ကို ပြပါ
        setting_use_blurhash: ဖုံးကွယ်ထားသော ရုပ်ပုံ၊ဗီဒီယိုများအား အရောင်စုံ ရောင်ပြေးအနေနှင့် ပြသပါ။
        setting_use_pending_items: အနှေးပြကွက်
        severity: ပြင်းထန်မှု
        sign_in_token_attempt: လုံခြုံရေးကုဒ်
        title: ခေါင်းစဥ်
        type: ထည့်သွင်းမှုအမျိုးအစား


@@ 180,6 223,7 @@ my:
          hide: လုံးဝဖျောက်ထားပါ
          warn: သတိပေးချက်ဖြင့် ဖျောက်ပါ
      form_admin_settings:
        activity_api_enabled: API ရှိ အသုံးပြုသူလုပ်ဆောင်ချက်စာရင်းများကို ထုတ်ပြန်ပါ
        backups_retention_period: အသုံးပြုသူ၏ မှတ်တမ်းကာလ
        bootstrap_timeline_accounts: ဤအကောင့်များကို အသုံးပြုသူအသစ်များအတွက် အကြံပြုပေးပါ
        closed_registrations_message: အကောင့်ဖွင့်ခြင်းများ မရတော့သောအခါ စိတ်ကြိုက်မက်ဆေ့ချ်ပို့ခြင်း


@@ 205,6 249,7 @@ my:
        timeline_preview: အများမြင်စာမျက်နှာများသို့ အထောက်အထားမရှိဘဲ ဝင်ရောက်ခွင့်ပြုပါ
        trendable_by_default: ကြိုမသုံးသပ်ဘဲ ခေတ်စားနေသောအကြောင်းအရာများကို ခွင့်ပြုပါ
        trends: လက်ရှိခေတ်စားနေမှုများကိုပြပါ
        trends_as_landing_page: ခေတ်စားနေသောပို့စ်များကို landing စာမျက်နှာအဖြစ် အသုံးပြုပါ
      interactions:
        must_be_follower: စောင့်ကြည့်မနေသူများထံမှ အသိပေးချက်များကို ပိတ်ပါ
        must_be_following: သင် စောင့်ကြည့်မထားသူများထံမှ အသိပေးချက်များကို ပိတ်ပါ

M config/locales/simple_form.pt-BR.yml => config/locales/simple_form.pt-BR.yml +2 -0
@@ 91,11 91,13 @@ pt-BR:
        site_short_description: Uma curta descrição para ajudar unicamente a identificar a sua instância. Quem está o administrando, e para quem é direcionado?
        site_terms: Use a sua própria política de privacidade ou deixe em branco para usar o padrão. Pode ser estruturado com o formato Markdown.
        site_title: Como as pessoas podem se referir ao seu servidor além do nome do domínio.
        status_page_url: URL de uma página onde as pessoas podem ver o status deste servidor durante uma interrupção
        theme: Tema que visitantes e novos usuários veem.
        thumbnail: Uma imagem de aproximadamente 2:1 exibida ao lado da informação de sua instância.
        timeline_preview: Visitantes conseguirão navegar pelas postagens públicas mais recentes disponíveis na instância.
        trendable_by_default: Pular a revisão manual do conteúdo em tendência. Itens individuais ainda poderão ser removidos das tendências após a sua exibição.
        trends: Tendências mostram quais publicações, hashtags e notícias estão ganhando destaque na sua instância.
        trends_as_landing_page: Mostrar conteúdo de tendências para usuários deslogados e visitantes em vez de uma descrição deste servidor. Requer que as tendências sejam ativadas.
      form_challenge:
        current_password: Você está entrando em uma área segura
      imports:

M config/locales/simple_form.th.yml => config/locales/simple_form.th.yml +1 -1
@@ 95,7 95,7 @@ th:
        theme: ชุดรูปแบบที่ผู้เยี่ยมชมที่ออกจากระบบและผู้ใช้ใหม่เห็น
        thumbnail: แสดงภาพ 2:1 โดยประมาณควบคู่ไปกับข้อมูลเซิร์ฟเวอร์ของคุณ
        timeline_preview: ผู้เยี่ยมชมที่ออกจากระบบจะสามารถเรียกดูโพสต์สาธารณะล่าสุดที่มีในเซิร์ฟเวอร์
        trendable_by_default: ข้ามการตรวจทานเนื้อหาที่กำลังนิยมด้วยตนเอง ยังคงสามารถเอารายการแต่ละรายการออกจากแนวโน้มได้หลังเกิดเหตุ
        trendable_by_default: ข้ามการตรวจทานเนื้อหาที่กำลังนิยมด้วยตนเอง ยังคงสามารถเอารายการแต่ละรายการออกจากแนวโน้มได้หลังจากเกิดเหตุ
        trends: แนวโน้มแสดงว่าโพสต์, แฮชแท็ก และเรื่องข่าวใดกำลังได้รับความสนใจในเซิร์ฟเวอร์ของคุณ
        trends_as_landing_page: แสดงเนื้อหาที่กำลังนิยมแก่ผู้ใช้และผู้เยี่ยมชมที่ออกจากระบบแทนที่จะเป็นคำอธิบายของเซิร์ฟเวอร์นี้ ต้องมีการเปิดใช้งานแนวโน้ม
      form_challenge:

M config/locales/simple_form.zh-TW.yml => config/locales/simple_form.zh-TW.yml +2 -2
@@ 59,12 59,12 @@ zh-TW:
        setting_show_application: 您用來發嘟文的應用程式將會在您嘟文的詳細檢視顯示
        setting_use_blurhash: 彩色漸層圖樣是基於隱藏媒體內容顏色產生,所有細節會變得模糊
        setting_use_pending_items: 關閉自動捲動更新,時間軸只會在點擊後更新
        username: 您的使用者名稱將在 %{domain} 是獨一無二的
        username: 您的使用者名稱將於 %{domain} 是獨一無二的
        whole_word: 如果關鍵字或詞組僅有字母與數字,則其將只在符合整個單字的時候才會套用
      domain_allow:
        domain: 此網域將能夠攫取本站資料,而自該網域發出的資料也會於本站處理和留存。
      email_domain_block:
        domain: 這可以是顯示在電子郵件中的網域名稱,或是其使用的 MX 紀錄。其將在註冊時檢查。
        domain: 這可以是顯示在電子郵件中的網域名稱,或是其使用的 MX 紀錄。其將於註冊時檢查。
        with_dns_records: Mastodon 會嘗試解析所給網域的 DNS 記錄,解析結果一致者將一併封鎖
      featured_tag:
        name: 這些是您最近使用的一些主題標籤:

M config/locales/sk.yml => config/locales/sk.yml +12 -1
@@ 231,6 231,14 @@ sk:
        destroy_status_html: "%{name} zmazal/a príspevok od %{target}"
        memorialize_account_html: "%{name} zmenil/a účet %{target} na pamätnú stránku"
        reject_appeal_html: "%{name} zamietol/la námietku moderovacieho rozhodnutia od %{target}"
        reopen_report_html: "%{name} znovu otvoril/a nahlásenie %{target}"
        resend_user_html: "%{name} znovu odoslal/a potvrdzovací email pre %{target}"
        reset_password_user_html: "%{name} resetoval/a heslo používateľa %{target}"
        resolve_report_html: "%{name} vyriešil/a nahlásenie %{target}"
        sensitive_account_html: "%{name} označil médium od %{target} za chúlostivé"
        silence_account_html: "%{name} obmedzil/a účet %{target}"
        suspend_account_html: "%{name} zablokoval/a účet používateľa %{target}"
        unassigned_report_html: "%{name} odobral/a report od %{target}"
      deleted_account: zmazaný účet
      empty: Žiadne záznamy nenájdené.
      filter_by_action: Filtruj podľa úkonu


@@ 587,6 595,10 @@ sk:
      rules_check:
        action: Spravuj serverové pravidlá
        message_html: Neurčil/a si žiadne serverové pravidlá.
      upload_check_privacy_error:
        action: Pozri tu pre viac informácií
      upload_check_privacy_error_object_storage:
        action: Pozri tu pre viac informácií
    tags:
      review: Prehodnoť stav
      updated_msg: Nastavenia haštagov boli úspešne aktualizované


@@ 1153,5 1165,4 @@ sk:
    seamless_external_login: Si prihlásená/ý cez externú službu, takže nastavenia hesla a emailu ti niesú prístupné.
    signed_in_as: 'Prihlásená/ý ako:'
  verification:
    explanation_html: 'Môžeš sa <strong>overiť ako majiteľ odkazov v metadátach tvojho profilu</strong>. Na to ale musí odkazovaná stránka obsahovať odkaz späť na tvoj Mastodon profil. Tento spätný odkaz <strong>musí</strong> mať prívlastok <code>rel="me"</code>. Na texte odkazu nezáleží. Tu je príklad:'
    verification: Overenie

M config/locales/sl.yml => config/locales/sl.yml +8 -1
@@ 840,6 840,12 @@ sl:
        message_html: Nobenih pravil strežnika niste določili.
      sidekiq_process_check:
        message_html: Noben proces Sidekiq ne poteka za %{value} vrst. Preglejte svojo prilagoditev Sidekiq
      upload_check_privacy_error:
        action: Preverite tukaj za več informacij
        message_html: "<strong>Vaš spletni strežnik je napačno nastavljen. Zasebnost vaših uporabnikov je izpostavljena tveganjem.</strong>"
      upload_check_privacy_error_object_storage:
        action: Preverite tukaj za več informacij
        message_html: "<strong>Vaša predmetna shramba je napačno nastavljena. Zasebnost vaših uporabnikov je izpostavljena tveganjem.</strong>"
    tags:
      review: Stanje pregleda
      updated_msg: Nastavitve ključnikov uspešno posodobljene


@@ 1748,12 1754,13 @@ sl:
      title: Dobrodošli, %{name}!
  users:
    follow_limit_reached: Ne morete spremljati več kot %{limit} ljudi
    go_to_sso_account_settings: Pojdite na nastavitve svojega računa ponudnika identitete
    invalid_otp_token: Neveljavna dvofaktorska koda
    otp_lost_help_html: Če ste izgubili dostop do obeh, stopite v stik z %{email}
    seamless_external_login: Prijavljeni ste prek zunanje storitve, tako da nastavitve gesla in e-pošte niso na voljo.
    signed_in_as: 'Vpisani kot:'
  verification:
    explanation_html: '<strong>V metapodatkih svojega profila se lahko potrdite kot lastnik povezav</strong>. Za to mora povezano spletno mesto vsebovati povezavo do vašega Mastodon profila. Povezava <strong>mora</strong> imeti atribut <code>el="me"</code>. Vsebina besedila povezave ni pomembna. Tukaj je primer:'
    explanation_html: '<strong>V metapodatkih svojega profila se lahko potrdite kot lastnik povezav</strong>. Za to mora povezano spletno mesto vsebovati povezavo do vašega profila Mastodon. Po dodajanju povezave se boste morda morali vrniti sem in ponovno shraniti svoj profil, da bo overjanje učinkovalo. Povezava <strong>mora</strong> imeti atribut <code>el="me"</code>. Vsebina besedila povezave ni pomembna. Tukaj je primer:'
    verification: Potrditev
  webauthn_credentials:
    add: Dodaj nov varnostni ključ

M config/locales/sq.yml => config/locales/sq.yml +8 -1
@@ 809,6 809,12 @@ sq:
        message_html: S’keni përcaktuar ndonjë rregull shërbyesi.
      sidekiq_process_check:
        message_html: S’ka proces Sidekiq në punë për %{value} radhë. Ju lutemi, shqyrtoni formësimin tuaj për Sidekiq-un
      upload_check_privacy_error:
        action: Për më tepër hollësi, shihni këtu
        message_html: "<strong>Shërbyesi juaj është formësuar keq. Privatësia e përdoruesve tuaj është në rrezik.</strong>"
      upload_check_privacy_error_object_storage:
        action: Për më tepër hollësi, shihni këtu
        message_html: "<strong>Depozita juaj e objekteve është e formësuar keq. Privatësia e përdoruesve tuaj është në rrezik.</strong>"
    tags:
      review: Gjendje rishikimi
      updated_msg: Rregullimet për hashtag-ët u përditësuan me sukses


@@ 1678,12 1684,13 @@ sq:
      title: Mirë se vini, %{name}!
  users:
    follow_limit_reached: S’mund të ndiqni më tepër se %{limit} persona
    go_to_sso_account_settings: Kaloni te rregullime llogarie te shërbimi juaj i identitetit
    invalid_otp_token: Kod dyfaktorësh i pavlefshëm
    otp_lost_help_html: Nëse humbët hyrjen te të dy, mund të lidheni me %{email}
    seamless_external_login: Jeni futur përmes një shërbimi të jashtëm, ndaj s’ka rregullime fjalëkalimi dhe email.
    signed_in_as: 'I futur si:'
  verification:
    explanation_html: 'Mundeni <strong>të verifikoni veten si i zoti i lidhjeve te tejtëdhënat e profilit tuaj</strong>. Për këtë, sajti i lidhur duhet të përmbajë një lidhje për te profili juaj Mastodon. Lidhje për te ajo <strong>duhet</strong> të ketë një atribut <code>rel="me"</code>. Lënda tekst e lidhjes nuk ngre peshë. Ja një shembull:'
    explanation_html: 'Mundeni të <strong>verifikoni veten si i zoti i lidhjeve që nga tejtëdhëna të profilit tuaj</strong>. Për këtë, sajti i lidhur duhet të përmbajë një lidhje që shpie te profili juaj Mastodon. Pas shtimit të lidhjes mund t’ju duhet të ktheheni këtu dhe të riruani profilin tuaj, që verifikimi të ketë efekt. Lidhja e kthimit <strong>duhet</strong> të përmbajë një atribut <code>rel="me"</code>. Teksi i lidhjes s’ka rëndësi. Ja një shembull:'
    verification: Verifikim
  webauthn_credentials:
    add: Shtoni kyç të ri sigurie

M config/locales/sr-Latn.yml => config/locales/sr-Latn.yml +7 -1
@@ 826,6 826,12 @@ sr-Latn:
        message_html: Niste definisali nijedno pravilo servera.
      sidekiq_process_check:
        message_html: Nijedan Sidekiq proces nije pokrenut za red(ove) %{value}. Molimo Vas pregledajte svoju Sidekiq konfiguraciju
      upload_check_privacy_error:
        action: Proverite ovde za više informacija
        message_html: "<strong>Vaš veb server je pogrešno konfigurisan. Privatnost vaših korisnika je izložena riziku.</strong>"
      upload_check_privacy_error_object_storage:
        action: Proverite ovde za više informacija
        message_html: "<strong>Vaše skladište objekta je pogrešno konfigurisano. Privatnost vaših korisnika je izložena riziku.</strong>"
    tags:
      review: Pregledaj status
      updated_msg: Podešavanja heš oznaka uspešno ažurirana


@@ 1716,12 1722,12 @@ sr-Latn:
      title: Dobrodošli, %{name}!
  users:
    follow_limit_reached: Ne možete pratiti više od %{limit} ljudi
    go_to_sso_account_settings: Idite na podešavanja naloga svog dobavljača identiteta
    invalid_otp_token: Neispravni dvofaktorski kod
    otp_lost_help_html: Ako izgubite pristup za oba, možete stupiti u kontakt sa %{email}
    seamless_external_login: Prijavljeni ste putem spoljašnje usluge, tako da lozinka i podešavanja E-pošte nisu dostupni.
    signed_in_as: 'Prijavljen/a kao:'
  verification:
    explanation_html: 'Možete <strong>izvršiti proveru da ste Vi vlasnik veza na Vašem nalogu</strong>. Da bi to radilo, povezani veb sajt mora da sadrži vezu nazad ka Vašem Mastodon nalogu. Veza nazad <strong>mora</strong> da ima <code>rel="me"</code> atribut. Tekstuelni sadržaj veze nije bitan. Evo primera:'
    verification: Provera
  webauthn_credentials:
    add: Dodajte novi sigurnosni ključ

M config/locales/sr.yml => config/locales/sr.yml +8 -1
@@ 826,6 826,12 @@ sr:
        message_html: Нисте дефинисали ниједно правило сервера.
      sidekiq_process_check:
        message_html: Ниједан Sidekiq процес није покренут за ред(ове) %{value}. Молимо Вас прегледајте своју Sidekiq конфигурацију
      upload_check_privacy_error:
        action: Проверите овде за више информација
        message_html: "<strong>Ваш веб сервер је погрешно конфигурисан. Приватност ваших корисника је изложена ризику.</strong>"
      upload_check_privacy_error_object_storage:
        action: Проверите овде за више информација
        message_html: "<strong>Ваше складиште објекта је погрешно конфигурисано. Приватност ваших корисника је изложена ризику.</strong>"
    tags:
      review: Прегледај статус
      updated_msg: Подешавања хеш ознака успешно ажурирана


@@ 1716,12 1722,13 @@ sr:
      title: Добродошли, %{name}!
  users:
    follow_limit_reached: Не можете пратити више од %{limit} људи
    go_to_sso_account_settings: Идите на подешавања налога свог добављача идентитета
    invalid_otp_token: Неисправни двофакторски код
    otp_lost_help_html: Ако изгубите приступ за оба, можете ступити у контакт са %{email}
    seamless_external_login: Пријављени сте путем спољашње услуге, тако да лозинка и подешавања Е-поште нису доступни.
    signed_in_as: 'Пријављен/а као:'
  verification:
    explanation_html: 'Можете <strong>извршити проверу да сте Ви власник веза на Вашем налогу</strong>. Да би то радило, повезани веб сајт мора да садржи везу назад ка Вашем Мастодон налогу. Веза назад <strong>мора</strong> да има <code>rel="me"</code> атрибут. Текстуелни садржај везе није битан. Ево примера:'
    explanation_html: 'Можете да се <strong>верификујете као власник веза у метаподацима профила</strong>. За то је потребно да повезани веб сајт мора садржати везу до вашег Mastodon профила. Након што додате везу, можда ћете морати да се вратите овде и поново сачувате свој профил да би верификација ступила на снагу. Повратна веза <strong>мора</strong> имати атрибут <code>rel="me"</code>. Текстуални садржај везе није битан. Ево примера:'
    verification: Провера
  webauthn_credentials:
    add: Додајте нови сигурносни кључ

M config/locales/sv.yml => config/locales/sv.yml +7 -1
@@ 812,6 812,12 @@ sv:
        message_html: Du har inte definierat några serverregler.
      sidekiq_process_check:
        message_html: Ingen Sidekiq-process körs för kön/köerna %{value}. Vänligen kontrollera din Sidekiq-konfiguration
      upload_check_privacy_error:
        action: Kolla här för mer information
        message_html: "<strong>Din webbserver är felkonfigurerad. Sekretessen för dina användare är i fara.</strong>"
      upload_check_privacy_error_object_storage:
        action: Kolla här för mer information
        message_html: "<strong>Din objektlagring är felkonfigurerad. Sekretessen för dina användare är i riskzonen.</strong>"
    tags:
      review: Granskningsstatus
      updated_msg: Hashtagg-inställningarna har uppdaterats


@@ 1684,12 1690,12 @@ sv:
      title: Välkommen ombord, %{name}!
  users:
    follow_limit_reached: Du kan inte följa fler än %{limit} personer
    go_to_sso_account_settings: Gå till din identitetsleverantörs kontoinställningar
    invalid_otp_token: Ogiltig tvåfaktorskod
    otp_lost_help_html: Om du förlorat åtkomst till båda kan du komma i kontakt med %{email}
    seamless_external_login: Du är inloggad via en extern tjänst, inställningar för lösenord och e-post är därför inte tillgängliga.
    signed_in_as: 'Inloggad som:'
  verification:
    explanation_html: 'Du kan <strong>verifiera dig själv som ägare av länkar i din profilmetadata</strong>, genom att på den länkade webbplatsen även länka tillbaka till din Mastodon-profil. Länken tillbaka <strong>måste</strong> ha attributet <code>rel="me"</code>. Textinnehållet i länken spelar ingen roll. Här är ett exempel:'
    verification: Bekräftelse
  webauthn_credentials:
    add: Lägg till ny säkerhetsnyckel

M config/locales/th.yml => config/locales/th.yml +8 -1
@@ 798,6 798,12 @@ th:
        message_html: คุณไม่ได้กำหนดกฎของเซิร์ฟเวอร์ใด ๆ
      sidekiq_process_check:
        message_html: ไม่มีกระบวนการ Sidekiq ที่กำลังทำงานสำหรับคิว %{value} โปรดตรวจทานการกำหนดค่า Sidekiq ของคุณ
      upload_check_privacy_error:
        action: ตรวจสอบที่นี่สำหรับข้อมูลเพิ่มเติม
        message_html: "<strong>เว็บเซิร์ฟเวอร์ของคุณกำหนดค่าไม่ถูกต้อง ความเป็นส่วนตัวของผู้ใช้ของคุณตกอยู่ในความเสี่ยง</strong>"
      upload_check_privacy_error_object_storage:
        action: ตรวจสอบที่นี่สำหรับข้อมูลเพิ่มเติม
        message_html: "<strong>ที่เก็บข้อมูลวัตถุของคุณกำหนดค่าไม่ถูกต้อง ความเป็นส่วนตัวของผู้ใช้ของคุณตกอยู่ในความเสี่ยง</strong>"
    tags:
      review: สถานะการตรวจทาน
      updated_msg: อัปเดตการตั้งค่าแฮชแท็กสำเร็จ


@@ 1652,12 1658,13 @@ th:
      title: ยินดีต้อนรับ %{name}!
  users:
    follow_limit_reached: คุณไม่สามารถติดตามมากกว่า %{limit} คน
    go_to_sso_account_settings: ไปยังการตั้งค่าบัญชีของผู้ให้บริการข้อมูลประจำตัวของคุณ
    invalid_otp_token: รหัสสองปัจจัยไม่ถูกต้อง
    otp_lost_help_html: หากคุณสูญเสียการเข้าถึงทั้งสองอย่าง คุณสามารถติดต่อ %{email}
    seamless_external_login: คุณได้เข้าสู่ระบบผ่านบริการภายนอก ดังนั้นจึงไม่มีการตั้งค่ารหัสผ่านและอีเมล
    signed_in_as: 'ลงชื่อเข้าเป็น:'
  verification:
    explanation_html: 'คุณสามารถ <strong>ยืนยันตัวคุณเองว่าเป็นเจ้าของของลิงก์ในข้อมูลอภิพันธุ์โปรไฟล์ของคุณ</strong> สำหรับสิ่งนั้น เว็บไซต์ที่เชื่อมโยงต้องมีลิงก์ย้อนกลับไปยังโปรไฟล์ Mastodon ของคุณ ลิงก์ย้อนกลับ <strong>ต้อง</strong> มีแอตทริบิวต์ <code>rel="me"</code> เนื้อหาข้อความของลิงก์ไม่สำคัญ นี่คือตัวอย่าง:'
    explanation_html: 'คุณสามารถ <strong>ยืนยันตัวคุณเองว่าเป็นเจ้าของของลิงก์ในข้อมูลอภิพันธุ์โปรไฟล์ของคุณ</strong> สำหรับสิ่งนั้น เว็บไซต์ที่เชื่อมโยงต้องมีลิงก์ย้อนกลับไปยังโปรไฟล์ Mastodon ของคุณ หลังจากการเพิ่มลิงก์คุณอาจจำเป็นต้องกลับมาที่นี่และบันทึกโปรไฟล์ของคุณใหม่เพื่อให้การตรวจสอบมีผล ลิงก์ย้อนกลับ <strong>ต้อง</strong> มีแอตทริบิวต์ <code>rel="me"</code> เนื้อหาข้อความของลิงก์ไม่สำคัญ นี่คือตัวอย่าง:'
    verification: การตรวจสอบ
  webauthn_credentials:
    add: เพิ่มกุญแจความปลอดภัยใหม่

M config/locales/tr.yml => config/locales/tr.yml +8 -1
@@ 812,6 812,12 @@ tr:
        message_html: Herhangi bir sunucu kuralı belirlemediniz.
      sidekiq_process_check:
        message_html: "%{value} kuyruk(lar)ı için herhangi bir Sidekiq süreci çalışmıyor. Lütfen Sidekiq yapılandırmanızı gözden geçirin"
      upload_check_privacy_error:
        action: Daha fazla bilgi için buraya tıklayın
        message_html: "<strong>Web sunucunuz hatalı yapılandırılmış. Kullanıcılarınızın gizliliği tehlikede.</strong>"
      upload_check_privacy_error_object_storage:
        action: Daha fazla bilgi için buraya göz atın
        message_html: "<strong>Nesne depolamanız hatalı yapılandırılmış. Kullanıcılarınızın gizliliği tehlikede.</strong>"
    tags:
      review: Durumu gözden geçir
      updated_msg: Etiket ayarları başarıyla güncellendi


@@ 1684,12 1690,13 @@ tr:
      title: Gemiye hoşgeldin, %{name}!
  users:
    follow_limit_reached: "%{limit} kişiden daha fazlasını takip edemezsiniz"
    go_to_sso_account_settings: Kimlik sağlayıcı hesap ayarlarına gidin
    invalid_otp_token: Geçersiz iki adımlı doğrulama kodu
    otp_lost_help_html: Her ikisine de erişiminizi kaybettiyseniz, %{email} ile irtibata geçebilirsiniz
    seamless_external_login: Harici bir servis aracılığıyla oturum açtınız, bu nedenle parola ve e-posta ayarları mevcut değildir.
    signed_in_as: 'Oturum açtı:'
  verification:
    explanation_html: '<strong>Profil meta verisindeki bağlantıların sahibi olarak kendinizi doğrulayabilirsiniz</strong>. Bunun için, link verilen web sitesi Mastodon profilinize geri bir link içermelidir. Geri link bir <code>rel="me"</code> özelliğine sahip <strong>olmalıdır</strong>. Bağlantının metin içeriği önemli değildir. İşte bir örnek:'
    explanation_html: '<strong>Profil meta verisindeki bağlantıların sahibi olarak kendinizi doğrulayabilirsiniz</strong>. Bunun için, bağlantısı verilen web sitesi Mastodon profilinize bir bağlantı içermelidir. Doğrulamanın gerçekleşmesi için bağlantıyı ekledikten sonra buraya gelip profilinizi tekrar kaydetmelisiniz. Geri bağlantı bir <code>rel="me"</code> özelliğine sahip <strong>olmalıdır</strong>. Bağlantının metin içeriği önemli değildir. İşte bir örnek:'
    verification: Doğrulama
  webauthn_credentials:
    add: Yeni güvenlik anahtarı ekle

M config/locales/uk.yml => config/locales/uk.yml +8 -1
@@ 840,6 840,12 @@ uk:
        message_html: Ви не визначили будь-які правила сервера.
      sidekiq_process_check:
        message_html: Не працює процес Sidekiq для %{value} черги. Перегляньте конфігурації вашого Sidekiq
      upload_check_privacy_error:
        action: Перегляньте подробиці тут
        message_html: "<strong>Ваш вебсервер неправильно налаштований. Приватність ваших користувачів піддається ризику</strong>"
      upload_check_privacy_error_object_storage:
        action: Перегляньте подробиці тут
        message_html: "<strong>Ваше сховище об'єктів неправильно налаштоване. Приватність ваших користувачів піддається ризику</strong>"
    tags:
      review: Переглянути допис
      updated_msg: Параметри хештеґів успішно оновлені


@@ 1748,12 1754,13 @@ uk:
      title: Ласкаво просимо, %{name}!
  users:
    follow_limit_reached: Не можна слідкувати більш ніж за %{limit} людей
    go_to_sso_account_settings: Перейдіть до налаштувань облікового запису постачальника ідентифікації
    invalid_otp_token: Введено неправильний код
    otp_lost_help_html: Якщо ви втратили доступ до обох, ви можете отримати доступ з %{email}
    seamless_external_login: Ви увійшли за допомогою зовнішнього сервісу, тому налаштування паролю та електронної пошти недоступні.
    signed_in_as: 'Ви увійшли як:'
  verification:
    explanation_html: 'Ви можете <strong>підтвердити володіння посиланнями в метаданих вашого профілю</strong>. Для цього на зазначеному сайті повинне міститися посилання на ваш профіль Mastodon. Посилання <strong>повинне</strong> мати атрибут <code>rel="me"</code>. Текстовий вміст посилання не має значення. Ось приклад:'
    explanation_html: 'Ви можете <strong>підтвердити володіння посиланнями в метаданих вашого профілю</strong>. Для цього на зазначеному сайті повинен міститися посилання на ваш профіль Mastodon. Посилання <strong>повинне</strong> мати атрибут <code>rel="me"</code>. Текстовий вміст посилання не має значення. Ось приклад:'
    verification: Підтвердження
  webauthn_credentials:
    add: Додати новий ключ безпеки

M config/locales/vi.yml => config/locales/vi.yml +7 -0
@@ 798,6 798,12 @@ vi:
        message_html: Bạn chưa cập nhật nội quy máy chủ.
      sidekiq_process_check:
        message_html: Sidekiq không hoạt động khi truy vấn %{value}. Hãy kiểm tra lại cấu hình Sidekiq
      upload_check_privacy_error:
        action: Nhấn vào đây để biết thêm thông tin
        message_html: "<strong>Máy chủ web của bạn bị cấu hình sai. Có nguy cơ ảnh hưởng bảo mật của người dùng.</strong>"
      upload_check_privacy_error_object_storage:
        action: Nhấn vào đây để biết thêm thông tin
        message_html: "<strong>Lưu trữ đối tượng của bạn bị cấu hình sai. Có nguy cơ ảnh hưởng bảo mật của người dùng.</strong>"
    tags:
      review: Phê duyệt
      updated_msg: Hashtag đã được cập nhật thành công


@@ 1652,6 1658,7 @@ vi:
      title: Xin chào %{name}!
  users:
    follow_limit_reached: Bạn chỉ có thể theo dõi tối đa %{limit} người
    go_to_sso_account_settings: Thiết lập tài khoản nhà cung cấp danh tính
    invalid_otp_token: Mã xác minh 2 bước không hợp lệ
    otp_lost_help_html: Nếu bạn mất quyền truy cập vào cả hai, bạn có thể đăng nhập bằng %{email}
    seamless_external_login: Bạn đã đăng nhập thông qua một dịch vụ bên ngoài, vì vậy mật khẩu và email không khả dụng.

M config/locales/zh-CN.yml => config/locales/zh-CN.yml +8 -1
@@ 798,6 798,12 @@ zh-CN:
        message_html: 你没有定义任何服务器规则。
      sidekiq_process_check:
        message_html: "%{value} 队列未运行任何 Sidekiq 进程。请检查你的 Sidekiq 配置"
      upload_check_privacy_error:
        action: 点击这里查看更多信息
        message_html: "<strong>您的网站服务器配置错误,您用户的隐私处于危险中。</strong>"
      upload_check_privacy_error_object_storage:
        action: 点击这里查看更多信息
        message_html: "<strong>您的对象存储空间配置错误,您用户的隐私处于危险中。</strong>"
    tags:
      review: 审核状态
      updated_msg: 话题标签设置更新成功


@@ 1652,12 1658,13 @@ zh-CN:
      title: "%{name},欢迎你的加入!"
  users:
    follow_limit_reached: 你不能关注超过 %{limit} 个人
    go_to_sso_account_settings: 转到您的身份提供商进行账户设置
    invalid_otp_token: 输入的双重认证代码无效
    otp_lost_help_html: 如果你不慎丢失了所有的代码,请联系 %{email} 寻求帮助
    seamless_external_login: 因为你是通过外部服务登录的,所以密码和电子邮件地址设置都不可用。
    signed_in_as: 当前登录的账户:
  verification:
    explanation_html: 你可以 <strong>验证自己是个人资料元数据中的某个链接的所有者</strong>。 为此,被链接网站必须包含一个到你的 Mastodon 主页的链接。链接中 <strong>必须</strong> 包括 <code>rel="me"</code> 属性。链接的文本内容可以随意填写。例如:
    explanation_html: 您可以 <strong>验证自己是个人资料元数据中的链接的所有者</strong> 。为此,链接的网站必须包含返回到您的 Mastodon 个人资料的链接。添加链接后,您可能需要回到这里并重新保存个人资料以使验证生效。 <strong>必须</strong> 在返回链接上使用 <code>rel="me"</code> 属性。 链接的文本内容无关紧要。以下是一个示例:
    verification: 验证
  webauthn_credentials:
    add: 添加新的安全密钥

M config/locales/zh-HK.yml => config/locales/zh-HK.yml +0 -1
@@ 1652,7 1652,6 @@ zh-HK:
    seamless_external_login: 因為你正在使用第三方服務登入,所以不能設定密碼和電郵。
    signed_in_as: 目前登入的帳戶:
  verification:
    explanation_html: 你可以<strong>認證個人資料頁面的元數據 (Metadata) 連結是屬於你的</strong>。要認證,那些連結的目的地網站必須有一條回到你 Mastodon 個人頁面的連結,而且連結<strong>必須</strong>具有<code>rel="me"</code>屬性。連結的文字內容都不會影響認證。這裏有一個例子:
    verification: 驗證
  webauthn_credentials:
    add: 新增安全密鑰裝置

M config/locales/zh-TW.yml => config/locales/zh-TW.yml +11 -4
@@ 800,6 800,12 @@ zh-TW:
        message_html: 您尚未定義任何伺服器規則。
      sidekiq_process_check:
        message_html: 沒有佇列 %{value} 的 Sidekiq 行程,請檢查您的 Sidekiq 設定組態
      upload_check_privacy_error:
        action: 檢查這裡以取得更多資訊
        message_html: "<strong>您的網頁伺服器設定錯誤。您的使用者隱私正暴露於風險之中。</strong>"
      upload_check_privacy_error_object_storage:
        action: 檢查這裡以取得更多資訊
        message_html: "<strong>您的物件資料儲存空間 (object storage) 設定錯誤。您的使用者隱私正暴露於風險之中。</strong>"
    tags:
      review: 審核嘟文
      updated_msg: 成功更新主題標籤設定


@@ 1007,7 1013,7 @@ zh-TW:
      account_status: 帳號狀態
      confirming: 等待電子郵件確認完成。
      functional: 您的帳號可以正常使用了。
      pending: 管管們正在處理您的申請,這可能需要一點時間處理。我們將在申請通過後以電子郵件方式通知您。
      pending: 管管們正在處理您的申請,這可能需要一點時間處理。我們將於申請通過後以電子郵件方式通知您。
      redirecting_to: 您的帳號因目前重定向至 %{acct} 而被停用。
      view_strikes: 檢視針對您帳號過去的警示
    too_fast: 送出表單的速度太快跟不上,請稍後再試。


@@ 1269,7 1275,7 @@ zh-TW:
    incoming_migrations_html: 要從其他帳號移動到此帳號的話,首先您必須<a href="%{path}">建立帳號別名</a>。
    moved_msg: 您的帳號正被重新導向到 %{acct},您的跟隨者也會同步轉移至該帳號。
    not_redirecting: 您的帳號目前尚未重新導向到任何其他帳號。
    on_cooldown: 您最近已轉移過您的帳號。此功能將在 %{count} 天後可再度使用。
    on_cooldown: 您最近已轉移過您的帳號。此功能將於 %{count} 天後可再度使用。
    past_migrations: 以往的轉移紀錄
    proceed_with_move: 移動跟隨者
    redirected_msg: 您的帳號現在指向 %{acct}


@@ 1654,12 1660,13 @@ zh-TW:
      title: "%{name} 誠摯歡迎您的加入!"
  users:
    follow_limit_reached: 您無法跟隨多於 %{limit} 個人
    go_to_sso_account_settings: 前往您的身分提供商 (identity provider) 之帳號設定
    invalid_otp_token: 兩階段認證碼不正確
    otp_lost_help_html: 如果您無法訪問這兩者,可以透過 %{email} 與我們聯繫
    seamless_external_login: 由於您是由外部系統登入,所以不能設定密碼與電子郵件。
    signed_in_as: 目前登入的帳號:
  verification:
    explanation_html: 您在 Mastodon 個人檔案頁上所列出的連結,可以用此方式<strong>驗證您確實掌控該連結網頁的內容</strong>。您可以在連結的網頁上加上一個連回 Mastodon 個人檔案頁面的連結,該連結的原始碼 <strong>必須</strong>包含<code>rel="me"</code>屬性。連結的顯示文字可自由發揮,以下為範例:
    explanation_html: 您可以<strong>透過以個人檔案頁上列出連結的方式,驗證您確實掌控該連結網頁的內容</strong>。為此,您可以在連結的網頁中加入一個連回 Mastodon 個人檔案頁面的連結。新增此連結之後,您可能要回到這裡並重新儲存您的個人檔案以使該驗證生效。該連結的原始碼 <strong>必須</strong>包含<code>rel="me"</code>屬性。連結的顯示文字則可自由發揮,以下為範例:
    verification: 驗證連結
  webauthn_credentials:
    add: 新增安全金鑰


@@ 1668,7 1675,7 @@ zh-TW:
      success: 您已成功加入安全金鑰。
    delete: 刪除
    delete_confirmation: 您確定要移除這把安全金鑰嗎?
    description_html: 如果您啟用<strong>安全金鑰驗證</strong>的話,您將在登入時需要使用其中一把安全金鑰。
    description_html: 如果您啟用<strong>安全金鑰驗證</strong>的話,您將於登入時需要使用其中一把安全金鑰。
    destroy:
      error: 移除安全金鑰時出現了問題。請再試一次。
      success: 您已成功將安全金鑰移除。

M config/settings.yml => config/settings.yml +1 -39
@@ 12,55 12,17 @@ defaults: &defaults
  registrations_mode: 'open'
  profile_directory: true
  closed_registrations_message: ''
  open_deletion: true
  timeline_preview: false
  min_invite_role: 'admin'
  show_staff_badge: true
  default_sensitive: false
  unfollow_modal: false
  boost_modal: false
  favourite_modal: false
  delete_modal: true
  auto_play_gif: false
  display_media: 'default'
  expand_spoilers: false
  preview_sensitive_media: false
  reduce_motion: false
  disable_swiping: false
  show_application: false
  system_font_ui: false
  system_emoji_font: false
  noindex: false
  hide_followers_count: false
  flavour: 'glitch'
  skin: 'default'
  aggregate_reblogs: true
  advanced_layout: false
  use_blurhash: true
  use_pending_items: false
  trends: true
  trends_as_landing_page: true
  trendable_by_default: false
  trending_status_cw: true
  crop_images: true
  notification_emails:
    follow: true
    reblog: false
    favourite: false
    mention: true
    follow_request: true
    digest: true
    report: true
    pending_account: true
    trending_tag: true
    trending_link: false
    trending_status: false
    appeal: true
  always_send_emails: false
  interactions:
    must_be_follower: false
    must_be_following: false
    must_be_following_dm: false
  hide_followers_count: false
  reserved_usernames:
    - admin
    - support

M db/migrate/20170918125918_ids_to_bigints.rb => db/migrate/20170918125918_ids_to_bigints.rb +8 -18
@@ 1,7 1,9 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
require_relative '../../lib/mastodon/migration_helpers'
require_relative '../../lib/mastodon/migration_warning'

class IdsToBigints < ActiveRecord::Migration[5.1]
  include Mastodon::MigrationHelpers
  include Mastodon::MigrationWarning

  disable_ddl_transaction!



@@ 69,24 71,12 @@ class IdsToBigints < ActiveRecord::Migration[5.1]
    ]
    included_columns << [:deprecated_preview_cards, :id] if table_exists?(:deprecated_preview_cards)

    # Print out a warning that this will probably take a while.
    if $stdout.isatty
      say ''
      say 'WARNING: This migration may take a *long* time for large instances'
      say 'It will *not* lock tables for any significant time, but it may run'
      say 'for a very long time. We will pause for 10 seconds to allow you to'
      say 'interrupt this migration if you are not ready.'
      say ''
      say 'This migration has some sections that can be safely interrupted'
      say 'and restarted later, and will tell you when those are occurring.'
      say ''
      say 'For more information, see https://github.com/mastodon/mastodon/pull/5088'
    migration_duration_warning(<<~EXPLANATION)
      This migration has some sections that can be safely interrupted
      and restarted later, and will tell you when those are occurring.

      10.downto(1) do |i|
        say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
        sleep 1
      end
    end
      For more information, see https://github.com/mastodon/mastodon/pull/5088
    EXPLANATION

    tables = included_columns.map(&:first).uniq
    table_sizes = {}

M db/migrate/20170927215609_add_description_to_media_attachments.rb => db/migrate/20170927215609_add_description_to_media_attachments.rb +1 -1
@@ 1,4 1,4 @@
class AddDescriptionToMediaAttachments < ActiveRecord::Migration[5.1]
class AddDescriptionToMediaAttachments < ActiveRecord::Migration[5.2]
  def change
    add_column :media_attachments, :description, :text
  end

M db/migrate/20170928082043_create_email_domain_blocks.rb => db/migrate/20170928082043_create_email_domain_blocks.rb +1 -1
@@ 1,4 1,4 @@
class CreateEmailDomainBlocks < ActiveRecord::Migration[5.1]
class CreateEmailDomainBlocks < ActiveRecord::Migration[5.2]
  def change
    create_table :email_domain_blocks do |t|
      t.string :domain, null: false

M db/migrate/20171005102658_create_account_moderation_notes.rb => db/migrate/20171005102658_create_account_moderation_notes.rb +1 -1
@@ 1,4 1,4 @@
class CreateAccountModerationNotes < ActiveRecord::Migration[5.1]
class CreateAccountModerationNotes < ActiveRecord::Migration[5.2]
  def change
    create_table :account_moderation_notes do |t|
      t.text :content, null: false

M db/migrate/20171005171936_add_disabled_to_custom_emojis.rb => db/migrate/20171005171936_add_disabled_to_custom_emojis.rb +1 -1
@@ 1,6 1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')

class AddDisabledToCustomEmojis < ActiveRecord::Migration[5.1]
class AddDisabledToCustomEmojis < ActiveRecord::Migration[5.2]
  include Mastodon::MigrationHelpers

  disable_ddl_transaction!

M db/migrate/20171006142024_add_uri_to_custom_emojis.rb => db/migrate/20171006142024_add_uri_to_custom_emojis.rb +1 -1
@@ 1,4 1,4 @@
class AddUriToCustomEmojis < ActiveRecord::Migration[5.1]
class AddUriToCustomEmojis < ActiveRecord::Migration[5.2]
  def change
    add_column :custom_emojis, :uri, :string
    add_column :custom_emojis, :image_remote_url, :string

M db/migrate/20171010023049_add_foreign_key_to_account_moderation_notes.rb => db/migrate/20171010023049_add_foreign_key_to_account_moderation_notes.rb +1 -1
@@ 1,4 1,4 @@
class AddForeignKeyToAccountModerationNotes < ActiveRecord::Migration[5.1]
class AddForeignKeyToAccountModerationNotes < ActiveRecord::Migration[5.2]
  def change
    safety_assured { add_foreign_key :account_moderation_notes, :accounts }
  end

M db/migrate/20171010025614_change_accounts_nonnullable_in_account_moderation_notes.rb => db/migrate/20171010025614_change_accounts_nonnullable_in_account_moderation_notes.rb +1 -1
@@ 1,4 1,4 @@
class ChangeAccountsNonnullableInAccountModerationNotes < ActiveRecord::Migration[5.1]
class ChangeAccountsNonnullableInAccountModerationNotes < ActiveRecord::Migration[5.2]
  def change
    safety_assured do
      change_column_null :account_moderation_notes, :account_id, false

M db/migrate/20171020084748_add_visible_in_picker_to_custom_emoji.rb => db/migrate/20171020084748_add_visible_in_picker_to_custom_emoji.rb +1 -1
@@ 1,4 1,4 @@
class AddVisibleInPickerToCustomEmoji < ActiveRecord::Migration[5.1]
class AddVisibleInPickerToCustomEmoji < ActiveRecord::Migration[5.2]
  def change
    safety_assured do
      add_column :custom_emojis, :visible_in_picker, :boolean, default: true, null: false

M db/migrate/20171028221157_add_reblogs_to_follows.rb => db/migrate/20171028221157_add_reblogs_to_follows.rb +1 -1
@@ 1,6 1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')

class AddReblogsToFollows < ActiveRecord::Migration[5.1]
class AddReblogsToFollows < ActiveRecord::Migration[5.2]
  include Mastodon::MigrationHelpers

  disable_ddl_transaction!

M db/migrate/20171107143332_add_memorial_to_accounts.rb => db/migrate/20171107143332_add_memorial_to_accounts.rb +1 -1
@@ 1,6 1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')

class AddMemorialToAccounts < ActiveRecord::Migration[5.1]
class AddMemorialToAccounts < ActiveRecord::Migration[5.2]
  include Mastodon::MigrationHelpers

  disable_ddl_transaction!

M db/migrate/20171107143624_add_disabled_to_users.rb => db/migrate/20171107143624_add_disabled_to_users.rb +1 -1
@@ 1,6 1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')

class AddDisabledToUsers < ActiveRecord::Migration[5.1]
class AddDisabledToUsers < ActiveRecord::Migration[5.2]
  include Mastodon::MigrationHelpers

  disable_ddl_transaction!

M db/migrate/20171109012327_add_moderator_to_accounts.rb => db/migrate/20171109012327_add_moderator_to_accounts.rb +1 -1
@@ 1,6 1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')

class AddModeratorToAccounts < ActiveRecord::Migration[5.1]
class AddModeratorToAccounts < ActiveRecord::Migration[5.2]
  include Mastodon::MigrationHelpers

  disable_ddl_transaction!

M db/migrate/20171114080328_add_index_domain_to_email_domain_blocks.rb => db/migrate/20171114080328_add_index_domain_to_email_domain_blocks.rb +1 -1
@@ 1,4 1,4 @@
class AddIndexDomainToEmailDomainBlocks < ActiveRecord::Migration[5.1]
class AddIndexDomainToEmailDomainBlocks < ActiveRecord::Migration[5.2]
  disable_ddl_transaction!

  def change

M db/migrate/20171114231651_create_lists.rb => db/migrate/20171114231651_create_lists.rb +1 -1
@@ 1,4 1,4 @@
class CreateLists < ActiveRecord::Migration[5.1]
class CreateLists < ActiveRecord::Migration[5.2]
  def change
    create_table :lists do |t|
      t.references :account, foreign_key: { on_delete: :cascade }

M db/migrate/20171116161857_create_list_accounts.rb => db/migrate/20171116161857_create_list_accounts.rb +1 -1
@@ 1,4 1,4 @@
class CreateListAccounts < ActiveRecord::Migration[5.1]
class CreateListAccounts < ActiveRecord::Migration[5.2]
  def change
    create_table :list_accounts do |t|
      t.belongs_to :list, foreign_key: { on_delete: :cascade }, null: false

M db/migrate/20171118012443_add_moved_to_account_id_to_accounts.rb => db/migrate/20171118012443_add_moved_to_account_id_to_accounts.rb +1 -1
@@ 1,4 1,4 @@
class AddMovedToAccountIdToAccounts < ActiveRecord::Migration[5.1]
class AddMovedToAccountIdToAccounts < ActiveRecord::Migration[5.2]
  def change
    add_column :accounts, :moved_to_account_id, :bigint, null: true, default: nil
    safety_assured { add_foreign_key :accounts, :accounts, column: :moved_to_account_id, on_delete: :nullify }

M db/migrate/20171119172437_create_admin_action_logs.rb => db/migrate/20171119172437_create_admin_action_logs.rb +1 -1
@@ 1,4 1,4 @@
class CreateAdminActionLogs < ActiveRecord::Migration[5.1]
class CreateAdminActionLogs < ActiveRecord::Migration[5.2]
  def change
    create_table :admin_action_logs do |t|
      t.belongs_to :account, foreign_key: { on_delete: :cascade }

M db/migrate/20171122120436_add_index_account_and_reblog_of_id_to_statuses.rb => db/migrate/20171122120436_add_index_account_and_reblog_of_id_to_statuses.rb +1 -1
@@ 1,4 1,4 @@
class AddIndexAccountAndReblogOfIdToStatuses < ActiveRecord::Migration[5.1]
class AddIndexAccountAndReblogOfIdToStatuses < ActiveRecord::Migration[5.2]
  disable_ddl_transaction!

  def up

M db/migrate/20171125024930_create_invites.rb => db/migrate/20171125024930_create_invites.rb +1 -1
@@ 1,4 1,4 @@
class CreateInvites < ActiveRecord::Migration[5.1]
class CreateInvites < ActiveRecord::Migration[5.2]
  def change
    create_table :invites do |t|
      t.belongs_to :user, foreign_key: { on_delete: :cascade }

M db/migrate/20171125031751_add_invite_id_to_users.rb => db/migrate/20171125031751_add_invite_id_to_users.rb +1 -1
@@ 1,4 1,4 @@
class AddInviteIdToUsers < ActiveRecord::Migration[5.1]
class AddInviteIdToUsers < ActiveRecord::Migration[5.2]
  def change
    safety_assured { add_reference :users, :invite, null: true, default: nil, foreign_key: { on_delete: :nullify }, index: false }
  end

M db/migrate/20171125185353_add_index_reblog_of_id_and_account_to_statuses.rb => db/migrate/20171125185353_add_index_reblog_of_id_and_account_to_statuses.rb +1 -1
@@ 1,4 1,4 @@
class AddIndexReblogOfIdAndAccountToStatuses < ActiveRecord::Migration[5.1]
class AddIndexReblogOfIdAndAccountToStatuses < ActiveRecord::Migration[5.2]
  disable_ddl_transaction!

  def change

M db/migrate/20171125190735_remove_old_reblog_index_on_statuses.rb => db/migrate/20171125190735_remove_old_reblog_index_on_statuses.rb +1 -1
@@ 1,4 1,4 @@
class RemoveOldReblogIndexOnStatuses < ActiveRecord::Migration[5.1]
class RemoveOldReblogIndexOnStatuses < ActiveRecord::Migration[5.2]
  disable_ddl_transaction!

  def up

M db/migrate/20171129172043_add_index_on_stream_entries.rb => db/migrate/20171129172043_add_index_on_stream_entries.rb +1 -1
@@ 1,4 1,4 @@
class AddIndexOnStreamEntries < ActiveRecord::Migration[5.1]
class AddIndexOnStreamEntries < ActiveRecord::Migration[5.2]
  disable_ddl_transaction!

  def change

M db/migrate/20171130000000_add_embed_url_to_preview_cards.rb => db/migrate/20171130000000_add_embed_url_to_preview_cards.rb +1 -1
@@ 1,6 1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')

class AddEmbedURLToPreviewCards < ActiveRecord::Migration[5.1]
class AddEmbedURLToPreviewCards < ActiveRecord::Migration[5.2]
  include Mastodon::MigrationHelpers

  disable_ddl_transaction!

M db/migrate/20171201000000_change_account_id_nonnullable_in_lists.rb => db/migrate/20171201000000_change_account_id_nonnullable_in_lists.rb +1 -1
@@ 1,4 1,4 @@
class ChangeAccountIdNonnullableInLists < ActiveRecord::Migration[5.1]
class ChangeAccountIdNonnullableInLists < ActiveRecord::Migration[5.2]
  def change
    safety_assured do
      change_column_null :lists, :account_id, false

M db/migrate/20171212195226_remove_duplicate_indexes_in_lists.rb => db/migrate/20171212195226_remove_duplicate_indexes_in_lists.rb +1 -1
@@ 1,4 1,4 @@
class RemoveDuplicateIndexesInLists < ActiveRecord::Migration[5.1]
class RemoveDuplicateIndexesInLists < ActiveRecord::Migration[5.2]
  def change
    remove_index :list_accounts, name: 'index_list_accounts_on_account_id'
    remove_index :list_accounts, name: 'index_list_accounts_on_list_id'

M db/migrate/20171226094803_more_faster_index_on_notifications.rb => db/migrate/20171226094803_more_faster_index_on_notifications.rb +1 -1
@@ 1,4 1,4 @@
class MoreFasterIndexOnNotifications < ActiveRecord::Migration[5.1]
class MoreFasterIndexOnNotifications < ActiveRecord::Migration[5.2]
  disable_ddl_transaction!

  def change

M db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb => db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb +1 -1
@@ 1,4 1,4 @@
class AddIndexOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.1]
class AddIndexOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.2]
  disable_ddl_transaction!

  def change

M db/migrate/20180109143959_add_remember_token_to_users.rb => db/migrate/20180109143959_add_remember_token_to_users.rb +1 -1
@@ 1,4 1,4 @@
class AddRememberTokenToUsers < ActiveRecord::Migration[5.1]
class AddRememberTokenToUsers < ActiveRecord::Migration[5.2]
  def change
    add_column :users, :remember_token, :string, null: true
  end

M db/migrate/20180204034416_create_identities.rb => db/migrate/20180204034416_create_identities.rb +3 -3
@@ 1,7 1,7 @@
class CreateIdentities < ActiveRecord::Migration[5.0]
class CreateIdentities < ActiveRecord::Migration[5.2]
  def change
    create_table :identities do |t|
      t.references :user, foreign_key: { on_delete: :cascade }
    create_table :identities, id: :integer do |t|
      t.references :user, type: :integer, foreign_key: { on_delete: :cascade }
      t.string :provider, null: false, default: ''
      t.string :uid, null: false, default: ''


M db/migrate/20180206000000_change_user_id_nonnullable.rb => db/migrate/20180206000000_change_user_id_nonnullable.rb +1 -1
@@ 1,4 1,4 @@
class ChangeUserIdNonnullable < ActiveRecord::Migration[5.1]
class ChangeUserIdNonnullable < ActiveRecord::Migration[5.2]
  def change
    safety_assured do
      change_column_null :invites, :user_id, false

M db/migrate/20180211015820_create_backups.rb => db/migrate/20180211015820_create_backups.rb +1 -1
@@ 1,4 1,4 @@
class CreateBackups < ActiveRecord::Migration[5.1]
class CreateBackups < ActiveRecord::Migration[5.2]
  def change
    create_table :backups do |t|
      t.references :user, foreign_key: { on_delete: :nullify }

M db/migrate/20180304013859_add_featured_collection_url_to_accounts.rb => db/migrate/20180304013859_add_featured_collection_url_to_accounts.rb +1 -1
@@ 1,4 1,4 @@
class AddFeaturedCollectionURLToAccounts < ActiveRecord::Migration[5.1]
class AddFeaturedCollectionURLToAccounts < ActiveRecord::Migration[5.2]
  def change
    add_column :accounts, :featured_collection_url, :string
  end

M db/migrate/20180310000000_change_columns_in_notifications_nonnullable.rb => db/migrate/20180310000000_change_columns_in_notifications_nonnullable.rb +1 -1
@@ 1,4 1,4 @@
class ChangeColumnsInNotificationsNonnullable < ActiveRecord::Migration[5.1]
class ChangeColumnsInNotificationsNonnullable < ActiveRecord::Migration[5.2]
  def change
    safety_assured do
      change_column_null :notifications, :activity_id, false

M db/migrate/20180402031200_add_assigned_account_id_to_reports.rb => db/migrate/20180402031200_add_assigned_account_id_to_reports.rb +1 -1
@@ 1,4 1,4 @@
class AddAssignedAccountIdToReports < ActiveRecord::Migration[5.1]
class AddAssignedAccountIdToReports < ActiveRecord::Migration[5.2]
  def change
    safety_assured { add_reference :reports, :assigned_account, null: true, default: nil, foreign_key: { on_delete: :nullify, to_table: :accounts }, index: false }
  end

M db/migrate/20180402040909_create_report_notes.rb => db/migrate/20180402040909_create_report_notes.rb +1 -1
@@ 1,4 1,4 @@
class CreateReportNotes < ActiveRecord::Migration[5.1]
class CreateReportNotes < ActiveRecord::Migration[5.2]
  def change
    create_table :report_notes do |t|
      t.text :content, null: false

M db/migrate/20180410204633_add_fields_to_accounts.rb => db/migrate/20180410204633_add_fields_to_accounts.rb +1 -1
@@ 1,4 1,4 @@
class AddFieldsToAccounts < ActiveRecord::Migration[5.1]
class AddFieldsToAccounts < ActiveRecord::Migration[5.2]
  def change
    add_column :accounts, :fields, :jsonb
  end

M db/migrate/20180514130000_improve_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb => db/migrate/20180514130000_improve_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb +2 -2
@@ 1,10 1,10 @@
# frozen_string_literal: true

class ImproveIndexOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.1]
class ImproveIndexOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.2]
  disable_ddl_transaction!

  def change
    #  These changes ware reverted by migration 20180514140000.
    #  These changes were reverted by migration 20180514140000.
    #  add_index :statuses, [:account_id, :id, :visibility], where: 'visibility IN (0, 1, 2)', algorithm: :concurrently
    #  add_index :statuses, [:account_id, :id], where: 'visibility = 3', algorithm: :concurrently
    #  remove_index :statuses, column: [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106

M db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb => db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb +1 -1
@@ 1,6 1,6 @@
# frozen_string_literal: true

class RevertIndexChangeOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.1]
class RevertIndexChangeOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migration[5.2]
  disable_ddl_transaction!

  def change

M db/migrate/20180528141303_fix_accounts_unique_index.rb => db/migrate/20180528141303_fix_accounts_unique_index.rb +9 -16
@@ 1,4 1,8 @@
require_relative '../../lib/mastodon/migration_warning'

class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2]
  include Mastodon::MigrationWarning

  class Account < ApplicationRecord
    # Dummy class, to make migration possible across version changes
    has_one :user, inverse_of: :account


@@ 35,22 39,11 @@ class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2]
  disable_ddl_transaction!

  def up
    if $stdout.isatty
      say ''
      say 'WARNING: This migration may take a *long* time for large instances'
      say 'It will *not* lock tables for any significant time, but it may run'
      say 'for a very long time. We will pause for 10 seconds to allow you to'
      say 'interrupt this migration if you are not ready.'
      say ''
      say 'This migration will irreversibly delete user accounts with duplicate'
      say 'usernames. You may use the `rake mastodon:maintenance:find_duplicate_usernames`'
      say 'task to manually deal with such accounts before running this migration.'

      10.downto(1) do |i|
        say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
        sleep 1
      end
    end
    migration_duration_warning(<<~EXPLANATION)
      This migration will irreversibly delete user accounts with duplicate
      usernames. You may use the `rake mastodon:maintenance:find_duplicate_usernames`
      task to manually deal with such accounts before running this migration.
    EXPLANATION

    duplicates = Account.connection.select_all('SELECT string_agg(id::text, \',\') AS ids FROM accounts GROUP BY lower(username), lower(domain) HAVING count(*) > 1').to_ary


M db/migrate/20180831171112_create_bookmarks.rb => db/migrate/20180831171112_create_bookmarks.rb +1 -1
@@ 1,7 1,7 @@
# This migration is a duplicate of 20180410220657 and may get ignored, see
# config/initializers/0_duplicate_migrations.rb

class CreateBookmarks < ActiveRecord::Migration[5.1]
class CreateBookmarks < ActiveRecord::Migration[5.2]
  def change
    create_table :bookmarks do |t|
      t.references :account, null: false

M db/migrate/20181024224956_migrate_account_conversations.rb => db/migrate/20181024224956_migrate_account_conversations.rb +5 -13
@@ 1,4 1,8 @@
require_relative '../../lib/mastodon/migration_warning'

class MigrateAccountConversations < ActiveRecord::Migration[5.2]
  include Mastodon::MigrationWarning

  disable_ddl_transaction!

  class Mention < ApplicationRecord


@@ 62,19 66,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
  end

  def up
    if $stdout.isatty
      say ''
      say 'WARNING: This migration may take a *long* time for large instances'
      say 'It will *not* lock tables for any significant time, but it may run'
      say 'for a very long time. We will pause for 10 seconds to allow you to'
      say 'interrupt this migration if you are not ready.'
      say ''

      10.downto(1) do |i|
        say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
        sleep 1
      end
    end
    migration_duration_warning

    migrated  = 0
    last_time = Time.zone.now

M db/migrate/20191031163205_change_list_account_follow_nullable.rb => db/migrate/20191031163205_change_list_account_follow_nullable.rb +1 -1
@@ 1,4 1,4 @@
class ChangeListAccountFollowNullable < ActiveRecord::Migration[5.1]
class ChangeListAccountFollowNullable < ActiveRecord::Migration[5.2]
  def change
    safety_assured do
      change_column_null :list_accounts, :follow_id, true

M db/migrate/20200622213645_media_attachment_ids_to_timestamp_ids.rb => db/migrate/20200622213645_media_attachment_ids_to_timestamp_ids.rb +1 -1
@@ 1,4 1,4 @@
class MediaAttachmentIdsToTimestampIds < ActiveRecord::Migration[5.1]
class MediaAttachmentIdsToTimestampIds < ActiveRecord::Migration[5.2]
  def up
    # Set up the media_attachments.id column to use our timestamp-based IDs.
    safety_assured do

M db/migrate/20200917192924_add_notify_to_follows.rb => db/migrate/20200917192924_add_notify_to_follows.rb +1 -1
@@ 1,6 1,6 @@
require Rails.root.join('lib', 'mastodon', 'migration_helpers')

class AddNotifyToFollows < ActiveRecord::Migration[5.1]
class AddNotifyToFollows < ActiveRecord::Migration[5.2]
  include Mastodon::MigrationHelpers

  disable_ddl_transaction!

M db/migrate/20210306164523_account_ids_to_timestamp_ids.rb => db/migrate/20210306164523_account_ids_to_timestamp_ids.rb +1 -1
@@ 1,4 1,4 @@
class AccountIdsToTimestampIds < ActiveRecord::Migration[5.1]
class AccountIdsToTimestampIds < ActiveRecord::Migration[5.2]
  def up
    # Set up the accounts.id column to use our timestamp-based IDs.
    safety_assured do

A db/migrate/20230215074327_add_settings_to_users.rb => db/migrate/20230215074327_add_settings_to_users.rb +7 -0
@@ 0,0 1,7 @@
# frozen_string_literal: true

class AddSettingsToUsers < ActiveRecord::Migration[6.1]
  def change
    add_column :users, :settings, :text
  end
end

A db/migrate/20230215074423_move_user_settings.rb => db/migrate/20230215074423_move_user_settings.rb +84 -0
@@ 0,0 1,84 @@
# frozen_string_literal: true

class MoveUserSettings < ActiveRecord::Migration[6.1]
  class User < ApplicationRecord; end

  MAPPING = {
    default_privacy: 'default_privacy',
    default_sensitive: 'web.default_sensitive',
    default_language: 'default_language',
    noindex: 'noindex',
    theme: 'theme',
    trends: 'web.trends',
    unfollow_modal: 'web.unfollow_modal',
    boost_modal: 'web.reblog_modal',
    delete_modal: 'web.delete_modal',
    auto_play_gif: 'web.auto_play',
    display_media: 'web.display_media',
    expand_spoilers: 'web.expand_content_warnings',
    reduce_motion: 'web.reduce_motion',
    disable_swiping: 'web.disable_swiping',
    show_application: 'show_application',
    system_font_ui: 'web.use_system_font',
    aggregate_reblogs: 'aggregate_reblogs',
    advanced_layout: 'web.advanced_layout',
    use_blurhash: 'web.use_blurhash',
    use_pending_items: 'web.use_pending_items',
    crop_images: 'web.crop_images',
    notification_emails: {
      follow: 'notification_emails.follow',
      reblog: 'notification_emails.reblog',
      favourite: 'notification_emails.favourite',
      mention: 'notification_emails.mention',
      follow_request: 'notification_emails.follow_request',
      report: 'notification_emails.report',
      pending_account: 'notification_emails.pending_account',
      trending_tag: 'notification_emails.trends',
      appeal: 'notification_emails.appeal',
    }.freeze,
    always_send_emails: 'always_send_emails',
    interactions: {
      must_be_follower: 'interactions.must_be_follower',
      must_be_following: 'interactions.must_be_following',
      must_be_following_dm: 'interactions.must_be_following_dm',
    }.freeze,
  }.freeze

  class LegacySetting < ApplicationRecord
    self.table_name = 'settings'

    def var
      self[:var]&.to_sym
    end

    def value
      YAML.safe_load(self[:value], permitted_classes: [ActiveSupport::HashWithIndifferentAccess]) if self[:value].present?
    end
  end

  def up
    User.find_each do |user|
      previous_settings = LegacySetting.where(thing_type: 'User', thing_id: user.id).index_by(&:var)

      user_settings = {}

      MAPPING.each do |legacy_key, new_key|
        value = previous_settings[legacy_key]&.value

        next if value.blank?

        if value.is_a?(Hash)
          value.each do |nested_key, nested_value|
            user_settings[MAPPING[legacy_key][nested_key.to_sym]] = nested_value
          end
        else
          user_settings[new_key] = value
        end
      end

      user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations
    end
  end

  def down; end
end

M db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb => db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb +1 -0
@@ 34,6 34,7 @@ class RemoveSuspendedSilencedAccountFields < ActiveRecord::Migration[5.2]
      remove_column :accounts, :suspended, :boolean, null: false, default: false
      remove_column :accounts, :silenced, :boolean, null: false, default: false
    end
    Account.reset_column_information
  end

  def down

M db/post_migrate/20210308133107_remove_subscription_expires_at_from_accounts.rb => db/post_migrate/20210308133107_remove_subscription_expires_at_from_accounts.rb +2 -2
@@ 1,7 1,7 @@
class RemoveSubscriptionExpiresAtFromAccounts < ActiveRecord::Migration[5.0]
class RemoveSubscriptionExpiresAtFromAccounts < ActiveRecord::Migration[5.2]
  def change
    safety_assured do
      remove_column :accounts, :subscription_expires_at, :datetime, null: true, default: nil
      remove_column :accounts, :subscription_expires_at, :datetime, null: true, default: nil, precision: nil
    end
  end
end

M db/schema.rb => db/schema.rb +2 -1
@@ 10,7 10,7 @@
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 2022_12_06_114142) do
ActiveRecord::Schema.define(version: 2023_02_15_074423) do

  # These are extensions that must be enabled in order to support this database
  enable_extension "plpgsql"


@@ 1063,6 1063,7 @@ ActiveRecord::Schema.define(version: 2022_12_06_114142) do
    t.inet "sign_up_ip"
    t.boolean "skip_sign_in_token"
    t.bigint "role_id"
    t.text "settings"
    t.index ["account_id"], name: "index_users_on_account_id"
    t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true
    t.index ["created_by_application_id"], name: "index_users_on_created_by_application_id", where: "(created_by_application_id IS NOT NULL)"

M db/seeds.rb => db/seeds.rb +4 -2
@@ 1,5 1,7 @@
# frozen_string_literal: true

Dir[Rails.root.join('db', 'seeds', '*.rb')].sort.each do |seed|
  load seed
Chewy.strategy(:mastodon) do
  Dir[Rails.root.join('db', 'seeds', '*.rb')].sort.each do |seed|
    load seed
  end
end

M dist/nginx.conf => dist/nginx.conf +1 -1
@@ 39,7 39,7 @@ server {

  keepalive_timeout    70;
  sendfile             on;
  client_max_body_size 80m;
  client_max_body_size 99m;

  root /home/mastodon/live/public;


A lib/mastodon/migration_warning.rb => lib/mastodon/migration_warning.rb +55 -0
@@ 0,0 1,55 @@
# frozen_string_literal: true

module Mastodon
  module MigrationWarning
    WARNING_SECONDS = 10

    DEFAULT_WARNING = <<~WARNING_MESSAGE
      WARNING: This migration may take a *long* time for large instances.
      It will *not* lock tables for any significant time, but it may run
      for a very long time. We will pause for #{WARNING_SECONDS} seconds to allow you to
      interrupt this migration if you are not ready.
    WARNING_MESSAGE

    def migration_duration_warning(explanation = nil)
      return unless valid_environment?

      announce_warning(explanation)

      announce_countdown
    end

    private

    def announce_countdown
      WARNING_SECONDS.downto(1) do |i|
        say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
        sleep 1
      end
    end

    def valid_environment?
      $stdout.isatty && Rails.env.production?
    end

    def announce_warning(explanation)
      announce_message prepare_message(explanation)
    end

    def announce_message(text)
      say ''
      text.each_line do |line|
        say(line)
      end
      say ''
    end

    def prepare_message(explanation)
      if explanation.blank?
        DEFAULT_WARNING
      else
        DEFAULT_WARNING + "\n#{explanation}"
      end
    end
  end
end

M lib/tasks/tests.rake => lib/tasks/tests.rake +10 -0
@@ 53,6 53,11 @@ namespace :tests do
        puts 'Admin::ActionLog email domain block records not updated as expected'
        exit(1)
      end

      unless User.find(1).settings['notification_emails.favourite'] == true && User.find(1).settings['notification_emails.mention'] == false
        puts 'User settings not kept as expected'
        exit(1)
      end
    end

    desc 'Populate the database with test data for 2.4.3'


@@ 98,6 103,11 @@ namespace :tests do
          (1, 'destroy', 'EmailDomainBlock', 1, now(), now()),
          (1, 'destroy', 'Status', 1, now(), now()),
          (1, 'destroy', 'CustomEmoji', 3, now(), now());

        INSERT INTO "settings"
          (id, thing_type, thing_id, var, value, created_at, updated_at)
        VALUES
          (3, 'User', 1, 'notification_emails', E'--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nfollow: false\nreblog: true\nfavourite: true\nmention: false\nfollow_request: true\ndigest: true\nreport: true\npending_account: false\ntrending_tag: true\nappeal: true\n', now(), now());
      SQL
    end


M package.json => package.json +18 -11
@@ 16,7 16,8 @@
    "test:lint:sass": "stylelint \"**/*.{css,scss}\" && prettier --check \"**/*.{css,scss}\"",
    "test:jest": "cross-env NODE_ENV=test jest",
    "format": "prettier --write .",
    "format-check": "prettier --check ."
    "format-check": "prettier --check .",
    "prepare": "husky install"
  },
  "repository": {
    "type": "git",


@@ 51,19 52,18 @@
    "compression-webpack-plugin": "^6.1.1",
    "cross-env": "^7.0.3",
    "css-loader": "^5.2.7",
    "cssnano": "^5.1.15",
    "cssnano": "^6.0.0",
    "detect-passive-events": "^2.0.3",
    "dotenv": "^16.0.3",
    "emoji-mart": "npm:emoji-mart-lazyload@latest",
    "es6-symbol": "^3.1.3",
    "escape-html": "^1.0.3",
    "exif-js": "^2.3.0",
    "express": "^4.18.2",
    "favico.js": "^0.3.10",
    "file-loader": "^6.2.0",
    "font-awesome": "^4.7.0",
    "fuzzysort": "^2.0.4",
    "glob": "^9.3.0",
    "glob": "^9.3.2",
    "history": "^4.10.1",
    "http-link-header": "^1.1.0",
    "immutable": "^4.3.0",


@@ 75,9 75,8 @@
    "jsdom": "^21.1.1",
    "lodash": "^4.17.21",
    "mark-loader": "^0.1.6",
    "marky": "^1.2.5",
    "mini-css-extract-plugin": "^1.6.2",
    "mkdirp": "^2.1.5",
    "mkdirp": "^2.1.6",
    "npmlog": "^7.0.1",
    "object-assign": "^4.1.1",
    "object.values": "^1.1.6",


@@ 103,10 102,10 @@
    "react-redux-loading-bar": "^5.0.4",
    "react-router-dom": "^4.1.1",
    "react-router-scroll-4": "^1.0.0-beta.1",
    "react-select": "^5.7.1",
    "react-select": "^5.7.2",
    "react-sparklines": "^1.7.0",
    "react-swipeable-views": "^0.14.0",
    "react-textarea-autosize": "^8.4.0",
    "react-textarea-autosize": "^8.4.1",
    "react-toggle": "^4.1.3",
    "redis": "^4.6.5",
    "redux": "^4.2.1",


@@ 115,8 114,8 @@
    "regenerator-runtime": "^0.13.11",
    "requestidlecallback": "^0.3.0",
    "reselect": "^4.1.7",
    "rimraf": "^4.4.0",
    "sass": "^1.59.3",
    "rimraf": "^4.4.1",
    "sass": "^1.60.0",
    "sass-loader": "^10.2.0",
    "stacktrace-js": "^2.0.2",
    "stringz": "^2.1.0",


@@ 151,10 150,13 @@
    "eslint-plugin-jsx-a11y": "~6.7.1",
    "eslint-plugin-promise": "~6.1.1",
    "eslint-plugin-react": "~7.32.2",
    "husky": "^8.0.3",
    "jest": "^29.5.0",
    "jest-environment-jsdom": "^29.5.0",
    "lint-staged": "^13.1.2",
    "marky": "^1.2.5",
    "postcss-scss": "^4.0.6",
    "prettier": "^2.8.5",
    "prettier": "^2.8.7",
    "raf": "^3.4.1",
    "react-intl-translations-manager": "^5.0.3",
    "react-test-renderer": "^16.14.0",


@@ 169,5 171,10 @@
  "optionalDependencies": {
    "bufferutil": "^4.0.7",
    "utf-8-validate": "^6.0.3"
  },
  "lint-staged": {
    "*": "prettier --ignore-unknown --write",
    "*.{js,jsx}": "eslint --fix",
    "*.{css,scss}": "stylelint --fix"
  }
}

M spec/controllers/api/v1/accounts/credentials_controller_spec.rb => spec/controllers/api/v1/accounts/credentials_controller_spec.rb +1 -0
@@ 46,6 46,7 @@ describe Api::V1::Accounts::CredentialsController do
        end

        it 'updates account info' do
          user.reload
          user.account.reload

          expect(user.account.display_name).to eq("Alice Isn't Dead")

M spec/controllers/application_controller_spec.rb => spec/controllers/application_controller_spec.rb +2 -1
@@ 101,7 101,8 @@ describe ApplicationController, type: :controller do

    it 'returns user\'s flavour when it is set' do
      current_user = Fabricate(:user)
      current_user.settings['flavour'] = 'glitch'
      current_user.settings.update(flavour: 'glitch')
      current_user.save
      sign_in current_user

      allow(Setting).to receive(:[]).with('skin').and_return 'default'

M spec/controllers/settings/preferences/notifications_controller_spec.rb => spec/controllers/settings/preferences/notifications_controller_spec.rb +8 -6
@@ 20,20 20,22 @@ describe Settings::Preferences::NotificationsController do

  describe 'PUT #update' do
    it 'updates notifications settings' do
      user.settings['notification_emails'] = user.settings['notification_emails'].merge('follow' => false)
      user.settings['interactions'] = user.settings['interactions'].merge('must_be_follower' => true)
      user.settings.update('notification_emails.follow': false, 'interactions.must_be_follower': true)
      user.save

      put :update, params: {
        user: {
          notification_emails: { follow: '1' },
          interactions: { must_be_follower: '0' },
          settings_attributes: {
            'notification_emails.follow': '1',
            'interactions.must_be_follower': '0',
          },
        },
      }

      expect(response).to redirect_to(settings_preferences_notifications_path)
      user.reload
      expect(user.settings['notification_emails']['follow']).to be true
      expect(user.settings['interactions']['must_be_follower']).to be false
      expect(user.settings['notification_emails.follow']).to be true
      expect(user.settings['interactions.must_be_follower']).to be false
    end
  end
end

M spec/controllers/settings/preferences/other_controller_spec.rb => spec/controllers/settings/preferences/other_controller_spec.rb +8 -6
@@ 29,20 29,22 @@ describe Settings::Preferences::OtherController do
    end

    it 'updates user settings' do
      user.settings['boost_modal'] = false
      user.settings['delete_modal'] = true
      user.settings.update('web.reblog_modal': false, 'web.delete_modal': true)
      user.save

      put :update, params: {
        user: {
          setting_boost_modal: '1',
          setting_delete_modal: '0',
          settings_attributes: {
            'web.reblog_modal': '1',
            'web.delete_modal': '0',
          },
        },
      }

      expect(response).to redirect_to(settings_preferences_other_path)
      user.reload
      expect(user.settings['boost_modal']).to be true
      expect(user.settings['delete_modal']).to be false
      expect(user.settings['web.reblog_modal']).to be true
      expect(user.settings['web.delete_modal']).to be false
    end
  end
end

M spec/controllers/settings/profiles_controller_spec.rb => spec/controllers/settings/profiles_controller_spec.rb +0 -8
@@ 44,12 44,4 @@ RSpec.describe Settings::ProfilesController, type: :controller do
      expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id)
    end
  end

  describe 'PUT #update with oversized image' do
    it 'gives the user an error message' do
      allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async)
      put :update, params: { account: { avatar: fixture_file_upload('4096x4097.png', 'image/png') } }
      expect(response.body).to include('images are not supported')
    end
  end
end

D spec/lib/settings/extend_spec.rb => spec/lib/settings/extend_spec.rb +0 -16
@@ 1,16 0,0 @@
# frozen_string_literal: true

require 'rails_helper'

RSpec.describe Settings::Extend do
  class User
    include Settings::Extend
  end

  describe '#settings' do
    it 'sets @settings as an instance of Settings::ScopedSettings' do
      user = Fabricate(:user)
      expect(user.settings).to be_a Settings::ScopedSettings
    end
  end
end

D spec/lib/settings/scoped_settings_spec.rb => spec/lib/settings/scoped_settings_spec.rb +0 -35
@@ 1,35 0,0 @@
# frozen_string_literal: true

require 'rails_helper'

RSpec.describe Settings::ScopedSettings do
  let(:object)         { Fabricate(:user) }
  let(:scoped_setting) { described_class.new(object) }
  let(:val)            { 'whatever' }
  let(:methods)        { %i(auto_play_gif default_sensitive unfollow_modal boost_modal delete_modal reduce_motion system_font_ui noindex theme) }

  describe '.initialize' do
    it 'sets @object' do
      scoped_setting = described_class.new(object)
      expect(scoped_setting.instance_variable_get(:@object)).to be object
    end
  end

  describe '#method_missing' do
    it 'sets scoped_setting.method_name = val' do
      methods.each do |key|
        scoped_setting.send("#{key}=", val)
        expect(scoped_setting.send(key)).to eq val
      end
    end
  end

  describe '#[]= and #[]' do
    it 'sets [key] = val' do
      methods.each do |key|
        scoped_setting[key] = val
        expect(scoped_setting[key]).to eq val
      end
    end
  end
end

D spec/lib/user_settings_decorator_spec.rb => spec/lib/user_settings_decorator_spec.rb +0 -84
@@ 1,84 0,0 @@
# frozen_string_literal: true

require 'rails_helper'

describe UserSettingsDecorator do
  describe 'update' do
    let(:user) { Fabricate(:user) }
    let(:settings) { described_class.new(user) }

    it 'updates the user settings value for email notifications' do
      values = { 'notification_emails' => { 'follow' => '1' } }

      settings.update(values)
      expect(user.settings['notification_emails']['follow']).to be true
    end

    it 'updates the user settings value for interactions' do
      values = { 'interactions' => { 'must_be_follower' => '0' } }

      settings.update(values)
      expect(user.settings['interactions']['must_be_follower']).to be false
    end

    it 'updates the user settings value for privacy' do
      values = { 'setting_default_privacy' => 'public' }

      settings.update(values)
      expect(user.settings['default_privacy']).to eq 'public'
    end

    it 'updates the user settings value for sensitive' do
      values = { 'setting_default_sensitive' => '1' }

      settings.update(values)
      expect(user.settings['default_sensitive']).to be true
    end

    it 'updates the user settings value for unfollow modal' do
      values = { 'setting_unfollow_modal' => '0' }

      settings.update(values)
      expect(user.settings['unfollow_modal']).to be false
    end

    it 'updates the user settings value for boost modal' do
      values = { 'setting_boost_modal' => '1' }

      settings.update(values)
      expect(user.settings['boost_modal']).to be true
    end

    it 'updates the user settings value for delete toot modal' do
      values = { 'setting_delete_modal' => '0' }

      settings.update(values)
      expect(user.settings['delete_modal']).to be false
    end

    it 'updates the user settings value for gif auto play' do
      values = { 'setting_auto_play_gif' => '0' }

      settings.update(values)
      expect(user.settings['auto_play_gif']).to be false
    end

    it 'updates the user settings value for system font in UI' do
      values = { 'setting_system_font_ui' => '0' }

      settings.update(values)
      expect(user.settings['system_font_ui']).to be false
    end

    it 'decoerces setting values before applying' do
      values = {
        'setting_delete_modal' => 'false',
        'setting_boost_modal' => 'true',
      }

      settings.update(values)
      expect(user.settings['delete_modal']).to be false
      expect(user.settings['boost_modal']).to be true
    end
  end
end

A spec/models/user_settings/namespace_spec.rb => spec/models/user_settings/namespace_spec.rb +25 -0
@@ 0,0 1,25 @@
# frozen_string_literal: true

require 'rails_helper'

RSpec.describe UserSettings::Namespace do
  subject { described_class.new(name) }

  let(:name) { :foo }

  describe '#setting' do
    before do
      subject.setting :bar, default: 'baz'
    end

    it 'adds setting to definitions' do
      expect(subject.definitions[:'foo.bar']).to have_attributes(name: :bar, namespace: :foo, default_value: 'baz')
    end
  end

  describe '#definitions' do
    it 'returns a hash' do
      expect(subject.definitions).to be_a Hash
    end
  end
end

A spec/models/user_settings/setting_spec.rb => spec/models/user_settings/setting_spec.rb +106 -0
@@ 0,0 1,106 @@
# frozen_string_literal: true

require 'rails_helper'

RSpec.describe UserSettings::Setting do
  subject { described_class.new(name, options) }

  let(:name)      { :foo }
  let(:options)   { { default: default, namespace: namespace } }
  let(:default)   { false }
  let(:namespace) { nil }

  describe '#default_value' do
    context 'when default value is a primitive value' do
      it 'returns default value' do
        expect(subject.default_value).to eq default
      end
    end

    context 'when default value is a proc' do
      let(:default) { -> { 'bar' } }

      it 'returns value from proc' do
        expect(subject.default_value).to eq 'bar'
      end
    end
  end

  describe '#type' do
    it 'returns a type' do
      expect(subject.type).to be_a ActiveModel::Type::Value
    end

    context 'when default value is a boolean' do
      let(:default) { false }

      it 'returns boolean' do
        expect(subject.type).to be_a ActiveModel::Type::Boolean
      end
    end

    context 'when default value is a string' do
      let(:default) { '' }

      it 'returns string' do
        expect(subject.type).to be_a ActiveModel::Type::String
      end
    end

    context 'when default value is a lambda returning a boolean' do
      let(:default) { -> { false } }

      it 'returns boolean' do
        expect(subject.type).to be_a ActiveModel::Type::Boolean
      end
    end

    context 'when default value is a lambda returning a string' do
      let(:default) { -> { '' } }

      it 'returns boolean' do
        expect(subject.type).to be_a ActiveModel::Type::String
      end
    end
  end

  describe '#type_cast' do
    context 'when default value is a boolean' do
      let(:default) { false }

      it 'returns boolean' do
        expect(subject.type_cast('1')).to be true
      end
    end

    context 'when default value is a string' do
      let(:default) { '' }

      it 'returns string' do
        expect(subject.type_cast(1)).to eq '1'
      end
    end
  end

  describe '#to_a' do
    it 'returns an array' do
      expect(subject.to_a).to eq [name, default]
    end
  end

  describe '#key' do
    context 'when there is no namespace' do
      it 'returnsn a symbol' do
        expect(subject.key).to eq :foo
      end
    end

    context 'when there is a namespace' do
      let(:namespace) { :bar }

      it 'returns a symbol' do
        expect(subject.key).to eq :'bar.foo'
      end
    end
  end
end

A spec/models/user_settings_spec.rb => spec/models/user_settings_spec.rb +110 -0
@@ 0,0 1,110 @@
# frozen_string_literal: true

require 'rails_helper'

RSpec.describe UserSettings do
  subject { described_class.new(json) }

  let(:json) { {} }

  describe '#[]' do
    context 'when setting is not set' do
      it 'returns default value' do
        expect(subject[:always_send_emails]).to be false
      end
    end

    context 'when setting is set' do
      let(:json) { { default_language: 'fr' } }

      it 'returns value' do
        expect(subject[:default_language]).to eq 'fr'
      end
    end

    context 'when setting was not defined' do
      it 'raises error' do
        expect { subject[:foo] }.to raise_error UserSettings::KeyError
      end
    end
  end

  describe '#[]=' do
    context 'when value matches type' do
      before do
        subject[:always_send_emails] = true
      end

      it 'updates value' do
        expect(subject[:always_send_emails]).to be true
      end
    end

    context 'when value needs to be type-cast' do
      before do
        subject[:always_send_emails] = '1'
      end

      it 'updates value with a type-cast' do
        expect(subject[:always_send_emails]).to be true
      end
    end
  end

  describe '#update' do
    before do
      subject.update(always_send_emails: true, default_language: 'fr', default_privacy: nil)
    end

    it 'updates values' do
      expect(subject[:always_send_emails]).to be true
      expect(subject[:default_language]).to eq 'fr'
    end

    it 'does not set values that are nil' do
      expect(subject.as_json).to_not include(default_privacy: nil)
    end
  end

  describe '#as_json' do
    let(:json) { { default_language: 'fr' } }

    it 'returns hash' do
      expect(subject.as_json).to eq json
    end
  end

  describe '.keys' do
    it 'returns an array' do
      expect(described_class.keys).to be_a Array
    end
  end

  describe '.definition_for' do
    context 'when key is defined' do
      it 'returns a setting' do
        expect(described_class.definition_for(:always_send_emails)).to be_a UserSettings::Setting
      end
    end

    context 'when key is not defined' do
      it 'returns nil' do
        expect(described_class.definition_for(:foo)).to be_nil
      end
    end
  end

  describe '.definition_for?' do
    context 'when key is defined' do
      it 'returns true' do
        expect(described_class.definition_for?(:always_send_emails)).to be true
      end
    end

    context 'when key is not defined' do
      it 'returns false' do
        expect(described_class.definition_for?(:foo)).to be false
      end
    end
  end
end

M spec/models/user_spec.rb => spec/models/user_spec.rb +2 -12
@@ 313,9 313,9 @@ RSpec.describe User, type: :model do
  end

  describe 'settings' do
    it 'is instance of Settings::ScopedSettings' do
    it 'is instance of UserSettings' do
      user = Fabricate(:user)
      expect(user.settings).to be_a Settings::ScopedSettings
      expect(user.settings).to be_a UserSettings
    end
  end



@@ 379,16 379,6 @@ RSpec.describe User, type: :model do
    end
  end

  it_behaves_like 'Settings-extended' do
    def create!
      User.create!(account: Fabricate(:account, user: nil), email: 'foo@mastodon.space', password: 'abcd1234', agreement: true)
    end

    def fabricate
      Fabricate(:user)
    end
  end

  describe 'token_for_app' do
    let(:user) { Fabricate(:user) }
    let(:app) { Fabricate(:application, owner: user) }

M spec/services/notify_service_spec.rb => spec/services/notify_service_spec.rb +4 -3
@@ 54,7 54,8 @@ RSpec.describe NotifyService, type: :service do
    let(:type)     { :mention }

    before do
      user.settings.interactions = user.settings.interactions.merge('must_be_following_dm' => enabled)
      user.settings.update('interactions.must_be_following_dm': enabled)
      user.save
    end

    context 'if recipient is supposed to be following sender' do


@@ 155,8 156,8 @@ RSpec.describe NotifyService, type: :service do
    before do
      ActionMailer::Base.deliveries.clear

      notification_emails = user.settings.notification_emails
      user.settings.notification_emails = notification_emails.merge('follow' => enabled)
      user.settings.update('notification_emails.follow': enabled)
      user.save
    end

    context 'when email notification is enabled' do

M spec/services/report_service_spec.rb => spec/services/report_service_spec.rb +2 -1
@@ 96,7 96,8 @@ RSpec.describe ReportService, type: :service do

    before do
      ActionMailer::Base.deliveries.clear
      source_account.user.settings.notification_emails['report'] = true
      source_account.user.settings['notification_emails.report'] = true
      source_account.user.save
    end

    it 'does not send an e-mail' do

M spec/services/update_status_service_spec.rb => spec/services/update_status_service_spec.rb +8 -1
@@ 120,7 120,9 @@ RSpec.describe UpdateStatusService, type: :service do
    before do
      status.update(poll: poll)
      VoteService.new.call(voter, poll, [0])
      subject.call(status, status.account_id, text: 'Foo', poll: { options: %w(Bar Baz Foo), expires_in: 5.days.to_i })
      Sidekiq::Testing.fake! do
        subject.call(status, status.account_id, text: 'Foo', poll: { options: %w(Bar Baz Foo), expires_in: 5.days.to_i })
      end
    end

    it 'updates poll' do


@@ 138,6 140,11 @@ RSpec.describe UpdateStatusService, type: :service do
    it 'saves edit history' do
      expect(status.edits.pluck(:poll_options)).to eq [%w(Foo Bar), %w(Bar Baz Foo)]
    end

    it 'requeues expiration notification' do
      poll = status.poll.reload
      expect(PollExpirationNotifyWorker).to have_enqueued_sidekiq_job(poll.id).at(poll.expires_at + 5.minutes)
    end
  end

  context 'when mentions in text change' do

M spec/workers/poll_expiration_notify_worker_spec.rb => spec/workers/poll_expiration_notify_worker_spec.rb +60 -1
@@ 4,10 4,69 @@ require 'rails_helper'

describe PollExpirationNotifyWorker do
  let(:worker) { described_class.new }
  let(:account) { Fabricate(:account, domain: remote? ? 'example.com' : nil) }
  let(:status) { Fabricate(:status, account: account) }
  let(:poll) { Fabricate(:poll, status: status, account: account) }
  let(:remote?) { false }
  let(:poll_vote) { Fabricate(:poll_vote, poll: poll) }

  describe '#perform' do
    around do |example|
      Sidekiq::Testing.fake! do
        example.run
      end
    end

  describe 'perform' do
    it 'runs without error for missing record' do
      expect { worker.perform(nil) }.to_not raise_error
    end

    context 'when poll is not expired' do
      it 'requeues job' do
        worker.perform(poll.id)
        expect(described_class.sidekiq_options_hash['lock']).to be :until_executing
        expect(described_class).to have_enqueued_sidekiq_job(poll.id).at(poll.expires_at + 5.minutes)
      end
    end

    context 'when poll is expired' do
      before do
        poll_vote

        travel_to poll.expires_at + 5.minutes

        worker.perform(poll.id)
      end

      context 'when poll is local' do
        it 'notifies voters' do
          expect(ActivityPub::DistributePollUpdateWorker).to have_enqueued_sidekiq_job(poll.status.id)
        end

        it 'notifies owner' do
          expect(LocalNotificationWorker).to have_enqueued_sidekiq_job(poll.account.id, poll.id, 'Poll', 'poll')
        end

        it 'notifies local voters' do
          expect(LocalNotificationWorker).to have_enqueued_sidekiq_job(poll_vote.account.id, poll.id, 'Poll', 'poll')
        end
      end

      context 'when poll is remote' do
        let(:remote?) { true }

        it 'does not notify remote voters' do
          expect(ActivityPub::DistributePollUpdateWorker).to_not have_enqueued_sidekiq_job(poll.status.id)
        end

        it 'does not notify owner' do
          expect(LocalNotificationWorker).to_not have_enqueued_sidekiq_job(poll.account.id, poll.id, 'Poll', 'poll')
        end

        it 'notifies local voters' do
          expect(LocalNotificationWorker).to have_enqueued_sidekiq_job(poll_vote.account.id, poll.id, 'Poll', 'poll')
        end
      end
    end
  end
end

M yarn.lock => yarn.lock +509 -273
@@ 1075,14 1075,14 @@
  dependencies:
    regenerator-runtime "^0.12.0"

"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.13.8", "@babel/runtime@^7.15.4", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.13.8", "@babel/runtime@^7.15.4", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
  version "7.21.0"
  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673"
  integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==
  dependencies:
    regenerator-runtime "^0.13.11"

"@babel/template@^7.18.10", "@babel/template@^7.20.7":
"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.20.7":
  version "7.20.7"
  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8"
  integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==


@@ 1592,7 1592,7 @@
    "@jridgewell/set-array" "^1.0.0"
    "@jridgewell/sourcemap-codec" "^1.4.10"

"@jridgewell/gen-mapping@^0.3.2":
"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2":
  version "0.3.2"
  resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
  integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==


@@ 2390,6 2390,13 @@ ansi-escapes@^4.2.1:
  dependencies:
    type-fest "^0.11.0"

ansi-escapes@^4.3.0:
  version "4.3.2"
  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
  integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
  dependencies:
    type-fest "^0.21.3"

ansi-html-community@0.0.8:
  version "0.0.8"
  resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41"


@@ 2410,6 2417,11 @@ ansi-regex@^5.0.0, ansi-regex@^5.0.1:
  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==

ansi-regex@^6.0.1:
  version "6.0.1"
  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
  integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==

ansi-styles@^3.2.0, ansi-styles@^3.2.1:
  version "3.2.1"
  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"


@@ 2430,6 2442,11 @@ ansi-styles@^5.0.0:
  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
  integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==

ansi-styles@^6.0.0:
  version "6.2.1"
  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
  integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==

anymatch@^2.0.0:
  version "2.0.0"
  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"


@@ 3255,6 3272,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464:
  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001466.tgz#c1e6197c540392e09709ecaa9e3e403428c53375"
  integrity sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w==

chalk@5.2.0:
  version "5.2.0"
  resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3"
  integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==

chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.2:
  version "2.4.2"
  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"


@@ 3374,6 3396,29 @@ clean-stack@^2.0.0:
  resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
  integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==

cli-cursor@^3.1.0:
  version "3.1.0"
  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
  integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
  dependencies:
    restore-cursor "^3.1.0"

cli-truncate@^2.1.0:
  version "2.1.0"
  resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
  integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
  dependencies:
    slice-ansi "^3.0.0"
    string-width "^4.2.0"

cli-truncate@^3.1.0:
  version "3.1.0"
  resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389"
  integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==
  dependencies:
    slice-ansi "^5.0.0"
    string-width "^5.0.0"

cliui@^5.0.0:
  version "5.0.0"
  resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"


@@ 3468,6 3513,11 @@ colord@^2.9.1, colord@^2.9.3:
  resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43"
  integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==

colorette@^2.0.19:
  version "2.0.19"
  resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798"
  integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==

combined-stream@^1.0.8:
  version "1.0.8"
  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"


@@ 3475,6 3525,11 @@ combined-stream@^1.0.8:
  dependencies:
    delayed-stream "~1.0.0"

commander@^10.0.0:
  version "10.0.0"
  resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.0.tgz#71797971162cd3cf65f0b9d24eb28f8d303acdf1"
  integrity sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==

commander@^2.20.0:
  version "2.20.3"
  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"


@@ 3777,26 3832,18 @@ css-loader@^5.2.7:
    schema-utils "^3.0.0"
    semver "^7.3.5"

css-select@^4.1.3:
  version "4.3.0"
  resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b"
  integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==
css-select@^5.1.0:
  version "5.1.0"
  resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
  integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
  dependencies:
    boolbase "^1.0.0"
    css-what "^6.0.1"
    domhandler "^4.3.1"
    domutils "^2.8.0"
    css-what "^6.1.0"
    domhandler "^5.0.2"
    domutils "^3.0.1"
    nth-check "^2.0.1"

css-tree@^1.1.2, css-tree@^1.1.3:
  version "1.1.3"
  resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d"
  integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==
  dependencies:
    mdn-data "2.0.14"
    source-map "^0.6.1"

css-tree@^2.3.1:
css-tree@^2.2.1, css-tree@^2.3.1:
  version "2.3.1"
  resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20"
  integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==


@@ 3804,7 3851,15 @@ css-tree@^2.3.1:
    mdn-data "2.0.30"
    source-map-js "^1.0.1"

css-what@^6.0.1:
css-tree@~2.2.0:
  version "2.2.1"
  resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032"
  integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==
  dependencies:
    mdn-data "2.0.28"
    source-map-js "^1.0.1"

css-what@^6.1.0:
  version "6.1.0"
  resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
  integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==


@@ 3819,61 3874,60 @@ cssesc@^3.0.0:
  resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
  integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==

cssnano-preset-default@^5.2.14:
  version "5.2.14"
  resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8"
  integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==
cssnano-preset-default@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.0.0.tgz#058726536bdc18711c01b1d328766cbc5691cf71"
  integrity sha512-BDxlaFzObRDXUiCCBQUNQcI+f1/aX2mgoNtXGjV6PG64POcHoDUoX+LgMWw+Q4609QhxwkcSnS65YFs42RA6qQ==
  dependencies:
    css-declaration-sorter "^6.3.1"
    cssnano-utils "^3.1.0"
    cssnano-utils "^4.0.0"
    postcss-calc "^8.2.3"
    postcss-colormin "^5.3.1"
    postcss-convert-values "^5.1.3"
    postcss-discard-comments "^5.1.2"
    postcss-discard-duplicates "^5.1.0"
    postcss-discard-empty "^5.1.1"
    postcss-discard-overridden "^5.1.0"
    postcss-merge-longhand "^5.1.7"
    postcss-merge-rules "^5.1.4"
    postcss-minify-font-values "^5.1.0"
    postcss-minify-gradients "^5.1.1"
    postcss-minify-params "^5.1.4"
    postcss-minify-selectors "^5.2.1"
    postcss-normalize-charset "^5.1.0"
    postcss-normalize-display-values "^5.1.0"
    postcss-normalize-positions "^5.1.1"
    postcss-normalize-repeat-style "^5.1.1"
    postcss-normalize-string "^5.1.0"
    postcss-normalize-timing-functions "^5.1.0"
    postcss-normalize-unicode "^5.1.1"
    postcss-normalize-url "^5.1.0"
    postcss-normalize-whitespace "^5.1.1"
    postcss-ordered-values "^5.1.3"
    postcss-reduce-initial "^5.1.2"
    postcss-reduce-transforms "^5.1.0"
    postcss-svgo "^5.1.0"
    postcss-unique-selectors "^5.1.1"

cssnano-utils@^3.1.0:
  version "3.1.0"
  resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861"
  integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==
    postcss-colormin "^6.0.0"
    postcss-convert-values "^6.0.0"
    postcss-discard-comments "^6.0.0"
    postcss-discard-duplicates "^6.0.0"
    postcss-discard-empty "^6.0.0"
    postcss-discard-overridden "^6.0.0"
    postcss-merge-longhand "^6.0.0"
    postcss-merge-rules "^6.0.0"
    postcss-minify-font-values "^6.0.0"
    postcss-minify-gradients "^6.0.0"
    postcss-minify-params "^6.0.0"
    postcss-minify-selectors "^6.0.0"
    postcss-normalize-charset "^6.0.0"
    postcss-normalize-display-values "^6.0.0"
    postcss-normalize-positions "^6.0.0"
    postcss-normalize-repeat-style "^6.0.0"
    postcss-normalize-string "^6.0.0"
    postcss-normalize-timing-functions "^6.0.0"
    postcss-normalize-unicode "^6.0.0"
    postcss-normalize-url "^6.0.0"
    postcss-normalize-whitespace "^6.0.0"
    postcss-ordered-values "^6.0.0"
    postcss-reduce-initial "^6.0.0"
    postcss-reduce-transforms "^6.0.0"
    postcss-svgo "^6.0.0"
    postcss-unique-selectors "^6.0.0"

cssnano-utils@^4.0.0:
  version "4.0.0"
  resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.0.tgz#d1da885ec04003ab19505ff0e62e029708d36b08"
  integrity sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==

cssnano@^5.1.15:
  version "5.1.15"
  resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf"
  integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==
cssnano@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.0.0.tgz#53f4cb81101cccba0809fad779f006b5d44925ee"
  integrity sha512-RGlcbzGhzEBCHuQe3k+Udyj5M00z0pm9S+VurHXFEOXxH+y0sVrJH2sMzoyz2d8N1EScazg+DVvmgyx0lurwwA==
  dependencies:
    cssnano-preset-default "^5.2.14"
    lilconfig "^2.0.3"
    yaml "^1.10.2"
    cssnano-preset-default "^6.0.0"
    lilconfig "^2.1.0"

csso@^4.2.0:
  version "4.2.0"
  resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529"
  integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==
csso@^5.0.5:
  version "5.0.5"
  resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6"
  integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==
  dependencies:
    css-tree "^1.1.2"
    css-tree "~2.2.0"

cssom@^0.5.0:
  version "0.5.0"


@@ 4243,26 4297,21 @@ dom-helpers@^5.2.0:
    "@babel/runtime" "^7.8.7"
    csstype "^3.0.2"

dom-serializer@^1.0.1:
  version "1.4.1"
  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
  integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==
dom-serializer@^2.0.0:
  version "2.0.0"
  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
  integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
  dependencies:
    domelementtype "^2.0.1"
    domhandler "^4.2.0"
    entities "^2.0.0"
    domelementtype "^2.3.0"
    domhandler "^5.0.2"
    entities "^4.2.0"

domain-browser@^1.1.1:
  version "1.2.0"
  resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
  integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==

domelementtype@^2.0.1:
  version "2.0.1"
  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d"
  integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==

domelementtype@^2.2.0:
domelementtype@^2.3.0:
  version "2.3.0"
  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
  integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==


@@ 4274,21 4323,21 @@ domexception@^4.0.0:
  dependencies:
    webidl-conversions "^7.0.0"

domhandler@^4.2.0, domhandler@^4.3.1:
  version "4.3.1"
  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
  integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==
domhandler@^5.0.1, domhandler@^5.0.2:
  version "5.0.3"
  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
  integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
  dependencies:
    domelementtype "^2.2.0"
    domelementtype "^2.3.0"

domutils@^2.8.0:
  version "2.8.0"
  resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
  integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
domutils@^3.0.1:
  version "3.0.1"
  resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c"
  integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==
  dependencies:
    dom-serializer "^1.0.1"
    domelementtype "^2.2.0"
    domhandler "^4.2.0"
    dom-serializer "^2.0.0"
    domelementtype "^2.3.0"
    domhandler "^5.0.1"

dotenv@^16.0.3:
  version "16.0.3"


@@ 4310,6 4359,11 @@ duplexify@^3.4.2, duplexify@^3.6.0:
    readable-stream "^2.0.0"
    stream-shift "^1.0.0"

eastasianwidth@^0.2.0:
  version "0.2.0"
  resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
  integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==

ee-first@1.1.1:
  version "1.1.1"
  resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"


@@ 4395,12 4449,7 @@ enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0:
    memory-fs "^0.5.0"
    tapable "^1.0.0"

entities@^2.0.0:
  version "2.0.3"
  resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f"
  integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==

entities@^4.4.0:
entities@^4.2.0, entities@^4.4.0:
  version "4.4.0"
  resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174"
  integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==


@@ 4826,10 4875,20 @@ execa@^5.0.0:
    signal-exit "^3.0.3"
    strip-final-newline "^2.0.0"

exif-js@^2.3.0:
  version "2.3.0"
  resolved "https://registry.yarnpkg.com/exif-js/-/exif-js-2.3.0.tgz#9d10819bf571f873813e7640241255ab9ce1a814"
  integrity sha1-nRCBm/Vx+HOBPnZAJBJVq5zhqBQ=
execa@^7.0.0:
  version "7.1.1"
  resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43"
  integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==
  dependencies:
    cross-spawn "^7.0.3"
    get-stream "^6.0.1"
    human-signals "^4.3.0"
    is-stream "^3.0.0"
    merge-stream "^2.0.0"
    npm-run-path "^5.1.0"
    onetime "^6.0.0"
    signal-exit "^3.0.7"
    strip-final-newline "^3.0.0"

exit@^0.1.2:
  version "0.1.2"


@@ 5336,7 5395,7 @@ get-stream@^4.0.0:
  dependencies:
    pump "^3.0.0"

get-stream@^6.0.0:
get-stream@^6.0.0, get-stream@^6.0.1:
  version "6.0.1"
  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
  integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==


@@ 5388,10 5447,10 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
    once "^1.3.0"
    path-is-absolute "^1.0.0"

glob@^9.2.0, glob@^9.3.0:
  version "9.3.0"
  resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.0.tgz#be6e50d172d025c3fcf87903ae25b36b787c0bb0"
  integrity sha512-EAZejC7JvnQINayvB/7BJbpZpNOJ8Lrw2OZNEvQxe0vaLn1SuwMcfV7/MNaX8L/T0wmptBFI4YMtDvSBxYDc7w==
glob@^9.2.0, glob@^9.3.2:
  version "9.3.2"
  resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.2.tgz#8528522e003819e63d11c979b30896e0eaf52eda"
  integrity sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==
  dependencies:
    fs.realpath "^1.0.0"
    minimatch "^7.4.1"


@@ 5768,6 5827,16 @@ human-signals@^2.1.0:
  resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
  integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==

human-signals@^4.3.0:
  version "4.3.1"
  resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2"
  integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==

husky@^8.0.3:
  version "8.0.3"
  resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184"
  integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==

iconv-lite@0.4.24:
  version "0.4.24"
  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"


@@ 6158,6 6227,11 @@ is-fullwidth-code-point@^3.0.0:
  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==

is-fullwidth-code-point@^4.0.0:
  version "4.0.0"
  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88"
  integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==

is-generator-fn@^2.0.0:
  version "2.1.0"
  resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"


@@ 6295,6 6369,11 @@ is-stream@^2.0.0:
  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
  integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==

is-stream@^3.0.0:
  version "3.0.0"
  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
  integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==

is-string@^1.0.5, is-string@^1.0.7:
  version "1.0.7"
  resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"


@@ 7088,7 7167,7 @@ levn@~0.3.0:
    prelude-ls "~1.1.2"
    type-check "~0.3.2"

lilconfig@^2.0.3:
lilconfig@2.1.0, lilconfig@^2.1.0:
  version "2.1.0"
  resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
  integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==


@@ 7098,6 7177,39 @@ lines-and-columns@^1.1.6:
  resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
  integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=

lint-staged@^13.1.2:
  version "13.2.0"
  resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.0.tgz#b7abaf79c91cd36d824f17b23a4ce5209206126a"
  integrity sha512-GbyK5iWinax5Dfw5obm2g2ccUiZXNGtAS4mCbJ0Lv4rq6iEtfBSjOYdcbOtAIFtM114t0vdpViDDetjVTSd8Vw==
  dependencies:
    chalk "5.2.0"
    cli-truncate "^3.1.0"
    commander "^10.0.0"
    debug "^4.3.4"
    execa "^7.0.0"
    lilconfig "2.1.0"
    listr2 "^5.0.7"
    micromatch "^4.0.5"
    normalize-path "^3.0.0"
    object-inspect "^1.12.3"
    pidtree "^0.6.0"
    string-argv "^0.3.1"
    yaml "^2.2.1"

listr2@^5.0.7:
  version "5.0.8"
  resolved "https://registry.yarnpkg.com/listr2/-/listr2-5.0.8.tgz#a9379ffeb4bd83a68931a65fb223a11510d6ba23"
  integrity sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==
  dependencies:
    cli-truncate "^2.1.0"
    colorette "^2.0.19"
    log-update "^4.0.0"
    p-map "^4.0.0"
    rfdc "^1.3.0"
    rxjs "^7.8.0"
    through "^2.3.8"
    wrap-ansi "^7.0.0"

loader-runner@^2.4.0:
  version "2.4.0"
  resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"


@@ 7215,6 7327,16 @@ lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17
  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==

log-update@^4.0.0:
  version "4.0.0"
  resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1"
  integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==
  dependencies:
    ansi-escapes "^4.3.0"
    cli-cursor "^3.1.0"
    slice-ansi "^4.0.0"
    wrap-ansi "^6.2.0"

loglevel@^1.6.8:
  version "1.7.0"
  resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0"


@@ 7326,10 7448,10 @@ md5.js@^1.3.4:
    inherits "^2.0.1"
    safe-buffer "^5.1.2"

mdn-data@2.0.14:
  version "2.0.14"
  resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50"
  integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==
mdn-data@2.0.28:
  version "2.0.28"
  resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba"
  integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==

mdn-data@2.0.30:
  version "2.0.30"


@@ 7462,6 7584,11 @@ mimic-fn@^2.1.0:
  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==

mimic-fn@^4.0.0:
  version "4.0.0"
  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
  integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==

min-indent@^1.0.0:
  version "1.0.1"
  resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"


@@ 7598,10 7725,10 @@ mkdirp@^1.0, mkdirp@^1.0.3, mkdirp@^1.0.4:
  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
  integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==

mkdirp@^2.1.5:
  version "2.1.5"
  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.5.tgz#78d7eaf15e069ba7b6b47d76dd94cfadf7a4062f"
  integrity sha512-jbjfql+shJtAPrFoKxHOXip4xS+kul9W3OzfzzrqueWK2QMGon2bFH2opl6W9EagBThjEz+iysyi/swOoVfB/w==
mkdirp@^2.1.6:
  version "2.1.6"
  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19"
  integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==

mousetrap@^1.5.2:
  version "1.6.5"


@@ 7793,11 7920,6 @@ normalize-range@^0.1.2:
  resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
  integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=

normalize-url@^6.0.1:
  version "6.1.0"
  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
  integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==

npm-run-path@^2.0.0:
  version "2.0.2"
  resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"


@@ 7812,6 7934,13 @@ npm-run-path@^4.0.1:
  dependencies:
    path-key "^3.0.0"

npm-run-path@^5.1.0:
  version "5.1.0"
  resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00"
  integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==
  dependencies:
    path-key "^4.0.0"

npmlog@^7.0.1:
  version "7.0.1"
  resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8"


@@ 7853,6 7982,11 @@ object-inspect@^1.12.2, object-inspect@^1.9.0:
  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
  integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==

object-inspect@^1.12.3:
  version "1.12.3"
  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
  integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==

object-is@^1.0.1:
  version "1.1.3"
  resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.3.tgz#2e3b9e65560137455ee3bd62aec4d90a2ea1cc81"


@@ 7957,13 8091,20 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
  dependencies:
    wrappy "1"

onetime@^5.1.2:
onetime@^5.1.0, onetime@^5.1.2:
  version "5.1.2"
  resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
  integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
  dependencies:
    mimic-fn "^2.1.0"

onetime@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4"
  integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==
  dependencies:
    mimic-fn "^4.0.0"

opencollective-postinstall@^2.0.2:
  version "2.0.3"
  resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259"


@@ 8195,6 8336,11 @@ path-key@^3.0.0, path-key@^3.1.0:
  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==

path-key@^4.0.0:
  version "4.0.0"
  resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
  integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==

path-parse@^1.0.7:
  version "1.0.7"
  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"


@@ 8312,6 8458,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatc
  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==

pidtree@^0.6.0:
  version "0.6.0"
  resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c"
  integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==

pify@^2.0.0:
  version "2.3.0"
  resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"


@@ 8375,43 8526,43 @@ postcss-calc@^8.2.3:
    postcss-selector-parser "^6.0.9"
    postcss-value-parser "^4.2.0"

postcss-colormin@^5.3.1:
  version "5.3.1"
  resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f"
  integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==
postcss-colormin@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.0.0.tgz#d4250652e952e1c0aca70c66942da93d3cdeaafe"
  integrity sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==
  dependencies:
    browserslist "^4.21.4"
    caniuse-api "^3.0.0"
    colord "^2.9.1"
    postcss-value-parser "^4.2.0"

postcss-convert-values@^5.1.3:
  version "5.1.3"
  resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393"
  integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==
postcss-convert-values@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz#ec94a954957e5c3f78f0e8f65dfcda95280b8996"
  integrity sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==
  dependencies:
    browserslist "^4.21.4"
    postcss-value-parser "^4.2.0"

postcss-discard-comments@^5.1.2:
  version "5.1.2"
  resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696"
  integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==
postcss-discard-comments@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz#9ca335e8b68919f301b24ba47dde226a42e535fe"
  integrity sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==

postcss-discard-duplicates@^5.1.0:
  version "5.1.0"
  resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848"
  integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==
postcss-discard-duplicates@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz#c26177a6c33070922e67e9a92c0fd23d443d1355"
  integrity sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==

postcss-discard-empty@^5.1.1:
  version "5.1.1"
  resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c"
  integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==
postcss-discard-empty@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz#06c1c4fce09e22d2a99e667c8550eb8a3a1b9aee"
  integrity sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==

postcss-discard-overridden@^5.1.0:
  version "5.1.0"
  resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e"
  integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==
postcss-discard-overridden@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz#49c5262db14e975e349692d9024442de7cd8e234"
  integrity sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==

postcss-loader@^4.3.0:
  version "4.3.0"


@@ 8429,53 8580,53 @@ postcss-media-query-parser@^0.2.3:
  resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244"
  integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=

postcss-merge-longhand@^5.1.7:
  version "5.1.7"
  resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16"
  integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==
postcss-merge-longhand@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz#6f627b27db939bce316eaa97e22400267e798d69"
  integrity sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==
  dependencies:
    postcss-value-parser "^4.2.0"
    stylehacks "^5.1.1"
    stylehacks "^6.0.0"

postcss-merge-rules@^5.1.4:
  version "5.1.4"
  resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c"
  integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==
postcss-merge-rules@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.0.0.tgz#0d95bc73541156b8b4e763bd0de2c3f9d0ecf013"
  integrity sha512-rCXkklftzEkniyv3f4mRCQzxD6oE4Quyh61uyWTUbCJ26Pv2hoz+fivJSsSBWxDBeScR4fKCfF3HHTcD7Ybqnw==
  dependencies:
    browserslist "^4.21.4"
    caniuse-api "^3.0.0"
    cssnano-utils "^3.1.0"
    cssnano-utils "^4.0.0"
    postcss-selector-parser "^6.0.5"

postcss-minify-font-values@^5.1.0:
  version "5.1.0"
  resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b"
  integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==
postcss-minify-font-values@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz#68d4a028f9fa5f61701974724b2cc9445d8e6070"
  integrity sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==
  dependencies:
    postcss-value-parser "^4.2.0"

postcss-minify-gradients@^5.1.1:
  version "5.1.1"
  resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c"
  integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==
postcss-minify-gradients@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz#22b5c88cc63091dadbad34e31ff958404d51d679"
  integrity sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==
  dependencies:
    colord "^2.9.1"
    cssnano-utils "^3.1.0"
    cssnano-utils "^4.0.0"
    postcss-value-parser "^4.2.0"

postcss-minify-params@^5.1.4:
  version "5.1.4"
  resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352"
  integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==
postcss-minify-params@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz#2b3a85a9e3b990d7a16866f430f5fd1d5961b539"
  integrity sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==
  dependencies:
    browserslist "^4.21.4"
    cssnano-utils "^3.1.0"
    cssnano-utils "^4.0.0"
    postcss-value-parser "^4.2.0"

postcss-minify-selectors@^5.2.1:
  version "5.2.1"
  resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6"
  integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==
postcss-minify-selectors@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz#5046c5e8680a586e5a0cad52cc9aa36d6be5bda2"
  integrity sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==
  dependencies:
    postcss-selector-parser "^6.0.5"



@@ 8507,89 8658,88 @@ postcss-modules-values@^4.0.0:
  dependencies:
    icss-utils "^5.0.0"

postcss-normalize-charset@^5.1.0:
  version "5.1.0"
  resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed"
  integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==
postcss-normalize-charset@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz#36cc12457259064969fb96f84df491652a4b0975"
  integrity sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==

postcss-normalize-display-values@^5.1.0:
  version "5.1.0"
  resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8"
  integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==
postcss-normalize-display-values@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz#8d2961415078644d8c6bbbdaf9a2fdd60f546cd4"
  integrity sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==
  dependencies:
    postcss-value-parser "^4.2.0"

postcss-normalize-positions@^5.1.1:
  version "5.1.1"
  resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92"
  integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==
postcss-normalize-positions@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz#25b96df99a69f8925f730eaee0be74416865e301"
  integrity sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==
  dependencies:
    postcss-value-parser "^4.2.0"

postcss-normalize-repeat-style@^5.1.1:
  version "5.1.1"
  resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2"
  integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==
postcss-normalize-repeat-style@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz#ddf30ad8762feb5b1eb97f39f251acd7b8353299"
  integrity sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==
  dependencies:
    postcss-value-parser "^4.2.0"

postcss-normalize-string@^5.1.0:
  version "5.1.0"
  resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228"
  integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==
postcss-normalize-string@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz#948282647a51e409d69dde7910f0ac2ff97cb5d8"
  integrity sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==
  dependencies:
    postcss-value-parser "^4.2.0"

postcss-normalize-timing-functions@^5.1.0:
  version "5.1.0"
  resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb"
  integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==
postcss-normalize-timing-functions@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz#5f13e650b8c43351989fc5de694525cc2539841c"
  integrity sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==
  dependencies:
    postcss-value-parser "^4.2.0"

postcss-normalize-unicode@^5.1.1:
  version "5.1.1"
  resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030"
  integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==
postcss-normalize-unicode@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz#741b3310f874616bdcf07764f5503695d3604730"
  integrity sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==
  dependencies:
    browserslist "^4.21.4"
    postcss-value-parser "^4.2.0"

postcss-normalize-url@^5.1.0:
  version "5.1.0"
  resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc"
  integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==
postcss-normalize-url@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz#d0a31e962a16401fb7deb7754b397a323fb650b4"
  integrity sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==
  dependencies:
    normalize-url "^6.0.1"
    postcss-value-parser "^4.2.0"

postcss-normalize-whitespace@^5.1.1:
  version "5.1.1"
  resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa"
  integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==
postcss-normalize-whitespace@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz#accb961caa42e25ca4179b60855b79b1f7129d4d"
  integrity sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==
  dependencies:
    postcss-value-parser "^4.2.0"

postcss-ordered-values@^5.1.3:
  version "5.1.3"
  resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38"
  integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==
postcss-ordered-values@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz#374704cdff25560d44061d17ba3c6308837a3218"
  integrity sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==
  dependencies:
    cssnano-utils "^3.1.0"
    cssnano-utils "^4.0.0"
    postcss-value-parser "^4.2.0"

postcss-reduce-initial@^5.1.2:
  version "5.1.2"
  resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6"
  integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==
postcss-reduce-initial@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz#7d16e83e60e27e2fa42f56ec0b426f1da332eca7"
  integrity sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==
  dependencies:
    browserslist "^4.21.4"
    caniuse-api "^3.0.0"

postcss-reduce-transforms@^5.1.0:
  version "5.1.0"
  resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9"
  integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==
postcss-reduce-transforms@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz#28ff2601a6d9b96a2f039b3501526e1f4d584a46"
  integrity sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==
  dependencies:
    postcss-value-parser "^4.2.0"



@@ 8616,18 8766,18 @@ postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selecto
    cssesc "^3.0.0"
    util-deprecate "^1.0.2"

postcss-svgo@^5.1.0:
  version "5.1.0"
  resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d"
  integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==
postcss-svgo@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.0.tgz#7b18742d38d4505a0455bbe70d52b49f00eaf69d"
  integrity sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==
  dependencies:
    postcss-value-parser "^4.2.0"
    svgo "^2.7.0"
    svgo "^3.0.2"

postcss-unique-selectors@^5.1.1:
  version "5.1.1"
  resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6"
  integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==
postcss-unique-selectors@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz#c94e9b0f7bffb1203894e42294b5a1b3fb34fbe1"
  integrity sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==
  dependencies:
    postcss-selector-parser "^6.0.5"



@@ 8677,10 8827,10 @@ prelude-ls@~1.1.2:
  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
  integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=

prettier@^2.8.5:
  version "2.8.5"
  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.5.tgz#3dd8ae1ebddc4f6aa419c9b64d8c8319a7e0d982"
  integrity sha512-3gzuxrHbKUePRBB4ZeU08VNkUcqEHaUaouNt0m7LGP4Hti/NuB07C7PPTM/LkWqXoJYJn2McEo5+kxPNrtQkLQ==
prettier@^2.8.7:
  version "2.8.7"
  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.7.tgz#bb79fc8729308549d28fe3a98fce73d2c0656450"
  integrity sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==

pretty-bytes@^5.3.0, pretty-bytes@^5.4.1:
  version "5.6.0"


@@ 9087,10 9237,10 @@ react-router@^4.3.1:
    prop-types "^15.6.1"
    warning "^4.0.1"

react-select@^5.7.1:
  version "5.7.1"
  resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.7.1.tgz#c85afa8a771d75c935ec698726a8fbfece662ed0"
  integrity sha512-u/brzm3B6vgI+PtxNyE4/18kXgaf6bn5sOAjKhaQ54EItBfW41SRLH1AJC5fefPnGM4JmMcM51t/HAVCi5GrpQ==
react-select@^5.7.2:
  version "5.7.2"
  resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.7.2.tgz#ccd40071b9429277983bf15526e7a5773a060e09"
  integrity sha512-cTlJkQ8YjV6T/js8wW0owTzht0hHGABh29vjLscY4HfZGkv7hc3FFTmRp9NzY/Ib1uQ36GieAKEjxpHdpCFpcA==
  dependencies:
    "@babel/runtime" "^7.12.0"
    "@emotion/cache" "^11.4.0"


@@ 9155,12 9305,12 @@ react-test-renderer@^16.14.0:
    react-is "^16.8.6"
    scheduler "^0.19.1"

react-textarea-autosize@^8.4.0:
  version "8.4.0"
  resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.4.0.tgz#4d0244d6a50caa897806b8c44abc0540a69bfc8c"
  integrity sha512-YrTFaEHLgJsi8sJVYHBzYn+mkP3prGkmP2DKb/tm0t7CLJY5t1Rxix8070LAKb0wby7bl/lf2EeHkuMihMZMwQ==
react-textarea-autosize@^8.4.1:
  version "8.4.1"
  resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz#bcfc5462727014b808b14ee916c01e275e8a8335"
  integrity sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q==
  dependencies:
    "@babel/runtime" "^7.10.2"
    "@babel/runtime" "^7.20.13"
    use-composed-ref "^1.3.0"
    use-latest "^1.2.1"



@@ 9484,6 9634,14 @@ resolve@^2.0.0-next.4:
    path-parse "^1.0.7"
    supports-preserve-symlinks-flag "^1.0.0"

restore-cursor@^3.1.0:
  version "3.1.0"
  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
  integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
  dependencies:
    onetime "^5.1.0"
    signal-exit "^3.0.2"

ret@~0.1.10:
  version "0.1.15"
  resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"


@@ 9499,6 9657,11 @@ reusify@^1.0.4:
  resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
  integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==

rfdc@^1.3.0:
  version "1.3.0"
  resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b"
  integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==

rimraf@^2.5.4, rimraf@^2.6.3:
  version "2.7.1"
  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"


@@ 9513,10 9676,10 @@ rimraf@^3.0.2:
  dependencies:
    glob "^7.1.3"

rimraf@^4.4.0:
  version "4.4.0"
  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.0.tgz#c7a9f45bb2ec058d2e60ef9aca5167974313d605"
  integrity sha512-X36S+qpCUR0HjXlkDe4NAOhS//aHH0Z+h8Ckf2auGJk3PTnx5rLmrHkwNdbVQuCSUhOyFrlRvFEllZOYE+yZGQ==
rimraf@^4.4.1:
  version "4.4.1"
  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755"
  integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==
  dependencies:
    glob "^9.2.0"



@@ 9564,6 9727,13 @@ run-queue@^1.0.0, run-queue@^1.0.3:
  dependencies:
    aproba "^1.1.1"

rxjs@^7.8.0:
  version "7.8.0"
  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4"
  integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==
  dependencies:
    tslib "^2.1.0"

safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
  version "5.1.2"
  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"


@@ 9606,10 9776,10 @@ sass-loader@^10.2.0:
    schema-utils "^3.0.0"
    semver "^7.3.2"

sass@^1.59.3:
  version "1.59.3"
  resolved "https://registry.yarnpkg.com/sass/-/sass-1.59.3.tgz#a1ddf855d75c70c26b4555df4403e1bbf8e4403f"
  integrity sha512-QCq98N3hX1jfTCoUAsF3eyGuXLsY7BCnCEg9qAact94Yc21npG2/mVOqoDvE0fCbWDqiM4WlcJQla0gWG2YlxQ==
sass@^1.60.0:
  version "1.60.0"
  resolved "https://registry.yarnpkg.com/sass/-/sass-1.60.0.tgz#657f0c23a302ac494b09a5ba8497b739fb5b5a81"
  integrity sha512-updbwW6fNb5gGm8qMXzVO7V4sWf7LMXnMly/JEyfbfERbVH46Fn6q02BX7/eHTdKpE7d+oTkMMQpFWNUMfFbgQ==
  dependencies:
    chokidar ">=3.0.0 <4.0.0"
    immutable "^4.0.0"


@@ 9862,6 10032,15 @@ slash@^3.0.0:
  resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
  integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==

slice-ansi@^3.0.0:
  version "3.0.0"
  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
  integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
  dependencies:
    ansi-styles "^4.0.0"
    astral-regex "^2.0.0"
    is-fullwidth-code-point "^3.0.0"

slice-ansi@^4.0.0:
  version "4.0.0"
  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"


@@ 9871,6 10050,14 @@ slice-ansi@^4.0.0:
    astral-regex "^2.0.0"
    is-fullwidth-code-point "^3.0.0"

slice-ansi@^5.0.0:
  version "5.0.0"
  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a"
  integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==
  dependencies:
    ansi-styles "^6.0.0"
    is-fullwidth-code-point "^4.0.0"

snapdragon-node@^2.0.1:
  version "2.1.1"
  resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"


@@ 10073,11 10260,6 @@ ssri@^8.0.0:
  dependencies:
    minipass "^3.1.1"

stable@^0.1.8:
  version "0.1.8"
  resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
  integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==

stack-generator@^2.0.5:
  version "2.0.5"
  resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.5.tgz#fb00e5b4ee97de603e0773ea78ce944d81596c36"


@@ 10171,6 10353,11 @@ stream-shift@^1.0.0:
  resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
  integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==

string-argv@^0.3.1:
  version "0.3.1"
  resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da"
  integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==

string-length@^4.0.1:
  version "4.0.1"
  resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1"


@@ 10197,6 10384,15 @@ string-width@^3.0.0, string-width@^3.1.0:
    is-fullwidth-code-point "^2.0.0"
    strip-ansi "^5.1.0"

string-width@^5.0.0:
  version "5.1.2"
  resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
  integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
  dependencies:
    eastasianwidth "^0.2.0"
    emoji-regex "^9.2.2"
    strip-ansi "^7.0.1"

string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.8:
  version "4.0.8"
  resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3"


@@ 10273,6 10469,13 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
  dependencies:
    ansi-regex "^5.0.1"

strip-ansi@^7.0.1:
  version "7.0.1"
  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2"
  integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==
  dependencies:
    ansi-regex "^6.0.1"

strip-bom@^3.0.0:
  version "3.0.0"
  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"


@@ 10298,6 10501,11 @@ strip-final-newline@^2.0.0:
  resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
  integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==

strip-final-newline@^3.0.0:
  version "3.0.0"
  resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
  integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==

strip-indent@^3.0.0:
  version "3.0.0"
  resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"


@@ 10315,10 10523,10 @@ style-search@^0.1.0:
  resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
  integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=

stylehacks@^5.1.1:
  version "5.1.1"
  resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9"
  integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==
stylehacks@^6.0.0:
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.0.0.tgz#9fdd7c217660dae0f62e14d51c89f6c01b3cb738"
  integrity sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==
  dependencies:
    browserslist "^4.21.4"
    postcss-selector-parser "^6.0.4"


@@ 10467,18 10675,17 @@ svg-tags@^1.0.0:
  resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
  integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=

svgo@^2.7.0:
  version "2.8.0"
  resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24"
  integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==
svgo@^3.0.2:
  version "3.0.2"
  resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.0.2.tgz#5e99eeea42c68ee0dc46aa16da093838c262fe0a"
  integrity sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==
  dependencies:
    "@trysound/sax" "0.2.0"
    commander "^7.2.0"
    css-select "^4.1.3"
    css-tree "^1.1.3"
    csso "^4.2.0"
    css-select "^5.1.0"
    css-tree "^2.2.1"
    csso "^5.0.5"
    picocolors "^1.0.0"
    stable "^0.1.8"

symbol-tree@^3.2.4:
  version "3.2.4"


@@ 10628,6 10835,11 @@ through2@^2.0.0:
    readable-stream "~2.3.6"
    xtend "~4.0.1"

through@^2.3.8:
  version "2.3.8"
  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
  integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==

thunky@^1.0.2:
  version "1.1.0"
  resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"


@@ 10768,6 10980,11 @@ tslib@^1.9.0:
  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
  integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==

tslib@^2.1.0:
  version "2.5.0"
  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
  integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==

tty-browserify@0.0.0:
  version "0.0.0"
  resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"


@@ 10827,6 11044,11 @@ type-fest@^0.20.2:
  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
  integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==

type-fest@^0.21.3:
  version "0.21.3"
  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
  integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==

type-fest@^0.6.0:
  version "0.6.0"
  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"


@@ 11640,6 11862,15 @@ wrap-ansi@^5.1.0:
    string-width "^3.0.0"
    strip-ansi "^5.0.0"

wrap-ansi@^6.2.0:
  version "6.2.0"
  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
  integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
  dependencies:
    ansi-styles "^4.0.0"
    string-width "^4.1.0"
    strip-ansi "^6.0.0"

wrap-ansi@^7.0.0:
  version "7.0.0"
  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"


@@ 11722,11 11953,16 @@ yallist@^3.0.2:
  resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
  integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==

yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2:
yaml@^1.10.0, yaml@^1.7.2:
  version "1.10.2"
  resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
  integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==

yaml@^2.2.1:
  version "2.2.1"
  resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.1.tgz#3014bf0482dcd15147aa8e56109ce8632cd60ce4"
  integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==

yargs-parser@^13.1.2:
  version "13.1.2"
  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"