diff --git a/.bundler-audit.yml b/.bundler-audit.yml index 3c681f34c66e6d..0671df390fed81 100644 --- a/.bundler-audit.yml +++ b/.bundler-audit.yml @@ -1,3 +1,6 @@ --- ignore: + # devise-two-factor advisory about brute-forcing TOTP + # We have rate-limits on authentication endpoints in place (including second + # factor verification) since Mastodon v3.2.0 - CVE-2024-0227 diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 21ee078d60357b..88979723c338eb 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -70,7 +70,7 @@ services: hard: -1 libretranslate: - image: libretranslate/libretranslate:v1.5.3 + image: libretranslate/libretranslate:v1.5.4 restart: unless-stopped volumes: - lt-data:/home/libretranslate/.local diff --git a/.github/workflows/test-ruby.yml b/.github/workflows/test-ruby.yml index 5274d92ac1da41..1c9665f32b21da 100644 --- a/.github/workflows/test-ruby.yml +++ b/.github/workflows/test-ruby.yml @@ -348,3 +348,93 @@ jobs: with: name: test-search-screenshots path: tmp/screenshots/ + + test-back-and-return: + name: Back to original and return test + runs-on: ubuntu-latest + + needs: + - build + + services: + postgres: + image: postgres:14-alpine + env: + POSTGRES_PASSWORD: postgres + POSTGRES_USER: postgres + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 5432:5432 + + redis: + image: redis:7-alpine + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 6379:6379 + + env: + DB_HOST: localhost + DB_USER: postgres + DB_PASS: postgres + DISABLE_SIMPLECOV: ${{ matrix.ruby-version != '.ruby-version' }} + RAILS_ENV: test + ALLOW_NOPAM: true + PAM_ENABLED: true + PAM_DEFAULT_SERVICE: pam_test + PAM_CONTROLLED_SERVICE: pam_test_controlled + OIDC_ENABLED: true + OIDC_SCOPE: read + SAML_ENABLED: true + CAS_ENABLED: true + BUNDLE_WITH: 'pam_authentication test' + GITHUB_RSPEC: ${{ matrix.ruby-version == '.ruby-version' && github.event.pull_request && 'true' }} + ES_ENABLED: false + BACK_UPSTREAM_FORCE: true + + strategy: + fail-fast: false + matrix: + ruby-version: + - '.ruby-version' + steps: + - uses: actions/checkout@v4 + + - uses: actions/download-artifact@v3 + with: + path: './' + name: ${{ github.sha }} + + - name: Expand archived asset artifacts + run: | + tar xvzf artifacts.tar.gz + + - name: Set up Ruby environment + uses: ./.github/actions/setup-ruby + with: + ruby-version: ${{ matrix.ruby-version}} + additional-system-dependencies: ffmpeg imagemagick libpam-dev + + - name: Load database schema + run: './bin/rails db:create db:schema:load db:seed' + + - name: Back to upstream schema + run: 'bundle exec rake dangerous:back_upstream' + + - name: Return to kmyblue + run: './bin/rails db:migrate' + + - run: bin/rspec + + - name: Upload coverage reports to Codecov + if: matrix.ruby-version == '.ruby-version' + uses: codecov/codecov-action@v3 + with: + files: coverage/lcov/mastodon-back-ret.lcov diff --git a/.rubocop.yml b/.rubocop.yml index 539fa227d3a2e1..e343bba02442df 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -121,9 +121,20 @@ Rails/LexicallyScopedActionFilter: Exclude: - 'app/controllers/auth/*' -Rails/SkipsModelValidations: +# Reason: These tasks are doing local work which do not need full env loaded +# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsrakeenvironment +Rails/RakeEnvironment: Exclude: - - 'db/*migrate/**/*' + - 'lib/tasks/auto_annotate_models.rake' + - 'lib/tasks/emojis.rake' + - 'lib/tasks/mastodon.rake' + - 'lib/tasks/repo.rake' + - 'lib/tasks/statistics.rake' + +# Reason: There are appropriate times to use these features +# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsskipsmodelvalidations +Rails/SkipsModelValidations: + Enabled: false # Reason: We want to preserve the ability to migrate from arbitrary old versions, # and cannot guarantee that every installation has run every migration as they upgrade. diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 1b6d0885f5d2b6..340143e9dc1081 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -13,13 +13,6 @@ Bundler/OrderedGems: Exclude: - 'Gemfile' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns. -# URISchemes: http, https -Layout/LineLength: - Exclude: - - 'app/models/account.rb' - Lint/NonLocalExitFromIterator: Exclude: - 'app/helpers/jsonld_helper.rb' @@ -71,53 +64,6 @@ Rails/OutputSafety: Exclude: - 'config/initializers/simple_form.rb' -# This cop supports unsafe autocorrection (--autocorrect-all). -# Configuration parameters: Include. -# Include: **/Rakefile, **/*.rake -Rails/RakeEnvironment: - Exclude: - - 'lib/tasks/auto_annotate_models.rake' - - 'lib/tasks/db.rake' - - 'lib/tasks/emojis.rake' - - 'lib/tasks/mastodon.rake' - - 'lib/tasks/repo.rake' - - 'lib/tasks/statistics.rake' - -# Configuration parameters: ForbiddenMethods, AllowedMethods. -# ForbiddenMethods: decrement!, decrement_counter, increment!, increment_counter, insert, insert!, insert_all, insert_all!, toggle!, touch, touch_all, update_all, update_attribute, update_column, update_columns, update_counters, upsert, upsert_all -Rails/SkipsModelValidations: - Exclude: - - 'app/controllers/admin/invites_controller.rb' - - 'app/controllers/concerns/session_tracking_concern.rb' - - 'app/models/concerns/account/merging.rb' - - 'app/models/concerns/expireable.rb' - - 'app/models/status.rb' - - 'app/models/trends/links.rb' - - 'app/models/trends/preview_card_batch.rb' - - 'app/models/trends/preview_card_provider_batch.rb' - - 'app/models/trends/status_batch.rb' - - 'app/models/trends/statuses.rb' - - 'app/models/trends/tag_batch.rb' - - 'app/models/trends/tags.rb' - - 'app/models/user.rb' - - 'app/services/activitypub/process_status_update_service.rb' - - 'app/services/approve_appeal_service.rb' - - 'app/services/block_domain_service.rb' - - 'app/services/delete_account_service.rb' - - 'app/services/process_mentions_service.rb' - - 'app/services/unallow_domain_service.rb' - - 'app/services/unblock_domain_service.rb' - - 'app/services/update_status_service.rb' - - 'app/workers/activitypub/post_upgrade_worker.rb' - - 'app/workers/move_worker.rb' - - 'app/workers/scheduler/ip_cleanup_scheduler.rb' - - 'app/workers/scheduler/scheduled_statuses_scheduler.rb' - - 'lib/mastodon/cli/accounts.rb' - - 'lib/mastodon/cli/maintenance.rb' - - 'spec/lib/activitypub/activity/follow_spec.rb' - - 'spec/services/follow_service_spec.rb' - - 'spec/services/update_account_service_spec.rb' - # Configuration parameters: Include. # Include: app/models/**/*.rb Rails/UniqueValidationWithoutIndex: diff --git a/Gemfile.lock b/Gemfile.lock index 9e3113fd85e964..df4eaa5f9efbf9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -21,35 +21,35 @@ GIT GEM remote: https://rubygems.org/ specs: - actioncable (7.1.2) - actionpack (= 7.1.2) - activesupport (= 7.1.2) + actioncable (7.1.3) + actionpack (= 7.1.3) + activesupport (= 7.1.3) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (7.1.2) - actionpack (= 7.1.2) - activejob (= 7.1.2) - activerecord (= 7.1.2) - activestorage (= 7.1.2) - activesupport (= 7.1.2) + actionmailbox (7.1.3) + actionpack (= 7.1.3) + activejob (= 7.1.3) + activerecord (= 7.1.3) + activestorage (= 7.1.3) + activesupport (= 7.1.3) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.1.2) - actionpack (= 7.1.2) - actionview (= 7.1.2) - activejob (= 7.1.2) - activesupport (= 7.1.2) + actionmailer (7.1.3) + actionpack (= 7.1.3) + actionview (= 7.1.3) + activejob (= 7.1.3) + activesupport (= 7.1.3) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.2) - actionpack (7.1.2) - actionview (= 7.1.2) - activesupport (= 7.1.2) + actionpack (7.1.3) + actionview (= 7.1.3) + activesupport (= 7.1.3) nokogiri (>= 1.8.5) racc rack (>= 2.2.4) @@ -57,15 +57,15 @@ GEM rack-test (>= 0.6.3) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - actiontext (7.1.2) - actionpack (= 7.1.2) - activerecord (= 7.1.2) - activestorage (= 7.1.2) - activesupport (= 7.1.2) + actiontext (7.1.3) + actionpack (= 7.1.3) + activerecord (= 7.1.3) + activestorage (= 7.1.3) + activesupport (= 7.1.3) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.1.2) - activesupport (= 7.1.2) + actionview (7.1.3) + activesupport (= 7.1.3) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) @@ -75,22 +75,22 @@ GEM activemodel (>= 4.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) - activejob (7.1.2) - activesupport (= 7.1.2) + activejob (7.1.3) + activesupport (= 7.1.3) globalid (>= 0.3.6) - activemodel (7.1.2) - activesupport (= 7.1.2) - activerecord (7.1.2) - activemodel (= 7.1.2) - activesupport (= 7.1.2) + activemodel (7.1.3) + activesupport (= 7.1.3) + activerecord (7.1.3) + activemodel (= 7.1.3) + activesupport (= 7.1.3) timeout (>= 0.4.0) - activestorage (7.1.2) - actionpack (= 7.1.2) - activejob (= 7.1.2) - activerecord (= 7.1.2) - activesupport (= 7.1.2) + activestorage (7.1.3) + actionpack (= 7.1.3) + activejob (= 7.1.3) + activerecord (= 7.1.3) + activesupport (= 7.1.3) marcel (~> 1.0) - activesupport (7.1.2) + activesupport (7.1.3) base64 bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) @@ -155,7 +155,7 @@ GEM binding_of_caller (1.0.0) debug_inspector (>= 0.0.1) blurhash (0.1.7) - bootsnap (1.17.0) + bootsnap (1.17.1) msgpack (~> 1.2) brakeman (6.1.1) racc @@ -188,7 +188,7 @@ GEM climate_control (0.2.0) cocoon (1.2.15) color_diff (0.1) - concurrent-ruby (1.2.2) + concurrent-ruby (1.2.3) connection_pool (2.4.1) cose (1.3.0) cbor (~> 0.5.9) @@ -257,7 +257,7 @@ GEM tzinfo excon (0.109.0) fabrication (2.31.0) - faker (3.2.2) + faker (3.2.3) i18n (>= 1.8.11, < 2) faraday (1.10.3) faraday-em_http (~> 1.0) @@ -454,7 +454,7 @@ GEM uri net-http-persistent (4.0.2) connection_pool (~> 2.2) - net-imap (0.4.4) + net-imap (0.4.9.1) date net-protocol net-ldap (0.19.0) @@ -462,7 +462,7 @@ GEM net-protocol net-protocol (0.2.2) timeout - net-smtp (0.4.0) + net-smtp (0.4.0.1) net-protocol nio4r (2.5.9) nokogiri (1.16.0) @@ -552,27 +552,27 @@ GEM rack rack-proxy (0.7.6) rack - rack-session (1.0.1) + rack-session (1.0.2) rack (< 3) rack-test (2.1.0) rack (>= 1.3) rackup (1.0.0) rack (< 3) webrick - rails (7.1.2) - actioncable (= 7.1.2) - actionmailbox (= 7.1.2) - actionmailer (= 7.1.2) - actionpack (= 7.1.2) - actiontext (= 7.1.2) - actionview (= 7.1.2) - activejob (= 7.1.2) - activemodel (= 7.1.2) - activerecord (= 7.1.2) - activestorage (= 7.1.2) - activesupport (= 7.1.2) + rails (7.1.3) + actioncable (= 7.1.3) + actionmailbox (= 7.1.3) + actionmailer (= 7.1.3) + actionpack (= 7.1.3) + actiontext (= 7.1.3) + actionview (= 7.1.3) + activejob (= 7.1.3) + activemodel (= 7.1.3) + activerecord (= 7.1.3) + activestorage (= 7.1.3) + activesupport (= 7.1.3) bundler (>= 1.15.0) - railties (= 7.1.2) + railties (= 7.1.3) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -587,9 +587,9 @@ GEM rails-i18n (7.0.8) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.1.2) - actionpack (= 7.1.2) - activesupport (= 7.1.2) + railties (7.1.3) + actionpack (= 7.1.3) + activesupport (= 7.1.3) irb rackup (>= 1.0.0) rake (>= 12.2) @@ -732,7 +732,7 @@ GEM simplecov-lcov (0.8.0) simplecov_json_formatter (0.1.4) smart_properties (1.17.0) - stackprof (0.2.25) + stackprof (0.2.26) statsd-ruby (1.5.0) stoplight (3.0.2) redlock (~> 1.0) @@ -958,4 +958,4 @@ RUBY VERSION ruby 3.2.2p53 BUNDLED WITH - 2.4.20 + 2.5.4 diff --git a/app/controllers/admin/confirmations_controller.rb b/app/controllers/admin/confirmations_controller.rb index 6f4e42679722e2..7ccf5c9012de7c 100644 --- a/app/controllers/admin/confirmations_controller.rb +++ b/app/controllers/admin/confirmations_controller.rb @@ -7,7 +7,7 @@ class ConfirmationsController < BaseController def create authorize @user, :confirm? - @user.confirm! + @user.mark_email_as_confirmed! log_action :confirm, @user redirect_to admin_accounts_path end diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb index 23465b52488916..a2b5037f56aa5d 100644 --- a/app/controllers/statuses_controller.rb +++ b/app/controllers/statuses_controller.rb @@ -85,9 +85,7 @@ def misskey_software? info = InstanceInfo.find_by(domain: signed_request_account.domain) return false if info.nil? - @misskey_software = %w(misskey calckey cherrypick sharkey).include?(info.software) && - ((@status.public_unlisted_visibility? && @status.account.user&.setting_reject_public_unlisted_subscription) || - (@status.unlisted_visibility? && @status.account.user&.setting_reject_unlisted_subscription)) + @misskey_software = %w(misskey calckey cherrypick sharkey).include?(info.software) && @status.sending_maybe_compromised_privacy? end def status_activity_serializer diff --git a/app/helpers/accounts_helper.rb b/app/helpers/accounts_helper.rb index ce7e5455fdb7a4..6136c82ce796c1 100644 --- a/app/helpers/accounts_helper.rb +++ b/app/helpers/accounts_helper.rb @@ -27,20 +27,24 @@ def account_action_button(account) end end + def account_formatted_stat(value) + number_to_human(value, precision: 3, strip_insignificant_zeros: true) + end + def account_description(account) prepend_str = [ [ - number_to_human(account.public_statuses_count, precision: 3, strip_insignificant_zeros: true), + account_formatted_stat(account.public_statuses_count), I18n.t('accounts.posts', count: account.public_statuses_count), ].join(' '), [ - number_to_human(account.public_following_count, precision: 3, strip_insignificant_zeros: true), + account_formatted_stat(account.public_following_count), I18n.t('accounts.following', count: account.public_following_count), ].join(' '), [ - number_to_human(account.public_followers_count, precision: 3, strip_insignificant_zeros: true), + account_formatted_stat(account.public_followers_count), I18n.t('accounts.followers', count: account.public_followers_count), ].join(' '), ].join(', ') diff --git a/app/helpers/mascot_helper.rb b/app/helpers/mascot_helper.rb index 8ee04383ecea46..34b656411ebce3 100644 --- a/app/helpers/mascot_helper.rb +++ b/app/helpers/mascot_helper.rb @@ -2,7 +2,7 @@ module MascotHelper def mascot_url - full_asset_url(instance_presenter.mascot&.file&.url || asset_pack_path('media/images/elephant_ui_plane.svg')) + full_asset_url(instance_presenter.mascot&.file&.url || frontend_asset_path('images/elephant_ui_plane.svg')) end def instance_presenter diff --git a/app/helpers/routing_helper.rb b/app/helpers/routing_helper.rb index 2fb9ce72cbeb0e..15d988f64d2ef2 100644 --- a/app/helpers/routing_helper.rb +++ b/app/helpers/routing_helper.rb @@ -24,8 +24,12 @@ def asset_host Rails.configuration.action_controller.asset_host || root_url end - def full_pack_url(source, **options) - full_asset_url(asset_pack_path(source, **options)) + def frontend_asset_path(source, **options) + asset_pack_path("media/#{source}", **options) + end + + def frontend_asset_url(source, **options) + full_asset_url(frontend_asset_path(source, **options)) end def use_storage? diff --git a/app/javascript/fonts/inter/inter-variable-font-slnt-wght.woff2 b/app/javascript/fonts/inter/inter-variable-font-slnt-wght.woff2 new file mode 100644 index 00000000000000..e6345f2e3d462e Binary files /dev/null and b/app/javascript/fonts/inter/inter-variable-font-slnt-wght.woff2 differ diff --git a/app/javascript/images/mailer-new/common/header-bg-end.png b/app/javascript/images/mailer-new/common/header-bg-end.png new file mode 100644 index 00000000000000..900196678a3346 Binary files /dev/null and b/app/javascript/images/mailer-new/common/header-bg-end.png differ diff --git a/app/javascript/images/mailer-new/common/header-bg-start.png b/app/javascript/images/mailer-new/common/header-bg-start.png new file mode 100644 index 00000000000000..0037c1ad933ec8 Binary files /dev/null and b/app/javascript/images/mailer-new/common/header-bg-start.png differ diff --git a/app/javascript/images/mailer-new/common/logo-footer.png b/app/javascript/images/mailer-new/common/logo-footer.png new file mode 100644 index 00000000000000..2baafd8d7f8af9 Binary files /dev/null and b/app/javascript/images/mailer-new/common/logo-footer.png differ diff --git a/app/javascript/images/mailer-new/common/logo-header.png b/app/javascript/images/mailer-new/common/logo-header.png new file mode 100644 index 00000000000000..46a6bddaa104c7 Binary files /dev/null and b/app/javascript/images/mailer-new/common/logo-header.png differ diff --git a/app/javascript/images/mailer-new/heading/2fa-disabled.png b/app/javascript/images/mailer-new/heading/2fa-disabled.png new file mode 100644 index 00000000000000..b1e342a87cdcbc Binary files /dev/null and b/app/javascript/images/mailer-new/heading/2fa-disabled.png differ diff --git a/app/javascript/images/mailer-new/heading/2fa-enabled.png b/app/javascript/images/mailer-new/heading/2fa-enabled.png new file mode 100644 index 00000000000000..3ce3e04f848c2a Binary files /dev/null and b/app/javascript/images/mailer-new/heading/2fa-enabled.png differ diff --git a/app/javascript/images/mailer-new/heading/2fa-recovery.png b/app/javascript/images/mailer-new/heading/2fa-recovery.png new file mode 100644 index 00000000000000..cefb21e1eb0e2b Binary files /dev/null and b/app/javascript/images/mailer-new/heading/2fa-recovery.png differ diff --git a/app/javascript/images/mailer-new/heading/appeal-approved.png b/app/javascript/images/mailer-new/heading/appeal-approved.png new file mode 100755 index 00000000000000..b2476ec346b8dd Binary files /dev/null and b/app/javascript/images/mailer-new/heading/appeal-approved.png differ diff --git a/app/javascript/images/mailer-new/heading/appeal-rejected.png b/app/javascript/images/mailer-new/heading/appeal-rejected.png new file mode 100644 index 00000000000000..7ae38ad0c18ae1 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/appeal-rejected.png differ diff --git a/app/javascript/images/mailer-new/heading/archive.png b/app/javascript/images/mailer-new/heading/archive.png new file mode 100644 index 00000000000000..b0c7fad84dc54d Binary files /dev/null and b/app/javascript/images/mailer-new/heading/archive.png differ diff --git a/app/javascript/images/mailer-new/heading/boost.png b/app/javascript/images/mailer-new/heading/boost.png new file mode 100644 index 00000000000000..e33b759976fae8 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/boost.png differ diff --git a/app/javascript/images/mailer-new/heading/email.png b/app/javascript/images/mailer-new/heading/email.png new file mode 100644 index 00000000000000..c922c5239eefc9 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/email.png differ diff --git a/app/javascript/images/mailer-new/heading/favorite.png b/app/javascript/images/mailer-new/heading/favorite.png new file mode 100644 index 00000000000000..0e483ee9b2b18c Binary files /dev/null and b/app/javascript/images/mailer-new/heading/favorite.png differ diff --git a/app/javascript/images/mailer-new/heading/follow.png b/app/javascript/images/mailer-new/heading/follow.png new file mode 100644 index 00000000000000..ff5b7e00424a68 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/follow.png differ diff --git a/app/javascript/images/mailer-new/heading/key-added.png b/app/javascript/images/mailer-new/heading/key-added.png new file mode 100755 index 00000000000000..82dcd464bf3213 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/key-added.png differ diff --git a/app/javascript/images/mailer-new/heading/key-deleted.png b/app/javascript/images/mailer-new/heading/key-deleted.png new file mode 100755 index 00000000000000..2930f591a09963 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/key-deleted.png differ diff --git a/app/javascript/images/mailer-new/heading/key-disabled.png b/app/javascript/images/mailer-new/heading/key-disabled.png new file mode 100755 index 00000000000000..e0f259359aebd3 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/key-disabled.png differ diff --git a/app/javascript/images/mailer-new/heading/key-enabled.png b/app/javascript/images/mailer-new/heading/key-enabled.png new file mode 100644 index 00000000000000..b2476ec346b8dd Binary files /dev/null and b/app/javascript/images/mailer-new/heading/key-enabled.png differ diff --git a/app/javascript/images/mailer-new/heading/login.png b/app/javascript/images/mailer-new/heading/login.png new file mode 100644 index 00000000000000..89a6e9ee335aa8 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/login.png differ diff --git a/app/javascript/images/mailer-new/heading/mention.png b/app/javascript/images/mailer-new/heading/mention.png new file mode 100644 index 00000000000000..c4dccff8ef2f2f Binary files /dev/null and b/app/javascript/images/mailer-new/heading/mention.png differ diff --git a/app/javascript/images/mailer-new/heading/password.png b/app/javascript/images/mailer-new/heading/password.png new file mode 100755 index 00000000000000..552c7c06870404 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/password.png differ diff --git a/app/javascript/images/mailer-new/heading/user.png b/app/javascript/images/mailer-new/heading/user.png new file mode 100644 index 00000000000000..f1dd58a18d2f36 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/user.png differ diff --git a/app/javascript/images/mailer-new/heading/warning.png b/app/javascript/images/mailer-new/heading/warning.png new file mode 100755 index 00000000000000..7764837abef6e6 Binary files /dev/null and b/app/javascript/images/mailer-new/heading/warning.png differ diff --git a/app/javascript/images/mailer-new/welcome/checkbox-off.png b/app/javascript/images/mailer-new/welcome/checkbox-off.png new file mode 100644 index 00000000000000..51c190efe6dde5 Binary files /dev/null and b/app/javascript/images/mailer-new/welcome/checkbox-off.png differ diff --git a/app/javascript/images/mailer-new/welcome/checkbox-on.png b/app/javascript/images/mailer-new/welcome/checkbox-on.png new file mode 100644 index 00000000000000..162095e7df3df7 Binary files /dev/null and b/app/javascript/images/mailer-new/welcome/checkbox-on.png differ diff --git a/app/javascript/images/mailer-new/welcome/step1-on.png b/app/javascript/images/mailer-new/welcome/step1-on.png new file mode 100644 index 00000000000000..c3776d17dfb7e7 Binary files /dev/null and b/app/javascript/images/mailer-new/welcome/step1-on.png differ diff --git a/app/javascript/images/mailer-new/welcome/step2-off.png b/app/javascript/images/mailer-new/welcome/step2-off.png new file mode 100755 index 00000000000000..a262454d2d51eb Binary files /dev/null and b/app/javascript/images/mailer-new/welcome/step2-off.png differ diff --git a/app/javascript/images/mailer-new/welcome/step3-off.png b/app/javascript/images/mailer-new/welcome/step3-off.png new file mode 100755 index 00000000000000..972de65a569aff Binary files /dev/null and b/app/javascript/images/mailer-new/welcome/step3-off.png differ diff --git a/app/javascript/images/mailer-new/welcome/step4-off.png b/app/javascript/images/mailer-new/welcome/step4-off.png new file mode 100755 index 00000000000000..f45e9a2c9ac181 Binary files /dev/null and b/app/javascript/images/mailer-new/welcome/step4-off.png differ diff --git a/app/javascript/images/mailer-new/welcome/step5-off.png b/app/javascript/images/mailer-new/welcome/step5-off.png new file mode 100755 index 00000000000000..ca270f54781c5a Binary files /dev/null and b/app/javascript/images/mailer-new/welcome/step5-off.png differ diff --git a/app/javascript/mastodon/components/attachment_list.jsx b/app/javascript/mastodon/components/attachment_list.jsx index 59d31a3038d39b..c5ac046751893d 100644 --- a/app/javascript/mastodon/components/attachment_list.jsx +++ b/app/javascript/mastodon/components/attachment_list.jsx @@ -7,7 +7,7 @@ import classNames from 'classnames'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import LinkIcon from 'mastodon/../material-icons/400-24px/link.svg?react'; +import LinkIcon from '@/material-icons/400-24px/link.svg?react'; import { Icon } from 'mastodon/components/icon'; const filename = url => url.split('/').pop().split('#')[0].split('?')[0]; diff --git a/app/javascript/mastodon/components/badge.jsx b/app/javascript/mastodon/components/badge.jsx index bac80965665e1e..646655c249b872 100644 --- a/app/javascript/mastodon/components/badge.jsx +++ b/app/javascript/mastodon/components/badge.jsx @@ -2,9 +2,9 @@ import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; -import GroupsIcon from 'mastodon/../material-icons/400-24px/group.svg?react'; -import PersonIcon from 'mastodon/../material-icons/400-24px/person.svg?react'; -import SmartToyIcon from 'mastodon/../material-icons/400-24px/smart_toy.svg?react'; +import GroupsIcon from '@/material-icons/400-24px/group.svg?react'; +import PersonIcon from '@/material-icons/400-24px/person.svg?react'; +import SmartToyIcon from '@/material-icons/400-24px/smart_toy.svg?react'; export const Badge = ({ icon, label, domain }) => ( diff --git a/app/javascript/mastodon/components/column_back_button.tsx b/app/javascript/mastodon/components/column_back_button.tsx index f803f8628936e8..af38c1e1106818 100644 --- a/app/javascript/mastodon/components/column_back_button.tsx +++ b/app/javascript/mastodon/components/column_back_button.tsx @@ -2,7 +2,7 @@ import { useCallback } from 'react'; import { FormattedMessage } from 'react-intl'; -import ArrowBackIcon from 'mastodon/../material-icons/400-24px/arrow_back.svg?react'; +import ArrowBackIcon from '@/material-icons/400-24px/arrow_back.svg?react'; import { Icon } from 'mastodon/components/icon'; import { ButtonInTabsBar } from 'mastodon/features/ui/util/columns_context'; diff --git a/app/javascript/mastodon/components/column_header.jsx b/app/javascript/mastodon/components/column_header.jsx index 3e53902de63ec4..901888e7504c3d 100644 --- a/app/javascript/mastodon/components/column_header.jsx +++ b/app/javascript/mastodon/components/column_header.jsx @@ -6,12 +6,12 @@ import { FormattedMessage, injectIntl, defineMessages } from 'react-intl'; import classNames from 'classnames'; import { withRouter } from 'react-router-dom'; -import AddIcon from 'mastodon/../material-icons/400-24px/add.svg?react'; -import ArrowBackIcon from 'mastodon/../material-icons/400-24px/arrow_back.svg?react'; -import ChevronLeftIcon from 'mastodon/../material-icons/400-24px/chevron_left.svg?react'; -import ChevronRightIcon from 'mastodon/../material-icons/400-24px/chevron_right.svg?react'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; -import TuneIcon from 'mastodon/../material-icons/400-24px/tune.svg?react'; +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import ArrowBackIcon from '@/material-icons/400-24px/arrow_back.svg?react'; +import ChevronLeftIcon from '@/material-icons/400-24px/chevron_left.svg?react'; +import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; +import TuneIcon from '@/material-icons/400-24px/tune.svg?react'; import { Icon } from 'mastodon/components/icon'; import { ButtonInTabsBar, useColumnsContext } from 'mastodon/features/ui/util/columns_context'; import { WithRouterPropTypes } from 'mastodon/utils/react_router'; diff --git a/app/javascript/mastodon/components/copy_icon_button.jsx b/app/javascript/mastodon/components/copy_icon_button.jsx index c5216e8f8008e2..0c3c6c290b2637 100644 --- a/app/javascript/mastodon/components/copy_icon_button.jsx +++ b/app/javascript/mastodon/components/copy_icon_button.jsx @@ -7,7 +7,7 @@ import classNames from 'classnames'; import { useDispatch } from 'react-redux'; -import ContentCopyIcon from 'mastodon/../material-icons/400-24px/content_copy.svg?react'; +import ContentCopyIcon from '@/material-icons/400-24px/content_copy.svg?react'; import { showAlert } from 'mastodon/actions/alerts'; import { IconButton } from 'mastodon/components/icon_button'; diff --git a/app/javascript/mastodon/components/dismissable_banner.tsx b/app/javascript/mastodon/components/dismissable_banner.tsx index d3bc28b9b96bca..bc40e46f8da114 100644 --- a/app/javascript/mastodon/components/dismissable_banner.tsx +++ b/app/javascript/mastodon/components/dismissable_banner.tsx @@ -8,7 +8,7 @@ import { useCallback, useState, useEffect } from 'react'; import { defineMessages, useIntl } from 'react-intl'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { changeSetting } from 'mastodon/actions/settings'; import { bannerSettings } from 'mastodon/settings'; import { useAppSelector, useAppDispatch } from 'mastodon/store'; diff --git a/app/javascript/mastodon/components/domain.tsx b/app/javascript/mastodon/components/domain.tsx index 858962d8ca79e5..4cd93bcfadb6ef 100644 --- a/app/javascript/mastodon/components/domain.tsx +++ b/app/javascript/mastodon/components/domain.tsx @@ -2,7 +2,7 @@ import { useCallback } from 'react'; import { defineMessages, useIntl } from 'react-intl'; -import LockOpenIcon from 'mastodon/../material-icons/400-24px/no_encryption.svg?react'; +import LockOpenIcon from '@/material-icons/400-24px/no_encryption.svg?react'; import { IconButton } from './icon_button'; diff --git a/app/javascript/mastodon/components/dropdown_menu.jsx b/app/javascript/mastodon/components/dropdown_menu.jsx index a8fcfd10978210..04c8bb09800ffa 100644 --- a/app/javascript/mastodon/components/dropdown_menu.jsx +++ b/app/javascript/mastodon/components/dropdown_menu.jsx @@ -9,7 +9,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { supportsPassiveEvents } from 'detect-passive-events'; import Overlay from 'react-overlays/Overlay'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { CircularProgress } from 'mastodon/components/circular_progress'; import { WithRouterPropTypes } from 'mastodon/utils/react_router'; diff --git a/app/javascript/mastodon/components/edited_timestamp/index.jsx b/app/javascript/mastodon/components/edited_timestamp/index.jsx index 7497ab9922dcaa..4ca00f8dda9713 100644 --- a/app/javascript/mastodon/components/edited_timestamp/index.jsx +++ b/app/javascript/mastodon/components/edited_timestamp/index.jsx @@ -5,7 +5,7 @@ import { FormattedMessage, injectIntl } from 'react-intl'; import { connect } from 'react-redux'; -import ArrowDropDownIcon from 'mastodon/../material-icons/400-24px/arrow_drop_down.svg?react'; +import ArrowDropDownIcon from '@/material-icons/400-24px/arrow_drop_down.svg?react'; import { openModal } from 'mastodon/actions/modal'; import { Icon } from 'mastodon/components/icon'; import InlineAccount from 'mastodon/components/inline_account'; diff --git a/app/javascript/mastodon/components/icon.tsx b/app/javascript/mastodon/components/icon.tsx index 948492d91c21a0..f388380c44aeb8 100644 --- a/app/javascript/mastodon/components/icon.tsx +++ b/app/javascript/mastodon/components/icon.tsx @@ -1,6 +1,6 @@ import classNames from 'classnames'; -import CheckBoxOutlineBlankIcon from 'mastodon/../material-icons/400-24px/check_box_outline_blank.svg?react'; +import CheckBoxOutlineBlankIcon from '@/material-icons/400-24px/check_box_outline_blank.svg?react'; import { isProduction } from 'mastodon/utils/environment'; interface SVGPropsWithTitle extends React.SVGProps { diff --git a/app/javascript/mastodon/components/load_gap.tsx b/app/javascript/mastodon/components/load_gap.tsx index 2a233b6a1cd644..1d4193a35951ab 100644 --- a/app/javascript/mastodon/components/load_gap.tsx +++ b/app/javascript/mastodon/components/load_gap.tsx @@ -2,7 +2,7 @@ import { useCallback } from 'react'; import { useIntl, defineMessages } from 'react-intl'; -import MoreHorizIcon from 'mastodon/../material-icons/400-24px/more_horiz.svg?react'; +import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; import { Icon } from 'mastodon/components/icon'; const messages = defineMessages({ diff --git a/app/javascript/mastodon/components/logo.tsx b/app/javascript/mastodon/components/logo.tsx index 928aa29a7cbc42..b7f8bd6695008a 100644 --- a/app/javascript/mastodon/components/logo.tsx +++ b/app/javascript/mastodon/components/logo.tsx @@ -1,4 +1,4 @@ -import logo from 'mastodon/../images/logo.svg'; +import logo from '@/images/logo.svg'; export const WordmarkLogo: React.FC = () => ( diff --git a/app/javascript/mastodon/components/media_gallery.jsx b/app/javascript/mastodon/components/media_gallery.jsx index c4f97ea9b0aa2c..d3b5b284b8e46a 100644 --- a/app/javascript/mastodon/components/media_gallery.jsx +++ b/app/javascript/mastodon/components/media_gallery.jsx @@ -10,7 +10,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { debounce } from 'lodash'; -import VisibilityOffIcon from 'mastodon/../material-icons/400-24px/visibility_off.svg?react'; +import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; import { Blurhash } from 'mastodon/components/blurhash'; import { autoPlayGif, displayMedia, displayMediaExpand, useBlurhash } from '../initial_state'; @@ -119,7 +119,7 @@ class Item extends PureComponent { } if (attachment.get('description')?.length > 0) { - badges.push(ALT); + badges.push(ALT); } const description = attachment.getIn(['translation', 'description']) || attachment.get('description'); diff --git a/app/javascript/mastodon/components/picture_in_picture_placeholder.jsx b/app/javascript/mastodon/components/picture_in_picture_placeholder.jsx index e8cfe6cb321641..50f91a92753cbb 100644 --- a/app/javascript/mastodon/components/picture_in_picture_placeholder.jsx +++ b/app/javascript/mastodon/components/picture_in_picture_placeholder.jsx @@ -5,7 +5,7 @@ import { FormattedMessage } from 'react-intl'; import { connect } from 'react-redux'; -import CancelPresentationIcon from 'mastodon/../material-icons/400-24px/cancel_presentation.svg?react'; +import CancelPresentationIcon from '@/material-icons/400-24px/cancel_presentation.svg?react'; import { removePictureInPicture } from 'mastodon/actions/picture_in_picture'; import { Icon } from 'mastodon/components/icon'; diff --git a/app/javascript/mastodon/components/poll.jsx b/app/javascript/mastodon/components/poll.jsx index f85c47bb40207c..c7036d111b28bd 100644 --- a/app/javascript/mastodon/components/poll.jsx +++ b/app/javascript/mastodon/components/poll.jsx @@ -10,7 +10,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import escapeTextContentForBrowser from 'escape-html'; import spring from 'react-motion/lib/spring'; -import CheckIcon from 'mastodon/../material-icons/400-24px/check.svg?react'; +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; import { Icon } from 'mastodon/components/icon'; import emojify from 'mastodon/features/emoji/emoji'; import Motion from 'mastodon/features/ui/util/optional_motion'; diff --git a/app/javascript/mastodon/components/regeneration_indicator.jsx b/app/javascript/mastodon/components/regeneration_indicator.jsx index 052e25f25f761f..d42a7d7c72b204 100644 --- a/app/javascript/mastodon/components/regeneration_indicator.jsx +++ b/app/javascript/mastodon/components/regeneration_indicator.jsx @@ -1,6 +1,6 @@ import { FormattedMessage } from 'react-intl'; -import illustration from 'mastodon/../images/elephant_ui_working.svg'; +import illustration from '@/images/elephant_ui_working.svg'; const RegenerationIndicator = () => (
diff --git a/app/javascript/mastodon/components/searchability_icon.tsx b/app/javascript/mastodon/components/searchability_icon.tsx index 20396d915a5af7..c660b80a310586 100644 --- a/app/javascript/mastodon/components/searchability_icon.tsx +++ b/app/javascript/mastodon/components/searchability_icon.tsx @@ -1,10 +1,10 @@ import { defineMessages, useIntl } from 'react-intl'; -import AlternateEmailIcon from 'mastodon/../material-icons/400-24px/alternate_email.svg?react'; -import PublicUnlistedIcon from 'mastodon/../material-icons/400-24px/cloud.svg?react'; -import LockIcon from 'mastodon/../material-icons/400-24px/lock.svg?react'; -import LockOpenIcon from 'mastodon/../material-icons/400-24px/no_encryption.svg?react'; -import PublicIcon from 'mastodon/../material-icons/400-24px/public.svg?react'; +import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; +import PublicUnlistedIcon from '@/material-icons/400-24px/cloud.svg?react'; +import LockIcon from '@/material-icons/400-24px/lock.svg?react'; +import LockOpenIcon from '@/material-icons/400-24px/no_encryption.svg?react'; +import PublicIcon from '@/material-icons/400-24px/public.svg?react'; import { Icon } from './icon'; diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index fe3ca48ab0f366..0fbc86fa164a5e 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -9,14 +9,14 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import { HotKeys } from 'react-hotkeys'; -import AlternateEmailIcon from 'mastodon/../material-icons/400-24px/alternate_email.svg?react'; -import QuoteIcon from 'mastodon/../material-icons/400-24px/format_quote.svg?react'; -import ReferenceIcon from 'mastodon/../material-icons/400-24px/link.svg?react'; -import PushPinIcon from 'mastodon/../material-icons/400-24px/push_pin.svg?react'; -import RepeatIcon from 'mastodon/../material-icons/400-24px/repeat.svg?react'; -import ReplyIcon from 'mastodon/../material-icons/400-24px/reply.svg?react'; -import LimitedIcon from 'mastodon/../material-icons/400-24px/shield.svg?react'; -import TimerIcon from 'mastodon/../material-icons/400-24px/timer.svg?react'; +import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; +import QuoteIcon from '@/material-icons/400-24px/format_quote.svg?react'; +import ReferenceIcon from '@/material-icons/400-24px/link.svg?react'; +import PushPinIcon from '@/material-icons/400-24px/push_pin.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; +import LimitedIcon from '@/material-icons/400-24px/shield.svg?react'; +import TimerIcon from '@/material-icons/400-24px/timer.svg?react'; import AttachmentList from 'mastodon/components/attachment_list'; import { Icon } from 'mastodon/components/icon'; import PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder'; diff --git a/app/javascript/mastodon/components/status_action_bar.jsx b/app/javascript/mastodon/components/status_action_bar.jsx index a45061ea631faa..2232748d68bff8 100644 --- a/app/javascript/mastodon/components/status_action_bar.jsx +++ b/app/javascript/mastodon/components/status_action_bar.jsx @@ -9,16 +9,16 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import BookmarkIcon from 'mastodon/../material-icons/400-24px/bookmark-fill.svg'; -import BookmarkBorderIcon from 'mastodon/../material-icons/400-24px/bookmark.svg?react'; -import EmojiReactionIcon from 'mastodon/../material-icons/400-24px/mood.svg?react'; -import MoreHorizIcon from 'mastodon/../material-icons/400-24px/more_horiz.svg?react'; -import RepeatIcon from 'mastodon/../material-icons/400-24px/repeat.svg?react'; -import ReplyIcon from 'mastodon/../material-icons/400-24px/reply.svg?react'; -import ReplyAllIcon from 'mastodon/../material-icons/400-24px/reply_all.svg?react'; -import StarIcon from 'mastodon/../material-icons/400-24px/star-fill.svg?react'; -import StarBorderIcon from 'mastodon/../material-icons/400-24px/star.svg?react'; -import VisibilityIcon from 'mastodon/../material-icons/400-24px/visibility.svg?react'; +import BookmarkIcon from '@/material-icons/400-24px/bookmark-fill.svg'; +import BookmarkBorderIcon from '@/material-icons/400-24px/bookmark.svg?react'; +import EmojiReactionIcon from '@/material-icons/400-24px/mood.svg?react'; +import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; +import ReplyAllIcon from '@/material-icons/400-24px/reply_all.svg?react'; +import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; +import StarBorderIcon from '@/material-icons/400-24px/star.svg?react'; +import VisibilityIcon from '@/material-icons/400-24px/visibility.svg?react'; import RepeatDisabledIcon from 'mastodon/../svg-icons/repeat_disabled.svg?react'; import RepeatPrivateIcon from 'mastodon/../svg-icons/repeat_private.svg?react'; import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION } from 'mastodon/permissions'; diff --git a/app/javascript/mastodon/components/status_content.jsx b/app/javascript/mastodon/components/status_content.jsx index d29013b8ea1023..762208600be4dd 100644 --- a/app/javascript/mastodon/components/status_content.jsx +++ b/app/javascript/mastodon/components/status_content.jsx @@ -9,7 +9,7 @@ import { Link, withRouter } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import ChevronRightIcon from 'mastodon/../material-icons/400-24px/chevron_right.svg?react'; +import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; import { Icon } from 'mastodon/components/icon'; import PollContainer from 'mastodon/containers/poll_container'; import { autoPlayGif, languages as preloadedLanguages } from 'mastodon/initial_state'; diff --git a/app/javascript/mastodon/components/verified_badge.tsx b/app/javascript/mastodon/components/verified_badge.tsx index 4209f68319f2d0..626cc500d6a672 100644 --- a/app/javascript/mastodon/components/verified_badge.tsx +++ b/app/javascript/mastodon/components/verified_badge.tsx @@ -1,4 +1,4 @@ -import CheckIcon from 'mastodon/../material-icons/400-24px/check.svg?react'; +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; import { Icon } from './icon'; diff --git a/app/javascript/mastodon/components/visibility_icon.tsx b/app/javascript/mastodon/components/visibility_icon.tsx index ea81ac18e82671..832a0fcbc739cd 100644 --- a/app/javascript/mastodon/components/visibility_icon.tsx +++ b/app/javascript/mastodon/components/visibility_icon.tsx @@ -1,16 +1,16 @@ import { defineMessages, useIntl } from 'react-intl'; -import CircleIcon from 'mastodon/../material-icons/400-24px/account_circle.svg?react'; -import AlternateEmailIcon from 'mastodon/../material-icons/400-24px/alternate_email.svg?react'; -import PublicUnlistedIcon from 'mastodon/../material-icons/400-24px/cloud.svg?react'; -import MutualIcon from 'mastodon/../material-icons/400-24px/compare_arrows.svg?react'; -import LoginIcon from 'mastodon/../material-icons/400-24px/key.svg?react'; -import LockIcon from 'mastodon/../material-icons/400-24px/lock.svg?react'; -import LockOpenIcon from 'mastodon/../material-icons/400-24px/no_encryption.svg?react'; -import PublicIcon from 'mastodon/../material-icons/400-24px/public.svg?react'; -import ReplyIcon from 'mastodon/../material-icons/400-24px/reply.svg?react'; -import LimitedIcon from 'mastodon/../material-icons/400-24px/shield.svg?react'; -import PersonalIcon from 'mastodon/../material-icons/400-24px/sticky_note.svg?react'; +import CircleIcon from '@/material-icons/400-24px/account_circle.svg?react'; +import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; +import PublicUnlistedIcon from '@/material-icons/400-24px/cloud.svg?react'; +import MutualIcon from '@/material-icons/400-24px/compare_arrows.svg?react'; +import LoginIcon from '@/material-icons/400-24px/key.svg?react'; +import LockIcon from '@/material-icons/400-24px/lock.svg?react'; +import LockOpenIcon from '@/material-icons/400-24px/no_encryption.svg?react'; +import PublicIcon from '@/material-icons/400-24px/public.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; +import LimitedIcon from '@/material-icons/400-24px/shield.svg?react'; +import PersonalIcon from '@/material-icons/400-24px/sticky_note.svg?react'; import { Icon } from './icon'; diff --git a/app/javascript/mastodon/features/about/index.jsx b/app/javascript/mastodon/features/about/index.jsx index d85e3d9c44b196..fb0ce02f1a7268 100644 --- a/app/javascript/mastodon/features/about/index.jsx +++ b/app/javascript/mastodon/features/about/index.jsx @@ -10,10 +10,10 @@ import { List as ImmutableList } from 'immutable'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import ChevronRightIcon from 'mastodon/../material-icons/400-24px/chevron_right.svg?react'; -import DisabledIcon from 'mastodon/../material-icons/400-24px/close-fill.svg?react'; -import EnabledIcon from 'mastodon/../material-icons/400-24px/done-fill.svg?react'; -import ExpandMoreIcon from 'mastodon/../material-icons/400-24px/expand_more.svg?react'; +import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; +import DisabledIcon from '@/material-icons/400-24px/close-fill.svg?react'; +import EnabledIcon from '@/material-icons/400-24px/done-fill.svg?react'; +import ExpandMoreIcon from '@/material-icons/400-24px/expand_more.svg?react'; import { fetchServer, fetchExtendedDescription, fetchDomainBlocks } from 'mastodon/actions/server'; import Column from 'mastodon/components/column'; import { Icon } from 'mastodon/components/icon'; diff --git a/app/javascript/mastodon/features/account/components/follow_request_note.jsx b/app/javascript/mastodon/features/account/components/follow_request_note.jsx index a8b61f9eaf82b1..d57fd030b2d9e2 100644 --- a/app/javascript/mastodon/features/account/components/follow_request_note.jsx +++ b/app/javascript/mastodon/features/account/components/follow_request_note.jsx @@ -3,8 +3,8 @@ import { FormattedMessage } from 'react-intl'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import CheckIcon from 'mastodon/../material-icons/400-24px/check.svg?react'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { Icon } from 'mastodon/components/icon'; export default class FollowRequestNote extends ImmutablePureComponent { diff --git a/app/javascript/mastodon/features/account/components/header.jsx b/app/javascript/mastodon/features/account/components/header.jsx index fc571fabd77188..36702bc4d3dfd6 100644 --- a/app/javascript/mastodon/features/account/components/header.jsx +++ b/app/javascript/mastodon/features/account/components/header.jsx @@ -9,12 +9,12 @@ import { NavLink, withRouter } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import CheckIcon from 'mastodon/../material-icons/400-24px/check.svg?react'; -import LockIcon from 'mastodon/../material-icons/400-24px/lock.svg?react'; -import MoreHorizIcon from 'mastodon/../material-icons/400-24px/more_horiz.svg?react'; -import NotificationsIcon from 'mastodon/../material-icons/400-24px/notifications.svg?react'; -import NotificationsActiveIcon from 'mastodon/../material-icons/400-24px/notifications_active-fill.svg?react'; -import ShareIcon from 'mastodon/../material-icons/400-24px/share.svg?react'; +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; +import LockIcon from '@/material-icons/400-24px/lock.svg?react'; +import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; +import NotificationsIcon from '@/material-icons/400-24px/notifications.svg?react'; +import NotificationsActiveIcon from '@/material-icons/400-24px/notifications_active-fill.svg?react'; +import ShareIcon from '@/material-icons/400-24px/share.svg?react'; import { Avatar } from 'mastodon/components/avatar'; import { Badge, AutomatedBadge, GroupBadge } from 'mastodon/components/badge'; import { Button } from 'mastodon/components/button'; diff --git a/app/javascript/mastodon/features/account_gallery/components/media_item.jsx b/app/javascript/mastodon/features/account_gallery/components/media_item.jsx index a35092893d9a57..087e7757533327 100644 --- a/app/javascript/mastodon/features/account_gallery/components/media_item.jsx +++ b/app/javascript/mastodon/features/account_gallery/components/media_item.jsx @@ -5,9 +5,9 @@ import classNames from 'classnames'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import AudiotrackIcon from 'mastodon/../material-icons/400-24px/music_note.svg?react'; -import PlayArrowIcon from 'mastodon/../material-icons/400-24px/play_arrow.svg?react'; -import VisibilityOffIcon from 'mastodon/../material-icons/400-24px/visibility_off.svg?react'; +import AudiotrackIcon from '@/material-icons/400-24px/music_note.svg?react'; +import PlayArrowIcon from '@/material-icons/400-24px/play_arrow.svg?react'; +import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; import { Blurhash } from 'mastodon/components/blurhash'; import { Icon } from 'mastodon/components/icon'; import { autoPlayGif, displayMedia, useBlurhash } from 'mastodon/initial_state'; diff --git a/app/javascript/mastodon/features/antenna_adder/components/antenna.jsx b/app/javascript/mastodon/features/antenna_adder/components/antenna.jsx index 459498231838b8..eaedc64525dd88 100644 --- a/app/javascript/mastodon/features/antenna_adder/components/antenna.jsx +++ b/app/javascript/mastodon/features/antenna_adder/components/antenna.jsx @@ -6,9 +6,9 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import AddIcon from 'mastodon/../material-icons/400-24px/add.svg?react'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; -import AntennaIcon from 'mastodon/../material-icons/400-24px/wifi.svg?react'; +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; +import AntennaIcon from '@/material-icons/400-24px/wifi.svg?react'; import { Icon } from 'mastodon/components/icon'; import { removeFromAntennaAdder, addToAntennaAdder, removeExcludeFromAntennaAdder, addExcludeToAntennaAdder } from '../../../actions/antennas'; diff --git a/app/javascript/mastodon/features/antenna_editor/components/account.jsx b/app/javascript/mastodon/features/antenna_editor/components/account.jsx index 2504bded8e8a44..512e399618ab48 100644 --- a/app/javascript/mastodon/features/antenna_editor/components/account.jsx +++ b/app/javascript/mastodon/features/antenna_editor/components/account.jsx @@ -7,8 +7,8 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import AddIcon from 'mastodon/../material-icons/400-24px/add.svg?react'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { removeFromAntennaEditor, addToAntennaEditor, removeExcludeFromAntennaEditor, addExcludeToAntennaEditor } from '../../../actions/antennas'; import { Avatar } from '../../../components/avatar'; diff --git a/app/javascript/mastodon/features/antenna_editor/components/edit_antenna_form.jsx b/app/javascript/mastodon/features/antenna_editor/components/edit_antenna_form.jsx index 3ab745c261c2e1..1a6361c60f4486 100644 --- a/app/javascript/mastodon/features/antenna_editor/components/edit_antenna_form.jsx +++ b/app/javascript/mastodon/features/antenna_editor/components/edit_antenna_form.jsx @@ -5,7 +5,7 @@ import { defineMessages, injectIntl } from 'react-intl'; import { connect } from 'react-redux'; -import CheckIcon from 'mastodon/../material-icons/400-24px/check.svg?react'; +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; import { changeAntennaEditorTitle, submitAntennaEditor } from '../../../actions/antennas'; import { IconButton } from '../../../components/icon_button'; diff --git a/app/javascript/mastodon/features/antenna_editor/components/search.jsx b/app/javascript/mastodon/features/antenna_editor/components/search.jsx index 4ecce6394506c2..80b7c1dcda452f 100644 --- a/app/javascript/mastodon/features/antenna_editor/components/search.jsx +++ b/app/javascript/mastodon/features/antenna_editor/components/search.jsx @@ -7,8 +7,8 @@ import classNames from 'classnames'; import { connect } from 'react-redux'; -import CancelIcon from 'mastodon/../material-icons/400-24px/cancel-fill.svg?react'; -import SearchIcon from 'mastodon/../material-icons/400-24px/search.svg?react'; +import CancelIcon from '@/material-icons/400-24px/cancel-fill.svg?react'; +import SearchIcon from '@/material-icons/400-24px/search.svg?react'; import { Icon } from 'mastodon/components/icon'; import { fetchAntennaSuggestions, clearAntennaSuggestions, changeAntennaSuggestions } from '../../../actions/antennas'; diff --git a/app/javascript/mastodon/features/antenna_setting/components/text_list.jsx b/app/javascript/mastodon/features/antenna_setting/components/text_list.jsx index 533e49e7da3801..040e5b74f1c1f8 100644 --- a/app/javascript/mastodon/features/antenna_setting/components/text_list.jsx +++ b/app/javascript/mastodon/features/antenna_setting/components/text_list.jsx @@ -6,7 +6,7 @@ import { injectIntl } from 'react-intl'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import DeleteIcon from 'mastodon/../material-icons/400-24px/delete.svg?react'; +import DeleteIcon from '@/material-icons/400-24px/delete.svg?react'; import { Button } from 'mastodon/components/button'; import { Icon } from 'mastodon/components/icon'; import { IconButton } from 'mastodon/components/icon_button'; diff --git a/app/javascript/mastodon/features/antenna_setting/index.jsx b/app/javascript/mastodon/features/antenna_setting/index.jsx index 96edc34e668a35..2bcf6f0e318eee 100644 --- a/app/javascript/mastodon/features/antenna_setting/index.jsx +++ b/app/javascript/mastodon/features/antenna_setting/index.jsx @@ -14,12 +14,12 @@ import { connect } from 'react-redux'; import Select, { NonceProvider } from 'react-select'; import Toggle from 'react-toggle'; -import DeleteIcon from 'mastodon/../material-icons/400-24px/delete.svg?react'; -import DomainIcon from 'mastodon/../material-icons/400-24px/dns.svg?react'; -import EditIcon from 'mastodon/../material-icons/400-24px/edit.svg?react'; -import HashtagIcon from 'mastodon/../material-icons/400-24px/tag.svg?react'; -import KeywordIcon from 'mastodon/../material-icons/400-24px/title.svg?react'; -import AntennaIcon from 'mastodon/../material-icons/400-24px/wifi.svg?react'; +import DeleteIcon from '@/material-icons/400-24px/delete.svg?react'; +import DomainIcon from '@/material-icons/400-24px/dns.svg?react'; +import EditIcon from '@/material-icons/400-24px/edit.svg?react'; +import HashtagIcon from '@/material-icons/400-24px/tag.svg?react'; +import KeywordIcon from '@/material-icons/400-24px/title.svg?react'; +import AntennaIcon from '@/material-icons/400-24px/wifi.svg?react'; import { fetchAntenna, deleteAntenna, diff --git a/app/javascript/mastodon/features/antenna_timeline/index.jsx b/app/javascript/mastodon/features/antenna_timeline/index.jsx index 7f5f376d215312..02234b13811396 100644 --- a/app/javascript/mastodon/features/antenna_timeline/index.jsx +++ b/app/javascript/mastodon/features/antenna_timeline/index.jsx @@ -10,9 +10,9 @@ import { withRouter } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import DeleteIcon from 'mastodon/../material-icons/400-24px/delete.svg?react'; -import EditIcon from 'mastodon/../material-icons/400-24px/edit.svg?react'; -import AntennaIcon from 'mastodon/../material-icons/400-24px/wifi.svg?react'; +import DeleteIcon from '@/material-icons/400-24px/delete.svg?react'; +import EditIcon from '@/material-icons/400-24px/edit.svg?react'; +import AntennaIcon from '@/material-icons/400-24px/wifi.svg?react'; import { fetchAntenna, deleteAntenna } from 'mastodon/actions/antennas'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { openModal } from 'mastodon/actions/modal'; diff --git a/app/javascript/mastodon/features/antennas/index.jsx b/app/javascript/mastodon/features/antennas/index.jsx index 6e2ebda62e28ba..8c1f17bcc2391b 100644 --- a/app/javascript/mastodon/features/antennas/index.jsx +++ b/app/javascript/mastodon/features/antennas/index.jsx @@ -9,7 +9,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import AntennaIcon from 'mastodon/../material-icons/400-24px/wifi.svg?react'; +import AntennaIcon from '@/material-icons/400-24px/wifi.svg?react'; import { fetchAntennas } from 'mastodon/actions/antennas'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; diff --git a/app/javascript/mastodon/features/audio/index.jsx b/app/javascript/mastodon/features/audio/index.jsx index 9008e05383057b..fdc1b0be0f11a1 100644 --- a/app/javascript/mastodon/features/audio/index.jsx +++ b/app/javascript/mastodon/features/audio/index.jsx @@ -9,12 +9,12 @@ import { is } from 'immutable'; import { throttle, debounce } from 'lodash'; -import DownloadIcon from 'mastodon/../material-icons/400-24px/download.svg?react'; -import PauseIcon from 'mastodon/../material-icons/400-24px/pause.svg?react'; -import PlayArrowIcon from 'mastodon/../material-icons/400-24px/play_arrow-fill.svg?react'; -import VisibilityOffIcon from 'mastodon/../material-icons/400-24px/visibility_off.svg?react'; -import VolumeOffIcon from 'mastodon/../material-icons/400-24px/volume_off-fill.svg?react'; -import VolumeUpIcon from 'mastodon/../material-icons/400-24px/volume_up-fill.svg?react'; +import DownloadIcon from '@/material-icons/400-24px/download.svg?react'; +import PauseIcon from '@/material-icons/400-24px/pause.svg?react'; +import PlayArrowIcon from '@/material-icons/400-24px/play_arrow-fill.svg?react'; +import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; +import VolumeOffIcon from '@/material-icons/400-24px/volume_off-fill.svg?react'; +import VolumeUpIcon from '@/material-icons/400-24px/volume_up-fill.svg?react'; import { Icon } from 'mastodon/components/icon'; import { formatTime, getPointerPosition, fileNameFromURL } from 'mastodon/features/video'; diff --git a/app/javascript/mastodon/features/blocks/index.jsx b/app/javascript/mastodon/features/blocks/index.jsx index 656784664f120d..1a631d3d07ca56 100644 --- a/app/javascript/mastodon/features/blocks/index.jsx +++ b/app/javascript/mastodon/features/blocks/index.jsx @@ -8,7 +8,7 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; -import BlockIcon from 'mastodon/../material-icons/400-24px/block-fill.svg?react'; +import BlockIcon from '@/material-icons/400-24px/block-fill.svg?react'; import { fetchBlocks, expandBlocks } from '../../actions/blocks'; import { LoadingIndicator } from '../../components/loading_indicator'; diff --git a/app/javascript/mastodon/features/bookmark_categories/index.jsx b/app/javascript/mastodon/features/bookmark_categories/index.jsx index 19e949545455b4..aeb37db27ca26c 100644 --- a/app/javascript/mastodon/features/bookmark_categories/index.jsx +++ b/app/javascript/mastodon/features/bookmark_categories/index.jsx @@ -10,8 +10,8 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import BookmarkIcon from 'mastodon/../material-icons/400-24px/bookmark-fill.svg'; -import BookmarksIcon from 'mastodon/../material-icons/400-24px/bookmarks-fill.svg?react'; +import BookmarkIcon from '@/material-icons/400-24px/bookmark-fill.svg'; +import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; import { fetchBookmarkCategories } from 'mastodon/actions/bookmark_categories'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; diff --git a/app/javascript/mastodon/features/bookmark_category_adder/components/bookmark_category.jsx b/app/javascript/mastodon/features/bookmark_category_adder/components/bookmark_category.jsx index ef4d2a48b2d23b..5f33a9d0f5cbec 100644 --- a/app/javascript/mastodon/features/bookmark_category_adder/components/bookmark_category.jsx +++ b/app/javascript/mastodon/features/bookmark_category_adder/components/bookmark_category.jsx @@ -7,9 +7,9 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import AddIcon from 'mastodon/../material-icons/400-24px/add.svg?react'; -import BookmarkIcon from 'mastodon/../material-icons/400-24px/bookmark-fill.svg?react'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import BookmarkIcon from '@/material-icons/400-24px/bookmark-fill.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { Icon } from 'mastodon/components/icon'; import { removeFromBookmarkCategoryAdder, addToBookmarkCategoryAdder } from '../../../actions/bookmark_categories'; diff --git a/app/javascript/mastodon/features/bookmark_category_statuses/components/edit_bookmark_category_form.jsx b/app/javascript/mastodon/features/bookmark_category_statuses/components/edit_bookmark_category_form.jsx index 14a0e8f9d086ba..de3f3f73849f0a 100644 --- a/app/javascript/mastodon/features/bookmark_category_statuses/components/edit_bookmark_category_form.jsx +++ b/app/javascript/mastodon/features/bookmark_category_statuses/components/edit_bookmark_category_form.jsx @@ -5,7 +5,7 @@ import { defineMessages, injectIntl } from 'react-intl'; import { connect } from 'react-redux'; -import CheckIcon from 'mastodon/../material-icons/400-24px/check.svg?react'; +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; import { changeBookmarkCategoryEditorTitle, submitBookmarkCategoryEditor } from '../../../actions/bookmark_categories'; import { IconButton } from '../../../components/icon_button'; diff --git a/app/javascript/mastodon/features/bookmark_category_statuses/index.jsx b/app/javascript/mastodon/features/bookmark_category_statuses/index.jsx index 39719b799da1a4..b441b5c2722ddd 100644 --- a/app/javascript/mastodon/features/bookmark_category_statuses/index.jsx +++ b/app/javascript/mastodon/features/bookmark_category_statuses/index.jsx @@ -13,9 +13,9 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; -import BookmarkIcon from 'mastodon/../material-icons/400-24px/bookmark-fill.svg'; -import DeleteIcon from 'mastodon/../material-icons/400-24px/delete.svg?react'; -import EditIcon from 'mastodon/../material-icons/400-24px/edit.svg?react'; +import BookmarkIcon from '@/material-icons/400-24px/bookmark-fill.svg'; +import DeleteIcon from '@/material-icons/400-24px/delete.svg?react'; +import EditIcon from '@/material-icons/400-24px/edit.svg?react'; import { deleteBookmarkCategory, expandBookmarkCategoryStatuses, fetchBookmarkCategory, fetchBookmarkCategoryStatuses , setupBookmarkCategoryEditor } from 'mastodon/actions/bookmark_categories'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { openModal } from 'mastodon/actions/modal'; diff --git a/app/javascript/mastodon/features/bookmarked_statuses/index.jsx b/app/javascript/mastodon/features/bookmarked_statuses/index.jsx index b574e465ce861e..93be1c6b2e601c 100644 --- a/app/javascript/mastodon/features/bookmarked_statuses/index.jsx +++ b/app/javascript/mastodon/features/bookmarked_statuses/index.jsx @@ -12,7 +12,7 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; -import BookmarksIcon from 'mastodon/../material-icons/400-24px/bookmarks-fill.svg?react'; +import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; import { fetchBookmarkedStatuses, expandBookmarkedStatuses } from 'mastodon/actions/bookmarks'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import Column from 'mastodon/components/column'; diff --git a/app/javascript/mastodon/features/circle_adder/components/circle.jsx b/app/javascript/mastodon/features/circle_adder/components/circle.jsx index 787c140d9fbcb6..0534f1896b7939 100644 --- a/app/javascript/mastodon/features/circle_adder/components/circle.jsx +++ b/app/javascript/mastodon/features/circle_adder/components/circle.jsx @@ -6,9 +6,9 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import CircleIcon from 'mastodon/../material-icons/400-24px/account_circle.svg?react'; -import AddIcon from 'mastodon/../material-icons/400-24px/add.svg?react'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import CircleIcon from '@/material-icons/400-24px/account_circle.svg?react'; +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { Icon } from 'mastodon/components/icon'; import { removeFromCircleAdder, addToCircleAdder } from '../../../actions/circles'; diff --git a/app/javascript/mastodon/features/circle_editor/components/account.jsx b/app/javascript/mastodon/features/circle_editor/components/account.jsx index 69c77f36818db3..1b8a462d1b48a3 100644 --- a/app/javascript/mastodon/features/circle_editor/components/account.jsx +++ b/app/javascript/mastodon/features/circle_editor/components/account.jsx @@ -7,8 +7,8 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import AddIcon from 'mastodon/../material-icons/400-24px/add.svg?react'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { removeFromCircleEditor, addToCircleEditor } from '../../../actions/circles'; import { Avatar } from '../../../components/avatar'; diff --git a/app/javascript/mastodon/features/circle_editor/components/edit_circle_form.jsx b/app/javascript/mastodon/features/circle_editor/components/edit_circle_form.jsx index d8f6f2ac17cab2..54d71891b88c43 100644 --- a/app/javascript/mastodon/features/circle_editor/components/edit_circle_form.jsx +++ b/app/javascript/mastodon/features/circle_editor/components/edit_circle_form.jsx @@ -5,7 +5,7 @@ import { defineMessages, injectIntl } from 'react-intl'; import { connect } from 'react-redux'; -import CheckIcon from 'mastodon/../material-icons/400-24px/check.svg?react'; +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; import { changeCircleEditorTitle, submitCircleEditor } from '../../../actions/circles'; import { IconButton } from '../../../components/icon_button'; diff --git a/app/javascript/mastodon/features/circle_editor/components/search.jsx b/app/javascript/mastodon/features/circle_editor/components/search.jsx index b2ad4f9ded8a5b..e84ac2cc203e87 100644 --- a/app/javascript/mastodon/features/circle_editor/components/search.jsx +++ b/app/javascript/mastodon/features/circle_editor/components/search.jsx @@ -7,8 +7,8 @@ import classNames from 'classnames'; import { connect } from 'react-redux'; -import CancelIcon from 'mastodon/../material-icons/400-24px/cancel-fill.svg?react'; -import SearchIcon from 'mastodon/../material-icons/400-24px/search.svg?react'; +import CancelIcon from '@/material-icons/400-24px/cancel-fill.svg?react'; +import SearchIcon from '@/material-icons/400-24px/search.svg?react'; import { Icon } from 'mastodon/components/icon'; import { fetchCircleSuggestions, clearCircleSuggestions, changeCircleSuggestions } from '../../../actions/circles'; diff --git a/app/javascript/mastodon/features/circle_statuses/index.jsx b/app/javascript/mastodon/features/circle_statuses/index.jsx index 288a9da3a0ba87..ac1abd91dcafea 100644 --- a/app/javascript/mastodon/features/circle_statuses/index.jsx +++ b/app/javascript/mastodon/features/circle_statuses/index.jsx @@ -13,9 +13,9 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; -import CircleIcon from 'mastodon/../material-icons/400-24px/account_circle.svg?react'; -import DeleteIcon from 'mastodon/../material-icons/400-24px/delete.svg?react'; -import EditIcon from 'mastodon/../material-icons/400-24px/edit.svg?react'; +import CircleIcon from '@/material-icons/400-24px/account_circle.svg?react'; +import DeleteIcon from '@/material-icons/400-24px/delete.svg?react'; +import EditIcon from '@/material-icons/400-24px/edit.svg?react'; import { deleteCircle, expandCircleStatuses, fetchCircle, fetchCircleStatuses } from 'mastodon/actions/circles'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { openModal } from 'mastodon/actions/modal'; diff --git a/app/javascript/mastodon/features/circles/index.jsx b/app/javascript/mastodon/features/circles/index.jsx index 8b39c6ef68f6a0..8b5a62db5e9501 100644 --- a/app/javascript/mastodon/features/circles/index.jsx +++ b/app/javascript/mastodon/features/circles/index.jsx @@ -10,8 +10,8 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import CirclesIcon from 'mastodon/../material-icons/400-24px/account_circle-fill.svg?react'; -import CircleIcon from 'mastodon/../material-icons/400-24px/account_circle.svg?react'; +import CirclesIcon from '@/material-icons/400-24px/account_circle-fill.svg?react'; +import CircleIcon from '@/material-icons/400-24px/account_circle.svg?react'; import { fetchCircles, deleteCircle } from 'mastodon/actions/circles'; import { openModal } from 'mastodon/actions/modal'; import Column from 'mastodon/components/column'; diff --git a/app/javascript/mastodon/features/community_timeline/index.jsx b/app/javascript/mastodon/features/community_timeline/index.jsx index 5bf66c2a342d0c..0aa1f9aa23a22a 100644 --- a/app/javascript/mastodon/features/community_timeline/index.jsx +++ b/app/javascript/mastodon/features/community_timeline/index.jsx @@ -7,7 +7,7 @@ import { Helmet } from 'react-helmet'; import { connect } from 'react-redux'; -import PeopleIcon from 'mastodon/../material-icons/400-24px/group.svg?react'; +import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import { DismissableBanner } from 'mastodon/components/dismissable_banner'; import { domain } from 'mastodon/initial_state'; diff --git a/app/javascript/mastodon/features/compose/components/action_bar.jsx b/app/javascript/mastodon/features/compose/components/action_bar.jsx index d767f8abbefeba..05b694b68dc85e 100644 --- a/app/javascript/mastodon/features/compose/components/action_bar.jsx +++ b/app/javascript/mastodon/features/compose/components/action_bar.jsx @@ -5,7 +5,7 @@ import { defineMessages, injectIntl } from 'react-intl'; import ImmutablePropTypes from 'react-immutable-proptypes'; -import MenuIcon from 'mastodon/../material-icons/400-24px/menu.svg?react'; +import MenuIcon from '@/material-icons/400-24px/menu.svg?react'; import DropdownMenuContainer from '../../../containers/dropdown_menu_container'; diff --git a/app/javascript/mastodon/features/compose/components/compose_form.jsx b/app/javascript/mastodon/features/compose/components/compose_form.jsx index 15e10ff41395a8..8786ae1c14353c 100644 --- a/app/javascript/mastodon/features/compose/components/compose_form.jsx +++ b/app/javascript/mastodon/features/compose/components/compose_form.jsx @@ -10,8 +10,8 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import { length } from 'stringz'; -import LockIcon from 'mastodon/../material-icons/400-24px/lock.svg?react'; -import LimitedIcon from 'mastodon/../material-icons/400-24px/shield.svg?react'; +import LockIcon from '@/material-icons/400-24px/lock.svg?react'; +import LimitedIcon from '@/material-icons/400-24px/shield.svg?react'; import { Icon } from 'mastodon/components/icon'; import { WithOptionalRouterPropTypes, withOptionalRouter } from 'mastodon/utils/react_router'; diff --git a/app/javascript/mastodon/features/compose/components/expiration_dropdown.jsx b/app/javascript/mastodon/features/compose/components/expiration_dropdown.jsx index 2998de7ef870ec..c7476b74311a78 100644 --- a/app/javascript/mastodon/features/compose/components/expiration_dropdown.jsx +++ b/app/javascript/mastodon/features/compose/components/expiration_dropdown.jsx @@ -8,7 +8,7 @@ import classNames from 'classnames'; import { supportsPassiveEvents } from 'detect-passive-events'; import Overlay from 'react-overlays/Overlay'; -import TimerIcon from 'mastodon/../material-icons/400-24px/timer.svg?react'; +import TimerIcon from '@/material-icons/400-24px/timer.svg?react'; import { IconButton } from '../../../components/icon_button'; diff --git a/app/javascript/mastodon/features/compose/components/poll_button.jsx b/app/javascript/mastodon/features/compose/components/poll_button.jsx index e6ecba1a07fde7..4900d381192779 100644 --- a/app/javascript/mastodon/features/compose/components/poll_button.jsx +++ b/app/javascript/mastodon/features/compose/components/poll_button.jsx @@ -3,7 +3,7 @@ import { PureComponent } from 'react'; import { defineMessages, injectIntl } from 'react-intl'; -import InsertChartIcon from 'mastodon/../material-icons/400-24px/insert_chart.svg?react'; +import InsertChartIcon from '@/material-icons/400-24px/insert_chart.svg?react'; import { IconButton } from '../../../components/icon_button'; diff --git a/app/javascript/mastodon/features/compose/components/poll_form.jsx b/app/javascript/mastodon/features/compose/components/poll_form.jsx index 4d96b93f0b485b..c5b4fb95a0fa93 100644 --- a/app/javascript/mastodon/features/compose/components/poll_form.jsx +++ b/app/javascript/mastodon/features/compose/components/poll_form.jsx @@ -8,8 +8,8 @@ import classNames from 'classnames'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import AddIcon from 'mastodon/../material-icons/400-24px/add.svg?react'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import AutosuggestInput from 'mastodon/components/autosuggest_input'; import { Icon } from 'mastodon/components/icon'; import { IconButton } from 'mastodon/components/icon_button'; diff --git a/app/javascript/mastodon/features/compose/components/privacy_dropdown.jsx b/app/javascript/mastodon/features/compose/components/privacy_dropdown.jsx index bafa77c2cbbe1f..6f81d465e4856a 100644 --- a/app/javascript/mastodon/features/compose/components/privacy_dropdown.jsx +++ b/app/javascript/mastodon/features/compose/components/privacy_dropdown.jsx @@ -9,15 +9,15 @@ import classNames from 'classnames'; import { supportsPassiveEvents } from 'detect-passive-events'; import Overlay from 'react-overlays/Overlay'; -import CircleIcon from 'mastodon/../material-icons/400-24px/account_circle.svg?react'; -import AlternateEmailIcon from 'mastodon/../material-icons/400-24px/alternate_email.svg?react'; -import PublicUnlistedIcon from 'mastodon/../material-icons/400-24px/cloud.svg?react'; -import MutualIcon from 'mastodon/../material-icons/400-24px/compare_arrows.svg?react'; -import LoginIcon from 'mastodon/../material-icons/400-24px/key.svg?react'; -import LockIcon from 'mastodon/../material-icons/400-24px/lock.svg?react'; -import LockOpenIcon from 'mastodon/../material-icons/400-24px/no_encryption.svg?react'; -import PublicIcon from 'mastodon/../material-icons/400-24px/public.svg?react'; -import ReplyIcon from 'mastodon/../material-icons/400-24px/reply.svg?react'; +import CircleIcon from '@/material-icons/400-24px/account_circle.svg?react'; +import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; +import PublicUnlistedIcon from '@/material-icons/400-24px/cloud.svg?react'; +import MutualIcon from '@/material-icons/400-24px/compare_arrows.svg?react'; +import LoginIcon from '@/material-icons/400-24px/key.svg?react'; +import LockIcon from '@/material-icons/400-24px/lock.svg?react'; +import LockOpenIcon from '@/material-icons/400-24px/no_encryption.svg?react'; +import PublicIcon from '@/material-icons/400-24px/public.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; import { Icon } from 'mastodon/components/icon'; import { enableLoginPrivacy, enableLocalPrivacy } from 'mastodon/initial_state'; diff --git a/app/javascript/mastodon/features/compose/components/reply_indicator.jsx b/app/javascript/mastodon/features/compose/components/reply_indicator.jsx index f16a37347c0aed..8051e01db4f92a 100644 --- a/app/javascript/mastodon/features/compose/components/reply_indicator.jsx +++ b/app/javascript/mastodon/features/compose/components/reply_indicator.jsx @@ -5,7 +5,7 @@ import { defineMessages, injectIntl } from 'react-intl'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import AttachmentList from 'mastodon/components/attachment_list'; import { WithOptionalRouterPropTypes, withOptionalRouter } from 'mastodon/utils/react_router'; diff --git a/app/javascript/mastodon/features/compose/components/search.jsx b/app/javascript/mastodon/features/compose/components/search.jsx index e131024a824927..a154984171e832 100644 --- a/app/javascript/mastodon/features/compose/components/search.jsx +++ b/app/javascript/mastodon/features/compose/components/search.jsx @@ -8,9 +8,9 @@ import { withRouter } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; -import CancelIcon from 'mastodon/../material-icons/400-24px/cancel-fill.svg?react'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; -import SearchIcon from 'mastodon/../material-icons/400-24px/search.svg?react'; +import CancelIcon from '@/material-icons/400-24px/cancel-fill.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; +import SearchIcon from '@/material-icons/400-24px/search.svg?react'; import { Icon } from 'mastodon/components/icon'; import { domain, searchEnabled } from 'mastodon/initial_state'; import { HASHTAG_REGEX } from 'mastodon/utils/hashtags'; diff --git a/app/javascript/mastodon/features/compose/components/search_results.jsx b/app/javascript/mastodon/features/compose/components/search_results.jsx index 8a63a01c895f75..694deea04efb96 100644 --- a/app/javascript/mastodon/features/compose/components/search_results.jsx +++ b/app/javascript/mastodon/features/compose/components/search_results.jsx @@ -5,10 +5,10 @@ import { FormattedMessage } from 'react-intl'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import FindInPageIcon from 'mastodon/../material-icons/400-24px/find_in_page.svg?react'; -import PeopleIcon from 'mastodon/../material-icons/400-24px/group.svg?react'; -import SearchIcon from 'mastodon/../material-icons/400-24px/search.svg?react'; -import TagIcon from 'mastodon/../material-icons/400-24px/tag.svg?react'; +import FindInPageIcon from '@/material-icons/400-24px/find_in_page.svg?react'; +import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; +import SearchIcon from '@/material-icons/400-24px/search.svg?react'; +import TagIcon from '@/material-icons/400-24px/tag.svg?react'; import { Icon } from 'mastodon/components/icon'; import { LoadMore } from 'mastodon/components/load_more'; import { SearchSection } from 'mastodon/features/explore/components/search_section'; diff --git a/app/javascript/mastodon/features/compose/components/searchability_dropdown.jsx b/app/javascript/mastodon/features/compose/components/searchability_dropdown.jsx index 28ad4ee5bf9ba9..1a99f3afb2b3c7 100644 --- a/app/javascript/mastodon/features/compose/components/searchability_dropdown.jsx +++ b/app/javascript/mastodon/features/compose/components/searchability_dropdown.jsx @@ -8,12 +8,12 @@ import classNames from 'classnames'; import { supportsPassiveEvents } from 'detect-passive-events'; import Overlay from 'react-overlays/Overlay'; -import AlternateEmailIcon from 'mastodon/../material-icons/400-24px/alternate_email.svg?react'; -import PublicUnlistedIcon from 'mastodon/../material-icons/400-24px/cloud.svg?react'; -import LockIcon from 'mastodon/../material-icons/400-24px/lock.svg?react'; -import LockOpenIcon from 'mastodon/../material-icons/400-24px/no_encryption.svg?react'; -import PublicIcon from 'mastodon/../material-icons/400-24px/public.svg?react'; -import SearchIcon from 'mastodon/../material-icons/400-24px/search.svg?react'; +import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; +import PublicUnlistedIcon from '@/material-icons/400-24px/cloud.svg?react'; +import LockIcon from '@/material-icons/400-24px/lock.svg?react'; +import LockOpenIcon from '@/material-icons/400-24px/no_encryption.svg?react'; +import PublicIcon from '@/material-icons/400-24px/public.svg?react'; +import SearchIcon from '@/material-icons/400-24px/search.svg?react'; import { Icon } from 'mastodon/components/icon'; import { enableLocalPrivacy } from 'mastodon/initial_state'; diff --git a/app/javascript/mastodon/features/compose/components/upload.jsx b/app/javascript/mastodon/features/compose/components/upload.jsx index cb31145e8d4f68..76d394af7a41cc 100644 --- a/app/javascript/mastodon/features/compose/components/upload.jsx +++ b/app/javascript/mastodon/features/compose/components/upload.jsx @@ -7,9 +7,9 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import spring from 'react-motion/lib/spring'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; -import EditIcon from 'mastodon/../material-icons/400-24px/edit.svg?react'; -import InfoIcon from 'mastodon/../material-icons/400-24px/info.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; +import EditIcon from '@/material-icons/400-24px/edit.svg?react'; +import InfoIcon from '@/material-icons/400-24px/info.svg?react'; import { Icon } from 'mastodon/components/icon'; import Motion from '../../ui/util/optional_motion'; diff --git a/app/javascript/mastodon/features/compose/components/upload_button.jsx b/app/javascript/mastodon/features/compose/components/upload_button.jsx index 090af86b279d01..923d6a3c47e458 100644 --- a/app/javascript/mastodon/features/compose/components/upload_button.jsx +++ b/app/javascript/mastodon/features/compose/components/upload_button.jsx @@ -6,7 +6,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import AddPhotoAlternateIcon from 'mastodon/../material-icons/400-24px/add_photo_alternate.svg?react'; +import AddPhotoAlternateIcon from '@/material-icons/400-24px/add_photo_alternate.svg?react'; import { IconButton } from '../../../components/icon_button'; diff --git a/app/javascript/mastodon/features/compose/components/upload_progress.jsx b/app/javascript/mastodon/features/compose/components/upload_progress.jsx index 8ed09b36ba1e4f..e4973b24fd604f 100644 --- a/app/javascript/mastodon/features/compose/components/upload_progress.jsx +++ b/app/javascript/mastodon/features/compose/components/upload_progress.jsx @@ -5,7 +5,7 @@ import { FormattedMessage } from 'react-intl'; import spring from 'react-motion/lib/spring'; -import UploadFileIcon from 'mastodon/../material-icons/400-24px/upload_file.svg?react'; +import UploadFileIcon from '@/material-icons/400-24px/upload_file.svg?react'; import { Icon } from 'mastodon/components/icon'; import Motion from '../../ui/util/optional_motion'; diff --git a/app/javascript/mastodon/features/compose/index.jsx b/app/javascript/mastodon/features/compose/index.jsx index a19ae71e8ef5a0..ea3a14950126c9 100644 --- a/app/javascript/mastodon/features/compose/index.jsx +++ b/app/javascript/mastodon/features/compose/index.jsx @@ -11,13 +11,13 @@ import { connect } from 'react-redux'; import spring from 'react-motion/lib/spring'; -import PeopleIcon from 'mastodon/../material-icons/400-24px/group.svg?react'; -import HomeIcon from 'mastodon/../material-icons/400-24px/home-fill.svg?react'; -import LogoutIcon from 'mastodon/../material-icons/400-24px/logout.svg?react'; -import MenuIcon from 'mastodon/../material-icons/400-24px/menu.svg?react'; -import NotificationsIcon from 'mastodon/../material-icons/400-24px/notifications-fill.svg?react'; -import PublicIcon from 'mastodon/../material-icons/400-24px/public.svg?react'; -import SettingsIcon from 'mastodon/../material-icons/400-24px/settings-fill.svg?react'; +import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; +import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; +import LogoutIcon from '@/material-icons/400-24px/logout.svg?react'; +import MenuIcon from '@/material-icons/400-24px/menu.svg?react'; +import NotificationsIcon from '@/material-icons/400-24px/notifications-fill.svg?react'; +import PublicIcon from '@/material-icons/400-24px/public.svg?react'; +import SettingsIcon from '@/material-icons/400-24px/settings-fill.svg?react'; import { openModal } from 'mastodon/actions/modal'; import Column from 'mastodon/components/column'; import { Icon } from 'mastodon/components/icon'; diff --git a/app/javascript/mastodon/features/direct_timeline/components/conversation.jsx b/app/javascript/mastodon/features/direct_timeline/components/conversation.jsx index 9ae95dabe9b168..274cfa69f53db3 100644 --- a/app/javascript/mastodon/features/direct_timeline/components/conversation.jsx +++ b/app/javascript/mastodon/features/direct_timeline/components/conversation.jsx @@ -10,8 +10,8 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import { HotKeys } from 'react-hotkeys'; -import MoreHorizIcon from 'mastodon/../material-icons/400-24px/more_horiz.svg?react'; -import ReplyIcon from 'mastodon/../material-icons/400-24px/reply.svg?react'; +import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; import AttachmentList from 'mastodon/components/attachment_list'; import AvatarComposite from 'mastodon/components/avatar_composite'; import { IconButton } from 'mastodon/components/icon_button'; diff --git a/app/javascript/mastodon/features/direct_timeline/index.jsx b/app/javascript/mastodon/features/direct_timeline/index.jsx index effc9f29dbfd41..af29d7a5b83257 100644 --- a/app/javascript/mastodon/features/direct_timeline/index.jsx +++ b/app/javascript/mastodon/features/direct_timeline/index.jsx @@ -7,7 +7,7 @@ import { Helmet } from 'react-helmet'; import { connect } from 'react-redux'; -import AlternateEmailIcon from 'mastodon/../material-icons/400-24px/alternate_email.svg?react'; +import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { mountConversations, unmountConversations, expandConversations } from 'mastodon/actions/conversations'; import { connectDirectStream } from 'mastodon/actions/streaming'; diff --git a/app/javascript/mastodon/features/directory/index.jsx b/app/javascript/mastodon/features/directory/index.jsx index 32d79f23fc60b3..0d3408146e2eef 100644 --- a/app/javascript/mastodon/features/directory/index.jsx +++ b/app/javascript/mastodon/features/directory/index.jsx @@ -9,7 +9,7 @@ import { List as ImmutableList } from 'immutable'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import PeopleIcon from 'mastodon/../material-icons/400-24px/group.svg?react'; +import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import { addColumn, removeColumn, moveColumn, changeColumnParams } from 'mastodon/actions/columns'; import { fetchDirectory, expandDirectory } from 'mastodon/actions/directory'; import Column from 'mastodon/components/column'; diff --git a/app/javascript/mastodon/features/domain_blocks/index.jsx b/app/javascript/mastodon/features/domain_blocks/index.jsx index 5c9b70f02b162f..964eada9c1e5b9 100644 --- a/app/javascript/mastodon/features/domain_blocks/index.jsx +++ b/app/javascript/mastodon/features/domain_blocks/index.jsx @@ -10,7 +10,7 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; -import BlockIcon from 'mastodon/../material-icons/400-24px/block-fill.svg?react'; +import BlockIcon from '@/material-icons/400-24px/block-fill.svg?react'; import { fetchDomainBlocks, expandDomainBlocks } from '../../actions/domain_blocks'; import { LoadingIndicator } from '../../components/loading_indicator'; diff --git a/app/javascript/mastodon/features/emoji_reacted_statuses/index.jsx b/app/javascript/mastodon/features/emoji_reacted_statuses/index.jsx index 954ab6aad6045b..54f19cb7d09b62 100644 --- a/app/javascript/mastodon/features/emoji_reacted_statuses/index.jsx +++ b/app/javascript/mastodon/features/emoji_reacted_statuses/index.jsx @@ -10,7 +10,7 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; -import EmojiReactionIcon from 'mastodon/../material-icons/400-24px/mood.svg?react'; +import EmojiReactionIcon from '@/material-icons/400-24px/mood.svg?react'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { fetchEmojiReactedStatuses, expandEmojiReactedStatuses } from 'mastodon/actions/emoji_reactions'; import Column from 'mastodon/components/column'; diff --git a/app/javascript/mastodon/features/emoji_reactions/index.jsx b/app/javascript/mastodon/features/emoji_reactions/index.jsx index 7ab808f14e6f32..a863fc5b47d3f5 100644 --- a/app/javascript/mastodon/features/emoji_reactions/index.jsx +++ b/app/javascript/mastodon/features/emoji_reactions/index.jsx @@ -10,7 +10,7 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; -import RefreshIcon from 'mastodon/../material-icons/400-24px/refresh.svg?react'; +import RefreshIcon from '@/material-icons/400-24px/refresh.svg?react'; import { fetchEmojiReactions, expandEmojiReactions } from 'mastodon/actions/interactions'; import ColumnHeader from 'mastodon/components/column_header'; import { Icon } from 'mastodon/components/icon'; diff --git a/app/javascript/mastodon/features/explore/index.jsx b/app/javascript/mastodon/features/explore/index.jsx index 96a39f6b35f867..8ebaccd0132de7 100644 --- a/app/javascript/mastodon/features/explore/index.jsx +++ b/app/javascript/mastodon/features/explore/index.jsx @@ -8,8 +8,8 @@ import { NavLink, Switch, Route } from 'react-router-dom'; import { connect } from 'react-redux'; -import SearchIcon from 'mastodon/../material-icons/400-24px/search.svg?react'; -import TagIcon from 'mastodon/../material-icons/400-24px/tag.svg?react'; +import SearchIcon from '@/material-icons/400-24px/search.svg?react'; +import TagIcon from '@/material-icons/400-24px/tag.svg?react'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; import Search from 'mastodon/features/compose/containers/search_container'; diff --git a/app/javascript/mastodon/features/explore/results.jsx b/app/javascript/mastodon/features/explore/results.jsx index 891bddf737b66f..355c0f1c4c8532 100644 --- a/app/javascript/mastodon/features/explore/results.jsx +++ b/app/javascript/mastodon/features/explore/results.jsx @@ -9,9 +9,9 @@ import { List as ImmutableList } from 'immutable'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import FindInPageIcon from 'mastodon/../material-icons/400-24px/find_in_page.svg?react'; -import PeopleIcon from 'mastodon/../material-icons/400-24px/group.svg?react'; -import TagIcon from 'mastodon/../material-icons/400-24px/tag.svg?react'; +import FindInPageIcon from '@/material-icons/400-24px/find_in_page.svg?react'; +import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; +import TagIcon from '@/material-icons/400-24px/tag.svg?react'; import { submitSearch, expandSearch } from 'mastodon/actions/search'; import { ImmutableHashtag as Hashtag } from 'mastodon/components/hashtag'; import { Icon } from 'mastodon/components/icon'; diff --git a/app/javascript/mastodon/features/favourited_statuses/index.jsx b/app/javascript/mastodon/features/favourited_statuses/index.jsx index 933cdc03887bad..f7d6d141784dd6 100644 --- a/app/javascript/mastodon/features/favourited_statuses/index.jsx +++ b/app/javascript/mastodon/features/favourited_statuses/index.jsx @@ -12,7 +12,7 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; -import StarIcon from 'mastodon/../material-icons/400-24px/star-fill.svg?react'; +import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { fetchFavouritedStatuses, expandFavouritedStatuses } from 'mastodon/actions/favourites'; import Column from 'mastodon/components/column'; diff --git a/app/javascript/mastodon/features/favourites/index.jsx b/app/javascript/mastodon/features/favourites/index.jsx index 0211cd1e189905..9eeb2a3f92e9d6 100644 --- a/app/javascript/mastodon/features/favourites/index.jsx +++ b/app/javascript/mastodon/features/favourites/index.jsx @@ -12,7 +12,7 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; -import RefreshIcon from 'mastodon/../material-icons/400-24px/refresh.svg?react'; +import RefreshIcon from '@/material-icons/400-24px/refresh.svg?react'; import { fetchFavourites, expandFavourites } from 'mastodon/actions/interactions'; import ColumnHeader from 'mastodon/components/column_header'; import { Icon } from 'mastodon/components/icon'; diff --git a/app/javascript/mastodon/features/filters/select_filter.jsx b/app/javascript/mastodon/features/filters/select_filter.jsx index 9bf0c3c8e52f45..5b2eb64952f0e5 100644 --- a/app/javascript/mastodon/features/filters/select_filter.jsx +++ b/app/javascript/mastodon/features/filters/select_filter.jsx @@ -7,7 +7,7 @@ import { connect } from 'react-redux'; import fuzzysort from 'fuzzysort'; -import AddIcon from 'mastodon/../material-icons/400-24px/add.svg?react'; +import AddIcon from '@/material-icons/400-24px/add.svg?react'; import { Icon } from 'mastodon/components/icon'; import { toServerSideType } from 'mastodon/utils/filters'; import { loupeIcon, deleteIcon } from 'mastodon/utils/icons'; diff --git a/app/javascript/mastodon/features/firehose/index.jsx b/app/javascript/mastodon/features/firehose/index.jsx index c98b14eb74a898..2f62288f4c457f 100644 --- a/app/javascript/mastodon/features/firehose/index.jsx +++ b/app/javascript/mastodon/features/firehose/index.jsx @@ -6,7 +6,7 @@ import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; import { Helmet } from 'react-helmet'; import { NavLink } from 'react-router-dom'; -import PublicIcon from 'mastodon/../material-icons/400-24px/public.svg?react'; +import PublicIcon from '@/material-icons/400-24px/public.svg?react'; import { addColumn } from 'mastodon/actions/columns'; import { changeSetting } from 'mastodon/actions/settings'; import { connectPublicStream, connectCommunityStream } from 'mastodon/actions/streaming'; diff --git a/app/javascript/mastodon/features/follow_requests/components/account_authorize.jsx b/app/javascript/mastodon/features/follow_requests/components/account_authorize.jsx index 1f40e059925533..dd308c87cb1fc3 100644 --- a/app/javascript/mastodon/features/follow_requests/components/account_authorize.jsx +++ b/app/javascript/mastodon/features/follow_requests/components/account_authorize.jsx @@ -7,8 +7,8 @@ import { Link } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import CheckIcon from 'mastodon/../material-icons/400-24px/check.svg?react'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { Avatar } from '../../../components/avatar'; import { DisplayName } from '../../../components/display_name'; diff --git a/app/javascript/mastodon/features/follow_requests/index.jsx b/app/javascript/mastodon/features/follow_requests/index.jsx index 683c7b40707f75..7d651f2ca69c24 100644 --- a/app/javascript/mastodon/features/follow_requests/index.jsx +++ b/app/javascript/mastodon/features/follow_requests/index.jsx @@ -10,7 +10,7 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; -import PersonAddIcon from 'mastodon/../material-icons/400-24px/person_add.svg?react'; +import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; import { fetchFollowRequests, expandFollowRequests } from '../../actions/accounts'; import ScrollableList from '../../components/scrollable_list'; diff --git a/app/javascript/mastodon/features/followed_tags/index.jsx b/app/javascript/mastodon/features/followed_tags/index.jsx index de3d7670ec9075..21248e6de99e97 100644 --- a/app/javascript/mastodon/features/followed_tags/index.jsx +++ b/app/javascript/mastodon/features/followed_tags/index.jsx @@ -10,7 +10,7 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; -import TagIcon from 'mastodon/../material-icons/400-24px/tag.svg?react'; +import TagIcon from '@/material-icons/400-24px/tag.svg?react'; import { expandFollowedHashtags, fetchFollowedHashtags } from 'mastodon/actions/tags'; import ColumnHeader from 'mastodon/components/column_header'; import { Hashtag } from 'mastodon/components/hashtag'; diff --git a/app/javascript/mastodon/features/getting_started/components/announcements.jsx b/app/javascript/mastodon/features/getting_started/components/announcements.jsx index 6b752df1bd8b48..ea36cefd7dc240 100644 --- a/app/javascript/mastodon/features/getting_started/components/announcements.jsx +++ b/app/javascript/mastodon/features/getting_started/components/announcements.jsx @@ -13,10 +13,10 @@ import TransitionMotion from 'react-motion/lib/TransitionMotion'; import spring from 'react-motion/lib/spring'; import ReactSwipeableViews from 'react-swipeable-views'; -import elephantUIPlane from 'mastodon/../images/elephant_ui_plane.svg'; -import AddIcon from 'mastodon/../material-icons/400-24px/add.svg?react'; -import ChevronLeftIcon from 'mastodon/../material-icons/400-24px/chevron_left.svg?react'; -import ChevronRightIcon from 'mastodon/../material-icons/400-24px/chevron_right.svg?react'; +import elephantUIPlane from '@/images/elephant_ui_plane.svg'; +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import ChevronLeftIcon from '@/material-icons/400-24px/chevron_left.svg?react'; +import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; import { AnimatedNumber } from 'mastodon/components/animated_number'; import { Icon } from 'mastodon/components/icon'; import { IconButton } from 'mastodon/components/icon_button'; diff --git a/app/javascript/mastodon/features/getting_started/index.jsx b/app/javascript/mastodon/features/getting_started/index.jsx index 30bbe1eb626d7f..9920f01589dbd4 100644 --- a/app/javascript/mastodon/features/getting_started/index.jsx +++ b/app/javascript/mastodon/features/getting_started/index.jsx @@ -9,19 +9,19 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import CirclesIcon from 'mastodon/../material-icons/400-24px/account_circle-fill.svg?react'; -import AlternateEmailIcon from 'mastodon/../material-icons/400-24px/alternate_email.svg?react'; -import BookmarksIcon from 'mastodon/../material-icons/400-24px/bookmarks-fill.svg?react'; -import PeopleIcon from 'mastodon/../material-icons/400-24px/group.svg?react'; -import HomeIcon from 'mastodon/../material-icons/400-24px/home-fill.svg?react'; -import ListAltIcon from 'mastodon/../material-icons/400-24px/list_alt.svg?react'; -import MenuIcon from 'mastodon/../material-icons/400-24px/menu.svg?react'; -import PersonAddIcon from 'mastodon/../material-icons/400-24px/person_add.svg?react'; -import PublicIcon from 'mastodon/../material-icons/400-24px/public.svg?react'; -import SettingsIcon from 'mastodon/../material-icons/400-24px/settings-fill.svg?react'; -import StarIcon from 'mastodon/../material-icons/400-24px/star.svg?react'; -import TagIcon from 'mastodon/../material-icons/400-24px/tag.svg?react'; -import AntennaIcon from 'mastodon/../material-icons/400-24px/wifi.svg?react'; +import CirclesIcon from '@/material-icons/400-24px/account_circle-fill.svg?react'; +import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; +import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; +import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; +import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; +import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; +import MenuIcon from '@/material-icons/400-24px/menu.svg?react'; +import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; +import PublicIcon from '@/material-icons/400-24px/public.svg?react'; +import SettingsIcon from '@/material-icons/400-24px/settings-fill.svg?react'; +import StarIcon from '@/material-icons/400-24px/star.svg?react'; +import TagIcon from '@/material-icons/400-24px/tag.svg?react'; +import AntennaIcon from '@/material-icons/400-24px/wifi.svg?react'; import { fetchFollowRequests } from 'mastodon/actions/accounts'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; diff --git a/app/javascript/mastodon/features/hashtag_timeline/index.jsx b/app/javascript/mastodon/features/hashtag_timeline/index.jsx index 35ed4dc6097dd7..f431a7e9b72130 100644 --- a/app/javascript/mastodon/features/hashtag_timeline/index.jsx +++ b/app/javascript/mastodon/features/hashtag_timeline/index.jsx @@ -10,7 +10,7 @@ import { connect } from 'react-redux'; import { isEqual } from 'lodash'; -import TagIcon from 'mastodon/../material-icons/400-24px/tag.svg?react'; +import TagIcon from '@/material-icons/400-24px/tag.svg?react'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { connectHashtagStream } from 'mastodon/actions/streaming'; import { fetchHashtag, followHashtag, unfollowHashtag } from 'mastodon/actions/tags'; diff --git a/app/javascript/mastodon/features/home_timeline/components/explore_prompt.tsx b/app/javascript/mastodon/features/home_timeline/components/explore_prompt.tsx index 9eeec00e3478dc..960d30e2caea4a 100644 --- a/app/javascript/mastodon/features/home_timeline/components/explore_prompt.tsx +++ b/app/javascript/mastodon/features/home_timeline/components/explore_prompt.tsx @@ -2,7 +2,7 @@ import { FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; -import background from 'mastodon/../images/friends-cropped.png'; +import background from '@/images/friends-cropped.png'; import { DismissableBanner } from 'mastodon/components/dismissable_banner'; export const ExplorePrompt = () => ( diff --git a/app/javascript/mastodon/features/home_timeline/index.jsx b/app/javascript/mastodon/features/home_timeline/index.jsx index 1f93278c0692f2..069f52b0beaf2c 100644 --- a/app/javascript/mastodon/features/home_timeline/index.jsx +++ b/app/javascript/mastodon/features/home_timeline/index.jsx @@ -10,8 +10,8 @@ import { createSelector } from '@reduxjs/toolkit'; import { List as ImmutableList } from 'immutable'; import { connect } from 'react-redux'; -import CampaignIcon from 'mastodon/../material-icons/400-24px/campaign.svg?react'; -import HomeIcon from 'mastodon/../material-icons/400-24px/home-fill.svg?react'; +import CampaignIcon from '@/material-icons/400-24px/campaign.svg?react'; +import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; import { fetchAnnouncements, toggleShowAnnouncements } from 'mastodon/actions/announcements'; import { IconWithBadge } from 'mastodon/components/icon_with_badge'; import { NotSignedInIndicator } from 'mastodon/components/not_signed_in_indicator'; diff --git a/app/javascript/mastodon/features/interaction_modal/index.jsx b/app/javascript/mastodon/features/interaction_modal/index.jsx index 8a771cc75d796f..57a82ef7c1a9fc 100644 --- a/app/javascript/mastodon/features/interaction_modal/index.jsx +++ b/app/javascript/mastodon/features/interaction_modal/index.jsx @@ -9,11 +9,11 @@ import { connect } from 'react-redux'; import { throttle, escapeRegExp } from 'lodash'; -import EmojiReactionIcon from 'mastodon/../material-icons/400-24px/mood.svg?react'; -import PersonAddIcon from 'mastodon/../material-icons/400-24px/person_add.svg?react'; -import RepeatIcon from 'mastodon/../material-icons/400-24px/repeat.svg?react'; -import ReplyIcon from 'mastodon/../material-icons/400-24px/reply.svg?react'; -import StarIcon from 'mastodon/../material-icons/400-24px/star.svg?react'; +import EmojiReactionIcon from '@/material-icons/400-24px/mood.svg?react'; +import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; +import StarIcon from '@/material-icons/400-24px/star.svg?react'; import { openModal, closeModal } from 'mastodon/actions/modal'; import api from 'mastodon/api'; import { Button } from 'mastodon/components/button'; diff --git a/app/javascript/mastodon/features/keyboard_shortcuts/index.jsx b/app/javascript/mastodon/features/keyboard_shortcuts/index.jsx index dfce187aa952df..b00a79ad30f1c7 100644 --- a/app/javascript/mastodon/features/keyboard_shortcuts/index.jsx +++ b/app/javascript/mastodon/features/keyboard_shortcuts/index.jsx @@ -6,7 +6,7 @@ import { Helmet } from 'react-helmet'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import InfoIcon from 'mastodon/../material-icons/400-24px/info.svg?react'; +import InfoIcon from '@/material-icons/400-24px/info.svg?react'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; diff --git a/app/javascript/mastodon/features/list_adder/components/list.jsx b/app/javascript/mastodon/features/list_adder/components/list.jsx index 615673b6251c9d..0c303f1fae70ae 100644 --- a/app/javascript/mastodon/features/list_adder/components/list.jsx +++ b/app/javascript/mastodon/features/list_adder/components/list.jsx @@ -8,10 +8,10 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import AddIcon from 'mastodon/../material-icons/400-24px/add.svg?react'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; -import ListAltIcon from 'mastodon/../material-icons/400-24px/list_alt.svg?react'; -import VisibilityOffIcon from 'mastodon/../material-icons/400-24px/visibility_off.svg?react'; +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; +import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; +import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; import { Icon } from 'mastodon/components/icon'; import { removeFromListAdder, addToListAdder } from '../../../actions/lists'; diff --git a/app/javascript/mastodon/features/list_editor/components/account.jsx b/app/javascript/mastodon/features/list_editor/components/account.jsx index 7aa5368132996a..fc67614e1019ad 100644 --- a/app/javascript/mastodon/features/list_editor/components/account.jsx +++ b/app/javascript/mastodon/features/list_editor/components/account.jsx @@ -8,8 +8,8 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import AddIcon from 'mastodon/../material-icons/400-24px/add.svg?react'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { removeFromListEditor, addToListEditor } from '../../../actions/lists'; import { Avatar } from '../../../components/avatar'; diff --git a/app/javascript/mastodon/features/list_editor/components/edit_list_form.jsx b/app/javascript/mastodon/features/list_editor/components/edit_list_form.jsx index a6841a5cfcbc62..e0efadd2cdbc8f 100644 --- a/app/javascript/mastodon/features/list_editor/components/edit_list_form.jsx +++ b/app/javascript/mastodon/features/list_editor/components/edit_list_form.jsx @@ -7,7 +7,7 @@ import { defineMessages, injectIntl } from 'react-intl'; import { connect } from 'react-redux'; -import CheckIcon from 'mastodon/../material-icons/400-24px/check.svg?react'; +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; import { changeListEditorTitle, submitListEditor } from '../../../actions/lists'; import { IconButton } from '../../../components/icon_button'; diff --git a/app/javascript/mastodon/features/list_editor/components/search.jsx b/app/javascript/mastodon/features/list_editor/components/search.jsx index 3b639d75e08925..8ca89c401c636e 100644 --- a/app/javascript/mastodon/features/list_editor/components/search.jsx +++ b/app/javascript/mastodon/features/list_editor/components/search.jsx @@ -9,8 +9,8 @@ import classNames from 'classnames'; import { connect } from 'react-redux'; -import CancelIcon from 'mastodon/../material-icons/400-24px/cancel.svg?react'; -import SearchIcon from 'mastodon/../material-icons/400-24px/search.svg?react'; +import CancelIcon from '@/material-icons/400-24px/cancel.svg?react'; +import SearchIcon from '@/material-icons/400-24px/search.svg?react'; import { Icon } from 'mastodon/components/icon'; import { fetchListSuggestions, clearListSuggestions, changeListSuggestions } from '../../../actions/lists'; diff --git a/app/javascript/mastodon/features/list_timeline/index.jsx b/app/javascript/mastodon/features/list_timeline/index.jsx index fa566317c6a3cb..d7af83a49fda4b 100644 --- a/app/javascript/mastodon/features/list_timeline/index.jsx +++ b/app/javascript/mastodon/features/list_timeline/index.jsx @@ -13,9 +13,9 @@ import { connect } from 'react-redux'; import Toggle from 'react-toggle'; -import DeleteIcon from 'mastodon/../material-icons/400-24px/delete.svg?react'; -import EditIcon from 'mastodon/../material-icons/400-24px/edit.svg?react'; -import ListAltIcon from 'mastodon/../material-icons/400-24px/list_alt.svg?react'; +import DeleteIcon from '@/material-icons/400-24px/delete.svg?react'; +import EditIcon from '@/material-icons/400-24px/edit.svg?react'; +import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { fetchList, deleteList, updateList } from 'mastodon/actions/lists'; import { openModal } from 'mastodon/actions/modal'; diff --git a/app/javascript/mastodon/features/lists/index.jsx b/app/javascript/mastodon/features/lists/index.jsx index 7b50a891a62bbe..7c918eab9707b6 100644 --- a/app/javascript/mastodon/features/lists/index.jsx +++ b/app/javascript/mastodon/features/lists/index.jsx @@ -11,7 +11,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import ListAltIcon from 'mastodon/../material-icons/400-24px/list_alt.svg?react'; +import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import { fetchLists } from 'mastodon/actions/lists'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; diff --git a/app/javascript/mastodon/features/mutes/index.jsx b/app/javascript/mastodon/features/mutes/index.jsx index 316eaba220e995..3b50244ea4b192 100644 --- a/app/javascript/mastodon/features/mutes/index.jsx +++ b/app/javascript/mastodon/features/mutes/index.jsx @@ -10,7 +10,7 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; -import VolumeOffIcon from 'mastodon/../material-icons/400-24px/volume_off.svg?react'; +import VolumeOffIcon from '@/material-icons/400-24px/volume_off.svg?react'; import { fetchMutes, expandMutes } from '../../actions/mutes'; import { LoadingIndicator } from '../../components/loading_indicator'; diff --git a/app/javascript/mastodon/features/notifications/components/clear_column_button.jsx b/app/javascript/mastodon/features/notifications/components/clear_column_button.jsx index ac7860efd4bdfe..73eaecba59f3fc 100644 --- a/app/javascript/mastodon/features/notifications/components/clear_column_button.jsx +++ b/app/javascript/mastodon/features/notifications/components/clear_column_button.jsx @@ -3,7 +3,7 @@ import { PureComponent } from 'react'; import { FormattedMessage } from 'react-intl'; -import DeleteForeverIcon from 'mastodon/../material-icons/400-24px/delete_forever.svg?react'; +import DeleteForeverIcon from '@/material-icons/400-24px/delete_forever.svg?react'; import { Icon } from 'mastodon/components/icon'; export default class ClearColumnButton extends PureComponent { diff --git a/app/javascript/mastodon/features/notifications/components/filter_bar.jsx b/app/javascript/mastodon/features/notifications/components/filter_bar.jsx index 4b40bd74a7ce52..42904a695f9f21 100644 --- a/app/javascript/mastodon/features/notifications/components/filter_bar.jsx +++ b/app/javascript/mastodon/features/notifications/components/filter_bar.jsx @@ -3,14 +3,14 @@ import { PureComponent } from 'react'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; -import HomeIcon from 'mastodon/../material-icons/400-24px/home-fill.svg?react'; -import InsertChartIcon from 'mastodon/../material-icons/400-24px/insert_chart.svg?react'; -import ReferenceIcon from 'mastodon/../material-icons/400-24px/link.svg?react'; -import EmojiReactionIcon from 'mastodon/../material-icons/400-24px/mood.svg?react'; -import PersonAddIcon from 'mastodon/../material-icons/400-24px/person_add.svg?react'; -import RepeatIcon from 'mastodon/../material-icons/400-24px/repeat.svg?react'; -import ReplyAllIcon from 'mastodon/../material-icons/400-24px/reply_all.svg?react'; -import StarIcon from 'mastodon/../material-icons/400-24px/star.svg?react'; +import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; +import InsertChartIcon from '@/material-icons/400-24px/insert_chart.svg?react'; +import ReferenceIcon from '@/material-icons/400-24px/link.svg?react'; +import EmojiReactionIcon from '@/material-icons/400-24px/mood.svg?react'; +import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; +import ReplyAllIcon from '@/material-icons/400-24px/reply_all.svg?react'; +import StarIcon from '@/material-icons/400-24px/star.svg?react'; import { Icon } from 'mastodon/components/icon'; const tooltips = defineMessages({ diff --git a/app/javascript/mastodon/features/notifications/components/follow_request.jsx b/app/javascript/mastodon/features/notifications/components/follow_request.jsx index c6a039adb5d2d1..4024455cbd7364 100644 --- a/app/javascript/mastodon/features/notifications/components/follow_request.jsx +++ b/app/javascript/mastodon/features/notifications/components/follow_request.jsx @@ -7,8 +7,8 @@ import { Link } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import CheckIcon from 'mastodon/../material-icons/400-24px/check.svg?react'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import CheckIcon from '@/material-icons/400-24px/check.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { Avatar } from 'mastodon/components/avatar'; import { DisplayName } from 'mastodon/components/display_name'; import { IconButton } from 'mastodon/components/icon_button'; diff --git a/app/javascript/mastodon/features/notifications/components/notification.jsx b/app/javascript/mastodon/features/notifications/components/notification.jsx index cb274fd7195ab1..b6581839bea6a3 100644 --- a/app/javascript/mastodon/features/notifications/components/notification.jsx +++ b/app/javascript/mastodon/features/notifications/components/notification.jsx @@ -10,16 +10,16 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import { HotKeys } from 'react-hotkeys'; -import EditIcon from 'mastodon/../material-icons/400-24px/edit.svg?react'; -import FlagIcon from 'mastodon/../material-icons/400-24px/flag-fill.svg?react'; -import HomeIcon from 'mastodon/../material-icons/400-24px/home-fill.svg?react'; -import InsertChartIcon from 'mastodon/../material-icons/400-24px/insert_chart.svg?react'; -import ReferenceIcon from 'mastodon/../material-icons/400-24px/link.svg?react'; -import ListAltIcon from 'mastodon/../material-icons/400-24px/list_alt.svg?react'; -import PersonIcon from 'mastodon/../material-icons/400-24px/person-fill.svg?react'; -import PersonAddIcon from 'mastodon/../material-icons/400-24px/person_add-fill.svg?react'; -import RepeatIcon from 'mastodon/../material-icons/400-24px/repeat.svg?react'; -import StarIcon from 'mastodon/../material-icons/400-24px/star-fill.svg?react'; +import EditIcon from '@/material-icons/400-24px/edit.svg?react'; +import FlagIcon from '@/material-icons/400-24px/flag-fill.svg?react'; +import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; +import InsertChartIcon from '@/material-icons/400-24px/insert_chart.svg?react'; +import ReferenceIcon from '@/material-icons/400-24px/link.svg?react'; +import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; +import PersonIcon from '@/material-icons/400-24px/person-fill.svg?react'; +import PersonAddIcon from '@/material-icons/400-24px/person_add-fill.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; +import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; import EmojiView from 'mastodon/components/emoji_view'; import { Icon } from 'mastodon/components/icon'; import AccountContainer from 'mastodon/containers/account_container'; diff --git a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx index a577abd864110a..1cdf5b5dfef100 100644 --- a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx +++ b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx @@ -5,8 +5,8 @@ import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { connect } from 'react-redux'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; -import TuneIcon from 'mastodon/../material-icons/400-24px/tune.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; +import TuneIcon from '@/material-icons/400-24px/tune.svg?react'; import { requestBrowserPermission } from 'mastodon/actions/notifications'; import { changeSetting } from 'mastodon/actions/settings'; import { Button } from 'mastodon/components/button'; diff --git a/app/javascript/mastodon/features/notifications/index.jsx b/app/javascript/mastodon/features/notifications/index.jsx index 0751f1620c4efc..30c63ed32ac0d3 100644 --- a/app/javascript/mastodon/features/notifications/index.jsx +++ b/app/javascript/mastodon/features/notifications/index.jsx @@ -12,8 +12,8 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; -import DoneAllIcon from 'mastodon/../material-icons/400-24px/done_all.svg?react'; -import NotificationsIcon from 'mastodon/../material-icons/400-24px/notifications-fill.svg?react'; +import DoneAllIcon from '@/material-icons/400-24px/done_all.svg?react'; +import NotificationsIcon from '@/material-icons/400-24px/notifications-fill.svg?react'; import { compareId } from 'mastodon/compare_id'; import { Icon } from 'mastodon/components/icon'; import { NotSignedInIndicator } from 'mastodon/components/not_signed_in_indicator'; diff --git a/app/javascript/mastodon/features/onboarding/components/step.jsx b/app/javascript/mastodon/features/onboarding/components/step.jsx index 46c9b1645dfb80..a2a1653b8ab25d 100644 --- a/app/javascript/mastodon/features/onboarding/components/step.jsx +++ b/app/javascript/mastodon/features/onboarding/components/step.jsx @@ -2,8 +2,8 @@ import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; -import ArrowRightAltIcon from 'mastodon/../material-icons/400-24px/arrow_right_alt.svg?react'; -import CheckIcon from 'mastodon/../material-icons/400-24px/done.svg?react'; +import ArrowRightAltIcon from '@/material-icons/400-24px/arrow_right_alt.svg?react'; +import CheckIcon from '@/material-icons/400-24px/done.svg?react'; import { Icon } from 'mastodon/components/icon'; export const Step = ({ label, description, icon, iconComponent, completed, onClick, href, to }) => { diff --git a/app/javascript/mastodon/features/onboarding/index.jsx b/app/javascript/mastodon/features/onboarding/index.jsx index 05610e9152cafc..4f080817d8671e 100644 --- a/app/javascript/mastodon/features/onboarding/index.jsx +++ b/app/javascript/mastodon/features/onboarding/index.jsx @@ -8,12 +8,12 @@ import { Link, Switch, Route, useHistory } from 'react-router-dom'; import { useDispatch } from 'react-redux'; -import illustration from 'mastodon/../images/elephant_ui_conversation.svg'; -import AccountCircleIcon from 'mastodon/../material-icons/400-24px/account_circle.svg?react'; -import ArrowRightAltIcon from 'mastodon/../material-icons/400-24px/arrow_right_alt.svg?react'; -import ContentCopyIcon from 'mastodon/../material-icons/400-24px/content_copy.svg?react'; -import EditNoteIcon from 'mastodon/../material-icons/400-24px/edit_note.svg?react'; -import PersonAddIcon from 'mastodon/../material-icons/400-24px/person_add.svg?react'; +import illustration from '@/images/elephant_ui_conversation.svg'; +import AccountCircleIcon from '@/material-icons/400-24px/account_circle.svg?react'; +import ArrowRightAltIcon from '@/material-icons/400-24px/arrow_right_alt.svg?react'; +import ContentCopyIcon from '@/material-icons/400-24px/content_copy.svg?react'; +import EditNoteIcon from '@/material-icons/400-24px/edit_note.svg?react'; +import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; import { focusCompose } from 'mastodon/actions/compose'; import { Icon } from 'mastodon/components/icon'; import Column from 'mastodon/features/ui/components/column'; diff --git a/app/javascript/mastodon/features/onboarding/profile.jsx b/app/javascript/mastodon/features/onboarding/profile.jsx index 5217b42ad53815..14250ae39bd399 100644 --- a/app/javascript/mastodon/features/onboarding/profile.jsx +++ b/app/javascript/mastodon/features/onboarding/profile.jsx @@ -10,8 +10,8 @@ import { useDispatch } from 'react-redux'; import Toggle from 'react-toggle'; -import AddPhotoAlternateIcon from 'mastodon/../material-icons/400-24px/add_photo_alternate.svg?react'; -import EditIcon from 'mastodon/../material-icons/400-24px/edit.svg?react'; +import AddPhotoAlternateIcon from '@/material-icons/400-24px/add_photo_alternate.svg?react'; +import EditIcon from '@/material-icons/400-24px/edit.svg?react'; import { updateAccount } from 'mastodon/actions/accounts'; import { Button } from 'mastodon/components/button'; import { ColumnBackButton } from 'mastodon/components/column_back_button'; diff --git a/app/javascript/mastodon/features/onboarding/share.jsx b/app/javascript/mastodon/features/onboarding/share.jsx index cde63d0b3408ec..32a86ab6cc0724 100644 --- a/app/javascript/mastodon/features/onboarding/share.jsx +++ b/app/javascript/mastodon/features/onboarding/share.jsx @@ -9,8 +9,8 @@ import { Link } from 'react-router-dom'; import SwipeableViews from 'react-swipeable-views'; -import ArrowRightAltIcon from 'mastodon/../material-icons/400-24px/arrow_right_alt.svg?react'; -import ContentCopyIcon from 'mastodon/../material-icons/400-24px/content_copy.svg?react'; +import ArrowRightAltIcon from '@/material-icons/400-24px/arrow_right_alt.svg?react'; +import ContentCopyIcon from '@/material-icons/400-24px/content_copy.svg?react'; import { ColumnBackButton } from 'mastodon/components/column_back_button'; import { Icon } from 'mastodon/components/icon'; import { me, domain } from 'mastodon/initial_state'; diff --git a/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx b/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx index 2defaf3047fac1..54e9ec42ead3a0 100644 --- a/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx +++ b/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx @@ -9,11 +9,11 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import OpenInNewIcon from 'mastodon/../material-icons/400-24px/open_in_new.svg?react'; -import RepeatIcon from 'mastodon/../material-icons/400-24px/repeat.svg?react'; -import ReplyIcon from 'mastodon/../material-icons/400-24px/reply.svg?react'; -import ReplyAllIcon from 'mastodon/../material-icons/400-24px/reply_all.svg?react'; -import StarIcon from 'mastodon/../material-icons/400-24px/star.svg?react'; +import OpenInNewIcon from '@/material-icons/400-24px/open_in_new.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; +import ReplyAllIcon from '@/material-icons/400-24px/reply_all.svg?react'; +import StarIcon from '@/material-icons/400-24px/star.svg?react'; import { initBoostModal } from 'mastodon/actions/boosts'; import { replyCompose } from 'mastodon/actions/compose'; import { reblog, favourite, unreblog, unfavourite } from 'mastodon/actions/interactions'; diff --git a/app/javascript/mastodon/features/picture_in_picture/components/header.jsx b/app/javascript/mastodon/features/picture_in_picture/components/header.jsx index 12a5566d39fa0e..31073d7387c9bc 100644 --- a/app/javascript/mastodon/features/picture_in_picture/components/header.jsx +++ b/app/javascript/mastodon/features/picture_in_picture/components/header.jsx @@ -8,7 +8,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { Avatar } from 'mastodon/components/avatar'; import { DisplayName } from 'mastodon/components/display_name'; import { IconButton } from 'mastodon/components/icon_button'; diff --git a/app/javascript/mastodon/features/pinned_statuses/index.jsx b/app/javascript/mastodon/features/pinned_statuses/index.jsx index 3d6dc753e35709..921e9a60721923 100644 --- a/app/javascript/mastodon/features/pinned_statuses/index.jsx +++ b/app/javascript/mastodon/features/pinned_statuses/index.jsx @@ -8,7 +8,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import PushPinIcon from 'mastodon/../material-icons/400-24px/push_pin.svg?react'; +import PushPinIcon from '@/material-icons/400-24px/push_pin.svg?react'; import { getStatusList } from 'mastodon/selectors'; import { fetchPinnedStatuses } from '../../actions/pin_statuses'; diff --git a/app/javascript/mastodon/features/public_timeline/index.jsx b/app/javascript/mastodon/features/public_timeline/index.jsx index 302a2956ede68a..3601dfeae80a12 100644 --- a/app/javascript/mastodon/features/public_timeline/index.jsx +++ b/app/javascript/mastodon/features/public_timeline/index.jsx @@ -7,7 +7,7 @@ import { Helmet } from 'react-helmet'; import { connect } from 'react-redux'; -import PublicIcon from 'mastodon/../material-icons/400-24px/public.svg?react'; +import PublicIcon from '@/material-icons/400-24px/public.svg?react'; import { DismissableBanner } from 'mastodon/components/dismissable_banner'; import { domain } from 'mastodon/initial_state'; diff --git a/app/javascript/mastodon/features/reaction_deck/index.jsx b/app/javascript/mastodon/features/reaction_deck/index.jsx index c48f56012450bb..9fa21041de7e72 100644 --- a/app/javascript/mastodon/features/reaction_deck/index.jsx +++ b/app/javascript/mastodon/features/reaction_deck/index.jsx @@ -14,8 +14,8 @@ import { connect } from 'react-redux'; import { DragDropContext, Droppable, Draggable } from '@hello-pangea/dnd'; -import MenuIcon from 'mastodon/../material-icons/400-24px/menu.svg?react'; -import EmojiReactionIcon from 'mastodon/../material-icons/400-24px/mood.svg?react'; +import MenuIcon from '@/material-icons/400-24px/menu.svg?react'; +import EmojiReactionIcon from '@/material-icons/400-24px/mood.svg?react'; import { updateReactionDeck } from 'mastodon/actions/reaction_deck'; import { Button } from 'mastodon/components/button'; import ColumnHeader from 'mastodon/components/column_header'; diff --git a/app/javascript/mastodon/features/reblogs/index.jsx b/app/javascript/mastodon/features/reblogs/index.jsx index 0d5183fb88bce3..3d1fc94cb78d3b 100644 --- a/app/javascript/mastodon/features/reblogs/index.jsx +++ b/app/javascript/mastodon/features/reblogs/index.jsx @@ -10,7 +10,7 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; -import RefreshIcon from 'mastodon/../material-icons/400-24px/refresh.svg?react'; +import RefreshIcon from '@/material-icons/400-24px/refresh.svg?react'; import { Icon } from 'mastodon/components/icon'; import { fetchReblogs, expandReblogs } from '../../actions/interactions'; diff --git a/app/javascript/mastodon/features/report/components/option.jsx b/app/javascript/mastodon/features/report/components/option.jsx index d6949f0c513d07..7aa0dd1379740c 100644 --- a/app/javascript/mastodon/features/report/components/option.jsx +++ b/app/javascript/mastodon/features/report/components/option.jsx @@ -3,7 +3,7 @@ import { PureComponent } from 'react'; import classNames from 'classnames'; -import CheckIcon from 'mastodon/../material-icons/400-24px/done.svg?react'; +import CheckIcon from '@/material-icons/400-24px/done.svg?react'; import { Icon } from 'mastodon/components/icon'; export default class Option extends PureComponent { diff --git a/app/javascript/mastodon/features/status/components/action_bar.jsx b/app/javascript/mastodon/features/status/components/action_bar.jsx index bd289c8ec415d7..e74f4a6c50f7df 100644 --- a/app/javascript/mastodon/features/status/components/action_bar.jsx +++ b/app/javascript/mastodon/features/status/components/action_bar.jsx @@ -9,15 +9,15 @@ import { withRouter } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import BookmarkIcon from 'mastodon/../material-icons/400-24px/bookmark-fill.svg?react'; -import BookmarkBorderIcon from 'mastodon/../material-icons/400-24px/bookmark.svg?react'; -import EmojiReactionIcon from 'mastodon/../material-icons/400-24px/mood.svg?react'; -import MoreHorizIcon from 'mastodon/../material-icons/400-24px/more_horiz.svg?react'; -import RepeatIcon from 'mastodon/../material-icons/400-24px/repeat.svg?react'; -import ReplyIcon from 'mastodon/../material-icons/400-24px/reply.svg?react'; -import ReplyAllIcon from 'mastodon/../material-icons/400-24px/reply_all.svg?react'; -import StarIcon from 'mastodon/../material-icons/400-24px/star-fill.svg?react'; -import StarBorderIcon from 'mastodon/../material-icons/400-24px/star.svg?react'; +import BookmarkIcon from '@/material-icons/400-24px/bookmark-fill.svg?react'; +import BookmarkBorderIcon from '@/material-icons/400-24px/bookmark.svg?react'; +import EmojiReactionIcon from '@/material-icons/400-24px/mood.svg?react'; +import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; +import ReplyAllIcon from '@/material-icons/400-24px/reply_all.svg?react'; +import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; +import StarBorderIcon from '@/material-icons/400-24px/star.svg?react'; import RepeatDisabledIcon from 'mastodon/../svg-icons/repeat_disabled.svg?react'; import RepeatPrivateIcon from 'mastodon/../svg-icons/repeat_private.svg?react'; import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION } from 'mastodon/permissions'; diff --git a/app/javascript/mastodon/features/status/components/card.jsx b/app/javascript/mastodon/features/status/components/card.jsx index c211dc64c89dec..f37b558c4cd50e 100644 --- a/app/javascript/mastodon/features/status/components/card.jsx +++ b/app/javascript/mastodon/features/status/components/card.jsx @@ -10,9 +10,9 @@ import classNames from 'classnames'; import Immutable from 'immutable'; import ImmutablePropTypes from 'react-immutable-proptypes'; -import DescriptionIcon from 'mastodon/../material-icons/400-24px/description-fill.svg?react'; -import OpenInNewIcon from 'mastodon/../material-icons/400-24px/open_in_new.svg?react'; -import PlayArrowIcon from 'mastodon/../material-icons/400-24px/play_arrow-fill.svg?react'; +import DescriptionIcon from '@/material-icons/400-24px/description-fill.svg?react'; +import OpenInNewIcon from '@/material-icons/400-24px/open_in_new.svg?react'; +import PlayArrowIcon from '@/material-icons/400-24px/play_arrow-fill.svg?react'; import { Blurhash } from 'mastodon/components/blurhash'; import { Icon } from 'mastodon/components/icon'; import { RelativeTimestamp } from 'mastodon/components/relative_timestamp'; diff --git a/app/javascript/mastodon/features/status/components/detailed_status.jsx b/app/javascript/mastodon/features/status/components/detailed_status.jsx index ccb6bed05f44ba..a2bc98746ebd5b 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.jsx +++ b/app/javascript/mastodon/features/status/components/detailed_status.jsx @@ -8,11 +8,11 @@ import { Link, withRouter } from 'react-router-dom'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import AlternateEmailIcon from 'mastodon/../material-icons/400-24px/alternate_email.svg?react'; -import ReferenceIcon from 'mastodon/../material-icons/400-24px/link.svg?react'; -import EmojiReactionIcon from 'mastodon/../material-icons/400-24px/mood.svg?react'; -import RepeatIcon from 'mastodon/../material-icons/400-24px/repeat.svg?react'; -import StarIcon from 'mastodon/../material-icons/400-24px/star-fill.svg?react'; +import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; +import ReferenceIcon from '@/material-icons/400-24px/link.svg?react'; +import EmojiReactionIcon from '@/material-icons/400-24px/mood.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; +import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; import { AnimatedNumber } from 'mastodon/components/animated_number'; import EditedTimestamp from 'mastodon/components/edited_timestamp'; import { getHashtagBarForStatus } from 'mastodon/components/hashtag_bar'; diff --git a/app/javascript/mastodon/features/status/index.jsx b/app/javascript/mastodon/features/status/index.jsx index 5df2dac4b69b68..2f7f418c9fbecb 100644 --- a/app/javascript/mastodon/features/status/index.jsx +++ b/app/javascript/mastodon/features/status/index.jsx @@ -14,8 +14,8 @@ import { connect } from 'react-redux'; import { HotKeys } from 'react-hotkeys'; -import VisibilityIcon from 'mastodon/../material-icons/400-24px/visibility.svg?react'; -import VisibilityOffIcon from 'mastodon/../material-icons/400-24px/visibility_off.svg?react'; +import VisibilityIcon from '@/material-icons/400-24px/visibility.svg?react'; +import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; import { Icon } from 'mastodon/components/icon'; import { LoadingIndicator } from 'mastodon/components/loading_indicator'; import ScrollContainer from 'mastodon/containers/scroll_container'; diff --git a/app/javascript/mastodon/features/status_references/index.jsx b/app/javascript/mastodon/features/status_references/index.jsx index 734bb36aef9be6..c36d6fadc422e3 100644 --- a/app/javascript/mastodon/features/status_references/index.jsx +++ b/app/javascript/mastodon/features/status_references/index.jsx @@ -8,7 +8,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import RefreshIcon from 'mastodon/../material-icons/400-24px/refresh.svg?react'; +import RefreshIcon from '@/material-icons/400-24px/refresh.svg?react'; import { fetchStatusReferences } from 'mastodon/actions/interactions'; import ColumnHeader from 'mastodon/components/column_header'; import { Icon } from 'mastodon/components/icon'; diff --git a/app/javascript/mastodon/features/subscribed_languages_modal/index.jsx b/app/javascript/mastodon/features/subscribed_languages_modal/index.jsx index 8c1a8f486cb147..0531346f91dad0 100644 --- a/app/javascript/mastodon/features/subscribed_languages_modal/index.jsx +++ b/app/javascript/mastodon/features/subscribed_languages_modal/index.jsx @@ -8,7 +8,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { followAccount } from 'mastodon/actions/accounts'; import { Button } from 'mastodon/components/button'; import { IconButton } from 'mastodon/components/icon_button'; diff --git a/app/javascript/mastodon/features/ui/components/boost_modal.jsx b/app/javascript/mastodon/features/ui/components/boost_modal.jsx index 62897a9f1ca44e..fb5225d7b767d7 100644 --- a/app/javascript/mastodon/features/ui/components/boost_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/boost_modal.jsx @@ -9,7 +9,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import RepeatIcon from 'mastodon/../material-icons/400-24px/repeat.svg?react'; +import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; import { changeBoostPrivacy } from 'mastodon/actions/boosts'; import AttachmentList from 'mastodon/components/attachment_list'; import { Icon } from 'mastodon/components/icon'; diff --git a/app/javascript/mastodon/features/ui/components/bundle_modal_error.jsx b/app/javascript/mastodon/features/ui/components/bundle_modal_error.jsx index dd2a10608d84d6..d1c9e368838719 100644 --- a/app/javascript/mastodon/features/ui/components/bundle_modal_error.jsx +++ b/app/javascript/mastodon/features/ui/components/bundle_modal_error.jsx @@ -3,7 +3,7 @@ import { PureComponent } from 'react'; import { defineMessages, injectIntl } from 'react-intl'; -import RefreshIcon from 'mastodon/../material-icons/400-24px/refresh.svg?react'; +import RefreshIcon from '@/material-icons/400-24px/refresh.svg?react'; import { IconButton } from '../../../components/icon_button'; diff --git a/app/javascript/mastodon/features/ui/components/compare_history_modal.jsx b/app/javascript/mastodon/features/ui/components/compare_history_modal.jsx index 1080c303c5d7da..4227c741317ffd 100644 --- a/app/javascript/mastodon/features/ui/components/compare_history_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/compare_history_modal.jsx @@ -8,7 +8,7 @@ import { connect } from 'react-redux'; import escapeTextContentForBrowser from 'escape-html'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { closeModal } from 'mastodon/actions/modal'; import { IconButton } from 'mastodon/components/icon_button'; import InlineAccount from 'mastodon/components/inline_account'; diff --git a/app/javascript/mastodon/features/ui/components/embed_modal.jsx b/app/javascript/mastodon/features/ui/components/embed_modal.jsx index 595e9771b5e4fe..a4e5fc9dfb3449 100644 --- a/app/javascript/mastodon/features/ui/components/embed_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/embed_modal.jsx @@ -4,7 +4,7 @@ import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import api from 'mastodon/api'; import { IconButton } from 'mastodon/components/icon_button'; diff --git a/app/javascript/mastodon/features/ui/components/filter_modal.jsx b/app/javascript/mastodon/features/ui/components/filter_modal.jsx index 25cda00bea9df5..477575bd7b3ece 100644 --- a/app/javascript/mastodon/features/ui/components/filter_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/filter_modal.jsx @@ -5,7 +5,7 @@ import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { fetchFilters, createFilter, createFilterStatus } from 'mastodon/actions/filters'; import { fetchStatus } from 'mastodon/actions/statuses'; import { IconButton } from 'mastodon/components/icon_button'; diff --git a/app/javascript/mastodon/features/ui/components/focal_point_modal.jsx b/app/javascript/mastodon/features/ui/components/focal_point_modal.jsx index a3bb22bd99ef09..25ad1e2e9ff05c 100644 --- a/app/javascript/mastodon/features/ui/components/focal_point_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/focal_point_modal.jsx @@ -16,7 +16,7 @@ import tesseractWorkerPath from 'tesseract.js/dist/worker.min.js'; // eslint-disable-next-line import/no-extraneous-dependencies import tesseractCorePath from 'tesseract.js-core/tesseract-core.wasm.js'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { Button } from 'mastodon/components/button'; import { GIFV } from 'mastodon/components/gifv'; import { IconButton } from 'mastodon/components/icon_button'; diff --git a/app/javascript/mastodon/features/ui/components/follow_requests_column_link.jsx b/app/javascript/mastodon/features/ui/components/follow_requests_column_link.jsx index 6df753b0694389..4aa009263150cd 100644 --- a/app/javascript/mastodon/features/ui/components/follow_requests_column_link.jsx +++ b/app/javascript/mastodon/features/ui/components/follow_requests_column_link.jsx @@ -6,7 +6,7 @@ import { injectIntl, defineMessages } from 'react-intl'; import { List as ImmutableList } from 'immutable'; import { connect } from 'react-redux'; -import PersonAddIcon from 'mastodon/../material-icons/400-24px/person_add.svg?react'; +import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; import { fetchFollowRequests } from 'mastodon/actions/accounts'; import { IconWithBadge } from 'mastodon/components/icon_with_badge'; import ColumnLink from 'mastodon/features/ui/components/column_link'; diff --git a/app/javascript/mastodon/features/ui/components/header.jsx b/app/javascript/mastodon/features/ui/components/header.jsx index 06cb164a348649..d256615b5278f6 100644 --- a/app/javascript/mastodon/features/ui/components/header.jsx +++ b/app/javascript/mastodon/features/ui/components/header.jsx @@ -7,8 +7,8 @@ import { Link, withRouter } from 'react-router-dom'; import { connect } from 'react-redux'; -import RefreshIcon from 'mastodon/../material-icons/400-24px/refresh.svg?react'; -import SearchIcon from 'mastodon/../material-icons/400-24px/search.svg?react'; +import RefreshIcon from '@/material-icons/400-24px/refresh.svg?react'; +import SearchIcon from '@/material-icons/400-24px/search.svg?react'; import { openModal } from 'mastodon/actions/modal'; import { fetchServer } from 'mastodon/actions/server'; import { Avatar } from 'mastodon/components/avatar'; diff --git a/app/javascript/mastodon/features/ui/components/image_modal.jsx b/app/javascript/mastodon/features/ui/components/image_modal.jsx index 5a700dc1f74eec..f08ce15342e061 100644 --- a/app/javascript/mastodon/features/ui/components/image_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/image_modal.jsx @@ -5,7 +5,7 @@ import { defineMessages, injectIntl } from 'react-intl'; import classNames from 'classnames'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { IconButton } from 'mastodon/components/icon_button'; import ImageLoader from './image_loader'; diff --git a/app/javascript/mastodon/features/ui/components/list_panel.jsx b/app/javascript/mastodon/features/ui/components/list_panel.jsx index 673e14b291c128..eccaf7c3b8a675 100644 --- a/app/javascript/mastodon/features/ui/components/list_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/list_panel.jsx @@ -5,8 +5,8 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import ListAltIcon from 'mastodon/../material-icons/400-24px/list_alt.svg?react'; -import AntennaIcon from 'mastodon/../material-icons/400-24px/wifi.svg?react'; +import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; +import AntennaIcon from '@/material-icons/400-24px/wifi.svg?react'; import { fetchAntennas } from 'mastodon/actions/antennas'; import { fetchLists } from 'mastodon/actions/lists'; diff --git a/app/javascript/mastodon/features/ui/components/media_modal.jsx b/app/javascript/mastodon/features/ui/components/media_modal.jsx index b5b5d88693f9fa..0f6e8a727bea3f 100644 --- a/app/javascript/mastodon/features/ui/components/media_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/media_modal.jsx @@ -9,9 +9,9 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import ReactSwipeableViews from 'react-swipeable-views'; -import ChevronLeftIcon from 'mastodon/../material-icons/400-24px/chevron_left.svg?react'; -import ChevronRightIcon from 'mastodon/../material-icons/400-24px/chevron_right.svg?react'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import ChevronLeftIcon from '@/material-icons/400-24px/chevron_left.svg?react'; +import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { getAverageFromBlurhash } from 'mastodon/blurhash'; import { GIFV } from 'mastodon/components/gifv'; import { Icon } from 'mastodon/components/icon'; diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx index fe392fd53b7c51..33e511bbb8c3dd 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx @@ -5,19 +5,19 @@ import { defineMessages, injectIntl } from 'react-intl'; import { Link } from 'react-router-dom'; -import CirclesIcon from 'mastodon/../material-icons/400-24px/account_circle-fill.svg?react'; -import AlternateEmailIcon from 'mastodon/../material-icons/400-24px/alternate_email.svg?react'; -import BookmarksIcon from 'mastodon/../material-icons/400-24px/bookmarks-fill.svg?react'; -import PeopleIcon from 'mastodon/../material-icons/400-24px/group.svg?react'; -import HomeIcon from 'mastodon/../material-icons/400-24px/home-fill.svg?react'; -import ListAltIcon from 'mastodon/../material-icons/400-24px/list_alt.svg?react'; -import MoreHorizIcon from 'mastodon/../material-icons/400-24px/more_horiz.svg?react'; -import PublicIcon from 'mastodon/../material-icons/400-24px/public.svg?react'; -import SearchIcon from 'mastodon/../material-icons/400-24px/search.svg?react'; -import SettingsIcon from 'mastodon/../material-icons/400-24px/settings-fill.svg?react'; -import StarIcon from 'mastodon/../material-icons/400-24px/star-fill.svg?react'; -import TagIcon from 'mastodon/../material-icons/400-24px/tag.svg?react'; -import AntennaIcon from 'mastodon/../material-icons/400-24px/wifi.svg?react'; +import CirclesIcon from '@/material-icons/400-24px/account_circle-fill.svg?react'; +import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; +import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; +import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; +import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; +import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; +import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; +import PublicIcon from '@/material-icons/400-24px/public.svg?react'; +import SearchIcon from '@/material-icons/400-24px/search.svg?react'; +import SettingsIcon from '@/material-icons/400-24px/settings-fill.svg?react'; +import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; +import TagIcon from '@/material-icons/400-24px/tag.svg?react'; +import AntennaIcon from '@/material-icons/400-24px/wifi.svg?react'; import { WordmarkLogo } from 'mastodon/components/logo'; import { NavigationPortal } from 'mastodon/components/navigation_portal'; import { enableDtlMenu, timelinePreview, trendsEnabled, dtlTag, enableLocalTimeline, isHideItem } from 'mastodon/initial_state'; diff --git a/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js b/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js index 34e868acc87e20..7d59d616d83003 100644 --- a/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js +++ b/app/javascript/mastodon/features/ui/components/notifications_counter_icon.js @@ -1,6 +1,6 @@ import { connect } from 'react-redux'; -import NotificationsIcon from 'mastodon/../material-icons/400-24px/notifications-fill.svg?react'; +import NotificationsIcon from '@/material-icons/400-24px/notifications-fill.svg?react'; import { IconWithBadge } from 'mastodon/components/icon_with_badge'; diff --git a/app/javascript/mastodon/features/ui/components/report_modal.jsx b/app/javascript/mastodon/features/ui/components/report_modal.jsx index aae0e96ac4fb6b..6584364609522c 100644 --- a/app/javascript/mastodon/features/ui/components/report_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/report_modal.jsx @@ -7,7 +7,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import CloseIcon from 'mastodon/../material-icons/400-24px/close.svg?react'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { submitReport } from 'mastodon/actions/reports'; import { fetchServer } from 'mastodon/actions/server'; import { expandAccountTimeline } from 'mastodon/actions/timelines'; diff --git a/app/javascript/mastodon/features/ui/components/zoomable_image.jsx b/app/javascript/mastodon/features/ui/components/zoomable_image.jsx index e3fa7c3b8a5ab8..272a3cff009186 100644 --- a/app/javascript/mastodon/features/ui/components/zoomable_image.jsx +++ b/app/javascript/mastodon/features/ui/components/zoomable_image.jsx @@ -3,8 +3,8 @@ import { PureComponent } from 'react'; import { defineMessages, injectIntl } from 'react-intl'; -import FullscreenExitIcon from 'mastodon/../material-icons/400-24px/fullscreen_exit.svg?react'; -import RectangleIcon from 'mastodon/../material-icons/400-24px/rectangle.svg?react'; +import FullscreenExitIcon from '@/material-icons/400-24px/fullscreen_exit.svg?react'; +import RectangleIcon from '@/material-icons/400-24px/rectangle.svg?react'; import { IconButton } from 'mastodon/components/icon_button'; const messages = defineMessages({ diff --git a/app/javascript/mastodon/features/video/index.jsx b/app/javascript/mastodon/features/video/index.jsx index efcbbc174e9ab7..89a8ba560a0e85 100644 --- a/app/javascript/mastodon/features/video/index.jsx +++ b/app/javascript/mastodon/features/video/index.jsx @@ -9,14 +9,14 @@ import { is } from 'immutable'; import { throttle } from 'lodash'; -import FullscreenIcon from 'mastodon/../material-icons/400-24px/fullscreen.svg?react'; -import FullscreenExitIcon from 'mastodon/../material-icons/400-24px/fullscreen_exit.svg?react'; -import PauseIcon from 'mastodon/../material-icons/400-24px/pause.svg?react'; -import PlayArrowIcon from 'mastodon/../material-icons/400-24px/play_arrow-fill.svg?react'; -import RectangleIcon from 'mastodon/../material-icons/400-24px/rectangle.svg?react'; -import VisibilityOffIcon from 'mastodon/../material-icons/400-24px/visibility_off.svg?react'; -import VolumeOffIcon from 'mastodon/../material-icons/400-24px/volume_off-fill.svg?react'; -import VolumeUpIcon from 'mastodon/../material-icons/400-24px/volume_up-fill.svg?react'; +import FullscreenIcon from '@/material-icons/400-24px/fullscreen.svg?react'; +import FullscreenExitIcon from '@/material-icons/400-24px/fullscreen_exit.svg?react'; +import PauseIcon from '@/material-icons/400-24px/pause.svg?react'; +import PlayArrowIcon from '@/material-icons/400-24px/play_arrow-fill.svg?react'; +import RectangleIcon from '@/material-icons/400-24px/rectangle.svg?react'; +import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; +import VolumeOffIcon from '@/material-icons/400-24px/volume_off-fill.svg?react'; +import VolumeUpIcon from '@/material-icons/400-24px/volume_up-fill.svg?react'; import { Blurhash } from 'mastodon/components/blurhash'; import { Icon } from 'mastodon/components/icon'; import { playerSettings } from 'mastodon/settings'; diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index c4238edcd4000d..4b555c4829c94e 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -13,14 +13,12 @@ "about.rules": "Normes del sirvidor", "account.account_note_header": "Nota", "account.add_or_remove_from_list": "Amestar o quitar de les llistes", - "account.badges.bot": "Automatizáu", "account.badges.group": "Grupu", "account.block": "Bloquiar a @{name}", "account.block_domain": "Bloquiar el dominiu {domain}", "account.block_short": "Bloquiar", "account.blocked": "Perfil bloquiáu", "account.browse_more_on_origin_server": "Restolar más nel perfil orixinal", - "account.cancel_follow_request": "Atayar siguimientu", "account.copy": "Copiar I'enllaz al perfil", "account.direct": "Mentar a @{name} per privao", "account.disable_notifications": "Dexar d'avisame cuando @{name} espublice artículos", @@ -28,13 +26,11 @@ "account.edit_profile": "Editar el perfil", "account.enable_notifications": "Avisame cuando @{name} espublice artículos", "account.endorse": "Destacar nel perfil", - "account.featured_tags.last_status_at": "Últimu estáu en {date}", - "account.featured_tags.last_status_never": "Sin estaos", + "account.featured_tags.last_status_never": "Nun hai nengún artículu", "account.featured_tags.title": "Etiquetes destacaes de: {name}", "account.follow": "Siguir", "account.followers": "Siguidores", "account.followers.empty": "Naide sigue a esti perfil.", - "account.followers_counter": "{count, plural, one {{counter} Siguíu} other {{counter} Siguíos}}", "account.following": "Siguiendo", "account.following_counter": "{count, plural,one {Sigue a {counter}} other {Sigue a {counter}}}", "account.follows.empty": "Esti perfil nun sigue a naide.", @@ -42,7 +38,6 @@ "account.hide_reblogs": "Anubrir los artículos compartíos de @{name}", "account.in_memoriam": "N'alcordanza.", "account.joined_short": "Data de xunión", - "account.languages": "Camudar llingües suscrites", "account.link_verified_on": "La propiedá d'esti enllaz foi comprobada'l {date}", "account.media": "Multimedia", "account.mention": "Mentar a @{name}", @@ -108,6 +103,7 @@ "community.column_settings.remote_only": "Namás lo remoto", "compose.language.change": "Camudar la llingua", "compose.language.search": "Buscar llingües…", + "compose.published.body": "Espublizóse l'artículu.", "compose_form.direct_message_warning_learn_more": "Saber más", "compose_form.encryption_warning": "Los artículos de Mastodon nun tán cifraos de puntu a puntu. Nun compartas nengún tipu d'información sensible per Mastodon.", "compose_form.lock_disclaimer": "La to cuenta nun ye {locked}. Cualesquier perfil pue siguite pa ver los artículos que son namás pa siguidores.", @@ -299,6 +295,7 @@ "navigation_bar.lists": "Llistes", "navigation_bar.logout": "Zarrar la sesión", "navigation_bar.mutes": "Perfiles colos avisos desactivaos", + "navigation_bar.opened_in_classic_interface": "Los artículos, les cuentes ya otres páxines específiques ábrense por defeutu na interfaz web clásica.", "navigation_bar.pins": "Artículos fixaos", "navigation_bar.preferences": "Preferencies", "navigation_bar.public_timeline": "Llinia de tiempu federada", @@ -334,7 +331,7 @@ "notifications.group": "{count} avisos", "notifications.mark_as_read": "Marcar tolos avisos como lleíos", "notifications.permission_required": "Los avisos d'escritoriu nun tán disponibles porque nun se concedió'l permisu riquíu.", - "onboarding.actions.go_to_explore": "See what's trending", + "onboarding.profile.note_hint": "Pues @mentar a otros perfiles o poner #etiquetes…", "onboarding.start.lead": "Xá yes parte de Mastodon, una plataforma social multimedia descentralizada onde tu ya non un algoritmu, personalices la to esperiencia. Vamos presentate esti llugar social nuevu:", "onboarding.start.skip": "¿Nun precises ayuda pa comenzar?", "onboarding.steps.follow_people.body": "Mastodon trata namás de siguir a cuentes interesantes.", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 9259f201540513..94d13e8d910a1e 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -393,6 +393,7 @@ "lists.search": "Leita millum fólk, sum tú fylgir", "lists.subheading": "Tínir listar", "load_pending": "{count, plural, one {# nýtt evni} other {# nýggj evni}}", + "loading_indicator.label": "Innlesur…", "media_gallery.toggle_visible": "{number, plural, one {Fjal mynd} other {Fjal myndir}}", "moved_to_account_banner.text": "Konta tín {disabledAccount} er í løtuni óvirkin, tí tú flutti til {movedToAccount}.", "mute_modal.duration": "Tíðarbil", @@ -483,6 +484,15 @@ "onboarding.follows.title": "Vælumtókt á Mastodon", "onboarding.profile.discoverable": "Ger tað møguligt hjá øðrum at finna vangan hjá mær", "onboarding.profile.discoverable_hint": "Tá tú játtar at onnur skulu kunna finna teg á Mastodon, so kann henda, at postar tínir síggjast í leitiúrslitum og rákum, og vangin hjá tær kann vera skotin upp fyri fólki við áhugamálum sum minna um tíni.", + "onboarding.profile.display_name": "Navn, sum skal vísast", + "onboarding.profile.display_name_hint": "Títt fulla navn ella títt stuttliga navn…", + "onboarding.profile.lead": "Tú kanst altíð gera hetta liðugt seinni í stillingunum, har enn fleiri tillagingarmøguleikar eru tøkir.", + "onboarding.profile.note": "Ævilýsing", + "onboarding.profile.note_hint": "Tú kanst @umrøða onnur fólk ella #frámerki…", + "onboarding.profile.save_and_continue": "Goym og halt fram", + "onboarding.profile.title": "Vangauppsetan", + "onboarding.profile.upload_avatar": "Legg vangamynd upp", + "onboarding.profile.upload_header": "Legg vangahøvd upp", "onboarding.share.lead": "Lat fólk vita, hvussu tey kunnu finna teg á Mastodon!", "onboarding.share.message": "Eg eri {username} á #Mastodon! Kom og fylg mær á {url}", "onboarding.share.next_steps": "Møgulig næstu stig:", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 48bbb6b3077fa9..e857b6955421b2 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -20,7 +20,7 @@ "account.block_short": "Bloquear", "account.blocked": "Bloqueada", "account.browse_more_on_origin_server": "Busca máis no perfil orixinal", - "account.cancel_follow_request": "Cancelar a solicitude de seguimento", + "account.cancel_follow_request": "Desbotar a solicitude de seguimento", "account.copy": "Copiar ligazón ao perfil", "account.direct": "Mencionar de xeito privado a @{name}", "account.disable_notifications": "Deixar de notificarme cando @{name} publica", @@ -184,7 +184,7 @@ "confirmations.mute.explanation": "Isto agochará as súas publicacións ou as que a mencionen, mais poderá ler as túas publicacións e ser seguidora túa.", "confirmations.mute.message": "Tes a certeza de querer acalar a {name}?", "confirmations.redraft.confirm": "Eliminar e reescribir", - "confirmations.redraft.message": "Tes a certeza de querer eliminar esta publicación e reescribila? Perderás as comparticións e favoritas, e as respostas á publicación orixinal ficarán orfas.", + "confirmations.redraft.message": "Tes a certeza de querer eliminar esta publicación e reescribila? Perderás as promocións e favorecementos, e as respostas á publicación orixinal ficarán orfas.", "confirmations.reply.confirm": "Responder", "confirmations.reply.message": "Ao responder sobrescribirás a mensaxe que estás a compor. Tes a certeza de que queres continuar?", "confirmations.unfollow.confirm": "Deixar de seguir", @@ -204,7 +204,7 @@ "disabled_account_banner.text": "Actualmente a túa conta {disabledAccount} está desactivada.", "dismissable_banner.community_timeline": "Estas son as publicacións máis recentes das persoas que teñen a súa conta en {domain}.", "dismissable_banner.dismiss": "Desbotar", - "dismissable_banner.explore_links": "As persoas deste servidor e da rede descentralizada están a falar destas historias agora mesmo.", + "dismissable_banner.explore_links": "Estas son as novas historias más compartidas hoxe na web social. Aparecen primeiro as novas compartidas por máis persoas diferentes.", "dismissable_banner.explore_statuses": "Estas son as publicacións da web social que hoxe están gañando popularidade. As publicacións con máis promocións e favorecemento teñen puntuación máis alta.", "dismissable_banner.explore_tags": "Estes cancelos están gañando popularidade entre as persoas deste servidor e noutros servidores da rede descentralizada.", "dismissable_banner.public_timeline": "Estas son as publicacións públicas máis recentes das persoas que as usuarias de {domain} están a seguir.", @@ -240,7 +240,7 @@ "empty_column.follow_requests": "Non tes peticións de seguimento. Cando recibas unha, amosarase aquí.", "empty_column.followed_tags": "Aínda non seguiches ningún cancelo. Cando o fagas aparecerán aquí.", "empty_column.hashtag": "Aínda non hai nada con este cancelo.", - "empty_column.home": "A túa cronoloxía inicial está baleira! Segue a outras usuarias para enchela. {suggestions}", + "empty_column.home": "A túa cronoloxía inicial está baleira! Sigue a outras usuarias para enchela.", "empty_column.list": "Aínda non hai nada nesta listaxe. Cando as usuarias incluídas na listaxe publiquen mensaxes, amosaranse aquí.", "empty_column.lists": "Aínda non tes listaxes. Cando crees unha, amosarase aquí.", "empty_column.mutes": "Aínda non silenciaches a ningúnha usuaria.", @@ -346,7 +346,7 @@ "keyboard_shortcuts.down": "Para mover cara abaixo na listaxe", "keyboard_shortcuts.enter": "Para abrir publicación", "keyboard_shortcuts.favourite": "Marcar como favorita", - "keyboard_shortcuts.favourites": "Para abrir a listaxe das favoritas", + "keyboard_shortcuts.favourites": "Para abrir a lista das favoritas", "keyboard_shortcuts.federated": "Para abrir a cronoloxía federada", "keyboard_shortcuts.heading": "Atallos do teclado", "keyboard_shortcuts.home": "Para abrir a cronoloxía inicial", @@ -383,7 +383,7 @@ "lists.delete": "Eliminar listaxe", "lists.edit": "Editar listaxe", "lists.edit.submit": "Mudar o título", - "lists.exclusive": "Agocha estas publicacións no inicio", + "lists.exclusive": "Agocha estas publicacións no Inicio", "lists.new.create": "Engadir listaxe", "lists.new.title_placeholder": "Título da nova listaxe", "lists.replies_policy.followed": "Toda usuaria seguida", @@ -480,8 +480,8 @@ "onboarding.actions.go_to_home": "Vai á cronoloxía de inicio", "onboarding.compose.template": "Ola #Mastodon!", "onboarding.follows.empty": "Desgraciadamente agora mesmo non hai nada que mostrar. Podes intentalo coa busca ou na páxina descubrir para atopar persoas ás que seguir, ou intentalo máis tarde.", - "onboarding.follows.lead": "Podes facer que a túa cronoloxía de inicio sexa como ti a queres. Canta máis xente sigas máis interesante será. Estes perfís poderían axudarche a comezar —sempre poderás deixar de seguilos despois!", - "onboarding.follows.title": "Popular en Mastodon", + "onboarding.follows.lead": "A cronoloxía de Inicio é o principal xeito de desfrutar Mastodon. Cantas máis persoas sigas mais interesante e activa será. Para comezar, aquí tes algunhas suxestións:", + "onboarding.follows.title": "Personaliza a cronoloxía de inicio", "onboarding.profile.discoverable": "Que o meu perfil se poida atopar", "onboarding.profile.discoverable_hint": "Cando elixes que poidan atoparte en Mastodon as túas publicacións aparecerán nos resultados das buscas e nos temas en voga, e o teu perfil podería ser suxerido para seguimento a persoas con intereses semellantes aos teus.", "onboarding.profile.display_name": "Nome público", @@ -494,20 +494,20 @@ "onboarding.profile.upload_avatar": "Subir imaxe do perfil", "onboarding.profile.upload_header": "Subir cabeceira para o perfil", "onboarding.share.lead": "Fai que as persoas saiban como atoparte en Mastodon!", - "onboarding.share.message": "Son {username} en #Mastodon! Ségueme en {url}", + "onboarding.share.message": "Son {username} en #Mastodon! Sígueme en {url}", "onboarding.share.next_steps": "Seguintes pasos:", "onboarding.share.title": "Comparte o teu perfil", - "onboarding.start.lead": "A túa nova conta en Mastodon está preparada. Mira de que xeito lle podes sacar proveito:", + "onboarding.start.lead": "Xa formas parte de Mastodon, unha plataforma de relacións sociais descentralizada, única, onde ti —e non un algoritmo— elixes o que les. Axudámosche cos primeiros pasos:", "onboarding.start.skip": "Queres omitir todo isto?", "onboarding.start.title": "Pois xa está!", - "onboarding.steps.follow_people.body": "Constrúes a túa cronoloxía. Énchea con persoas interesantes.", - "onboarding.steps.follow_people.title": "Segue a {count, plural, one {unha persoa} other {# persoas}}", - "onboarding.steps.publish_status.body": "Saúda a todo o mundo.", + "onboarding.steps.follow_people.body": "Mastodon consiste en seguir a persoas interesantes.", + "onboarding.steps.follow_people.title": "Personaliza a túa cronoloxía", + "onboarding.steps.publish_status.body": "Exprésate con texto, fotos, vídeos ou enquisas {emoji}", "onboarding.steps.publish_status.title": "Escribe a túa primeira publicación", "onboarding.steps.setup_profile.body": "Ao engadir información ao teu perfil é máis probable que teñas máis interaccións.", "onboarding.steps.setup_profile.title": "Personaliza o perfil", "onboarding.steps.share_profile.body": "Dille ás amizades como poden atoparte en Mastodon!", - "onboarding.steps.share_profile.title": "Comparte o teu perfil", + "onboarding.steps.share_profile.title": "Comparte o teu perfil en Mastodon", "onboarding.tips.2fa": "Sabes que? Podes protexer a túa conta configurando un segundo factor de autenticación nos axustes. Funciona con calquera app TOTP, non precisas un número de teléfono!", "onboarding.tips.accounts_from_other_servers": "Sabes que? Como Mastodon é descentralizado, algúns perfís que atopes estarán en servidores diferentes ao teu. Pero podes interactuar igualmente con eles! O seu servidor é o que ven despois da @ no seu identificador!", "onboarding.tips.migration": "Sabes que? Se cres que {domain} non é o servidor axeitado para ti, podes mover a conta a outro servidor Mastodon sen perder as túas seguidoras. Incluso podes hospedar o teu propio servidor!", @@ -573,7 +573,7 @@ "report.reasons.dislike": "Non me gusta", "report.reasons.dislike_description": "Non é algo que queiras ver", "report.reasons.legal": "É ilegal", - "report.reasons.legal_description": "Cres que atenta contra as leis do país do teu servidor", + "report.reasons.legal_description": "Cres que atenta contra as leis do país do teu pais ou servidor", "report.reasons.other": "É outra cousa", "report.reasons.other_description": "O problema non cae dentro de outras categorías", "report.reasons.spam": "É spam", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 76d7c1d3812f89..412159bef9b7b7 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -386,6 +386,7 @@ "navigation_bar.security": "सुरक्षा", "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", "notification.reblog": "{name} boosted your status", + "notification.status": "{name} ने अभी पोस्ट किया", "notifications.clear": "सूचनाएं हटाए", "notifications.column_settings.admin.report": "नई रिपोर्ट:", "notifications.column_settings.favourite": "पसंदीदा:", @@ -399,9 +400,12 @@ "notifications.column_settings.show": "कॉलम में दिखाएँ", "notifications.column_settings.sound": "ध्वनि चलाएँ", "notifications.column_settings.status": "New toots:", + "notifications.column_settings.unread_notifications.category": "अपठित सूचनाएं", + "notifications.column_settings.unread_notifications.highlight": "अपठित सूचनाओं को हाइलाइट करें", "notifications.column_settings.update": "संपादन:", "notifications.filter.all": "सभी", "notifications.filter.boosts": "बूस्ट", + "notifications.filter.favourites": "पसंदीदा", "notifications.filter.follows": "फॉलो", "notifications.filter.mentions": "उल्लेख", "notifications.filter.polls": "चुनाव परिणाम", @@ -416,6 +420,7 @@ "onboarding.follows.title": "Popular on Mastodon", "onboarding.profile.discoverable": "अपना प्रोफाइल खोजने योग्य बनाएं", "onboarding.profile.discoverable_hint": "जब आप मॅस्टोडॉन पर डिस्कवरेबिलिटी चुनते हैं तो आपके पोस्ट ट्रेंडिंग और सर्च में दिख सकते हैं और आपका प्रोफाइल आपके ही जैसे अकाउंट्स को सुझाया जा सकता है।", + "onboarding.profile.display_name": "प्रदर्शित नाम", "onboarding.share.message": "मैं {username} मॅस्टोडॉन पर हूं! मुझे यहां {url} फॉलो करें", "onboarding.share.next_steps": "आगे कि संभवित विधि", "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", @@ -445,6 +450,9 @@ "recommended": "अनुशंसित", "refresh": "रीफ्रेश करें", "regeneration_indicator.label": "लोड हो रहा है...", + "relative_time.days": "{number}दिन", + "relative_time.full.days": "{number, plural, one {# दिन} other {# दिन}} पहले", + "relative_time.full.hours": "{number, plural,one {# घंटा} other {# घंटे}} पहले", "relative_time.full.just_now": "अभी-अभी", "relative_time.full.minutes": "{number, plural, one {# मिनट} other {# मिनट}} पहले", "relative_time.full.seconds": "{number, plural, one {# सेकंड} other {# सेकंड}} पहले", @@ -454,15 +462,23 @@ "relative_time.seconds": "{number} सेकंड", "relative_time.today": "आज", "reply_indicator.cancel": "रद्द करें", + "report.block": "ब्लॉक", "report.block_explanation": "आपको उनकी पोस्टें नहीं दिखेंगे। वे आपकी पोस्टें को देख नहीं पाएंगे और आपको फ़ॉलो नहीं कर पाएंगे। उन्हे पता लगेगा कि वे blocked हैं।", "report.categories.other": "अन्य", "report.categories.spam": "अवांछित", "report.category.title_account": "रूपरेखा", "report.close": "स्वीकार करें", "report.comment.title": "क्या और कुछ है जिसके बारे में आपको लगता है कि हमें सूचित होना चाहिए?", + "report.next": "आगे", "report.placeholder": "Type or paste additional comments", "report.reasons.dislike": "मुझे यह पसंद नहीं है", + "report.reasons.legal": "यह अवैध है", + "report.reasons.legal_description": "आप मानते हैं कि यह आपके या सर्वर के देश के कानून का उल्लंघन करता है", "report.reasons.other": "कुछ और है।", + "report.reasons.violation": "यह सर्वर नियमों का उल्लंघन करता है", + "report.rules.title": "किन नियमों का उल्लंघन हो रहा है?", + "report.statuses.subtitle": "लागू होने वाले सभी का चयन करें", + "report.statuses.title": "क्या ऐसे कोई पोस्ट हैं जो इस रिपोर्ट का समर्थन करते हों?", "report.submit": "सबमिट करें", "report.target": "Report {target}", "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", @@ -480,11 +496,24 @@ "search_results.statuses": "Toots", "sign_in_banner.sign_in": "Sign in", "status.admin_status": "Open this status in the moderation interface", + "status.block": "@{name} को ब्लॉक करें", + "status.bookmark": "बुकमार्क", + "status.cannot_reblog": "रिपोस्ट को बूस्ट नहीं किया जा सकता", "status.copy": "Copy link to status", + "status.delete": "हटाएं", + "status.detailed_status": "विस्तृत वार्ता दृश्य", "status.direct": "निजी संदेश @{name} से", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", + "status.media.open": "खोलने के लिए क्लिक करें", + "status.media.show": "दिखाने के लिए क्लिक करें", + "status.mention": "@{name} का उल्लेख करें", + "status.more": "अतिरिक्त", + "status.mute": "@{name} म्यूट करें", + "status.mute_conversation": "इस वार्तालाप को म्यूट करें", "status.open": "Expand this status", + "status.pin": "प्रोफ़ाइल पर पिन करें", "status.pinned": "Pinned toot", + "status.read_more": "और पढ़ें", "status.reblog": "बूस्ट", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", "status.replied_to": "{name} का उत्तर दें", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index e790306e9cab62..a660eb77ff592b 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -9,14 +9,20 @@ "account.block": "Blocar @{name}", "account.block_short": "Blocar", "account.blocked": "Blocate", + "account.browse_more_on_origin_server": "Navigar plus sur le profilo original", "account.copy": "Copiar ligamine a profilo", + "account.domain_blocked": "Dominio blocate", "account.edit_profile": "Modificar profilo", + "account.enable_notifications": "Notifica me quando @{name} publica", "account.endorse": "Evidentiar sur le profilo", "account.featured_tags.last_status_at": "Ultime message in {date}", "account.featured_tags.last_status_never": "Necun messages", + "account.featured_tags.title": "Hashtags eminente de {name}", "account.follow": "Sequer", "account.follow_back": "Sequer etiam", "account.followers": "Sequitores", + "account.followers.empty": "Iste usator ancora non ha sequitores.", + "account.followers_counter": "{count, plural, one {{counter} sequitor} other {{counter} sequitores}}", "account.following": "Sequente", "account.go_to_profile": "Vader al profilo", "account.hide_reblogs": "Celar boosts de @{name}", @@ -30,6 +36,7 @@ "account.mute_short": "Silentiar", "account.muted": "Silentiate", "account.no_bio": "Nulle description fornite.", + "account.open_original_page": "Aperir le pagina original", "account.posts": "Messages", "account.posts_with_replies": "Messages e responsas", "account.share": "Compartir profilo de @{name}", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index ec0d30363c7f5b..623ff2248f9ae5 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -9,7 +9,7 @@ "about.domain_blocks.suspended.explanation": "Jokie duomenys iš šio serverio nebus apdorojami, saugomi ar keičiami, todėl bet kokia sąveika ar bendravimas su šio serverio naudotojais bus neįmanomas.", "about.domain_blocks.suspended.title": "Uždrausta", "about.not_available": "Ši informacija nebuvo pateikta šiame serveryje.", - "about.powered_by": "Decentralizuota socialinė žiniasklaida, kurią valdo {mastodon}", + "about.powered_by": "Decentralizuota socialinė medija, kurią valdo {mastodon}", "about.rules": "Serverio taisyklės", "account.account_note_header": "Pastaba", "account.add_or_remove_from_list": "Pridėti arba ištrinti iš sąrašų", @@ -27,24 +27,24 @@ "account.domain_blocked": "Užblokuotas domenas", "account.edit_profile": "Redaguoti profilį", "account.enable_notifications": "Pranešti man, kai @{name} paskelbia", - "account.endorse": "Savybė profilyje", + "account.endorse": "Rekomenduoti profilyje", "account.featured_tags.last_status_at": "Paskutinį kartą paskelbta {date}", "account.featured_tags.last_status_never": "Nėra įrašų", - "account.featured_tags.title": "{name} rekomenduojamos grotažymės", + "account.featured_tags.title": "{name} rekomenduojami saitažodžiai", "account.follow": "Sekti", "account.follow_back": "Sekti atgal", "account.followers": "Sekėjai", "account.followers.empty": "Šio naudotojo dar niekas neseka.", "account.followers_counter": "{count, plural, one {{counter} sekėjas} few {{counter} sekėjai} many {{counter} sekėjo} other {{counter} sekėjų}}", - "account.following": "Seka", - "account.following_counter": "{count, plural, one {{counter} Seka} few {{counter} Seka} many {{counter} Seka} other {{counter} Seka}}", + "account.following": "Sekama", + "account.following_counter": "{count, plural, one {{counter} sekimas} few {{counter} sekimai} many {{counter} sekimo} other {{counter} sekimų}}", "account.follows.empty": "Šis (-i) naudotojas (-a) dar nieko neseka.", "account.go_to_profile": "Eiti į profilį", "account.hide_reblogs": "Slėpti pakėlimus iš @{name}", "account.in_memoriam": "Atminimui.", "account.joined_short": "Prisijungė", "account.languages": "Keisti prenumeruojamas kalbas", - "account.link_verified_on": "Šios nuorodos nuosavybė buvo patikrinta {date}", + "account.link_verified_on": "Šios nuorodos nuosavybė buvo patikrinta {date}.", "account.locked_info": "Šios paskyros privatumo būsena nustatyta kaip užrakinta. Savininkas (-ė) rankiniu būdu peržiūri, kas gali sekti.", "account.media": "Medija", "account.mention": "Paminėti @{name}", @@ -58,8 +58,8 @@ "account.open_original_page": "Atidaryti originalinį puslapį", "account.posts": "Įrašai", "account.posts_with_replies": "Įrašai ir atsakymai", - "account.report": "Pranešti @{name}", - "account.requested": "Laukiama patvirtinimo. Spausk, kad atšaukti sekimo užklausą", + "account.report": "Pranešti apie @{name}", + "account.requested": "Laukiama patvirtinimo. Spustelėk, jei nori atšaukti sekimo prašymą.", "account.requested_follow": "{name} paprašė tave sekti", "account.share": "Bendrinti @{name} profilį", "account.show_reblogs": "Rodyti pakėlimus iš @{name}", @@ -69,28 +69,28 @@ "account.unblock_short": "Atblokuoti", "account.unendorse": "Nerodyti profilyje", "account.unfollow": "Nebesekti", - "account.unmute": "Atitildyti @{name}", - "account.unmute_notifications_short": "Atitildyti pranešimus", - "account.unmute_short": "Atitildyti", - "account_note.placeholder": "Spausk norėdamas (-a) pridėti pastabą", - "admin.dashboard.daily_retention": "Vartotojų išbuvimo rodiklis pagal dieną po registracijos", - "admin.dashboard.monthly_retention": "Naudotojų išlaikymo rodiklis pagal mėnesį po registracijos", + "account.unmute": "Atšaukti nutildymą @{name}", + "account.unmute_notifications_short": "Atšaukti nutildymą pranešimams", + "account.unmute_short": "Atšaukti nutildymą", + "account_note.placeholder": "Spustelėk norėdamas (-a) pridėti pastabą", + "admin.dashboard.daily_retention": "Naudotojų pasilikimo rodiklis pagal dieną po registracijos", + "admin.dashboard.monthly_retention": "Naudotojų pasilikimo rodiklis pagal mėnesį po registracijos", "admin.dashboard.retention.average": "Vidurkis", - "admin.dashboard.retention.cohort": "Registravimo mėnuo", + "admin.dashboard.retention.cohort": "Registracijos mėnuo", "admin.dashboard.retention.cohort_size": "Nauji naudotojai", "admin.impact_report.instance_accounts": "Paskyrų profiliai, kuriuos tai ištrintų", "admin.impact_report.instance_followers": "Sekėjai, kuriuos prarastų mūsų naudotojai", "admin.impact_report.instance_follows": "Sekėjai, kuriuos prarastų jų naudotojai", "admin.impact_report.title": "Poveikio apibendrinimas", "alert.rate_limited.message": "Pabandyk vėliau po {retry_time, time, medium}.", - "alert.rate_limited.title": "Spartos ribojimas", + "alert.rate_limited.title": "Sparta ribota", "alert.unexpected.message": "Įvyko netikėta klaida.", "alert.unexpected.title": "Ups!", "announcement.announcement": "Skelbimas", "attachments_list.unprocessed": "(neapdorotas)", "audio.hide": "Slėpti garsą", "autosuggest_hashtag.per_week": "{count} per savaitę", - "boost_modal.combo": "Gali spausti {combo}, kad praleisti kitą kartą", + "boost_modal.combo": "Gali paspausti {combo}, kad praleisti kitą kartą", "bundle_column_error.copy_stacktrace": "Kopijuoti klaidos ataskaitą", "bundle_column_error.error.body": "Užklausos puslapio nepavyko atvaizduoti. Tai gali būti dėl mūsų kodo klaidos arba naršyklės suderinamumo problemos.", "bundle_column_error.error.title": "O, ne!", @@ -104,10 +104,10 @@ "bundle_modal_error.message": "Kraunant šį komponentą kažkas nepavyko.", "bundle_modal_error.retry": "Bandyti dar kartą", "closed_registrations.other_server_instructions": "Kadangi Mastodon yra decentralizuotas, gali susikurti paskyrą kitame serveryje ir vis tiek bendrauti su šiuo serveriu.", - "closed_registrations_modal.description": "Sukurti paskyrą {domain} šiuo metu neįmanoma, tačiau nepamiršk, kad norint naudotis Mastodon nebūtina turėti paskyrą {domain}.", + "closed_registrations_modal.description": "Sukurti paskyrą {domain} šiuo metu neįmanoma, tačiau nepamiršk, kad norint naudotis Mastodon nebūtina turėti paskyrą domene {domain}.", "closed_registrations_modal.find_another_server": "Rasti kitą serverį", "closed_registrations_modal.preamble": "Mastodon yra decentralizuotas, todėl nesvarbu, kur susikursi paskyrą, galėsi sekti ir bendrauti su bet kuriuo šiame serveryje esančiu asmeniu. Jį gali net savarankiškai talpinti!", - "closed_registrations_modal.title": "Užsiregistravimas į Mastodon", + "closed_registrations_modal.title": "Užsiregistruoti Mastodon", "column.about": "Apie", "column.blocks": "Užblokuoti naudotojai", "column.bookmarks": "Žymės", @@ -116,15 +116,15 @@ "column.directory": "Naršyti profilius", "column.domain_blocks": "Užblokuoti domenai", "column.favourites": "Mėgstamiausi", - "column.firehose": "Tiesioginiai padavimai", - "column.follow_requests": "Sekti prašymus", + "column.firehose": "Tiesioginiai srautai", + "column.follow_requests": "Sekimo prašymus", "column.home": "Pagrindinis", "column.lists": "Sąrašai", "column.mutes": "Nutildyti naudotojai", "column.notifications": "Pranešimai", "column.pins": "Prisegti įrašai", "column.public": "Federacinė laiko skalė", - "column_back_button.label": "Atgal", + "column_back_button.label": "Grįžti", "column_header.hide_settings": "Slėpti nustatymus", "column_header.moveLeft_settings": "Judinti stulpelį į kairę", "column_header.moveRight_settings": "Judinti stulpelį į dešinę", diff --git a/app/javascript/mastodon/reducers/accounts.ts b/app/javascript/mastodon/reducers/accounts.ts index e6f07340c048ac..5a9cc7220c7624 100644 --- a/app/javascript/mastodon/reducers/accounts.ts +++ b/app/javascript/mastodon/reducers/accounts.ts @@ -59,25 +59,19 @@ export const accountsReducer: Reducer = ( return normalizeAccounts(state, action.payload.accounts); else if (followAccountSuccess.match(action)) { return state - .update( - action.payload.relationship.id, - (account) => account?.update('followers_count', (n) => n + 1), + .update(action.payload.relationship.id, (account) => + account?.update('followers_count', (n) => n + 1), ) - .update( - getCurrentUser(), - (account) => account?.update('following_count', (n) => n + 1), + .update(getCurrentUser(), (account) => + account?.update('following_count', (n) => n + 1), ); } else if (unfollowAccountSuccess.match(action)) return state - .update( - action.payload.relationship.id, - (account) => - account?.update('followers_count', (n) => Math.max(0, n - 1)), + .update(action.payload.relationship.id, (account) => + account?.update('followers_count', (n) => Math.max(0, n - 1)), ) - .update( - getCurrentUser(), - (account) => - account?.update('following_count', (n) => Math.max(0, n - 1)), + .update(getCurrentUser(), (account) => + account?.update('following_count', (n) => Math.max(0, n - 1)), ); else return state; }; diff --git a/app/javascript/styles/fonts/inter.scss b/app/javascript/styles/fonts/inter.scss new file mode 100644 index 00000000000000..bb4899b701efd3 --- /dev/null +++ b/app/javascript/styles/fonts/inter.scss @@ -0,0 +1,8 @@ +@font-face { + font-family: Inter; + src: url('../fonts/inter/inter-variable-font-slnt-wght.woff2') + format('woff2-variations'); + font-weight: 100 900; + font-style: normal; + mso-generic-font-family: swiss; /* stylelint-disable-line property-no-unknown -- Proprietary property for Outlook on Windows. */ +} diff --git a/app/javascript/styles/mailer.scss b/app/javascript/styles/mailer.scss index 92d00cae8b14e1..bd220bb1a8d62d 100644 --- a/app/javascript/styles/mailer.scss +++ b/app/javascript/styles/mailer.scss @@ -1,574 +1,621 @@ -@import 'mastodon/variables'; -@import 'fonts/roboto'; +@import 'fonts/inter'; -table, -td, -div { - box-sizing: border-box; -} - -html, body { - width: 100% !important; - min-width: 100%; + accent-color: #6364ff; + word-break: break-word; margin: 0; + background-color: #f3f2f5; padding: 0; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: none; + text-size-adjust: none; } -.email-body { - td, - div, - a, - span { - line-height: inherit; - } -} - -a { - &, - &:visited, - span { - text-decoration: none; - color: $ui-highlight-color; - } - - #outlook & { - padding: 0; - } +p, +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + background-color: transparent; + padding: 0; + border: none; + font-family: Inter, 'Lucida Grande', sans-serif; } img { - outline: none; - border: 0; - text-decoration: none; - -ms-interpolation-mode: bicubic; - clear: both; - line-height: 100%; + max-width: 100%; + height: auto; + border: none; + text-indent: 0; + vertical-align: middle; + color: inherit; + font-family: inherit; } table { - border-spacing: 0; - mso-table-lspace: 0; - mso-table-rspace: 0; + border: none; } -td { - vertical-align: top; +table + p { + margin-top: 16px; } -.auto-dir { - p { - unicode-bidi: plaintext; - } - - a { - unicode-bidi: isolate; - } +.email { + min-width: 280px; + font-family: Inter, 'Lucida Grande', sans-serif; + word-break: break-word; + color: #17063b; + background-color: #f3f2f5; } -.email-table, -.content-section, -.column, -.column-cell { +.email-container { + max-width: 740px; + margin: 0 auto; width: 100%; - min-width: 100%; } -.email-body { - font-size: 0 !important; - line-height: 100%; - text-align: center; - padding-left: 16px; - padding-right: 16px; -} - -.email-start { - padding-top: 32px; +// Outer email card +.email-card-table { + border-collapse: collapse; + width: 100%; } -.email-end { - padding-bottom: 32px; +.email-card-td { + overflow: hidden; + box-shadow: 0 4px 16px 0 rgba(23, 6, 59, 4%); + background-color: #fff; } -.email-body, -html, -body { - background-color: lighten($ui-base-color, 4%); -} - -.email-container, -.email-row, -.col-0, -.col-1, -.col-2, -.col-3, -.col-4, -.col-5, -.col-6 { - font-size: 0; - display: inline-block; +// Inner email card +.email-inner-card-table { + border-collapse: separate; width: 100%; - min-width: 100%; - min-width: 0 !important; - vertical-align: top; + border-radius: 12px; } -.content-cell { - width: 100%; - min-width: 100%; - min-width: 0 !important; +.email-inner-card-td-without-padding, +.email-inner-card-td { + border-radius: 12px; + overflow: hidden; + box-shadow: 0 4px 16px 0 rgba(23, 6, 59, 8%); + background-color: #fff; + border: 1px solid #dfdee3; } -.column-cell { - padding-top: 16px; - padding-bottom: 16px; - vertical-align: top; - - &.button-cell { - padding-top: 0; - } +.email-inner-card-td { + padding: 24px; } -.email-container { - max-width: 632px; - margin: 0 auto; - text-align: center; +// Account +.email-account-banner-table { + background-color: #f3f2f5; + border-top-left-radius: 12px; + border-top-right-radius: 12px; } -.email-row { - display: block; - max-width: 600px !important; - margin: 0 auto; - text-align: center; - clear: both; +.email-account-banner-td { + border-top-left-radius: 12px; + border-top-right-radius: 12px; + height: 140px; + vertical-align: bottom; + background-color: #f3f2f5; + background-position: center; + background-size: cover; } -.col-0 { - max-width: 50px; +.email-account-banner-inner-td { + padding: 24px 24px 0; + mso-padding-alt: 24px; } -.col-1 { - max-width: 100px; +.email-account-banner-overlap-div { + max-height: 42px; } -.col-2 { - max-width: 200px; -} +.email-account-banner-icon-table { + width: auto; + margin: 0; + overflow: hidden; + border-radius: 8px; + border-collapse: separate; + background-color: #fff; + border: 2px solid #fff; -.col-3 { - max-width: 300px; + img { + display: block; + max-width: 100%; + border: none; + border-radius: 6px; + } } -.col-4 { - max-width: 400px; +.email-account-body-td { + padding: 56px 24px 24px; + mso-padding-alt: 24px; } -.col-5 { - max-width: 500px; +.email-account-name { + font-size: 16px; + font-weight: 600; + line-height: 24px; + color: #17063b; } -.col-6 { - max-width: 600px; +.email-account-handle { + font-size: 14px; + line-height: 20px; + color: #746a89; } -.column-cell, -.column-cell td, -p { - font-family: Helvetica, Arial, sans-serif; +.email-account-stats-table { + td { + padding-right: 16px; + font-size: 14px; + line-height: 20px; + color: #746a89; + } - @media only screen { - font-family: $font-sans-serif, sans-serif !important; + b { + font-weight: 600; + color: #17063b; + } + + span { + white-space: nowrap; } } -.email-body .column-cell, -.column-cell, -p { - font-size: 15px; - line-height: 23px; - color: $ui-primary-color; - mso-line-height-rule: exactly; - text-rendering: optimizelegibility; +// Utility classes +.email-w-full { + width: 100%; } -p { - display: block; - margin-top: 0; - margin-bottom: 16px; +.email-prose { + p { + color: #17063b; + font-size: 14px; + line-height: 20px; - &.small { - font-size: 13px; - } + &:not(:last-child) { + margin-bottom: 16px; + } + + a:not([class]) { + color: #6364ff; + text-decoration: none; - &.lead { - font-size: 19px; - line-height: 27px; + &:hover { + color: #563acc !important; + } + } } } -h1, -h2, -h3, -h4, -h5, -h6 { - color: $ui-secondary-color; - margin-left: 0; - margin-right: 0; - margin-top: 20px; - margin-bottom: 8px; - padding: 0; - font-weight: 500; +.email-padding-24 { + padding: 24px; } -h1 { - font-size: 26px; - line-height: 36px; +.email-padding-top-24 { + padding-top: 24px; } -h2 { - font-size: 23px; - line-height: 30px; +.email-padding-top-16 { + padding-top: 16px; } -h3 { - font-size: 19px; - line-height: 25px; +.email-padding-top-0 { + padding-top: 0; } -h5 { - font-size: 16px; - line-height: 21px; - font-weight: 700; - color: lighten($ui-base-color, 34%); +.email-border-top { + border-top: 1px solid #dfdee3; } -.input-cell { - h5 { - margin-top: 4px; - } +.email-border-bottom { + border-bottom: 1px solid #dfdee3; } -.input { - td { - background: darken($ui-base-color, 8%); - border-radius: 4px; - padding: 16px; - line-height: 20px; - mso-line-height-rule: exactly; - text-align: center; - font-weight: 500; - font-size: 17px; - } +// Header +.email-header-td { + padding: 16px 32px; + background-color: #1b001f; + background-image: url('../images/mailer-new/common/header-bg-start.png'); + background-position: left top; + background-repeat: repeat; } -.content-cell, -.blank-cell { - width: 100%; - font-size: 0; - text-align: center; - vertical-align: top; - padding-left: 16px; - padding-right: 16px; +.email-header-logo-table { + width: auto; + margin: 0; } -.content-cell { - background-color: darken($ui-base-color, 4%); +.email-header-logo-td { + padding: 16px 0; + font-size: 0; - &.darker { - background-color: darken($ui-base-color, 8%); + img { + color: #fff; + font-size: 16px; + font-weight: bold; + max-height: 40px; } } -.hero { - background-color: $ui-base-color; - padding-top: 20px; -} - -.hero-with-button { - padding-bottom: 16px; - - h1 { - margin-bottom: 4px; - } +.email-header-logo-a { + display: inline-block; - p.lead { - margin-bottom: 32px; + img { + display: inline-block; + color: #fff; } } -.header { - border-radius: 5px 5px 0 0; - background-color: darken($ui-base-color, 8%); +.email-header-logo-div { + max-height: 0; +} - .column-cell { - text-align: center; - padding-top: 20px; - padding-bottom: 8px; - } +.email-header-logo-p { + word-break: break-all; + padding-left: 40px; + padding-top: 26px; + font-size: 11px; + line-height: 13px; + color: #8d808f; + text-align: left; } -.content-start { - padding-top: 32px; +.email-header-logo-span { + display: block; + text-align: right; } -.content-end { - border-radius: 0 0 5px 5px; - padding-top: 16px; +.email-header-heading-td { + padding: 16px 0; } -.footer { - .column-cell, - p { - color: lighten($ui-base-color, 34%); +.email-header-heading-img-td { + width: 56px; + text-align: left; + vertical-align: top; + + img { + width: 56px; + height: 56px; + border-radius: 12px; } +} - p { - margin-bottom: 0; - font-size: 13px; +.email-header-heading-txt-td { + vertical-align: middle; + padding-left: 16px; + padding-right: 16px; - &.small { - margin-bottom: 0; - } + h1 { + margin-bottom: 5px; + color: #fff; + font-size: 24px; + line-height: 28px; + font-weight: 600; } - a { - color: lighten($ui-base-color, 34%); - text-decoration: underline; + p { + color: #a399a5; + font-size: 18px; + line-height: 21.6px; + font-weight: 500; } - img { - opacity: 0.3; + &:only-child { + padding-left: 0; + padding-right: 0; } } -.logo { - position: relative; - left: -4px; +// To make the design work with images off +// we create an empty div that overlaps with +// the rest of the content with a dark background. +.email-header-after-div { + max-height: 0; +} + +.email-header-after-inside-div { + height: 30px; + background-color: #1b001f; } -.button { - display: table; - margin-left: auto; - margin-right: auto; +// Body content +.email-body-td { + background-image: url('../images/mailer-new/common/header-bg-end.png'); + background-position: left top; + background-repeat: no-repeat; +} - td { +.email-body-padding-td { + padding: 0 32px 32px; + mso-padding-alt: 32px; +} + +.email-body-padding-td { + & > p { + font-size: 14px; line-height: 20px; - mso-line-height-rule: exactly; - border-radius: 4px; - text-align: center; - font-weight: 500; - font-size: 17px; - padding: 0 !important; - - a, - a span { - color: $primary-text-color; - display: block !important; - text-align: center !important; - vertical-align: top !important; - line-height: inherit !important; - } + color: #17063b; a { - padding: 10px 22px !important; - line-height: 26px !important; - font-weight: 500 !important; + color: #6364ff; + text-decoration: none; + + &:hover { + color: #563acc !important; + } } } +} - &.button-small { - td { - border-radius: 4px; - font-size: 14px; - padding: 8px 16px; +// Footer +.email-footer-td { + padding: 28px 32px 32px; + text-align: center; +} - a { - padding: 5px 16px !important; - line-height: 26px !important; - } - } +.email-footer-logo-a { + display: inline-block; +} + +.email-footer-p { + color: #9b94ab; + text-align: center; + font-size: 12px; + line-height: 20px; + + a { + color: #9b94ab; + text-decoration: underline; + } + + &:first-child { + margin-bottom: 12px; } } -.button-default { - background-color: darken($ui-base-color, 8%); +// Button +.email-btn-table { + margin: 0; + max-width: 100%; + border-collapse: separate; + border-radius: 8px; + background-color: #6364ff; } -.button-primary { - background-color: darken($ui-highlight-color, 3%); +.email-btn-td { + height: 40px; + text-align: center; + mso-padding-alt: 0 35px; } -.text-center { +.email-btn-a { + display: block; + border-radius: 8px; + padding-left: 35px; + padding-right: 35px; + padding-top: 10px; + padding-bottom: 10px; text-align: center; + font-family: Inter, 'Lucida Grande', sans-serif; + font-size: 14px; + font-weight: 600; + line-height: 20px; + color: #fff; + text-decoration: none; + transition: background-color 0.3s ease-in-out; } -.text-right { - text-align: right; +// Status +.email-status-header-img { + vertical-align: top; + width: 48px; + + img { + width: 48px; + height: 48px; + border-radius: 8px; + overflow: hidden; + } } -.padded { +.email-status-header-text { padding-left: 16px; padding-right: 16px; + vertical-align: middle; } -.padded-bottom { - padding-bottom: 32px; +.email-status-header-name { + font-size: 16px; + font-weight: 600; + line-height: 24px; + color: #17063b; } -.margin-bottom { - margin-bottom: 20px; +.email-status-header-handle { + font-size: 14px; + line-height: 20px; + color: #746a89; } -.hero-icon { - width: 64px; +.email-status-content { + padding-top: 24px; +} - td { - text-align: center; - vertical-align: middle; - line-height: 100%; - mso-line-height-rule: exactly; - padding: 16px; - border-radius: 80px; - background: $success-green; - } +.email-status-spoiler { + color: #746a89; + font-style: italic; + margin-bottom: 8px; +} - &.warning-icon td { - background: $gold-star; +.email-status-prose { + p { + font-size: 14px; + line-height: 20px; + color: #17063b; } - &.alert-icon td { - background: $error-red; + a { + color: #6364ff; + text-decoration: none; + + &:hover { + color: #563acc !important; + } } +} + +.email-status-media { + margin-top: 16px; + font-size: 14px; + line-height: 20px; + color: #17063b; img { - max-width: 32px; - width: 32px; - height: 32px; - display: block; - line-height: 100%; + border-radius: 8px; } -} -.hr { - width: 100%; + a { + color: #6364ff; + text-decoration: none; - td { - font-size: 0; - line-height: 1px; - mso-line-height-rule: exactly; - min-height: 1px; - overflow: hidden; - height: 2px; - background-color: transparent !important; - border-top: 1px solid lighten($ui-base-color, 8%); + &:hover { + color: #563acc !important; + } } } -.status { - padding-bottom: 32px; +.email-status-footer { + margin-top: 16px; + font-size: 12px; + line-height: 16px; + color: #746a89; - &--highlighted { - border: 1px solid lighten($ui-base-color, 8%); - border-radius: 4px; - padding-bottom: 16px; - margin-bottom: 16px; + a { + color: #746a89; } - .status-header { - td { - font-size: 14px; - padding-bottom: 15px; - } + a:hover { + color: #746a89 !important; + text-decoration: underline !important; + } +} - bdi { - color: $white; - font-size: 16px; - display: block; - font-weight: 500; - } +// Purple frame for emphasis +.email-frame-table { + background-color: #efefff; + border-radius: 8px; +} - td:first-child { - padding-right: 10px; - } +.email-frame-td { + padding: 16px; +} - img { - width: 48px; - height: 48px; - border-radius: 4px; - } - } +.email-frame-wrapper-td { + padding-bottom: 16px; +} - p { - font-size: 19px; - margin-bottom: 20px; +.email-frame-td > p { + text-align: center; + font-size: 16px; + line-height: 24px; +} - &.status-footer { - color: lighten($ui-base-color, 26%); - font-size: 14px; - margin-bottom: 0; +// Checklist item +.email-checklist-wrapper-td { + padding: 4px 0; +} - a { - color: lighten($ui-base-color, 26%); - } - } - } +.email-checklist-table { + border-radius: 12px; + border-width: 1px; + border-style: solid; + border-color: #efefff; + background-color: #fff; } -.border-top { - border-top: 1px solid lighten($ui-base-color, 8%); +.email-checklist-td { + padding: 16px; } -ul { - padding-left: 15px; - margin-top: 0; - margin-bottom: 0; - padding-top: 16px; +.email-checklist-icons-td { + width: 84px; + vertical-align: top; +} - li { - margin-bottom: 16px; - color: lighten($ui-base-color, 26%); +.email-checklist-icons-checkbox-td { + width: 20px; + vertical-align: middle; - span { - color: $ui-primary-color; - } + img { + max-width: 100%; + width: 20px; } } -ul.rules-list { - padding-top: 0; +.email-checklist-icons-step-td { + width: 64px; + text-align: center; + vertical-align: middle; + + img { + max-width: 100%; + width: 40px; + } } -@media only screen and (device-width >= 768px) and (device-width <= 1024px) and (orientation: landscape) { - body { - min-height: 1024px !important; +.email-checklist-text-td { + h3 { + margin: 0 0 4px; + color: #17063b; + font-size: 14px; + font-weight: 600; + line-height: 16.8px; + } + + p { + margin: 0 0 2px; + color: #746a89; + font-size: 14px; + line-height: 16.8px; + } + + .email-btn-table { + width: 100px; + } + + .email-btn-td { + mso-padding-alt: 10px; + } + + .email-btn-a { + padding-left: 10px; + padding-right: 10px; } } -@media (width <= 697px) { - .email-container, - .col-1, - .col-2, - .col-3, - .col-4, - .col-5, - .col-6 { - width: 100% !important; - max-width: none !important; +// Responsive +/* stylelint-disable-next-line media-feature-range-notation -- Basic media queries have better support across email clients. */ +@media only screen and (min-width: 740px) { + .email-desktop-p-8 { + padding: 32px !important; } - .email-start { - padding-top: 16px !important; + .email-desktop-rounded-16px { + border-radius: 16px !important; } - .email-end { - padding-bottom: 16px !important; + .email-header-td { + border-radius: 16px 16px 0 0 !important; } - .padded { - padding-left: 0 !important; - padding-right: 0 !important; + .email-desktop-flex { + display: flex; } } diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 7e7131332638fb..7bf519486cf134 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -1466,8 +1466,7 @@ body > [data-popper-placement] { .icon { width: 15px; height: 15px; - position: relative; - top: 0.145em; + vertical-align: middle; } } @@ -5835,6 +5834,10 @@ a.status-card { padding-inline-end: 10px; } + .icon { + vertical-align: middle; + } + .button { flex: 0 0 auto; } @@ -6386,6 +6389,7 @@ a.status-card { gap: 2px; } +.media-gallery__alt__label, .media-gallery__gifv__label { display: flex; align-items: center; @@ -6462,6 +6466,7 @@ a.status-card { .icon { color: $dark-text-color; + vertical-align: middle; } } } @@ -7856,6 +7861,13 @@ noscript { span { user-select: all; } + + .icon-lock { + height: 16px; + width: 16px; + position: relative; + top: 3px; + } } } } diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index eef0f6a209902f..5cf7a671337268 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -153,7 +153,7 @@ def cc(status) end def cc_for_misskey(status) - if (status.account.user&.setting_reject_unlisted_subscription && status.unlisted_visibility?) || (status.account.user&.setting_reject_public_unlisted_subscription && status.public_unlisted_visibility?) + if status.sending_maybe_compromised_privacy? cc = cc_private_visibility(status) cc << uri_for(status.reblog.account) if status.reblog? return cc diff --git a/app/lib/admin/system_check/media_privacy_check.rb b/app/lib/admin/system_check/media_privacy_check.rb index 1df05b120ea80a..2ddc8e8b07e4c3 100644 --- a/app/lib/admin/system_check/media_privacy_check.rb +++ b/app/lib/admin/system_check/media_privacy_check.rb @@ -78,7 +78,7 @@ def media_attachment @media_attachment ||= begin attachment = Account.representative.media_attachments.first if attachment.present? - attachment.touch # rubocop:disable Rails/SkipsModelValidations + attachment.touch attachment else create_test_attachment! diff --git a/app/lib/attachment_batch.rb b/app/lib/attachment_batch.rb index b28f5c3d7fc14d..32ccb0b13c1fb1 100644 --- a/app/lib/attachment_batch.rb +++ b/app/lib/attachment_batch.rb @@ -37,7 +37,7 @@ def delete def clear remove_files - batch.update_all(nullified_attributes) # rubocop:disable Rails/SkipsModelValidations + batch.update_all(nullified_attributes) end private diff --git a/app/lib/search_query_transformer.rb b/app/lib/search_query_transformer.rb index 9417305ba2f71f..d67ba8d9362031 100644 --- a/app/lib/search_query_transformer.rb +++ b/app/lib/search_query_transformer.rb @@ -242,17 +242,20 @@ def symbol(str) class TermClause attr_reader :operator, :term - def initialize(operator, term) + def initialize(operator, term, current_account: nil) @operator = Operator.symbol(operator) @term = term + @account = current_account end def to_query if @term.start_with?('#') { match: { tags: { query: @term, operator: 'and' } } } - else + elsif @account&.user&.setting_reverse_search_quote # Memo for checking when manually merge # { multi_match: { type: 'most_fields', query: @term, fields: ['text', 'text.stemmed'], operator: 'and' } } + { match_phrase: { text: { query: @term } } } + else { multi_match: { type: 'most_fields', query: @term, fields: ['text', 'text.stemmed'], operator: 'and' } } end end @@ -261,15 +264,20 @@ def to_query class PhraseClause attr_reader :operator, :phrase - def initialize(operator, phrase) + def initialize(operator, phrase, current_account: nil) @operator = Operator.symbol(operator) @phrase = phrase + @account = current_account end def to_query # Memo for checking when manually merge # { match_phrase: { text: { query: @phrase } } } - { match_phrase: { text: { query: @phrase } } } + if @account&.user&.setting_reverse_search_quote + { multi_match: { type: 'most_fields', query: @phrase, fields: ['text', 'text.stemmed'], operator: 'and' } } + else + { match_phrase: { text: { query: @phrase } } } + end end end @@ -411,11 +419,11 @@ def language_code_from_term(term) if clause[:prefix] && SUPPORTED_PREFIXES.include?(prefix) PrefixClause.new(prefix, operator, term, current_account: current_account) elsif clause[:prefix] - TermClause.new(operator, "#{prefix} #{term}") + TermClause.new(operator, "#{prefix} #{term}", current_account: current_account) elsif clause[:term] - TermClause.new(operator, term) + TermClause.new(operator, term, current_account: current_account) elsif clause[:phrase] - PhraseClause.new(operator, term) + PhraseClause.new(operator, term, current_account: current_account) else raise "Unexpected clause type: #{clause}" end diff --git a/app/lib/status_reach_finder.rb b/app/lib/status_reach_finder.rb index 76c4315b58b9af..aad6bb735f92a6 100644 --- a/app/lib/status_reach_finder.rb +++ b/app/lib/status_reach_finder.rb @@ -192,19 +192,15 @@ def banned_domains end def banned_domains_of_status(status) - if status.account.user&.setting_send_without_domain_blocks - [] - else - blocks = DomainBlock.where(domain: nil) - blocks = blocks.or(DomainBlock.where(reject_send_sensitive: true)) if (status.with_media? && status.sensitive) || status.spoiler_text? - blocks.pluck(:domain).uniq - end + blocks = DomainBlock.where(domain: nil) + blocks = blocks.or(DomainBlock.where(reject_send_sensitive: true)) if (status.with_media? && status.sensitive) || status.spoiler_text? + blocks.pluck(:domain).uniq end def banned_domains_for_misskey return @banned_domains_for_misskey if defined?(@banned_domains_for_misskey) - return @banned_domains_for_misskey = [] if (!@status.account.user&.setting_reject_public_unlisted_subscription && !@status.account.user&.setting_reject_unlisted_subscription) || (!@status.public_unlisted_visibility? && !@status.unlisted_visibility?) + return @banned_domains_for_misskey = [] unless @status.sending_maybe_compromised_privacy? || (@status.reblog? && @status.reblog.sending_maybe_compromised_privacy?) domains = banned_domains_for_misskey_of_status(@status) domains += banned_domains_for_misskey_of_status(@status.reblog) if @status.reblog? && @status.reblog.local? @@ -213,7 +209,6 @@ def banned_domains_for_misskey def banned_domains_for_misskey_of_status(status) return [] if status.public_searchability? - return [] unless (status.public_unlisted_visibility? && status.account.user&.setting_reject_public_unlisted_subscription) || (status.unlisted_visibility? && status.account.user&.setting_reject_unlisted_subscription) from_info = InstanceInfo.where(software: %w(misskey calckey cherrypick sharkey)).pluck(:domain) from_domain_block = DomainBlock.where(detect_invalid_subscription: true).pluck(:domain) diff --git a/app/mailers/notification_mailer.rb b/app/mailers/notification_mailer.rb index 5eecfed10400bc..4eb38ec340620f 100644 --- a/app/mailers/notification_mailer.rb +++ b/app/mailers/notification_mailer.rb @@ -12,6 +12,8 @@ class NotificationMailer < ApplicationMailer default to: -> { email_address_with_name(@user.email, @me.username) } + layout 'mailer' + def mention return unless @user.functional? && @status.present? diff --git a/app/models/announcement.rb b/app/models/announcement.rb index 65dad42dd93d6e..93da24cdf60d29 100644 --- a/app/models/announcement.rb +++ b/app/models/announcement.rb @@ -75,22 +75,41 @@ def emojis end def reactions(account = nil) - records = begin - scope = announcement_reactions.group(:announcement_id, :name, :custom_emoji_id).order(Arel.sql('MIN(created_at) ASC')) - - if account.nil? - scope.select('name, custom_emoji_id, count(*) as count, false as me') - else - scope.select("name, custom_emoji_id, count(*) as count, exists(select 1 from announcement_reactions r where r.account_id = #{account.id} and r.announcement_id = announcement_reactions.announcement_id and r.name = announcement_reactions.name) as me") + grouped_ordered_announcement_reactions.select( + [:name, :custom_emoji_id, 'COUNT(*) as count'].tap do |values| + values << value_for_reaction_me_column(account) end - end.to_a - - ActiveRecord::Associations::Preloader.new(records: records, associations: :custom_emoji).call - records + ).to_a.tap do |records| + ActiveRecord::Associations::Preloader.new(records: records, associations: :custom_emoji).call + end end private + def grouped_ordered_announcement_reactions + announcement_reactions + .group(:announcement_id, :name, :custom_emoji_id) + .order( + Arel.sql('MIN(created_at)').asc + ) + end + + def value_for_reaction_me_column(account) + if account.nil? + 'FALSE AS me' + else + <<~SQL.squish + EXISTS( + SELECT 1 + FROM announcement_reactions inner_reactions + WHERE inner_reactions.account_id = #{account.id} + AND inner_reactions.announcement_id = announcement_reactions.announcement_id + AND inner_reactions.name = announcement_reactions.name + ) AS me + SQL + end + end + def set_published return unless scheduled_at.blank? || scheduled_at.past? diff --git a/app/models/bulk_import.rb b/app/models/bulk_import.rb index 810e471849245a..406fb2aba26c7a 100644 --- a/app/models/bulk_import.rb +++ b/app/models/bulk_import.rb @@ -44,8 +44,8 @@ class BulkImport < ApplicationRecord def self.progress!(bulk_import_id, imported: false) # Use `increment_counter` so that the incrementation is done atomically in the database - BulkImport.increment_counter(:processed_items, bulk_import_id) # rubocop:disable Rails/SkipsModelValidations - BulkImport.increment_counter(:imported_items, bulk_import_id) if imported # rubocop:disable Rails/SkipsModelValidations + BulkImport.increment_counter(:processed_items, bulk_import_id) + BulkImport.increment_counter(:imported_items, bulk_import_id) if imported # Since the incrementation has been done atomically, concurrent access to `bulk_import` is now bening bulk_import = BulkImport.find(bulk_import_id) diff --git a/app/models/concerns/status/domain_block_concern.rb b/app/models/concerns/status/domain_block_concern.rb new file mode 100644 index 00000000000000..68313d838049c3 --- /dev/null +++ b/app/models/concerns/status/domain_block_concern.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module Status::DomainBlockConcern + extend ActiveSupport::Concern + + def sending_sensitive? + return false unless local? + + (with_media? && sensitive) || spoiler_text? + end + + def sending_maybe_compromised_privacy? + return false unless local? + + (public_unlisted_visibility? && !public_searchability? && account.user&.setting_reject_public_unlisted_subscription) || + (unlisted_visibility? && !public_searchability? && account.user&.setting_reject_unlisted_subscription) + end +end diff --git a/app/models/concerns/user/has_settings.rb b/app/models/concerns/user/has_settings.rb index 79072a7f30123c..d02a19947fff9c 100644 --- a/app/models/concerns/user/has_settings.rb +++ b/app/models/concerns/user/has_settings.rb @@ -71,10 +71,6 @@ def setting_reject_unlisted_subscription settings['reject_unlisted_subscription'] end - def setting_send_without_domain_blocks - settings['send_without_domain_blocks'] - end - def setting_stop_emoji_reaction_streaming settings['stop_emoji_reaction_streaming'] end @@ -243,6 +239,10 @@ def setting_use_public_index settings['use_public_index'] end + def setting_reverse_search_quote + settings['reverse_search_quote'] + end + def setting_disallow_unlisted_public_searchability settings['disallow_unlisted_public_searchability'] end diff --git a/app/models/concerns/user/omniauthable.rb b/app/models/concerns/user/omniauthable.rb index 6d1d1b8cc3fbdc..113bfda23043eb 100644 --- a/app/models/concerns/user/omniauthable.rb +++ b/app/models/concerns/user/omniauthable.rb @@ -61,7 +61,7 @@ def create_for_oauth(auth) user.account.avatar_remote_url = nil end - user.confirm! if email_is_verified + user.mark_email_as_confirmed! if email_is_verified user.save! user end diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index f2f0615434320f..a0d4f1afea35c6 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -4,30 +4,26 @@ # # Table name: domain_blocks # -# id :bigint(8) not null, primary key -# domain :string default(""), not null -# created_at :datetime not null -# updated_at :datetime not null -# severity :integer default("silence") -# reject_media :boolean default(FALSE), not null -# reject_reports :boolean default(FALSE), not null -# private_comment :text -# public_comment :text -# obfuscate :boolean default(FALSE), not null -# reject_favourite :boolean default(FALSE), not null -# reject_reply :boolean default(FALSE), not null -# reject_send_not_public_searchability :boolean default(FALSE), not null -# reject_send_public_unlisted :boolean default(FALSE), not null -# reject_send_dissubscribable :boolean default(FALSE), not null -# reject_send_media :boolean default(FALSE), not null -# reject_send_sensitive :boolean default(FALSE), not null -# reject_hashtag :boolean default(FALSE), not null -# reject_straight_follow :boolean default(FALSE), not null -# reject_new_follow :boolean default(FALSE), not null -# hidden :boolean default(FALSE), not null -# detect_invalid_subscription :boolean default(FALSE), not null -# reject_reply_exclude_followers :boolean default(FALSE), not null -# reject_friend :boolean default(FALSE), not null +# id :bigint(8) not null, primary key +# domain :string default(""), not null +# created_at :datetime not null +# updated_at :datetime not null +# severity :integer default("silence") +# reject_media :boolean default(FALSE), not null +# reject_reports :boolean default(FALSE), not null +# private_comment :text +# public_comment :text +# obfuscate :boolean default(FALSE), not null +# reject_favourite :boolean default(FALSE), not null +# reject_reply :boolean default(FALSE), not null +# reject_send_sensitive :boolean default(FALSE), not null +# reject_hashtag :boolean default(FALSE), not null +# reject_straight_follow :boolean default(FALSE), not null +# reject_new_follow :boolean default(FALSE), not null +# hidden :boolean default(FALSE), not null +# detect_invalid_subscription :boolean default(FALSE), not null +# reject_reply_exclude_followers :boolean default(FALSE), not null +# reject_friend :boolean default(FALSE), not null # class DomainBlock < ApplicationRecord diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb index 3c5e8f96f0d5bc..c13cc718d8f0ce 100644 --- a/app/models/follow_request.rb +++ b/app/models/follow_request.rb @@ -33,7 +33,7 @@ class FollowRequest < ApplicationRecord def authorize! follow = account.follow!(target_account, reblogs: show_reblogs, notify: notify, languages: languages, uri: uri, bypass_limit: true) - ListAccount.where(follow_request: self).update_all(follow_request_id: nil, follow_id: follow.id) # rubocop:disable Rails/SkipsModelValidations + ListAccount.where(follow_request: self).update_all(follow_request_id: nil, follow_id: follow.id) MergeWorker.perform_async(target_account.id, account.id) if account.local? destroy! end diff --git a/app/models/form/import.rb b/app/models/form/import.rb index 712acf37065e17..fc83d9c58c1fdb 100644 --- a/app/models/form/import.rb +++ b/app/models/form/import.rb @@ -69,7 +69,7 @@ def save ApplicationRecord.transaction do now = Time.now.utc @bulk_import = current_account.bulk_imports.create(type: type, overwrite: overwrite || false, state: :unconfirmed, original_filename: data.original_filename, likely_mismatched: likely_mismatched?) - nb_items = BulkImportRow.insert_all(parsed_rows.map { |row| { bulk_import_id: bulk_import.id, data: row, created_at: now, updated_at: now } }).length # rubocop:disable Rails/SkipsModelValidations + nb_items = BulkImportRow.insert_all(parsed_rows.map { |row| { bulk_import_id: bulk_import.id, data: row, created_at: now, updated_at: now } }).length @bulk_import.update(total_items: nb_items) end end diff --git a/app/models/status.rb b/app/models/status.rb index 082899e7ef51e5..3816a883146bf6 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -40,6 +40,7 @@ class Status < ApplicationRecord include Discard::Model include Paginable include RateLimitable + include Status::DomainBlockConcern include Status::SafeReblogInsert include Status::SearchConcern include Status::SnapshotConcern diff --git a/app/models/user.rb b/app/models/user.rb index 944e08f9d09b11..f6a5fa2b818e37 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -151,6 +151,10 @@ def self.those_who_can(*any_of_privileges) end end + def self.skip_mx_check? + Rails.env.local? + end + def role if role_id.nil? UserRole.everyone @@ -188,37 +192,16 @@ def to_log_route_param end def confirm - new_user = !confirmed? - self.approved = true if open_registrations? && !sign_up_from_ip_requires_approval? - - super - - if new_user - # Avoid extremely unlikely race condition when approving and confirming - # the user at the same time - reload unless approved? - - if approved? - prepare_new_user! - else - notify_staff_about_pending_account! - end + wrap_email_confirmation do + super end end - def confirm! - new_user = !confirmed? - self.approved = true if open_registrations? - - skip_confirmation! - save! - - if new_user - # Avoid extremely unlikely race condition when approving and confirming - # the user at the same time - reload unless approved? - - prepare_new_user! if approved? + # Mark current email as confirmed, bypassing Devise + def mark_email_as_confirmed! + wrap_email_confirmation do + skip_confirmation! + save! end end @@ -428,14 +411,53 @@ def set_approved end end + def grant_approval_on_confirmation? + # Re-check approval on confirmation if the server has switched to open registrations + open_registrations? && !sign_up_from_ip_requires_approval? && !sign_up_email_requires_approval? + end + + def wrap_email_confirmation + new_user = !confirmed? + self.approved = true if grant_approval_on_confirmation? + + yield + + if new_user + # Avoid extremely unlikely race condition when approving and confirming + # the user at the same time + reload unless approved? + + if approved? + prepare_new_user! + else + notify_staff_about_pending_account! + end + end + end + def sign_up_from_ip_requires_approval? !sign_up_ip.nil? && IpBlock.where(severity: :sign_up_requires_approval).where('ip >>= ?', sign_up_ip.to_s).exists? end def sign_up_email_requires_approval? - return false unless email.present? || unconfirmed_email.present? + return false if email.blank? + + _, domain = email.split('@', 2) + return false if domain.blank? + + records = [] + + # Doing this conditionally is not very satisfying, but this is consistent + # with the MX records validations we do and keeps the specs tractable. + unless self.class.skip_mx_check? + Resolv::DNS.open do |dns| + dns.timeouts = 5 + + records = dns.getresources(domain, Resolv::DNS::Resource::IN::MX).to_a.map { |e| e.exchange.to_s }.compact_blank + end + end - EmailDomainBlock.requires_approval?(email.presence || unconfirmed_email, attempt_ip: sign_up_ip) + EmailDomainBlock.requires_approval?(records + [domain], attempt_ip: sign_up_ip) end def open_registrations? @@ -486,7 +508,7 @@ def needs_feed_update? end def validate_email_dns? - email_changed? && !external? && !Rails.env.local? + email_changed? && !external? && !self.class.skip_mx_check? end def validate_role_elevation diff --git a/app/models/user_settings.rb b/app/models/user_settings.rb index ba5883d03f8043..031a499e0704ef 100644 --- a/app/models/user_settings.rb +++ b/app/models/user_settings.rb @@ -26,11 +26,11 @@ class KeyError < Error; end setting :default_searchability, default: :direct, in: %w(public private direct limited public_unlisted) setting :default_searchability_of_search, default: :public, in: %w(public private direct limited) setting :use_public_index, default: true + setting :reverse_search_quote, default: false setting :disallow_unlisted_public_searchability, default: false setting :public_post_to_unlisted, default: false setting :reject_public_unlisted_subscription, default: false setting :reject_unlisted_subscription, default: false - setting :send_without_domain_blocks, default: false setting :reaction_deck, default: nil setting :stop_emoji_reaction_streaming, default: false setting :emoji_reaction_streaming_notify_impl2, default: false diff --git a/app/policies/status_policy.rb b/app/policies/status_policy.rb index 24ecec71bb32ca..2c0d3aa56f75bc 100644 --- a/app/policies/status_policy.rb +++ b/app/policies/status_policy.rb @@ -143,14 +143,8 @@ def server_blocking_domain? def server_blocking_domain_of_status?(status) @domain_block ||= DomainBlock.find_by(domain: current_account&.domain) if @domain_block - if status.account.user&.setting_send_without_domain_blocks - (@domain_block.detect_invalid_subscription && status.public_unlisted_visibility? && status.account.user&.setting_reject_public_unlisted_subscription) || - (@domain_block.detect_invalid_subscription && status.public_visibility? && status.account.user&.setting_reject_unlisted_subscription) - else - (@domain_block.detect_invalid_subscription && status.public_unlisted_visibility? && status.account.user&.setting_reject_public_unlisted_subscription) || - (@domain_block.detect_invalid_subscription && status.public_visibility? && status.account.user&.setting_reject_unlisted_subscription) || - (@domain_block.reject_send_sensitive && ((status.with_media? && status.sensitive) || status.spoiler_text?)) - end + (@domain_block.detect_invalid_subscription && status.sending_maybe_compromised_privacy?) || + (@domain_block.reject_send_sensitive && status.sending_sensitive?) else false end diff --git a/app/serializers/manifest_serializer.rb b/app/serializers/manifest_serializer.rb index 501bb788e7cdbe..1c1f7d0ad534a3 100644 --- a/app/serializers/manifest_serializer.rb +++ b/app/serializers/manifest_serializer.rb @@ -39,7 +39,7 @@ def short_name def icons ICON_SIZES.map do |size| { - src: full_pack_url("media/icons/android-chrome-#{size}x#{size}.png"), + src: frontend_asset_url("icons/android-chrome-#{size}x#{size}.png"), sizes: "#{size}x#{size}", type: 'image/png', purpose: 'any maskable', diff --git a/app/serializers/rest/instance_serializer.rb b/app/serializers/rest/instance_serializer.rb index 565e5c2e2b0de2..5eb3b7fe941024 100644 --- a/app/serializers/rest/instance_serializer.rb +++ b/app/serializers/rest/instance_serializer.rb @@ -29,7 +29,7 @@ def thumbnail } else { - url: full_pack_url('media/images/preview.png'), + url: frontend_asset_url('images/preview.png'), } end end diff --git a/app/serializers/rest/v1/instance_serializer.rb b/app/serializers/rest/v1/instance_serializer.rb index 29a314557a7c12..de794df843d5d5 100644 --- a/app/serializers/rest/v1/instance_serializer.rb +++ b/app/serializers/rest/v1/instance_serializer.rb @@ -34,7 +34,7 @@ def contact_account end def thumbnail - instance_presenter.thumbnail ? full_asset_url(instance_presenter.thumbnail.file.url(:'@1x')) : full_pack_url('media/images/preview.png') + instance_presenter.thumbnail ? full_asset_url(instance_presenter.thumbnail.file.url(:'@1x')) : frontend_asset_url('images/preview.png') end def stats diff --git a/app/services/concerns/account_scope.rb b/app/services/concerns/account_scope.rb index 1d617fd731cf78..f670d17f380091 100644 --- a/app/services/concerns/account_scope.rb +++ b/app/services/concerns/account_scope.rb @@ -7,6 +7,8 @@ def scope_status(status) scope_local when :private scope_account_local_followers(status.account) + when :limited + scope_status_all_mentioned(status) else scope_status_mentioned(status) end @@ -24,6 +26,10 @@ def scope_status_mentioned(status) Account.local.where(id: status.active_mentions.select(:account_id)).reorder(nil) end + def scope_status_all_mentioned(status) + Account.local.where(id: status.mentions.select(:account_id)).reorder(nil) + end + # TODO: not work def scope_list_following_account(account) account.lists_for_local_distribution.select(:id).reorder(nil) diff --git a/app/services/emoji_react_service.rb b/app/services/emoji_react_service.rb index 9099c8391b5cc7..b9a900f6384fd6 100644 --- a/app/services/emoji_react_service.rb +++ b/app/services/emoji_react_service.rb @@ -27,7 +27,7 @@ def call(account, status, name) @emoji_reaction = EmojiReaction.create!(account: account, status: status, name: shortcode, custom_emoji: custom_emoji) - status.touch # rubocop:disable Rails/SkipsModelValidations + status.touch end raise Mastodon::ValidationError, I18n.t('reactions.errors.duplication') if @emoji_reaction.nil? diff --git a/app/services/fetch_link_card_service.rb b/app/services/fetch_link_card_service.rb index fa445faf2c54c8..6c84f6d3b4ede7 100644 --- a/app/services/fetch_link_card_service.rb +++ b/app/services/fetch_link_card_service.rb @@ -88,6 +88,10 @@ def parse_urls end def referenced_urls + referenced_urls_raw.filter { |uri| ActivityPub::TagManager.instance.uri_to_resource(uri, Status, url: true).present? } + end + + def referenced_urls_raw unless @status.local? document = Nokogiri::HTML(@status.text) document.search('a[href^="http://"]', 'a[href^="https://"]').each do |link| diff --git a/app/services/searchability_update_service.rb b/app/services/searchability_update_service.rb index 852f17abecaca6..a6b448a0ee4e64 100644 --- a/app/services/searchability_update_service.rb +++ b/app/services/searchability_update_service.rb @@ -8,7 +8,6 @@ def call(account) ids = statuses.pluck(:id) - # rubocop:disable Rails/SkipsModelValidations if account.public_searchability? statuses.update_all('searchability = CASE visibility WHEN 0 THEN 0 WHEN 10 THEN 0 WHEN 1 THEN 2 WHEN 2 THEN 2 ELSE 3 END, updated_at = CURRENT_TIMESTAMP') elsif account.unlisted_searchability? @@ -18,7 +17,6 @@ def call(account) else statuses.update_all('searchability = 3, updated_at = CURRENT_TIMESTAMP') end - # rubocop:enable Rails/SkipsModelValidations return unless Chewy.enabled? diff --git a/app/services/un_emoji_react_service.rb b/app/services/un_emoji_react_service.rb index 7d9b61df7bd0ff..db8f4143437d40 100644 --- a/app/services/un_emoji_react_service.rb +++ b/app/services/un_emoji_react_service.rb @@ -11,7 +11,7 @@ def call(account, status, emoji_reaction = nil) if emoji_reaction emoji_reaction.destroy! - status.touch # rubocop:disable Rails/SkipsModelValidations + status.touch create_notification(emoji_reaction) if !@status.account.local? && @status.account.activitypub? notify_to_followers(emoji_reaction) diff --git a/app/views/application/mailer/_account.html.haml b/app/views/application/mailer/_account.html.haml new file mode 100644 index 00000000000000..27493f770dc006 --- /dev/null +++ b/app/views/application/mailer/_account.html.haml @@ -0,0 +1,30 @@ +%table.email-w-full.email-account-banner-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-account-banner-td{ height: 140, background: full_asset_url(account.header.url) } + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-account-banner-inner-td + .email-account-banner-overlap-div + %table.email-account-banner-icon-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td + %img{ src: full_asset_url(account.avatar.url), width: 80, height: 80, alt: '' } +%table.email-w-full.email-account-body-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-account-body-td + %p.email-account-name= display_name(account) + %p.email-account-handle= acct(account) + %table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-padding-top-16 + %table.email-w-full.email-account-stats-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td + %b= account_formatted_stat(account.statuses_count) + %span= t('accounts.posts', count: account.statuses_count) + %td + %b= account_formatted_stat(account.following_count) + %span= t('accounts.following') + %td + %b= account_formatted_stat(account.followers_count) + %span= t('accounts.followers', count: account.followers_count) diff --git a/app/views/application/mailer/_button.html.haml b/app/views/application/mailer/_button.html.haml new file mode 100644 index 00000000000000..61430732eb3ed3 --- /dev/null +++ b/app/views/application/mailer/_button.html.haml @@ -0,0 +1,4 @@ +%table.email-btn-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-btn-td + = link_to "#{text} ➜", url, class: 'email-btn-a email-btn-hover' diff --git a/app/views/application/mailer/_checklist.html.haml b/app/views/application/mailer/_checklist.html.haml new file mode 100644 index 00000000000000..83072bd36b04e2 --- /dev/null +++ b/app/views/application/mailer/_checklist.html.haml @@ -0,0 +1,29 @@ +%table.email-w-full.email-checklist-wrapper-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-checklist-wrapper-td + %table.email-w-full.email-checklist-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-checklist-td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-checklist-icons-td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-checklist-icons-checkbox-td + - if defined?(checked) && checked + = image_tag frontend_asset_url('images/mailer-new/welcome/checkbox-on.png'), alt: '', width: 20, height: 20 + - else + = image_tag frontend_asset_url('images/mailer-new/welcome/checkbox-off.png'), alt: '', width: 20, height: 20 + %td.email-checklist-icons-step-td + - if defined?(step_image_url) + = image_tag step_image_url, alt: '', width: 40, height: 40 + %td.email-checklist-text-td + .email-desktop-flex + %div + - if defined?(title) + %h3= title + - if defined?(text) + %p= text + %div + - if defined?(button_text) && defined?(button_url) && defined?(checked) && !checked + = render 'application/mailer/button', text: button_text, url: button_url diff --git a/app/views/application/mailer/_frame.html.haml b/app/views/application/mailer/_frame.html.haml new file mode 100644 index 00000000000000..74403e7678f68b --- /dev/null +++ b/app/views/application/mailer/_frame.html.haml @@ -0,0 +1,4 @@ +%table.email-w-full.email-frame-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-frame-td + %p= text diff --git a/app/views/application/mailer/_heading.html.haml b/app/views/application/mailer/_heading.html.haml new file mode 100644 index 00000000000000..9fc5dc7471b5e4 --- /dev/null +++ b/app/views/application/mailer/_heading.html.haml @@ -0,0 +1,13 @@ +%table.email-w-full.email-header-heading-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-header-heading-td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + - if defined?(heading_image_url) + %td.email-header-heading-img-td + = image_tag heading_image_url, alt: '', width: 56, height: 56 + %td.email-header-heading-txt-td + - if defined?(heading_title) + %h1= heading_title + - if defined?(heading_subtitle) + %p= heading_subtitle diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 6f6b1825f6ce25..c7210736703a41 100755 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -14,12 +14,12 @@ %link{ rel: 'icon', href: '/favicon.ico', type: 'image/x-icon' }/ - %w(16 32 48).each do |size| - %link{ rel: 'icon', sizes: "#{size}x#{size}", href: asset_pack_path("media/icons/favicon-#{size}x#{size}.png"), type: 'image/png' }/ + %link{ rel: 'icon', sizes: "#{size}x#{size}", href: frontend_asset_path("icons/favicon-#{size}x#{size}.png"), type: 'image/png' }/ - %w(57 60 72 76 114 120 144 152 167 180 1024).each do |size| - %link{ rel: 'apple-touch-icon', sizes: "#{size}x#{size}", href: asset_pack_path("media/icons/apple-touch-icon-#{size}x#{size}.png") }/ + %link{ rel: 'apple-touch-icon', sizes: "#{size}x#{size}", href: frontend_asset_path("icons/apple-touch-icon-#{size}x#{size}.png") }/ - %link{ rel: 'mask-icon', href: asset_pack_path('media/images/logo-symbol-icon.svg'), color: '#6364FF' }/ + %link{ rel: 'mask-icon', href: frontend_asset_path('images/logo-symbol-icon.svg'), color: '#6364FF' }/ %link{ rel: 'manifest', href: manifest_path(format: :json) }/ %meta{ name: 'theme-color', content: '#191b22' }/ %meta{ name: 'apple-mobile-web-app-capable', content: 'yes' }/ diff --git a/app/views/layouts/mailer.html.haml b/app/views/layouts/mailer.html.haml index 7fa344a9b7e95e..270f2b1e0cb32b 100644 --- a/app/views/layouts/mailer.html.haml +++ b/app/views/layouts/mailer.html.haml @@ -1,54 +1,87 @@ !!! -%html{ lang: I18n.locale } +%html{ lang: I18n.locale, dir: locale_direction } %head - %meta{ 'http-equiv' => 'Content-Type', 'content' => 'text/html; charset=utf-8' }/ - %meta{ name: 'viewport', content: 'width=device-width, initial-scale=1.0, shrink-to-fit=no' } - + %meta{ 'charset' => 'utf-8' } + %title Mastodon + %meta{ name: 'x-apple-disable-message-reformatting' } + %meta{ name: 'viewport', content: 'width=device-width, initial-scale=1' } + %meta{ name: 'format-detection', content: 'telephone=no, date=no, address=no, email=no, url=no' } + %meta{ name: 'supported-color-schemes', content: 'light' } + %style + \table { mso-table-lspace: 0pt; mso-table-rspace: 0pt; } + %style{ 'data-premailer': 'ignore' } + \.email a { color: inherit; text-decoration: none; } + \.email-btn-hover:hover { background-color: #563acc !important; } + /[if mso] + + + 96 + + = stylesheet_pack_tag 'mailer' - %body{ dir: locale_direction } - %table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody + %body + .email{ dir: locale_direction } + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.email-body.email-start + %td.email-desktop-p-8 .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.header - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell - = link_to root_url do - = image_tag full_pack_url('media/images/mailer/wordmark.png'), alt: 'Mastodon', height: 34, class: 'logo' + /[if mso] +
+ %table.email-w-full.email-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-card-td.email-desktop-rounded-16px - = yield + -# Header + %table.email-header-table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-header-td - %table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body.email-end + -# Logo + %table.email-header-logo-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-header-logo-td + /[if mso] + + .email-header-logo-div + %p.email-header-logo-p + %span.email-header-logo-span + = '/ ' + = site_hostname + /[if mso] + + = link_to root_url, class: 'email-header-logo-a' do + = image_tag frontend_asset_url('images/mailer-new/common/logo-header.png'), alt: 'Mastodon', width: 157, height: 40 + + -# Heading + = yield :heading + + .email-header-after-div + .email-header-after-inside-div + %table.email-body-table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-td + -# Content + = yield + + /[if mso] +
+ + -# Footer .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-end - != '  ' - %tr - %td.blank-cell.footer - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %td.column-cell - %p= t 'about.hosted_on', domain: site_hostname - %p - = link_to t('application_mailer.notification_preferences'), settings_preferences_notifications_url - - if defined?(@unsubscribe_url) - · - = link_to t('application_mailer.unsubscribe'), @unsubscribe_url - %td.column-cell.text-right - = link_to root_url do - = image_tag full_pack_url('media/images/mailer/logo.png'), alt: 'Mastodon', height: 24 + /[if mso] +
+ %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-footer-td + %p.email-footer-p + = link_to root_url, class: 'email-footer-logo-a' do + = image_tag frontend_asset_url('images/mailer-new/common/logo-footer.png'), alt: 'Mastodon', width: 44, height: 44 + %p.email-footer-p + = t 'about.hosted_on', domain: site_hostname + %p.email-footer-p + = link_to t('application_mailer.notification_preferences'), settings_preferences_notifications_url + - if defined?(@unsubscribe_url) + · + = link_to t('application_mailer.unsubscribe'), @unsubscribe_url + /[if mso] +
diff --git a/app/views/notification_mailer/_status.html.haml b/app/views/notification_mailer/_status.html.haml index e053a30fdec591..bf38dc9aa26ca5 100644 --- a/app/views/notification_mailer/_status.html.haml +++ b/app/views/notification_mailer/_status.html.haml @@ -1,45 +1,31 @@ -- i ||= 0 -- highlighted ||= false +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-status-header-img + = image_tag full_asset_url(status.account.avatar.url), alt: '', width: 48, height: 48 + %td.email-status-header-text + %h2.email-status-header-name + = display_name(status.account) + %p.email-status-header-handle + @#{status.account.pretty_acct} -%table.email-table{ cellspacing: 0, cellpadding: 0, dir: 'ltr' } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell{ class: i.zero? ? 'content-start' : nil } - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.padded.status{ class: highlighted ? 'status--highlighted' : '' } - %table.status-header{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td{ align: 'left', width: 48 } - = image_tag full_asset_url(status.account.avatar.url), alt: '' - %td{ align: 'left' } - %bdi= display_name(status.account) - @#{status.account.pretty_acct} +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-status-content + .auto-dir + - if status.spoiler_text? + %p.email-status-spoiler + = status.spoiler_text - - if status.spoiler_text? - .auto-dir - %p - = status.spoiler_text + .email-status-prose + = status_content_format(status) - .auto-dir - = status_content_format(status) + - if status.ordered_media_attachments.size.positive? + %p.email-status-media + - status.ordered_media_attachments.each do |a| + - if status.local? + = link_to full_asset_url(a.file.url(:original)), full_asset_url(a.file.url(:original)) + - else + = link_to a.remote_url, a.remote_url - - if status.ordered_media_attachments.size.positive? - %p - - status.ordered_media_attachments.each do |a| - - if status.local? - = link_to full_asset_url(a.file.url(:original)), full_asset_url(a.file.url(:original)) - - else - = link_to a.remote_url, a.remote_url - - %p.status-footer - = link_to l(status.created_at.in_time_zone(time_zone.presence), format: :with_time_zone), web_url("@#{status.account.pretty_acct}/#{status.id}") + %p.email-status-footer + = link_to l(status.created_at.in_time_zone(time_zone.presence), format: :with_time_zone), web_url("@#{status.account.pretty_acct}/#{status.id}") diff --git a/app/views/notification_mailer/favourite.html.haml b/app/views/notification_mailer/favourite.html.haml index 325f0aff5f7d58..62c0a39abe14f0 100644 --- a/app/views/notification_mailer/favourite.html.haml +++ b/app/views/notification_mailer/favourite.html.haml @@ -1,45 +1,13 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody += content_for :heading do + = render 'application/mailer/heading', heading_title: t('notification_mailer.favourite.title'), heading_subtitle: t('notification_mailer.favourite.body', name: @account.pretty_acct), heading_image_url: frontend_asset_url('images/mailer-new/heading/favorite.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td + = render 'status', status: @status, time_zone: @me.user_time_zone + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_grade.png'), alt: '' - - %h1= t 'notification_mailer.favourite.title' - %p.lead= t('notification_mailer.favourite.body', name: @account.pretty_acct) - -= render 'status', status: @status, time_zone: @me.user_time_zone - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start.border-top - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to web_url("@#{@status.account.pretty_acct}/#{@status.id}") do - %span= t 'application_mailer.view_status' + %td.email-padding-top-24 + = render 'application/mailer/button', text: t('application_mailer.view_status'), url: web_url("@#{@status.account.pretty_acct}/#{@status.id}") diff --git a/app/views/notification_mailer/follow.html.haml b/app/views/notification_mailer/follow.html.haml index f250cbbd2aef71..8247aa5b448d21 100644 --- a/app/views/notification_mailer/follow.html.haml +++ b/app/views/notification_mailer/follow.html.haml @@ -1,43 +1,13 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody += content_for :heading do + = render 'application/mailer/heading', heading_title: t('notification_mailer.follow.title'), heading_subtitle: t('notification_mailer.follow.body', name: @account.pretty_acct), heading_image_url: frontend_asset_url('images/mailer-new/heading/user.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td-without-padding + = render 'application/mailer/account', account: @account + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_person_add.png'), alt: '' - - %h1= t 'notification_mailer.follow.title' - %p.lead= t('notification_mailer.follow.body', name: @account.pretty_acct) - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to web_url("@#{@account.pretty_acct}") do - %span= t 'application_mailer.view_profile' + %td.email-padding-24.email-padding-top-0 + = render 'application/mailer/button', text: t('application_mailer.view_profile'), url: web_url("@#{@account.pretty_acct}") diff --git a/app/views/notification_mailer/follow_request.html.haml b/app/views/notification_mailer/follow_request.html.haml index 3885a411d97a2a..9344ef7eb38031 100644 --- a/app/views/notification_mailer/follow_request.html.haml +++ b/app/views/notification_mailer/follow_request.html.haml @@ -1,43 +1,13 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody += content_for :heading do + = render 'application/mailer/heading', heading_title: t('notification_mailer.follow_request.title'), heading_subtitle: t('notification_mailer.follow_request.body', name: @account.pretty_acct), heading_image_url: frontend_asset_url('images/mailer-new/heading/follow.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td-without-padding + = render 'application/mailer/account', account: @account + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_person_add.png'), alt: '' - - %h1= t 'notification_mailer.follow_request.title' - %p.lead= t('notification_mailer.follow_request.body', name: @account.pretty_acct) - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to web_url('follow_requests') do - %span= t 'notification_mailer.follow_request.action' + %td.email-padding-24.email-padding-top-0 + = render 'application/mailer/button', text: t('notification_mailer.follow_request.action'), url: web_url('follow_requests') diff --git a/app/views/notification_mailer/mention.html.haml b/app/views/notification_mailer/mention.html.haml index e830644c3f4bce..83fa5086a6b252 100644 --- a/app/views/notification_mailer/mention.html.haml +++ b/app/views/notification_mailer/mention.html.haml @@ -1,45 +1,13 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody += content_for :heading do + = render 'application/mailer/heading', heading_title: t('notification_mailer.mention.title'), heading_subtitle: t('notification_mailer.mention.body', name: @status.account.pretty_acct), heading_image_url: frontend_asset_url('images/mailer-new/heading/mention.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td + = render 'status', status: @status, time_zone: @me.user_time_zone + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_reply.png'), alt: '' - - %h1= t 'notification_mailer.mention.title' - %p.lead= t('notification_mailer.mention.body', name: @status.account.pretty_acct) - -= render 'status', status: @status, time_zone: @me.user_time_zone - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start.border-top - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to web_url("@#{@status.account.pretty_acct}/#{@status.id}") do - %span= t 'notification_mailer.mention.action' + %td.email-padding-top-24 + = render 'application/mailer/button', text: t('notification_mailer.mention.action'), url: web_url("@#{@status.account.pretty_acct}/#{@status.id}") diff --git a/app/views/notification_mailer/reblog.html.haml b/app/views/notification_mailer/reblog.html.haml index e4f9441236b4f0..f91c678cf535f2 100644 --- a/app/views/notification_mailer/reblog.html.haml +++ b/app/views/notification_mailer/reblog.html.haml @@ -1,45 +1,13 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody += content_for :heading do + = render 'application/mailer/heading', heading_title: t('notification_mailer.reblog.title'), heading_subtitle: t('notification_mailer.reblog.body', name: @account.pretty_acct), heading_image_url: frontend_asset_url('images/mailer-new/heading/boost.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td + = render 'status', status: @status, time_zone: @me.user_time_zone + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_cached.png'), alt: '' - - %h1= t 'notification_mailer.reblog.title' - %p.lead= t('notification_mailer.reblog.body', name: @account.pretty_acct) - -= render 'status', status: @status, time_zone: @me.user_time_zone - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start.border-top - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to web_url("@#{@status.account.pretty_acct}/#{@status.id}") do - %span= t 'application_mailer.view_status' + %td.email-padding-top-24 + = render 'application/mailer/button', text: t('application_mailer.view_status'), url: web_url("@#{@status.account.pretty_acct}/#{@status.id}") diff --git a/app/views/settings/preferences/reaching/show.html.haml b/app/views/settings/preferences/reaching/show.html.haml index c08e79daff6124..845278f1d7f05c 100644 --- a/app/views/settings/preferences/reaching/show.html.haml +++ b/app/views/settings/preferences/reaching/show.html.haml @@ -44,6 +44,9 @@ %h4= t 'preferences.searchability' + - unless Chewy.enabled? + %p.hint= t 'preferences.does_not_search' + .fields-row .fields-group.fields-row__column.fields-row__column-12 = ff.input :default_searchability, @@ -59,22 +62,26 @@ .fields-group = ff.input :disallow_unlisted_public_searchability, wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_disallow_unlisted_public_searchability'), hint: I18n.t('simple_form.hints.defaults.setting_disallow_unlisted_public_searchability') - %h4= t 'preferences.search' + - if Chewy.enabled? + %h4= t 'preferences.search' - .fields-row - .fields-group.fields-row__column.fields-row__column-12 - = ff.input :default_searchability_of_search, - collection: Status.selectable_searchabilities_for_search, - hint: false, - include_blank: false, - kmyblue: true, - label: I18n.t('simple_form.labels.defaults.setting_default_searchability_of_search'), - label_method: ->(searchability) { safe_join([I18n.t("statuses.searchabilities.#{searchability}"), I18n.t("statuses.searchabilities.#{searchability}_search_long")], ' - ') }, - required: false, - wrapper: :with_label + .fields-row + .fields-group.fields-row__column.fields-row__column-12 + = ff.input :default_searchability_of_search, + collection: Status.selectable_searchabilities_for_search, + hint: false, + include_blank: false, + kmyblue: true, + label: I18n.t('simple_form.labels.defaults.setting_default_searchability_of_search'), + label_method: ->(searchability) { safe_join([I18n.t("statuses.searchabilities.#{searchability}"), I18n.t("statuses.searchabilities.#{searchability}_search_long")], ' - ') }, + required: false, + wrapper: :with_label - .fields-group - = ff.input :use_public_index, wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_use_public_index') + .fields-group + = ff.input :reverse_search_quote, wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_reverse_search_quote'), hint: I18n.t('simple_form.hints.defaults.setting_reverse_search_quote') + + .fields-group + = ff.input :use_public_index, wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_use_public_index') .actions = f.button :button, t('generic.save_changes'), type: :submit diff --git a/app/views/shared/_og.html.haml b/app/views/shared/_og.html.haml index 385351ee14aff4..d1e3cd9c6fe7e1 100644 --- a/app/views/shared/_og.html.haml +++ b/app/views/shared/_og.html.haml @@ -8,7 +8,7 @@ = opengraph 'og:type', 'website' = opengraph 'og:title', instance_presenter.title = opengraph 'og:description', description -= opengraph 'og:image', full_asset_url(thumbnail&.file&.url(:'@1x') || asset_pack_path('media/images/preview.png', protocol: :request)) += opengraph 'og:image', full_asset_url(thumbnail&.file&.url(:'@1x') || frontend_asset_path('images/preview.png')) = opengraph 'og:image:width', thumbnail ? thumbnail.meta['width'] : '1200' = opengraph 'og:image:height', thumbnail ? thumbnail.meta['height'] : '630' = opengraph 'twitter:card', 'summary_large_image' diff --git a/app/views/user_mailer/appeal_approved.html.haml b/app/views/user_mailer/appeal_approved.html.haml index 223ba7f0b88880..54e9a94a544c16 100644 --- a/app/views/user_mailer/appeal_approved.html.haml +++ b/app/views/user_mailer/appeal_approved.html.haml @@ -1,61 +1,12 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_done.png'), alt: '' - - %h1= t 'user_mailer.appeal_approved.title' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center - %p= t 'user_mailer.appeal_approved.explanation', - appeal_date: l(@appeal.created_at.in_time_zone(@resource.time_zone.presence), format: :with_time_zone), - strike_date: l(@appeal.strike.created_at.in_time_zone(@resource.time_zone.presence), format: :with_time_zone) - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to root_url do - %span= t 'user_mailer.appeal_approved.action' += content_for :heading do + = render 'application/mailer/heading', heading_title: t('user_mailer.appeal_approved.title'), heading_subtitle: t('user_mailer.appeal_approved.subtitle'), heading_image_url: frontend_asset_url('images/mailer-new/heading/appeal-approved.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + %p= t 'user_mailer.appeal_approved.explanation', + appeal_date: l(@appeal.created_at.in_time_zone(@resource.time_zone.presence), format: :with_time_zone), + strike_date: l(@appeal.strike.created_at.in_time_zone(@resource.time_zone.presence), format: :with_time_zone) + = render 'application/mailer/button', text: t('user_mailer.appeal_approved.action'), url: root_url diff --git a/app/views/user_mailer/appeal_rejected.html.haml b/app/views/user_mailer/appeal_rejected.html.haml index 59354f1d404dd0..b493712b05cf56 100644 --- a/app/views/user_mailer/appeal_rejected.html.haml +++ b/app/views/user_mailer/appeal_rejected.html.haml @@ -1,61 +1,12 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_flag.png'), alt: '' - - %h1= t 'user_mailer.appeal_rejected.title' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center - %p= t 'user_mailer.appeal_rejected.explanation', - appeal_date: l(@appeal.created_at.in_time_zone(@resource.time_zone.presence), format: :with_time_zone), - strike_date: l(@appeal.strike.created_at.in_time_zone(@resource.time_zone.presence), format: :with_time_zone) - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to root_url do - %span= t 'user_mailer.appeal_approved.action' += content_for :heading do + = render 'application/mailer/heading', heading_title: t('user_mailer.appeal_rejected.title'), heading_subtitle: t('user_mailer.appeal_rejected.subtitle'), heading_image_url: frontend_asset_url('images/mailer-new/heading/appeal-rejected.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + %p= t 'user_mailer.appeal_rejected.explanation', + appeal_date: l(@appeal.created_at.in_time_zone(@resource.time_zone.presence), format: :with_time_zone), + strike_date: l(@appeal.strike.created_at.in_time_zone(@resource.time_zone.presence), format: :with_time_zone) + = render 'application/mailer/button', text: t('user_mailer.appeal_approved.action'), url: root_url diff --git a/app/views/user_mailer/backup_ready.html.haml b/app/views/user_mailer/backup_ready.html.haml index 465ead2c8bac23..99a48e7fdb4a3d 100644 --- a/app/views/user_mailer/backup_ready.html.haml +++ b/app/views/user_mailer/backup_ready.html.haml @@ -1,59 +1,10 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_file_download.png'), alt: '' - - %h1= t 'user_mailer.backup_ready.title' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center - %p= t 'user_mailer.backup_ready.explanation' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to download_backup_url(@backup) do - %span= t 'exports.archive_takeout.download' += content_for :heading do + = render 'application/mailer/heading', heading_title: t('user_mailer.backup_ready.title'), heading_subtitle: t('user_mailer.backup_ready.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/archive.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + %p= t 'user_mailer.backup_ready.extra' + = render 'application/mailer/button', text: t('exports.archive_takeout.download'), url: download_backup_url(@backup) diff --git a/app/views/user_mailer/confirmation_instructions.html.haml b/app/views/user_mailer/confirmation_instructions.html.haml index 447e689b4078f1..74b2d49a4710fe 100644 --- a/app/views/user_mailer/confirmation_instructions.html.haml +++ b/app/views/user_mailer/confirmation_instructions.html.haml @@ -1,80 +1,16 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_email.png'), alt: '' - - %h1= t 'devise.mailer.confirmation_instructions.title' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center - %p= t @resource.approved? ? 'devise.mailer.confirmation_instructions.explanation' : 'devise.mailer.confirmation_instructions.explanation_when_pending', host: site_hostname - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - - if @resource.created_by_application - = link_to confirmation_url(@resource, confirmation_token: @token, redirect_to_app: 'true') do - %span= t 'devise.mailer.confirmation_instructions.action_with_app', app: @resource.created_by_application.name - - else - = link_to confirmation_url(@resource, confirmation_token: @token) do - %span= t 'devise.mailer.confirmation_instructions.action' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center - %p= t 'devise.mailer.confirmation_instructions.extra_html', terms_path: about_more_url, policy_path: privacy_policy_url += content_for :heading do + = render 'application/mailer/heading', heading_title: t('devise.mailer.confirmation_instructions.title'), heading_image_url: frontend_asset_url('images/mailer-new/heading/email.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + %p= t @resource.approved? ? 'devise.mailer.confirmation_instructions.explanation' : 'devise.mailer.confirmation_instructions.explanation_when_pending', host: site_hostname + - if @resource.created_by_application + = render 'application/mailer/button', text: t('settings.account_settings'), url: edit_user_registration_url + = link_to confirmation_url(@resource, confirmation_token: @token, redirect_to_app: 'true') do + %span= t 'devise.mailer.confirmation_instructions.action_with_app', app: @resource.created_by_application.name + - else + = render 'application/mailer/button', text: t('devise.mailer.confirmation_instructions.action'), url: confirmation_url(@resource, confirmation_token: @token) + %p= t 'devise.mailer.confirmation_instructions.extra_html', terms_path: about_more_url, policy_path: privacy_policy_url diff --git a/app/views/user_mailer/email_changed.html.haml b/app/views/user_mailer/email_changed.html.haml index 96be8624d9d7ef..71678ad029aead 100644 --- a/app/views/user_mailer/email_changed.html.haml +++ b/app/views/user_mailer/email_changed.html.haml @@ -1,58 +1,11 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_email.png'), alt: '' - - %h1= t 'devise.mailer.email_changed.title' - %p.lead= t 'devise.mailer.email_changed.explanation' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.input-cell - %table.input{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td= @resource.unconfirmed_email - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %p= t 'devise.mailer.email_changed.extra' += content_for :heading do + = render 'application/mailer/heading', heading_title: t('devise.mailer.email_changed.title'), heading_subtitle: t('devise.mailer.email_changed.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/email.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + = render 'application/mailer/frame', text: @resource.unconfirmed_email + %p= t 'devise.mailer.email_changed.extra' + = render 'application/mailer/button', text: t('settings.account_settings'), url: edit_user_registration_url diff --git a/app/views/user_mailer/password_change.html.haml b/app/views/user_mailer/password_change.html.haml index 559abf027c9f67..44c8c0dcafb9b7 100644 --- a/app/views/user_mailer/password_change.html.haml +++ b/app/views/user_mailer/password_change.html.haml @@ -1,40 +1,10 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_lock_open.png'), alt: '' - - %h1= t 'devise.mailer.password_change.title' - %p.lead= t 'devise.mailer.password_change.explanation' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %p= t 'devise.mailer.password_change.extra' += content_for :heading do + = render 'application/mailer/heading', heading_title: t('devise.mailer.password_change.title'), heading_subtitle: t('devise.mailer.password_change.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/password.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + %p= t 'devise.mailer.password_change.extra' + = render 'application/mailer/button', text: t('settings.account_settings'), url: edit_user_registration_url diff --git a/app/views/user_mailer/reconfirmation_instructions.html.haml b/app/views/user_mailer/reconfirmation_instructions.html.haml index 7f10ba94fddfcb..854887a7e01ba0 100644 --- a/app/views/user_mailer/reconfirmation_instructions.html.haml +++ b/app/views/user_mailer/reconfirmation_instructions.html.haml @@ -1,60 +1,11 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_email.png'), alt: '' - - %h1= t 'devise.mailer.reconfirmation_instructions.title' - %p.lead= t 'devise.mailer.reconfirmation_instructions.explanation' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to confirmation_url(@resource, confirmation_token: @token) do - %span= t 'devise.mailer.confirmation_instructions.action' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %p= t 'devise.mailer.reconfirmation_instructions.extra' += content_for :heading do + = render 'application/mailer/heading', heading_title: t('devise.mailer.reconfirmation_instructions.title'), heading_image_url: frontend_asset_url('images/mailer-new/heading/email.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + %p= t('devise.mailer.reconfirmation_instructions.explanation') + = render 'application/mailer/button', text: t('devise.mailer.confirmation_instructions.action'), url: confirmation_url(@resource, confirmation_token: @token) + %p= t 'devise.mailer.reconfirmation_instructions.extra' diff --git a/app/views/user_mailer/reset_password_instructions.html.haml b/app/views/user_mailer/reset_password_instructions.html.haml index eeed38c9e4ecab..a1384fcc270a6d 100644 --- a/app/views/user_mailer/reset_password_instructions.html.haml +++ b/app/views/user_mailer/reset_password_instructions.html.haml @@ -1,60 +1,10 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_lock_open.png'), alt: '' - - %h1= t 'devise.mailer.reset_password_instructions.title' - %p.lead= t 'devise.mailer.reset_password_instructions.explanation' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to edit_password_url(@resource, reset_password_token: @token) do - %span= t 'devise.mailer.reset_password_instructions.action' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %p= t 'devise.mailer.reset_password_instructions.extra' += content_for :heading do + = render 'application/mailer/heading', heading_title: t('devise.mailer.reset_password_instructions.title'), heading_subtitle: t('devise.mailer.reset_password_instructions.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/password.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + %p= t 'devise.mailer.reset_password_instructions.extra' + = render 'application/mailer/button', text: t('devise.mailer.reset_password_instructions.action'), url: edit_password_url(@resource, reset_password_token: @token) diff --git a/app/views/user_mailer/suspicious_sign_in.html.haml b/app/views/user_mailer/suspicious_sign_in.html.haml index 0cd21b4e60a412..deee7a1ce16db1 100644 --- a/app/views/user_mailer/suspicious_sign_in.html.haml +++ b/app/views/user_mailer/suspicious_sign_in.html.haml @@ -1,71 +1,24 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon.warning-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_lock_open.png'), alt: '' - - %h1= t 'user_mailer.suspicious_sign_in.title' - %p= t 'user_mailer.suspicious_sign_in.explanation' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center - %p= t 'user_mailer.suspicious_sign_in.details' - %tr - %td.column-cell.text-center - %p - %strong #{t('sessions.ip')}: - = @remote_ip - %br/ - %strong #{t('sessions.browser')}: - %span{ title: @user_agent } - = t 'sessions.description', - browser: t("sessions.browsers.#{@detection.id}", default: @detection.id.to_s), - platform: t("sessions.platforms.#{@detection.platform.id}", default: @detection.platform.id.to_s) - %br/ - = l(@timestamp.in_time_zone(@resource.time_zone.presence), format: :with_time_zone) - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center - %p= t 'user_mailer.suspicious_sign_in.further_actions_html', - action: link_to(t('user_mailer.suspicious_sign_in.change_password'), edit_user_registration_url) += content_for :heading do + = render 'application/mailer/heading', heading_title: t('user_mailer.suspicious_sign_in.title'), heading_subtitle: t('user_mailer.suspicious_sign_in.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/login.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + %p= t 'user_mailer.suspicious_sign_in.details' + %p + %strong #{t('sessions.ip')}: + = @remote_ip + %br/ + %strong #{t('sessions.browser')}: + %span{ title: @user_agent } + = t 'sessions.description', + browser: t("sessions.browsers.#{@detection.id}", default: @detection.id.to_s), + platform: t("sessions.platforms.#{@detection.platform.id}", default: @detection.platform.id.to_s) + %br/ + %strong #{t('sessions.date')}: + = l(@timestamp.in_time_zone(@resource.time_zone.presence), format: :with_time_zone) + = render 'application/mailer/button', text: t('settings.account_settings'), url: edit_user_registration_url + %p= t 'user_mailer.suspicious_sign_in.further_actions_html', + action: link_to(t('user_mailer.suspicious_sign_in.change_password'), edit_user_registration_url) diff --git a/app/views/user_mailer/two_factor_disabled.html.haml b/app/views/user_mailer/two_factor_disabled.html.haml index 651c6f940e0dea..28f6ca66007bc8 100644 --- a/app/views/user_mailer/two_factor_disabled.html.haml +++ b/app/views/user_mailer/two_factor_disabled.html.haml @@ -1,43 +1,10 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon.alert-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_lock_open.png'), alt: '' - - %h1= t 'devise.mailer.two_factor_disabled.title' - %p.lead= t 'devise.mailer.two_factor_disabled.explanation' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to edit_user_registration_url do - %span= t('settings.account_settings') += content_for :heading do + = render 'application/mailer/heading', heading_title: t('devise.mailer.two_factor_disabled.title'), heading_subtitle: t('devise.mailer.two_factor_disabled.subtitle'), heading_image_url: frontend_asset_url('images/mailer-new/heading/2fa-disabled.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + %p= t 'devise.mailer.two_factor_disabled.explanation' + = render 'application/mailer/button', text: t('settings.account_settings'), url: edit_user_registration_url diff --git a/app/views/user_mailer/two_factor_enabled.html.haml b/app/views/user_mailer/two_factor_enabled.html.haml index fc31bd979f5020..691dc661a09c5d 100644 --- a/app/views/user_mailer/two_factor_enabled.html.haml +++ b/app/views/user_mailer/two_factor_enabled.html.haml @@ -1,43 +1,10 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_lock_open.png'), alt: '' - - %h1= t 'devise.mailer.two_factor_enabled.title' - %p.lead= t 'devise.mailer.two_factor_enabled.explanation' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to edit_user_registration_url do - %span= t('settings.account_settings') += content_for :heading do + = render 'application/mailer/heading', heading_title: t('devise.mailer.two_factor_enabled.title'), heading_subtitle: t('devise.mailer.two_factor_enabled.subtitle'), heading_image_url: frontend_asset_url('images/mailer-new/heading/2fa-enabled.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + %p= t 'devise.mailer.two_factor_enabled.explanation' + = render 'application/mailer/button', text: t('settings.account_settings'), url: edit_user_registration_url diff --git a/app/views/user_mailer/two_factor_recovery_codes_changed.html.haml b/app/views/user_mailer/two_factor_recovery_codes_changed.html.haml index 833708868badd5..2d063e4c76919e 100644 --- a/app/views/user_mailer/two_factor_recovery_codes_changed.html.haml +++ b/app/views/user_mailer/two_factor_recovery_codes_changed.html.haml @@ -1,43 +1,10 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon.alert-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_lock_open.png'), alt: '' - - %h1= t 'devise.mailer.two_factor_recovery_codes_changed.title' - %p.lead= t 'devise.mailer.two_factor_recovery_codes_changed.explanation' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to edit_user_registration_url do - %span= t('settings.account_settings') += content_for :heading do + = render 'application/mailer/heading', heading_title: t('devise.mailer.two_factor_recovery_codes_changed.title'), heading_subtitle: t('devise.mailer.two_factor_recovery_codes_changed.subtitle'), heading_image_url: frontend_asset_url('images/mailer-new/heading/2fa-recovery.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + %p= t 'devise.mailer.two_factor_recovery_codes_changed.explanation' + = render 'application/mailer/button', text: t('settings.account_settings'), url: edit_user_registration_url diff --git a/app/views/user_mailer/warning.html.haml b/app/views/user_mailer/warning.html.haml index 5d64e83247cd62..837cde550e5a4d 100644 --- a/app/views/user_mailer/warning.html.haml +++ b/app/views/user_mailer/warning.html.haml @@ -1,98 +1,46 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody += content_for :heading do + = render 'application/mailer/heading', heading_title: t("user_mailer.warning.title.#{@warning.action}"), heading_image_url: frontend_asset_url('images/mailer-new/heading/warning.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td-without-padding + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon.alert-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_flag.png'), alt: '' - - %h1= t "user_mailer.warning.title.#{@warning.action}" - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center - - unless @warning.none_action? - %p= t "user_mailer.warning.explanation.#{@warning.action}", instance: @instance - - - if @warning.text.present? - = linkify(@warning.text) - - - if @warning.report && !@warning.report.other? - %p - %strong= t('user_mailer.warning.reason') - = t("user_mailer.warning.categories.#{@warning.report.category}") - - - if @warning.report.violation? && @warning.report.rule_ids.present? - %ul.rules-list - - @warning.report.rules.each do |rule| - %li= rule.text - - - unless @statuses.empty? - %p - %strong= t('user_mailer.warning.statuses') - -- unless @statuses.empty? - - @statuses.each_with_index do |status, i| - = render 'notification_mailer/status', status: status, i: i + 1, highlighted: true, time_zone: @resource.time_zone.presence - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell{ class: @statuses.blank? ? '' : 'content-start' } - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to disputes_strike_url(@warning) do - %span= t 'user_mailer.warning.appeal' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody + %td.email-prose.email-padding-24 + - unless @warning.none_action? + %p= t "user_mailer.warning.explanation.#{@warning.action}", instance: @instance + + - if @warning.text.present? + = linkify(@warning.text) + + - if @warning.report && !@warning.report.other? + %p + %strong= t('user_mailer.warning.reason') + = t("user_mailer.warning.categories.#{@warning.report.category}") + + - if @warning.report.violation? && @warning.report.rule_ids.present? + %ul.rules-list + - @warning.report.rules.each do |rule| + %li= rule.text + + - unless @statuses.empty? + %p + %strong= t('user_mailer.warning.statuses') + + - unless @statuses.empty? + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-border-top + - @statuses.each_with_index do |status, i| + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-border-bottom.email-padding-24 + = render 'notification_mailer/status', status: status, i: i + 1, highlighted: true, time_zone: @resource.time_zone.presence + + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.content-cell - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center - %p= t 'user_mailer.warning.appeal_description', instance: @instance + %td.email-prose.email-padding-24 + %p= t 'user_mailer.warning.appeal_description', instance: @instance + = render 'application/mailer/button', text: t('user_mailer.warning.appeal'), url: disputes_strike_url(@warning) diff --git a/app/views/user_mailer/webauthn_credential_added.html.haml b/app/views/user_mailer/webauthn_credential_added.html.haml index 2ecb62d967ab20..3e167662380884 100644 --- a/app/views/user_mailer/webauthn_credential_added.html.haml +++ b/app/views/user_mailer/webauthn_credential_added.html.haml @@ -1,44 +1,13 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody += content_for :heading do + = render 'application/mailer/heading', heading_title: t('devise.mailer.webauthn_credential.added.title'), heading_subtitle: t('devise.mailer.webauthn_credential.added.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/key-added.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_lock_open.png'), alt: '' - - %h1= t 'devise.mailer.webauthn_credential.added.title' - %p.lead #{t('devise.mailer.webauthn_credential.added.explanation')}: - %p.lead= @webauthn_credential.nickname - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to edit_user_registration_url do - %span= t('settings.account_settings') + %td.email-frame-wrapper-td + = render 'application/mailer/frame', text: @webauthn_credential.nickname + = render 'application/mailer/button', text: t('settings.account_settings'), url: edit_user_registration_url diff --git a/app/views/user_mailer/webauthn_credential_deleted.html.haml b/app/views/user_mailer/webauthn_credential_deleted.html.haml index f282985b1485a8..59dcb75d3a812e 100644 --- a/app/views/user_mailer/webauthn_credential_deleted.html.haml +++ b/app/views/user_mailer/webauthn_credential_deleted.html.haml @@ -1,44 +1,13 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody += content_for :heading do + = render 'application/mailer/heading', heading_title: t('devise.mailer.webauthn_credential.deleted.title'), heading_subtitle: t('devise.mailer.webauthn_credential.deleted.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/key-deleted.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon.alert-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_lock_open.png'), alt: '' - - %h1= t 'devise.mailer.webauthn_credential.deleted.title' - %p.lead #{t('devise.mailer.webauthn_credential.deleted.explanation')}: - %p.lead= @webauthn_credential.nickname - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to edit_user_registration_url do - %span= t('settings.account_settings') + %td.email-frame-wrapper-td + = render 'application/mailer/frame', text: @webauthn_credential.nickname + = render 'application/mailer/button', text: t('settings.account_settings'), url: edit_user_registration_url diff --git a/app/views/user_mailer/webauthn_disabled.html.haml b/app/views/user_mailer/webauthn_disabled.html.haml index 81a2a7954c7f20..0f7c534bc4505e 100644 --- a/app/views/user_mailer/webauthn_disabled.html.haml +++ b/app/views/user_mailer/webauthn_disabled.html.haml @@ -1,43 +1,10 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon.alert-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_lock_open.png'), alt: '' - - %h1= t 'devise.mailer.webauthn_disabled.title' - %p.lead= t 'devise.mailer.webauthn_disabled.explanation' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to edit_user_registration_url do - %span= t('settings.account_settings') += content_for :heading do + = render 'application/mailer/heading', heading_title: t('devise.mailer.webauthn_disabled.title'), heading_subtitle: t('devise.mailer.webauthn_disabled.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/key-disabled.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + %p= t 'devise.mailer.webauthn_disabled.extra' + = render 'application/mailer/button', text: t('settings.account_settings'), url: edit_user_registration_url diff --git a/app/views/user_mailer/webauthn_enabled.html.haml b/app/views/user_mailer/webauthn_enabled.html.haml index f08e764e8df64e..cd11aa5a40fe97 100644 --- a/app/views/user_mailer/webauthn_enabled.html.haml +++ b/app/views/user_mailer/webauthn_enabled.html.haml @@ -1,43 +1,10 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_lock_open.png'), alt: '' - - %h1= t 'devise.mailer.webauthn_enabled.title' - %p.lead= t 'devise.mailer.webauthn_enabled.explanation' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.button-cell - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to edit_user_registration_url do - %span= t('settings.account_settings') += content_for :heading do + = render 'application/mailer/heading', heading_title: t('devise.mailer.webauthn_enabled.title'), heading_subtitle: t('devise.mailer.webauthn_enabled.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/key-enabled.png') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td.email-prose + %p= t 'devise.mailer.webauthn_enabled.extra' + = render 'application/mailer/button', text: t('settings.account_settings'), url: edit_user_registration_url diff --git a/app/views/user_mailer/welcome.html.haml b/app/views/user_mailer/welcome.html.haml index 0d8a15cfd794dd..b77d40fb058930 100644 --- a/app/views/user_mailer/welcome.html.haml +++ b/app/views/user_mailer/welcome.html.haml @@ -1,99 +1,25 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody += content_for :heading do + = render 'application/mailer/heading', heading_title: t('user_mailer.welcome.title', name: @resource.account.username), heading_subtitle: t('user_mailer.welcome.explanation') +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-padding-td + %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-inner-card-td-without-padding + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.content-cell.hero - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td - = image_tag full_pack_url('media/images/mailer/icon_done.png'), alt: '' - - %h1= t 'user_mailer.welcome.title', name: @resource.account.username - %p.lead= t 'user_mailer.welcome.explanation' - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody + %td.email-prose.email-padding-24 + %p + %b= t 'user_mailer.welcome.full_handle' + = render 'application/mailer/frame', text: "#{@resource.account.username}@#{@instance}" + %p= t 'user_mailer.welcome.full_handle_hint', instance: @instance + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.content-cell.content-start - .email-row - .col-3 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.input-cell.text-center.padded-bottom - %h5= t 'user_mailer.welcome.full_handle' - %table.input{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td @#{@resource.account.username}@#{@instance} - .col-3 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell - %p= t 'user_mailer.welcome.full_handle_hint', instance: @instance - -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody + %td.email-border-top.email-prose.email-padding-24 + %p= t 'user_mailer.welcome.edit_profile_step' + = render 'application/mailer/button', text: t('user_mailer.welcome.edit_profile_action'), url: settings_profile_url + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.content-cell.content-start.border-top - .email-row - .col-4 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.padded - = t 'user_mailer.welcome.edit_profile_step' - .col-2 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.padded - %table.button.button-small{ align: 'left', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to settings_profile_url do - %span= t 'user_mailer.welcome.edit_profile_action' - - %tr - %td.content-cell.padded-bottom - .email-row - .col-4 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.padded - = t 'user_mailer.welcome.final_step' - .col-2 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.padded - %table.button.button-small{ align: 'left', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to web_url do - %span= t 'user_mailer.welcome.final_action' + %td.email-border-top.email-prose.email-padding-24 + %p= t 'user_mailer.welcome.edit_profile_step' + = render 'application/mailer/button', text: t('user_mailer.welcome.final_action'), url: web_url diff --git a/app/workers/link_crawl_worker.rb b/app/workers/link_crawl_worker.rb index b3d8aa26467dfc..c63af1e43aa0a0 100644 --- a/app/workers/link_crawl_worker.rb +++ b/app/workers/link_crawl_worker.rb @@ -7,7 +7,7 @@ class LinkCrawlWorker def perform(status_id) FetchLinkCardService.new.call(Status.find(status_id)) - rescue ActiveRecord::RecordNotFound + rescue ActiveRecord::RecordNotFound, ActiveRecord::RecordNotUnique true end end diff --git a/bin/bundle b/bin/bundle index f19acf5b5cc6e8..50da5fdf9e8fea 100755 --- a/bin/bundle +++ b/bin/bundle @@ -1,3 +1,109 @@ #!/usr/bin/env ruby -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) -load Gem.bin_path('bundler', 'bundle') +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'bundle' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +require "rubygems" + +m = Module.new do + module_function + + def invoked_as_script? + File.expand_path($0) == File.expand_path(__FILE__) + end + + def env_var_version + ENV["BUNDLER_VERSION"] + end + + def cli_arg_version + return unless invoked_as_script? # don't want to hijack other binstubs + return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update` + bundler_version = nil + update_index = nil + ARGV.each_with_index do |a, i| + if update_index && update_index.succ == i && a.match?(Gem::Version::ANCHORED_VERSION_PATTERN) + bundler_version = a + end + next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/ + bundler_version = $1 + update_index = i + end + bundler_version + end + + def gemfile + gemfile = ENV["BUNDLE_GEMFILE"] + return gemfile if gemfile && !gemfile.empty? + + File.expand_path("../Gemfile", __dir__) + end + + def lockfile + lockfile = + case File.basename(gemfile) + when "gems.rb" then gemfile.sub(/\.rb$/, ".locked") + else "#{gemfile}.lock" + end + File.expand_path(lockfile) + end + + def lockfile_version + return unless File.file?(lockfile) + lockfile_contents = File.read(lockfile) + return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/ + Regexp.last_match(1) + end + + def bundler_requirement + @bundler_requirement ||= + env_var_version || + cli_arg_version || + bundler_requirement_for(lockfile_version) + end + + def bundler_requirement_for(version) + return "#{Gem::Requirement.default}.a" unless version + + bundler_gem_version = Gem::Version.new(version) + + bundler_gem_version.approximate_recommendation + end + + def load_bundler! + ENV["BUNDLE_GEMFILE"] ||= gemfile + + activate_bundler + end + + def activate_bundler + gem_error = activation_error_handling do + gem "bundler", bundler_requirement + end + return if gem_error.nil? + require_error = activation_error_handling do + require "bundler/version" + end + return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION)) + warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`" + exit 42 + end + + def activation_error_handling + yield + nil + rescue StandardError, LoadError => e + e + end +end + +m.load_bundler! + +if m.invoked_as_script? + load Gem.bin_path("bundler", "bundle") +end diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb index a8b61e356f01ab..e43e38786c471c 100644 --- a/config/initializers/content_security_policy.rb +++ b/config/initializers/content_security_policy.rb @@ -52,9 +52,9 @@ def sso_host if Rails.env.development? webpacker_public_host = ENV.fetch('WEBPACKER_DEV_SERVER_PUBLIC', Webpacker.config.dev_server[:public]) - webpacker_urls = %w(ws http).map { |protocol| "#{protocol}#{Webpacker.dev_server.https? ? 's' : ''}://#{webpacker_public_host}" } + front_end_build_urls = %w(ws http).map { |protocol| "#{protocol}#{Webpacker.dev_server.https? ? 's' : ''}://#{webpacker_public_host}" } - p.connect_src :self, :data, :blob, *media_hosts, Rails.configuration.x.streaming_api_base_url, *webpacker_urls + p.connect_src :self, :data, :blob, *media_hosts, Rails.configuration.x.streaming_api_base_url, *front_end_build_urls p.script_src :self, :unsafe_inline, :unsafe_eval, assets_host else p.connect_src :self, :data, :blob, *media_hosts, Rails.configuration.x.streaming_api_base_url diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 2c6099623db501..f935090efc2b9b 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -2,15 +2,6 @@ require 'devise/strategies/authenticatable' -# TODO: Remove this patch when this PR or similar is merged into Devise: -# https://github.com/heartcombo/devise/pull/5645 -# We rely on ENV vars and not secrets/credentials, so the deprecation is just noise. -class Devise::SecretKeyFinder - def find - @application.secret_key_base - end -end - Warden::Manager.after_set_user except: :fetch do |user, warden| session_id = warden.cookies.signed['_session_id'] || warden.raw_session['auth_id'] session_id = user.activate_session(warden.request) unless user.session_activations.active?(session_id) @@ -133,9 +124,11 @@ def session_cookie # The secret key used by Devise. Devise uses this key to generate # random tokens. Changing this key will render invalid all existing # confirmation, reset password and unlock tokens in the database. - # Devise will use the `secret_key_base` on Rails 4+ applications as its `secret_key` - # by default. You can change it below and use your own secret key. - # config.secret_key = '2f86974c4dd7735170fd70fbf399f7a477ffd635ef240d07a22cf4bd7cd13dbae17c4383a2996d0c1e79a991ec18a91a17424c53e4771adb75a8b21904bd1403' + # + # Set explicitly to Rails default to avoid deprecation warnings. + # https://github.com/heartcombo/devise/pull/5645#issuecomment-1871849856 + # Remove when Devise changes `SecretKeyFinder` to not emit deprecations. + config.secret_key = Rails.application.secret_key_base # ==> Mailer Configuration # Configure the e-mail address which will be shown in Devise::Mailer, diff --git a/config/initializers/premailer_rails.rb b/config/initializers/premailer_rails.rb index 52576ef883264b..5e9576be7ab108 100644 --- a/config/initializers/premailer_rails.rb +++ b/config/initializers/premailer_rails.rb @@ -5,4 +5,5 @@ Premailer::Rails.config.merge!(remove_ids: true, adapter: :nokogiri, generate_text_part: false, + css_to_attributes: false, strategies: [PremailerWebpackStrategy]) diff --git a/config/locales/an.yml b/config/locales/an.yml index de791679b6b7df..17077041da5f25 100644 --- a/config/locales/an.yml +++ b/config/locales/an.yml @@ -1548,7 +1548,6 @@ an: webauthn: Claus de seguranza user_mailer: appeal_approved: - action: Ir ta la tuya cuenta explanation: L'apelación de l'amonestación contra la tuya cuenta d'o %{strike_date} que ninviés lo %{appeal_date} estió aprebada. La tuya cuenta se troba de nuevo en buen estau. subject: La tuya apelación d'o %{date} ha estau aprebada title: Apelación aprebada @@ -1557,7 +1556,6 @@ an: subject: La tuya apelación d'o %{date} ha estau refusada title: Apelación refusada backup_ready: - explanation: Has solicitau una copia completa d'a tuya cuenta de Mastodon. Ya ye preparada pa descargar! subject: Lo tuyo fichero ye preparau pa descargar title: Descargar fichero suspicious_sign_in: diff --git a/config/locales/ar.yml b/config/locales/ar.yml index c1b2677dcc9265..3c8c643fe76518 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -1871,7 +1871,6 @@ ar: webauthn: مفاتيح الأمان user_mailer: appeal_approved: - action: انتقل إلى حسابك explanation: تمت الموافقة على استئناف السجل ضد حسابك في %{strike_date} الذي قدمته في %{appeal_date}. حسابك مرة أخرى في حالة جيدة. subject: تم قبول طعنك الذي قدمته بتاريخ %{date} title: تم قبول طعنك @@ -1880,7 +1879,6 @@ ar: subject: تم رفض طعنك الذي قدمته بتاريخ %{date} title: رُفض الاستئناف backup_ready: - explanation: لقد قمت بطلب نسخة كاملة لحسابك على ماستدون. إنها متوفرة الآن للتنزيل! subject: نسخة بيانات حسابك جاهزة للتنزيل title: المغادرة بأرشيف الحساب suspicious_sign_in: diff --git a/config/locales/ast.yml b/config/locales/ast.yml index 08717c840eaa5f..a32413cb9a73fb 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -23,6 +23,8 @@ ast: are_you_sure: "¿De xuru que quies facer esta aición?" avatar: Avatar by_domain: Dominiu + change_role: + label: Camudar el rol confirming: En confirmación disabled: Conxelóse display_name: Nome visible @@ -59,6 +61,7 @@ ast: suspend: Suspender title: Cuentes username: Nome d'usuariu + warn: Alvertir web: Web action_logs: actions: @@ -181,6 +184,7 @@ ast: availability: no_failures_recorded: Nun se rexistró nengún fallu. title: Disponibilidá + back_to_warning: Alvertencia by_domain: Dominiu content_policies: comment: Nota interna @@ -461,6 +465,7 @@ ast: delete_account_html: Si quies desaniciar la cuenta, pues facelo equí. Va pidísete que confirmes l'aición. description: prefix_sign_up: "¡Rexístrate güei en Mastodon!" + didnt_get_confirmation: "¿Nun recibiesti l'enllaz de confirmación?" dont_have_your_security_key: "¿Nun tienes una llave de seguranza?" forgot_password: "¿Escaeciesti la contraseña?" login: Aniciar la sesión @@ -477,6 +482,8 @@ ast: accept: Aceptar back: Atrás security: Seguranza + setup: + link_not_received: "¿Nun consiguiesti l'enllaz?" sign_in: preamble_html: Anicia la sesión colos tos datos d'accesu en %{domain}. Si la cuenta ta agospiada n'otru sirvidor, nun vas ser a aniciar la sesión equí. title: Aniciu de la sesión en «%{domain}» @@ -535,6 +542,9 @@ ast: your_appeal_approved: Aprobóse la to apellación your_appeal_pending: Unviesti una apellación your_appeal_rejected: Refugóse la to apellación + edit_profile: + basic_information: Información básica + other: Otres preferencies errors: '400': La solicitú qu'unviesti nun yera válida o yera incorreuta. '403': Nun tienes permisu pa ver esta páxina. @@ -622,6 +632,7 @@ ast: muting: Llista de perfiles colos avisos desactivaos upload: Xubir invites: + delete: Desactivar expired: Caducó expires_in: '1800': 30 minutos @@ -715,6 +726,14 @@ ast: other: Otres preferencies posting_defaults: Configuración predeterminada del espublizamientu d'artículos public_timelines: Llinies de tiempu públiques + privacy: + hint_html: "Personaliza cómo quies s'atope esti perfil ya los sos artículos. Hai una variedá de funciones de Mastodon que puen ayudate a algamar audiencies más grandes cuando s'activen. Dedica un momentu pa revisar estes opciones y asegurate de que s'axusten al to casu." + privacy: Privacidá + reach: Algame + reach_hint_html: Controla si quies que te descubran ya te sigan perfiles nuevos. ¿Quies que los tos artículos apaezan na pantalla «Esploración»? ¿Quies qu'otres persones te vean na recomendación de cuentes? ¿Quies aceptar toles solicitúes de siguimientu automáticamente o tener un control minuciosu de caúna? + search: Busca + search_hint_html: Controla cómo quies que t'atopen. ¿Quies que la xente t'atope polo qu'espublices públicamente? ¿Quies que la xente fuera de Mástodon atope esti perfil cuando busque na web? Ten en cuenta que nun se pue garantizar la esclusión total de tolos motores de busca. + title: Privacidá ya algame privacy_policy: title: Política de privacidá relationships: diff --git a/config/locales/be.yml b/config/locales/be.yml index ca9b0d2b88ab97..c0ed043f8e0927 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1838,7 +1838,6 @@ be: webauthn: Ключы бяспекі user_mailer: appeal_approved: - action: Перайсці ў свой уліковы запіс explanation: Апеляцыя на папярэджанне супраць вашага ўліковага запісу ад %{strike_date}, якую вы падалі %{appeal_date}, была ўхвалена. Ваш уліковы запіс зноў на добрым рахунку. subject: Вашая апеляцыя ад %{date} была ўхваленая title: Абскарджанне ўхвалена @@ -1847,7 +1846,6 @@ be: subject: Вашая апеляцыя ад %{date} была адхіленая title: Абскарджанне адхілена backup_ready: - explanation: Вы запатрабавалі поўнае рэзервовае капіраванне вашага ўліковага запісу Mastodon. Цяпер яго можна спампаваць! subject: Ваш архіў гатовы да спампавання title: Ваш архіў можна спампаваць suspicious_sign_in: diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 1865aa5fca3aca..377babe22e1800 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -1608,6 +1608,7 @@ bg: unknown_browser: Неизвестен браузър weibo: Weibo current_session: Текуща сесия + date: Дата description: "%{browser} на %{platform}" explanation: Това са уеб браузърите, от които в момента сте влезли с вашия Mastodon акаунт. ip: IP адрес @@ -1774,16 +1775,19 @@ bg: webauthn: Ключове за сигурност user_mailer: appeal_approved: - action: Към акаунта ви + action: Настройки на акаунта explanation: Жалбата, която изпратихте на %{appeal_date}, срещу нарушението за вашия акаунт, направено на %{strike_date}, е приета. Вашият акаунт е отново с добра репутация. subject: Вашето обжалване от %{date} е било одобрено + subtitle: Вашият акаунт още веднъж е в добра репутация. title: Одобрено обжалване appeal_rejected: explanation: Жалбата, която изпратихте на %{appeal_date}, срещу нарушението за вашия акаунт, направено на %{strike_date}, е отхвърлена. subject: Вашето обжалване от %{date} е било отхвърлено + subtitle: Обжалването ви е отхвърлено. title: Отхвърлено обжалване backup_ready: - explanation: Изискахте пълно резервно копиране на акаунта си в Mastodon. Вече е готово за изтегляне! + explanation: Изисквахте пълно резервно копие на акаунта си в Mastodon. + extra: Вече е готово за теглене! subject: Вашият архив е готов за изтегляне title: Сваляне на архива suspicious_sign_in: diff --git a/config/locales/br.yml b/config/locales/br.yml index 8a70a90cfe3729..7af72457d0c338 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -471,6 +471,7 @@ br: safari: Safari uc_browser: UC Browser weibo: Weibo + date: Deiziad description: "%{browser} war %{platform}" ip: IP platforms: @@ -529,6 +530,10 @@ br: disable: Diweredekaat edit: Kemmañ user_mailer: + appeal_approved: + action: Arventennoù ar gont + backup_ready: + extra: Prest eo da vezañ pellgarget! warning: categories: spam: Spam diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 25f19ef25f3d8e..580c4a3ed9d439 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1605,6 +1605,7 @@ ca: unknown_browser: Navegador Desconegut weibo: Weibo current_session: Sessió actual + date: Data description: "%{browser} de %{platform}" explanation: Aquests són els navegadors web que actualment han iniciat la sessió amb el teu compte de Mastodon. ip: IP @@ -1771,16 +1772,19 @@ ca: webauthn: Claus de seguretat user_mailer: appeal_approved: - action: Ves al teu compte + action: Configuració del compte explanation: L'apel·lació a l'acció contra el teu compte del %{strike_date} que has enviat el %{appeal_date} ha estat aprovada. El teu compte torna a estar en bon estat. subject: La teva apel·lació del %{date} ha estat aprovada + subtitle: El vostre compte torna a estar correcte. title: Apel·lació aprovada appeal_rejected: explanation: L'apel·lació a l'acció contra el teu compte del %{strike_date} que has enviat el %{appeal_date} ha estat rebutjada. subject: La teva apel·lació del %{date} ha estat rebutjada + subtitle: S'ha rebutjat la vostra apel·lació. title: Apel·lació rebutjada backup_ready: - explanation: Has sol·licitat una copia completa del teu compte Mastodon. Ara ja està a punt per a descàrrega! + explanation: Heu demanat una còpia completa de les dades del vostre compte de Mastodon. + extra: Ja us ho podeu baixar subject: L'arxiu està preparat per a descàrrega title: Recollida de l'arxiu suspicious_sign_in: diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml index 9a974b9ed75606..7905024381f473 100644 --- a/config/locales/ckb.yml +++ b/config/locales/ckb.yml @@ -1015,7 +1015,6 @@ ckb: webauthn: کلیلەکانی پاراستن user_mailer: backup_ready: - explanation: ئێوە وشانێکی پاڵپشتی تەواوت لە هەژمارەکەی خۆت داوا کردووە، ئەم پاڵپشتییە ئێستا ئامادەی بارکردنە! subject: ئارشیڤی ئێوە ئامادەی داگرتنە title: وەرگرتنی ئارشیڤ warning: diff --git a/config/locales/co.yml b/config/locales/co.yml index e613ea76064eed..f5b6b46d920ab6 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -1034,7 +1034,6 @@ co: webauthn: Chjave di sicurità user_mailer: backup_ready: - explanation: Avete dumandatu un’archiviu cumpletu di u vostru contu Mastodon. Avà hè prontu per scaricà! subject: U vostru archiviu hè prontu à scaricà title: Archiviu prontu warning: diff --git a/config/locales/cs.yml b/config/locales/cs.yml index e3e804172abcde..eafbead761ddb0 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -1792,7 +1792,6 @@ cs: webauthn: Bezpečnostní klíče user_mailer: appeal_approved: - action: Přejít do vašeho účtu explanation: Odvolání proti prohřešku vašeho účtu ze dne %{strike_date}, které jste podali %{appeal_date}, bylo schváleno. Váš účet je opět v pořádku. subject: Vaše odvolání ze dne %{date} bylo schváleno title: Odvolání schváleno @@ -1801,7 +1800,6 @@ cs: subject: Vaše odvolání z %{date} bylo zamítnuto title: Odvolání zamítnuto backup_ready: - explanation: Vyžádali jste si úplnou zálohu svého účtu Mastodon. Nyní je připravena ke stažení! subject: Váš archiv je připraven ke stažení title: Stažení archivu suspicious_sign_in: diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 70b994903ec7fd..768dd3e0c8975e 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -21,7 +21,7 @@ cy: link_verified_on: Gwiriwyd perchnogaeth y ddolen yma ar %{date} nothing_here: Does dim byd yma! pin_errors: - following: Rhaid i chi fod yn dilyn y person yr ydych am ei gymeradwyo yn barod + following: Rhaid i chi fod yn dilyn yn barod y person rydych am ei gymeradwyo posts: few: Postiadau many: Postiadau @@ -74,7 +74,7 @@ cy: edit: Golygu email: E-bost email_status: Statws e-bost - enable: Dad rewi + enable: Dadrewi enable_sign_in_token_auth: Galluogi dilysu tocynnau e-bost enabled: Wedi ei alluogi enabled_msg: Wedi dadrewi cyfrif %{username} yn llwyddiannus @@ -85,7 +85,7 @@ cy: invite_request_text: Rhesymau dros ymuno invited_by: Gwahoddwyd gan ip: IP - joined: Ymunwyd + joined: Wedi ymuno location: all: Popeth local: Lleol @@ -1712,6 +1712,7 @@ cy: unknown_browser: Porwr Anhysbys weibo: Weibo current_session: Sesiwn gyfredol + date: Dyddiad description: "%{browser} ar %{platform}" explanation: Dyma'r porwyr gwe sydd wedi mewngofnodi i'ch cyfrif Mastodon ar hyn o bryd. ip: IP @@ -1902,16 +1903,19 @@ cy: webauthn: Allweddi diogelwch user_mailer: appeal_approved: - action: Ewch i'ch cyfrif + action: Gosodiadau Cyfrif explanation: Mae apêl y rhybudd yn erbyn eich cyfrif ar %{strike_date} a gyflwynwyd gennych ar %{appeal_date} wedi'i chymeradwyo. Mae eich cyfrif unwaith eto yn gadarnhaol. subject: Mae eich apêl gan %{date} wedi'i chymeradwyo + subtitle: Mae eich cyfrif unwaith eto mewn sefyllfa dda. title: Cymeradwywyd yr apêl appeal_rejected: explanation: Mae apêl y rhybudd yn erbyn eich cyfrif ar %{strike_date} a gyflwynwyd gennych ar %{appeal_date} wedi'i gwrthod. subject: Mae eich apêl ar %{date} wedi'i gwrthod + subtitle: Mae eich apêl wedi'i gwrthod title: Mae'r apêl wedi'i gwrthod backup_ready: - explanation: Fe wnaethoch chi gais am gopi wrth gefn llawn o'ch cyfrif Mastodon. Mae nawr yn barod i'w lawrlwytho! + explanation: Rydych wedi gofyn am gopi wrth gefn llawn o'ch cyfrif Mastodon. + extra: Mae nawr yn barod i'w lwytho i lawr! subject: Mae eich archif yn barod i'w lawrlwytho title: Allfudo archif suspicious_sign_in: diff --git a/config/locales/da.yml b/config/locales/da.yml index 3d6850ca5ea330..e09a6eb2f5b77d 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1608,6 +1608,7 @@ da: unknown_browser: Ukendt browser weibo: Weibo current_session: Aktuelle session + date: Dato description: "%{browser} på %{platform}" explanation: Disse webbrowsere er pt. logget ind på din Mastodon-konto. ip: IP @@ -1774,16 +1775,19 @@ da: webauthn: Sikkerhedsnøgler user_mailer: appeal_approved: - action: Gå til din konto + action: Kontoindstillinger explanation: Appellen af kontoadvarslen fra %{strike_date}, indsendt af dig pr. %{appeal_date}, er blevet godkendt. Din kontostatus er igen god. subject: Din appel pr. %{date} er godkendt + subtitle: Dit kontoomdømme er nu igen godt. title: Appel godkendt appeal_rejected: explanation: Appellen af kontoadvarslen fra %{strike_date}, indsendt af dig pr. %{appeal_date}, er blevet afvist. subject: Din appel pr. %{date} er afvist + subtitle: Din appel er afvist. title: Appel afvist backup_ready: - explanation: Den anmodede fulde sikkerhedskopi af din Mastodon-konto er nu klar til download! + explanation: Der er anmodet om en fuld sikkerhedskopi af din Mastodon-konto. + extra: Sikkerhedskopien kan nu downloades! subject: Dit arkiv er klar til download title: Arkiv download suspicious_sign_in: diff --git a/config/locales/de.yml b/config/locales/de.yml index 4542871d802de8..dc78b188e20da5 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1608,6 +1608,7 @@ de: unknown_browser: Unbekannter Browser weibo: Weibo current_session: Aktuelle Sitzung + date: Datum description: "%{browser} auf %{platform}" explanation: Dies sind die Webbrowser, die derzeit mit deinem Mastodon-Konto verbunden sind. ip: IP-Adresse @@ -1774,16 +1775,19 @@ de: webauthn: Sicherheitsschlüssel user_mailer: appeal_approved: - action: Dein Konto aufrufen - explanation: Der Einspruch gegen deinen Verstoß vom %{strike_date}, den du am %{appeal_date} eingereicht hast, wurde genehmigt. Dein Konto ist wieder in gutem Zustand. + action: Kontoeinstellungen + explanation: Der Einspruch gegen deinen Verstoß vom %{strike_date}, den du am %{appeal_date} eingereicht hast, wurde genehmigt. Dein Konto ist wieder in Ordnung. subject: Dein Einspruch vom %{date} wurde angenommen + subtitle: Dein Konto ist wieder in Ordnung. title: Einspruch angenommen appeal_rejected: explanation: Der Einspruch gegen deinen Verstoß vom %{strike_date}, den du am %{appeal_date} eingereicht hast, wurde abgelehnt. subject: Dein Einspruch vom %{date} wurde abgelehnt + subtitle: Dein Einspruch wurde abgelehnt. title: Einspruch abgelehnt backup_ready: - explanation: Du hast eine vollständige Sicherung deines Mastodon-Kontos angefordert. Die Sicherung kann jetzt heruntergeladen werden! + explanation: Du hast eine vollständige Datensicherung deines Mastodon-Kontos angefordert. + extra: Sie ist jetzt zum Herunterladen bereit! subject: Dein persönliches Archiv kann heruntergeladen werden title: Archiv-Download suspicious_sign_in: diff --git a/config/locales/devise.an.yml b/config/locales/devise.an.yml index f179f915dcfd4c..4be18845cc80b6 100644 --- a/config/locales/devise.an.yml +++ b/config/locales/devise.an.yml @@ -47,11 +47,9 @@ an: subject: 'Mastodon: Instruccions pa reiniciar clau' title: Reiniciar clau two_factor_disabled: - explanation: L'autenticación de dos factors pa la tuya cuenta ha estau deshabilitada. Agora puetz connectar-te nomás usando l'adreza de correu electronico y la clau. subject: 'Mastodon: L''autenticación de dos factors ye deshabilitada' title: 2FA desactivada two_factor_enabled: - explanation: L'autenticación de dos factors pa la tuya cuenta ha estau habilitada. Se requiere un token chenerau per l'aplicación TOTP emparellada pa ingresar. subject: 'Mastodon: L''autenticación de dos factors ye habilitada' title: 2FA activada two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ an: subject: 'Mastodon: Clau de seguranza eliminada' title: Una d'as tuyas claus de seguranza ha estau eliminada webauthn_disabled: - explanation: L'autenticación con claus de seguranza ha estau deshabilitada pa la tuya cuenta. Agora l'inicio de sesión nomás ye posible utilizando lo token chenerau per l'aplicación TOTP emparellada. subject: 'Mastodon: Autenticación con claus de seguranza deshabilitada' title: Claus de seguranza deshabilitadas webauthn_enabled: - explanation: L'autenticación con clau de seguranza ha estau habilitada pa la tuya cuenta. Agora la tuya clau de seguranza puede estar utilizada pa iniciar sesión. subject: 'Mastodon: Autenticación de clau de seguranza habilitada' title: Claus de seguranza habilitadas omniauth_callbacks: diff --git a/config/locales/devise.ar.yml b/config/locales/devise.ar.yml index 97d1710edf8f48..28e721e6672c43 100644 --- a/config/locales/devise.ar.yml +++ b/config/locales/devise.ar.yml @@ -47,11 +47,9 @@ ar: subject: 'ماستدون: تعليمات استعادة كلمة المرور' title: إعادة تعيين كلمة السر two_factor_disabled: - explanation: تم تعطيل المصادقة بخطوتين لحسابك الخاص. إنّ الولوج ممكن الآن باستخدام عنوان البريد الإلكتروني وكلمة المرور فقط. subject: 'ماستدون: نظام المصادقة بخطوتين مُعطّل' title: إنّ 2FA معطّل two_factor_enabled: - explanation: تم تفعيل المصادقة بخطوتين على حسابك. سيُطلب منك رمز تم توليده بواسطة تطبيق TOTP المقترن للولوج. subject: 'ماستدون: تم تفعيل نظام المصادقة بخطوتين' title: إنّ 2FA نشِط two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ ar: subject: 'ماستدون: تم حذف مفتاح الأمان' title: تم حذف أحد مفاتيح الأمان الخاصة بك webauthn_disabled: - explanation: تم تعطيل الاستيثاق مع مفاتيح الأمان لحسابك. تسجيل الدخول الآن ممكن باستخدام الرمز (token) الذي تم إنشاؤه بواسطة تطبيق TOTP المقترن. subject: 'ماستدون: الاستيثاق مع مفاتيح الأمان معطلة' title: مفاتيح الأمان معطلة webauthn_enabled: - explanation: تم تفعيل استيثاق مفتاح الأمان للحساب الخاص بك. يمكن الآن استخدام مفتاح الأمان الخاص بك لتسجيل الدخول. subject: 'ماستدون: تم تفعيل نظام استيثاق مفتاح الأمان' title: مفاتيح الأمان مفعلة omniauth_callbacks: diff --git a/config/locales/devise.ast.yml b/config/locales/devise.ast.yml index a4378dee92bed7..47372c2f07a68d 100644 --- a/config/locales/devise.ast.yml +++ b/config/locales/devise.ast.yml @@ -42,11 +42,9 @@ ast: subject: 'Mastodon: instrucciones pa camudar la contraseña' title: Cambéu de la contaseña two_factor_disabled: - explanation: Desactivóse l'autenticación en dos pasos na cuenta. Agora ye posible aniciar la sesión cola direición de corréu electrónicu ya la contraseña. subject: 'Mastodon: desactivóse l''autenticación en dos pasos' title: Autenticación de dos pasos activada two_factor_enabled: - explanation: Activóse l'autenticación en dos pasos na cuenta. Agora los pases que xenere l'aplicación TOTP empareyada son obligatorios p'aniciar la sesión. subject: 'Mastodon: activóse l''autenticación en dos pasos' title: Autenticación de dos pasos desactivada two_factor_recovery_codes_changed: @@ -62,11 +60,9 @@ ast: deleted: title: Desanicióse una de les to llaves de seguranza webauthn_disabled: - explanation: Desactivóse l'autenticación con llaves de seguranza na cuenta. Agora namás ye posible aniciar la sesión col pase xeneráu pola aplicación TOTP empareyada. subject: 'Mastodon: desactivóse l''autenticación con llaves de seguranza' title: Llaves de seguranza desactivaes webauthn_enabled: - explanation: Activóse l'autenticación con llaves de seguranza na cuenta. Agora pues usar la llave p'aniciar la sesión. subject: 'Mastodon: activóse l''autenticación con llaves de seguranza' title: Llaves de seguranza activaes passwords: diff --git a/config/locales/devise.be.yml b/config/locales/devise.be.yml index e5e8aea91ed7e0..8679275c208d96 100644 --- a/config/locales/devise.be.yml +++ b/config/locales/devise.be.yml @@ -47,11 +47,9 @@ be: subject: 'Mastodon: Інструкцыі па скіданню пароля' title: Скіданне пароля two_factor_disabled: - explanation: Двухфактарная аўтэнтыфікацыя на вашым акаўнце была адключана. Цяпер для ўваходу патрэбны толькі электронная пошта і пароль. subject: 'Mastodon: двухфактарная аўтэнтыфікацыя адключана' title: двухэтапнае спраўджанне адключана two_factor_enabled: - explanation: Двухфактарная аўтэнтыфікацыя на вашым акаўнце была ўключана. Цяпер для ўваходу ў сістэму патрэбны токен, згенераваны даданай TOTP праграмай. subject: 'Mastodon: двухфактарная аўтэнтыфікацыя ўключана' title: двухэтапнае спраўджанне уключана two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ be: subject: 'Mastodon: ключ бяспекі выдалены' title: Адзін з вашых ключоў бяспекі быў выдалены webauthn_disabled: - explanation: Аўтэнтыфікацыя з дапамогай ключоў бяспекі была адключана для вашага ўліковага запісу. Уваход цяпер магчымы толькі з токенам, згенераваным спалучаным TOTP прыкладаннем. subject: 'Mastodon: Аўтэнтыфікацыя з дапамогай ключоў бяспекі адключана' title: Ключы бяспекі адключаны webauthn_enabled: - explanation: Аўтэнтыфікацыя праз ключ бяспекі была ўключана для вашага ўліковага запісу. Цяпер вы можаце выкарыстоўваць ваш ключ бяспекі для ўваходу. subject: 'Mastodon: Аўтэнтыфікацыя праз ключ бяспекі была ўключана' title: Ключы бяспекі ўключаны omniauth_callbacks: diff --git a/config/locales/devise.bg.yml b/config/locales/devise.bg.yml index 5046771340e509..f3586bcd859825 100644 --- a/config/locales/devise.bg.yml +++ b/config/locales/devise.bg.yml @@ -18,7 +18,7 @@ bg: unconfirmed: Преди да продължите, трябва да потвърдите адреса на имейла си. mailer: confirmation_instructions: - action: Потвърдете адреса на имейла + action: Потвърждаване на адреса на имейла action_with_app: Потвърдете и се върнете към %{app} explanation: Създали сте акаунт на %{host} с този имейл адрес. Само на едно щракване разстояние сте от активирането му. Ако това не сте били вие, моля, игнорирайте този имейл. explanation_when_pending: Кандидатствахте за покана до %{host} с този имейл адрес. След като потвърдите своя имейл адрес, ние ще разгледаме вашето заявление. Можете да влезете, за да промените данните си или да изтриете акаунта си, но нямате достъп до повечето функции, докато акаунтът ви не бъде одобрен. Ако вашето заявление бъде отхвърлено, вашите данни ще бъдат премахнати, така че няма да се изискват допълнителни действия от вас. Ако това не сте били вие, моля, игнорирайте този имейл. @@ -39,7 +39,7 @@ bg: explanation: Потвърдете новия адрес, за да промените имейла си. extra: Ако тази промяна не е започната от вас, то пренебрегнете този имейл. Адресът на имейла за акаунта в Mastodon няма да се промени, докато не влезете в горната връзка. subject: 'Mastodon: Потвърдете имейла за %{instance}' - title: Потвърдете своя имейл адрес + title: Потвърждаване на адреса на имейла reset_password_instructions: action: Промяна на паролата explanation: Поискахте нова парола за акаунта си. @@ -47,16 +47,19 @@ bg: subject: 'Mastodon: Указания за задаване на нова парола' title: Нулиране на парола two_factor_disabled: - explanation: Двуфакторното удостоверяване за вашия акаунт е деактивирано. Влизането вече е възможно, като се използват само имейл адрес и парола. + explanation: Влизането вече е възможно, употребявайки само адрес на имейла и парола. subject: 'Mastodon: Двуфакторното удостоверяване е деактивирано' + subtitle: Двуфакторното удостоверяване за акаунта ви е изключено. title: Двуфакторното изключено two_factor_enabled: - explanation: За акаунта ви е включено двуфакторно удостоверяване. Отсега нататък ще ви трябва и временен код от сдвоеното приложение за удостоверяване TOTP, за да влезете. + explanation: Породени токени от сдвоено приложение TOTP ще се изискват за вход. subject: 'Mastodon: Включено двуфакторно удостоверяване' + subtitle: Двуфакторното удостоверяване е включено за акаунта ви. title: 2FA активирано two_factor_recovery_codes_changed: explanation: Предишните кодове за възстановяване са анулирани и се пораждат нови. subject: 'Mastodon: Породени пак са двуфакторни кодове за възстановяване' + subtitle: Предишните кодове за възстановяване са обезсилени и се пораждат нови. title: Кодове за 2 факт. удост. за възстановяване са променени unlock_instructions: subject: 'Mastodon: указания за отключване' @@ -70,11 +73,13 @@ bg: subject: 'Mastodon: Ключът за сигурност е изтрит' title: Един от ключовете ви за сигурност е изтрит webauthn_disabled: - explanation: Удостоверяването с ключове за сигурност е изключено за акаунта ви. Влизането вече е възможно, използвайки само ключа, породен от сдвоеното приложение TOTP. + explanation: Удостоверяването на ключовете за сигурност е изключено за акаунта ви. + extra: Влизането вече е възможно, употребявайки само породени токени от сдвоено приложение TOTP. subject: 'Mastodon: Изключено удостоверяване с ключове за сигурност' title: Изключени ключове за сигурност webauthn_enabled: - explanation: Удостоверяването с ключ за сигурност е активирано за вашия акаунт. Вашият ключ за сигурност вече може да се използва за вход. + explanation: Удостоверяването на ключа за сигурност е включено за акаунта ви. + extra: Вашият ключ за сигурност вече може да се употребява за вход. subject: 'Mastodon: Включено удостоверяване с ключ за сигурност' title: Включени ключове за сигурност omniauth_callbacks: @@ -82,8 +87,8 @@ bg: success: Успешно упълномощаване от акаунт на %{kind}. passwords: no_token: Не можете да осъществите достъп до тази страница, ако не сте я отворили чрез линк от получен имейл за възстановяване на паролата. Ако сте отворили линка за възстановяване на паролата от имейл, моля, уверете се, че сте използвали целия предоставен URL адрес. - send_instructions: Ако адресът на имейла ви съществува в базата ни данни, то ще получите връзка за възстановяване на парола на е-пощата си до няколко минути. Проверете си папката за спам, ако не сте получили това е-писмо. - send_paranoid_instructions: Ако адресът на имейла ви съществува в базата ни данни, то ще получите връзка за възстановяване на парола на е-пощата си до няколко минути. Проверете си папката за спам, ако не сте получили това е-писмо. + send_instructions: Ако адресът на имейла ви съществува в базата ни данни, то ще получите връзка за възстановяване на парола на имейла си до няколко минути. Проверете папката си за спам, ако не сте получили това е-писмо. + send_paranoid_instructions: Ако адресът на имейла ви съществува в базата ни данни, то ще получите връзка за възстановяване на парола на имейла си до няколко минути. Проверете папката си за спам, ако не сте получили това е-писмо. updated: Паролата ви беше променена успешно. Сега сте влезли. updated_not_active: Паролата ви беше променена успешно. registrations: @@ -101,7 +106,7 @@ bg: signed_out: Успешно излизане. unlocks: send_instructions: Ще получите имейл с указания как да отключите акаунта си до няколко минути. Проверете папката си за спам, ако не сте получили такъв имейл. - send_paranoid_instructions: Ако вашият акаунт съществува, ще получите имейл с указания за отключването му до няколко минути. Проверете спам папката си, ако не сте получили такъв имейл. + send_paranoid_instructions: Ако акаунта ви съществува, то ще получите е-писмо с указания за отключването му до няколко минути. Проверете папката си за спам, ако не сте получили това е-писмо. unlocked: Акаунтът ви е успешно отключен. Влезте, за да продължите. errors: messages: diff --git a/config/locales/devise.bn.yml b/config/locales/devise.bn.yml index e0d83613e8aacf..b046289039db17 100644 --- a/config/locales/devise.bn.yml +++ b/config/locales/devise.bn.yml @@ -47,11 +47,9 @@ bn: subject: 'মাস্টাডন: পাসওয়ার্ড বদলানোর নির্দেশনা' title: পাসওয়ার্ড বদলানো two_factor_disabled: - explanation: আপনার অ্যাকাউন্টের জন্য দ্বি-ফ্যাক্টর প্রমাণীকরণ অক্ষম করা হয়েছে। লগইন এখন কেবলমাত্র ইমেল ঠিকানা এবং পাসওয়ার্ড ব্যবহার করে সম্ভব। subject: 'মস্তোডন: দ্বি-গুণক প্রমাণীকরণ অক্ষম' title: 2FA অক্ষম two_factor_enabled: - explanation: আপনার অ্যাকাউন্টের জন্য দ্বি-ফ্যাক্টর প্রমাণীকরণ সক্ষম করা হয়েছে। জোড়যুক্ত TOTP অ্যাপ্লিকেশন দ্বারা উত্পাদিত একটি টোকেন লগইনের জন্য প্রয়োজন হবে। subject: 'মস্তোডন: দ্বি-গুণক প্রমাণীকরণ সক্ষম হয়েছে' title: 2FA সক্ষম two_factor_recovery_codes_changed: diff --git a/config/locales/devise.br.yml b/config/locales/devise.br.yml index 4a16157f81958c..205e11e797c584 100644 --- a/config/locales/devise.br.yml +++ b/config/locales/devise.br.yml @@ -47,11 +47,9 @@ br: subject: 'Mastodon: Adkorañ kemennoù ar ger-tremen' title: Adderaouekaat ar ger-tremen two_factor_disabled: - explanation: Dilesadur dre eil-elfenn a zo bet nac'het. Gallout a reer mont-tre en ur implijout nemet ur chomlec'h-postel hag ur ger-tremen. subject: 'Mastodon: dilesadur dre eil-elfenn nac''het' title: 2FA diweredekaet two_factor_enabled: - explanation: Dilesadur dre eil-elfenn a zo aotreet evit ho kont. Ret a vo implij ur jedouer krouet gant an app TOTP koublet evit mont-tre. subject: 'Mastodon: dilesadur dre eil-elfenn aotreet' title: 2FA gweredekaet two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ br: subject: 'Mastodon: alc''hwezioù surentez dilamet' title: Unan eus hoc'h alc'hwezioù surentez a zo bet dilamet webauthn_disabled: - explanation: Dilezadur dre alc'hwezioù surentel a zo bet nac'het evit ho kont. Gallout a reer mont-tre en ur implijout ar jedouer krouet gant app TOTP koublet. subject: 'Mastodon: dilesadur dre alc''hwezioù surentez nac''het' title: Alc'hwezioù surentez nac'het webauthn_enabled: - explanation: Dilesadur dre alc'hwez surentez a zo bet aotreet evit ho kont. Hoc'h alc'hwez surentez a c'hell bezañ implijet evit mont-tre. subject: 'Mastodon: dilesadur dre alc''hwezioù surentez aotreet' title: Alc'hwezioù surentez aotreet omniauth_callbacks: diff --git a/config/locales/devise.ca.yml b/config/locales/devise.ca.yml index 6ebdafb9ec07bd..2bf741ee4089ac 100644 --- a/config/locales/devise.ca.yml +++ b/config/locales/devise.ca.yml @@ -49,16 +49,19 @@ ca: subject: 'Mastodon: Instruccions per a reiniciar contrasenya' title: Contrasenya restablerta two_factor_disabled: - explanation: L'autenticació de doble factor per al teu compte s'ha desactivat. Ara només pots iniciar la sessió fent servir la teva adreça de correu-e i la contrasenya. + explanation: Només es pot accedir amb compte de correu i contrasenya. subject: 'Mastodon: Autenticació de doble factor desactivada' + subtitle: S'ha deshabilitat l'autenticació de doble factor al vostre compte. title: A2F desactivada two_factor_enabled: - explanation: L'autenticació de doble factor s'ha habilitat per al teu compte. Per a iniciar la sessió es requerirà un token generat per l'aplicació TOTP que hi hagis emparellat. + explanation: Per accedir fa falta un token generat per l'aplicació TOTP aparellada. subject: 'Mastodon: Autenticació de doble factor activada' + subtitle: S'ha habilitat l'autenticació de doble factor al vostre compte. title: A2F activada two_factor_recovery_codes_changed: explanation: Els codis de recuperació anteriors ja no són vàlids i se n'han generat de nous. subject: 'Mastodon: codis de recuperació de doble factor regenerats' + subtitle: S'han invalidat els codis de recuperació anteriors i se n'ha generat de nous. title: Codis de recuperació A2F canviats unlock_instructions: subject: 'Mastodon: Instruccions per a desblocar' @@ -72,11 +75,13 @@ ca: subject: 'Mastodon: Clau de seguretat esborrada' title: Una de les teves claus de seguretat ha estat esborrada webauthn_disabled: - explanation: S'ha desactivat l'autenticació amb claus de seguretat per al teu compte. Ara només pots iniciar la sessió usant el token generat per l'aplicació TOTP. + explanation: S'ha deshabilitat l'autenticació amb claus de seguretat al vostre compte. + extra: Ara només podeu accedir amb el token generat amb l'aplicació TOTP aparellada. subject: 'Mastodon: S''ha desactivat l''autenticació amb claus de seguretat' title: Claus de seguretat desactivades webauthn_enabled: - explanation: S'ha activat l'autenticació amb claus de seguretat. Ja pots usar la teva clau de seguretat per a iniciar sessió. + explanation: S'ha habilitat l'accés amb clau de seguretat al vostre compte. + extra: Ara podeu accedir amb la vostra clau de seguretat. subject: 'Mastodon: Autenticació amb clau de seguretat activada' title: Claus de seguretat activades omniauth_callbacks: diff --git a/config/locales/devise.ckb.yml b/config/locales/devise.ckb.yml index 1261ebb648d2fa..f33959d76cbdc0 100644 --- a/config/locales/devise.ckb.yml +++ b/config/locales/devise.ckb.yml @@ -47,11 +47,9 @@ ckb: subject: 'ماستۆدۆن: رێکردنەوەی رێنماییەکانی تێپەڕوشە' title: گەڕانەوەی تێپەڕوشە two_factor_disabled: - explanation: سەلماندنی دوو-فاکتەر بۆ هەژمارەکەت کە لە کارخراوە. چوونەژوورەوە ئێستا دەکرێت تەنها ناونیشانی ئیمەیڵ و تێپەڕوشەکەت بەکاربهێنی. subject: 'ماستۆدۆن: سەلماندنی دوو-فاکتەری ناچالاک کراوە' title: 2FA ناچالاک کرا two_factor_enabled: - explanation: سەلماندنی دوو-فاکتەر بۆ هەژمارەکەت چالاک کراوە. ئاماژەیەک کە لەلایەن نەرمەکالایTOTP جووتکراو دروست کراوە پێویستە بە چوونە ژوورەوە. subject: 'ماستۆدۆن: سەلماندنی دوو-فاکتەری چالاک کراوە' title: 2FA چالاک کرا two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ ckb: subject: 'ماستۆدۆن: کلیلی پاراستن سڕایەوە' title: کلیلە کانی پاراستنی یەکێک لە ئێوە سڕایەوە webauthn_disabled: - explanation: سەلماندن بە کلیلەپارێزراوەکان لە کارخراوە بۆ هەژمارەکەت. چوونەژوورەوە ئێستا دەکرێت تەنها ئەو نیشانەیە بەکاربێنیت کە لەلایەن نەرمەکالایTOTP دروست کراوە. subject: 'ماستۆدۆن: سەلماندن لەگەڵ کلیلە پاسایشی ناچالاک کراوە' title: کلیلە پارستنەکان ناچالاک کراون webauthn_enabled: - explanation: سەلماندنی کلیلی ئاسایش چالاک کراوە بۆ هەژمارەکەت. ئێستا کلیلی پاراستن دەتوانرێت بۆ چوونە ژوورەوە بەکار بێت. subject: 'ماستۆدۆن: سەلماندنی کلیلی پاراستن چالاک کراوە' title: کلیلە کانی پاراستن چالاک کرا omniauth_callbacks: diff --git a/config/locales/devise.co.yml b/config/locales/devise.co.yml index 8409cfad9b2b82..d66163787502c5 100644 --- a/config/locales/devise.co.yml +++ b/config/locales/devise.co.yml @@ -47,11 +47,9 @@ co: subject: 'Mastodon: Cambià a chjave d’accessu' title: Cambià a chjave two_factor_disabled: - explanation: L'autentificazione à dui fattori per u vostru contu hè stata disattivata. A cunnessione hè avà pussibule cù l'usu solu di u vostru e-mail è di a chjave d'accessu. subject: 'Mastodon: Autentificazione à dui fattori disattivata' title: A2F disattivata two_factor_enabled: - explanation: L'autentificazione à dui fattori hè stata attivata per u vostru contu. Un codice, o fiscia, generata da l'applicazione TOTP assuciata sarà dumandata per cunnettavvi. subject: 'Mastodon: Autentificazione à dui fattori attivata' title: A2F attivata two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ co: subject: 'Mastodon: Chjave di sicurità sguassata' title: Una di e vostre chjave di sicurità hè stata sguassata webauthn_disabled: - explanation: L'autentificazione cù una chjave di sicurità hè stata disattivata per u vostru contu. Avà pudete solu cunnettavi cù u codice di cunnessione generatu da l'applicazione TOTP appaghjata. subject: 'Mastodon: Autentificazione cù chjave di sicurità disattivata' title: Chjave di sicurità disattivate webauthn_enabled: - explanation: L'autentificazione cù una chjave di sicurità hè stata attivata per u vostru contu. Avà a vostra chjave pò esse utilizata per cunnettavi. subject: 'Mastodon: Identificazione cù chjave di sicurità attivata' title: Chjave di sicurità attivate omniauth_callbacks: diff --git a/config/locales/devise.cs.yml b/config/locales/devise.cs.yml index 32a1ed2c6733e3..fb3893325c26f1 100644 --- a/config/locales/devise.cs.yml +++ b/config/locales/devise.cs.yml @@ -47,11 +47,9 @@ cs: subject: 'Mastodon: Instrukce pro obnovení hesla' title: Obnovení hesla two_factor_disabled: - explanation: Dvoufázové ověřování bylo pro váš účet vypnuto. Pro přihlášení vám nyní stačí pouze e-mailová adresa a heslo. subject: 'Mastodon: Dvoufázové ověření bylo vypnuto' title: 2FA bylo vypnuto two_factor_enabled: - explanation: Dvoufázové ověřování bylo pro váš účet zapnuto. Pro přihlášení bude vyžadován token vygenerovaný spárovanou TOTP aplikací. subject: 'Mastodon: Dvoufázové ověření bylo zapnuto' title: 2FA bylo zapnuto two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ cs: subject: 'Mastodon: Bezpečnostní klíč byl smazán' title: Jeden z vašich bezpečnostních klíčů byl smazán webauthn_disabled: - explanation: Pro váš účet bylo vypnuto ověření bezpečnostními klíči. Přihlášení je nyní možné pouze s tokenem vygenerovaným spárovanou TOTP aplikací. subject: 'Mastodon: Přihlašování bezpečnostními klíči bylo vypnuto' title: Bezpečnostní klíče byly zakázány webauthn_enabled: - explanation: Pro váš účet bylo povoleno ověření bezpečnostními klíči. Nyní můžete svůj bezpečnostní klíč použít pro přihlášení. subject: 'Mastodon: Přihlašování bezpečnostními klíči bylo povoleno' title: Bezpečnostní klíče byly povoleny omniauth_callbacks: diff --git a/config/locales/devise.cy.yml b/config/locales/devise.cy.yml index 44c09153ff5269..d3eeb8eeb60e2d 100644 --- a/config/locales/devise.cy.yml +++ b/config/locales/devise.cy.yml @@ -47,16 +47,19 @@ cy: subject: 'Mastodon: Ailosod cyfarwyddiadau cyfrinair' title: Ailosod cyfrinair two_factor_disabled: - explanation: Mae dilysiad dau ffactor ar gyfer eich cyfrif wedi'i analluogi. Mae modd mewngofnodi nawr gan ddefnyddio cyfeiriad e-bost a chyfrinair yn unig. + explanation: Mae modd mewngofnodi nawr gan ddefnyddio dim ond cyfeiriad e-bost a chyfrinair. subject: 'Mastodon: mae dilysu dau ffactor wedi''i alluogi' + subtitle: Mae dilysiad dau ffactor ar gyfer eich cyfrif wedi'i analluogi. title: Dilysu dau ffactor yn anabl two_factor_enabled: - explanation: Mae dilysu dau ffactor wedi'i alluogi ar gyfer eich cyfrif. Bydd angen tocyn a gynhyrchir gan yr ap TOTP pâr i fewngofnodi. + explanation: Bydd angen tocyn wedi'i gynhyrchu gan yr ap TOTP pâr i fewngofnodi. subject: 'Mastodon: mae dilysu dau ffactor wedi''i alluogi' + subtitle: Mae dilysiad dau ffactor wedi'i alluogi ar gyfer eich cyfrif. title: Mae dilysu dau ffactor wedi'i alluogi two_factor_recovery_codes_changed: explanation: Mae'r codau adfer blaenorol wedi'u hannilysu a chynhyrchwyd rhai newydd. subject: 'Mastodon: Mae codau adfer dau ffactor wedi''u hadfywio' + subtitle: Mae'r codau adfer blaenorol wedi'u hannilysu a rhai newydd wedi'u cynhyrchu. title: Newidiodd codau adfer 2FA unlock_instructions: subject: 'Mastodon: Cyfarwyddiadau datgloi' @@ -70,11 +73,13 @@ cy: subject: 'Mastodon: Allwedd ddiogelwch wedi''i dileu' title: Mae un o'ch allweddi diogelwch wedi'i ddileu webauthn_disabled: - explanation: Mae dilysu gydag allweddi diogelwch wedi'i analluogi ar gyfer eich cyfrif. Mae mewngofnodi bellach yn bosibl gan ddefnyddio'r tocyn a gynhyrchir gan yr ap TOTP pâr yn unig. + explanation: Mae dilysu gydag allweddi diogelwch wedi'i analluogi ar gyfer eich cyfrif. + extra: Mae mewngofnodi bellach yn bosibl gan ddefnyddio'r tocyn wedi'i gynhyrchu gan yr ap TOTP pâr yn unig. subject: 'Mastodon: Dilysiad gydag allweddi diogelwch wedi''i analluogi' title: Allweddi diogelwch wedi'u hanalluogi webauthn_enabled: - explanation: Mae dilysiad allwedd diogelwch wedi'i alluogi ar gyfer eich cyfrif. Gellir defnyddio'ch allwedd ddiogelwch nawr ar gyfer mewngofnodi. + explanation: Mae dilysiad allwedd diogelwch wedi'i alluogi ar gyfer eich cyfrif. + extra: Mae modd defnyddio'ch allwedd ddiogelwch nawr i fewngofnodi. subject: 'Mastodon: Dilysiad allwedd diogelwch wedi''i alluogi' title: Allweddi diogelwch wedi'u galluogi omniauth_callbacks: diff --git a/config/locales/devise.da.yml b/config/locales/devise.da.yml index 17593be3fdd5ac..daf802cdb734de 100644 --- a/config/locales/devise.da.yml +++ b/config/locales/devise.da.yml @@ -47,16 +47,19 @@ da: subject: 'Mastodon: Instruktioner til adgangskodenulstilling' title: Adgangskodenulstilling two_factor_disabled: - explanation: Tofaktorgodkendelse for kontoen er blevet deaktiveret. Indlogning er nu kun mulig via email og adgangskode. + explanation: Indlogning er nu mulig via kun e-mailadresse og adgangskode. subject: 'Mastodon: Tofaktorgodkendelse deaktiveret' + subtitle: Tofaktorgodkendelse for kontoen er blevet deaktiveret. title: 2FA deaktiveret two_factor_enabled: - explanation: Tofaktorgodkendelse er blevet aktiveret for kontoen. Indlogning vil kærve et token genereret af den parrede TOTP-app. + explanation: Token genereret af parret TOTP-app vil være nødvendig for indlogning. subject: 'Mastodon: Tofaktorgodkendelse aktiveret' + subtitle: Tofaktorgodkendelse er blevet aktiveret for kontoen. title: 2FA aktiveret two_factor_recovery_codes_changed: explanation: De tidligere gendannelseskoder er ugyldiggjorte og nye er genereret. subject: 'Mastodan: Tofaktorgendannelseskoder genereret igen' + subtitle: Tidligere gendannelseskoder er ugyldiggjorte og nye er genereret. title: 2FA gendannelseskoder skiftet unlock_instructions: subject: 'Mastodon: Oplåsningsinstruktioner' @@ -70,11 +73,13 @@ da: subject: 'Mastodon: Sikkerhedsnøgle slettet' title: En af dine sikkerhedsnøgler er blevet slettet webauthn_disabled: - explanation: Godkendelse med sikkerhedsnøgler er blevet deaktiveret for kontoen. Indlogning er nu kun mulig via token genereret af den parrede TOTP-app. + explanation: Godkendelse med sikkerhedsnøgler er blevet deaktiveret for kontoen. + extra: Indlogning er nu mulig kun via tokenet genereret af parret TOTP-app. subject: 'Mastodon: Godkendelse med sikkerhedsnøgler deaktiveret' title: Sikkerhedsnøgler deaktiveret webauthn_enabled: - explanation: Sikkerhedsnøglegodkendelse er aktiveret for kontoen. Din sikkerhedsnøgle kan nu bruges til indlogning. + explanation: Sikkerhedsnøglegodkendelse er blevet aktiveret for kontoen. + extra: Sikkerhedsnøglen kan nu bruges til indlogning. subject: 'Mastodon: Sikkerhedsnøglegodkendelse aktiveret' title: Sikkerhedsnøgler aktiveret omniauth_callbacks: diff --git a/config/locales/devise.de.yml b/config/locales/devise.de.yml index a77240dabe1a8e..cf05ddc16b1994 100644 --- a/config/locales/devise.de.yml +++ b/config/locales/devise.de.yml @@ -47,16 +47,19 @@ de: subject: 'Mastodon: Anleitung zum Zurücksetzen deines Passworts' title: Passwort zurücksetzen two_factor_disabled: - explanation: Zwei-Faktor-Authentisierung (2FA) für dein Konto wurde deaktiviert. Eine Anmeldung ist jetzt nur noch mit E-Mail-Adresse und Passwort möglich. + explanation: Das Anmelden ist jetzt nur noch mit einer E-Mail-Adresse und einem Passwort möglich. subject: 'Mastodon: Zwei‐Faktor‐Authentisierung (2FA) deaktiviert' + subtitle: Zwei-Faktor-Authentisierung wurde für dein Konto deaktiviert. title: 2FA deaktiviert two_factor_enabled: - explanation: Die Zwei-Faktor-Authentisierung (2FA) wurde für dein Konto aktiviert. Das zeitbasierte Einmalpasswort, das von deiner TOTP-App generiert wird, muss bei jeder Anmeldung zusätzlich eingegeben werden. + explanation: Für das Anmelden wird ein Token benötigt, das von der hinterlegten TOTP-App generiert wird. subject: 'Mastodon: Zwei‐Faktor‐Authentisierung (2FA) aktiviert' + subtitle: Zwei-Faktor-Authentisierung wurde für dein Konto aktiviert. title: 2FA aktiviert two_factor_recovery_codes_changed: explanation: Die vorherigen Wiederherstellungscodes wurden ungültig gemacht und es wurden neue erstellt. subject: 'Mastodon: Zwei-Faktor-Wiederherstellungscodes neu erstellt' + subtitle: Die vorherigen Wiederherstellungscodes wurden ungültig gemacht und es wurden neue erstellt. title: 2FA-Wiederherstellungscodes geändert unlock_instructions: subject: 'Mastodon: Anleitung zum Entsperren deines Kontos' @@ -70,11 +73,13 @@ de: subject: 'Mastodon: Sicherheitsschlüssel entfernt' title: Einer deiner Sicherheitsschlüssel wurde entfernt webauthn_disabled: - explanation: Das Authentisieren mit Sicherheitsschlüsseln wurde für dein Konto deaktiviert. Die Anmeldung ist jetzt nur noch mit dem zeitbasierten Einmalpasswort möglich, das von deiner TOTP-App generiert wird. + explanation: Die Authentisierung mit Sicherheitsschlüsseln wurde für dein Konto deaktiviert. + extra: Das Anmelden ist jetzt nur noch mit Token aus der TOTP-App möglich, die im Konto hinterlegt wurde. subject: 'Mastodon: Authentisierung mit Sicherheitsschlüsseln deaktiviert' title: Sicherheitsschlüssel deaktiviert webauthn_enabled: - explanation: Die Authentisierung mit Sicherheitsschlüssel wurde für dein Konto aktiviert. Dein Sicherheitsschlüssel kann nun für die Anmeldung verwendet werden. + explanation: Die Authentisierung mit Sicherheitsschlüsseln wurde für dein Konto aktiviert. + extra: Dein Sicherheitsschlüssel kann jetzt zum Anmelden verwendet werden. subject: 'Mastodon: Authentisierung mit Sicherheitsschlüssel aktiviert' title: Sicherheitsschlüssel aktiviert omniauth_callbacks: diff --git a/config/locales/devise.el.yml b/config/locales/devise.el.yml index 13daa4b97a7fc3..52674dc8493994 100644 --- a/config/locales/devise.el.yml +++ b/config/locales/devise.el.yml @@ -47,16 +47,19 @@ el: subject: 'Mastodon: Οδηγίες επαναφοράς συνθηματικού' title: Επαναφορά συνθηματικού two_factor_disabled: - explanation: Η επαλήθευση 2 βημάτων (2FA) έχει απενεργοποιηθεί για το λογαριασμό σου. Η σύνδεση γίνεται απλά με το email και το συνθηματικό. + explanation: Η σύνδεση είναι τώρα δυνατή χρησιμοποιώντας μόνο τη διεύθυνση ηλεκτρονικού ταχυδρομείου και τον κωδικό πρόσβασης. subject: 'Mastodon: Απενεργοποιήθηκε η επαλήθευση 2 βημάτων (2FA)' + subtitle: Ο έλεγχος ταυτότητας δύο παραγόντων για τον λογαριασμό σας έχει απενεργοποιηθεί. title: Επαλήθευση 2 βημάτων ανενεργή (2FA) two_factor_enabled: - explanation: Έχει ενεργοποιηθεί η πιστοποίηση 2 παραγόντων για το λογαριασμό σου (2FA). Για να συνδεθείς θα απαιτηθεί πιστοποιημένο τεκμήριο από κάποια ζευγαρωμένη εφαρμογή. + explanation: Ένα διακριτικό που δημιουργείται από τη συνδεδεμένη εφαρμογή TOTP θα απαιτείται για τη σύνδεση. subject: 'Mastodon: Ενεργοποιήθηκε η επαλήθευση 2 βημάτων (2FA)' + subtitle: Ο έλεγχος ταυτότητας δύο παραγόντων έχει ενεργοποιηθεί για τον λογαριασμό σας. title: Επαλήθευση 2 βημάτων ενεργή (2FA) two_factor_recovery_codes_changed: explanation: Οι προηγούμενοι κωδικοί ανάκτησης ακυρώθηκαν και δημιουργήθηκαν νέοι. subject: 'Mastodon: Δημιουργήθηκαν νέοι κωδικοί ανάκτησης' + subtitle: Οι προηγούμενοι κωδικοί ανάκτησης ακυρώθηκαν και δημιουργήθηκαν νέοι. title: Οι κωδικοί ανάκτησης επαλήθευσης 2 βημάτων (2FA) άλλαξαν unlock_instructions: subject: 'Mastodon: Οδηγίες ξεκλειδώματος' @@ -70,11 +73,13 @@ el: subject: 'Mastodon: Διαγράφηκε ένα κλειδί ασφαλείας' title: Ένα από τα κλειδιά ασφαλείας σου διαγράφηκε webauthn_disabled: - explanation: Η επαλήθευση με κλειδί ασφαλείας έχει απενεργοποιηθεί για τον λογαριασμό σας. Η σύνδεση είναι τώρα εφικτή μόνο με τη χρήση κλειδιού που δημιουργημένου με την συνδεδεμένη εφαρμογή TOTP. + explanation: Ο έλεγχος ταυτότητας με κλειδιά ασφαλείας έχει απενεργοποιηθεί για τον λογαριασμό σας. + extra: Η σύνδεση είναι πλέον δυνατή χρησιμοποιώντας μόνο το διακριτικό που δημιουργείται από την εφαρμογή TOTP. subject: 'Mastodon: Η αυθεντικοποίηση με χρήση κλειδιών ασφαλείας απενεργοποιήθηκε' title: Τα κλειδιά ασφαλείας απενεργοποιήθηκαν webauthn_enabled: - explanation: Η επαλήθευση με κλειδί ασφαλείας έχει ενεργοποιηθεί για τον λογαριασμό σας. Μπορείτε να το χρησιμοποιήσετε για να συνδεθείτε. + explanation: Ο έλεγχος ταυτότητας κλειδιού ασφαλείας έχει ενεργοποιηθεί για τον λογαριασμό σας. + extra: Το κλειδί ασφαλείας σας μπορεί τώρα να χρησιμοποιηθεί για τη σύνδεση. subject: 'Mastodon: Ενεργοποιήθηκε η επαλήθευση με κλειδί ασφαλείας' title: Τα κλειδιά ασφαλείας ενεργοποιήθηκαν omniauth_callbacks: diff --git a/config/locales/devise.en-GB.yml b/config/locales/devise.en-GB.yml index e7ab9462dc31aa..8fa02bbd4a0e3e 100644 --- a/config/locales/devise.en-GB.yml +++ b/config/locales/devise.en-GB.yml @@ -47,11 +47,9 @@ en-GB: subject: 'Mastodon: Reset password instructions' title: Password reset two_factor_disabled: - explanation: Two-factor authentication for your account has been disabled. Login is now possible using only e-mail address and password. subject: 'Mastodon: Two-factor authentication disabled' title: 2FA disabled two_factor_enabled: - explanation: Two-factor authentication has been enabled for your account. A token generated by the paired TOTP app will be required for login. subject: 'Mastodon: Two-factor authentication enabled' title: 2FA enabled two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ en-GB: subject: 'Mastodon: Security key deleted' title: One of your security keys has been deleted webauthn_disabled: - explanation: Authentication with security keys has been disabled for your account. Login is now possible using only the token generated by the paired TOTP app. subject: 'Mastodon: Authentication with security keys disabled' title: Security keys disabled webauthn_enabled: - explanation: Security key authentication has been enabled for your account. Your security key can now be used for login. subject: 'Mastodon: Security key authentication enabled' title: Security keys enabled omniauth_callbacks: diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml index eef8214817b6e7..4439397c8eead1 100644 --- a/config/locales/devise.en.yml +++ b/config/locales/devise.en.yml @@ -47,16 +47,19 @@ en: subject: 'Mastodon: Reset password instructions' title: Password reset two_factor_disabled: - explanation: Two-factor authentication for your account has been disabled. Login is now possible using only e-mail address and password. + explanation: Login is now possible using only e-mail address and password. subject: 'Mastodon: Two-factor authentication disabled' + subtitle: Two-factor authentication for your account has been disabled. title: 2FA disabled two_factor_enabled: - explanation: Two-factor authentication has been enabled for your account. A token generated by the paired TOTP app will be required for login. + explanation: A token generated by the paired TOTP app will be required for login. subject: 'Mastodon: Two-factor authentication enabled' + subtitle: Two-factor authentication has been enabled for your account. title: 2FA enabled two_factor_recovery_codes_changed: explanation: The previous recovery codes have been invalidated and new ones generated. subject: 'Mastodon: Two-factor recovery codes re-generated' + subtitle: The previous recovery codes have been invalidated and new ones generated. title: 2FA recovery codes changed unlock_instructions: subject: 'Mastodon: Unlock instructions' @@ -70,11 +73,13 @@ en: subject: 'Mastodon: Security key deleted' title: One of your security keys has been deleted webauthn_disabled: - explanation: Authentication with security keys has been disabled for your account. Login is now possible using only the token generated by the paired TOTP app. + explanation: Authentication with security keys has been disabled for your account. + extra: Login is now possible using only the token generated by the paired TOTP app. subject: 'Mastodon: Authentication with security keys disabled' title: Security keys disabled webauthn_enabled: - explanation: Security key authentication has been enabled for your account. Your security key can now be used for login. + explanation: Security key authentication has been enabled for your account. + extra: Your security key can now be used for login. subject: 'Mastodon: Security key authentication enabled' title: Security keys enabled omniauth_callbacks: diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml index 1c13490e530c0a..af1769aa66f13b 100644 --- a/config/locales/devise.eo.yml +++ b/config/locales/devise.eo.yml @@ -47,11 +47,9 @@ eo: subject: 'Mastodon: Instrukcioj por ŝanĝi pasvorton' title: Pasvorto restarigita two_factor_disabled: - explanation: Dufaktora aŭtentigo por via konto malebligis. Ensalutado nun eblas per nur retpoŝtadreso kaj pasvorto. subject: 'Mastodon: dufaktora aŭtentigo malebligita' title: 2FA estas malŝaltita two_factor_enabled: - explanation: Dufaktora aŭtentigo sukcese ebligita por via akonto. Vi bezonos ĵetonon kreitan per parigitan aplikaĵon por ensaluti. subject: 'Mastodon: Dufaktora aŭtentigo ebligita' title: 2FA aktivigita two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ eo: subject: 'Mastodon: sekureca ŝlosilo forigita' title: Unu el viaj sekurecaj ŝlosiloj estis forigita webauthn_disabled: - explanation: Aŭtentikigo per sekurecaj ŝlosiloj estis malebligita por via konto. Ensaluto nun eblas per nur la signo generita de la parigita TOTP-programo. subject: 'Mastodon: sekureca-ŝlosila aŭtentigo malebligita' title: Sekurecaj ŝlosiloj malaktivigitaj webauthn_enabled: - explanation: Sekureca ŝlosila aŭtentokontrolo estis ebligita por via konto. Via sekureca ŝlosilo nun uzeblas por ensaluti. subject: 'Mastodon: sekureca-ŝlosila aŭtentigo ebligita' title: Sekurecaj ŝlosiloj aktivigitaj omniauth_callbacks: diff --git a/config/locales/devise.es-AR.yml b/config/locales/devise.es-AR.yml index d9c922ed86a3b9..ca60ee5debca62 100644 --- a/config/locales/devise.es-AR.yml +++ b/config/locales/devise.es-AR.yml @@ -47,16 +47,19 @@ es-AR: subject: 'Mastodon: instrucciones para cambiar la contraseña' title: Cambiar contraseña two_factor_disabled: - explanation: La autenticación de dos factores para tu cuenta está deshabilitada. Ahora el inicio de sesión sólo es posible usando la dirección de correo electrónico y la contraseña. + explanation: Ahora es posible iniciar sesión utilizando sólo la dirección de correo electrónico y la contraseña. subject: 'Mastodon: autenticación de dos factores, deshabilitada' + subtitle: Se deshabilitó la autenticación de dos factores para tu cuenta. title: 2FA deshabilitada two_factor_enabled: - explanation: La autenticación de dos factores para tu cuenta está habilitada. Se requiere una clave generada por la aplicación TOTP asociada para iniciar sesión. + explanation: Para iniciar sesión, se requerirá una clave numérica ("token") generada por la aplicación TOTP emparejada. subject: 'Mastodon: autenticación de dos factores, habilitada' + subtitle: Se habilitó la autenticación de dos factores para tu cuenta. title: 2FA habilitada two_factor_recovery_codes_changed: explanation: Los códigos anteriores de recuperación fueron invalidados y se generaron unos nuevos. subject: 'Mastodon: códigos de recuperación de dos factores, regenerados' + subtitle: Los códigos de recuperación anteriores ya no son válidos y se generaron códigos nuevos. title: Códigos de recuperación 2FA cambiados unlock_instructions: subject: 'Mastodon: instrucciones de desbloqueo' @@ -70,11 +73,13 @@ es-AR: subject: 'Mastodon: llave de seguridad eliminada' title: Se eliminó una de tus llaves de seguridad webauthn_disabled: - explanation: Se deshabilitó la autenticación con llaves de seguridad en tu cuenta. El inicio de sesión ahora es posible usando sólo la clave generada por la aplicación TOTP asociada. + explanation: Se deshabilitó la autenticación con claves de seguridad para tu cuenta. + extra: Ahora es posible iniciar sesión utilizando sólo la clave numérica ("token") generada por la aplicación TOTP emparejada. subject: 'Mastodon: autenticación con llaves de seguridad, deshabilitada' title: Llaves de seguridad deshabilitadas webauthn_enabled: - explanation: Se habilitó la autenticación de llave de seguridad en tu cuenta. Ahora tu llave de seguridad se puede usar para iniciar sesión. + explanation: Se habilitó la autenticación con llave de seguridad para tu cuenta. + extra: Ahora es posible iniciar sesión utilizando tu llave de seguridad. subject: 'Mastodon: autenticación con llaves de seguridad, habilitada' title: Llaves de seguridad habilitadas omniauth_callbacks: diff --git a/config/locales/devise.es-MX.yml b/config/locales/devise.es-MX.yml index 83b425d4410f53..c4a7f319af02f5 100644 --- a/config/locales/devise.es-MX.yml +++ b/config/locales/devise.es-MX.yml @@ -47,16 +47,19 @@ es-MX: subject: 'Mastodon: Instrucciones para reiniciar contraseña' title: Reiniciar contraseña two_factor_disabled: - explanation: La autenticación de dos factores para tu cuenta ha sido deshabilitada. Ahora puedes conectarte solamente usando la dirección de correo electrónico y la contraseña. + explanation: Ahora es posible iniciar sesión utilizando solamente la dirección de correo electrónico y la contraseña. subject: 'Mastodon: La autenticación de dos factores está deshabilitada' + subtitle: La autenticación de doble factor para tu cuenta ha sido deshabilitada. title: 2FA desactivada two_factor_enabled: - explanation: La autenticación de dos factores para tu cuenta ha sido habilitada. Se requiere un token generado por la aplicación TOTP emparejada para ingresar. + explanation: Se requerirá un token generado por la aplicación TOTP emparejada para iniciar sesión. subject: 'Mastodon: La autenticación de dos factores está habilitada' + subtitle: La autenticación de doble factor ha sido habilitada para tu cuenta. title: 2FA activada two_factor_recovery_codes_changed: explanation: Los códigos de recuperación previos han sido invalidados y se generaron códigos nuevos. subject: 'Mastodon: Los códigos de recuperación de dos factores fueron regenerados' + subtitle: Los códigos de recuperación anteriores han sido invalidados y se han generado códigos nuevos. title: Códigos de recuperación 2FA cambiados unlock_instructions: subject: 'Mastodon: Instrucciones para desbloquear' @@ -70,11 +73,13 @@ es-MX: subject: 'Mastodon: Clave de seguridad eliminada' title: Una de sus claves de seguridad ha sido eliminada webauthn_disabled: - explanation: La autenticación con claves de seguridad ha sido desactivada para tu cuenta. El inicio de sesión es ahora posible únicamente utilizando el token generado por la aplicación emparejada TOTP. + explanation: La autenticación con claves de seguridad ha sido desactivada para tu cuenta. + extra: Ahora es posible iniciar sesión utilizando únicamente el token generado por la aplicación TOTP emparejada. subject: 'Mastodon: Autenticación con claves de seguridad desactivada' title: Claves de seguridad desactivadas webauthn_enabled: - explanation: La autenticación con clave de seguridad ha sido habilitada para su cuenta. Su clave de seguridad ahora puede ser usada para iniciar sesión. + explanation: La autenticación con clave de seguridad ha sido habilitada para tu cuenta. + extra: Tu clave de seguridad ahora puede usarse para iniciar sesión. subject: 'Mastodon: Autenticación con clave de seguridad activada' title: Claves de seguridad activadas omniauth_callbacks: diff --git a/config/locales/devise.es.yml b/config/locales/devise.es.yml index ef6a70ee4f8e97..642871710db300 100644 --- a/config/locales/devise.es.yml +++ b/config/locales/devise.es.yml @@ -47,16 +47,19 @@ es: subject: 'Mastodon: Instrucciones para reiniciar contraseña' title: Reiniciar contraseña two_factor_disabled: - explanation: La autenticación de dos factores para tu cuenta ha sido deshabilitada. Ahora puedes conectarte solamente usando la dirección de correo electrónico y la contraseña. + explanation: Ahora es posible iniciar sesión utilizando únicamente la dirección de correo electrónico y la contraseña. subject: 'Mastodon: La autenticación de dos factores está deshabilitada' + subtitle: La autenticación de doble factor para tu cuenta ha sido deshabilitada. title: 2FA desactivada two_factor_enabled: - explanation: La autenticación de dos factores para tu cuenta ha sido habilitada. Se requiere un token generado por la aplicación TOTP emparejada para ingresar. + explanation: Se requerirá un token generado por la aplicación TOTP emparejada para iniciar sesión. subject: 'Mastodon: La autenticación de dos factores está habilitada' + subtitle: La autenticación de doble factor ha sido habilitada para tu cuenta. title: 2FA activada two_factor_recovery_codes_changed: explanation: Los códigos de recuperación previos han sido invalidados y se generaron códigos nuevos. subject: 'Mastodon: Los códigos de recuperación de dos factores fueron regenerados' + subtitle: Los códigos de recuperación anteriores han sido invalidados y se han generado códigos nuevos. title: Códigos de recuperación 2FA cambiados unlock_instructions: subject: 'Mastodon: Instrucciones para desbloquear' @@ -70,11 +73,13 @@ es: subject: 'Mastodon: Clave de seguridad eliminada' title: Una de tus claves de seguridad ha sido eliminada webauthn_disabled: - explanation: La autenticación con claves de seguridad ha sido deshabilitada para tu cuenta. Ahora el inicio de sesión solo es posible utilizando el token generado por la aplicación TOTP emparejada. + explanation: La autenticación con claves de seguridad ha sido desactivada para tu cuenta. + extra: Ahora es posible iniciar sesión utilizando únicamente el token generado por la aplicación TOTP emparejada. subject: 'Mastodon: Autenticación con claves de seguridad deshabilitada' title: Claves de seguridad deshabilitadas webauthn_enabled: - explanation: La autenticación con clave de seguridad ha sido habilitada para tu cuenta. Ahora tu clave de seguridad puede ser utilizada para iniciar sesión. + explanation: La autenticación con clave de seguridad ha sido habilitada para tu cuenta. + extra: Tu clave de seguridad ahora puede usarse para iniciar sesión. subject: 'Mastodon: Autenticación de clave de seguridad habilitada' title: Claves de seguridad habilitadas omniauth_callbacks: diff --git a/config/locales/devise.et.yml b/config/locales/devise.et.yml index da1cc989d23f57..3e749f9a0b8098 100644 --- a/config/locales/devise.et.yml +++ b/config/locales/devise.et.yml @@ -47,16 +47,19 @@ et: subject: 'Mastodon: salasõna lähtestamisjuhendid' title: Salasõna lähtestamine two_factor_disabled: - explanation: Kontol on kaheastmeline autentimine välja lülitatud. Sisenemine on võimalik ainult kasutades e-postiaadressi ja salasõna. + explanation: Sisselogimine on nüüd võimalik vaid e-postiaadressi ja salasõnaga. subject: 'Mastodon: Kaheastmeline autentimine välja lülitatud' + subtitle: Kaheastmeline autoriseerimine on sinu konto jaoks nüüd välja lülitatud. title: 2FA keelatud two_factor_enabled: - explanation: Kontol on sisse lülitatud kaheastmeline autentimine. Sisenemiseks on vajalik ühekordne aeguv võti TOTP-rakenduse poolt. + explanation: Sisenemiseks on vaja seotud kaheastmelise autoriseerimise äpi genereeritud võtit. subject: 'Mastodon: kaheastmeline autentimine sisse lülitatud' + subtitle: Sinu konto jaoks on kaheastmeline autoriseerimine sisse lülitatud. title: 2FA lubatud two_factor_recovery_codes_changed: explanation: Eelmised taastekoodid on nüüd kehtetud ning loodud uued. subject: 'Mastodon: Kaheastmelise autentimise taastuskoodid taasloodud' + subtitle: Eelmised taastekoodid on tühistatud ja uued genereeritud. title: 2FA taastekoodid muudetud unlock_instructions: subject: 'Mastodon: Lahti lukustamis juhendid' @@ -70,11 +73,13 @@ et: subject: 'Mastodon: turvavõti kustutatud' title: Üks sinu turvavõtmetest on kustutatud webauthn_disabled: - explanation: Autentimine turvavõtmetega on kontol välja lülitatud. Sisse logimine on nüüd võimalik ainult kasutades seotud TOTP rakenduse poolt genereeritud võtit. + explanation: Turvavõtmega autoriseerimine on sinu konto jaoks välja lülitatud. + extra: Sisenemine on nüüd võimalik vaid seotud kaheastmelise autoriseerimise äpi genereeritud võtmega. subject: 'Mastodon: autentimine turvavõtmega on välja lülitatud' title: Turvavõtmed on välja lülitatud webauthn_enabled: - explanation: Turvavõtmega autentimine on nüüd kontol sisse lülitatud. Nüüd saab kasutada sisse logimiseks sinu turvavõtit. + explanation: Turvavõtmega autoriseerimine on sinu konto jaoks nüüd sisse lülitatud. + extra: Nüüd saab sisselogimiseks kasutada sinu turvavõtit. subject: 'Mastodon: turvavõtme autentimine sisse lülitatud' title: Turvavõtmed on sisse lülitatud omniauth_callbacks: diff --git a/config/locales/devise.eu.yml b/config/locales/devise.eu.yml index eb23e06d4a3a15..624f9ee93d8972 100644 --- a/config/locales/devise.eu.yml +++ b/config/locales/devise.eu.yml @@ -47,16 +47,19 @@ eu: subject: 'Mastodon: Pasahitza berrezartzeko argibideak' title: Pasahitza berrezartzea two_factor_disabled: - explanation: Bi faktoreetako autentifikazioa desgaitu da zure kontuan. Orain saioa hasi daiteke e-mail helbidea eta pasahitza bakarrik erabilita. + explanation: Orain posible da helbide elektronikoa eta pasahitza erabiliz saioa hastea. subject: 'Mastodon: Bi faktoreetako autentifikazioa desgaituta' + subtitle: Kontuaren bi faktoreko autentifikazioa desgaitu da. title: 2FA desgaituta two_factor_enabled: - explanation: Bi faktoreetako autentifikazioa gaitu da zure kontuan. Token bat sortu du lotutako TOTP aplikazioak eta saioa hasteko eskatuko da. + explanation: Parekatutako TOTP aplikazioak sortutako tokena beharko da saioa hasteko. subject: 'Mastodon: Bi faktoreetako autentifikazioa gaituta' + subtitle: Kontuaren bi faktoreko autentifikazioa gaitu da. title: 2FA gaituta two_factor_recovery_codes_changed: explanation: Aurreko kodeak baliogabetu dira eta berriak sortu dira. subject: 'Mastodon: Bi faktoreetako berreskuratze kodeak birsortuta' + subtitle: Aurreko berreskuratze-kodeak baliogabetu eta berriak sortu dira. title: 2FA berreskuratze kodeak aldatuta unlock_instructions: subject: 'Mastodon: Desblokeatzeko argibideak' @@ -70,11 +73,13 @@ eu: subject: 'Mastodon: Segurtasun gakoa ezabatu da' title: Zure segurtasun gakoetako bat ezabatu da webauthn_disabled: - explanation: Segurtasun gako bidezko autentifikazioa desgaitu da zure kontuan. Saioa hasteko modu bakarra parekatutako TOTP aplikazioak sortutako tokena erabiltzea da orain. + explanation: Kontuaren segurtasun-gako bidezko autentifikazioa desgaitu da. + extra: Parekatutako TOTP aplikazioak sortutako tokena erabiliz bakarrik has daiteke saioa orain. subject: 'Mastodon: Segurtasun gakoekin autentifikatzea desgaituta' title: Segurtasun gakoak desgaituta webauthn_enabled: - explanation: Segurtasun gako bidezko autentifikazioa gaitu da zure kontuan. Orain zure segurtasun gakoa erabil dezakezu saioa hasteko. + explanation: Kontuaren segurtasun-gako bidezko autentifikazioa gaitu da. + extra: Orain, segurtasun-gakoa erabil daiteke saioa hasteko. subject: 'Mastodon: Segurtasun gako bidezko autentifikazioa gaituta' title: Segurtasun gakoak gaituta omniauth_callbacks: diff --git a/config/locales/devise.fa.yml b/config/locales/devise.fa.yml index 07db5395da0cc6..d4198626d4982a 100644 --- a/config/locales/devise.fa.yml +++ b/config/locales/devise.fa.yml @@ -47,11 +47,9 @@ fa: subject: 'ماستودون: راهنمایی برای بازنشانی گذرواژه' title: بازنشانی گذرواژه two_factor_disabled: - explanation: ورود دومرحله‌ای برای حساب شما غیرفعال شده است. از الان می‌توانید تنها با نشانی ایمیل و گذرواژه وارد حساب خود شوید. subject: 'ماستودون: تأیید هویت دو مرحله‌ای از کار افتاد' title: ورود دومرحله‌ای غیرفعال two_factor_enabled: - explanation: ورود دومرحله‌ای برای حساب شما فعال شده است. برای ورود به کدی نیاز خواهید داشت که نرم‌افزار TOTP از پیش تنظیم شده برایتان می‌سازد. subject: 'ماستودون: تأیید هویت دومرحله‌ای به کار افتاد' title: ورود دومرحله‌ای فعال two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ fa: subject: 'ماستودون: کلید امنیتی حذف شد' title: یکی از کلیدهای امنیتیتان حذف شد webauthn_disabled: - explanation: تأیید هویت با کلیدهای امنیتی برای حسابتان از کار افتاده است. ورود اکنون فقط با ژتون ایجاد شده با کارهٔ TOTP جفت‌شده امکان‌پذیر است. subject: 'ماستودون: تأیید هویت با کلیدهای امنیتی از کار افتاد' title: کلیدهای امنیتی از کار افتادند webauthn_enabled: - explanation: تأیید هویت با کلید امنیتی برای حسابتان به کار افتاده است. اکنون کلید امنیتیتان می‌تواند برای ورود استفاده شود. subject: 'ماستودون: تأیید هویت با کلید امنیتی به کار افتاد' title: کلیدهای امنیتی به کار افتادند omniauth_callbacks: diff --git a/config/locales/devise.fi.yml b/config/locales/devise.fi.yml index 7846ebd8c281dc..bedf8a56f600c8 100644 --- a/config/locales/devise.fi.yml +++ b/config/locales/devise.fi.yml @@ -47,11 +47,9 @@ fi: subject: 'Mastodon: ohjeet salasanan vaihtoon' title: Salasanan vaihto two_factor_disabled: - explanation: Tilisi kaksivaiheinen todennus poistettiin käytöstä. Kirjautuminen onnistuu nyt pelkällä sähköpostiosoitella ja salasanalla. subject: 'Mastodon: kaksivaiheinen todennus poistettu käytöstä' title: 2-vaiheinen todennus pois käytöstä two_factor_enabled: - explanation: Kaksivaiheinen todennus on otettu käyttöön tilillesi. Kirjautumiseen tarvitaan kaksivaiheisen todennuksen sovelluksesta saatu koodi. subject: 'Mastodon: kaksivaiheinen todennus otettu käyttöön' title: 2-vaiheinen todennus käytössä two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ fi: 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 vain paritetun TOTP-sovelluksen luomaa koodia käyttämällä. subject: 'Mastodon: Todennus suojausavaimilla poistettu käytöstä' title: Suojausavaimet poistettu käytöstä webauthn_enabled: - explanation: Todennus suojausavaimella on otettu käyttöön tilillesi. Suojausavaintasi voidaan nyt käyttää kirjautumiseen. subject: 'Mastodon: Todennus suojausavaimella on otettu käyttöön' title: Suojausavaimet käytössä omniauth_callbacks: diff --git a/config/locales/devise.fo.yml b/config/locales/devise.fo.yml index 35fa0954f47e0c..1f7708bb44fe26 100644 --- a/config/locales/devise.fo.yml +++ b/config/locales/devise.fo.yml @@ -47,16 +47,19 @@ fo: subject: 'Mastodon: Vegleiðing at skifta loyniorð' title: Skift loyniorð two_factor_disabled: - explanation: Tvey-faktor samgildi (2FA) fyri tína kontu er gjørt óvirkið. Nú er møguligt at rita inn við einans at nýta teldupost og loyniorð. + explanation: Innritan er nú møgulig við einans at brúka teldupost og loyniorð. subject: 'Mastodon: Váttan í tveimum stigum er gjørd óvirkin' + subtitle: Váttan í tveimum stigum (2FA) er gjørd óvirkin fyri tína kontu. title: 2FA óvirkið two_factor_enabled: - explanation: Váttan í tveimum stigum er gjørd virkin fyri tína kontu. Eitt merki framleitt av paraðu TOTP appini verður framyvir kravt fyri at rita inn. + explanation: Eitt tekin, sum er gjørt við eini paraðari TOTP app, verður kravt fyri at rita inn. subject: 'Mastodon: Váttan í tveimum stigum er virkin' + subtitle: Váttan í tveimum stigum (2FA) er gjørd virkin fyri tína kontu. title: 2FA virkið two_factor_recovery_codes_changed: explanation: Undanfarnu endurskapanarkodurnar eru ógildaðar og nýggjar eru framleiddar. subject: 'Mastodon: Endurskapanarkodurnar til váttan í tveimum stigum eru framleiddar umaftur' + subtitle: Undanfarnu kodur til endurgerð eru nú óvirknar og nýggjar eru gjørdar. title: 2FA endurskapanarkodur eru broyttar unlock_instructions: subject: 'Mastodon: Vegleiðing í at læsa upp' @@ -70,11 +73,13 @@ fo: subject: 'Mastodon: Trygdarlykilin strikaður' title: Ein av trygdarlyklunum hjá tær er strikaður webauthn_disabled: - explanation: Váttan við trygdarlyklum er gjørd óvirkin fyri tína kontu. Nú ber til at rita inn einans við teknum, sum eru framleidd av paraðu TOTP appini. + explanation: Samgildi við trygdarlyklum er gjørt óvirkið fyri tína kontu. + extra: Innritan er nú møgulig við einans at brúka teknið, sum er gjørt við paraðu TOTP appini. subject: 'Mastodon: Váttan við trygdarlyklum er gjørd óvirkin' title: Trygdarlyklar óvirknir webauthn_enabled: - explanation: Váttan við trygdarlyklum er gjørd virkin á tínari kontu. Nú kann tín trygdarlykil nýtast at rita inn við. + explanation: Trygdarlyklasamgildi er gjørt virkið fyri tína kontu. + extra: Trygdarlyklarnir hjá tær kunnu nú brúkast til innritan. subject: 'Mastodon: Váttan við trygdarlykli gjørd virkin' title: Trygdarlyklar gjørdir virknir omniauth_callbacks: diff --git a/config/locales/devise.fr-CA.yml b/config/locales/devise.fr-CA.yml index e9f09a69806862..34104e0ac56206 100644 --- a/config/locales/devise.fr-CA.yml +++ b/config/locales/devise.fr-CA.yml @@ -47,16 +47,19 @@ fr-CA: subject: 'Mastodon: Instructions pour changer votre mot de passe' title: Réinitialisation du mot de passe two_factor_disabled: - explanation: L'authentification à deux facteurs pour votre compte a été désactivée. La connexion est maintenant possible en utilisant uniquement l'adresse courriel et le mot de passe. + explanation: La connexion est maintenant possible en n'utilisant uniquement l'adresse e-mail et le mot de passe. subject: 'Mastodon: authentification à deux facteurs désactivée' + subtitle: L'authentification à deux facteurs pour votre compte a été désactivée. title: A2F désactivée two_factor_enabled: - explanation: L'authentification à deux facteurs a été activée pour votre compte. Un jeton généré par l'application appairée TOTP sera nécessaire pour vous connecter. + explanation: Un jeton généré par l'application appairée TOTP sera nécessaire pour vous connecter. subject: 'Mastodon: authentification à deux facteurs activée' + subtitle: L'authentification à deux facteurs est maintenant activée pour votre compte. title: A2F activée two_factor_recovery_codes_changed: explanation: Les codes de récupération précédents ont été invalidés et de nouveaux ont été générés. subject: 'Mastodon: codes de récupération à deux facteurs régénérés' + subtitle: Les codes de récupération précédents ont été invalidés et de nouveaux codes ont été générés. title: Codes de récupération A2F modifiés unlock_instructions: subject: 'Mastodon: Instructions pour déverrouiller votre compte' @@ -70,11 +73,9 @@ fr-CA: subject: 'Mastodon: Clé de sécurité supprimée' title: Une de vos clés de sécurité a été supprimée webauthn_disabled: - explanation: L'authentification avec les clés de sécurité a été désactivée pour votre compte. La connexion est maintenant possible en utilisant uniquement le jeton généré par l'application TOTP appairée. subject: 'Mastodon: Authentification avec clés de sécurité désactivée' title: Clés de sécurité désactivées webauthn_enabled: - explanation: L'authentification par clé de sécurité a été activée pour votre compte. Votre clé de sécurité peut maintenant être utilisée pour vous connecter. subject: 'Mastodon: Authentification de la clé de sécurité activée' title: Clés de sécurité activées omniauth_callbacks: diff --git a/config/locales/devise.fr.yml b/config/locales/devise.fr.yml index 8eb744d94c10f9..1fc6663bfe1894 100644 --- a/config/locales/devise.fr.yml +++ b/config/locales/devise.fr.yml @@ -47,16 +47,19 @@ fr: subject: 'Mastodon : Instructions pour changer votre mot de passe' title: Réinitialisation du mot de passe two_factor_disabled: - explanation: L'authentification à deux facteurs pour votre compte a été désactivée. La connexion est maintenant possible en utilisant uniquement l'adresse courriel et le mot de passe. + explanation: La connexion est maintenant possible en n'utilisant uniquement l'adresse e-mail et le mot de passe. subject: 'Mastodon : authentification à deux facteurs désactivée' + subtitle: L'authentification à deux facteurs pour votre compte a été désactivée. title: 2FA désactivée two_factor_enabled: - explanation: L'authentification à deux facteurs a été activée pour votre compte. Un jeton généré par l'application appairée TOTP sera nécessaire pour vous connecter. + explanation: Un jeton généré par l'application appairée TOTP sera nécessaire pour vous connecter. subject: 'Mastodon : authentification à deux facteurs activée' + subtitle: L'authentification à deux facteurs est maintenant activée pour votre compte. title: A2F activée two_factor_recovery_codes_changed: explanation: Les codes de récupération précédents ont été invalidés et de nouveaux ont été générés. subject: 'Mastodon : codes de récupération à deux facteurs régénérés' + subtitle: Les codes de récupération précédents ont été invalidés et de nouveaux codes ont été générés. title: Codes de récupération A2F modifiés unlock_instructions: subject: 'Mastodon : Instructions pour déverrouiller votre compte' @@ -70,11 +73,9 @@ fr: subject: 'Mastodon: Clé de sécurité supprimée' title: Une de vos clés de sécurité a été supprimée webauthn_disabled: - explanation: L'authentification avec les clés de sécurité a été désactivée pour votre compte. La connexion est maintenant possible en utilisant uniquement le jeton généré par l'application TOTP appairée. subject: 'Mastodon: Authentification avec clés de sécurité désactivée' title: Clés de sécurité désactivées webauthn_enabled: - explanation: L'authentification par clé de sécurité a été activée pour votre compte. Votre clé de sécurité peut maintenant être utilisée pour vous connecter. subject: 'Mastodon: Authentification de la clé de sécurité activée' title: Clés de sécurité activées omniauth_callbacks: diff --git a/config/locales/devise.fy.yml b/config/locales/devise.fy.yml index 910d2d30947b1b..05fd7b807108b3 100644 --- a/config/locales/devise.fy.yml +++ b/config/locales/devise.fy.yml @@ -49,16 +49,19 @@ fy: subject: 'Mastodon: Wachtwurd opnij ynstelle' title: Wachtwurd opnij ynstelle two_factor_disabled: - explanation: Twa-stapsferifikaasje foar jo account is útskeakele. Jo kinne no allinnich oanmelde mei in e-mailadres en wachtwurd. + explanation: Jo kinne no oanmelde mei allinnich in e-mailadres en wachtwurd. subject: 'Mastodon: Twa-stapsferifikaasje útskeakele' + subtitle: Twastapsferifikaasje foar jo account is útskeakele. title: Twa-stapsferifikaasje útskeakele two_factor_enabled: - explanation: Twa-stapsferifikaasje foar jo account is ynskeakele. Om oanmelde te kinnen is in troch in twa-stapsferifikaasje-app generearre tagongskoade nedich. + explanation: Jo hawwe in troch de autentikaasje-app genearre tagongskoade nedich om oan te melden. subject: 'Mastodon: Twa-stapsferifikaasje ynskeakele' + subtitle: Twastapsferifikaasje is foar jo account ynskeakele. title: Twa-stapsferifikaasje ynskeakele two_factor_recovery_codes_changed: explanation: De foarige werstelkoaden binne ûnjildich makke en nije binne oanmakke. subject: 'Mastodon: Twa-staps-werstelkoaden binne opnij oanmakke' + subtitle: De foarige werstelkoaden binne ûnjildich makke en nije binne oanmakke. title: Werstelkoaden twa-stapsferifikaasje wizige unlock_instructions: subject: 'Mastodon: Ynstruksjes foar ûntskoatteljen' @@ -72,11 +75,13 @@ fy: subject: 'Mastodon: Befeiligingskaai fuortsmiten' title: Ien fan jo befeiligingskaaien is fuortsmiten webauthn_disabled: - explanation: Ferifikaasje mei befeiligingskaaien is útskeakele foar jo account. Oanmelden is no allinnich mooglik mei it gebrûk fan in troch in keppele TOTP-app generearre kaai. + explanation: Ferifikaasje mei befeiligingskaaien is foar jo account útskeakele. + extra: It is no allinnich mooglik om oan te melden mei in troch de autentikaasje-app genearre tagongskoade. subject: 'Mastodon: Ferifikaasje mei befeiligingskaaien is útskeakele' title: Befeiligingskaaien útskeakele webauthn_enabled: - explanation: Ferifikaasje mei befeiligingskaaien is ynskeakele foar jo account. Jo befeiligingskaai kin no brûkt wurde om oan te melden. + explanation: Ferifikaasje mei befeiligingskaaien is foar jo account ynskeakele. + extra: Jo befeiligingskaai kin no brûkt wurde om oan te melden. subject: 'Mastodon: Ferifikaasje mei befeiligingskaaien is ynskeakele' title: Befeiligingskaaien ynskeakele omniauth_callbacks: diff --git a/config/locales/devise.gd.yml b/config/locales/devise.gd.yml index c8a34054cf18e0..1bf489cfbb308b 100644 --- a/config/locales/devise.gd.yml +++ b/config/locales/devise.gd.yml @@ -47,11 +47,9 @@ gd: subject: 'Mastodon: Stiùireadh air ath-shuidheachadh an fhacail-fhaire' title: Ath-shuidheachadh an fhacail-fhaire two_factor_disabled: - explanation: Chaidh an dearbhadh dà-cheumnach a chur à comas dhan chunntas agad. ’S urrainn dhut clàradh a-steach le seòladh puist-d is facal-faire a-mhàin a-nis. subject: 'Mastodon: Tha an dearbhadh dà-cheumnach à comas' title: Dearbhadh dà-cheumnach à comas two_factor_enabled: - explanation: Chaidh an dearbhadh dà-cheumnach a chur an comas dhan chunntas agad. Bidh feum air tòcan a ghineas an aplacaid TOTP a chaidh a phaidhreachadh airson clàradh a-steach. subject: 'Mastodon: Tha an dearbhadh dà-cheumnach an comas' title: Dearbhadh dà-cheumnach an comas two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ gd: subject: 'Mastodon: Chaidh iuchair tèarainteachd a sguabadh às' title: Chaidh tè dhe na h-iuchraichean tèarainteachd agad a sguabadh às webauthn_disabled: - explanation: Chaidh an dearbhadh le iuchraichean tèarainteachd a chur à comas dhan chunntas agad. ’S urrainn dhut clàradh a-steach leis an tòcan a ghineas an aplacaid TOTP paidhrichte a-mhàin a-nis. subject: 'Mastodon: Tha dearbhadh le iuchraichean tèarainteachd à comas' title: Chaidh na h-iuchraichean tèarainteachd a chur à comas webauthn_enabled: - explanation: Chaidh an dearbhadh le iuchair tèarainteachd a chur an comas dhan chunntas agad. ’S urrainn dhut an iuchair tèarainteachd agad a chleachdadh airson clàradh a-steach a-nis. subject: 'Mastodon: Tha dearbhadh le iuchair tèarainteachd an comas' title: Chaidh na h-iuchraichean tèarainteachd a chur an comas omniauth_callbacks: diff --git a/config/locales/devise.gl.yml b/config/locales/devise.gl.yml index b392f4642c01bd..b9f4a0a0056381 100644 --- a/config/locales/devise.gl.yml +++ b/config/locales/devise.gl.yml @@ -47,16 +47,19 @@ gl: subject: 'Mastodon: Instrucións para restabelecer o contrasinal' title: Restabelecer contrasinal two_factor_disabled: - explanation: A autenticación de dobre factor para a túa conta foi desactivada. É agora posíbel acceder só co teu enderezo de email e contrasinal. + explanation: Agora xa podes acceder usando simplemente o correo e contrasinal. subject: 'Mastodon: Autenticación de dobre factor desactivada' + subtitle: Desactivouse o segundo factor de autenticación. title: 2FA desactivado two_factor_enabled: - explanation: A autenticación de dobre factor foi activada para a túa conta. Un token, xerado pola aplicación TOTP emparellada, será necesario para acceder. + explanation: Vai ser preciso usar un código creado pola app TOTP emparellada. subject: 'Mastodon: Activouse a autenticación de dobre factor' + subtitle: Activouse o segundo factor de autenticación para a conta. title: 2FA activado two_factor_recovery_codes_changed: explanation: Os códigos de recuperación anteriores fican anulados e os novos foron xerados. subject: 'Mastodon: Xerados novos códigos de recuperación de dobre factor' + subtitle: Os anteriores códigos de recuperación quedaron desactivados e crearonse uns novos. title: Códigos de recuperación 2FA mudados unlock_instructions: subject: 'Mastodon: Instrucións para desbloquear' @@ -70,11 +73,13 @@ gl: subject: 'Mastodon: Chave de seguridade eliminada' title: Eliminouse unha das túas chaves de seguridade webauthn_disabled: - explanation: Desactivouse para a túa conta a autenticación con chaves de seguridade. Agora a conexión é posible usando só o token creado pola app TOTP emparellada. + explanation: Desactivouse para a conta a autenticación con chaves de seguridade. + extra: Agora só se pode acceder usando o código creado pola app TOTP emparellada. subject: 'Mastodon: Desactivouse a autenticación con chave de seguridade' title: Chaves de seguridade desactivadas webauthn_enabled: - explanation: Activouse para a conta a autenticación con chave de seguridade. Xa podes usar a chave de seguridade para contectar. + explanation: Activouse para a conta a autenticación con chave de seguridade. + extra: Xa podes usar a chave de seguridade para acceder. subject: 'Mastodon: Autenticación con chave de seguridade activada' title: Chaves de seguridade activas omniauth_callbacks: diff --git a/config/locales/devise.he.yml b/config/locales/devise.he.yml index e45f62b031ff42..f2ec3a6716e1cd 100644 --- a/config/locales/devise.he.yml +++ b/config/locales/devise.he.yml @@ -47,16 +47,19 @@ he: subject: 'מסטודון: הוראות לאיפוס סיסמה' title: איפוס סיסמה two_factor_disabled: - explanation: האימות הדו-גורמי לחשבונך בוטל. ניתן עתה להכנס לחשבון עם כתובת דוא"ל וסיסמא בלבד. + explanation: החיבור כרגע אפשרי בעזרת שם משתמש וסיסמא ותו לא. subject: 'מסטודון: אימות דו גורמי מושבת' + subtitle: אימות דו-שלבי כובה לחשבון זה. title: אימות דו-גורמי הושעה two_factor_enabled: - explanation: אימות דו-גורמי הופעל בחשבונך. עתה על מנת להכנס לחשבון נדרש אסימון המיוצר על אפליקציית ה-TOTP המצומדת. + explanation: כדי להתחבר דרוש קוד חד פעמי מיישומון TOTP ששידכת לחשבון זה. subject: 'מסטודון: אימות דו גורמי הופעל' + subtitle: אימות דו־שלבי הופעל לחשבונך. title: אימות דו־גורמי הופעל two_factor_recovery_codes_changed: explanation: צפני האיחזור הקודמים בוטלו, וחדשים נוצרו. subject: 'מסטודון: צפני אחזור דו-גורמי יוצרו מחדש' + subtitle: צפני האיחזור הקודמים בוטלו, וחדשים נוצרו. title: צפני אחזור דו-גורמי השתנו unlock_instructions: subject: 'מסטודון: הוראות לביטול נעילה' @@ -70,11 +73,13 @@ he: subject: 'מסטודון: מפתח האבטחה נמחק' title: אחד ממפתחות האבטחה שלך נמחק webauthn_disabled: - explanation: בוטלה האפשרות לאמת את חשבונך בעזרת מפתחות אבטחה. כניסה לחשבון אפשרית עכשיו רק בעזרת אסימון שיוצר באפליקציית ה-TOTP המצומדת. + explanation: אימות במפתחות אבטחה כובה לחשבונך. + extra: חיבור כעת ניתן רק על ידי הקוד שיוצר על ידי יישומון TOTP ששודך. subject: 'מסטודון: אימות בעזרת מפתחות אבטחה הושעה' title: מפתחות אבטחה הושעו webauthn_enabled: - explanation: אימות בעזרת מפתחות אבטחה הופעלו עבור חשבונך. ניתן עתה להשתמש במפתח האבטחה שלך על מנת להכנס לחשבון. + explanation: אימות מפתח בטחון הופעל בחשבונך. + extra: ניתן להשתמש כעת במפתח האבטחה שלך כדי להתחבר. subject: 'מסטודון: אימות בעזרת מפתח אבטחה אופשר' title: מפתחות אבטחה אופשרו omniauth_callbacks: diff --git a/config/locales/devise.hu.yml b/config/locales/devise.hu.yml index 6eb1524ed19809..522ac66ad3591b 100644 --- a/config/locales/devise.hu.yml +++ b/config/locales/devise.hu.yml @@ -47,11 +47,9 @@ hu: subject: 'Mastodon: Jelszóvisszaállítási utasítások' title: Jelszó visszaállítása two_factor_disabled: - explanation: A fiókod kétlépcsős hitelesítését kikapcsoltuk. A bejelentkezés mostantól csak az e-mail cím és a jelszó használatával lesz lehetséges. subject: Kétlépcsős azonosítás kikapcsolva title: Kétlépcsős hitelesítés kikapcsolva two_factor_enabled: - explanation: A kétlépcsős hitelesítést engedélyeztük a fiókodban. A bejelentkezéshez a párosított TOTP alkalmazás által generált tokenre lesz szükség. subject: 'Mastodon: Kétlépcsős azonosítás engedélyezve' title: Kétlépcsős hitelesítés engedélyezve two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ hu: subject: 'Mastodon: A biztonsági kulcs törlésre került' title: Az egyik biztonsági kulcsodat törölték 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: A biztonsági kulccsal történő hitelesítés letiltásra került' title: A biztonsá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: A biztonsági kulcsos hitelesítés engedélyezésre került' title: A biztonsági kulcsok engedélyezésre kerültek omniauth_callbacks: diff --git a/config/locales/devise.hy.yml b/config/locales/devise.hy.yml index 2d235c0af1407d..ee23163f519d31 100644 --- a/config/locales/devise.hy.yml +++ b/config/locales/devise.hy.yml @@ -47,11 +47,9 @@ hy: subject: Մաստոդոն․ Գաղտնաբառի վերականգնման նկարագրութիւններ title: Վերականգնել գաղտնաբառը two_factor_disabled: - explanation: 2FA֊ն քո հաշուի համար անջատուեց։ Մուտքն այժմ հնարաւոր է միայն էլ․ փոտի եւ գաղտնաբառի միջոցով։ subject: Մաստոդոն․ 2FA֊ն անջատուեց title: 2FA անջատուած է two_factor_enabled: - explanation: 2FA֊ն քո հաշուի համար միացուած է։ TOTP ծրագրի միջոցով գեներացուած token֊ը պէտք է օգտագործես մուտք գործելու համար։ subject: Մաստոդոն․ 2FA-ն միացուեց title: 2FA միացուած է two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ hy: subject: Մաստոդոն․ Անվտանգութեան բանալին ջնջուել է title: Անվտանգութեան բանալիներիցդ մեկը ջնջուել է webauthn_disabled: - explanation: Անվտանգութեան բանալիներով նոյնականացումը քո հաշուից կասեցուել է։ Մուտք գործելն այժմ հնարաւոր է՝ օգտագործելով միայն զուգաւորուած TOTP յաւելուածից գեներացուած կտրօնը։ subject: Մաստոդոն․ Նոյնականացումն անվտանգութեան բանալիներով կասեցուած է title: Անվտանգութեան բանալիները կասեցուել են webauthn_enabled: - explanation: Անվտանգութեան բանալիով նոյնականացումը քո հաշուի համար միացուած է։ Քո անվտանգութեան բանալին այժմ կարող է օգտագործուել մուտք գործելու համար։ subject: Մաստոդոն․ Անվտանգութեան բանալիով նոյնականացումը միացուած է title: Անվտանգութեան բանալիները միացուել են omniauth_callbacks: diff --git a/config/locales/devise.id.yml b/config/locales/devise.id.yml index 2e51a69dc26978..c0dede95aa8160 100644 --- a/config/locales/devise.id.yml +++ b/config/locales/devise.id.yml @@ -47,11 +47,9 @@ id: subject: 'Mastodon: Petunjuk mereset kata sandi' title: Reset kata sandi two_factor_disabled: - explanation: Otentifikasi dua-faktor untuk akun Anda dimatikan. Kini Masuk dapat dilakukan hanya dengan alamat email dan kata sandi. subject: 'Mastodon: Otentifikasi dua-faktor dimatikan' title: 2FA dimatikan two_factor_enabled: - explanation: Otentifikasi dua-faktor telah dimatikan untuk Akun Anda. Token yang dibuat menggunakan aplikasi TOTP berpasangan akan diperlukan untuk masuk. subject: 'Mastodon: Otentifikasi dua-faktor diaktifkan' title: 2FA diaktifkan two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ id: subject: 'Mastodon: Kunci keamanan dihapus' title: Salah satu dari kunci keamanan Anda telah dihapus webauthn_disabled: - explanation: Autentikasi dengan kunci keamanan telah dinonaktifkan untuk akun ini. Proses masuk akun hanya mungkin menggunakan token yang dibuat dengan aplikasi TOTP. subject: 'Mastodon: Autentikasi dengan kunci keamanan dinoaktifkan' title: Kunci keamanan dinonaktifkan webauthn_enabled: - explanation: Autentikasi kunci keamanan telah diaktifkan untuk akun Anda. Kunci keamanan Anda kini dapat dipakai untuk masuk. subject: 'Mastodon: Autentikasi kunci keamanan aktif' title: Kunci keamanan aktif omniauth_callbacks: diff --git a/config/locales/devise.ie.yml b/config/locales/devise.ie.yml index 05a41147d83982..97cda4e8c6d521 100644 --- a/config/locales/devise.ie.yml +++ b/config/locales/devise.ie.yml @@ -47,16 +47,18 @@ ie: subject: 'Mastodon: Instructiones por reiniciar li passa-parol' title: Reiniciar passa-parol two_factor_disabled: - explanation: 2-factor autentication por tui conto ha esset desactivisat. Aperter session nu es possibil solmen per email-adresse e passa-parol. + explanation: Aperter session es nu possibil solmen per email-adresse e passa-parol. subject: 'Mastodon: 2-factor autentication desactivat' + subtitle: 2-factor autentication por tui conto ha esset desactivisat. title: 2FA desvalidat two_factor_enabled: - explanation: 2-factor autentication ha esset activat por tui conto. Un gage generat per li acuplat apli TOTP va esser besonat por intrar. subject: 'Mastodon: 2-factor autentication activat' + subtitle: 2-factor autentication ha esset activisat por tui conto. title: 2FA permisset two_factor_recovery_codes_changed: explanation: Li anteyan codes de recuperation ha esset ínvalidat, e novis generat. subject: 'Mastodon: 2-factor codes de recuperation regenerat' + subtitle: Li anteyan codes de recuperation ha esset ínvalidat, e novis generat. title: 2FA codes de recuperation changeat unlock_instructions: subject: 'Mastodon: Desserral instructiones' @@ -70,11 +72,12 @@ ie: subject: 'Mastodon: Clave de securitá deletet' title: Un ex tui claves de securitá ha esset deletet webauthn_disabled: - explanation: Autentication per claves de securitá ha esset desactivat por tui conto. Ja on posse intrar solmen con li gage generat per li acuplat apli TOTP. + explanation: Autentication per clave de securitá ha esset desactivisat por tui conto. subject: 'Mastodon: Autentication con claves de securitá desactivisat' title: Claves de securitá desactivisat webauthn_enabled: - explanation: Autentication per clave de securitá ha esset activat por tui conto. Ja li clave de securitá posse esser usat por intrar. + explanation: Autentication per clave de securitá ha esset activisat por tui conto. + extra: Tui clave de securitá nu posse esser usat por aperter session. subject: 'Mastodon: Autentication per clave de securitá activat' title: Claves de securitá activisat omniauth_callbacks: diff --git a/config/locales/devise.io.yml b/config/locales/devise.io.yml index fb90c08c7ff659..6bf0b52cef18b0 100644 --- a/config/locales/devise.io.yml +++ b/config/locales/devise.io.yml @@ -47,11 +47,9 @@ io: subject: Instrucioni por chanjar la pasvorto title: Richanjo di pasvorto two_factor_disabled: - explanation: 2-faktorverifiko por vua konto deaktivigesis. Eniro esas nun posible per nur retpostadreso e pasvorto. subject: 'Mastodon: 2-faktorverifiko deaktivigesis' title: 2FA deaktivigesis two_factor_enabled: - explanation: 2-faktorverifiko aktivigesis por vua konto. Fisho quo facesis da parigita softwaro TOTP bezonesos por eniro. subject: 'Mastodon: 2-faktorverifiko aktivigesis' title: 2FA aktivigesis two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ io: subject: 'Mastodon: Sekurklefo efacesis' title: 1 de vua sekurklefi efacesis webauthn_disabled: - explanation: Verifiko per sekurklefi deaktivigesis por vua konto. Eniro nun esas posibla per nur ficho quo facesis da parita softwaro TOTP. subject: 'Mastodon: Verifiko per sekurklefi deaktivigesis' title: Sekurklefi deaktivigesis webauthn_enabled: - explanation: Sekurklefverifiko aktivigesis por vua konto. Vua sekurklefo nun povas uzesar por eniro. subject: 'Mastodon: Sekurklefverifiko aktivigesis' title: Sekurklefi aktivigesis omniauth_callbacks: diff --git a/config/locales/devise.is.yml b/config/locales/devise.is.yml index 3b7cf109874ab3..12015fa29d628a 100644 --- a/config/locales/devise.is.yml +++ b/config/locales/devise.is.yml @@ -47,16 +47,19 @@ is: subject: 'Mastodon: Leiðbeiningar til að endurstilla lykilorð' title: Endurstilling lykilorðs two_factor_disabled: - explanation: Tveggja-þátta auðkenning fyrir aðganginn þinn hefur verið gerð óvirk. Núna er einungis hægt að skrá inn með tölvupóstfangi og lykilorði. + explanation: Innskráning er núna möguleg með því að nota aðeins tölvupóstfang og lykilorð. subject: 'Mastodon: Tveggja-þátta auðkenning er óvirk' + subtitle: Tveggja-þátta auðkenning fyrir aðganginn þinn hefur verið gerð óvirk. title: 2FA tveggja-þátta auðkenning er óvirk two_factor_enabled: - explanation: Tveggja-þátta auðkenning hefur verið gerð virk fyrir aðganginn þinn. Krafist er teikns útbúnu af paraða TOTP-forritinu til að skrá inn. + explanation: Teikn sem útbúið hefur verið af pöruðu TOTP-forriti verður nauðsynlegt til innskráningar. subject: 'Mastodon: Tveggja-þátta auðkenning er virk' + subtitle: Tveggja-þátta auðkenning fyrir aðganginn þinn hefur verið gerð virk. title: 2FA tveggja-þátta auðkenning er virk two_factor_recovery_codes_changed: explanation: Fyrri endurheimtukóðar tveggja-þátta auðkenningar voru ógiltir og nýir útbúnir í staðinn. subject: 'Mastodon: Endurheimtukóðar tveggja-þátta auðkenningar voru endurnýjaðir' + subtitle: Fyrri endurheimtukóðar tveggja-þátta auðkenningar voru ógiltir og nýir útbúnir í staðinn. title: Endurheimtukóðar tveggja-þátta auðkenningar breyttust unlock_instructions: subject: 'Mastodon: Leiðbeiningar til að aflæsa' @@ -70,11 +73,13 @@ is: subject: 'Mastodon: Öryggislykli eytt' title: Einum af öryggilyklunum þínum hefur verið eytt webauthn_disabled: - explanation: Auðkenning með öryggislyklum hefur verið gerð óvirk fyrir aðganginn þinn. Innskráning er núna einungis möguleg með teikni útbúnu af paraða TOTP-forritinu. + explanation: Auðkenning með öryggislyklum hefur verið gerð óvirk fyrir aðganginn þinn. + extra: Innskráning er núna möguleg með því að nota einungis teikn útbúnu af paraða TOTP-forritinu. subject: 'Mastodon: Auðkenning með öryggislyklum er óvirk' title: Öryggislyklar eru óvirkir webauthn_enabled: - explanation: Auðkenning með öryggislykli hefur verið gerð virk fyrir aðganginn þinn. Nú er hægt að nota öryggislykilinn þinn til að skrá inn. + explanation: Auðkenning með öryggislykli hefur verið gerð virk fyrir aðganginn þinn. + extra: Nú er hægt að nota öryggislykilinn þinn til að skrá inn. subject: 'Mastodon: Auðkenning með öryggislykli er virk' title: Öryggislyklar eru virkir omniauth_callbacks: diff --git a/config/locales/devise.it.yml b/config/locales/devise.it.yml index 5ea3aeac473923..19bd999aade12e 100644 --- a/config/locales/devise.it.yml +++ b/config/locales/devise.it.yml @@ -47,16 +47,19 @@ it: subject: 'Mastodon: Istruzioni di ripristino della password' title: Ripristino della password two_factor_disabled: - explanation: L'autenticazione a due fattori per il tuo profilo è stata disabilitata. L'accesso è ora possibile utilizzando solo l'indirizzo email e la password. + explanation: Il login è ora possibile utilizzando solo un indirizzo e-mail e una password. subject: 'Mastodon: Autenticazione a due fattori disabilitata' + subtitle: L'autenticazione a due fattori per il tuo account è stata disabilitata. title: A2F disabilitata two_factor_enabled: - explanation: L'autenticazione a due fattori è stata abilitata per il tuo profilo. Un token, generato dall'app TOTP collegata, sarà richiesto per l'accesso. + explanation: Un token generato dall'app TOTP accoppiata sarà richiesto per il login. subject: 'Mastodon: Autenticazione a due fattori abilitata' + subtitle: L'autenticazione a due fattori è stata abilitata per il tuo account. title: A2F abilitata two_factor_recovery_codes_changed: explanation: I precedenti codici di recupero sono stati annullati e dei nuovi sono stati generati. subject: 'Mastodon: Codici di recupero a due fattori rigenerati' + subtitle: I precedenti codici di recupero sono stati annullati e dei nuovi sono stati generati. title: Codici di recupero A2F cambiati unlock_instructions: subject: 'Mastodon: Istruzioni di sblocco' @@ -70,11 +73,13 @@ it: subject: 'Mastodon: Chiave di sicurezza eliminata' title: Una delle tue chiavi di sicurezza è stata eliminata webauthn_disabled: - explanation: L'autenticazione con le chiavi di sicurezza è stata disabilitata per il tuo profilo. L'accesso è ora possibile utilizzando solo il token, generato dall'app TOTP associata. + explanation: L'autenticazione con le chiavi di sicurezza è stata disabilitata per il tuo account. + extra: Il login è ora possibile utilizzando solo il token generato dall'app TOTP accoppiata. subject: 'Mastodon: Autenticazione con chiavi di sicurezza disabilitata' title: Chiavi di sicurezza disabilitate webauthn_enabled: - explanation: L'autenticazione con chiavi di sicurezza è stata abilitata per il tuo profilo. La tua chiave di sicurezza è ora utilizzabile per l'accesso. + explanation: L'autenticazione della chiave di sicurezza è stata abilitata per il tuo account. + extra: La tua chiave di sicurezza può ora essere utilizzata per il login. subject: 'Mastodon: Autenticazione con chiavi di sicurezza abilitata' title: Chiavi di sicurezza abilitate omniauth_callbacks: diff --git a/config/locales/devise.ja.yml b/config/locales/devise.ja.yml index ca8ac0584769bb..9a3ffd9c4d569f 100644 --- a/config/locales/devise.ja.yml +++ b/config/locales/devise.ja.yml @@ -47,16 +47,19 @@ ja: subject: 'Mastodon: パスワード再発行' title: パスワード再発行 two_factor_disabled: - explanation: あなたのアカウントの二要素認証が無効化されました。メールとパスワードのみでログインできます。 + explanation: メールアドレスとパスワードのみでログイン可能になりました。 subject: 'Mastodon: 二要素認証が無効になりました' + subtitle: 二要素認証が無効になっています。 title: 二要素認証が無効化されました two_factor_enabled: - explanation: あなたのアカウントの二要素認証が有効化されました。ログインするには TOTP アプリで生成されたコードが必要です。 + explanation: ログインには設定済みのTOTPアプリが生成したトークンが必要です。 subject: 'Mastodon: 二要素認証が有効になりました' + subtitle: 二要素認証が有効になりました。 title: 二要素認証が有効化されました two_factor_recovery_codes_changed: explanation: 以前のリカバリーコードが無効化され、新しいコードが生成されました。 subject: 'Mastodon: 二要素認証のリカバリーコードが再生成されました' + subtitle: 以前のリカバリーコードが無効化され、新しいコードが生成されました。 title: 二要素認証のリカバリーコードが変更されました unlock_instructions: subject: 'Mastodon: アカウントのロックの解除' @@ -70,11 +73,13 @@ ja: subject: 'Mastodon: セキュリティキーが削除されました' title: セキュリティキーが削除されました webauthn_disabled: - explanation: アカウントのセキュリティキーによる認証が無効になりました。ペアリングされたTOTPアプリによって生成されたトークンのみを使用してログインが可能になりました。 + explanation: セキュリティキー認証が無効になっています。 + extra: 設定済みのTOTPアプリが生成したトークンのみでログインできるようになりました。 subject: 'Mastodon: セキュリティキー認証が無効になりました' title: セキュリティキーは無効になっています webauthn_enabled: - explanation: あなたのアカウントでセキュリティキー認証が有効になりました。セキュリティキーをログインに使用できるようになりました。 + explanation: セキュリティキー認証が有効になりました。 + extra: ログインにセキュリティキーを使用できるようになりました。 subject: 'Mastodon: セキュリティキー認証が有効になりました' title: セキュリティキーは有効になっています omniauth_callbacks: diff --git a/config/locales/devise.kab.yml b/config/locales/devise.kab.yml index eb599e55e82628..2f60629fd70cbb 100644 --- a/config/locales/devise.kab.yml +++ b/config/locales/devise.kab.yml @@ -47,11 +47,9 @@ kab: subject: 'Mastodon: Iwellihen n uwennez n wawal uffir' title: Aɛiwed n wawal uffir two_factor_disabled: - explanation: Asesṭeb s snat n tarayin insa i umiḍan-ik·im. Tzemreḍ ad teqnneḍ tura s imayl d wawal uffir kan. subject: 'Mastodon: Asesteb s snat n tarrayin yensa' title: Asesteb s snat n tarrayin insa two_factor_enabled: - explanation: Asesṭeb s snat n tarayin yermed i umiḍan-ik·im. anekcum isra tangalt akken ad yeddu. subject: 'Mastodon: Asesteb s snat n tarrayin yermed' title: Asesteb s snat n tarrayin irmed two_factor_recovery_codes_changed: diff --git a/config/locales/devise.kk.yml b/config/locales/devise.kk.yml index 7ddeb86047e8c0..06fad30aec55e1 100644 --- a/config/locales/devise.kk.yml +++ b/config/locales/devise.kk.yml @@ -47,11 +47,9 @@ kk: subject: 'Mastodon: Құпиясөзді қалпына келтіру нұсқаулықтары' title: Құпиясөзді қалпына келтіру two_factor_disabled: - explanation: Екі факторлы аутентификация сіздің аккаунтыңыз үшін жабық. Email адресіңіз және құпиясөзіңіз арқылы кіруіңізге болады. subject: 'Mastodon: Екі факторлы аутентификация жабық' title: 2FA жабық two_factor_enabled: - explanation: Екі факторлы аутентификация аккаунтыңызға қосылды. TOTP арқылы жасалған токен міндетті кіруіңіз үшін. subject: 'Mastodon: Екі факторлы аутентификация ашық' title: 2FA ашық two_factor_recovery_codes_changed: diff --git a/config/locales/devise.ko.yml b/config/locales/devise.ko.yml index 65f660f1050317..88865aec5840b3 100644 --- a/config/locales/devise.ko.yml +++ b/config/locales/devise.ko.yml @@ -47,11 +47,9 @@ ko: subject: 'Mastodon: 암호 재설정 설명' title: 암호 재설정 two_factor_disabled: - explanation: 당신의 계정에 설정된 이중 인증이 비활성화 되었습니다. 이제 이메일과 암호만으로 로그인이 가능합니다. subject: '마스토돈: 이중 인증 비활성화' title: 2FA 비활성화 됨 two_factor_enabled: - explanation: 당신의 계정에 이중 인증이 활성화되었습니다. 로그인시 페어링된 T-OTP 앱에서 생성된 토큰이 필요합니다. subject: '마스토돈: 이중 인증 활성화' title: 2FA 활성화 됨 two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ ko: subject: '마스토돈: 보안 키 삭제' title: 보안 키가 삭제되었습니다 webauthn_disabled: - explanation: 보안 키를 이용한 인증이 당신의 계정에 대해 비활성화 되어 있습니다. TOTP 앱의 토큰만으로 로그인 할 수 있습니다. subject: '마스토돈: 보안 키를 이용한 인증이 비활성화 됨' title: 보안 키 비활성화 됨 webauthn_enabled: - explanation: 보안 키 인증이 당신의 계정에 대해 활성화 되어 있습니다. 보안 키를 통해 로그인 할 수 있습니다. subject: '마스토돈: 보안 키 인증 활성화 됨' title: 보안 키 활성화 됨 omniauth_callbacks: diff --git a/config/locales/devise.ku.yml b/config/locales/devise.ku.yml index 6debd96e05194c..33a868a8a5e167 100644 --- a/config/locales/devise.ku.yml +++ b/config/locales/devise.ku.yml @@ -51,11 +51,9 @@ ku: subject: 'Mastodon: rêwerzên jê birina pêborîn' title: Borînpeyv ji nû ve saz bike two_factor_disabled: - explanation: Ji bo ajimêrê te piştrastkirina du-faktorî hat asteng kirin. Niha tu tenê bi navnîşana e-name û borînpeyva xwe dikarî têketinê bikî. subject: 'Mastodon: piştrastkirina du- faktorî neçalak bike' title: 2FA Neçalak e two_factor_enabled: - explanation: Piştrastkirinê du-faktorî ya ajimêrê te hat çalak kirin. Ji bo têketinê ji alî sepanê cotkirî TOTP ve hewceyî nîşanderek heye. subject: 'Mastodon: piştrastkirina du-faktorî hat çalak kirin' title: 2FA Çalak e two_factor_recovery_codes_changed: @@ -74,11 +72,9 @@ ku: subject: 'Mastodon: Kilîta ewlehiyê hate jêbirin' title: Yek ji kilîta ewlehiyê yên te hate jêbirin webauthn_disabled: - explanation: Rastandina kilîta ewlehiyê hate çalakkirin bo ajimêra te. kilîta te ya ewlehiyê niha bo têketinê dikarê bê karanîn. Têketin niha gengaz e ku mirov tenê nîşana ku ji hêla sepana cotkirî ya TOTP ve hatî avakirin bi kar bîne. subject: 'Mastodon: Rastandin bi kilîta ewlehiyê re nehate çalakirin' title: Kilîta ewlehiyê neçalak e webauthn_enabled: - explanation: Rastandina kilîta ewlehiyê hate çalakkirin bo ajimêra te. kilîta te ya ewlehiyê niha bo têketinê dikarê bê karanîn. subject: 'Mastodon: Rastandina kilîta ewlehiyê hate çalakkirin' title: Kilîta ewlehiyê çalak e omniauth_callbacks: diff --git a/config/locales/devise.lad.yml b/config/locales/devise.lad.yml index 63933b80fc71d6..bec76d82f90bc2 100644 --- a/config/locales/devise.lad.yml +++ b/config/locales/devise.lad.yml @@ -47,16 +47,15 @@ lad: subject: 'Mastodon: Instruksyones para reinisyar kod' title: Reinisyar kod two_factor_disabled: - explanation: La autentifikasyon de dos pasos para tu kuento a sido inkapasitada. Agora puedes konektarte solamente uzando el adreso de posta elektronika i el kod. subject: 'Mastodon: La autentifikasyon de dos pasos esta inkapasitada' title: Autentifikasyon 2FA inkapasitada two_factor_enabled: - explanation: La autentifikasyon de dos pasos para tu kuento a sido kapasitada. Se rekiere un token djenerado por la aplikasyon TOTP konektada para entrar. subject: 'Mastodon: La autentifikasyon de dos pasos esta kapasitada' title: Autentifikasyon 2FA aktivada two_factor_recovery_codes_changed: explanation: Los kodiches de rekuperasyon previos tienen sido invalidados i se djeneraron kodiches muevos. subject: 'Mastodon: Los kodiches de rekuperasyon de dos pasos fueron rejenerados' + subtitle: Los kodiches de rekuperasyon previos tienen sido invalidados i se djeneraron kodiches muevos. title: Kodiches de rekuperasyon 2FA trokados unlock_instructions: subject: 'Mastodon: Instruksyones para dezblokar' @@ -70,11 +69,9 @@ lad: subject: 'Mastodon: Yave de sigurita supremida' title: Una de tus yaves de sigurita tiene sido supremida webauthn_disabled: - explanation: La autentifikasyon kon yaves de sigurita a sido inkapasitada para tu kuento. Agora el inisyo de sesyon solo es posivle utilizando el token djeenerado por la aplikasyon TOTP konektada. subject: 'Mastodon: autentifikasyon kon yaves de sigurita inkapasitada' title: Yaves de sigurita inkapasitadas webauthn_enabled: - explanation: La autentifikasyon kon yave de sigurita a sido kapasitada para tu kuento. Agora tu yave de sigurita puede ser utilizada para inisyar sesyon. subject: 'Mastodon: Autentifikasyon de yave de sigurita aktivada' title: Yaves de sigurita kapasitadas omniauth_callbacks: diff --git a/config/locales/devise.lt.yml b/config/locales/devise.lt.yml index 5429b217d0ac3a..3fba5ed08e909c 100644 --- a/config/locales/devise.lt.yml +++ b/config/locales/devise.lt.yml @@ -47,16 +47,19 @@ lt: subject: 'Mastodon: slaptažodžio keitimo instrukcijos' title: Slaptažodžio keitimas two_factor_disabled: - explanation: Dviejų tapatybės patikrinimas tavo paskyrai buvo išjungtas. Prisijungimas dabar galimas naudojant tik el. pašto adresą ir slaptažodį. + explanation: Prisijungimas dabar galimas naudojant tik el. pašto adresą ir slaptažodį. subject: 'Mastodon: dviejų tapatybės patikrinimas išjungtas' + subtitle: Dviejų tapatybės patikrinimas tavo paskyrai buvo išjungtas. title: 2FA išjungta two_factor_enabled: - explanation: Tavo paskyrai įgalintas dvejų tapatybės patikrinimas. Prisijungiant reikės susietos TOTP programėlės sugeneruoto priegos rakto. + explanation: Prisijungiant reikės susietos TOTP programėlės sugeneruoto priegos rakto. subject: 'Mastodon: dviejų tapatybės patikrinimas įgalintas' + subtitle: Tavo paskyrai įjungtas dviejų tapatybės patikrinimas. title: 2FA įgalinta two_factor_recovery_codes_changed: explanation: Ankstesnieji atkūrimo kodai yra negaliojantys ir sugeneruojami nauji. subject: 'Mastodon: dviejų tapatybės atkūrimo kodai iš naujo sugeneruoti' + subtitle: Ankstesnieji atkūrimo kodai yra negaliojantys ir sugeneruojami nauji. title: Pakeisti 2FA atkūrimo kodai unlock_instructions: subject: 'Mastodon: atrakinimo instrukcijos' @@ -70,11 +73,13 @@ lt: subject: 'Mastodon: saugumo raktas ištrintas' title: Vienas iš tavo saugumo raktų buvo ištrintas webauthn_disabled: - explanation: Tavo paskyrai buvo išjungtas tapatybės nustatymas naudojant saugumo raktus. Prisijungimas dabar galimas naudojant tik susietos TOTP programėlės sugeneruotą prieigos raktą. + explanation: Tavo paskyrai išjungtas tapatybės nustatymas naudojant saugumo raktus. + extra: Prisijungimas dabar galimas naudojant tik susietos TOTP programėlės sugeneruotą prieigos raktą. subject: 'Mastodon: tapatybės nustatymas naudojant saugumo raktai išjungta' title: Saugumo raktai išjungti webauthn_enabled: - explanation: Saugumo rakto tapatybės nustatymas tavo paskyrai įgalintas. Dabar prisijungimui galima naudoti saugumo raktą. + explanation: Tavo paskyrai įjungtas saugumo rakto tapatybės nustatymas. + extra: Tavo saugumo raktą dabar galima naudoti prisijungimui. subject: 'Mastodon: saugumo rakto tapatybės nustatymas įgalintas' title: Saugumo raktai įgalinti omniauth_callbacks: diff --git a/config/locales/devise.lv.yml b/config/locales/devise.lv.yml index e61e1b7fd95a9d..ed4b4fb8c6e5c7 100644 --- a/config/locales/devise.lv.yml +++ b/config/locales/devise.lv.yml @@ -47,11 +47,9 @@ lv: subject: 'Mastodon: Norādījumi paroles atiestatīšanai' title: Paroles atiestatīšana two_factor_disabled: - explanation: Tavam kontam divfaktoru autentifikācija ir atspējota. Pieteikšanās tagad ir iespējama, izmantojot tikai e-pasta adresi un paroli. subject: 'Mastodon: Divfaktoru autentifikācija atspējota' title: 2FA atspējota two_factor_enabled: - explanation: Tavam kontam ir iespējota divfaktoru autentifikācija. Lai pieteiktos, būs nepieciešams kods, ko ģenerējusi pārī savienotā TOTP lietotne. subject: 'Mastodon: Divfaktoru autentifikācija iespējota' title: 2FA iespējota two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ lv: subject: 'Mastodon: Drošības atslēga izdzēsta' title: Viena no tavām drošības atslēgām tika izdzēsta webauthn_disabled: - explanation: Tavam kontam ir atspējota autentifikācija ar drošības atslēgām. Pieteikšanās tagad ir iespējama, izmantojot tikai kodu, ko ģenerējusi pārī savienotā TOTP lietotne. subject: 'Mastodon: Autentifikācija ar drošības atslēgām ir atspējota' title: Drošības atslēgas atspējotas webauthn_enabled: - explanation: Tavam kontam ir iespējota drošības atslēgas autentifikācija. Tavu drošības atslēgu tagad var izmantot, lai pieteiktos. subject: 'Mastodon: Drošības atslēgas autentifikācija iespējota' title: Drošības atslēgas iespējotas omniauth_callbacks: diff --git a/config/locales/devise.ms.yml b/config/locales/devise.ms.yml index 30eceb239d56f5..da18d1896ec38a 100644 --- a/config/locales/devise.ms.yml +++ b/config/locales/devise.ms.yml @@ -47,11 +47,9 @@ ms: subject: 'Mastodon: Arahan set semula kata laluan' title: Set semula kata laluan two_factor_disabled: - explanation: Pengesahan dwifaktor untuk akaun anda telah dilumpuhkan. Log masuk kini dibenarkan dengan hanya menggunakan alamat e-mel dan kata laluan. subject: 'Mastodon: Pengesahan dwifaktor dilumpuhkan' title: 2FA dinyahaktifkan two_factor_enabled: - explanation: Pengesahan dwifaktor untuk akaun anda telah didayakan. Satu token yang dijanakan oleh aplikasi TOTP diperlukan untuk melog masuk. subject: 'Mastodon: Pengesahan dwifaktor didayakan' title: 2FA diaktifkan two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ ms: subject: 'Mastodon: Kunci keselamatan dihapuskan' title: Salah satu daripada kunci keselamatan anda telah dihapuskan webauthn_disabled: - explanation: Pengesahan dengan kunci keselamatan untuk akaun anda telah dilumpuhkan. Log masuk kini dibenarkan dengan hanya menggunakan token yang dijanakan oleh aplikasi TOTP. subject: 'Mastodon: Pengesahan dengan kunci keselamatan dilumpuhkan' title: Kunci keselamatan dilumpuhkan webauthn_enabled: - explanation: Pengesahan kunci keselamatan untuk akaun anda kini didayakan. Kunci keselamatan anda kini boleh digunakan untuk melog masuk. subject: 'Mastodon: Pengesahan kunci keselamatan didayakan' title: Kunci keselamatan didayakan omniauth_callbacks: diff --git a/config/locales/devise.my.yml b/config/locales/devise.my.yml index 04d744cf2bd775..126ecd74047d15 100644 --- a/config/locales/devise.my.yml +++ b/config/locales/devise.my.yml @@ -47,11 +47,9 @@ my: subject: 'Mastodon: စကားဝှက်ညွှန်ကြားချက် ပြန်လည်သတ်မှတ်မည်' title: စကားဝှက်ပြန်လည်သတ်မှတ်မည် two_factor_disabled: - explanation: သင့်အကောင့်အတွက် နှစ်ဆင့်ခံလုံခြုံရေးစနစ်အထောက်အထားပြခြင်းကို ပိတ်ထားသည်။ အီးမေးလ်လိပ်စာနှင့် စကားဝှက်ကိုသာ အသုံးပြု၍ အကောင့်ဝင်ရောက်နိုင်ပါသည်။ subject: 'Mastodon: နှစ်ဆင့်ခံလုံခြုံရေးစနစ်ပိတ်ထားသည်' title: နှစ်ဆင့်ခံလုံခြုံရေးစနစ်ပိတ်ထားသည် two_factor_enabled: - explanation: သင့်အကောင့်အတွက် နှစ်ဆင့်ခံလုံခြုံရေးစနစ်အထောက်အထားပြခြင်းကို ဖွင့်ထားသည်။ TOTP အက်ပ်မှ ထုတ်ပေးသည့် တိုကင်တစ်ခုမှာ အကောင့်ဝင်ရန်အတွက် လိုအပ်ပါသည်။ subject: 'Mastodon: နှစ်ဆင့်ခံလုံခြုံရေးစနစ်ဖွင့်ထားသည်' title: နှစ်ဆင့်ခံလုံခြုံရေးစနစ်ဖွင့်ထားသည် two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ my: subject: 'Mastodon: လုံခြုံရေးသော့ချက် ဖျက်လိုက်ပါပြီ' title: လုံခြုံရေးသော့ချက်များထဲမှတစ်ခု ဖျက်လိုက်ပါပြီ webauthn_disabled: - explanation: သင့်အကောင့်အတွက် လုံခြုံရေးကီးများဖြင့် အထောက်အထားပြခြင်းကို ပိတ်ထားသည်။ TOTP အက်ပ်မှထုတ်ပေးသည့် တိုကင်ကိုသာ အသုံးပြု၍ အကောင့်ဝင်ရောက်နိုင်ပါသည်။ subject: Mastodon - လုံခြုံရေးကီးများဖြင့် အထောက်အထားစိစစ်ခြင်းကို ပိတ်ထားသည် title: လုံခြုံရေးသော့ချက်များ ပိတ်ပြီးပါပြီ webauthn_enabled: - explanation: သင့်အကောင့်အတွက် လုံခြုံရေးကီး အထောက်အထားစိစစ်ခြင်းကို ဖွင့်ထားသည်။ အကောင့်ဝင်ရန်အတွက် သင်၏လုံခြုံရေးကီးကို ယခုအသုံးပြုနိုင်ပါပြီ။ subject: Mastodon - လုံခြုံရေးကီး အထောက်အထားစိစစ်ခြင်းကို ဖွင့်ထားသည် title: လုံခြုံရေးသော့ချက်များ ဖွင့်ပြီးပါပြီ omniauth_callbacks: diff --git a/config/locales/devise.nl.yml b/config/locales/devise.nl.yml index 1b5081fe8c58da..33d777e2ccc512 100644 --- a/config/locales/devise.nl.yml +++ b/config/locales/devise.nl.yml @@ -47,16 +47,19 @@ nl: subject: 'Mastodon: Wachtwoord opnieuw instellen' title: Wachtwoord opnieuw instellen two_factor_disabled: - explanation: Tweestapsverificatie voor jouw account is uitgeschakeld. Je kunt nu alleen inloggen met een e-mailadres en wachtwoord. + explanation: Je kunt nu inloggen met alleen een e-mailadres en wachtwoord. subject: 'Mastodon: Tweestapsverificatie uitgeschakeld' + subtitle: Tweestapsverificatie voor je account is uitgeschakeld. title: Tweestapsverificatie uitgeschakeld two_factor_enabled: - explanation: Tweestapsverificatie voor jouw account is ingeschakeld. Om te kunnen inloggen is een door een tweestapsverificatie-app genereerde toegangscode nodig. + explanation: Je hebt een door de authenticatie-app gegeneerde toegangscode nodig om in te loggen. subject: 'Mastodon: Tweestapsverificatie ingeschakeld' + subtitle: Tweestapsverificatie voor je account is ingeschakeld. title: Tweestapsverificatie ingeschakeld two_factor_recovery_codes_changed: explanation: De vorige herstelcodes zijn ongeldig gemaakt en nieuwe zijn aangemaakt. subject: 'Mastodon: Tweestaps-herstelcodes zijn opnieuw aangemaakt' + subtitle: De vorige herstelcodes zijn ongeldig gemaakt en er zijn nieuwe gegenereerd. title: Herstelcodes tweestapsverificatie veranderd unlock_instructions: subject: 'Mastodon: Instructies om opschorten account ongedaan te maken' @@ -70,11 +73,13 @@ nl: subject: 'Mastodon: Beveiligingssleutel verwijderd' title: Een van jouw beveiligingssleutels is verwijderd webauthn_disabled: - explanation: Verificatie met beveiligingssleutels is uitgeschakeld voor jouw account. Inloggen is nu alleen mogelijk met het gebruik van een door een gepaarde TOTP-app genereerde sleutel. + explanation: Verificatie met beveiligingssleutels is uitgeschakeld voor je account. + extra: Het is nu alleen mogelijk om te te loggen met een door de authenticatie-app gegeneerde toegangscode. subject: 'Mastodon: Verificatie met beveiligingssleutels is uitgeschakeld' title: Beveiligingssleutels uitgeschakeld webauthn_enabled: - explanation: Verificatie met beveiligingssleutels is ingeschakeld voor jouw account. Jouw beveiligingssleutel kan nu gebruikt worden om in te loggen. + explanation: Verificatie met beveiligingssleutels is ingeschakeld voor je account. + extra: Jouw beveiligingssleutel kan nu gebruikt worden om in te loggen. subject: 'Mastodon: Verificatie met beveiligingssleutels is ingeschakeld' title: Beveiligingssleutels ingeschakeld omniauth_callbacks: diff --git a/config/locales/devise.nn.yml b/config/locales/devise.nn.yml index eee99284750fc2..acee9fdcdc7dcb 100644 --- a/config/locales/devise.nn.yml +++ b/config/locales/devise.nn.yml @@ -47,11 +47,9 @@ nn: subject: 'Mastodon: Instuksjonar for å endra passord' title: Attstilling av passord two_factor_disabled: - explanation: To-faktor-autentisering har vorte slått av for kontoen din. Det går no an logge inn med berre e-postadresse og passord. subject: 'Mastodon: To-faktor-autentisering deaktivert' title: 2FA deaktivert two_factor_enabled: - explanation: To-faktor-autentisering har vorte slått på for kontoen din. Ein kode frå den samankopla TOTP-appen er kravd for å logge inn. subject: 'Mastodon: To-faktor-autentisering aktivert' title: 2FA aktivert two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ nn: subject: 'Mastodon: Sikkerheitsnøkkel sletta' title: Ein av sikkerheitsnøklane dine har blitt sletta webauthn_disabled: - explanation: Du kan ikkje bruke tryggleiksnyklar til å logga inn på kontoen din. Du kan berre logga inn med koden frå tofaktor-appen som er kopla saman med brukarkontoen din. subject: 'Mastodon: Autentisering med sikkerheitsnøklar vart skrudd av' title: Sikkerheitsnøklar deaktivert webauthn_enabled: - explanation: Pålogging med tryggleiksnyklar er skrudd på. No kan du bruka nykelen din for å logga på. subject: 'Mastodon: Sikkerheitsnøkkelsautentisering vart skrudd på' title: Sikkerheitsnøklar aktivert omniauth_callbacks: diff --git a/config/locales/devise.no.yml b/config/locales/devise.no.yml index a5d6cad7a10611..0d824da8157ffb 100644 --- a/config/locales/devise.no.yml +++ b/config/locales/devise.no.yml @@ -47,11 +47,9 @@ subject: 'Mastodon: Hvordan nullstille passord' title: Nullstill passord two_factor_disabled: - explanation: Tofaktorautentisering for kontoen din har blitt skrudd av. Pålogging er nå mulig ved å bruke kun e-postadresse og passord. subject: 'Mastodon: Tofaktorautentisering deaktivert' title: 2FA deaktivert two_factor_enabled: - explanation: Tofaktorautentisering er aktivert for kontoen din. Et token som er generert av appen for tidsbasert engangspassord (TOTP) som er koblet til kontoen kreves for innlogging. subject: 'Mastodon: Tofaktorautentisering aktivert' title: 2FA aktivert two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ subject: 'Mastodon: Sikkerhetsnøkkel slettet' title: En av sikkerhetsnøklene dine har blitt slettet webauthn_disabled: - explanation: Autentisering med sikkerhetsnøkler er deaktivert for kontoen din. Innlogging er nå mulig ved hjelp av kun et token som er generert av engangspassord-appen som er koblet til kontoen. subject: 'Mastodon: Autentisering med sikkerhetsnøkler ble skrudd av' title: Sikkerhetsnøkler deaktivert webauthn_enabled: - explanation: Sikkerhetsnøkkel-autentisering er aktivert for din konto. Din sikkerhetsnøkkel kan nå brukes til innlogging. subject: 'Mastodon: Sikkerhetsnøkkelsautentisering ble skrudd på' title: Sikkerhetsnøkler aktivert omniauth_callbacks: diff --git a/config/locales/devise.oc.yml b/config/locales/devise.oc.yml index 16419cd1e34343..2640777e008939 100644 --- a/config/locales/devise.oc.yml +++ b/config/locales/devise.oc.yml @@ -47,11 +47,9 @@ oc: subject: Mastodon : consignas per reïnicializar lo senhal title: Reïnicializacion del senhal two_factor_disabled: - explanation: L’autentificacion dos factors per vòstre compte es estada desactivada. La connexion es ara possibla solament amb l’adreça electronica e lo senhal. subject: 'Mastodon : autentificacion dos factors desactivada' title: 2FA desactivat two_factor_enabled: - explanation: L’autentificacion dos factors es estada activada per vòstre compte. La connexion demandarà un geton generat per l’aplicacion TOTP associada. subject: 'Mastodon : autentificacion dos factor activada' title: 2FA activat two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ oc: subject: 'Mastodon : clau de seguretat suprimida' title: Una de vòstras claus de seguretats es estada suprimida webauthn_disabled: - explanation: L’autentificacion amb de claus de seguretat foguèt estada desactivada per vòstre compte. L’identificacion es ara possible en utilizan un geton generat per una aplicacion TOTP associada. subject: 'Mastodon : autentificacion amb claus de seguretat desactivada' title: Claus de seguretat desactivadas webauthn_enabled: - explanation: L’autentificacion amb de claus de seguretat foguèt estada activada per vòstre compte. Vòstra clau de seguretat pòt ara èsser utilizada per l’identificacion. subject: 'Mastodon : autentificacion via clau de seguretat activada' title: Claus de seguretat activadas omniauth_callbacks: diff --git a/config/locales/devise.pl.yml b/config/locales/devise.pl.yml index ff086888f3c137..a6d48f11ef0e09 100644 --- a/config/locales/devise.pl.yml +++ b/config/locales/devise.pl.yml @@ -47,16 +47,19 @@ pl: subject: 'Mastodon: Instrukcje ustawienia nowego hasła' title: Przywracanie hasła two_factor_disabled: - explanation: Uwierzytelnianie dwuskładnikowe dla Twojego konta zostało wyłączone. Możesz się teraz logować korzystając z samego adresu e-mail i hasła. + explanation: Logowanie teraz możliwe tylko adresem mejlowym i hasłem. subject: Mastodon – wyłączono uwierzytelnianie dwustopniowe + subtitle: Wyłączono uwierzytelnienie dwuskładnikowe dla twojego konta. title: Wyłączono 2FA two_factor_enabled: - explanation: Uwierzytelnianie dwuskładnikowe dla Twojego konta zostało włączone. Logując się, będziesz potrzebować tokenu z połączonej aplikacji TOTP. + explanation: Do zalogowanie potrzebny będzie token sparowanej aplikacji TOTP. subject: Mastodon – włączono uwierzytelnianie dwustopniowe + subtitle: Włączono uwierzytelnienie dwuskładnikowe dla twojego konta. title: Włączono 2FA two_factor_recovery_codes_changed: explanation: Poprzednie kody zapasowe zostały unieważnione, a nowe zostały wygenerowane. subject: Mastodon – wygenerowano nowe kody ratunkowe 2FA + subtitle: Unieważniono stare kody przywracania i wygenerowano nowe. title: Zmieniono kody odzyskiwania 2FA unlock_instructions: subject: 'Mastodon: Instrukcje odblokowania konta' @@ -70,11 +73,13 @@ pl: subject: 'Mastodon: Klucz bezpieczeństwa usunięty' title: Usunięto jeden z twoich kluczy bezpieczeństwa webauthn_disabled: - explanation: Uwierzytelnianie kluczem bezpieczeństwa zostało wyłączone dla Twojego konta. Logowanie jest teraz możliwe tylko przy użyciu tokenu generowanego przez sparowaną aplikację TOTP. + explanation: Wyłączono autoryzację kluczami bezpieczeństwa dla twojego konta. + extra: Logowanie teraz możliwe tylko tokenem wygenerowanym przez sparowaną aplikację TOTP. subject: 'Mastodon: Wyłączono uwierzytelnianie z kluczami bezpieczeństwa' title: Wyłączono klucze bezpieczeństwa webauthn_enabled: - explanation: Uwierzytelnianie klucza bezpieczeństwa zostało włączone dla Twojego konta. Klucz bezpieczeństwa może być teraz wykorzystywany do logowania. + explanation: Włączono autoryzację kluczami bezpieczeństwa dla twojego konta. + extra: Twój klucz bezpieczeństwa może być teraz użyty do logowania. subject: 'Mastodon: Włączono uwierzytelnianie z kluczami bezpieczeństwa' title: Włączono klucze bezpieczeństwa omniauth_callbacks: diff --git a/config/locales/devise.pt-BR.yml b/config/locales/devise.pt-BR.yml index 6345a103b81fe3..8b53f96514b5d7 100644 --- a/config/locales/devise.pt-BR.yml +++ b/config/locales/devise.pt-BR.yml @@ -47,16 +47,18 @@ pt-BR: subject: 'Mastodon: Instruções para alterar senha' title: Redefinir senha two_factor_disabled: - explanation: A autenticação de dois fatores para sua conta foi desativada. Agora é possível entrar apenas com seu endereço de e-mail e senha. + explanation: O ‘login’ agora é possível usando apenas o endereço de e-mail e senha. subject: 'Mastodon: Autenticação de dois fatores desativada' + subtitle: A autenticação de dois fatores foi desativada. title: 2FA desativada two_factor_enabled: - explanation: A autenticação de dois fatores foi ativada para sua conta. Um código gerado no aplicativo TOTP pareado será necessário para entrar. subject: 'Mastodon: Autenticação de dois fatores ativada' + subtitle: A autenticação de dois fatores foi ativada para sua conta. title: 2FA ativada two_factor_recovery_codes_changed: explanation: Os códigos de recuperação anteriores foram invalidados e novos códigos foram gerados. subject: 'Mastodon: Novos códigos de recuperação de dois fatores' + subtitle: Os códigos de recuperação anteriores foram invalidados, e novos códigos foram gerados. title: Códigos de recuperação de dois fatores alterados unlock_instructions: subject: 'Mastodon: Instruções de desbloqueio' @@ -70,11 +72,12 @@ pt-BR: subject: 'Mastodon: Chave de segurança excluída' title: Uma das suas chaves de segurança foi excluída webauthn_disabled: - explanation: A autenticação por chaves de segurança foi desativada para a sua conta. Agora é possível entrar apenas com seu código gerado no aplicativo TOTP pareado. + explanation: A autenticação por chaves de segurança foi desativada para sua conta. subject: 'Mastodon: Autenticação por chaves de segurança desativada' title: Chaves de segurança desativadas webauthn_enabled: - explanation: A autenticação por chave de segurança foi ativada para a sua conta. Sua chave de segurança agora pode ser usada para entrar. + explanation: Autenticação por chave de segurança foi ativada para sua conta. + extra: Sua chave de segurança agora pode ser usada para ‘login’. subject: 'Mastodon: Autenticação por chaves de segurança ativada' title: Chaves de segurança ativadas omniauth_callbacks: diff --git a/config/locales/devise.pt-PT.yml b/config/locales/devise.pt-PT.yml index 0571598ae0c93f..c169ddeb971887 100644 --- a/config/locales/devise.pt-PT.yml +++ b/config/locales/devise.pt-PT.yml @@ -47,16 +47,19 @@ pt-PT: subject: 'Mastodon: Instruções para redefinir a palavra-passe' title: Solicitar nova palavra-passe two_factor_disabled: - explanation: A autenticação em duas etapas para a sua conta foi desativada. É agora possível aceder apenas com o seu endereço de e-mail e palavra-passe. + explanation: O acesso agora é possível usando apenas o endereço de correio eletrónico e palavra-passe. subject: 'Mastodon: Autenticação de duas etapas desativada' + subtitle: A autenticação de dois fatores foi desativada para a sua conta. title: 2FA desativado two_factor_enabled: - explanation: A autenticação em duas etapas foi ativada para a sua conta. Um token, gerado pela aplicação TOTP emparelhada, será necessário para aceder. + explanation: Um token gerado pelo aplicativo TOTP emparelhado será necessário para login. subject: 'Mastodon: Autenticação em duas etapas ativada' + subtitle: A autenticação de dois fatores foi habilitada para sua conta. title: 2FA ativado two_factor_recovery_codes_changed: explanation: Os códigos de recuperação anteriores foram invalidados e novos foram gerados. subject: 'Mastodon: Gerados novos códigos de recuperação em duas etapas' + subtitle: Os códigos de recuperação anteriores foram invalidados e novos foram gerados. title: Códigos de recuperação 2FA alterados unlock_instructions: subject: 'Mastodon: Instruções para desbloquear a tua conta' @@ -70,11 +73,13 @@ pt-PT: subject: 'Mastodon: Chave de segurança eliminada' title: Uma das suas chaves de segurança foi eliminada webauthn_disabled: - explanation: A autenticação com chave de segurança foi desativada para a sua conta. Tornou-se possível aceder à sua conta usando apenas o token gerado pela aplicação TOTP emparelhada. + explanation: A autenticação com chaves de segurança foi desativada para sua conta. + extra: O login agora é possível usando apenas o token gerado pelo aplicativo TOTP emparelhado. subject: 'Mastodon: Autenticação com chave de segurança desativada' title: Chaves de segurança desativadas webauthn_enabled: - explanation: A autenticação com chave de segurança foi ativada para sua conta. A sua chave de segurança pode agora ser utilizada para aceder à sua conta. + explanation: A autenticação da chave de segurança foi habilitada para sua conta. + extra: Sua chave de segurança agora pode ser usada para login. subject: 'Mastodon: Autenticação com chave de segurança ativada' title: Chaves de segurança ativadas omniauth_callbacks: diff --git a/config/locales/devise.ro.yml b/config/locales/devise.ro.yml index d25d0f6b3e17f7..1a6a3ecd778de6 100644 --- a/config/locales/devise.ro.yml +++ b/config/locales/devise.ro.yml @@ -47,11 +47,9 @@ ro: subject: Instrucțiuni pentru resetarea parolei title: Resetare parolă two_factor_disabled: - explanation: Autentificarea în doi pași pentru contul tău a fost dezactivată. Autentificarea este posibilă acum folosind doar adresa de e-mail și parola. subject: Autentificare cu doi factori dezactivată title: 2FA dezactivat two_factor_enabled: - explanation: Autentificarea în doi pași a fost activată pentru contul dvs. Un token generat de aplicația TOTP împerecheată va fi necesar pentru autentificare. subject: Autentificare în doi pași activată title: 2FA activat two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ ro: subject: 'Mastodon: Cheie de securitate ștearsă' title: Una dintre cheile tale de securitate a fost ștearsă webauthn_disabled: - explanation: Autentificarea cu chei de securitate a fost dezactivată pentru contul tău. Conectarea este posibilă acum folosind doar token-ul generat de aplicația TOTP. subject: 'Mastodon: Autentificarea cu chei de securitate dezactivată' title: Chei de securitate dezactivate webauthn_enabled: - explanation: Autentificarea cheii de securitate a fost activată pentru contul tău. Cheia ta de securitate poate fi acum folosită pentru conectare. subject: 'Mastodon: Autentificarea cheii de securitate activată' title: Chei de securitate activate omniauth_callbacks: diff --git a/config/locales/devise.ru.yml b/config/locales/devise.ru.yml index d2903ce23d934d..ccbd13438d6257 100644 --- a/config/locales/devise.ru.yml +++ b/config/locales/devise.ru.yml @@ -47,11 +47,9 @@ ru: subject: 'Mastodon: Инструкция по сбросу пароля' title: Сброс пароля two_factor_disabled: - explanation: Для вашей учётной записи была отключена двухфакторная авторизация. Выполнить вход теперь можно используя лишь e-mail и пароль. subject: 'Mastodon: Двухфакторная авторизация отключена' title: 2ФА отключена two_factor_enabled: - explanation: Для вашей учётной записи была настроена двухфакторная авторизация. Отныне для входа потребуется также временный код из приложения-аутентификатора. subject: 'Mastodon: Настроена двухфакторная авторизация' title: 2ФА включена two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ ru: subject: 'Мастодон: Ключ Безопасности удален' title: Один из ваших защитных ключей был удален webauthn_disabled: - explanation: Аутентификация с помощью ключей безопасности отключена для вашей учётной записи. Теперь вход возможен с использованием только токена, сгенерированного в приложении TOTP. subject: 'Мастодон: Аутентификация с ключами безопасности отключена' title: Ключи безопасности отключены webauthn_enabled: - explanation: Для вашей учётной записи включена аутентификация по ключу безопасности. Теперь ваш ключ безопасности может быть использован для входа. subject: 'Мастодон: Включена аутентификация по ключу безопасности' title: Ключи безопасности включены omniauth_callbacks: diff --git a/config/locales/devise.sc.yml b/config/locales/devise.sc.yml index 02bcab0d111196..5486371a4c671a 100644 --- a/config/locales/devise.sc.yml +++ b/config/locales/devise.sc.yml @@ -47,11 +47,9 @@ sc: subject: 'Mastodon: Istrutziones pro resetare sa crae' title: Càmbiu de crae two_factor_disabled: - explanation: S'autenticatzione a duos fatores est istada disativada pro su contu tuo. Immoe podes intrare impreende isceti indiritzu de posta eletrònica e crae. subject: 'Mastodon: Autenticatzione a duos fatores disativada' title: 2FA disativada two_factor_enabled: - explanation: S'autenticatzione a duos fatores est istada ativada pro su contu tuo. Pro s'atzessu at èssere rechèdidu unu còdighe de autorizatzione generadu dae s'aplicatzione TOTP. subject: 'Mastodon: Autenticatzione a duos fatores ativada' title: 2FA ativada two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ sc: subject: 'Mastodon: Crae de seguresa cantzellada' title: Una de is craes de seguresa tuas est istada cantzellada webauthn_disabled: - explanation: S'autenticatzione cun craes de seguresa est istada disabilitada pro su contu tuo. S'intrada immoe est possìbile impreende isceti su getone ingendradu dae s'aplicatzione TOTP ligada. subject: 'Mastodon: Autenticatzione cun craes de seguresa disabilitada' title: Craes de seguresa disabilitadas webauthn_enabled: - explanation: S'autenticatzione cun crae de seguresa est istada abilitada pro su contu tuo. Sa crae de seguresa tua immoe si podet impreare pro intrare. subject: 'Mastodon: Autenticatzione cun sa crae de seguresa ativada' title: Craes de seguresa abilitadas omniauth_callbacks: diff --git a/config/locales/devise.sco.yml b/config/locales/devise.sco.yml index 8563b4ee24d5cf..1db6bbe30320d6 100644 --- a/config/locales/devise.sco.yml +++ b/config/locales/devise.sco.yml @@ -47,11 +47,9 @@ sco: subject: 'Mastodon: Reset passwird instructions' title: Passwird reset two_factor_disabled: - explanation: Twa factor authentication fir yer accoont haes been turnt aff. Login is noo possible uisin ainly a email address an passwird. subject: 'Mastodon: Twa-factor authentication turnt aff' title: 2FA turnt aff two_factor_enabled: - explanation: Twa-factor authentication haes been turnt on fir yer accoont. A token gien bi the pairt TOTP app wull be needit fir login. subject: 'Mastodon: Twa-factor authentication turnt on' title: 2FA turnt on two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ sco: subject: 'Mastodon: Security key deletit' title: Ane o yer security keys haes been deletit webauthn_disabled: - explanation: Authentication wi security keys haes been turnt aff on yer accoont. Login is noo possible uisin ainly the token generatit bi the pairt TOTP app. subject: 'Mastodon: Authentication wi security keys turnt aff' title: Security keys turnt aff webauthn_enabled: - explanation: Security key authentication haes been turnt on fir yer accoont. Yer security key kin noo be uised fir login. subject: 'Mastodon: Security key authentication turnt on' title: Security keys turnt on omniauth_callbacks: diff --git a/config/locales/devise.si.yml b/config/locales/devise.si.yml index 362f97b8a9b030..d0bfa719bc06d2 100644 --- a/config/locales/devise.si.yml +++ b/config/locales/devise.si.yml @@ -44,10 +44,8 @@ si: subject: 'මාස්ටඩන්: මුරපදය යළි සැකසීමේ උපදෙස්' title: මුරපදය යළි සැකසීම two_factor_disabled: - explanation: ඔබගේ ගිණුම සඳහා ද්වි-සාධක සත්‍යාපනය අබල කර ඇත. විද්‍යුත් තැපැල් ලිපිනය සහ මුරපදය පමණක් භාවිතයෙන් දැන් පුරනය විය හැක. title: ද්විපියවර අබලයි two_factor_enabled: - explanation: ඔබගේ ගිණුම සඳහා ද්වි-සාධක සත්‍යාපනය සක්‍රීය කර ඇත. යුගල කළ TOTP යෙදුම මගින් ජනනය කරන ලද ටෝකනයක් පුරනය වීමට අවශ්‍ය වනු ඇත. title: ද්විපියවර සබලයි two_factor_recovery_codes_changed: explanation: පෙර ප්‍රතිසාධන කේත අවලංගු කර නව ඒවා උත්පාදනය කර ඇත. @@ -65,10 +63,8 @@ si: subject: 'මාස්ටඩන්: ආරක්‍ෂණ යතුර මකා ඇත' title: ඔබගේ ආරක්ෂක යතුරු වලින් එකක් මකා ඇත webauthn_disabled: - explanation: ඔබගේ ගිණුම සඳහා ආරක්ෂක යතුරු සමඟ සත්‍යාපනය අබල කර ඇත. යුගල කළ TOTP යෙදුම මගින් ජනනය කරන ලද ටෝකනය පමණක් භාවිතයෙන් දැන් පුරනය විය හැක. title: ආරක්‍ෂණ යතුරු අබල කර ඇත webauthn_enabled: - explanation: ඔබගේ ගිණුම සඳහා ආරක්ෂක යතුරු සත්‍යාපනය සක්‍රීය කර ඇත. ඔබගේ ආරක්ෂක යතුර දැන් පුරනය වීම සඳහා භාවිතා කළ හැක. title: ආරක්‍ෂණ යතුරු සබල කර ඇත omniauth_callbacks: failure: '"%{reason}" නිසා %{kind} සිට ඔබව සත්‍යාපනය කළ නොහැක.' diff --git a/config/locales/devise.sk.yml b/config/locales/devise.sk.yml index e11c7f1db32710..3eb4b5304cf31f 100644 --- a/config/locales/devise.sk.yml +++ b/config/locales/devise.sk.yml @@ -47,11 +47,11 @@ sk: subject: 'Mastodon: Pokyny pre obnovu hesla' title: Nastav nové heslo two_factor_disabled: - explanation: Dvojfázové overovanie tvojho účtu bolo vypnuté. Teraz sa môžeš prihlásiť len pomocou emailu a hesla. + explanation: Prihlásenie je teraz možné iba pomocou emailu a hesla. subject: 'Mastodon: Dvojfázové overovanie vypnuté' + subtitle: Dvoj-faktorové overenie bolo pre tvoj účet vypnuté. title: Dvoj-faktorové overovanie vypnuté two_factor_enabled: - explanation: Dvojfázové overovanie bolo zapnuté pre tvoj účet. Pre prihlásenie budeš potrebovať token vygenerovaný pre TOTP aplikáciu, ktorá je spárovaná. subject: 'Mastodon: Dvojfázové overovanie zapnuté' title: Dvoj-faktorové overovanie zapnuté two_factor_recovery_codes_changed: @@ -70,11 +70,9 @@ sk: subject: 'Mastodon: Bezpečnostný kľúč odstránený' title: Jeden z vašich bezpečnostných kľúčov bol odstránený webauthn_disabled: - explanation: Overovanie pomocou bezpečnostných kľúčov bolo pre vaše konto vypnuté. Prihlásenie je teraz možné len pomocou tokenu vygenerovaného spárovanou aplikáciou TOTP. subject: 'Mastodon: Overovanie s vypnutými bezpečnostnými kľúčmi' title: Bezpečnostné kľúče sú vypnuté webauthn_enabled: - explanation: Pre vaše konto bolo povolené overovanie bezpečnostným kľúčom. Váš bezpečnostný kľúč teraz môžete použiť na prihlásenie. subject: 'Mastodon: Povolené overovanie bezpečnostného kľúča' title: Povolené bezpečnostné kľúče omniauth_callbacks: diff --git a/config/locales/devise.sl.yml b/config/locales/devise.sl.yml index be0f98ae1126a6..72269e48265772 100644 --- a/config/locales/devise.sl.yml +++ b/config/locales/devise.sl.yml @@ -47,11 +47,9 @@ sl: subject: 'Mastodon: navodila za ponastavitev gesla' title: Ponastavitev gesla two_factor_disabled: - explanation: Dvojno oz. dvofazno preverjanje pristnosti je za vaš račun onemogočeno. Prijava je zdaj možna le z e-poštnim naslovom in geslom. subject: 'Mastodon: dvojno preverjanje pristnosti je onemogočeno' title: 2FA onemogočeno two_factor_enabled: - explanation: Dvojno oz. dvofazno preverjanje pristnosti je za vaš račun omogočeno. Žeton, izdelan z aplikacijo TOTP, bo zahtevan zs prijavo. subject: 'Mastodon: dvojno preverjanje pristnosti je omogočeno' title: 2FA omogočeno two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ sl: subject: 'Mastodon: varnostna koda izbrisana' title: Ena od vaših varnostnih kod je bila izbrisana webauthn_disabled: - explanation: Overjanje pristnosti z varnostnimi kodami je za vaš račun onemogočeno. Prijava je zdaj možna le z uporabo žetona, ki ga izdela oparjena aplikacija TOTP. subject: 'Mastodon: overjanje pristnosti z varnosnimi kodami je onemogočeno' title: Varnostne kode onemogočene webauthn_enabled: - explanation: Overjanje z varnostno kodo je za vaš račun omogočeno. Svojo varnostno kodo lahko zdaj uporabite za prijavo. subject: 'Mastodon: preverjanje pristnosti z varnostno kodo je omogočeno' title: Varnostne kode omogočene omniauth_callbacks: diff --git a/config/locales/devise.sq.yml b/config/locales/devise.sq.yml index 6e2f1b41138501..7cea2f8e2e5c3f 100644 --- a/config/locales/devise.sq.yml +++ b/config/locales/devise.sq.yml @@ -47,11 +47,9 @@ sq: subject: 'Mastodon: Udhëzime ricaktimi fjalëkalimi' title: Ricaktim fjalëkalimi two_factor_disabled: - explanation: Mirëfilltësimi dyfaktorësh për llogarinë tuaj është çaktivizuar. Hyrja tanimë është e mundur vetëm duke përdorur adresën email dhe fjalëkalimin. subject: 'Mastodon: U çaktivizua mirëfilltësimi dyfaktorësh' title: 2FA u çaktivizua two_factor_enabled: - explanation: Mirëfilltësimi dyfaktorësh është aktivizuar për llogarinë tuaj. Për hyrje, do të kërkohet doemos një token i prodhuar nga aplikacioni TOTP i çiftuar. subject: 'Mastodon: U aktivizua mirëfilltësimi dyfaktorësh' title: 2FA u aktivizua two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ sq: subject: 'Mastodon: Fshirje kyçi sigurie' title: Një nga kyçet tuaj të sigurisë është fshirë webauthn_disabled: - explanation: Mirëfilltësimi me kyçe sigurie është çaktivizuar për llogarinë tuaj. Hyrja tani është e mundshme vetëm duke përdorur token-in e prodhuar nga aplikacioni TOTP i çiftuar. subject: 'Mastodon: U çaktivizua mirëfilltësimi me kyçe sigurie' title: U çaktivizuan kyçe sigurie webauthn_enabled: - explanation: Mirëfilltësimi përmes kyçesh sigurie është aktivizuar për llogarinë tuaj. Tani, për hyrje mund të përdoren kyçet tuaj të sigurisë. subject: 'Mastodon: U aktivizua mirëfilltësim me kyçe sigurie' title: U aktivizuan kyçe sigurie omniauth_callbacks: diff --git a/config/locales/devise.sr-Latn.yml b/config/locales/devise.sr-Latn.yml index 40f3d51c30ffb1..c48ed87dca6b88 100644 --- a/config/locales/devise.sr-Latn.yml +++ b/config/locales/devise.sr-Latn.yml @@ -47,16 +47,19 @@ sr-Latn: subject: 'Mastodont: Uputstvo za resetovanje lozinke' title: Lozinka resetovana two_factor_disabled: - explanation: Dvofaktorska autentifikacija za vaš nalog je onemogućena. Prijava je sada moguća samo pomoću imejla i lozinke. + explanation: Prijavljivanje je sada moguće koristeći samo adresu e-pošte i lozinku. subject: 'Mastodon: Dvofaktorska autentifikacija je onemogućena' + subtitle: Dvofaktorska autentifikacija za vaš nalog je onemogućena. title: 2FA isključena two_factor_enabled: - explanation: Dvofaktorska autentifikacija je omogućena za vaš nalog. Za prijavu će biti potreban token koji generiše uparena TOTP aplikacija. + explanation: Za prijavljivanje će biti potreban token koji generiše uparena aplikacija TOTP. subject: 'Mastodon: Dvofaktorska autentifikacija je omogućena' + subtitle: Dvofaktorska autentifikacija je omogućena za vaš nalog. title: 2FA uključena two_factor_recovery_codes_changed: explanation: Prethodni kodovi za oporavak su poništeni i generisani su novi. subject: 'Mastodon: Ponovo su generisani kodovi za oporavak' + subtitle: Prethodni kodovi za oporavak su poništeni i generisani su novi. title: 2FA kodovi oporavka promenjeni unlock_instructions: subject: 'Mastodont: Uputstvo za otključavanje korisničkog naloga' @@ -70,11 +73,13 @@ sr-Latn: subject: 'Mastodon: Sigurnosni ključ je izbrisan' title: Jedan od vaših bezbednosnih ključeva je izbrisan webauthn_disabled: - explanation: Autentifikacija pomoću bezbednosnih ključeva je onemogućena za vaš nalog. Prijava je sada moguća samo pomoću tokena koji generiše uparena TOTP aplikacija. + explanation: Potvrda identiteta pomoću bezbednosnih ključeva je onemogućena za vaš nalog. + extra: Prijavljivanje je sada moguće koristeći samo token koji generiše uparena aplikacija TOTP. subject: 'Mastodon: Autentifikacija sa sigurnosnim ključevima onemogućena' title: Sigurnosni ključevi su onemogućeni webauthn_enabled: - explanation: Autentifikacija sa bezbednosnim ključem je omogućena za vaš nalog. Vaš sigurnosni ključ se sada može koristiti za prijavljivanje. + explanation: Autentifikacija pomoću bezbednosnog ključa je omogućena za vaš nalog. + extra: Vaš bezbednosni ključ se sada može koristiti za prijavljivanje. subject: 'Mastodon: Omogućena autentifikacija sa bezbednim ključem' title: Sigurnosni ključevi su omogućeni omniauth_callbacks: diff --git a/config/locales/devise.sr.yml b/config/locales/devise.sr.yml index f61431de607ddc..3e49cf97eeb5a6 100644 --- a/config/locales/devise.sr.yml +++ b/config/locales/devise.sr.yml @@ -47,16 +47,19 @@ sr: subject: 'Mastodon: Упутство за ресетовање лозинке' title: Лозинка ресетована two_factor_disabled: - explanation: Двофакторска аутентификација за ваш налог је онемогућена. Пријава је сада могућа само помоћу имејла и лозинке. + explanation: Пријављивање је сада могуће користећи само адресу е-поште и лозинку. subject: 'Mastodon: Двофакторска аутентификација је онемогућена' + subtitle: Двофакторска аутентификација за ваш налог је онемогућена. title: 2FA искључена two_factor_enabled: - explanation: Двофакторска аутентификација је омогућена за ваш налог. За пријаву ће бити потребан токен који генерише упарена ТОТП апликација. + explanation: За пријављивање ће бити потребан токен који генерише упарена апликација TOTP. subject: 'Mastodon: Двофакторска аутентификација је омогућена' + subtitle: Двофакторска аутентификација је омогућена за ваш налог. title: 2FA укључена two_factor_recovery_codes_changed: explanation: Претходни кодови за опоравак су поништени и генерисани су нови. subject: 'Mastodon: Поново су генерисани кодови за опоравак' + subtitle: Претходни кодови за опоравак су поништени и генерисани су нови. title: 2FA кодови опоравка промењени unlock_instructions: subject: 'Mastodon: Упутство за откључавање корисничког налога' @@ -70,11 +73,13 @@ sr: subject: 'Mastodon: Сигурносни кључ је избрисан' title: Један од ваших безбедносних кључева је избрисан webauthn_disabled: - explanation: Аутентификација помоћу безбедносних кључева је онемогућена за ваш налог. Пријава је сада могућа само помоћу токена који генерише упарена ТОТП апликација. + explanation: Потврда идентитета помоћу безбедносних кључева је онемогућена за ваш налог. + extra: Пријављивање је сада могуће користећи само токен који генерише упарена апликација TOTP. subject: 'Mastodon: Аутентификација са сигурносним кључевима онемогућена' title: Сигурносни кључеви су онемогућени webauthn_enabled: - explanation: Аутентификација са безбедносним кључем је омогућена за ваш налог. Ваш сигурносни кључ се сада може користити за пријављивање. + explanation: Аутентификација помоћу безбедносног кључа је омогућена за ваш налог. + extra: Ваш безбедносни кључ се сада може користити за пријављивање. subject: 'Mastodon: Омогућена аутентификација са безбедним кључем' title: Сигурносни кључеви су омогућени omniauth_callbacks: diff --git a/config/locales/devise.sv.yml b/config/locales/devise.sv.yml index e02983ad5f294d..b089f214271432 100644 --- a/config/locales/devise.sv.yml +++ b/config/locales/devise.sv.yml @@ -47,16 +47,19 @@ sv: subject: 'Mastodon: Instruktioner för återställning av lösenord' title: Lösenordsåterställning two_factor_disabled: - explanation: Tvåfaktorsautentisering för ditt konto har inaktiverats. Det är nu möjligt att logga in med enbart e-postadress och lösenord. + explanation: Inloggning är nu möjlig med endast e-postadress och lösenord. subject: 'Mastodon: Tvåfaktorsautentisering inaktiverad' + subtitle: Tvåfaktorsautentisering för ditt konto har inaktiverats. title: 2FA inaktiverad two_factor_enabled: - explanation: Tvåfaktorsautentisering har aktiverats för ditt konto. En token som genereras av en kopplad TOTP-app kommer att krävas vid inloggning. + explanation: En token skapad av den parkopplade TOTP-appen kommer att krävas för inloggning. subject: 'Mastodon: Tvåfaktorsautentisering aktiverad' + subtitle: Tvåfaktorsautentisering har aktiverats för ditt konto. title: 2FA aktiverad two_factor_recovery_codes_changed: explanation: De tidigare återställningskoderna har ogiltigförklarats och nya har genererats. subject: Mastodon Tvåfaktors-återställningskoder genererades på nytt + subtitle: De tidigare återhämtningskoderna har ogiltigförklarats och nya har skapats. title: 2FA-återställningskoder ändrades unlock_instructions: subject: 'Mastodon: Lås upp instruktioner' @@ -70,11 +73,10 @@ sv: subject: 'Mastodon: Säkerhetsnyckeln borttagen' title: En av dina säkerhetsnycklar har raderats webauthn_disabled: - explanation: Autentisering med säkerhetsnycklar till ditt konto har inaktiverats. Inloggning är nu endast möjligt med den token som genereras av den sammankopplade TOTP-appen. + explanation: Autentisering med säkerhetsnycklar har inaktiverats för ditt konto. subject: 'Mastodon: Autentisering med säkerhetsnycklar är inaktiverat' title: Säkerhetsnycklar inaktiverade webauthn_enabled: - explanation: Autentisering med säkerhetsnyckel till ditt konto har aktiverats. Din säkerhetsnyckel kan nu användas för inloggning. subject: 'Mastodon: Autentisering med säkerhetsnyckel är aktiverat' title: Säkerhetsnycklar aktiverade omniauth_callbacks: diff --git a/config/locales/devise.ta.yml b/config/locales/devise.ta.yml index d4b4eeefc6eb40..a0e6187ec42fdb 100644 --- a/config/locales/devise.ta.yml +++ b/config/locales/devise.ta.yml @@ -47,11 +47,9 @@ ta: subject: 'மாஸ்டோடான்: கடவுச்சொல்லை மீட்டமைப்பதற்கான வழிமுறைகள்' title: கடவுச்சொல் மீட்டமைப்பு two_factor_disabled: - explanation: உங்களுடைய கணக்கிற்கான இரண்டு கட்டப் பாதுகாப்பு முடக்கப்பட்டுள்ளது. உங்கள் மின்னஞ்சல் முகவரி மற்றும் கடவுச்சொல் மூலமாக மட்டுமே தற்பொழுது உள்நுழைய முடியும். subject: 'மாஸ்டடான்: இரண்டு கட்டப் பாதுகாப்பு முடக்கப்பட்டுள்ளது' title: 2FA உபயோகத்தில் இல்லை two_factor_enabled: - explanation: உங்களுடைய கணக்கிற்கான இரண்டு கட்டப் பாதுகாப்பு செயல்படுத்தப்பட்டுள்ளது. இணைக்கப்படும் TOTP செயலியில் ஒரு குறியீடு தோன்றும். உங்கள் கணக்கிற்குள் நுழைய அந்தக் குறியீடு தேவைப்படும். subject: 'மாஸ்டடான்: இரண்டு கட்டப் பாதுகாப்பு செயல்படுத்தப்பட்டுள்ளது' title: 2FA செயல்படுத்தப்பட்டுள்ளது two_factor_recovery_codes_changed: diff --git a/config/locales/devise.th.yml b/config/locales/devise.th.yml index dce498525fb3e4..13fdea3fefb2fa 100644 --- a/config/locales/devise.th.yml +++ b/config/locales/devise.th.yml @@ -47,11 +47,9 @@ th: subject: 'Mastodon: คำแนะนำการตั้งรหัสผ่านใหม่' title: การตั้งรหัสผ่านใหม่ two_factor_disabled: - explanation: ปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยสำหรับบัญชีของคุณแล้ว ตอนนี้สามารถเข้าสู่ระบบได้โดยใช้ที่อยู่อีเมลและรหัสผ่านเท่านั้น subject: 'Mastodon: ปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยแล้ว' title: ปิดใช้งาน 2FA แล้ว two_factor_enabled: - explanation: เปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยสำหรับบัญชีของคุณแล้ว จะต้องใช้โทเคนที่สร้างโดยแอป TOTP ที่จับคู่สำหรับการเข้าสู่ระบบ subject: 'Mastodon: เปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยแล้ว' title: เปิดใช้งาน 2FA แล้ว two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ th: subject: 'Mastodon: ลบกุญแจความปลอดภัยแล้ว' title: ลบหนึ่งในกุญแจความปลอดภัยของคุณแล้ว webauthn_disabled: - explanation: ปิดใช้งานการรับรองความถูกต้องด้วยกุญแจความปลอดภัยสำหรับบัญชีของคุณแล้ว ตอนนี้สามารถเข้าสู่ระบบได้โดยใช้เพียงโทเคนที่สร้างโดยแอป TOTP ที่จับคู่เท่านั้น subject: 'Mastodon: ปิดใช้งานการรับรองความถูกต้องด้วยกุญแจความปลอดภัยแล้ว' title: ปิดใช้งานกุญแจความปลอดภัยแล้ว webauthn_enabled: - explanation: เปิดใช้งานการรับรองความถูกต้องด้วยกุญแจความปลอดภัยสำหรับบัญชีของคุณแล้ว ตอนนี้สามารถใช้กุญแจความปลอดภัยของคุณสำหรับการเข้าสู่ระบบ subject: 'Mastodon: เปิดใช้งานการรับรองความถูกต้องด้วยกุญแจความปลอดภัยแล้ว' title: เปิดใช้งานกุญแจความปลอดภัยแล้ว omniauth_callbacks: diff --git a/config/locales/devise.tr.yml b/config/locales/devise.tr.yml index 86b1c951f7b8be..66ca9b2816956a 100644 --- a/config/locales/devise.tr.yml +++ b/config/locales/devise.tr.yml @@ -47,16 +47,19 @@ tr: subject: 'Mastodon: Parola sıfırlama talimatları' title: Parola sıfırlama two_factor_disabled: - explanation: Hesabınız için iki-adımlı kimlik doğrulama devre dışı bırakıldı. Şimdi sadece e-posta adresi ve parola kullanarak giriş yapabilirsiniz. + explanation: Oturum açma şimdi sadece e-posta adresi ve parola ile mümkün. subject: 'Mastodon: İki-adımlı kimlik doğrulama devre dışı bırakıldı' + subtitle: Hesabınız için iki aşamalı kimlik doğrulama devre dışı bırakılmıştır. title: 2FA devre dışı bırakıldı two_factor_enabled: - explanation: Hesabınız için iki-adımlı kimlik doğrulama etkinleştirildi. Giriş yapmak için eşleştirilmiş TOTP uygulaması tarafından oluşturulan bir belirteç gereklidir. + explanation: Oturum açmanız için eşlenmiş TOTP uygulaması tarafından oluşturulmuş bir tokene ihtiyaç var. subject: 'Mastodon: İki adımlı kimlik doğrulama etkinleştirildi' + subtitle: Hesabınız için iki aşamalı kimlik doğrulama etkinleştirilmiştir. title: 2FA etkinleştirildi two_factor_recovery_codes_changed: explanation: Önceki kurtarma kodları geçersiz kılındı ve yenileri oluşturuldu. subject: 'Mastodon: İki adımlı kurtarma kodları yeniden oluşturuldu' + subtitle: Önceki kurtarma kodları geçersiz kılındı ve yenileri oluşturuldu. title: 2FA kurtarma kodları değiştirildi unlock_instructions: subject: 'Mastodon: Kilit açma talimatları' @@ -70,11 +73,13 @@ tr: subject: 'Mastodon: Güvenlik anahtarı silindi' title: Güvenlik anahtarlarınızdan biri silindi webauthn_disabled: - explanation: Hesabınız için güvenlik anahtarlarıyla kimlik doğrulama devre dışı bırakıldı. Artık yalnızca eşleştirilmiş TOTP uygulaması tarafından oluşturulan kodu kullanarak giriş yapmak mümkündür. + explanation: Hesabınız için güvenlik anahtarıyla kimlik doğrulama devre dışı bırakılmıştır. + extra: Oturum açma şimdi sadece eşlenmiş TOTP uygulaması tarafından oluşturulmuş token ile mümkündür. subject: 'Mastodon: Güvenlik anahtarlarıyla kimlik doğrulama devre dışı' title: Güvenlik anahtarları devre dışı webauthn_enabled: - explanation: Hesabınız için güvenlik anahtarı doğrulaması etkinleştirildi. Güvenlik anahtarınız artık giriş yapmak için kullanılabilir. + explanation: Hesabınız için güvenlik anahtarıyla kimlik doğrulama etkinleştirilmiştir. + extra: Güvenlik anahtarınız şimdi oturum açma için kullanılabilir. subject: 'Mastodon: Güvenlik anahtarı doğrulaması etkinleştirildi' title: Güvenlik anahtarları etkin omniauth_callbacks: diff --git a/config/locales/devise.uk.yml b/config/locales/devise.uk.yml index bb81a2a1b89ea4..55429b3c760b7a 100644 --- a/config/locales/devise.uk.yml +++ b/config/locales/devise.uk.yml @@ -47,11 +47,9 @@ uk: subject: 'Mastodon: Інструкції для скидання паролю' title: Скидання пароля two_factor_disabled: - explanation: Двофакторну аутентифікацію для вашого облікового запису відключено. Тепер ви можете увійти за допомогою лише адреси електронної пошти та пароля. subject: 'Mastodon: двофакторну авторизацію вимкнено' title: Двофакторна автентифікація вимкнена two_factor_enabled: - explanation: Двофакторну аутентифікацію для вашого облікового запису було увімкнено. Для входу до системи буде потрібний токен, згенерований спареним застосунком TOTP. subject: 'Mastodon: двофакторну авторизацію увімкнено' title: Двофакторна автентифікація увімкнена two_factor_recovery_codes_changed: @@ -70,11 +68,9 @@ uk: subject: 'Mastodon: Ключ безпеки видалено' title: Один з ваших ключів безпеки було видалено webauthn_disabled: - explanation: Авторизацію з ключами безпеки було відключено для вашого облікового запису. Вхід тепер можливий лише через токен, згенерований додатком TOTP. subject: 'Mastodon: Аутентифікація за допомогою ключів безпеки вимкнена' title: Ключі безпеки вимкнуто webauthn_enabled: - explanation: Авторизація ключа безпеки була увімкнена для вашого облікового запису. Ваш ключ безпеки тепер можна використовувати для входу. subject: 'Mastodon: Авторизація ключа безпеки увімкнена' title: Ключі безпеки увімкнено omniauth_callbacks: diff --git a/config/locales/devise.vi.yml b/config/locales/devise.vi.yml index 904cc51fe9959c..190f7282c4befe 100644 --- a/config/locales/devise.vi.yml +++ b/config/locales/devise.vi.yml @@ -47,16 +47,19 @@ vi: subject: 'Mastodon: Hướng dẫn đổi lại mật khẩu' title: Đổi lại mật khẩu two_factor_disabled: - explanation: Đã vô hiệu hóa xác minh 2 bước cho tài khoản của bạn. Bây giờ chỉ có thể đăng nhập bằng địa chỉ email và mật khẩu. + explanation: Đăng nhập bây giờ chỉ có thể sử dụng địa chỉ email và mật khẩu. subject: 'Mastodon: Xác minh 2 bước đã bị vô hiệu hóa' + subtitle: Xác minh hai bước cho tài khoản của bạn đã bị vô hiệu hóa. title: Vô hiệu hóa xác minh 2 bước two_factor_enabled: - explanation: Tài khoản của bạn đã kích hoạt xác minh 2 bước. Lần đăng nhập tới sẽ cần thêm mã đăng nhập được tạo bởi ứng dụng TOTP. + explanation: Cần có mã token được tạo bởi ứng dụng TOTP được ghép nối để đăng nhập. subject: 'Mastodon: Kích hoạt xác minh 2 bước' + subtitle: Xác minh hai bước đã được bật cho tài khoản của bạn. title: Kích hoạt xác minh 2 bước two_factor_recovery_codes_changed: explanation: Các mã khôi phục trước đó đã bị vô hiệu hóa và thay bằng mã mới. subject: 'Mastodon: Mã khôi phục xác thực hai yếu tố đã được tạo lại' + subtitle: Các mã khôi phục trước đó đã bị vô hiệu hóa và thay bằng mã mới. title: Mã khôi phục xác thực hai yếu tố đã thay đổi unlock_instructions: subject: 'Mastodon: Hướng dẫn mở khóa' @@ -70,11 +73,13 @@ vi: subject: 'Mastodon: Xóa khóa bảo mật' title: Một trong những khóa bảo mật của bạn vừa bị xóa webauthn_disabled: - explanation: Bạn vừa vô hiệu hóa xác thực tài khoản bằng khóa bảo mật. Từ bây giờ, bạn sẽ dùng ứng dụng TOTP để tạo token đăng nhập. + explanation: Xác minh bằng khóa bảo mật đã bị vô hiệu hóa đối với tài khoản của bạn. + extra: Hiện tại, bạn chỉ có thể đăng nhập bằng cách sử dụng mã token được tạo bởi ứng dụng TOTP được ghép nối. subject: 'Mastodon: Vô hiệu hóa xác thực bằng khóa bảo mật' title: Đã vô hiệu hóa khóa bảo mật webauthn_enabled: - explanation: Bạn vừa kích hoạt xác thực tài khoản bằng khóa bảo mật. Từ bây giờ, khóa bảo mật của bạn sẽ được dùng để đăng nhập. + explanation: Khóa bảo mật đã được bật cho tài khoản của bạn. + extra: Hiện bạn đã có thể dùng khóa bảo mật để đăng nhập. subject: 'Mastodon: Kích hoạt xác minh bằng khóa bảo mật' title: Đã kích hoạt khóa bảo mật omniauth_callbacks: diff --git a/config/locales/devise.zh-CN.yml b/config/locales/devise.zh-CN.yml index e46c4335301dc2..9b4b3ae2039c50 100644 --- a/config/locales/devise.zh-CN.yml +++ b/config/locales/devise.zh-CN.yml @@ -47,16 +47,19 @@ zh-CN: subject: Mastodon:重置密码说明 title: 重置密码 two_factor_disabled: - explanation: 账号的双因素认证已禁用。现在仅使用邮箱和密码即可登录。 + explanation: 目前只能通过电子邮件地址和密码登录。 subject: Mastodon:双因素认证已禁用 + subtitle: 您账户的双因素认证已被停用。 title: 双因素认证已停用 two_factor_enabled: - explanation: 账号双因素认证已启用。登录时将需要来自已配对的 TOTP 应用生成的验证码。 + explanation: 登录时需要输入先前配对好的TOTP应用生成的令牌。 subject: Mastodon:双因素认证已启用 + subtitle: 您账户的双因素认证已被启用。 title: 双因素认证已启用 two_factor_recovery_codes_changed: explanation: 新恢复码已生成,同时旧恢复码已失效。 subject: Mastodon:双因素认证恢复码已重新生成 + subtitle: 新恢复码已生成,同时旧恢复码已失效。 title: 双因素认证恢复码已更改 unlock_instructions: subject: Mastodon:账户解锁信息 @@ -70,11 +73,13 @@ zh-CN: subject: Mastodon:安全密钥已删除 title: 你的安全密钥之一已被删除 webauthn_disabled: - explanation: 你的帐户已禁用安全密钥认证。现在只能使用配对的 TOTP 应用程序生成的令牌登录。 + explanation: 您账户的安全密钥身份认证已被停用。 + extra: 目前只能用先前配对的TOTP应用生成的令牌登录。 subject: Mastodon:安全密钥认证已禁用 title: 安全密钥已禁用 webauthn_enabled: - explanation: 你的账户已启用安全密钥身份验证。你的安全密钥现在可以用于登录。 + explanation: 您账户的安全密钥身份认证已被启用。 + extra: 您的安全密钥现在可用于登录。 subject: Mastodon:安全密钥认证已启用 title: 已启用安全密钥 omniauth_callbacks: diff --git a/config/locales/devise.zh-HK.yml b/config/locales/devise.zh-HK.yml index 2d9e8ddeada10c..7f728bf0adc8fc 100644 --- a/config/locales/devise.zh-HK.yml +++ b/config/locales/devise.zh-HK.yml @@ -47,16 +47,19 @@ zh-HK: subject: 'Mastodon: 重設密碼' title: 重設密碼 two_factor_disabled: - explanation: 帳號的雙重認證已被停用。現在只需使用電郵地址和密碼,即可登入。 + explanation: 現在只需使用電郵地址和密碼即可登入。 subject: Mastodon:已關閉雙重認證 + subtitle: 你帳號的雙重認證已被停用。 title: 已關閉雙重認證 two_factor_enabled: - explanation: 賬號的雙重認證已被啟用。登錄時,將需要已配對 TOTP 應用程式生成的驗證碼。 + explanation: 登入時將需要由配對的一次性密碼應用程式生成的憑證。 subject: Mastodon:已啟用雙重認證 + subtitle: 你的帳號已啟用雙重認證。 title: 已啟用雙重認證 two_factor_recovery_codes_changed: explanation: 之前的恢復碼失效了,新的已生成。 subject: Mastodon:已產生新的雙重認證恢復碼 + subtitle: 先前的恢復碼已經無效,並且已生成新的恢復碼。 title: 雙重認證恢復碼已更改 unlock_instructions: subject: 'Mastodon: 解除帳號鎖定' @@ -70,11 +73,13 @@ zh-HK: subject: 'Mastodon: 安全鑰匙已移除' title: 你其中的一個安全鑰匙已經被移除了 webauthn_disabled: - explanation: 你的帳號的安全鑰匙身份驗證已經停用。你只可以用過去已經配對好的基於時間一次性密碼程式生成的密碼來登錄。 + explanation: 你的帳號已停用安全密鑰認證。 + extra: 現在只能使用配對的一次性密碼應用程式生成的憑證登入。 subject: 'Mastodon: 安全鑰匙身份驗證已經停用' title: 已停用安全鑰匙 webauthn_enabled: - explanation: 安全鑰匙身份驗證已啟用。你的安全鑰匙現在可以用來登錄。 + explanation: 你的帳號已啟用安全密鑰認證。 + extra: 你現在可以使用安全密鑰來登入。 subject: 'Mastodon: 安全鑰匙身份驗證已啟用' title: 已啟用安全鑰匙 omniauth_callbacks: diff --git a/config/locales/devise.zh-TW.yml b/config/locales/devise.zh-TW.yml index de977426f2bb5b..762c8eba84bd15 100644 --- a/config/locales/devise.zh-TW.yml +++ b/config/locales/devise.zh-TW.yml @@ -47,16 +47,19 @@ zh-TW: subject: Mastodon:重設密碼指引 title: 重設密碼 two_factor_disabled: - explanation: 您帳號的兩階段驗證已停用。現在只使用電子郵件及密碼登入。 + explanation: 現在僅可使用電子郵件地址與密碼登入。 subject: Mastodon:已停用兩階段驗證 + subtitle: 您帳號的兩步驟驗證已停用。 title: 已停用兩階段驗證 two_factor_enabled: - explanation: 已對您的帳號啟用兩階段驗證。登入時將需要已配對的 TOTP 應用程式所產生之 Token。 + explanation: 登入時需要配對的 TOTP 應用程式產生的權杖。 subject: Mastodon:已啟用兩階段驗證 + subtitle: 您的帳號已啟用兩步驟驗證。 title: 已啟用兩階段驗證 two_factor_recovery_codes_changed: explanation: 之前的備用驗證碼已經失效,且已產生新的。 subject: Mastodon:兩階段驗證備用驗證碼已經重新產生 + subtitle: 之前的備用驗證碼已經失效,且已產生新的。 title: 兩階段驗證備用驗證碼已變更 unlock_instructions: subject: Mastodon:解鎖指引 @@ -70,11 +73,13 @@ zh-TW: subject: Mastodon:安全密鑰已移除 title: 您的一支安全密鑰已經被移除 webauthn_disabled: - explanation: 您的帳號已停用安全密鑰認證。只能透過已配對的 TOTP 應用程式所產生之 Token 登入。 + explanation: 您的帳號已停用安全金鑰身份驗證。 + extra: 現在僅可使用配對的 TOTP 應用程式產生的權杖登入。 subject: Mastodon:安全密鑰認證方式已停用 title: 已停用安全密鑰 webauthn_enabled: - explanation: 您的帳號已啟用安全密鑰認證。您可以使用安全密鑰登入了。 + explanation: 您的帳號已啟用安全金鑰驗證。 + extra: 您的安全金鑰現在可用於登入。 subject: Mastodon:已啟用安全密鑰認證 title: 已啟用安全密鑰 omniauth_callbacks: diff --git a/config/locales/el.yml b/config/locales/el.yml index 4c31bfdde0e42b..8b632a358bf208 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -1475,6 +1475,7 @@ el: unknown_browser: Άγνωστος φυλλομετρητής weibo: Weibo current_session: Τρέχουσα συνεδρία + date: Ημερομηνία description: "%{browser} σε %{platform}" explanation: Αυτοί είναι οι φυλλομετρητές που είναι συνδεδεμένοι στον λογαριασμό σου στο Mastodon αυτή τη στιγμή. ip: IP @@ -1636,16 +1637,19 @@ el: webauthn: Κλειδιά ασφαλείας user_mailer: appeal_approved: - action: Μετάβαση στον λογαριασμό σου + action: Ρυθμίσεις Λογαριασμού explanation: Η έφεση του παραπτώματος εναντίον του λογαριασμού σου στις %{strike_date}, που υπέβαλες στις %{appeal_date} έχει εγκριθεί. Ο λογαριασμός σου είναι και πάλι σε καλή κατάσταση. subject: Η έφεση σου από τις %{date} έχει εγκριθεί + subtitle: Ο λογαριασμός σας είναι για άλλη μια φορά σε καλή κατάσταση. title: Έφεση εγκρίθηκε appeal_rejected: explanation: Η έφεση του παραπτώματος εναντίον του λογαριασμού σου στις %{strike_date}, που υπέβαλες στις %{appeal_date} έχει απορριφθεί. subject: Η έφεση σου από τις %{date} έχει απορριφθεί + subtitle: Η έφεση σου απορρίφθηκε. title: Έφεση απορρίφθηκε backup_ready: - explanation: Είχες ζητήσει εφεδρικό αντίγραφο του λογαριασμού σου στο Mastodon. Είναι έτοιμο για λήψη! + explanation: Ζητήσατε ένα πλήρες αντίγραφο ασφαλείας του λογαριασμού σας Mastodon. + extra: Είναι τώρα έτοιμο για λήψη! subject: Το αρχείο σου είναι έτοιμο για λήψη title: Λήψη εφεδρικού αρχείου suspicious_sign_in: diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index a6e74c4836da50..b11c6de11f6d0f 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1773,7 +1773,6 @@ en-GB: webauthn: Security keys user_mailer: appeal_approved: - action: Go to your account explanation: The appeal of the strike against your account on %{strike_date} that you submitted on %{appeal_date} has been approved. Your account is once again in good standing. subject: Your appeal from %{date} has been approved title: Appeal approved @@ -1782,7 +1781,6 @@ en-GB: subject: Your appeal from %{date} has been rejected title: Appeal rejected backup_ready: - explanation: You requested a full backup of your Mastodon account. It's now ready for download! subject: Your archive is ready for download title: Archive takeout suspicious_sign_in: diff --git a/config/locales/en.yml b/config/locales/en.yml index 970c1fe005b3a5..1bf5b051ae2a17 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -456,8 +456,6 @@ en: reject_reports_hint: Ignore all reports coming from this domain. Irrelevant for suspensions reject_send_sensitive: センシティブな投稿を配送しない reject_send_sensitive_hint: 相手サーバーからのフェッチは防げません。停止とは無関係です - reject_send_unlisted_dissubscribable: 購読拒否アカウントの未収載投稿を配送しない - reject_send_unlisted_dissubscribable_hint: 相手サーバーからのフェッチは防げません。停止とは無関係です reject_straight_follow: Reject straight follow reject_straight_follow_hint: The server accounts must be authenticated when follow our accounts undo: Undo domain block @@ -1723,6 +1721,7 @@ en: too_few_options: must have more than one item too_many_options: can't contain more than %{max} items preferences: + does_not_search: The full-text search feature is not available on this server. Instead, your posts will be searched according to this setting on other kmyblue servers. dtl: Deep timeline dtl_hint: "You can join deep timeline with #%{tag} tag. Following settings make convenient to use deep timeline." emoji_reaction_permitting: Receiving stamps @@ -1821,6 +1820,7 @@ en: unknown_browser: Unknown Browser weibo: Weibo current_session: Current session + date: Date description: "%{browser} on %{platform}" explanation: These are the web browsers currently logged in to your Mastodon account. ip: IP @@ -2007,16 +2007,19 @@ en: webauthn: Security keys user_mailer: appeal_approved: - action: Go to your account + action: Account Settings explanation: The appeal of the strike against your account on %{strike_date} that you submitted on %{appeal_date} has been approved. Your account is once again in good standing. subject: Your appeal from %{date} has been approved + subtitle: Your account is once again in good standing. title: Appeal approved appeal_rejected: explanation: The appeal of the strike against your account on %{strike_date} that you submitted on %{appeal_date} has been rejected. subject: Your appeal from %{date} has been rejected + subtitle: Your appeal has been rejected. title: Appeal rejected backup_ready: - explanation: You requested a full backup of your Mastodon account. It's now ready for download! + explanation: You requested a full backup of your Mastodon account. + extra: It's now ready for download! subject: Your archive is ready for download title: Archive takeout suspicious_sign_in: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 8a0033ee6aaaf4..1bcf36700be53f 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -1693,7 +1693,6 @@ eo: webauthn: Sekurecaj ŝlosiloj user_mailer: appeal_approved: - action: Iri al via konto explanation: La apelacio de la admono kontra via konto je %{strike_date} pri sendodato %{appeal_date} aprobitas. subject: Via apelacio de %{date} aprobitas title: Apelacio estis aprobita @@ -1702,7 +1701,6 @@ eo: subject: Via apelacio de %{date} estis malaprobita title: Apelacio estis malaprobita backup_ready: - explanation: Vi petis kompletan arkivon de via Mastodon-konto. Ĝi nun pretas por elŝutado! subject: Via arkivo estas preta por elŝutado title: Arkiva elŝuto suspicious_sign_in: diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index f214c92d2aa82b..26c18b5febc6a2 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1608,6 +1608,7 @@ es-AR: unknown_browser: "[Navegador web desconocido]" weibo: Weibo current_session: Sesión actual + date: Fecha description: "%{browser} en %{platform}" explanation: Estos son los navegadores web en los que actualmente iniciaste sesión en tu cuenta de Mastodon. ip: Dirección IP @@ -1774,16 +1775,19 @@ es-AR: webauthn: Llaves de seguridad user_mailer: appeal_approved: - action: Ir a tu cuenta + action: Configuración de la cuenta explanation: La apelación del incumplimiento contra tu cuenta del %{strike_date} que enviaste el %{appeal_date} fue aprobada. Tu cuenta se encuentra de nuevo en buen estado. subject: Tu apelación del %{date} fue aprobada + subtitle: Tu cuenta está, de nuevo, en perfecto estado. title: Apelación aprobada appeal_rejected: explanation: La apelación del incumplimiento contra tu cuenta del %{strike_date} que enviaste el %{appeal_date} fue rechazada. subject: Tu apelación del %{date} fue rechazada + subtitle: Se rechazó tu apelación. title: Apelación rechazada backup_ready: - explanation: Solicitaste un resguardo completo de tu cuenta de Mastodon. ¡Ya está listo para descargar! + explanation: Solicitaste una copia de seguridad completa de tu cuenta de Mastodon. + extra: "¡Ya está lista para descargar!" subject: Tu archivo historial está listo para descargar title: Descargar archivo historial suspicious_sign_in: diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 7f5b282873cde5..32178d0b047611 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1608,6 +1608,7 @@ es-MX: unknown_browser: Navegador desconocido weibo: Weibo current_session: Sesión actual + date: Fecha description: "%{browser} en %{platform}" explanation: Estos son los navegadores web conectados actualmente en tu cuenta de Mastodon. ip: IP @@ -1774,16 +1775,19 @@ es-MX: webauthn: Claves de seguridad user_mailer: appeal_approved: - action: Ir a tu cuenta + action: Ajustes de la cuenta explanation: La apelación de la amonestación contra tu cuenta del %{strike_date} que enviaste el %{appeal_date} fue aprobada. Tu cuenta se encuentra de nuevo en buen estado. subject: Tu apelación del %{date} ha sido aprobada + subtitle: Tu cuenta se encuentra de nuevo en buen estado. title: Apelación aprobada appeal_rejected: explanation: La apelación de la amonestación contra tu cuenta del %{strike_date} que enviaste el %{appeal_date} fue rechazada. subject: Tu apelación del %{date} ha sido rechazada + subtitle: Tu apelación ha sido rechazada. title: Apelación rechazada backup_ready: - explanation: Has solicitado una copia completa de tu cuenta de Mastodon. ¡Ya está preparada para descargar! + explanation: Has solicitado una copia de seguridad completa de tu cuenta de Mastodon. + extra: "¡Ya está listo para descargar!" subject: Tu archivo está preparado para descargar title: Descargar archivo suspicious_sign_in: diff --git a/config/locales/es.yml b/config/locales/es.yml index a1e9401f5a0a18..9235b985fb8abc 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1608,6 +1608,7 @@ es: unknown_browser: Navegador Desconocido weibo: Weibo current_session: Sesión actual + date: Fecha description: "%{browser} en %{platform}" explanation: Estos son los navegadores web conectados actualmente en tu cuenta de Mastodon. ip: IP @@ -1774,16 +1775,19 @@ es: webauthn: Claves de seguridad user_mailer: appeal_approved: - action: Ir a tu cuenta + action: Ajustes de la cuenta explanation: La apelación de la amonestación contra tu cuenta del %{strike_date} que enviaste el %{appeal_date} fue aprobada. Tu cuenta se encuentra de nuevo en buen estado. subject: Tu apelación del %{date} ha sido aprobada + subtitle: Tu cuenta se encuentra de nuevo en perfecto estado. title: Apelación aprobada appeal_rejected: explanation: La apelación de la amonestación contra tu cuenta del %{strike_date} que enviaste el %{appeal_date} fue rechazada. subject: Tu apelación del %{date} ha sido rechazada + subtitle: Tu apelación ha sido rechazada. title: Apelación rechazada backup_ready: - explanation: Has solicitado una copia completa de tu cuenta de Mastodon. ¡Ya está preparada para descargar! + explanation: Has solicitado una copia de seguridad completa de tu cuenta de Mastodon. + extra: "¡Ya está listo para descargar!" subject: Tu archivo está preparado para descargar title: Descargar archivo suspicious_sign_in: diff --git a/config/locales/et.yml b/config/locales/et.yml index 806238431d377a..71f49e1abb9e46 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1608,6 +1608,7 @@ et: unknown_browser: Tundmatu veebilehitseja weibo: Weibo current_session: Praegune seanss + date: Kuupäev description: "%{browser} platvormil %{platform}" explanation: Need veebilehitsejad on praegu su Mastodoni kontole sisse loginud. ip: IP @@ -1776,16 +1777,19 @@ et: webauthn: Turvavõtmed user_mailer: appeal_approved: - action: Oma kontole + action: Konto seaded explanation: "%{appeal_date} esitatud vaidlustus %{strike_date} otsuse kohta on rahuldatud. Konto on ennistatud." subject: "%{date} esitatud vaidlustus on rahuldatud" + subtitle: Sinu konto on jälle heas seisukorras. title: Vaidlustus rahuldatud appeal_rejected: explanation: "%{appeal_date} esitatud vaidlustus %{strike_date} otsuse kohta on tagasi lükatud." subject: "%{date} esitatud vaidlustus on tagasi lükatud" + subtitle: Sinu vaidlustus lükati tagasi. title: Vaidlustus tagasi lükatud backup_ready: - explanation: Taotlesid oma Mastodoni konto varukoopiat. See on nüüd valmis allalaadimiseks! + explanation: Taotlesid oma Mastodoni konto täisvarundust. + extra: See on nüüd allalaadimiseks valmis! subject: Arhiiv on allalaadimiseks valmis title: Arhiivi väljavõte suspicious_sign_in: diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 9174b83b430393..4b91f7a5246fa9 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -1612,6 +1612,7 @@ eu: unknown_browser: Nabigatzaile ezezaguna weibo: Weibo current_session: Uneko saioa + date: Data description: "%{browser} - %{platform}" explanation: Zure Mastodon kontuan saioa hasita duten nabigatzaileak daude. ip: IP-a @@ -1778,16 +1779,19 @@ eu: webauthn: Segurtasun gakoak user_mailer: appeal_approved: - action: Joan zure kontura + action: Kontuaren ezarpenak explanation: "%{strike_date}(e)an zure kontuari ezarritako neurriaren aurka %{appeal_date}(e)an jarri zenuen apelazioa onartu da. Zure kontua egoera onean dago berriro." subject: "%{date}(e)ko zure apelazioa onartu da" + subtitle: Zure kontua egoera onean dago berriro. title: Apelazioa onartuta appeal_rejected: explanation: "%{strike_date}(e)an zure kontuari ezarritako neurriaren aurka %{appeal_date}(e)an jarri zenuen apelazioa baztertu da." subject: "%{date}(e)ko zure apelazioa baztertu da" + subtitle: Zure apelazioa baztertu da. title: Apelazioa baztertuta backup_ready: - explanation: Zure Mastodon kontuaren babes-kopia osoa eskatu duzu. Deskargatzeko prest dago! + explanation: Mastodon kontuaren babeskopia osoa eskatu duzu. + extra: Deskargatzeko prest! subject: Zure artxiboa deskargatzeko prest dago title: Artxiboa jasotzea suspicious_sign_in: diff --git a/config/locales/fa.yml b/config/locales/fa.yml index f93aac603112b0..0514772c1dcc3d 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -1540,7 +1540,6 @@ fa: webauthn: کلیدهای امنیتی user_mailer: appeal_approved: - action: به حساب خودتان بروید explanation: درخواست تجدیدنظر اخطار علیه حساب شما در %{strike_date} که در %{appeal_date} ارسال کرده‌اید، پذیرفته شده است. حساب شما بار دیگر در وضعیت خوبی قرار دارد. subject: درخواست تجدیدنظر شما در %{date} پذیرفته شد title: درخواست تجدیدنظر پذیرفته شد @@ -1549,7 +1548,6 @@ fa: subject: درخواست تجدیدنظر شما در %{date} رد شده است title: درخواست تجدیدنظر رد شد backup_ready: - explanation: شما یک نسخهٔ پشتیبان کامل از حساب خود را درخواست کردید. این پشتیبان الان آمادهٔ بارگیری است! subject: بایگانی شما آمادهٔ دریافت است title: گرفتن بایگانی suspicious_sign_in: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 75052c949d254f..a719f3496fe063 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1774,7 +1774,6 @@ fi: webauthn: Suojausavaimet user_mailer: appeal_approved: - action: Siirry tilillesi explanation: Valitus tiliäsi koskevasta varoituksesta %{strike_date} jonka lähetit %{appeal_date} on hyväksytty. Tilisi on jälleen hyvässä kunnossa. subject: Valituksesi %{date} on hyväksytty title: Valitus hyväksytty @@ -1783,7 +1782,6 @@ fi: subject: Valituksesi %{date} on hylätty title: Valitus hylätty backup_ready: - explanation: Pyysit täydellistä varmuuskopiota Mastodon-tilistäsi. Voit nyt ladata sen! subject: Arkisto on valmiina ladattavaksi title: Arkiston tallennus suspicious_sign_in: diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 00fb9c556052a8..03a525fa5d52c1 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -612,6 +612,7 @@ fo: created_at: Meldað delete_and_resolve: Strika postar forwarded: Víðarisent + forwarded_replies_explanation: Hendan fráboðanin er frá einum fjarbrúkara og er viðvíkjandi tilfari á einum fjarum ambætara. Tað er sent til tín, tí fráboðaða innihaldið er í svari til ein av tínum brúkarum. forwarded_to: Víðarisent til %{domain} mark_as_resolved: Marka sum loyst mark_as_sensitive: Merkt sum viðkvæmt @@ -1607,6 +1608,7 @@ fo: unknown_browser: Ókendur kagi weibo: Weibo current_session: Verandi seta + date: Dagfesting description: "%{browser} á %{platform}" explanation: Hetta eru vevkagarnir, sum í løtuni eru ritaðir inn á tína Mastodon kontu. ip: IP @@ -1773,16 +1775,19 @@ fo: webauthn: Trygdarlyklar user_mailer: appeal_approved: - action: Far til kontu tína + action: Kontustillingar explanation: Kæran um atsóknina móti kontu tínari %{strike_date}, sum tú sendi inn %{appeal_date}, er góðkend. Konta tín er aftur tignarlig. subject: Kæra tín frá %{date} er góðkend + subtitle: Kontan hjá tær er aftur í góðari støðu. title: Kæra góðkend appeal_rejected: explanation: Kæran um atsóknina móti kontu tínari %{strike_date}, sum tú sendi inn %{appeal_date}, er vrakað. subject: Kæra tín frá %{date} er vrakað + subtitle: Kæra tín er vrakað. title: Kæra vrakað backup_ready: - explanation: Tú bað um eitt fult trygdaravrit av tíni Mastodon kontu. Tað er nú klárt at taka niður! + explanation: Tú hevur biðið um eitt fult trygdaravrit av Mastodon-kontuni hjá tær. + extra: Tað er nú klárt at taka niður! subject: Savnið hjá tær er tøkt at taka niður title: Tak savn niður suspicious_sign_in: diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index c43fa013c74d15..dbdff5f52c99c1 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -1608,6 +1608,7 @@ fr-CA: unknown_browser: Navigateur inconnu weibo: Weibo current_session: Session courante + date: Date description: "%{browser} sur %{platform}" explanation: Ceci est la liste des navigateurs actuellement connectés à votre compte Mastodon. ip: Adresse IP @@ -1774,16 +1775,19 @@ fr-CA: webauthn: Clés de sécurité user_mailer: appeal_approved: - action: Aller à votre compte + action: Paramètres du compte explanation: L'appel de la sanction contre votre compte mise en place le %{strike_date} que vous avez soumis le %{appeal_date} a été approuvé. Votre compte est de nouveau en règle. subject: Votre appel du %{date} a été approuvé + subtitle: Votre compte est de nouveau en règle. title: Appel approuvé appeal_rejected: explanation: L'appel de la sanction contre votre compte mise en place le %{strike_date} que vous avez soumis le %{appeal_date} a été rejeté. subject: Votre appel du %{date} a été rejeté + subtitle: Votre appel a été rejeté. title: Appel rejeté backup_ready: - explanation: Vous avez demandé une sauvegarde complète de votre compte Mastodon. Elle est maintenant prête à être téléchargée ! + explanation: Vous avez demandé une sauvegarde complète de votre compte Mastodon. + extra: Elle est maintenant prête à être téléchargée ! subject: Votre archive est prête à être téléchargée title: Récupération de l’archive suspicious_sign_in: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 5c6166ddc3ae72..fe1a219a3157f5 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1608,6 +1608,7 @@ fr: unknown_browser: Navigateur inconnu weibo: Weibo current_session: Session courante + date: Date description: "%{browser} sur %{platform}" explanation: Ceci est la liste des navigateurs actuellement connectés à votre compte Mastodon. ip: Adresse IP @@ -1774,16 +1775,19 @@ fr: webauthn: Clés de sécurité user_mailer: appeal_approved: - action: Aller à votre compte + action: Paramètres du compte explanation: L'appel de la sanction contre votre compte mise en place le %{strike_date} que vous avez soumis le %{appeal_date} a été approuvé. Votre compte est de nouveau en règle. subject: Votre appel du %{date} a été approuvé + subtitle: Votre compte est de nouveau en règle. title: Appel approuvé appeal_rejected: explanation: L'appel de la sanction contre votre compte mise en place le %{strike_date} que vous avez soumis le %{appeal_date} a été rejeté. subject: Votre appel du %{date} a été rejeté + subtitle: Votre appel a été rejeté. title: Appel rejeté backup_ready: - explanation: Vous avez demandé une sauvegarde complète de votre compte Mastodon. Elle est maintenant prête à être téléchargée ! + explanation: Vous avez demandé une sauvegarde complète de votre compte Mastodon. + extra: Elle est maintenant prête à être téléchargée ! subject: Votre archive est prête à être téléchargée title: Récupération de l’archive suspicious_sign_in: diff --git a/config/locales/fy.yml b/config/locales/fy.yml index 9471c03b925b34..1d648f479075c0 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -1608,6 +1608,7 @@ fy: unknown_browser: Unbekende browser weibo: Weibo current_session: Aktuele sesje + date: Datum description: "%{browser} op %{platform}" explanation: Dit binne de webbrowsers dy’t op dit stuit mei jo Mastodon-account oanmeld binne. ip: IP @@ -1774,16 +1775,19 @@ fy: webauthn: Befeiligingskaaien user_mailer: appeal_approved: - action: Gean nei jo account + action: Accountynstellingen explanation: It beswier tsjin in troch in moderator fêststelde skeining fan jo op %{strike_date}, yntsjinne op %{appeal_date}, is goedkard. De earder fêststelde skeining is hjirby net langer jildich. subject: Jo beswier fan %{date} is goedkard + subtitle: Jo account hat wer in goede reputaasje. title: Beswier goedkard appeal_rejected: explanation: It beswier tsjin in troch in moderator fêststelde skeining fan jo op %{strike_date}, yntsjinne op %{appeal_date}, is ôfwêzen. De fêststelde skeining bliuwt wurdt dêrom net wizige. subject: Jo beswier fan %{date} is ôfwêzen + subtitle: Jo beswier is ôfwêzen. title: Beswier ôfwêzen backup_ready: - explanation: Jo hawwe in folsleine reservekopy fan jo Mastodon-account opfrege. It stiet no klear om download te wurden! + explanation: Jo hawwe in folsleine reservekopy fan jo Mastodon-account oanfrege. + extra: It stiet no klear om download te wurden! subject: Jo argyf stiet klear om download te wurden title: Argyf ophelje suspicious_sign_in: diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 965447d4f90a2a..521f4fd60d548a 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1827,7 +1827,6 @@ gd: webauthn: Iuchraichean tèarainteachd user_mailer: appeal_approved: - action: Tadhail air a’ chunntas agad explanation: Chaidh aontachadh ris an ath-thagradh agad air an rabhadh o %{strike_date} a chuir thu a-null %{appeal_date}. Tha deagh chliù air a’ chunntas agad a-rithist. subject: Chaidh aontachadh ris an ath-thagradh agad o %{date} title: Chaidh aontachadh ri ath-thagradh @@ -1836,7 +1835,6 @@ gd: subject: Chaidh an t-ath-thagradh agad o %{date} a dhiùltadh title: Chaidh ath-thagradh a dhiùltadh backup_ready: - explanation: Dh’iarr thu lethbhreac-glèidhidh slàn dhen chunntas Mastodon agad. Tha e deis ri luchdadh a-nuas a-nis! subject: Tha an tasg-lann agad deis ri luchdadh a-nuas title: Tasg-lann dhut suspicious_sign_in: diff --git a/config/locales/gl.yml b/config/locales/gl.yml index cff9427c6611b8..1398f6ad0bd184 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1608,6 +1608,7 @@ gl: unknown_browser: Navegador descoñecido weibo: Weibo current_session: Sesión actual + date: Data description: "%{browser} en %{platform}" explanation: Estos son os navegadores web nos que actualmente tes sesión iniciada. ip: IP @@ -1774,16 +1775,19 @@ gl: webauthn: Chaves de seguridade user_mailer: appeal_approved: - action: Vai á túa conta + action: Axustes da conta explanation: A apelación da acción contra a túa conta o %{strike_date} que enviaches o %{appeal_date} foi aprobada. A túa conta volve ao estado normal de uso. subject: O recurso presentado o %{date} foi aprobado + subtitle: A túa conta volve a estar en boa forma. title: Apelación aprobada appeal_rejected: explanation: A apelación contra a acción tomada contra a túa conta o %{strike_date} que enviaches o %{appeal_date} foi rexeitada. subject: A túa apelación do %{date} foi rexeitada + subtitle: A apelación foi rexeitada. title: Apelación rexeitada backup_ready: - explanation: Solicitaches os datos completos da túa conta de Mastodon. Xa está preparados para descargar! + explanation: Solicitaches unha copia completa da túa conta Mastodon. + extra: Está preparada para descargala! subject: O teu ficheiro xa está preparado para descargar title: Leve o ficheiro suspicious_sign_in: diff --git a/config/locales/he.yml b/config/locales/he.yml index 23a4e0c3a63685..2969cf33e82828 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -1660,6 +1660,7 @@ he: unknown_browser: דפדפן לא מזוהה weibo: Weibo current_session: חיבור נוכחי + date: תאריך description: "%{browser} על %{platform}" explanation: אלה הם הדפדפנים המחוברים כרגע לחשבון המסטודון שלך. ip: IP @@ -1838,16 +1839,19 @@ he: webauthn: מפתחות אבטחה user_mailer: appeal_approved: - action: מעבר לחשבונך + action: הגדרות חשבון explanation: הערעור על העברה שנרשמה כנגד חשבונך ב-%{strike_date} שהגשת ב-%{appeal_date} התקבל. חשבונך חזר להיות נקי מכל רבב. subject: ערעורך מתאריך %{date} התקבל + subtitle: חשבונך חזר למצב מאושר. title: הערעור התקבל appeal_rejected: explanation: הערעור על העברה שנרשמה כנגד חשבונך ב-%{strike_date} שהגשת ב-%{appeal_date} נדחה. subject: ערעורך מתאריך %{date} נדחה + subtitle: ערעורך נדחה. title: הערעור נדחה backup_ready: - explanation: ביקשת גיבוי מלא של חשבון המסטודון שלך. הוא מוכן להורדה! + explanation: ביקשת גיבוי מלא של חשבון המסטודון שלך. + extra: הגיבוי מוכן להורדה! subject: הארכיון שלך מוכן להורדה title: הוצאת ארכיון suspicious_sign_in: diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 5c8d1cf9a4825e..536af8b6b5d9b5 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1774,7 +1774,6 @@ hu: webauthn: Biztonsági kulcsok user_mailer: appeal_approved: - action: Ugrás a fiókodhoz explanation: A fiókod %{appeal_date}-i fellebbezése, mely a %{strike_date}-i vétségeddel kapcsolatos, jóváhagyásra került. A fiókod megint makulátlan. subject: A %{date}-i fellebbezésedet jóváhagyták title: Fellebbezés jóváhagyva @@ -1783,7 +1782,6 @@ hu: subject: A %{date}-i fellebbezésedet visszautasították title: Fellebbezés visszautasítva backup_ready: - explanation: A Mastodon-fiókod teljes mentését kérted. A mentés elkészült, és letölthető. subject: Az adataidról készült archív letöltésre kész title: Archiválás suspicious_sign_in: diff --git a/config/locales/ia.yml b/config/locales/ia.yml index c4f236881dbbfa..48a802a2cd3025 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -114,8 +114,6 @@ ia: add: Adder disable: Disactivar 2FA user_mailer: - appeal_approved: - action: Vader a tu conto welcome: subject: Benvenite in Mastodon webauthn_credentials: diff --git a/config/locales/id.yml b/config/locales/id.yml index c231fea576b174..ec8cf9e0316659 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -1508,7 +1508,6 @@ id: webauthn: Kunci keamanan user_mailer: appeal_approved: - action: Ke akun Anda explanation: Banding peringatan terhadap akun Anda pada %{strike_date} yang Anda kirim pada %{appeal_date} telah disetujui. Akun Anda akan kembali ditandai sebagai akun bagus. subject: Banding Anda dari %{date} telah disetujui title: Banding disetujui @@ -1517,7 +1516,6 @@ id: subject: Banding Anda dari %{date} telah ditolak title: Banding ditolak backup_ready: - explanation: Cadangan penuh akun Mastodon Anda sudah dapat diunduh! subject: Arsip Anda sudah siap diunduh title: Ambil arsip suspicious_sign_in: diff --git a/config/locales/ie.yml b/config/locales/ie.yml index c85e97b51dcb39..c8cd5d5f8dc5a6 100644 --- a/config/locales/ie.yml +++ b/config/locales/ie.yml @@ -1608,6 +1608,7 @@ ie: unknown_browser: Ínconosset navigator weibo: Weibo current_session: Actual session + date: Date description: "%{browser} in %{platform}" explanation: Tis-ci es li navigatores queles actualmen ha initiat sessiones a tui Mastodon-conto. ip: IP @@ -1774,16 +1775,18 @@ ie: webauthn: Claves de securitá user_mailer: appeal_approved: - action: Ear a tui conto + action: Parametres del Conto explanation: Li apelle del admoniment contra tui conto ye %{strike_date} quel tu fat ye %{appeal_date} ha esset aprobat. Tui conto retorna a esser in bon statu. subject: Tui apelle de %{date} ha esset aprobat + subtitle: Tui conto denov es in bon statu. title: Apelle aprobat appeal_rejected: explanation: Li apelle del admoniment contra tui conto ye %{strike_date} quel tu fat ye %{appeal_date} ha esset rejectet. subject: Tui apelle de %{date} ha esset rejectet + subtitle: Tui apelle ha esset rejectet. title: Apelle rejectet backup_ready: - explanation: Tu solicitat un complet archive de tui Mastodon-conto. Nu it es pret por descargar! + extra: It es ja pret a descargar! subject: Tui archive es pret por descargar title: Descargar archive suspicious_sign_in: diff --git a/config/locales/io.yml b/config/locales/io.yml index eb5fcc709d188d..341477852f750c 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -1747,7 +1747,6 @@ io: webauthn: Sekuresklefi user_mailer: appeal_approved: - action: Irez a vua konto explanation: Apelo di streko kontre vua konto en %{strike_date} quale vu sendis en %{appeal_date} aprobesis. Vua konto itere standas bone. subject: Vua apelo de %{date} aprobesis title: Apelo aprobesis @@ -1756,7 +1755,6 @@ io: subject: Vua apelo de %{date} refuzesis title: Apelo refuzesis backup_ready: - explanation: Vu demandis kompleta kopiur di vua konto di Mastodon. Ol esas nun pronte deschargebla! subject: Vua arkivo pronte deschargebla title: Arkivekpreno suspicious_sign_in: diff --git a/config/locales/is.yml b/config/locales/is.yml index 7083a226dde652..9f8d5d42dcc293 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1612,6 +1612,7 @@ is: unknown_browser: Óþekktur vafri weibo: Weibo current_session: Núverandi seta + date: Dagsetning description: "%{browser} á %{platform}" explanation: Þetta eru vafrarnir sem núna eru skráðir inn á Mastodon-aðganginn þinn. ip: IP-vistfang @@ -1778,16 +1779,19 @@ is: webauthn: Öryggislyklar user_mailer: appeal_approved: - action: Farðu inn á notandaaðganginn þinn + action: Stillingar notandaaðgangs explanation: Áfrýjun refsingarinnar gagnvart aðgangnum þínum þann %{strike_date} sem þú sendir inn þann %{appeal_date} hefur verið samþykkt. Notandaaðgangurinn þinn er aftur í góðu lagi. subject: Áfrýjun þín frá %{date} hefur verið samþykkt + subtitle: Notandaaðgangurinn þinn er í góðu lagi. title: Áfrýjun samþykkt appeal_rejected: explanation: Áfrýjun refsingarinnar gagnvart aðgangnum þínum þann %{strike_date} sem þú sendir inn þann %{appeal_date} hefur verið hafnað. subject: Áfrýjun þinni frá %{date} hefur verið hafnað + subtitle: Áfrýjun þinni hefur verið hafnað. title: Áfrýjun hafnað backup_ready: - explanation: Þú baðst um fullt öryggisafrit af Mastodon notandaaðgangnum þínum. Það er núna tilbúið til niðurhals! + explanation: Þú baðst um fullt öryggisafrit af Mastodon notandaaðgangnum þínum. + extra: Það er núna tilbúið til niðurhals! subject: Safnskráin þín er tilbúin til niðurhals title: Taka út í safnskrá suspicious_sign_in: diff --git a/config/locales/it.yml b/config/locales/it.yml index 16b327f3e140a7..a17fae48049ef4 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1610,6 +1610,7 @@ it: unknown_browser: Browser sconosciuto weibo: Weibo current_session: Sessione corrente + date: Data description: "%{browser} su %{platform}" explanation: Questi sono i browser da cui attualmente è avvenuto l'accesso al tuo account Mastodon. ip: IP @@ -1776,16 +1777,19 @@ it: webauthn: Chiavi di sicurezza user_mailer: appeal_approved: - action: Vai al tuo account + action: Impostazioni account explanation: L'appello della sanzione contro il tuo account del %{strike_date} che hai inviato il %{appeal_date} è stato approvato. Il tuo account ha riottenuto la buona reputazione. subject: Il tuo appello del %{date} è stato approvato + subtitle: Il tuo account è ancora una volta in buona posizione. title: Appello approvato appeal_rejected: explanation: L'appello della sanzione contro il tuo account del %{strike_date} che hai inviato il %{appeal_date} è stato respinto. subject: Il tuo appello del %{date} è stato respinto + subtitle: Il tuo appello è stato respinto. title: Appello respinto backup_ready: - explanation: Hai richiesto un backup completo del tuo account Mastodon. È pronto per essere scaricato! + explanation: Hai richiesto un backup completo del tuo account Mastodon. + extra: Ora è pronto per il download! subject: Il tuo archivio è pronto per essere scaricato title: Esportazione archivio suspicious_sign_in: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 0047d4bbf428d5..714a8ad5bb17b0 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -451,8 +451,6 @@ ja: reject_reports_hint: このドメインからの通報をすべて無視します。停止とは無関係です reject_send_sensitive: センシティブな投稿を配送しない reject_send_sensitive_hint: 相手サーバーからのフェッチは防げません。停止とは無関係です - reject_send_unlisted_dissubscribable: 購読拒否アカウントの未収載投稿を配送しない - reject_send_unlisted_dissubscribable_hint: 相手サーバーからのフェッチは防げません。停止とは無関係です reject_straight_follow: フォローを強制的に審査制にする reject_straight_follow_hint: 相手からのフォローは当サーバーのアカウントの承認が必須になります undo: ドメインブロックを戻す @@ -562,7 +560,6 @@ ja: reject_reply_exclude_followers: フォロー相手以外からのリプライを拒否 reject_reports: 通報を拒否 reject_send_sensitive: センシティブ投稿配送なし - reject_send_unlisted_dissubscribable: 購読拒否未収載投稿配送なし reject_straight_follow: フォローを制限 silence: 制限 suspend: サスペンド @@ -1703,6 +1700,7 @@ ja: too_few_options: は複数必要です too_many_options: は%{max}個までです preferences: + does_not_search: このサーバーでは全文検索機能を利用できません。代わりに、他のkmyblueサーバーであなたの投稿がこの設定に従って検索されます。 dtl: ディープタイムライン dtl_hint: "#%{tag} ハッシュタグに参加することで、ディープタイムラインに投稿できます。ここではディープタイムラインを利用しやすくするための設定ができます。" emoji_reaction_permitting: スタンプの受け入れ @@ -1801,6 +1799,7 @@ ja: unknown_browser: 不明なブラウザ weibo: Weibo current_session: 現在のセッション + date: 日時 description: "%{platform}上の%{browser}" explanation: あなたのMastodonアカウントに現在ログインしているウェブブラウザの一覧です。 ip: IP @@ -1988,16 +1987,19 @@ ja: webauthn: セキュリティキー user_mailer: appeal_approved: - action: アカウントへ - explanation: '%{strike_date}のストライクに対して、あなたが%{appeal_date}に行った申し立ては承認されました。アカウントは正常な状態に戻りました。' - subject: '%{date}の申し立てが承認されました' + action: アカウント設定 + explanation: "%{strike_date}のストライクに対して、あなたが%{appeal_date}に行った申し立ては承認されました。アカウントは正常な状態に戻りました。" + subject: "%{date}の申し立てが承認されました" + subtitle: あなたのアカウントは正常な状態に戻りました。 title: 申し立てが承認されました。 appeal_rejected: - explanation: '%{strike_date}のストライクに対して、あなたが%{appeal_date}に行った申し立ては却下されました。' - subject: '%{date}の申し立てが拒否されました' + explanation: "%{strike_date}のストライクに対して、あなたが%{appeal_date}に行った申し立ては却下されました。" + subject: "%{date}の申し立てが拒否されました" + subtitle: 申し立ては拒否されました。 title: 却下された抗議 backup_ready: - explanation: Mastodonアカウントのアーカイブを受け付けました。今すぐダウンロードできます! + explanation: Mastodonアカウントの完全バックアップをリクエストしました。 + extra: ダウンロードの準備ができました! subject: アーカイブの準備ができました title: アーカイブの取り出し suspicious_sign_in: diff --git a/config/locales/ka.yml b/config/locales/ka.yml index d67f432688e3a3..926922154f83d6 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -467,7 +467,6 @@ ka: recovery_instructions_html: თუ როდესმე დაკარგავთ წვდომას თქვენს ტელეფონთან, შეგიძლიათ ქვემოთ მოცემული აღდგენის კოდები გამოიყენოთ, რათა მოიპოვოთ ხელმეორე წვდომა თქვენი ანგარიშისადმი. იქონიეთ აღდგენის კოდები დაცულად. მაგალითისთვის, შეგიძლიათ ამობეჭდოთ და შეინახოთ სხვა საბუთებთან ერთად. user_mailer: backup_ready: - explanation: თქვენ მოითხოვეთ თქვენი მასტოდონის ანგარიშის სრული რეზერვაცია. ის ახლა უკვე მზადაა გადმოსაწერად! subject: თქვენი არქივი გადმოსაწერად მზადაა title: არქივის მიღება welcome: diff --git a/config/locales/kab.yml b/config/locales/kab.yml index eeb8f16ae4037a..66aeafde603aca 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -745,8 +745,6 @@ kab: otp: Asnas n usesteb webauthn: Tisura n teɣlist user_mailer: - appeal_approved: - action: Ddu ɣer umiḍan-ik·im warning: categories: spam: Aspam diff --git a/config/locales/kk.yml b/config/locales/kk.yml index 98fe37f2966865..27c76b437891e2 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -705,7 +705,6 @@ kk: recovery_instructions_html: Егер сіз телефонға кіруді жоғалтсаңыз, тіркелгіңізге кіру үшін төмендегі қалпына келтіру кодтарының бірін пайдалануға болады. Қалпына келтіру кодтарын қауіпсіз ұстаңыз . Мысалы, оларды басып шығарып, оларды басқа маңызды құжаттармен сақтауға болады. user_mailer: backup_ready: - explanation: Сіз Mastodon аккаунтыңыздың толық мұрағатын сұрадыңыз. Қазір жүктеуге дайын! subject: Мұрағатыңыз түсіріп алуға дайын title: Мұрағатты алу warning: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 76bb3bd9f1d570..b0eadc05047a95 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1687,7 +1687,7 @@ ko: keep_pinned: 고정된 게시물 유지 keep_pinned_hint: 고정 게시물을 삭제하지 않습니다 keep_polls: 설문 유지 - keep_polls_hint: 설문을 삭제하지 않았음 + keep_polls_hint: 설문을 삭제하지 않습니다 keep_self_bookmark: 북마크한 게시물 유지 keep_self_bookmark_hint: 북마크한 본인의 게시물을 삭제하지 않습니다 keep_self_fav: 내가 좋아요한 게시물 유지 @@ -1744,7 +1744,6 @@ ko: webauthn: 보안 키 user_mailer: appeal_approved: - action: 내 계정으로 가기 explanation: "%{strike_date}에 일어난 중재결정에 대한 소명을 %{appeal_date}에 작성했으며 승낙되었습니다. 당신의 계정은 정상적인 상태로 돌아왔습니다." subject: 귀하가 %{date}에 작성한 소명이 승낙되었습니다 title: 소명이 받아들여짐 @@ -1753,7 +1752,6 @@ ko: subject: "%{date}에 작성한 소명이 반려되었습니다." title: 이의 제기가 거절되었습니다 backup_ready: - explanation: 마스토돈 계정의 전체 백업을 요청하셨지요. 이제 다운로드할 수 있습니다! subject: 아카이브를 다운로드할 수 있습니다 title: 아카이브 테이크아웃 suspicious_sign_in: diff --git a/config/locales/ku.yml b/config/locales/ku.yml index b9cc5fe77e539a..e78e7ecfbb7ae7 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -1542,7 +1542,6 @@ ku: webauthn: Kilîdên ewlehiyê user_mailer: appeal_approved: - action: Biçe ajimêra xwe explanation: Îtîraza binpêkirinê ya li dijî ajimêrê te ya %{strike_date} ku te di %{appeal_date} de şandibû hate pejirandin. Ajimêrê te careke din di rewşek baş de ye. subject: Îtîraza te ji %{date} hate pejirandin title: Îtîraz hate pejirandin @@ -1551,7 +1550,6 @@ ku: subject: Îtîraza te ji %{date} nehate pejirandin title: Îtîraz nehate pejirandin backup_ready: - explanation: Te yedekîya tijê ya ajimêrê xwe Mastodonê xwest. Niha ji daxistinê re amade ye! subject: Arşîva te amede ye bo daxistinê title: Pakêtkirina arşîvan suspicious_sign_in: diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 550036b340f83b..d1247fc781399d 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -1542,6 +1542,7 @@ lad: unknown_browser: Navigador deskonosido weibo: Weibo current_session: Sesyon aktuala + date: Data description: "%{browser} en %{platform}" explanation: Estos son los navigadores internetikos konektados aktualmente kon tu kuento de Mastodon. ip: IP @@ -1707,16 +1708,16 @@ lad: webauthn: Yaves de sigurita user_mailer: appeal_approved: - action: Va a tu kuento + action: Preferensyas de kuento explanation: La apelasyon del amonestamiento kontra tu kuento del %{strike_date} ke mandates el %{appeal_date} fue achetada. Tu kuento se topa de muevo en dobro estado. subject: Tu apelasyon del %{date} fue achetada title: Apelasyon achetada appeal_rejected: explanation: La apelasyon del amonestamiento kontra tu kuento del %{strike_date} ke mandates el %{appeal_date} fue refuzada. subject: Tu apelasyon del %{date} fue refuzada + subtitle: Tu apelasyon fue refuzada. title: Apelasyon refuzada backup_ready: - explanation: Tienes solisitado una kopia kompleta de tu kuento de Mastodon. Ya esta pronta para abashar! subject: Tu dosya esta pronta para abashar title: Abasha dosya suspicious_sign_in: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index b194011a424c3a..f3715fd2ee7003 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -48,15 +48,22 @@ lt: new_email: Naujas el pašto adresas submit: Pakeisti el pašto adresą title: Pakeisti el pašto adresą vartotojui %{username} + change_role: + label: Keisti vaidmenį + no_role: Jokios vaidmenį + title: Keisti vaidmenį %{username} confirm: Patvirtinti confirmed: Patvirtinta confirming: Tvirtinama + custom: Pasirinktinis + delete: Ištrinti duomenis deleted: Ištrinti demote: Pažeminti disable: Išjungti - disable_two_factor_authentication: Išjungti 2 faktorių autentifikaciją + disable_sign_in_token_auth: Išjungti el. pašto prieigos rakto tapatybės nustatymą + disable_two_factor_authentication: Išjungti 2FA disabled: Išjungta - display_name: Matomas vardas + display_name: Rodomas vardas domain: Domenas edit: Keisti email: El paštas @@ -483,6 +490,7 @@ lt: browsers: generic: Nežinoma naršyklė current_session: Dabartinė sesija + date: Data description: "%{browser} ant %{platform}" explanation: Čia rodomos web naršyklės prijungtos prie Jūsų Mastodon paskyros. revoke: Atšaukti @@ -541,8 +549,14 @@ lt: recovery_codes_regenerated: Atkūrimo kodai sėkmingai sugeneruoti recovery_instructions_html: Jeigu prarandate prieiga prie telefono, jūs galite naudoti atkūrimo kodus esančius žemiau, kad atgautumėte priega prie savo paskyros.Laikykite atkūrimo kodus saugiai Pavyzdžiui, galite norėti juos išspausdinti, ir laikyti kartu su kitais svarbiais dokumentais. user_mailer: + appeal_approved: + action: Paskyros nustatymai + subtitle: Tavo paskyros būklė vėl yra gera. + appeal_rejected: + subtitle: Tavo apeliacija buvo atmesta. backup_ready: - explanation: Jūs prašėte pilnos Mastodon paskyros atsarginės kopijos. Ji paruošta parsisiuntimui! + explanation: Prašai sukurti pilną Mastodon paskyros atsarginę kopiją. + extra: Jį jau galima atsisiųsti! subject: Jūsų archyvas paruoštas parsisiuntimui title: Archyvas išimtas warning: diff --git a/config/locales/lv.yml b/config/locales/lv.yml index c532b84e27e4ac..fcf478cf9387ab 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1803,7 +1803,6 @@ lv: webauthn: Drošības atslēgas user_mailer: appeal_approved: - action: Dodies uz savu kontu explanation: Apelācija par brīdinājumu jūsu kontam %{strike_date}, ko iesniedzāt %{appeal_date}, ir apstiprināta. Jūsu konts atkal ir labā stāvoklī. subject: Jūsu %{date} apelācija ir apstiprināta title: Apelācija apstiprināta @@ -1812,7 +1811,6 @@ lv: subject: Jūsu %{date} apelācija ir noraidīta title: Apelācija noraidīta backup_ready: - explanation: Tu pieprasīji pilnu sava Mastodon konta dublējumu. Tagad tas ir gatavs lejupielādei! subject: Tavs arhīvs ir gatavs lejupielādei title: Arhīva līdzņemšana suspicious_sign_in: diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 74acf875522be8..6625a13b3b8369 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1720,7 +1720,6 @@ ms: webauthn: Kunci keselamatan user_mailer: appeal_approved: - action: Pergi ke akaun anda explanation: Rayuan pelanggaran yang dikemukakan pada %{appeal_date} terhadap akaun anda pada %{strike_date} telah diluluskan. Akaun anda kini dalam kedudukan yang baik. subject: Rayuan anda dari %{date} telah diluluskan title: Rayuan diluluskan @@ -1729,7 +1728,6 @@ ms: subject: Rayuan anda dari %{date} telah ditolak title: Rayuan ditolak backup_ready: - explanation: Anda meminta sandaran penuh akaun Mastodon anda. Ia kini sedia untuk dimuat turun! subject: Arkib anda sedia untuk dimuat turun title: Arkibkan bawa pulang suspicious_sign_in: diff --git a/config/locales/my.yml b/config/locales/my.yml index 4ba4fcfad3aa67..094f581eb90d4b 100644 --- a/config/locales/my.yml +++ b/config/locales/my.yml @@ -1719,7 +1719,6 @@ my: webauthn: လုံခြုံရေးကီးများ user_mailer: appeal_approved: - action: သင့်အကောင့်သို့ သွားပါ explanation: "%{appeal_date} တွင် သင်တင်သွင်းခဲ့သည့် %{strike_date} တွင် သင့်အကောင့်ကို ဆန့်ကျင်သည့် တိုင်ချက်၏ အယူခံဝင်မှုကို အတည်ပြုပြီးဖြစ်သည်။ သင့်အကောင့်သည် ကောင်းမွန်သောအနေအထားတွင် ရှိနေပြန်သည်။" subject: "%{date} တွင် သင့်အယူခံဝင်ချက်ကို အတည်ပြုပြီးပါပြီ" title: အယူခံဝင်သည် @@ -1728,7 +1727,6 @@ my: subject: "%{date} တွင် သင့်တင်ပြချက်ကို ပယ်ချခဲ့သည်" title: အယူခံကို ပယ်ချခဲ့သည် backup_ready: - explanation: သင့် Mastodon အကောင့် အရန်ကူးယူရန် တောင်းဆိုပြီးဖြစ်သည်။ ယခု ဒေါင်းလုဒ်လုပ်နိုင်ပါပြီ။ subject: သင့်မှတ်တမ်း ဒေါင်းလုဒ်ဆွဲရန် အသင့်ဖြစ်ပါပြီ title: မှတ်တမ်းသိမ်းရန် suspicious_sign_in: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 34769e08ec1d07..9235b99fed1a81 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -425,7 +425,7 @@ nl: view: Domeinblokkade bekijken email_domain_blocks: add_new: Nieuwe toevoegen - allow_registrations_with_approval: Inschrijvingen met goedkeuring toestaan + allow_registrations_with_approval: Registraties met goedkeuring toestaan attempts_over_week: one: "%{count} registratiepoging tijdens de afgelopen week" other: "%{count} registratiepogingen tijdens de afgelopen week" @@ -571,7 +571,7 @@ nl: enable_hint: Eenmaal ingeschakeld gaat jouw server zich op alle openbare berichten van deze relayserver abonneren en stuurt het de openbare berichten van jouw server naar de relayserver. enabled: Ingeschakeld inbox_url: Relay-URL - pending: Aan het wachten op toestemming van de relayserver + pending: Aan het wachten op goedkeuring van de relayserver save_and_enable: Opslaan en inschakelen setup: Een verbinding met een relayserver maken signatures_not_enabled: Federatierelays werken mogelijk niet goed wanneer de veilige modus of de beperkte federatiemodus is ingeschakeld @@ -1608,6 +1608,7 @@ nl: unknown_browser: Onbekende browser weibo: Weibo current_session: Huidige sessie + date: Datum description: "%{browser} op %{platform}" explanation: Dit zijn de webbrowsers die momenteel met jouw Mastodonaccount zijn ingelogd. ip: IP @@ -1774,16 +1775,19 @@ nl: webauthn: Beveiligingssleutels user_mailer: appeal_approved: - action: Ga naar je account + action: Accountinstellingen explanation: Het bezwaar tegen een door een moderator vastgestelde overtreding van jou op %{strike_date}, ingediend op %{appeal_date}, is goedgekeurd. De eerder vastgestelde overtreding is hierbij niet langer geldig. subject: Jouw bezwaar van %{date} is goedgekeurd + subtitle: Jouw account heeft weer een goede reputatie. title: Bezwaar goedgekeurd appeal_rejected: explanation: Het bezwaar tegen een door een moderator vastgestelde overtreding van jou op %{strike_date}, ingediend op %{appeal_date}, is afgewezen. De vastgestelde overtreding blijft daarom ongewijzigd. subject: Jouw bezwaar van %{date} is afgewezen + subtitle: Jouw bezwaar is afgewezen. title: Bezwaar afgewezen backup_ready: - explanation: Je hebt een volledige back-up van jouw Mastodon-account opgevraagd. Het staat nu klaar om te worden gedownload! + explanation: Je hebt een volledige back-up van je Mastodon-account aangevraagd. + extra: Het staat nu klaar om te worden gedownload! subject: Jouw archief staat klaar om te worden gedownload title: Archief ophalen suspicious_sign_in: diff --git a/config/locales/nn.yml b/config/locales/nn.yml index de23096ed18d23..914ee7fb048d24 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1774,7 +1774,6 @@ nn: webauthn: Sikkerhetsnøkler user_mailer: appeal_approved: - action: Gå til din konto explanation: Apellen på prikken mot din kontor på %{strike_date} som du la inn på %{appeal_date} har blitt godkjend. Din konto er nok ein gong i god stand. subject: Din klage fra %{date} er godkjent title: Anke godkjend @@ -1783,7 +1782,6 @@ nn: subject: Din klage fra %{date} er avvist title: Anke avvist backup_ready: - explanation: Du ba om en fullstendig sikkerhetskopi av Mastodon-kontoen din. Den er nå klar for nedlasting! subject: Arkivet ditt er klart til å lastes ned title: Nedlasting av arkiv suspicious_sign_in: diff --git a/config/locales/no.yml b/config/locales/no.yml index 54f82550b7ab34..61cc89181e081b 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -1774,7 +1774,6 @@ webauthn: Sikkerhetsnøkler user_mailer: appeal_approved: - action: Gå til kontoen din explanation: Klagen på advarselen mot din konto den %{strike_date} som du sendte inn den %{appeal_date} har blitt godkjent. Din konto er nok en gang i god stand. subject: Din klage fra %{date} er godkjent title: Klage godkjent @@ -1783,7 +1782,6 @@ subject: Din klage fra %{date} er avvist title: Klage avvist backup_ready: - explanation: Du ba om en fullstendig sikkerhetskopi av Mastodon-kontoen din. Den er nå klar for nedlasting! subject: Arkivet ditt er klart til å lastes ned title: Nedlasting av arkiv suspicious_sign_in: diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 83c2638b516f93..2887fc98b35c68 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -948,10 +948,7 @@ oc: recovery_instructions_html: Se vos arriba de perdre vòstre mobil, podètz utilizar un dels còdis de recuperacion cai-jos per poder tornar accedir a vòstre compte. Gardatz los còdis en seguretat, per exemple, imprimissètz los e gardatz los amb vòstres documents importants. webauthn: Claus de seguretat user_mailer: - appeal_approved: - action: Anatz al vòstre compte backup_ready: - explanation: Avètz demandat una salvagarda complèta de vòstre compte Mastodon. Es prèsta per telecargament ! subject: Vòstre archiu es prèst per telecargament title: Archiu per emportar warning: diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 15aefe5f740eb3..8a973b71c7f626 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1660,6 +1660,7 @@ pl: unknown_browser: Nieznana Przeglądarka weibo: Weibo current_session: Obecna sesja + date: Data description: "%{browser} na %{platform}" explanation: Przeglądarki z aktywną sesją Twojego konta. ip: Adres IP @@ -1838,16 +1839,19 @@ pl: webauthn: Klucze bezpieczeństwa user_mailer: appeal_approved: - action: Przejdź do swojego konta + action: Ustawienia Konta explanation: Twoje odwołanie dotyczące ostrzeżenia nałożonego na twoje konto dnia %{strike_date}, które zostało wysłane dnia %{appeal_date} zostało zatwierdzone. Twoje konto jest ponownie w dobrej kondycji. subject: Twoje odwołanie z dnia %{date} zostało zatwierdzone + subtitle: Reputacja twojego konta została przywrócona. title: Odwołanie zatwierdzone appeal_rejected: explanation: Twoje odwołanie dotyczące ostrzeżenia nałożonego na twoje konto dnia %{strike_date}, które zostało wysłane dnia %{appeal_date} zostało odrzucone. subject: Twoje odwołanie z dnia %{date} zostało odrzucone + subtitle: Twoje odwołanie zostało odrzucone. title: Odwołanie odrzucone backup_ready: - explanation: Zażądałeś pełnej kopii zapasowej konta na Mastodonie. Jest ona dostępna do pobrania! + explanation: Zamówiono pełną kopię zapasową twojego konta Mastodon. + extra: Gotowe do pobrania! subject: Twoje archiwum jest gotowe do pobrania title: Odbiór archiwum suspicious_sign_in: diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 2c485283b17c4c..47ad0ac4488a49 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1608,6 +1608,7 @@ pt-BR: unknown_browser: Navegador desconhecido weibo: Weibo current_session: Sessão atual + date: Data description: "%{browser} em %{platform}" explanation: Estes são os navegadores que estão conectados com a sua conta Mastodon. ip: IP @@ -1774,16 +1775,18 @@ pt-BR: webauthn: Chaves de segurança user_mailer: appeal_approved: - action: Acessar perfil + action: Configurações da conta explanation: A revisão da punição na sua conta em %{strike_date} que você enviou em %{appeal_date} foi aprovada. Sua conta está novamente em situação regular. subject: Sua revisão de %{date} foi aprovada title: Revisão aprovada appeal_rejected: explanation: A revisão da punição na sua conta em %{strike_date} que você enviou em %{appeal_date} foi rejeitada. subject: Sua revisão de %{date} foi rejeitada + subtitle: Sua revisão foi rejeitada. title: Revisão rejeitada backup_ready: - explanation: Você pediu um backup completo da sua conta no Mastodon. E agora está pronto para ser baixado! + explanation: Você solicitou um ‘backup’ completo da sua conta Mastodon. + extra: Agora está pronto para baixar! subject: Seu arquivo está pronto para ser baixado title: Baixar arquivo suspicious_sign_in: diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 111f0fa8eef843..fc1e3e6367b043 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1608,6 +1608,7 @@ pt-PT: unknown_browser: Navegador Desconhecido weibo: Weibo current_session: Sessão atual + date: Data description: "%{browser} em %{platform}" explanation: Estes são os navegadores que estão conectados com a tua conta do Mastodon. ip: IP @@ -1774,16 +1775,19 @@ pt-PT: webauthn: Chaves de segurança user_mailer: appeal_approved: - action: Ir para a sua conta + action: Configurações de Conta explanation: O recurso à reprimenda contra a sua conta de %{strike_date}, enviado a %{appeal_date}, foi deferido. A sua conta encontra-se novamente em situação regular. subject: O seu recurso de %{date} foi deferido + subtitle: A sua conta está em situação regular novamente. title: Recurso deferido appeal_rejected: explanation: O recurso à punição contra a sua conta de %{strike_date}, submetido em %{appeal_date}, foi indeferido. subject: O seu recurso de %{date} foi indeferido + subtitle: O seu recurso foi rejeitado. title: Recurso indeferido backup_ready: - explanation: Pediu uma cópia integral de salvaguarda da sua conta Mastodon. Já está pronta para descarregar! + explanation: Pediu uma cópia completa da sua conta Mastodon. + extra: Está pronta para transferir! subject: O seu arquivo está pronto para descarregar title: Arquivo de ficheiros suspicious_sign_in: diff --git a/config/locales/ro.yml b/config/locales/ro.yml index 12c06505b8507e..1bdc4e8ca5e060 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -693,7 +693,6 @@ ro: recovery_instructions_html: Dacă îți pierzi vreodată accesul la telefon, poți folosi unul dintre codurile de recuperare de mai jos pentru a recâștiga accesul la contul tău. Păstrați codurile de recuperare în condiții de siguranță. De exemplu, le puteți tipări și stoca cu alte documente importante. user_mailer: backup_ready: - explanation: Ai solicitat o copie de rezervă completă a contului tău. Acum este gata pentru descărcare! subject: Arhiva ta este gata pentru descărcare title: Preluare arhivă warning: diff --git a/config/locales/ru.yml b/config/locales/ru.yml index b1c86494c7c6ba..2644275c37f5c1 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1837,7 +1837,6 @@ ru: webauthn: Ключи безопасности user_mailer: appeal_approved: - action: Перейти к своему профилю explanation: Апелляция на разблокировку против вашей учетной записи %{strike_date}, которую вы подали на %{appeal_date}, была одобрена. Ваша учетная запись снова на хорошем счету. subject: Ваше обжалование от %{date} была одобрено title: Обжалование одобрено @@ -1846,7 +1845,6 @@ ru: subject: Ваше обжалование от %{date} отклонено title: Обжалование отклонено backup_ready: - explanation: Вы запросили архив всех данных вашей учётной записи Mastodon. Что ж, он готов к скачиванию. subject: Ваш архив готов к загрузке title: Архив ваших данных готов suspicious_sign_in: diff --git a/config/locales/sc.yml b/config/locales/sc.yml index d92b64783a1ff5..273ef9d2d942e9 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -1077,7 +1077,6 @@ sc: webauthn: Craes de seguresa user_mailer: backup_ready: - explanation: As pedidu una còpia de seguresa totale de su contu de Mastodon tuo. Immoe est pronta pro s'iscarrigamentu! subject: S'archìviu tuo est prontu pro èssere iscarrigadu title: Collida dae s'archìviu warning: diff --git a/config/locales/sco.yml b/config/locales/sco.yml index f77c4c797881a8..a1071197f18aa8 100644 --- a/config/locales/sco.yml +++ b/config/locales/sco.yml @@ -1532,7 +1532,6 @@ sco: webauthn: Security keys user_mailer: appeal_approved: - action: Gang tae yer accoont explanation: The appeal o the strike agin yer accoont on %{strike_date} thit ye submittit on %{appeal_date} haes been approved. Yer accoont is ance again in guid staunnin. subject: Yer appeal fae %{date} haes been approved title: Appeal approved @@ -1541,7 +1540,6 @@ sco: subject: Yer appeal fae %{date} haes been rejectit title: Appeal rejectit backup_ready: - explanation: Ye wantit a ful backup o yer Mastodon accoont. It's riddy fir tae doonload noo! subject: Yer archive is riddy fir doonload title: Archive takoot suspicious_sign_in: diff --git a/config/locales/si.yml b/config/locales/si.yml index 70aefafc11c52f..660fd3ba31c080 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -1389,7 +1389,6 @@ si: webauthn: ආරක්‍ෂණ යතුරු user_mailer: appeal_approved: - action: ඔබගේ ගිණුමට යන්න explanation: ඔබ %{appeal_date} දින ඉදිරිපත් කළ %{strike_date} හි ඔබේ ගිණුමට එරෙහි වර්ජනයේ අභියාචනය අනුමත කර ඇත. ඔබගේ ගිණුම නැවත වරක් හොඳ තත්වයක පවතී. subject: "%{date} සිට ඔබගේ අභියාචනය අනුමත කර ඇත" title: අභියාචනය අනුමත කර ඇත @@ -1398,7 +1397,6 @@ si: subject: "%{date} සිට ඔබගේ අභියාචනය ප්‍රතික්ෂේප කර ඇත" title: අභියාචනය ප්‍රතික්ෂේප විය backup_ready: - explanation: ඔබගේ මාස්ටඩන් ගිණුමේ පූර්ණ උපස්ථයක් ඉල්ලා ඇත. එය දැන් බාගැනීමට හැකිය! subject: ඔබගේ සංරක්ෂිතය බාගැනීමට සූදානම්ය title: සංරක්ෂිත රැගෙන යාම suspicious_sign_in: diff --git a/config/locales/simple_form.ast.yml b/config/locales/simple_form.ast.yml index 4ffc4bd1662b5b..9b560b67ebbca6 100644 --- a/config/locales/simple_form.ast.yml +++ b/config/locales/simple_form.ast.yml @@ -2,6 +2,9 @@ ast: simple_form: hints: + account: + note: 'Pues @mentar a otros perfiles o poner #etiquetes.' + unlocked: Los perfiles van ser a siguite ensin solicitar la to aprobación. Desmarca esta opción si quies revisar les solicitúes de siguimientu y escoyer si aceptales o refugales. admin_account_action: text_html: Opcional. Pues usar la sintaxis de los artículos ya amestar alvertencies preconfiguraes p'aforrar tiempu type_html: Escueyi qué facer con %{acct} @@ -59,9 +62,11 @@ ast: chosen_languages: Namás los artículos de les llingües que marques son los que van apaecer nes llinies de tiempu públiques labels: account: + discoverable: Destacar el perfil ya los artículos nos algoritmos de descubrimientu fields: name: Etiqueta value: Conteníu + indexable: Incluyir los artículos públicos nos resultaos de busca account_warning_preset: title: Títulu admin_account_action: @@ -166,9 +171,13 @@ ast: pending_account: Una cuenta nueva precisa una revisión reblog: Daquién compartió'l to artículu report: Unvióse un informe nuevu + software_updates: + label: Hai disponible un anovamientu de Mastodon trending_tag: Una tendencia rique una revisión rule: text: Norma + settings: + indexable: Incluyir la páxina del perfil nos motores de busca tag: listable: Permitir qu'esta etiqueta apaeza nes busques ya nes suxerencies name: Etiqueta @@ -176,6 +185,7 @@ ast: usable: Permitir que los artículos usen esta etiqueta user: role: Rol + time_zone: Fusu horariu user_role: name: Nome permissions_as_keys: Permisos diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index c0dc68c3853598..538ced10ca060d 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -72,6 +72,7 @@ en: setting_dtl_menu: Show DTL menu on web setting_emoji_reaction_policy: Even with this setting, users on other servers are free to put their stamp on the post and share it within the same server. If you simply want to remove the stamp from your own screen, you can disable it from the appearance settings setting_enable_emoji_reaction: If turn off, other users still can react your posts + setting_reverse_search_quote: Double-quotes will result in a search with a wider range of notation, which is the opposite of Mastodon's default behavior. setting_single_ref_to_quote: If this server does not have target post, target server maybe cannot read your quote setting_use_blurhash: Gradients are based on the colors of the hidden visuals but obfuscate any details setting_use_pending_items: Hide timeline updates behind a click instead of automatically scrolling the feed @@ -283,7 +284,7 @@ en: setting_reduce_motion: Reduce motion in animations setting_reject_public_unlisted_subscription: Reject sending public unlisted visibility/non-public searchability posts to Misskey, Calckey setting_reject_unlisted_subscription: Reject sending unlisted visibility/non-public searchability posts to Misskey, Calckey - setting_send_without_domain_blocks: Send your post to all server with administrator set as rejecting-post-server for protect you [DEPRECATED] + setting_reverse_search_quote: Perform word-by-word search when search keywords are not enclosed in double quotes setting_show_application: Disclose application used to send posts setting_show_emoji_reaction_on_timeline: Show all stamps on timeline setting_show_quote_in_home: Show quotes in home, list or antenna timelines diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index ffefa6b347cf1a..7fb63b8523eb1c 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -60,7 +60,6 @@ ja: person: これは人が使用している通常のアカウントです phrase: 投稿内容の大文字小文字や閲覧注意に関係なく一致 scopes: アプリの API に許可するアクセス権を選択してください。最上位のスコープを選択する場合、個々のスコープを選択する必要はありません。 - setting_send_without_domain_blocks: 管理人が同人コンテンツの配送にふさわしくないと判断したサーバーに、制限に関係なく全ての投稿を配送します。ただし何が起きても自己責任になります setting_aggregate_reblogs: 最近ブーストされた投稿が新たにブーストされても表示しません (設定後受信したものにのみ影響) setting_always_send_emails: 通常、Mastodon からメール通知は行われません。 setting_bookmark_category_needed: すべてのカテゴリから削除したとき、ブックマークが自動で外れるようになります @@ -81,6 +80,7 @@ ja: setting_hide_network: フォローとフォロワーの情報がプロフィールページで見られないようにします setting_public_post_to_unlisted: 未対応のサードパーティアプリからもローカル公開で投稿できますが、公開投稿はWeb以外できなくなります setting_reject_unlisted_subscription: Misskeyやそのフォークは、フォローしていないアカウントの「非収載」投稿を **購読・検索** することができます。これはkmyblueの挙動と異なります。そのようなサーバーに、指定した公開範囲の投稿を「フォロワーのみ」として配送します。ただし構造上、完璧な対応は困難でたまに非収載として配信されること、ご理解ください + setting_reverse_search_quote: 検索ワードをダブルクオートで囲って検索した場合、表記ゆれ多めの検索結果になります。Mastodon標準とは逆の挙動となります。 setting_show_application: 投稿するのに使用したアプリが投稿の詳細ビューに表示されるようになります setting_single_ref_to_quote: 当サーバーがまだ対象投稿を取り込んでいない場合、引用が相手に正常に認識されない場合があります setting_stop_emoji_reaction_streaming: 通信容量の節約に役立ちます @@ -294,7 +294,7 @@ ja: setting_reduce_motion: アニメーションの動きを減らす setting_reject_public_unlisted_subscription: Misskey系サーバーに「ローカル公開」かつ検索許可「誰でも以外」の投稿を「フォロワーのみ」に変換して配送する setting_reject_unlisted_subscription: Misskey系サーバーに「非収載」かつ検索許可「誰でも以外」の投稿を「フォロワーのみ」に変換して配送する - setting_send_without_domain_blocks: 管理人の設定した配送停止設定を拒否する (非推奨) + setting_reverse_search_quote: ダブルクオートで囲まず検索した時、単語単位で検索する setting_show_application: 送信したアプリを開示する setting_show_emoji_reaction_on_timeline: タイムライン上に他の人のつけたスタンプを表示する setting_simple_timeline_menu: タイムライン上でメニューの項目を減らす diff --git a/config/locales/sk.yml b/config/locales/sk.yml index a91f1d620ec951..fdd64b5bb70573 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -448,6 +448,7 @@ sk: title: Moderácia private_comment: Súkromný komentár public_comment: Verejný komentár + purge: Vyčisti title: Federácia total_blocked_by_us: Nami blokované total_followed_by_them: Nimi sledované @@ -600,6 +601,8 @@ sk: title: Ohľadom appearance: title: Vzhľad + branding: + title: Značka content_retention: title: Ponechanie obsahu discovery: @@ -721,6 +724,7 @@ sk: disable: Vypni disabled: Vypnuté enable: Povoľ + enabled: Aktívne status: Stav admin_mailer: new_appeal: @@ -1134,6 +1138,7 @@ sk: unknown_browser: Neznámy prehliadač weibo: Sina/Tencent Weibo current_session: Aktuálna sezóna + date: Dátum description: "%{browser} na %{platform}" explanation: Tieto sú prehliadače ktoré sú teraz prihlásené na tvoj Mastodon účet. ip: IP adresa @@ -1241,9 +1246,12 @@ sk: recovery_instructions_html: Keď hocikedy stratíš prístup k svojmu telefónu, môžeš použiť jeden z prístupových kódov nižšie pre obnovenie prístupu k svojmu účtu. Skladuj tieto prístupové kódy na bezpečnom mieste. Napríklad ich môžeš vytlačiť a uložiť ich spolu s inými dôležitými dokumentami. user_mailer: appeal_approved: - action: Choď na svoj účet + action: Nastavenia účtu + appeal_rejected: + subtitle: Tvoje odvolanie bolo zamietnuté. backup_ready: - explanation: Vyžiadal/a si si úplnú zálohu svojho Mastodon účtu. Táto záloha je teraz pripravená na stiahnutie! + explanation: Vyžiadal/a si si úplnú zálohu svojho Mastodon účtu. + extra: Teraz je pripravená na stiahnutie! subject: Tvoj archív je pripravený na stiahnutie title: Odber archívu warning: diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 83d52ae0e73b8b..1a0afe034fce65 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1660,6 +1660,7 @@ sl: unknown_browser: Neznan brskalnik weibo: Weibo current_session: Trenutna seja + date: Datum description: "%{browser} na %{platform}" explanation: To so spletni brskalniki, ki so trenutno prijavljeni v vaš Mastodon račun. ip: IP @@ -1838,16 +1839,19 @@ sl: webauthn: Varnostni ključi user_mailer: appeal_approved: - action: Pojdite na svoj račun + action: Nastavitve računa explanation: Pritožbi na ukrep proti vašemu računu z dne %{strike_date}, ki ste jo oddali dne %{appeal_date}, je bilo ugodeno. Vaš račun je znova nesporen. subject: Vaši pritožbi z dne %{date} je bilo ugodeno + subtitle: Vaš račun je znova na dobrem glasu. title: Pritožbi ugodeno appeal_rejected: explanation: Pritožba na ukrep proti vašemu računu z dne %{strike_date}, ki ste jo oddali dne %{appeal_date}, je bila zavrnjena. subject: Vaša pritožba z dne %{date} je bila zavrnjena + subtitle: Vaša pritožba je bila zavržena. title: Pritožba zavrnjena backup_ready: - explanation: Zahtevali ste popolno varnostno kopijo računa Mastodon. Zdaj je pripravljen za prenos! + explanation: Zahtevali ste polno varnostno kopijo svojega računa Mastodon. + extra: Zdaj je na voljo za prenos! subject: Vaš arhiv je pripravljen za prenos title: Prevzem arhiva suspicious_sign_in: diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 9ab6e85361f34c..1693db7f3106da 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1770,7 +1770,6 @@ sq: webauthn: Kyçe sigurie user_mailer: appeal_approved: - action: Kaloni te llogaria juaj explanation: Apelimi i paralajmërimit kundër llogarisë tuaj më %{strike_date}, të cilin e parashtruar më %{appeal_date} është miratuar. Llogaria juaj është sërish në pozita të mira. subject: Apelimi juaj i datës %{date} u miratua title: Apelimi u miratua @@ -1779,7 +1778,6 @@ sq: subject: Apelimi juaj prej %{date} është hedhur poshtë title: Apelimi u hodh poshtë backup_ready: - explanation: Kërkuat një kopjeruajtje të plotë të llogarisë tuaj Mastodon. E keni gati për shkarkim! subject: Arkivi juaj është gati për shkarkim title: Marrje arkivi me vete suspicious_sign_in: diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 02f63ede7172ac..fc1239bedfc067 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1634,6 +1634,7 @@ sr-Latn: unknown_browser: Nepoznati pregledač weibo: Veibo current_session: Trenutna sesija + date: Datum description: "%{browser} sa %{platform}" explanation: Ovo su veb pretraživači koji su trenutno prijavljeni na vaš Mastodon nalog. ip: IP @@ -1806,16 +1807,19 @@ sr-Latn: webauthn: Sigurnosni ključevi user_mailer: appeal_approved: - action: Idite na svoj nalog + action: Podešavanja naloga explanation: Žalba podneta datuma %{appeal_date} na upisan prestup na Vaše ime datuma %{strike_date} je uvažena. Vaš nalog je ponovo u povoljnom položaju. subject: Vaša žalba podneta %{date} je uvažena + subtitle: Vaš nalog je ponovo na dobrom glasu. title: Žalba uvažena appeal_rejected: explanation: Žalba podneta datuma %{appeal_date} na upisan prestup na Vaše ime datuma %{strike_date} je odbijena. subject: Vaša žalba podneta %{date} je odbijena + subtitle: Vaša žalba je odbijena. title: Žalba odbijena backup_ready: - explanation: Tražili ste potpunu rezervnu kopiju vašeg Mastodon naloga. Spremna je za preuzimanje! + explanation: Zahtevali ste punu rezervnu kopiju Mastodon naloga. + extra: Sada je spremno za preuzimanje! subject: Vaša arhiva je spremna za preuzimanje title: Izvoz arhive suspicious_sign_in: diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 51613940bc679f..4e5e58c85981d5 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1634,6 +1634,7 @@ sr: unknown_browser: Непознати прегледач weibo: Веибо current_session: Тренутна сесија + date: Датум description: "%{browser} са %{platform}" explanation: Ово су веб претраживачи који су тренутно пријављени на ваш Mastodon налог. ip: IP @@ -1806,16 +1807,19 @@ sr: webauthn: Сигурносни кључеви user_mailer: appeal_approved: - action: Идите на свој налог + action: Подешавања налога explanation: Жалба поднета датума %{appeal_date} на уписан преступ на Ваше име датума %{strike_date} је уважена. Ваш налог је поново у повољном положају. subject: Ваша жалба поднета %{date} је уважена + subtitle: Ваш налог је поново на добром гласу. title: Жалба уважена appeal_rejected: explanation: Жалба поднета датума %{appeal_date} на уписан преступ на Ваше име датума %{strike_date} је одбијена. subject: Ваша жалба поднета %{date} је одбијена + subtitle: Ваша жалба је одбијена. title: Жалба одбијена backup_ready: - explanation: Тражили сте потпуну резервну копију вашег Mastodon налога. Спремна је за преузимање! + explanation: Захтевали сте пуну резервну копију Mastodon налога. + extra: Сада је спремно за преузимање! subject: Ваша архива је спремна за преузимање title: Извоз архиве suspicious_sign_in: diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 9a2bedbdfee0ac..d4657e9743c367 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1607,6 +1607,7 @@ sv: unknown_browser: Okänd browser weibo: Weibo current_session: Nuvarande session + date: Datum description: "%{browser} på %{platform}" explanation: Detta är inloggade webbläsare på Mastodon just nu. ip: IP @@ -1773,16 +1774,19 @@ sv: webauthn: Säkerhetsnycklar user_mailer: appeal_approved: - action: Gå till ditt konto + action: Kontoinställningar explanation: Överklagandet du skickade in den %{appeal_date} för pricken på ditt konto den %{strike_date} har godkänts. Ditt konto har återigen bra anseende. subject: Din överklagan den %{date} har godkänts + subtitle: Ditt konto är återigen i gott skick. title: Överklagan godkänd appeal_rejected: explanation: Överklagandet du skickade in den %{appeal_date} för pricken på ditt konto den %{strike_date} har avslagits. subject: Din överklagan den %{date} har avslagits + subtitle: Din överklagan har avvisats. title: Överklagan avslagen backup_ready: - explanation: Du begärde en fullständig säkerhetskopiering av ditt Mastodon-konto. Det är nu klart för nedladdning! + explanation: Du begärde en fullständig säkerhetskopia av ditt Mastodon-konto. + extra: Nu redo för nedladdning! subject: Ditt arkiv är klart för nedladdning title: Arkivuttagning suspicious_sign_in: diff --git a/config/locales/th.yml b/config/locales/th.yml index f553f6a41c14c0..7bea8f9de831b4 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1742,7 +1742,6 @@ th: webauthn: กุญแจความปลอดภัย user_mailer: appeal_approved: - action: ไปยังบัญชีของคุณ explanation: อนุมัติการอุทธรณ์การดำเนินการต่อบัญชีของคุณเมื่อ %{strike_date} ที่คุณได้ส่งเมื่อ %{appeal_date} แล้ว บัญชีของคุณอยู่ในสถานะที่ดีอีกครั้งหนึ่ง subject: อนุมัติการอุทธรณ์ของคุณจาก %{date} แล้ว title: อนุมัติการอุทธรณ์แล้ว @@ -1751,7 +1750,6 @@ th: subject: ปฏิเสธการอุทธรณ์ของคุณจาก %{date} แล้ว title: ปฏิเสธการอุทธรณ์แล้ว backup_ready: - explanation: คุณได้ขอข้อมูลสำรองแบบเต็มของบัญชี Mastodon ของคุณ ตอนนี้ข้อมูลสำรองพร้อมสำหรับการดาวน์โหลดแล้ว! subject: การเก็บถาวรของคุณพร้อมสำหรับการดาวน์โหลดแล้ว title: การส่งออกการเก็บถาวร suspicious_sign_in: diff --git a/config/locales/tr.yml b/config/locales/tr.yml index da8935f6cadafa..99b5e782ced647 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1608,6 +1608,7 @@ tr: unknown_browser: Bilinmeyen Tarayıcı weibo: Weibo current_session: Geçerli oturum + date: Tarih description: "%{platform} - %{browser}" explanation: Bunlar, Mastodon hesabınızda şu anda oturum açmış web tarayıcılarıdır. ip: IP @@ -1774,16 +1775,19 @@ tr: webauthn: Güvenlik anahtarları user_mailer: appeal_approved: - action: Hesabınıza gidin + action: Hesap Ayarları explanation: "%{appeal_date} tarihinde gönderdiğiniz, hesabınıza yönelik %{strike_date} tarihli eyleme itirazınız onaylandı. Hesabınız artık tekrar iyi durumda." subject: "%{date} tarihli itirazınız kabul edildi" + subtitle: Hesabınız yeniden iyi bir halde. title: İtiraz onaylandı appeal_rejected: explanation: "%{appeal_date} tarihinde gönderdiğiniz, hesabınıza yönelik %{strike_date} tarihli eyleme itirazınız reddedildi." subject: "%{date} tarihli itirazınız reddedildi" + subtitle: İtirazınız reddedildi. title: İtiraz reddedildi backup_ready: - explanation: Mastodon hesabınızın tam yedeğini istemiştiniz. Şimdi indirilebilir durumda! + explanation: Mastodon hesabınız tam bir yedeğini istediniz. + extra: Şimdi indirebilirsiniz! subject: Arşiviniz indirilmeye hazır title: Arşiv paketlemesi suspicious_sign_in: diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 7a1957eba76814..a80fbf1404be3b 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1660,6 +1660,7 @@ uk: unknown_browser: Невідомий браузер weibo: Weibo current_session: Поточний сеанс + date: Дата description: "%{browser} на %{platform}" explanation: Це веб-браузери, авторизовані у вашому обліковому записі Mastodon. ip: IP @@ -1838,7 +1839,7 @@ uk: webauthn: Ключі безпеки user_mailer: appeal_approved: - action: Перейти у ваш обліковий запис + action: Налаштування облікового запису explanation: Оскарження попередження вашому обліковому запису %{strike_date}, яке ви надіслали %{appeal_date} було схвалено. Ваш обліковий запис знову вважається добропорядним. subject: Вашу апеляцію від %{date} було схвалено title: Апеляцію схвалено @@ -1847,7 +1848,6 @@ uk: subject: Вашу апеляцію від %{date} було відхилено title: Апеляцію відхилено backup_ready: - explanation: Ви робили запит повної резервної копії вашого облікового запису Mastodon. Вона вже готова для завантаження! subject: Ваш архів готовий до завантаження title: Винесення архіву suspicious_sign_in: diff --git a/config/locales/vi.yml b/config/locales/vi.yml index f37132b6eb1df5..dabb73a475c6f0 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1582,6 +1582,7 @@ vi: unknown_browser: Trình duyệt khác weibo: Weibo current_session: Phiên hiện tại + date: Thời gian description: "%{browser} trên %{platform}" explanation: Đây là các ứng dụng đã từng đăng nhập vào tài khoản Mastodon của bạn. ip: IP @@ -1742,16 +1743,19 @@ vi: webauthn: Khóa bảo mật user_mailer: appeal_approved: - action: Đến trang hồ sơ của bạn + action: Cài đặt tài khoản explanation: Khiếu nại về tài khoản của bạn vào %{strike_date}, được gửi lúc %{appeal_date} đã được chấp nhận. Tài khoản của bạn đã có thể sử dụng bình thường. subject: Khiếu nại của bạn từ %{date} đã được chấp nhận + subtitle: Tài khoản của bạn có thể hoạt động lại bình thường. title: Khiếu nại đã được chấp nhận appeal_rejected: explanation: Khiếu nại về tài khoản của bạn vào %{strike_date}, được gửi lúc %{appeal_date} đã bị từ chối. subject: Khiếu nại của bạn từ %{date} đã bị từ chối + subtitle: Khiếu nại của bạn bị từ chối. title: Khiếu nại bị từ chối backup_ready: - explanation: Bạn đã yêu cầu sao lưu toàn bộ tài khoản Mastodon của mình. Bây giờ có thể tải về! + explanation: Bạn đã yêu cầu bản sao tài khoản Mastodon của mình. + extra: Hiện nó đã sẵn sàng tải xuống! subject: Dữ liệu cá nhân của bạn đã sẵn sàng để tải về title: Nhận dữ liệu cá nhân suspicious_sign_in: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index a573c8f99b4645..6611510b7dbbe4 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1582,6 +1582,7 @@ zh-CN: unknown_browser: 未知浏览器 weibo: 新浪微博 current_session: 当前会话 + date: 日期 description: "%{platform} 上的 %{browser}" explanation: 你的 Mastodon 账户目前已在这些浏览器上登录。 ip: IP 地址 @@ -1742,16 +1743,19 @@ zh-CN: webauthn: 安全密钥 user_mailer: appeal_approved: - action: 前往你的账号 + action: 账户设置 explanation: 你于 %{appeal_date} 对 %{strike_date} 在你账号上做出的处罚提出的申诉已被批准,你的账号已回到正常状态。 subject: 你于 %{date} 提出的申诉已被批准 + subtitle: 您的账户已再次回到良好状态。 title: 申诉已批准 appeal_rejected: explanation: 你于 %{appeal_date} 对 %{strike_date} 在你账号上做出的处罚提出的申诉已被驳回。 subject: 你于 %{date} 提出的申诉已被驳回 + subtitle: 您的申诉已被驳回。 title: 申诉已驳回 backup_ready: - explanation: 你请求了一份 Mastodon 账户的完整备份。现在你可以下载了! + explanation: 您之前请求为您的 Mastodon 账户创建一份完整的备份。 + extra: 现在它可以下载了! subject: 你的存档已经准备完毕 title: 存档导出 suspicious_sign_in: diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 61355a4c533fd8..4b682f935879e9 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -1582,6 +1582,7 @@ zh-HK: unknown_browser: 未知的瀏覽器 weibo: 新浪微博 current_session: 目前的作業階段 + date: 日期 description: "%{platform} 上的 %{browser}" explanation: 這些是現在正登入於你的 Mastodon 帳號的瀏覽器。 ip: IP 位址 @@ -1742,16 +1743,19 @@ zh-HK: webauthn: 安全密鑰 user_mailer: appeal_approved: - action: 前往你的帳號 + action: 帳號設定 explanation: 你在 %{appeal_date} 提交針對你帳號於 %{strike_date} 被警告的申訴已獲得批准。你的帳號再次回到良好狀態。 subject: 你在 %{date} 提出的申訴已獲批准 + subtitle: 你的帳號再次恢復正常。 title: 申訴已批准 appeal_rejected: explanation: 你在 %{appeal_date} 提交針對你帳號於 %{strike_date} 被警告的申訴已被駁回。 subject: 你在 %{date} 提出的申訴已被駁回 + subtitle: 你的申訴已被駁回. title: 申訴被駁回 backup_ready: - explanation: 你要求的 Mastodon 帳號完整備份檔案現已就緒,可供下載。 + explanation: 你要求完整備份你的 Mastodon 帳號。 + extra: 現在可以下載了! subject: 你的備份檔已可供下載 title: 檔案匯出 suspicious_sign_in: diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 3f3057cc05b3dc..dd17de7ef1bc2d 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1584,6 +1584,7 @@ zh-TW: unknown_browser: 未知的瀏覽器 weibo: 新浪微博 current_session: 目前的 session + date: 日期 description: "%{platform} 上的 %{browser}" explanation: 這些是現在正登入於您 Mastodon 帳號的瀏覽器。 ip: IP 位址 @@ -1744,16 +1745,19 @@ zh-TW: webauthn: 安全金鑰 user_mailer: appeal_approved: - action: 前往您的帳號 + action: 帳號設定 explanation: 您於 %{appeal_date} 遞交的針對您帳號的 %{strike_date} 警示之申訴已獲批准。您的帳號再次享有良好的信譽。 subject: 您於 %{date} 提出之申訴已獲批准 + subtitle: 您的帳號再次保持良好信譽。 title: 申訴已批准 appeal_rejected: explanation: 您於 %{appeal_date} 遞交的針對您帳號的 %{strike_date} 警示之申訴已被駁回。 subject: 您於 %{date} 提出之申訴已被駁回 + subtitle: 您的申訴已被駁回。 title: 申訴被駁回 backup_ready: - explanation: 您要求的 Mastodon 帳號完整備份檔案現已就緒,可供下載! + explanation: 您要求完整備份您的 Mastodon 帳號。 + extra: 準備好下載了! subject: 您的備份檔已可供下載 title: 檔案匯出 suspicious_sign_in: diff --git a/config/webpack/shared.js b/config/webpack/shared.js index 7c00d85d362d8b..8e77a840a518e3 100644 --- a/config/webpack/shared.js +++ b/config/webpack/shared.js @@ -96,6 +96,9 @@ module.exports = { resolve(settings.source_path), 'node_modules', ], + alias: { + "@": resolve(settings.source_path), + } }, resolveLoader: { diff --git a/db/post_migrate/20240117022353_remove_legacy_domain_block_columns.rb b/db/post_migrate/20240117022353_remove_legacy_domain_block_columns.rb new file mode 100644 index 00000000000000..958d7491e58789 --- /dev/null +++ b/db/post_migrate/20240117022353_remove_legacy_domain_block_columns.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class RemoveLegacyDomainBlockColumns < ActiveRecord::Migration[7.1] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + def change + safety_assured do + remove_column :domain_blocks, :reject_send_not_public_searchability, :boolean, null: false, default: false + remove_column :domain_blocks, :reject_send_public_unlisted, :boolean, null: false, default: false + remove_column :domain_blocks, :reject_send_dissubscribable, :boolean, null: false, default: false + remove_column :domain_blocks, :reject_send_media, :boolean, null: false, default: false + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 1024b851139650..5bbcc29f37d0ac 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_01_17_021025) do +ActiveRecord::Schema[7.1].define(version: 2024_01_17_022353) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -566,10 +566,6 @@ t.boolean "obfuscate", default: false, null: false t.boolean "reject_favourite", default: false, null: false t.boolean "reject_reply", default: false, null: false - t.boolean "reject_send_not_public_searchability", default: false, null: false - t.boolean "reject_send_public_unlisted", default: false, null: false - t.boolean "reject_send_dissubscribable", default: false, null: false - t.boolean "reject_send_media", default: false, null: false t.boolean "reject_send_sensitive", default: false, null: false t.boolean "reject_hashtag", default: false, null: false t.boolean "reject_straight_follow", default: false, null: false diff --git a/lib/mastodon/cli/accounts.rb b/lib/mastodon/cli/accounts.rb index 4146753035eca9..9dc65c1477d8fd 100644 --- a/lib/mastodon/cli/accounts.rb +++ b/lib/mastodon/cli/accounts.rb @@ -105,7 +105,7 @@ def create(username) if user.save if options[:confirmed] user.confirmed_at = nil - user.confirm! + user.mark_email_as_confirmed! end user.approve! if options[:approve] diff --git a/lib/tasks/dangerous.rake b/lib/tasks/dangerous.rake index 8086e56e5b5e9d..ebe3967e0937e5 100644 --- a/lib/tasks/dangerous.rake +++ b/lib/tasks/dangerous.rake @@ -7,9 +7,11 @@ namespace :dangerous do prompt = TTY::Prompt.new - exit(0) unless prompt.yes?('[1/3] Do you really want to go back to the original Mastodon?', default: false) - exit(0) unless prompt.yes?('[2/3] All proprietary data of kmyblue will be deleted and cannot be restored. Are you sure?', default: false) - exit(0) unless prompt.yes?('[3/3] This operation is irreversible. You have backups in case this operation causes a system malfunction, do you not?', default: false) + unless ENV['BACK_UPSTREAM_FORCE'] + exit(0) unless prompt.yes?('[1/3] Do you really want to go back to the original Mastodon?', default: false) + exit(0) unless prompt.yes?('[2/3] All proprietary data of kmyblue will be deleted and cannot be restored. Are you sure?', default: false) + exit(0) unless prompt.yes?('[3/3] This operation is irreversible. You have backups in case this operation causes a system malfunction, do you not?', default: false) + end target_migrations = %w( 20231022074913 @@ -78,6 +80,7 @@ namespace :dangerous do 20230223102416 20230222232121 20240117021025 + 20240117022353 ) # Removed: account_groups target_tables = %w( @@ -128,10 +131,10 @@ namespace :dangerous do %w(domain_blocks reject_new_follow), %w(domain_blocks reject_reply), %w(domain_blocks reject_reply_exclude_followers), - %w(domain_blocks reject_send_dissubscribable), - %w(domain_blocks reject_send_media), - %w(domain_blocks reject_send_not_public_searchability), - %w(domain_blocks reject_send_public_unlisted), + # Removed: domain_blocks reject_send_dissubscribable + # Removed: domain_blocks reject_send_media + # Removed: domain_blocks reject_send_not_public_searchability + # Removed: domain_blocks reject_send_public_unlisted # Removed: domain_blocks reject_send_unlisted_dissubscribable %w(domain_blocks reject_send_sensitive), %w(domain_blocks reject_straight_follow), diff --git a/lib/tasks/db.rake b/lib/tasks/db.rake index e8a64b8fb22b0b..3bc526bd21a434 100644 --- a/lib/tasks/db.rake +++ b/lib/tasks/db.rake @@ -15,7 +15,7 @@ namespace :db do end end - task :pre_migration_check do + task pre_migration_check: :environment do version = ActiveRecord::Base.connection.select_one("SELECT current_setting('server_version_num') AS v")['v'].to_i abort 'This version of Mastodon requires PostgreSQL 9.5 or newer. Please update PostgreSQL before updating Mastodon' if version < 90_500 end diff --git a/lib/tasks/icons.rake b/lib/tasks/icons.rake index 3e3d0daac5adfd..374ea149fee388 100644 --- a/lib/tasks/icons.rake +++ b/lib/tasks/icons.rake @@ -22,7 +22,7 @@ def find_used_icons Dir[Rails.root.join('app', 'javascript', '**', '*.*s*')].map do |path| File.open(path, 'r') do |file| - pattern = %r{\Aimport .* from 'mastodon/../material-icons/(?[0-9]+)-(?[0-9]+)px/(?[^-]*)(?-fill)?.svg\?react';} + pattern = %r{\Aimport .* from '@/material-icons/(?[0-9]+)-(?[0-9]+)px/(?[^-]*)(?-fill)?.svg\?react';} file.each_line do |line| match = pattern.match(line) next if match.blank? diff --git a/spec/controllers/auth/registrations_controller_spec.rb b/spec/controllers/auth/registrations_controller_spec.rb index bd1c6165951ebf..0b7f02f5900b7b 100644 --- a/spec/controllers/auth/registrations_controller_spec.rb +++ b/spec/controllers/auth/registrations_controller_spec.rb @@ -137,12 +137,49 @@ context 'when user has an email address requiring approval' do subject do + request.headers['Accept-Language'] = accept_language + post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', agreement: 'true' } } + end + + before do Setting.registrations_mode = 'open' Fabricate(:email_domain_block, allow_with_approval: true, domain: 'example.com') + end + + it 'creates unapproved user and redirects to setup' do + subject + expect(response).to redirect_to auth_setup_path + + user = User.find_by(email: 'test@example.com') + expect(user).to_not be_nil + expect(user.locale).to eq(accept_language) + expect(user.approved).to be(false) + end + end + + context 'when user has an email address requiring approval through a MX record' do + subject do request.headers['Accept-Language'] = accept_language post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', agreement: 'true' } } end + before do + Setting.registrations_mode = 'open' + Fabricate(:email_domain_block, allow_with_approval: true, domain: 'mail.example.com') + allow(User).to receive(:skip_mx_check?).and_return(false) + + resolver = instance_double(Resolv::DNS, :timeouts= => nil) + + allow(resolver).to receive(:getresources) + .with('example.com', Resolv::DNS::Resource::IN::MX) + .and_return([instance_double(Resolv::DNS::Resource::MX, exchange: 'mail.example.com')]) + allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([]) + allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([]) + allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::A).and_return([instance_double(Resolv::DNS::Resource::IN::A, address: '2.3.4.5')]) + allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::AAAA).and_return([instance_double(Resolv::DNS::Resource::IN::AAAA, address: 'fd00::2')]) + allow(Resolv::DNS).to receive(:open).and_yield(resolver) + end + it 'creates unapproved user and redirects to setup' do subject expect(response).to redirect_to auth_setup_path diff --git a/spec/features/oauth_spec.rb b/spec/features/oauth_spec.rb index 967956cc8ea91a..70356784d2c831 100644 --- a/spec/features/oauth_spec.rb +++ b/spec/features/oauth_spec.rb @@ -49,7 +49,7 @@ let(:user) { Fabricate(:user, email: email, password: password) } before do - user.confirm! + user.mark_email_as_confirmed! user.approve! end diff --git a/spec/lib/activitypub/tag_manager_spec.rb b/spec/lib/activitypub/tag_manager_spec.rb index caa940d169a657..34b4370d1b8b31 100644 --- a/spec/lib/activitypub/tag_manager_spec.rb +++ b/spec/lib/activitypub/tag_manager_spec.rb @@ -158,19 +158,24 @@ end it 'returns public collection for public status' do - status = Fabricate(:status, visibility: :public) + status = Fabricate(:status, account: user.account, visibility: :public) expect(subject.cc_for_misskey(status)).to eq [account_followers_url(status.account)] end it 'returns empty array for public_unlisted status' do - status = Fabricate(:status, account: user.account, visibility: :public_unlisted) + status = Fabricate(:status, account: user.account, visibility: :public_unlisted, searchability: :private) expect(subject.cc_for_misskey(status)).to eq [] end it 'returns empty array for unlisted status' do - status = Fabricate(:status, account: user.account, visibility: :unlisted) + status = Fabricate(:status, account: user.account, visibility: :unlisted, searchability: :private) expect(subject.cc_for_misskey(status)).to eq [] end + + it 'returns public collection for unlisted status but public searchability' do + status = Fabricate(:status, account: user.account, visibility: :unlisted, searchability: :public) + expect(subject.cc_for_misskey(status)).to eq ['https://www.w3.org/ns/activitystreams#Public'] + end end describe '#searchable_by' do diff --git a/spec/lib/mastodon/cli/accounts_spec.rb b/spec/lib/mastodon/cli/accounts_spec.rb index 64df29ebb33330..26ad983bbced97 100644 --- a/spec/lib/mastodon/cli/accounts_spec.rb +++ b/spec/lib/mastodon/cli/accounts_spec.rb @@ -660,106 +660,69 @@ def latest_backup end describe '#refresh' do + let(:action) { :refresh } + context 'with --all option' do - let!(:local_account) { Fabricate(:account, domain: nil) } - let!(:remote_account_example_com) { Fabricate(:account, domain: 'example.com') } - let!(:account_example_net) { Fabricate(:account, domain: 'example.net') } - let(:scope) { Account.remote } + let(:options) { { all: true } } + let!(:local_account) { Fabricate(:account, domain: nil) } + let(:remote_com_avatar_url) { 'https://example.host/avatar/com' } + let(:remote_com_header_url) { 'https://example.host/header/com' } + let(:remote_account_example_com) { Fabricate(:account, domain: 'example.com', avatar_remote_url: remote_com_avatar_url, header_remote_url: remote_com_header_url) } + let(:remote_net_avatar_url) { 'https://example.host/avatar/net' } + let(:remote_net_header_url) { 'https://example.host/header/net' } + let(:account_example_net) { Fabricate(:account, domain: 'example.net', avatar_remote_url: remote_net_avatar_url, header_remote_url: remote_net_header_url) } + let(:scope) { Account.remote } before do - # TODO: we should be using `stub_parallelize_with_progress!` but - # this makes the assertions harder to write - allow(cli).to receive(:parallelize_with_progress).and_yield(remote_account_example_com) - .and_yield(account_example_net) - .and_return([2, nil]) - cli.options = { all: true } - end - - it 'refreshes the avatar for all remote accounts' do - allow(remote_account_example_com).to receive(:reset_avatar!) - allow(account_example_net).to receive(:reset_avatar!) - - expect { cli.refresh } - .to output_results('Refreshed 2 accounts') - - expect(cli).to have_received(:parallelize_with_progress).with(scope).once - expect(remote_account_example_com).to have_received(:reset_avatar!).once - expect(account_example_net).to have_received(:reset_avatar!).once - end - - it 'does not refresh avatar for local accounts' do - allow(local_account).to receive(:reset_avatar!) - - expect { cli.refresh } - .to output_results('Refreshed 2 accounts') - - expect(cli).to have_received(:parallelize_with_progress).with(scope).once - expect(local_account).to_not have_received(:reset_avatar!) - end - - it 'refreshes the header for all remote accounts' do - allow(remote_account_example_com).to receive(:reset_header!) - allow(account_example_net).to receive(:reset_header!) + stub_parallelize_with_progress! - expect { cli.refresh } - .to output_results('Refreshed 2 accounts') + stub_request(:get, remote_com_avatar_url) + .to_return request_fixture('avatar.txt') + stub_request(:get, remote_com_header_url) + .to_return request_fixture('avatar.txt') + stub_request(:get, remote_net_avatar_url) + .to_return request_fixture('avatar.txt') + stub_request(:get, remote_net_header_url) + .to_return request_fixture('avatar.txt') - expect(cli).to have_received(:parallelize_with_progress).with(scope).once - expect(remote_account_example_com).to have_received(:reset_header!).once - expect(account_example_net).to have_received(:reset_header!).once + remote_account_example_com + .update_column(:avatar_file_name, nil) + account_example_net + .update_column(:avatar_file_name, nil) end - it 'does not refresh the header for local accounts' do - allow(local_account).to receive(:reset_header!) - - expect { cli.refresh } + it 'refreshes the avatar and header for all remote accounts' do + expect { subject } .to output_results('Refreshed 2 accounts') + .and not_change(local_account, :updated_at) - expect(cli).to have_received(:parallelize_with_progress).with(scope).once - expect(local_account).to_not have_received(:reset_header!) - end - - it 'displays a successful message' do - expect { cli.refresh } - .to output_results('Refreshed 2 accounts') + # One request from factory creation, one more from task + expect(a_request(:get, remote_com_avatar_url)) + .to have_been_made.at_least_times(2) + expect(a_request(:get, remote_com_header_url)) + .to have_been_made.at_least_times(2) + expect(a_request(:get, remote_net_avatar_url)) + .to have_been_made.at_least_times(2) + expect(a_request(:get, remote_net_header_url)) + .to have_been_made.at_least_times(2) end context 'with --dry-run option' do - before do - cli.options = { all: true, dry_run: true } - end - - it 'does not refresh the avatar for any account' do - allow(local_account).to receive(:reset_avatar!) - allow(remote_account_example_com).to receive(:reset_avatar!) - allow(account_example_net).to receive(:reset_avatar!) - - expect { cli.refresh } - .to output_results('Refreshed 2 accounts') - - expect(cli).to have_received(:parallelize_with_progress).with(scope).once - expect(local_account).to_not have_received(:reset_avatar!) - expect(remote_account_example_com).to_not have_received(:reset_avatar!) - expect(account_example_net).to_not have_received(:reset_avatar!) - end - - it 'does not refresh the header for any account' do - allow(local_account).to receive(:reset_header!) - allow(remote_account_example_com).to receive(:reset_header!) - allow(account_example_net).to receive(:reset_header!) + let(:options) { { all: true, dry_run: true } } - expect { cli.refresh } + it 'does not refresh the avatar or header for any account' do + expect { subject } .to output_results('Refreshed 2 accounts') - expect(cli).to have_received(:parallelize_with_progress).with(scope).once - expect(local_account).to_not have_received(:reset_header!) - expect(remote_account_example_com).to_not have_received(:reset_header!) - expect(account_example_net).to_not have_received(:reset_header!) - end - - it 'displays a successful message with (DRY RUN)' do - expect { cli.refresh } - .to output_results('Refreshed 2 accounts (DRY RUN)') + # One request from factory creation, none from task due to dry run + expect(a_request(:get, remote_com_avatar_url)) + .to have_been_made.once + expect(a_request(:get, remote_com_header_url)) + .to have_been_made.once + expect(a_request(:get, remote_net_avatar_url)) + .to have_been_made.once + expect(a_request(:get, remote_net_header_url)) + .to have_been_made.once end end end @@ -782,7 +745,7 @@ def latest_backup allow(account_example_com_a).to receive(:reset_avatar!) allow(account_example_com_b).to receive(:reset_avatar!) - expect { cli.refresh(*arguments) } + expect { subject } .to output_results('OK') expect(account_example_com_a).to have_received(:reset_avatar!).once @@ -792,7 +755,7 @@ def latest_backup it 'does not reset the avatar for unspecified accounts' do allow(account_example_net).to receive(:reset_avatar!) - expect { cli.refresh(*arguments) } + expect { subject } .to output_results('OK') expect(account_example_net).to_not have_received(:reset_avatar!) @@ -802,7 +765,7 @@ def latest_backup allow(account_example_com_a).to receive(:reset_header!) allow(account_example_com_b).to receive(:reset_header!) - expect { cli.refresh(*arguments) } + expect { subject } .to output_results('OK') expect(account_example_com_a).to have_received(:reset_header!).once @@ -812,7 +775,7 @@ def latest_backup it 'does not reset the header for unspecified accounts' do allow(account_example_net).to receive(:reset_header!) - expect { cli.refresh(*arguments) } + expect { subject } .to output_results('OK') expect(account_example_net).to_not have_received(:reset_header!) @@ -822,7 +785,7 @@ def latest_backup it 'displays a failure message' do allow(account_example_com_a).to receive(:reset_avatar!).and_raise(Mastodon::UnexpectedResponseError) - expect { cli.refresh(*arguments) } + expect { subject } .to output_results("Account failed: #{account_example_com_a.username}@#{account_example_com_a.domain}") end end @@ -831,22 +794,20 @@ def latest_backup it 'exits with an error message' do allow(Account).to receive(:find_remote).with(account_example_com_b.username, account_example_com_b.domain).and_return(nil) - expect { cli.refresh(*arguments) } + expect { subject } .to output_results('No such account') .and raise_error(SystemExit) end end context 'with --dry-run option' do - before do - cli.options = { dry_run: true } - end + let(:options) { { dry_run: true } } it 'does not refresh the avatar for any account' do allow(account_example_com_a).to receive(:reset_avatar!) allow(account_example_com_b).to receive(:reset_avatar!) - expect { cli.refresh(*arguments) } + expect { subject } .to output_results('OK (DRY RUN)') expect(account_example_com_a).to_not have_received(:reset_avatar!) @@ -857,7 +818,7 @@ def latest_backup allow(account_example_com_a).to receive(:reset_header!) allow(account_example_com_b).to receive(:reset_header!) - expect { cli.refresh(*arguments) } + expect { subject } .to output_results('OK (DRY RUN)') expect(account_example_com_a).to_not have_received(:reset_header!) @@ -867,67 +828,70 @@ def latest_backup end context 'with --domain option' do - let!(:account_example_com_a) { Fabricate(:account, domain: 'example.com') } - let!(:account_example_com_b) { Fabricate(:account, domain: 'example.com') } - let!(:account_example_net) { Fabricate(:account, domain: 'example.net') } - let(:domain) { 'example.com' } - let(:scope) { Account.remote.where(domain: domain) } + let(:domain) { 'example.com' } + let(:options) { { domain: domain } } - before do - allow(cli).to receive(:parallelize_with_progress).and_yield(account_example_com_a) - .and_yield(account_example_com_b) - .and_return([2, nil]) - cli.options = { domain: domain } - end - - it 'refreshes the avatar for all accounts on specified domain' do - allow(account_example_com_a).to receive(:reset_avatar!) - allow(account_example_com_b).to receive(:reset_avatar!) - - expect { cli.refresh } - .to output_results('Refreshed 2 accounts') + let(:com_a_avatar_url) { 'https://example.host/avatar/a' } + let(:com_a_header_url) { 'https://example.host/header/a' } + let(:account_example_com_a) { Fabricate(:account, domain: domain, avatar_remote_url: com_a_avatar_url, header_remote_url: com_a_header_url) } - expect(cli).to have_received(:parallelize_with_progress).with(scope).once - expect(account_example_com_a).to have_received(:reset_avatar!).once - expect(account_example_com_b).to have_received(:reset_avatar!).once - end + let(:com_b_avatar_url) { 'https://example.host/avatar/b' } + let(:com_b_header_url) { 'https://example.host/header/b' } + let(:account_example_com_b) { Fabricate(:account, domain: domain, avatar_remote_url: com_b_avatar_url, header_remote_url: com_b_header_url) } - it 'does not refresh the avatar for accounts outside specified domain' do - allow(account_example_net).to receive(:reset_avatar!) + let(:net_avatar_url) { 'https://example.host/avatar/net' } + let(:net_header_url) { 'https://example.host/header/net' } + let(:account_example_net) { Fabricate(:account, domain: 'example.net', avatar_remote_url: net_avatar_url, header_remote_url: net_header_url) } - expect { cli.refresh } - .to output_results('Refreshed 2 accounts') - - expect(cli).to have_received(:parallelize_with_progress).with(scope).once - expect(account_example_net).to_not have_received(:reset_avatar!) - end - - it 'refreshes the header for all accounts on specified domain' do - allow(account_example_com_a).to receive(:reset_header!) - allow(account_example_com_b).to receive(:reset_header!) - - expect { cli.refresh } - .to output_results('Refreshed 2 accounts') - - expect(cli).to have_received(:parallelize_with_progress).with(scope) - expect(account_example_com_a).to have_received(:reset_header!).once - expect(account_example_com_b).to have_received(:reset_header!).once - end - - it 'does not refresh the header for accounts outside specified domain' do - allow(account_example_net).to receive(:reset_header!) + before do + stub_parallelize_with_progress! - expect { cli.refresh } + stub_request(:get, com_a_avatar_url) + .to_return request_fixture('avatar.txt') + stub_request(:get, com_a_header_url) + .to_return request_fixture('avatar.txt') + stub_request(:get, com_b_avatar_url) + .to_return request_fixture('avatar.txt') + stub_request(:get, com_b_header_url) + .to_return request_fixture('avatar.txt') + stub_request(:get, net_avatar_url) + .to_return request_fixture('avatar.txt') + stub_request(:get, net_header_url) + .to_return request_fixture('avatar.txt') + + account_example_com_a + .update_column(:avatar_file_name, nil) + account_example_com_b + .update_column(:avatar_file_name, nil) + account_example_net + .update_column(:avatar_file_name, nil) + end + + it 'refreshes the avatar and header for all accounts on specified domain' do + expect { subject } .to output_results('Refreshed 2 accounts') - expect(cli).to have_received(:parallelize_with_progress).with(scope).once - expect(account_example_net).to_not have_received(:reset_header!) + # One request from factory creation, one more from task + expect(a_request(:get, com_a_avatar_url)) + .to have_been_made.at_least_times(2) + expect(a_request(:get, com_a_header_url)) + .to have_been_made.at_least_times(2) + expect(a_request(:get, com_b_avatar_url)) + .to have_been_made.at_least_times(2) + expect(a_request(:get, com_b_header_url)) + .to have_been_made.at_least_times(2) + + # One request from factory creation, none from task + expect(a_request(:get, net_avatar_url)) + .to have_been_made.once + expect(a_request(:get, net_header_url)) + .to have_been_made.once end end context 'when neither a list of accts nor options are provided' do it 'exits with an error message' do - expect { cli.refresh } + expect { subject } .to output_results('No account(s) given') .and raise_error(SystemExit) end diff --git a/spec/models/announcement_spec.rb b/spec/models/announcement_spec.rb index 612ba8bb0de457..1e7283ca77090f 100644 --- a/spec/models/announcement_spec.rb +++ b/spec/models/announcement_spec.rb @@ -115,26 +115,35 @@ describe '#reactions' do context 'with announcement_reactions present' do + let(:account_reaction_emoji) { Fabricate :custom_emoji } + let(:other_reaction_emoji) { Fabricate :custom_emoji } let!(:account) { Fabricate(:account) } let!(:announcement) { Fabricate(:announcement) } - let!(:announcement_reaction) { Fabricate(:announcement_reaction, announcement: announcement, created_at: 10.days.ago) } - let!(:announcement_reaction_account) { Fabricate(:announcement_reaction, announcement: announcement, created_at: 5.days.ago, account: account) } before do - Fabricate(:announcement_reaction) + Fabricate(:announcement_reaction, announcement: announcement, created_at: 10.days.ago, name: other_reaction_emoji.shortcode) + Fabricate(:announcement_reaction, announcement: announcement, created_at: 5.days.ago, account: account, name: account_reaction_emoji.shortcode) + Fabricate(:announcement_reaction) # For some other announcement end it 'returns the announcement reactions for the announcement' do results = announcement.reactions - expect(results.first.name).to eq(announcement_reaction.name) - expect(results.last.name).to eq(announcement_reaction_account.name) + expect(results).to have_attributes( + size: eq(2), + first: have_attributes(name: other_reaction_emoji.shortcode, me: false), + last: have_attributes(name: account_reaction_emoji.shortcode, me: false) + ) end - it 'returns the announcement reactions for the announcement limited to account' do + it 'returns the announcement reactions for the announcement with `me` set correctly' do results = announcement.reactions(account) - expect(results.first.name).to eq(announcement_reaction.name) + expect(results).to have_attributes( + size: eq(2), + first: have_attributes(name: other_reaction_emoji.shortcode, me: false), + last: have_attributes(name: account_reaction_emoji.shortcode, me: true) + ) end end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 7f68671df4553c..213022e8301b95 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -461,12 +461,12 @@ end end - describe '#confirm!' do + describe '#mark_email_as_confirmed!' do subject(:user) { Fabricate(:user, confirmed_at: confirmed_at) } before do ActionMailer::Base.deliveries.clear - user.confirm! + user.mark_email_as_confirmed! end after { ActionMailer::Base.deliveries.clear } diff --git a/spec/policies/status_policy_spec.rb b/spec/policies/status_policy_spec.rb index 6bfc02c58289a1..a6c71e0cb0876f 100644 --- a/spec/policies/status_policy_spec.rb +++ b/spec/policies/status_policy_spec.rb @@ -112,6 +112,21 @@ expect(subject).to_not permit(viewer, status) end + + context 'with remote account' do + let(:viewer) { Fabricate(:account, domain: 'example.com', uri: 'https://example.com/actor') } + let(:status) { Fabricate(:status, account: alice, spoiler_text: 'ohagi', sensitive: true) } + + it 'grants access when viewer is not domain-blocked' do + expect(subject).to permit(viewer, status) + end + + it 'denies access when viewer is domain-blocked' do + Fabricate(:domain_block, domain: 'example.com', severity: :noop, reject_send_sensitive: true) + + expect(subject).to_not permit(viewer, status) + end + end end end diff --git a/spec/policies/user_policy_spec.rb b/spec/policies/user_policy_spec.rb index fa476a9fc3d835..7854547d26db60 100644 --- a/spec/policies/user_policy_spec.rb +++ b/spec/policies/user_policy_spec.rb @@ -64,7 +64,7 @@ context 'when record.confirmed?' do it 'denies' do - john.user.confirm! + john.user.mark_email_as_confirmed! expect(subject).to_not permit(admin, john.user) end end diff --git a/spec/search/services/statuses_search_service_spec.rb b/spec/search/services/statuses_search_service_spec.rb index 383fa86eec94f0..a18f767f9475a2 100644 --- a/spec/search/services/statuses_search_service_spec.rb +++ b/spec/search/services/statuses_search_service_spec.rb @@ -289,5 +289,15 @@ it_behaves_like 'does not hit status', 'when search with following', 'in:following りんご' end end + + context 'when reverse_search_quote is enabled' do + before do + alice.user.update!(settings: { reverse_search_quote: true }) + end + + it_behaves_like 'does not hit status', 'when search with letter in word', 'ご' + it_behaves_like 'hit status', 'when double quote search with letter in word', '"ご"' + it_behaves_like 'hit status', 'when search with word', 'りんご' + end end end diff --git a/spec/serializers/activitypub/note_for_misskey_serializer_spec.rb b/spec/serializers/activitypub/note_for_misskey_serializer_spec.rb index 233260f1040f88..5666f4ed49702f 100644 --- a/spec/serializers/activitypub/note_for_misskey_serializer_spec.rb +++ b/spec/serializers/activitypub/note_for_misskey_serializer_spec.rb @@ -8,7 +8,7 @@ let(:serialization) { ActiveModelSerializers::SerializableResource.new(parent, serializer: described_class, adapter: ActivityPub::Adapter) } let!(:account) { Fabricate(:account) } let!(:other) { Fabricate(:account) } - let!(:parent) { Fabricate(:status, account: account, visibility: :unlisted) } + let!(:parent) { Fabricate(:status, account: account, visibility: :unlisted, searchability: :private) } let!(:reply_by_account_first) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_account_next) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_other_first) { Fabricate(:status, account: other, thread: parent, visibility: :public) } diff --git a/spec/services/app_sign_up_service_spec.rb b/spec/services/app_sign_up_service_spec.rb index 86e64dab21cdd5..b37b6da1f018ee 100644 --- a/spec/services/app_sign_up_service_spec.rb +++ b/spec/services/app_sign_up_service_spec.rb @@ -48,6 +48,39 @@ end end + context 'when the email address requires approval through MX records' do + before do + Setting.registrations_mode = 'open' + Fabricate(:email_domain_block, allow_with_approval: true, domain: 'smtp.email.com') + allow(User).to receive(:skip_mx_check?).and_return(false) + + resolver = instance_double(Resolv::DNS, :timeouts= => nil) + + allow(resolver).to receive(:getresources) + .with('email.com', Resolv::DNS::Resource::IN::MX) + .and_return([instance_double(Resolv::DNS::Resource::MX, exchange: 'smtp.email.com')]) + allow(resolver).to receive(:getresources).with('email.com', Resolv::DNS::Resource::IN::A).and_return([]) + allow(resolver).to receive(:getresources).with('email.com', Resolv::DNS::Resource::IN::AAAA).and_return([]) + allow(resolver).to receive(:getresources).with('smtp.email.com', Resolv::DNS::Resource::IN::A).and_return([instance_double(Resolv::DNS::Resource::IN::A, address: '2.3.4.5')]) + allow(resolver).to receive(:getresources).with('smtp.email.com', Resolv::DNS::Resource::IN::AAAA).and_return([instance_double(Resolv::DNS::Resource::IN::AAAA, address: 'fd00::2')]) + allow(Resolv::DNS).to receive(:open).and_yield(resolver) + end + + it 'creates an unapproved user', :aggregate_failures do + access_token = subject.call(app, remote_ip, params) + expect(access_token).to_not be_nil + expect(access_token.scopes.to_s).to eq 'read write' + + user = User.find_by(id: access_token.resource_owner_id) + expect(user).to_not be_nil + expect(user.confirmed?).to be false + expect(user.approved?).to be false + + expect(user.account).to_not be_nil + expect(user.invite_request).to be_nil + end + end + context 'when registrations are closed' do before do Setting.registrations_mode = 'none' diff --git a/spec/services/fetch_link_card_service_spec.rb b/spec/services/fetch_link_card_service_spec.rb index 3273351b9ada93..654da1e0d4278f 100644 --- a/spec/services/fetch_link_card_service_spec.rb +++ b/spec/services/fetch_link_card_service_spec.rb @@ -7,6 +7,7 @@ let(:html) { 'Hello world' } let(:oembed_cache) { nil } + let(:custom_before) { false } before do stub_request(:get, 'http://example.com/html').to_return(headers: { 'Content-Type' => 'text/html' }, body: html) @@ -30,7 +31,7 @@ Rails.cache.write('oembed_endpoint:example.com', oembed_cache) if oembed_cache - subject.call(status) + subject.call(status) unless custom_before end context 'with a local status' do @@ -236,16 +237,46 @@ end end - context 'with URL of reference' do - let(:status) { Fabricate(:status, text: 'RT http://example.com/html') } + context 'with URI of reference and normal page' do + let(:status) { Fabricate(:status, text: 'RT http://example.com/text http://example.com/html') } + let(:custom_before) { true } + + before { Fabricate(:status, uri: 'http://example.com/text') } it 'creates preview card' do + subject.call(status) + expect(status.preview_card).to_not be_nil + expect(status.preview_card.url).to eq 'http://example.com/html' + expect(status.preview_card.title).to eq 'Hello world' + end + end + + context 'with URI of reference' do + let(:status) { Fabricate(:status, text: 'RT http://example.com/text') } + let(:custom_before) { true } + + before { Fabricate(:status, uri: 'http://example.com/text') } + + it 'does not create preview card' do + subject.call(status) expect(status.preview_card).to be_nil end end - context 'with URL of reference and normal page' do - let(:status) { Fabricate(:status, text: 'RT http://example.com/text http://example.com/html') } + context 'with URL of reference' do + let(:status) { Fabricate(:status, text: 'RT http://example.com/text') } + let(:custom_before) { true } + + before { Fabricate(:status, uri: 'http://example.com/text/activity', url: 'http://example.com/text') } + + it 'does not create preview card' do + subject.call(status) + expect(status.preview_card).to be_nil + end + end + + context 'with reference normal URL' do + let(:status) { Fabricate(:status, text: 'RT http://example.com/html') } it 'creates preview card' do expect(status.preview_card).to_not be_nil @@ -281,8 +312,12 @@ RT Hello  TEXT end + let(:custom_before) { true } + + before { Fabricate(:status, uri: 'http://example.com/html') } it 'creates preview card' do + subject.call(status) expect(status.preview_card).to be_nil end end @@ -294,8 +329,12 @@ Hello  TEXT end + let(:custom_before) { true } + + before { Fabricate(:status, uri: 'http://example.com/html') } it 'creates preview card' do + subject.call(status) expect(status.preview_card).to_not be_nil expect(status.preview_card.url).to eq 'http://example.com/html_sub' expect(status.preview_card.title).to eq 'Hello world' diff --git a/spec/services/reblog_service_spec.rb b/spec/services/reblog_service_spec.rb index 357b315af0dc09..e5d0a2d6ced999 100644 --- a/spec/services/reblog_service_spec.rb +++ b/spec/services/reblog_service_spec.rb @@ -46,7 +46,7 @@ def discard_status Status .where(id: reblog_of_id) .where(text: 'discard-status-text') - .update_all(deleted_at: Time.now.utc) # rubocop:disable Rails/SkipsModelValidations + .update_all(deleted_at: Time.now.utc) end end end diff --git a/spec/support/javascript_errors.rb b/spec/support/javascript_errors.rb index bdce1cc76db8a0..a36bf6017e3233 100644 --- a/spec/support/javascript_errors.rb +++ b/spec/support/javascript_errors.rb @@ -9,8 +9,8 @@ expect(error.level).to_not eq('SEVERE'), error.message next unless error.level == 'WARNING' - $stderr.warn 'WARN: javascript warning' - $stderr.warn error.message + warn 'WARN: javascript warning' + warn error.message end end end diff --git a/spec/workers/redownload_avatar_worker_spec.rb b/spec/workers/redownload_avatar_worker_spec.rb index 4ab368e12f11c1..6ef320bc4fd2ad 100644 --- a/spec/workers/redownload_avatar_worker_spec.rb +++ b/spec/workers/redownload_avatar_worker_spec.rb @@ -41,7 +41,7 @@ it 'reprocesses a remote avatar' do stub_request(:get, 'https://example.host/file').to_return request_fixture('avatar.txt') account = Fabricate(:account, avatar_remote_url: 'https://example.host/file') - account.update_column(:avatar_file_name, nil) # rubocop:disable Rails/SkipsModelValidations + account.update_column(:avatar_file_name, nil) result = worker.perform(account.id) diff --git a/spec/workers/redownload_header_worker_spec.rb b/spec/workers/redownload_header_worker_spec.rb index 3b6f497bb80d42..746c1a63ffbb76 100644 --- a/spec/workers/redownload_header_worker_spec.rb +++ b/spec/workers/redownload_header_worker_spec.rb @@ -41,7 +41,7 @@ it 'reprocesses a remote header' do stub_request(:get, 'https://example.host/file').to_return request_fixture('avatar.txt') account = Fabricate(:account, header_remote_url: 'https://example.host/file') - account.update_column(:header_file_name, nil) # rubocop:disable Rails/SkipsModelValidations + account.update_column(:header_file_name, nil) result = worker.perform(account.id) diff --git a/streaming/index.js b/streaming/index.js index 14a8c92c6a6008..e33328e38a7e34 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -182,14 +182,74 @@ const CHANNEL_NAMES = [ ]; const startServer = async () => { + const pgPool = new pg.Pool(pgConfigFromEnv(process.env)); + const server = http.createServer(); + const wss = new WebSocket.Server({ noServer: true }); + + // Set the X-Request-Id header on WebSockets: + wss.on("headers", function onHeaders(headers, req) { + headers.push(`X-Request-Id: ${req.id}`); + }); + const app = express(); app.set('trust proxy', process.env.TRUSTED_PROXY_IP ? process.env.TRUSTED_PROXY_IP.split(/(?:\s*,\s*|\s+)/) : 'loopback,uniquelocal'); - const pgPool = new pg.Pool(pgConfigFromEnv(process.env)); - const server = http.createServer(app); app.use(cors()); + // Handle eventsource & other http requests: + server.on('request', app); + + // Handle upgrade requests: + server.on('upgrade', async function handleUpgrade(request, socket, head) { + /** @param {Error} err */ + const onSocketError = (err) => { + log.error(`Error with websocket upgrade: ${err}`); + }; + + socket.on('error', onSocketError); + + // Authenticate: + try { + await accountFromRequest(request); + } catch (err) { + log.error(`Error authenticating request: ${err}`); + + // Unfortunately for using the on('upgrade') setup, we need to manually + // write a HTTP Response to the Socket to close the connection upgrade + // attempt, so the following code is to handle all of that. + const statusCode = err.status ?? 401; + + /** @type {Record} */ + const headers = { + 'Connection': 'close', + 'Content-Type': 'text/plain', + 'Content-Length': 0, + 'X-Request-Id': request.id, + // TODO: Send the error message via header so it can be debugged in + // developer tools + }; + + // Ensure the socket is closed once we've finished writing to it: + socket.once('finish', () => { + socket.destroy(); + }); + + // Write the HTTP response manually: + socket.end(`HTTP/1.1 ${statusCode} ${http.STATUS_CODES[statusCode]}\r\n${Object.keys(headers).map((key) => `${key}: ${headers[key]}`).join('\r\n')}\r\n\r\n`); + + return; + } + + wss.handleUpgrade(request, socket, head, function done(ws) { + // Remove the error handler: + socket.removeListener('error', onSocketError); + + // Start the connection: + wss.emit('connection', ws, request); + }); + }); + /** * @type {Object.): void>>} */ @@ -360,10 +420,19 @@ const startServer = async () => { const isInScope = (req, necessaryScopes) => req.scopes.some(scope => necessaryScopes.includes(scope)); + /** + * @typedef ResolvedAccount + * @property {string} accessTokenId + * @property {string[]} scopes + * @property {string} accountId + * @property {string[]} chosenLanguages + * @property {string} deviceId + */ + /** * @param {string} token * @param {any} req - * @returns {Promise.} + * @returns {Promise} */ const accountFromToken = (token, req) => new Promise((resolve, reject) => { pgPool.connect((err, client, done) => { @@ -394,14 +463,20 @@ const startServer = async () => { req.chosenLanguages = result.rows[0].chosen_languages; req.deviceId = result.rows[0].device_id; - resolve(); + resolve({ + accessTokenId: result.rows[0].id, + scopes: result.rows[0].scopes.split(' '), + accountId: result.rows[0].account_id, + chosenLanguages: result.rows[0].chosen_languages, + deviceId: result.rows[0].device_id + }); }); }); }); /** * @param {any} req - * @returns {Promise.} + * @returns {Promise} */ const accountFromRequest = (req) => new Promise((resolve, reject) => { const authorization = req.headers.authorization; @@ -496,25 +571,6 @@ const startServer = async () => { reject(err); }); - /** - * @param {any} info - * @param {function(boolean, number, string): void} callback - */ - const wsVerifyClient = (info, callback) => { - // When verifying the websockets connection, we no longer pre-emptively - // check OAuth scopes and drop the connection if they're missing. We only - // drop the connection if access without token is not allowed by environment - // variables. OAuth scope checks are moved to the point of subscription - // to a specific stream. - - accountFromRequest(info.req).then(() => { - callback(true, undefined, undefined); - }).catch(err => { - log.error(info.req.requestId, err.toString()); - callback(false, 401, 'Unauthorized'); - }); - }; - /** * @typedef SystemMessageHandlers * @property {function(): void} onKill @@ -999,8 +1055,8 @@ const startServer = async () => { }; /** - * @param {any} req - * @param {any} ws + * @param {http.IncomingMessage} req + * @param {WebSocket} ws * @param {string[]} streamName * @returns {function(string, string): void} */ @@ -1010,7 +1066,9 @@ const startServer = async () => { return; } - ws.send(JSON.stringify({ stream: streamName, event, payload }), (err) => { + const message = JSON.stringify({ stream: streamName, event, payload }); + + ws.send(message, (/** @type {Error} */ err) => { if (err) { log.error(req.requestId, `Failed to send to websocket: ${err}`); } @@ -1047,8 +1105,6 @@ const startServer = async () => { }); }); - const wss = new WebSocket.Server({ server, verifyClient: wsVerifyClient }); - /** * @typedef StreamParams * @property {string} [tag] @@ -1241,8 +1297,8 @@ const startServer = async () => { /** * @typedef WebSocketSession - * @property {any} socket - * @property {any} request + * @property {WebSocket} websocket + * @property {http.IncomingMessage} request * @property {Object.} subscriptions */ @@ -1365,7 +1421,11 @@ const startServer = async () => { } }; - wss.on('connection', (ws, req) => { + /** + * @param {WebSocket & { isAlive: boolean }} ws + * @param {http.IncomingMessage} req + */ + function onConnection(ws, req) { // Note: url.parse could throw, which would terminate the connection, so we // increment the connected clients metric straight away when we establish // the connection, without waiting: @@ -1443,7 +1503,9 @@ const startServer = async () => { if (location && location.query.stream) { subscribeWebsocketToChannel(session, firstParam(location.query.stream), location.query); } - }); + } + + wss.on('connection', onConnection); setInterval(() => { wss.clients.forEach(ws => { diff --git a/tsconfig.json b/tsconfig.json index d1a77e5493846d..a193ea35f2fdac 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,7 +14,8 @@ "tsBuildInfoFile": "tmp/cache/tsconfig.tsbuildinfo", "paths": { "mastodon": ["app/javascript/mastodon"], - "mastodon/*": ["app/javascript/mastodon/*"] + "mastodon/*": ["app/javascript/mastodon/*"], + "@/*": ["app/javascript/*"] } }, "include": [ diff --git a/yarn.lock b/yarn.lock index 0be195db6c514d..f09a5aac1356c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1801,6 +1801,16 @@ __metadata: languageName: node linkType: hard +"@formatjs/ecma402-abstract@npm:1.18.2": + version: 1.18.2 + resolution: "@formatjs/ecma402-abstract@npm:1.18.2" + dependencies: + "@formatjs/intl-localematcher": "npm:0.5.4" + tslib: "npm:^2.4.0" + checksum: 87afb37dd937555e712ca85d5142a9083d617c491d1dddf8d660fdfb6186272d2bc75b78809b076388d26f016200c8bddbce73281fd707eb899da2bf3bc9b7ca + languageName: node + linkType: hard + "@formatjs/fast-memoize@npm:2.2.0": version: 2.2.0 resolution: "@formatjs/fast-memoize@npm:2.2.0" @@ -1821,6 +1831,17 @@ __metadata: languageName: node linkType: hard +"@formatjs/icu-messageformat-parser@npm:2.7.5": + version: 2.7.5 + resolution: "@formatjs/icu-messageformat-parser@npm:2.7.5" + dependencies: + "@formatjs/ecma402-abstract": "npm:1.18.2" + "@formatjs/icu-skeleton-parser": "npm:1.7.2" + tslib: "npm:^2.4.0" + checksum: b1995ee0844c48d1b4bf184017a65600eb1d324107046c8b67d77e08d7da74bbbbf00dccbf2bc418480c8510443b3eb157646404fbacd71fa6e7d572d0ffc910 + languageName: node + linkType: hard + "@formatjs/icu-skeleton-parser@npm:1.7.0": version: 1.7.0 resolution: "@formatjs/icu-skeleton-parser@npm:1.7.0" @@ -1831,25 +1852,35 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl-displaynames@npm:6.6.4": - version: 6.6.4 - resolution: "@formatjs/intl-displaynames@npm:6.6.4" +"@formatjs/icu-skeleton-parser@npm:1.7.2": + version: 1.7.2 + resolution: "@formatjs/icu-skeleton-parser@npm:1.7.2" dependencies: - "@formatjs/ecma402-abstract": "npm:1.18.0" - "@formatjs/intl-localematcher": "npm:0.5.2" + "@formatjs/ecma402-abstract": "npm:1.18.2" tslib: "npm:^2.4.0" - checksum: 009e443dd0d10776b8573d0181407d4c0d6c7a2ff537a5ea1e36413d1b08db9c21dfef272eabab8efabd01a58b64f663a30e4d584fd761df3fd68a5d23fe444b + checksum: 7ca30ac360a5a971b5a06b4ae0263f0ddbde4751ff470486767f544f0399c5c85affab7170e5dd227c65afac4797e79a5e8abe65a70a335b96ab77b5d314abcb languageName: node linkType: hard -"@formatjs/intl-listformat@npm:7.5.3": - version: 7.5.3 - resolution: "@formatjs/intl-listformat@npm:7.5.3" +"@formatjs/intl-displaynames@npm:6.6.6": + version: 6.6.6 + resolution: "@formatjs/intl-displaynames@npm:6.6.6" dependencies: - "@formatjs/ecma402-abstract": "npm:1.18.0" - "@formatjs/intl-localematcher": "npm:0.5.2" + "@formatjs/ecma402-abstract": "npm:1.18.2" + "@formatjs/intl-localematcher": "npm:0.5.4" tslib: "npm:^2.4.0" - checksum: de741ce84b16fed57016afbfe446ebd57cd23a046859a9353f5d455f8bc9114493bf83b9e18429268c7ce8f77bc54516a9b8190baf09fbb25c9b06cfc80101d4 + checksum: 4ba40057cfafaabf04485137bc96705d5ed7ac48f17ed7dfe8dbd7f71119667b6c0b7fa75469e32b70c9bada2c5d03af37a5261d655a37b81c63ba907edbb2e8 + languageName: node + linkType: hard + +"@formatjs/intl-listformat@npm:7.5.5": + version: 7.5.5 + resolution: "@formatjs/intl-listformat@npm:7.5.5" + dependencies: + "@formatjs/ecma402-abstract": "npm:1.18.2" + "@formatjs/intl-localematcher": "npm:0.5.4" + tslib: "npm:^2.4.0" + checksum: bc9d8cbe42bd9513db0b2b221c0b1a752892005a90fa629b4cf7df1cbd3b96997cddbf420e562ebdfdc691a28d9b759ccae9633d5987aa0bceed5aef77a07ca4 languageName: node linkType: hard @@ -1862,34 +1893,63 @@ __metadata: languageName: node linkType: hard +"@formatjs/intl-localematcher@npm:0.5.4": + version: 0.5.4 + resolution: "@formatjs/intl-localematcher@npm:0.5.4" + dependencies: + tslib: "npm:^2.4.0" + checksum: c9ff5d34ca8b6fe59f8f303a3cc31a92d343e095a6987e273e5cc23f0fe99feb557a392a05da95931c7d24106acb6988e588d00ddd05b0934005aafd7fdbafe6 + languageName: node + linkType: hard + "@formatjs/intl-pluralrules@npm:^5.2.2": - version: 5.2.10 - resolution: "@formatjs/intl-pluralrules@npm:5.2.10" + version: 5.2.12 + resolution: "@formatjs/intl-pluralrules@npm:5.2.12" dependencies: - "@formatjs/ecma402-abstract": "npm:1.18.0" - "@formatjs/intl-localematcher": "npm:0.5.2" + "@formatjs/ecma402-abstract": "npm:1.18.2" + "@formatjs/intl-localematcher": "npm:0.5.4" tslib: "npm:^2.4.0" - checksum: 1050416613e80bff2c58546c80c8d52ed97847d13c90535a53d058e44969369b50e1cfdb464e9e9ef4802c934c84ea0e656c3f4e3b4d5ac7496b722c759da4cf + checksum: 0f4d9f4f272dd962b2f742519045ad43a1b6358755787d3394efcc5884b02184cc8d76fb13d98b1f30c41a813b81f82dd2342e1fb0fbd7b7efa69f5d0d59c4d0 languageName: node linkType: hard -"@formatjs/intl@npm:2.9.9": - version: 2.9.9 - resolution: "@formatjs/intl@npm:2.9.9" +"@formatjs/intl@npm:2.9.11": + version: 2.9.11 + resolution: "@formatjs/intl@npm:2.9.11" dependencies: - "@formatjs/ecma402-abstract": "npm:1.18.0" + "@formatjs/ecma402-abstract": "npm:1.18.2" "@formatjs/fast-memoize": "npm:2.2.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.3" - "@formatjs/intl-displaynames": "npm:6.6.4" - "@formatjs/intl-listformat": "npm:7.5.3" - intl-messageformat: "npm:10.5.8" + "@formatjs/icu-messageformat-parser": "npm:2.7.5" + "@formatjs/intl-displaynames": "npm:6.6.6" + "@formatjs/intl-listformat": "npm:7.5.5" + intl-messageformat: "npm:10.5.10" tslib: "npm:^2.4.0" peerDependencies: - typescript: 5 + typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: b26904da605ab309535dfbbfbd403a3bb33d51d3c969c548b88fa04755be3aff60b1bddd1c453514a84048c7432271cef507ac66de32dcfa66b3f842a1ddb977 + checksum: 003a4356e698cf847aeb701565cad701f3afba2a31d8d3c2fe0d5790d90ef866bea30cf2cc20151b15085db10e436376d38c10b911b3fe5afdef5c32333d09f3 + languageName: node + linkType: hard + +"@formatjs/ts-transformer@npm:3.13.11": + version: 3.13.11 + resolution: "@formatjs/ts-transformer@npm:3.13.11" + dependencies: + "@formatjs/icu-messageformat-parser": "npm:2.7.5" + "@types/json-stable-stringify": "npm:^1.0.32" + "@types/node": "npm:14 || 16 || 17" + chalk: "npm:^4.0.0" + json-stable-stringify: "npm:^1.0.1" + tslib: "npm:^2.4.0" + typescript: "npm:5" + peerDependencies: + ts-jest: ">=27" + peerDependenciesMeta: + ts-jest: + optional: true + checksum: 2f7c48e742a152d0499615d01113fab23089c3c56beaa3234f53bbe48393b6351c68eba1aa23d6dec57ebfd7b1d12b165215950eeb87dd90072519dcc0a2e022 languageName: node linkType: hard @@ -2624,9 +2684,9 @@ __metadata: linkType: hard "@rails/ujs@npm:^7.1.1": - version: 7.1.2 - resolution: "@rails/ujs@npm:7.1.2" - checksum: 072962733c371fa0fff5e88a0aecd8e91c892f9dc2d31723b7586b45c723206d6b82ac71b0d7db26ea0a5ce60e0832430b061e4669b8f2aa813c3ea975aac98a + version: 7.1.3 + resolution: "@rails/ujs@npm:7.1.3" + checksum: 68112d9add9dbc59b40c2ec1bc095a67445c57d20d0ab7d817ce3de0cd90374e2690af8ad54ce6ecc2d1c748b34c0c44d0fbd2f515ce2c443d7c5d23d00b9ce5 languageName: node linkType: hard @@ -2904,15 +2964,15 @@ __metadata: linkType: hard "@testing-library/jest-dom@npm:^6.0.0": - version: 6.1.6 - resolution: "@testing-library/jest-dom@npm:6.1.6" + version: 6.2.0 + resolution: "@testing-library/jest-dom@npm:6.2.0" dependencies: "@adobe/css-tools": "npm:^4.3.2" "@babel/runtime": "npm:^7.9.2" aria-query: "npm:^5.0.0" chalk: "npm:^3.0.0" css.escape: "npm:^1.5.1" - dom-accessibility-api: "npm:^0.5.6" + dom-accessibility-api: "npm:^0.6.3" lodash: "npm:^4.17.15" redent: "npm:^3.0.0" peerDependencies: @@ -2929,7 +2989,7 @@ __metadata: optional: true vitest: optional: true - checksum: f98f79f3e470517469c86947d0ff1bb83ac2e59fd2a29728ab306eca5fba63c948084ec06b7b531642e6002d1f0211d918c298c628f0d386c0ef63ba881c47ba + checksum: 71421693e0ad6a46be7d16f00b58a45725c238693972b8b5b1fd9ab797902ccf1209cf259afe8da1bf59d7c958762c46ee85d1aa5b164a5ec330981ea2376b08 languageName: node linkType: hard @@ -3688,14 +3748,14 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^6.0.0": - version: 6.16.0 - resolution: "@typescript-eslint/eslint-plugin@npm:6.16.0" + version: 6.19.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.19.0" dependencies: "@eslint-community/regexpp": "npm:^4.5.1" - "@typescript-eslint/scope-manager": "npm:6.16.0" - "@typescript-eslint/type-utils": "npm:6.16.0" - "@typescript-eslint/utils": "npm:6.16.0" - "@typescript-eslint/visitor-keys": "npm:6.16.0" + "@typescript-eslint/scope-manager": "npm:6.19.0" + "@typescript-eslint/type-utils": "npm:6.19.0" + "@typescript-eslint/utils": "npm:6.19.0" + "@typescript-eslint/visitor-keys": "npm:6.19.0" debug: "npm:^4.3.4" graphemer: "npm:^1.4.0" ignore: "npm:^5.2.4" @@ -3708,54 +3768,44 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: c8a68e0953d8b94f6b85d3a82090e61e670bcb0945cbee4d741321c56db727429ad47c48b8403ad1dab3b0842689bd2d4b85c99b76c51ac4f5be7f5f61c4c314 + checksum: ab1a5ace6663b0c6d2418e321328fa28aa4bdc4b5fae257addec01346fb3a9c2d3a2960ade0f7114e6974c513a28632c9e8e602333cc0fab3135c445babdef59 languageName: node linkType: hard "@typescript-eslint/parser@npm:^6.17.0": - version: 6.17.0 - resolution: "@typescript-eslint/parser@npm:6.17.0" + version: 6.19.0 + resolution: "@typescript-eslint/parser@npm:6.19.0" dependencies: - "@typescript-eslint/scope-manager": "npm:6.17.0" - "@typescript-eslint/types": "npm:6.17.0" - "@typescript-eslint/typescript-estree": "npm:6.17.0" - "@typescript-eslint/visitor-keys": "npm:6.17.0" + "@typescript-eslint/scope-manager": "npm:6.19.0" + "@typescript-eslint/types": "npm:6.19.0" + "@typescript-eslint/typescript-estree": "npm:6.19.0" + "@typescript-eslint/visitor-keys": "npm:6.19.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 66b53159688083eb48259de5b4daf076f3de284ac3b4d2618bda3f7ab2d8ee27b01ae851b08e8487047e33ff3668424f17d677d66413164cb231f1519dcff82f - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:6.16.0": - version: 6.16.0 - resolution: "@typescript-eslint/scope-manager@npm:6.16.0" - dependencies: - "@typescript-eslint/types": "npm:6.16.0" - "@typescript-eslint/visitor-keys": "npm:6.16.0" - checksum: 3b275e528d19f4f36c4acd6cb872b5f004175512dce30cef0ac7a9121bb23d21e5e0f4b62658dbfea2b15851e7fa930372696f25a6c87492f863171ab56f5364 + checksum: d547bfb1aaed112cfc0f9f0be8506a280952ba3b61be42b749352139361bd94e4a47fa043d819e19c6a498cacbd8bb36a46e3628c436a7e2009e7ac27afc8861 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.17.0": - version: 6.17.0 - resolution: "@typescript-eslint/scope-manager@npm:6.17.0" +"@typescript-eslint/scope-manager@npm:6.19.0": + version: 6.19.0 + resolution: "@typescript-eslint/scope-manager@npm:6.19.0" dependencies: - "@typescript-eslint/types": "npm:6.17.0" - "@typescript-eslint/visitor-keys": "npm:6.17.0" - checksum: b7ac7d9c39515c2a1b3844577fab967bf126ec25ccf28076240748b3f42d60ab3e64131bfffee61f66251bdf2d59e50e39f5cb0bee7987c85c49140c75d26b5f + "@typescript-eslint/types": "npm:6.19.0" + "@typescript-eslint/visitor-keys": "npm:6.19.0" + checksum: 1ec7b9dedca7975f0aa4543c1c382f7d6131411bd443a5f9b96f137acb6adb450888ed13c95f6d26546b682b2e0579ce8a1c883fdbe2255dc0b61052193b8243 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:6.16.0": - version: 6.16.0 - resolution: "@typescript-eslint/type-utils@npm:6.16.0" +"@typescript-eslint/type-utils@npm:6.19.0": + version: 6.19.0 + resolution: "@typescript-eslint/type-utils@npm:6.19.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:6.16.0" - "@typescript-eslint/utils": "npm:6.16.0" + "@typescript-eslint/typescript-estree": "npm:6.19.0" + "@typescript-eslint/utils": "npm:6.19.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.0.1" peerDependencies: @@ -3763,30 +3813,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: a5339cc1375d12411fcb242249143b28401fb18890bb2a1cff5275ba946affb4a2066cd8203e83ac383bd9d791a79ea6ee1cbf7a30deed5c832ed002897bbf82 - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:6.16.0": - version: 6.16.0 - resolution: "@typescript-eslint/types@npm:6.16.0" - checksum: 74d9a8b7fd1b85fd1824295c92bc2f506148e450c9897f65ddaa089091017df4e25676c5b098b75c8f00529b84492f303a6b1870bb0ffee83997081325891d53 + checksum: 5b146b985481e587122026c703ac9f537ad7e90eee1dca814971bca0d7e4a5d4ff9861fb4bf749014c28c6a4fbb4a01a4527355961315eb9501f3569f8e8dd38 languageName: node linkType: hard -"@typescript-eslint/types@npm:6.17.0": - version: 6.17.0 - resolution: "@typescript-eslint/types@npm:6.17.0" - checksum: c458d985b9ab4f369018536bcb88f0aedafb0c8c4b22ffd376e0c0c768a44e3956475c85ebeef40ae44238841c8df268893477b85873aa2621995c37e738e37e +"@typescript-eslint/types@npm:6.19.0": + version: 6.19.0 + resolution: "@typescript-eslint/types@npm:6.19.0" + checksum: 6f81860a3c14df55232c2e6dec21fb166867b9f30b3c3369b325aef5ee1c7e41e827c0504654daa49c8ff1a3a9ca9d9bfe76786882b6212a7c1b58991a9c80b9 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.16.0": - version: 6.16.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.16.0" +"@typescript-eslint/typescript-estree@npm:6.19.0": + version: 6.19.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.19.0" dependencies: - "@typescript-eslint/types": "npm:6.16.0" - "@typescript-eslint/visitor-keys": "npm:6.16.0" + "@typescript-eslint/types": "npm:6.19.0" + "@typescript-eslint/visitor-keys": "npm:6.19.0" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" @@ -3796,63 +3839,34 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: c7109e90b40b3c8f1042beb7f1a7a97eeba3b6a903acd82df4947900d68bd31d04b530a190c099666c5ca4886efc162de7b42de754a44b189e41237210797d9e + checksum: 5b365f009e43c7beafdbb7d8ecad78ee1087b0a4338cd9ec695eed514b7b4c1089e56239761139ddae629ec0ce8d428840c6ebfeea3618d2efe00c84f8794da5 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.17.0": - version: 6.17.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.17.0" - dependencies: - "@typescript-eslint/types": "npm:6.17.0" - "@typescript-eslint/visitor-keys": "npm:6.17.0" - debug: "npm:^4.3.4" - globby: "npm:^11.1.0" - is-glob: "npm:^4.0.3" - minimatch: "npm:9.0.3" - semver: "npm:^7.5.4" - ts-api-utils: "npm:^1.0.1" - peerDependenciesMeta: - typescript: - optional: true - checksum: 5a858288bb05f45a2a45b04394115826ff19f85555144bfb67dc281d4e75fc3a1e1aceb3dee68022e86b91f199d1310c15bda3100a4890004b8e474d86afad51 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:6.16.0, @typescript-eslint/utils@npm:^6.5.0": - version: 6.16.0 - resolution: "@typescript-eslint/utils@npm:6.16.0" +"@typescript-eslint/utils@npm:6.19.0, @typescript-eslint/utils@npm:^6.5.0": + version: 6.19.0 + resolution: "@typescript-eslint/utils@npm:6.19.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" "@types/json-schema": "npm:^7.0.12" "@types/semver": "npm:^7.5.0" - "@typescript-eslint/scope-manager": "npm:6.16.0" - "@typescript-eslint/types": "npm:6.16.0" - "@typescript-eslint/typescript-estree": "npm:6.16.0" + "@typescript-eslint/scope-manager": "npm:6.19.0" + "@typescript-eslint/types": "npm:6.19.0" + "@typescript-eslint/typescript-estree": "npm:6.19.0" semver: "npm:^7.5.4" peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: 586c4c0e1ca249daf9958f0d88df3af010a7592a19db1a7dc198754542b584314896536fe56ea9c93dd0ddd531154e7697002643d46e24a8d3a459721a626e91 + checksum: 343ff4cd4f7e102df8c46b41254d017a33d95df76455531fda679fdb92aebb9c111df8ee9ab54972e73c1e8fad9dd7e421001233f0aee8115384462b0821852e languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:6.16.0": - version: 6.16.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.16.0" +"@typescript-eslint/visitor-keys@npm:6.19.0": + version: 6.19.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.19.0" dependencies: - "@typescript-eslint/types": "npm:6.16.0" + "@typescript-eslint/types": "npm:6.19.0" eslint-visitor-keys: "npm:^3.4.1" - checksum: 13c4d90355e288eac432d2845e37bb2acc03dab6d8568564558c1914a9aa44352f2a7ff29d0f50e0b3e68d66cca5f27b2732af5ff193b82571b4366309842880 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:6.17.0": - version: 6.17.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.17.0" - dependencies: - "@typescript-eslint/types": "npm:6.17.0" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 75a48f5810c6a69bc1c082b07d2b840c40895807b1b4ecf9d3ab9eb783176eeb3e7b11eb89d652e8331da79d604f82300f315ffc21cd937819197a8601b48d1d + checksum: bb34e922e018aadf34866995ea5949d6623f184cc4f6470ab05767dd208ffabb003b7dc3872199714574b7f10afe89d49c6f89a4e8d086edea82be73e189f1bb languageName: node linkType: hard @@ -4749,21 +4763,21 @@ __metadata: linkType: hard "babel-plugin-formatjs@npm:^10.5.1": - version: 10.5.10 - resolution: "babel-plugin-formatjs@npm:10.5.10" + version: 10.5.12 + resolution: "babel-plugin-formatjs@npm:10.5.12" dependencies: "@babel/core": "npm:^7.10.4" "@babel/helper-plugin-utils": "npm:^7.10.4" "@babel/plugin-syntax-jsx": "npm:7" "@babel/traverse": "npm:7" "@babel/types": "npm:^7.12.11" - "@formatjs/icu-messageformat-parser": "npm:2.7.3" - "@formatjs/ts-transformer": "npm:3.13.9" + "@formatjs/icu-messageformat-parser": "npm:2.7.5" + "@formatjs/ts-transformer": "npm:3.13.11" "@types/babel__core": "npm:^7.1.7" "@types/babel__helper-plugin-utils": "npm:^7.10.0" "@types/babel__traverse": "npm:^7.1.7" tslib: "npm:^2.4.0" - checksum: bff65cd2a88a0ae00eabab1d022ffc44c4385b7e529cac42375bb1828c678c7a71a78f644512e5d1dd8cd532d418c16acdbabcef2bf6670e24404f4f164a74ce + checksum: 64fe3a38b283bb46e5528ad2f72287ca8a163227b0eea3bbe1bedff6d885b2be38c9fb8ed3843a72b723aeb2a7ad4d32b48e52030698631dc646aa15017f4208 languageName: node linkType: hard @@ -6835,13 +6849,20 @@ __metadata: languageName: node linkType: hard -"dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": +"dom-accessibility-api@npm:^0.5.9": version: 0.5.16 resolution: "dom-accessibility-api@npm:0.5.16" checksum: b2c2eda4fae568977cdac27a9f0c001edf4f95a6a6191dfa611e3721db2478d1badc01db5bb4fa8a848aeee13e442a6c2a4386d65ec65a1436f24715a2f8d053 languageName: node linkType: hard +"dom-accessibility-api@npm:^0.6.3": + version: 0.6.3 + resolution: "dom-accessibility-api@npm:0.6.3" + checksum: 10bee5aa514b2a9a37c87cd81268db607a2e933a050074abc2f6fa3da9080ebed206a320cbc123567f2c3087d22292853bdfdceaffdd4334ffe2af9510b29360 + languageName: node + linkType: hard + "dom-helpers@npm:^3.4.0": version: 3.4.0 resolution: "dom-helpers@npm:3.4.0" @@ -7350,9 +7371,9 @@ __metadata: linkType: hard "eslint-define-config@npm:^2.0.0": - version: 2.0.0 - resolution: "eslint-define-config@npm:2.0.0" - checksum: 617c3143bc1ed8df0b20ae632d428d5f241dbb04483631e1410c58fe65ba3e503cf94631c5973115482b58ba464d052422a718c0f4d49182f8d13ffbb36bf1d6 + version: 2.1.0 + resolution: "eslint-define-config@npm:2.1.0" + checksum: 034bd6bfbfec2db6c720a51815de6b072efeef7afbf99d90c23a1871f9cd741bb77f9d34e0bc2465262298c6110c5c45b704714d8575c6567fd2df963fb792ea languageName: node linkType: hard @@ -7446,8 +7467,8 @@ __metadata: linkType: hard "eslint-plugin-jsdoc@npm:^48.0.0": - version: 48.0.1 - resolution: "eslint-plugin-jsdoc@npm:48.0.1" + version: 48.0.2 + resolution: "eslint-plugin-jsdoc@npm:48.0.2" dependencies: "@es-joy/jsdoccomment": "npm:~0.41.0" are-docs-informative: "npm:^0.0.2" @@ -7460,7 +7481,7 @@ __metadata: spdx-expression-parse: "npm:^4.0.0" peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - checksum: 9b211cfb2e07e076dad12681cd2045c65766dd24fe9399fd0adeaf6f8785f9a4dd58608f1183195f63d3c6c91013aa1cf9edc9101580cff9cb60e1e688f456f9 + checksum: 6e6062c22fa4039e4be898a62f8ca0edef8bcbdc8257abb18302471e9819ccd63941971cf8de0ccf4eb59b3508902aa06de56214d80bdfc9bde7cadb94906190 languageName: node linkType: hard @@ -7491,8 +7512,8 @@ __metadata: linkType: hard "eslint-plugin-prettier@npm:^5.0.0": - version: 5.1.2 - resolution: "eslint-plugin-prettier@npm:5.1.2" + version: 5.1.3 + resolution: "eslint-plugin-prettier@npm:5.1.3" dependencies: prettier-linter-helpers: "npm:^1.0.0" synckit: "npm:^0.8.6" @@ -7506,7 +7527,7 @@ __metadata: optional: true eslint-config-prettier: optional: true - checksum: e16c9fbb0e9f8da45bdbb1cf6e4a190266235c3686deede3815196d2604bbe2bac531d1fc9adc3c0b9a03d88b55bd3bfaa4f9d85e34e73dc040d545a1931fab9 + checksum: f45d5fc1fcfec6b0cf038a7a65ddd10a25df4fe3f9e1f6b7f0d5100e66f046a26a2492e69ee765dddf461b93c114cf2e1eb18d4970aafa6f385448985c136e09 languageName: node linkType: hard @@ -9308,15 +9329,15 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:10.5.8, intl-messageformat@npm:^10.3.5": - version: 10.5.8 - resolution: "intl-messageformat@npm:10.5.8" +"intl-messageformat@npm:10.5.10, intl-messageformat@npm:^10.3.5": + version: 10.5.10 + resolution: "intl-messageformat@npm:10.5.10" dependencies: - "@formatjs/ecma402-abstract": "npm:1.18.0" + "@formatjs/ecma402-abstract": "npm:1.18.2" "@formatjs/fast-memoize": "npm:2.2.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.3" + "@formatjs/icu-messageformat-parser": "npm:2.7.5" tslib: "npm:^2.4.0" - checksum: 1d2854aae8471ec48165ca265760d6c5b1814eca831c88db698eb29b5ed20bee21ca8533090c9d28d9c6f1d844dda210b0bc58a2e036446158fae0845e5eed4f + checksum: 2016c0561e5172b28f180669e28992d04944752d61ebcb539232cc289e7627fd92fe64c73985bc32bddd5cc683f7b77863c1b58507d214ce3a87982d50571658 languageName: node linkType: hard @@ -13256,11 +13277,11 @@ __metadata: linkType: hard "prettier@npm:^3.0.0": - version: 3.1.1 - resolution: "prettier@npm:3.1.1" + version: 3.2.2 + resolution: "prettier@npm:3.2.2" bin: prettier: bin/prettier.cjs - checksum: facc944ba20e194ff4db765e830ffbcb642803381f0d2033ed397e79904fa4ccc877dc25ad68f42d36985c01d051c990ca1b905fb83d2d7d65fe69e4386fa1a3 + checksum: e84d0d2a4ce2b88ee1636904effbdf68b59da63d9f887128f2ed5382206454185432e7c0a9578bc4308bc25d099cfef47fd0b9c211066777854e23e65e34044d languageName: node linkType: hard @@ -13623,26 +13644,26 @@ __metadata: linkType: hard "react-intl@npm:^6.4.2": - version: 6.5.5 - resolution: "react-intl@npm:6.5.5" - dependencies: - "@formatjs/ecma402-abstract": "npm:1.18.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.3" - "@formatjs/intl": "npm:2.9.9" - "@formatjs/intl-displaynames": "npm:6.6.4" - "@formatjs/intl-listformat": "npm:7.5.3" + version: 6.6.1 + resolution: "react-intl@npm:6.6.1" + dependencies: + "@formatjs/ecma402-abstract": "npm:1.18.2" + "@formatjs/icu-messageformat-parser": "npm:2.7.5" + "@formatjs/intl": "npm:2.9.11" + "@formatjs/intl-displaynames": "npm:6.6.6" + "@formatjs/intl-listformat": "npm:7.5.5" "@types/hoist-non-react-statics": "npm:^3.3.1" "@types/react": "npm:16 || 17 || 18" hoist-non-react-statics: "npm:^3.3.2" - intl-messageformat: "npm:10.5.8" + intl-messageformat: "npm:10.5.10" tslib: "npm:^2.4.0" peerDependencies: react: ^16.6.0 || 17 || 18 - typescript: 5 + typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: 9ff6200f195557804b735d618ee593aed7848e84213ac4eb9c57708f55c0d93232e0dd338c990348ba3b1d73dca071502a2051d4a2790838d962c3ccde87fa6c + checksum: 9277269eadbe432a9651af66402240b8a91a567c769ac9c1a774575999f63689a31dccf22a09a1d78d1b8fed4ecad103bdcc609e476ee7e60dabf0cbce6556d3 languageName: node linkType: hard