diff --git a/.circleci/config.yml b/.circleci/config.yml index 42c058295..b05273f8b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,255 +1,152 @@ -version: 2 +version: 2.1 -aliases: - - &defaults +orbs: + ruby: circleci/ruby@1.2.0 + node: circleci/node@4.7.0 + +executors: + default: + parameters: + ruby-version: + type: string docker: - - image: circleci/ruby:2.7-buster-node - environment: &ruby_environment + - image: cimg/ruby:<< parameters.ruby-version >> + environment: BUNDLE_JOBS: 3 BUNDLE_RETRY: 3 - BUNDLE_APP_CONFIG: ./.bundle/ - BUNDLE_PATH: ./vendor/bundle/ + CONTINUOUS_INTEGRATION: true DB_HOST: localhost DB_USER: root - RAILS_ENV: test - ALLOW_NOPAM: true - CONTINUOUS_INTEGRATION: true DISABLE_SIMPLECOV: true - PAM_ENABLED: true - PAM_DEFAULT_SERVICE: pam_test - PAM_CONTROLLED_SERVICE: pam_test_controlled - working_directory: ~/projects/mastodon/ + RAILS_ENV: test + - image: cimg/postgres:12.7 + environment: + POSTGRES_USER: root + POSTGRES_HOST_AUTH_METHOD: trust + - image: circleci/redis:5-alpine - - &attach_workspace - attach_workspace: - at: ~/projects/ +commands: + install-system-dependencies: + steps: + - run: + name: Install system dependencies + command: | + sudo apt-get update + sudo apt-get install -y libicu-dev libidn11-dev libprotobuf-dev protobuf-compiler + install-ruby-dependencies: + parameters: + ruby-version: + type: string + steps: + - run: + command: | + bundle config clean 'true' + bundle config frozen 'true' + bundle config without 'development production' + name: Set bundler settings + - ruby/install-deps: + bundler-version: '2.2.29' + key: ruby<< parameters.ruby-version >>-gems-v1 + wait-db: + steps: + - run: + command: dockerize -wait tcp://localhost:5432 -wait tcp://localhost:6379 -timeout 1m + name: Wait for PostgreSQL and Redis - - &persist_to_workspace - persist_to_workspace: - root: ~/projects/ - paths: - - ./mastodon/ - - - &restore_ruby_dependencies - restore_cache: - keys: - - v3-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-{{ checksum "Gemfile.lock" }} - - v3-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}- - - v3-ruby-dependencies- - - - &install_steps +jobs: + build: + docker: + - image: cimg/ruby:2.7-node + environment: + RAILS_ENV: test steps: - checkout - - *attach_workspace - - restore_cache: - keys: - - v2-node-dependencies-{{ checksum "yarn.lock" }} - - v2-node-dependencies- + - install-system-dependencies + - install-ruby-dependencies: + ruby-version: '2.7' + - node/install-packages: + cache-version: v1 + pkg-manager: yarn - run: - name: Install yarn dependencies - command: yarn install --frozen-lockfile - - save_cache: - key: v2-node-dependencies-{{ checksum "yarn.lock" }} - paths: - - ./node_modules/ - - *persist_to_workspace - - - &install_system_dependencies - run: - name: Install system dependencies - command: | - sudo apt-get update - sudo apt-get install -y libicu-dev libidn11-dev libprotobuf-dev protobuf-compiler - - - &install_ruby_dependencies - steps: - - *attach_workspace - - *install_system_dependencies - - run: - name: Set Ruby version - command: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version - - *restore_ruby_dependencies - - run: - name: Set bundler settings - command: | - bundle config --local clean 'true' - bundle config --local deployment 'true' - bundle config --local with 'pam_authentication' - bundle config --local without 'development production' - bundle config --local frozen 'true' - bundle config --local path $BUNDLE_PATH - - run: - name: Install bundler dependencies - command: bundle check || (bundle install && bundle clean) - - save_cache: - key: v3-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-{{ checksum "Gemfile.lock" }} - paths: - - ./.bundle/ - - ./vendor/bundle/ - - persist_to_workspace: - root: ~/projects/ - paths: - - ./mastodon/.bundle/ - - ./mastodon/vendor/bundle/ - - - &test_steps - parallelism: 4 - steps: - - *attach_workspace - - *install_system_dependencies - - run: - name: Install FFMPEG - command: sudo apt-get install -y ffmpeg - - run: - name: Load database schema - command: ./bin/rails db:create db:schema:load db:seed - - run: - name: Run rspec in parallel - command: | - bundle exec rspec --profile 10 \ - --format RspecJunitFormatter \ - --out test_results/rspec.xml \ - --format progress \ - $(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings) - - store_test_results: - path: test_results -jobs: - install: - <<: *defaults - <<: *install_steps - - install-ruby2.7: - <<: *defaults - <<: *install_ruby_dependencies - - install-ruby2.6: - <<: *defaults - docker: - - image: circleci/ruby:2.6-buster-node - environment: *ruby_environment - <<: *install_ruby_dependencies - - install-ruby3.0: - <<: *defaults - docker: - - image: circleci/ruby:3.0-buster-node - environment: *ruby_environment - <<: *install_ruby_dependencies - - build: - <<: *defaults - steps: - - *attach_workspace - - *install_system_dependencies - - run: - name: Precompile assets command: ./bin/rails assets:precompile + name: Precompile assets - persist_to_workspace: - root: ~/projects/ paths: - - ./mastodon/public/assets - - ./mastodon/public/packs-test/ + - public/assets + - public/packs-test + root: . + + test: + parameters: + ruby-version: + type: string + executor: + name: default + ruby-version: << parameters.ruby-version >> + environment: + ALLOW_NOPAM: true + PAM_ENABLED: true + PAM_DEFAULT_SERVICE: pam_test + PAM_CONTROLLED_SERVICE: pam_test_controlled + parallelism: 4 + steps: + - checkout + - install-system-dependencies + - run: + command: sudo apt-get install -y ffmpeg imagemagick libpam-dev + name: Install additional system dependencies + - run: + command: bundle config with 'pam_authentication' + name: Enable PAM authentication + - install-ruby-dependencies: + ruby-version: << parameters.ruby-version >> + - attach_workspace: + at: . + - wait-db + - run: + command: ./bin/rails db:create db:schema:load db:seed + name: Load database schema + - ruby/rspec-test test-migrations: - <<: *defaults - docker: - - image: circleci/ruby:2.7-buster-node - environment: *ruby_environment - - image: circleci/postgres:12.2 - environment: - POSTGRES_USER: root - POSTGRES_HOST_AUTH_METHOD: trust - - image: circleci/redis:5-alpine + executor: + name: default + ruby-version: '2.7' steps: - - *attach_workspace - - *install_system_dependencies + - checkout + - install-system-dependencies + - install-ruby-dependencies: + ruby-version: '2.7' + - wait-db - run: - name: Create database command: ./bin/rails db:create + name: Create database - run: - name: Run migrations command: ./bin/rails db:migrate - - test-ruby2.7: - <<: *defaults - docker: - - image: circleci/ruby:2.7-buster-node - environment: *ruby_environment - - image: circleci/postgres:12.2 - environment: - POSTGRES_USER: root - POSTGRES_HOST_AUTH_METHOD: trust - - image: circleci/redis:5-alpine - <<: *test_steps - - test-ruby2.6: - <<: *defaults - docker: - - image: circleci/ruby:2.6-buster-node - environment: *ruby_environment - - image: circleci/postgres:12.2 - environment: - POSTGRES_USER: root - POSTGRES_HOST_AUTH_METHOD: trust - - image: circleci/redis:5-alpine - <<: *test_steps - - test-ruby3.0: - <<: *defaults - docker: - - image: circleci/ruby:3.0-buster-node - environment: *ruby_environment - - image: circleci/postgres:12.2 - environment: - POSTGRES_USER: root - POSTGRES_HOST_AUTH_METHOD: trust - - image: circleci/redis:5-alpine - <<: *test_steps - - test-webui: - <<: *defaults - docker: - - image: circleci/node:12-buster - steps: - - *attach_workspace - - run: - name: Run jest - command: yarn test:jest + name: Run migrations workflows: version: 2 build-and-test: jobs: - - install - - install-ruby2.7: + - build + - test: + matrix: + parameters: + ruby-version: + - '2.7' + - '3.0' + name: test-ruby<< matrix.ruby-version >> requires: - - install - - install-ruby2.6: - requires: - - install - - install-ruby2.7 - - install-ruby3.0: - requires: - - install - - install-ruby2.7 - - build: - requires: - - install-ruby2.7 + - build - test-migrations: requires: - - install-ruby2.7 - - test-ruby2.7: - requires: - - install-ruby2.7 - build - - test-ruby2.6: + - node/run: + cache-version: v1 + name: test-webui + pkg-manager: yarn requires: - - install-ruby2.6 - build - - test-ruby3.0: - requires: - - install-ruby3.0 - - build - - test-webui: - requires: - - install + version: lts + yarn-run: test:jest diff --git a/.codeclimate.yml b/.codeclimate.yml index 8701e5f3d..c253bd95a 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -35,4 +35,7 @@ plugins: enabled: true exclude_patterns: - spec/ -- vendor/asset +- vendor/asset/ + +- app/javascript/mastodon/locales/**/*.json +- config/locales/**/*.yml diff --git a/.env.nanobox b/.env.nanobox index 5951777a2..d61673836 100644 --- a/.env.nanobox +++ b/.env.nanobox @@ -228,6 +228,7 @@ SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io # CAS_LOCATION_KEY='location' # CAS_IMAGE_KEY='image' # CAS_PHONE_KEY='phone' +# CAS_SECURITY_ASSUME_EMAIL_IS_VERIFIED=true # Optional SAML authentication (cf. omniauth-saml) # SAML_ENABLED=true diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 32919bd50..fd6f74689 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,4 +1,4 @@ -# CODEOWNERS for tootsuite/mastodon +# CODEOWNERS for mastodon/mastodon # Translators # To add translator, copy these lines, replace `fr` with appropriate language code and replace `@żelipapą` with user's GitHub nickname preceded by `@` sign or e-mail address. diff --git a/.github/ISSUE_TEMPLATE/1.bug_report.yml b/.github/ISSUE_TEMPLATE/1.bug_report.yml new file mode 100644 index 000000000..4f420416b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1.bug_report.yml @@ -0,0 +1,42 @@ +name: Bug Report +description: If something isn't working as expected +labels: bug +body: + - type: markdown + attributes: + value: | + Make sure that you are submitting a new bug that was not previously reported or already fixed. + + Please use a concise and distinct title for the issue. + - type: input + attributes: + label: Expected behaviour + description: What should have happened? + validations: + required: true + - type: input + attributes: + label: Actual behaviour + description: What happened? + validations: + required: true + - type: textarea + attributes: + label: Steps to reproduce the problem + description: What were you trying to do? + value: | + 1. + 2. + 3. + ... + validations: + required: true + - type: textarea + attributes: + label: Specifications + description: | + What version or commit hash of Mastodon did you find this bug in? + + If a front-end issue, what browser and operating systems were you using? + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/2.feature_request.yml b/.github/ISSUE_TEMPLATE/2.feature_request.yml new file mode 100644 index 000000000..00aad1341 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2.feature_request.yml @@ -0,0 +1,21 @@ +name: Feature Request +description: I have a suggestion +body: + - type: markdown + attributes: + value: | + Please use a concise and distinct title for the issue. + + Consider: Could it be implemented as a 3rd party app using the REST API instead? + - type: textarea + attributes: + label: Pitch + description: Describe your idea for a feature. Make sure it has not already been suggested/implemented/turned down before. + validations: + required: true + - type: textarea + attributes: + label: Motivation + description: Why do you think this feature is needed? Who would benefit from it? + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/support.md b/.github/ISSUE_TEMPLATE/3.support.md similarity index 90% rename from .github/ISSUE_TEMPLATE/support.md rename to .github/ISSUE_TEMPLATE/3.support.md index 7fbc86ff1..e2217da8b 100644 --- a/.github/ISSUE_TEMPLATE/support.md +++ b/.github/ISSUE_TEMPLATE/3.support.md @@ -1,7 +1,7 @@ --- name: Support about: Ask for help with your deployment - +title: DO NOT CREATE THIS ISSUE --- We primarily use GitHub as a bug and feature tracker. For usage questions, troubleshooting of deployments and other individual technical assistance, please use one of the resources below: diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 8ae4bb882..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: Bug Report -about: If something isn't working as expected -labels: bug ---- - - - - - -### Expected behaviour - - - -### Actual behaviour - - - -### Steps to reproduce the problem - - - -### Specifications - - - - diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index ff92c0316..000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: Feature Request -about: I have a suggestion ---- - - - - - -### Pitch - - - -### Motivation - - diff --git a/.nvmrc b/.nvmrc index 48082f72f..8351c1939 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -12 +14 diff --git a/.ruby-version b/.ruby-version index 37c2961c2..a4dd9dba4 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.7.2 +2.7.4 diff --git a/AUTHORS.md b/AUTHORS.md index 96412ff63..596451737 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -1,7 +1,7 @@ Authors ======= -Mastodon is available on [GitHub](https://github.com/tootsuite/mastodon) +Mastodon is available on [GitHub](https://github.com/mastodon/mastodon) and provided thanks to the work of the following contributors: * [Gargron](https://github.com/Gargron) @@ -719,7 +719,7 @@ and provided thanks to the work of the following contributors: * [西小倉宏信](mailto:nishiko@mindia.jp) * [雨宮美羽](mailto:k737566@gmail.com) -This document is provided for informational purposes only. Since it is only updated once per release, the version you are looking at may be currently out of date. To see the full list of contributors, consider looking at the [git history](https://github.com/tootsuite/mastodon/graphs/contributors) instead. +This document is provided for informational purposes only. Since it is only updated once per release, the version you are looking at may be currently out of date. To see the full list of contributors, consider looking at the [git history](https://github.com/mastodon/mastodon/graphs/contributors) instead. ## Translators diff --git a/CHANGELOG.md b/CHANGELOG.md index ba1b7c4ca..b64da5b52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,425 +6,425 @@ All notable changes to this project will be documented in this file. ## [3.4.1] - 2021-06-03 ### Added -- Add new emoji assets from Twemoji 13.1.0 ([Gargron](https://github.com/tootsuite/mastodon/pull/16345)) +- Add new emoji assets from Twemoji 13.1.0 ([Gargron](https://github.com/mastodon/mastodon/pull/16345)) ### Fixed -- Fix some ActivityPub identifiers in server actor outbox ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16343)) -- Fix custom CSS path setting cookies and being uncacheable due to it ([tribela](https://github.com/tootsuite/mastodon/pull/16314)) -- Fix unread notification count when polling in web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16272)) -- Fix health check not being accessible through localhost ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16270)) -- Fix some redis locks auto-releasing too fast ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16276), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16291)) -- Fix e-mail confirmations API not working correctly ([Gargron](https://github.com/tootsuite/mastodon/pull/16348)) -- Fix migration script not being able to run if it fails midway ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16312)) -- Fix account deletion sometimes failing because of optimistic locks ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16317)) -- Fix deprecated slash as division in SASS files ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16347)) -- Fix `tootctl search deploy` compatibility error on Ruby 3 ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16346)) -- Fix mailer jobs for deleted notifications erroring out ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16294)) +- Fix some ActivityPub identifiers in server actor outbox ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16343)) +- Fix custom CSS path setting cookies and being uncacheable due to it ([tribela](https://github.com/mastodon/mastodon/pull/16314)) +- Fix unread notification count when polling in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16272)) +- Fix health check not being accessible through localhost ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16270)) +- Fix some redis locks auto-releasing too fast ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16276), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/16291)) +- Fix e-mail confirmations API not working correctly ([Gargron](https://github.com/mastodon/mastodon/pull/16348)) +- Fix migration script not being able to run if it fails midway ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16312)) +- Fix account deletion sometimes failing because of optimistic locks ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16317)) +- Fix deprecated slash as division in SASS files ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16347)) +- Fix `tootctl search deploy` compatibility error on Ruby 3 ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16346)) +- Fix mailer jobs for deleted notifications erroring out ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16294)) ## [3.4.0] - 2021-05-16 ### Added -- **Add follow recommendations for onboarding** ([Gargron](https://github.com/tootsuite/mastodon/pull/15945), [Gargron](https://github.com/tootsuite/mastodon/pull/16161), [Gargron](https://github.com/tootsuite/mastodon/pull/16060), [Gargron](https://github.com/tootsuite/mastodon/pull/16077), [Gargron](https://github.com/tootsuite/mastodon/pull/16078), [Gargron](https://github.com/tootsuite/mastodon/pull/16160), [Gargron](https://github.com/tootsuite/mastodon/pull/16079), [noellabo](https://github.com/tootsuite/mastodon/pull/16044), [noellabo](https://github.com/tootsuite/mastodon/pull/16045), [Gargron](https://github.com/tootsuite/mastodon/pull/16152), [Gargron](https://github.com/tootsuite/mastodon/pull/16153), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16082), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16173), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16159), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16189)) +- **Add follow recommendations for onboarding** ([Gargron](https://github.com/mastodon/mastodon/pull/15945), [Gargron](https://github.com/mastodon/mastodon/pull/16161), [Gargron](https://github.com/mastodon/mastodon/pull/16060), [Gargron](https://github.com/mastodon/mastodon/pull/16077), [Gargron](https://github.com/mastodon/mastodon/pull/16078), [Gargron](https://github.com/mastodon/mastodon/pull/16160), [Gargron](https://github.com/mastodon/mastodon/pull/16079), [noellabo](https://github.com/mastodon/mastodon/pull/16044), [noellabo](https://github.com/mastodon/mastodon/pull/16045), [Gargron](https://github.com/mastodon/mastodon/pull/16152), [Gargron](https://github.com/mastodon/mastodon/pull/16153), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/16082), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/16173), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/16159), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/16189)) - Tutorial on first web UI launch has been replaced with follow suggestions - Follow suggestions take user locale into account and are a mix of accounts most followed by currently active local users, and accounts that wrote the most shared/favourited posts in the last 30 days - Only accounts that have opted-in to being discoverable from their profile settings, and that do not require follow requests, will be suggested - Moderators can review suggestions for every supported locale and suppress specific suggestions from appearing and admins can ensure certain accounts always show up in suggestions from the settings area - New users no longer automatically follow admins -- **Add server rules** ([Gargron](https://github.com/tootsuite/mastodon/pull/15769), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15778)) +- **Add server rules** ([Gargron](https://github.com/mastodon/mastodon/pull/15769), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15778)) - Admins can create and edit itemized server rules - They are available through the REST API and on the about page -- **Add canonical e-mail blocks for suspended accounts** ([Gargron](https://github.com/tootsuite/mastodon/pull/16049)) +- **Add canonical e-mail blocks for suspended accounts** ([Gargron](https://github.com/mastodon/mastodon/pull/16049)) - Normally, people can make multiple accounts using the same e-mail address using the `+` trick or by inserting or removing `.` characters from the first part of their address - Once an account is suspended, it will no longer be possible for the e-mail address used by that account to be used for new sign-ups in any of its forms -- Add management of delivery availability in admin UI ([noellabo](https://github.com/tootsuite/mastodon/pull/15771)) -- **Add system checks to dashboard in admin UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15989), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15954), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16002)) +- Add management of delivery availability in admin UI ([noellabo](https://github.com/mastodon/mastodon/pull/15771)) +- **Add system checks to dashboard in admin UI** ([Gargron](https://github.com/mastodon/mastodon/pull/15989), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15954), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/16002)) - The dashboard will now warn you if you some Sidekiq queues are not being processed, if you have not defined any server rules, or if you forgot to run database migrations from the latest Mastodon upgrade -- Add inline description of moderation actions in admin UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15792)) -- Add "recommended" label to activity/peers API toggles in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/16081)) -- Add joined date to profiles in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/16169), [rinsuki](https://github.com/tootsuite/mastodon/pull/16186)) -- Add transition to media modal background in web UI ([mkljczk](https://github.com/tootsuite/mastodon/pull/15843)) -- Add option to opt-out of unread notification markers in web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15842)) -- Add borders to 📱, 🚲, and 📲 emojis in web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15794), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16035)) -- Add dropdown for boost privacy in boost confirmation modal in web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15704)) -- Add support for Ruby 3.0 ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16046), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16174)) -- Add `Message-ID` header to outgoing emails ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16076)) +- Add inline description of moderation actions in admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15792)) +- Add "recommended" label to activity/peers API toggles in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/16081)) +- Add joined date to profiles in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/16169), [rinsuki](https://github.com/mastodon/mastodon/pull/16186)) +- Add transition to media modal background in web UI ([mkljczk](https://github.com/mastodon/mastodon/pull/15843)) +- Add option to opt-out of unread notification markers in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15842)) +- Add borders to 📱, 🚲, and 📲 emojis in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15794), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/16035)) +- Add dropdown for boost privacy in boost confirmation modal in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15704)) +- Add support for Ruby 3.0 ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16046), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/16174)) +- Add `Message-ID` header to outgoing emails ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16076)) - Some e-mail spam filters penalize e-mails that have a `Message-ID` header that uses a different domain name than the sending e-mail address. Now, the same domain will be used -- Add `af`, `gd` and `si` locales ([Gargron](https://github.com/tootsuite/mastodon/pull/16090)) -- Add guard against DNS rebinding attacks ([noellabo](https://github.com/tootsuite/mastodon/pull/16087), [noellabo](https://github.com/tootsuite/mastodon/pull/16095)) -- Add HTTP header to explicitly opt-out of FLoC by default ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16036)) -- Add missing push notification title for polls and statuses ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15929), [mkljczk](https://github.com/tootsuite/mastodon/pull/15564), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15931)) -- Add `POST /api/v1/emails/confirmations` to REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/15816), [Gargron](https://github.com/tootsuite/mastodon/pull/15949)) +- Add `af`, `gd` and `si` locales ([Gargron](https://github.com/mastodon/mastodon/pull/16090)) +- Add guard against DNS rebinding attacks ([noellabo](https://github.com/mastodon/mastodon/pull/16087), [noellabo](https://github.com/mastodon/mastodon/pull/16095)) +- Add HTTP header to explicitly opt-out of FLoC by default ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16036)) +- Add missing push notification title for polls and statuses ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15929), [mkljczk](https://github.com/mastodon/mastodon/pull/15564), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15931)) +- Add `POST /api/v1/emails/confirmations` to REST API ([Gargron](https://github.com/mastodon/mastodon/pull/15816), [Gargron](https://github.com/mastodon/mastodon/pull/15949)) - This method allows an app through which a user signed-up to request a new confirmation e-mail to be sent, or to change the e-mail of the account before it is confirmed -- Add `GET /api/v1/accounts/lookup` to REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/15740), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15750)) +- Add `GET /api/v1/accounts/lookup` to REST API ([Gargron](https://github.com/mastodon/mastodon/pull/15740), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15750)) - This method allows to quickly convert a username of a known account to an ID that can be used with the REST API, or to check if a username is available for sign-up -- Add `policy` param to `POST /api/v1/push/subscriptions` in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/16040)) +- Add `policy` param to `POST /api/v1/push/subscriptions` in REST API ([Gargron](https://github.com/mastodon/mastodon/pull/16040)) - This param allows an app to control from whom notifications should be delivered as push notifications to the app -- Add `details` to error response for `POST /api/v1/accounts` in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/15803)) +- Add `details` to error response for `POST /api/v1/accounts` in REST API ([Gargron](https://github.com/mastodon/mastodon/pull/15803)) - This attribute allows an app to display more helpful information to the user about why the sign-up did not succeed -- Add `SIDEKIQ_REDIS_URL` and related environment variables to optionally use a separate Redis server for Sidekiq ([noellabo](https://github.com/tootsuite/mastodon/pull/16188)) +- Add `SIDEKIQ_REDIS_URL` and related environment variables to optionally use a separate Redis server for Sidekiq ([noellabo](https://github.com/mastodon/mastodon/pull/16188)) ### Changed -- Change trending hashtags to be affected be reblogs ([Gargron](https://github.com/tootsuite/mastodon/pull/16164)) +- Change trending hashtags to be affected be reblogs ([Gargron](https://github.com/mastodon/mastodon/pull/16164)) - Previously, only original posts contributed to a hashtag's trending score - Now, reblogs of posts will also contribute to that hashtag's trending score -- Change e-mail confirmation link to always redirect to web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16151)) -- Change log level of worker lifecycle to WARN in streaming API ([Gargron](https://github.com/tootsuite/mastodon/pull/16110)) +- Change e-mail confirmation link to always redirect to web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16151)) +- Change log level of worker lifecycle to WARN in streaming API ([Gargron](https://github.com/mastodon/mastodon/pull/16110)) - Since running with INFO log level in production is not always desirable, it is easy to miss when a worker is shutdown and a new one is started -- Change the nouns "toot" and "status" to "post" in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/16080), [Gargron](https://github.com/tootsuite/mastodon/pull/16089)) +- Change the nouns "toot" and "status" to "post" in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/16080), [Gargron](https://github.com/mastodon/mastodon/pull/16089)) - To be clear, the button still says "Toot!" -- Change order of dropdown menu on posts to be more intuitive in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/15647)) -- Change description of keyboard shortcuts in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/16129)) -- Change option labels on edit profile page ([Gargron](https://github.com/tootsuite/mastodon/pull/16041)) +- Change order of dropdown menu on posts to be more intuitive in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/15647)) +- Change description of keyboard shortcuts in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/16129)) +- Change option labels on edit profile page ([Gargron](https://github.com/mastodon/mastodon/pull/16041)) - "Lock account" is now "Require follow requests" - "List this account on the directory" is now "Suggest account to others" - "Hide your network" is now "Hide your social graph" -- Change newly generated account IDs to not be enumerable ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15844)) -- Change Web Push API deliveries to use request pooling ([Gargron](https://github.com/tootsuite/mastodon/pull/16014)) -- Change multiple mentions with same username to render with domain ([Gargron](https://github.com/tootsuite/mastodon/pull/15718), [noellabo](https://github.com/tootsuite/mastodon/pull/16038)) +- Change newly generated account IDs to not be enumerable ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15844)) +- Change Web Push API deliveries to use request pooling ([Gargron](https://github.com/mastodon/mastodon/pull/16014)) +- Change multiple mentions with same username to render with domain ([Gargron](https://github.com/mastodon/mastodon/pull/15718), [noellabo](https://github.com/mastodon/mastodon/pull/16038)) - When a post contains mentions of two or more users who have the same username, but on different domains, render their names with domain to help disambiguate them - Always render the domain of usernames used in profile metadata -- Change health check endpoint to reveal less information ([Gargron](https://github.com/tootsuite/mastodon/pull/15988)) -- Change account counters to use upsert (requires Postgres >= 9.5) ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15913)) -- Change `mastodon:setup` to not call `assets:precompile` in Docker ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/13942)) -- **Change max. image dimensions to 1920x1080px (1080p)** ([Gargron](https://github.com/tootsuite/mastodon/pull/15690)) +- Change health check endpoint to reveal less information ([Gargron](https://github.com/mastodon/mastodon/pull/15988)) +- Change account counters to use upsert (requires Postgres >= 9.5) ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15913)) +- Change `mastodon:setup` to not call `assets:precompile` in Docker ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13942)) +- **Change max. image dimensions to 1920x1080px (1080p)** ([Gargron](https://github.com/mastodon/mastodon/pull/15690)) - Previously, this was 1280x1280px - This is the amount of pixels that original images get downsized to -- Change custom emoji to be animated when hovering container in web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15637)) -- Change streaming API from deprecated ClusterWS/cws to ws ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15932)) -- Change systemd configuration to add sandboxing features ([Izorkin](https://github.com/tootsuite/mastodon/pull/15937), [Izorkin](https://github.com/tootsuite/mastodon/pull/16103), [Izorkin](https://github.com/tootsuite/mastodon/pull/16127)) -- Change nginx configuration to make running Onion service easier ([cohosh](https://github.com/tootsuite/mastodon/pull/15498)) -- Change Helm configuration ([dunn](https://github.com/tootsuite/mastodon/pull/15722), [dunn](https://github.com/tootsuite/mastodon/pull/15728), [dunn](https://github.com/tootsuite/mastodon/pull/15748), [dunn](https://github.com/tootsuite/mastodon/pull/15749), [dunn](https://github.com/tootsuite/mastodon/pull/15767)) -- Change Docker configuration ([SuperSandro2000](https://github.com/tootsuite/mastodon/pull/10823), [mashirozx](https://github.com/tootsuite/mastodon/pull/15978)) +- Change custom emoji to be animated when hovering container in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15637)) +- Change streaming API from deprecated ClusterWS/cws to ws ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15932)) +- Change systemd configuration to add sandboxing features ([Izorkin](https://github.com/mastodon/mastodon/pull/15937), [Izorkin](https://github.com/mastodon/mastodon/pull/16103), [Izorkin](https://github.com/mastodon/mastodon/pull/16127)) +- Change nginx configuration to make running Onion service easier ([cohosh](https://github.com/mastodon/mastodon/pull/15498)) +- Change Helm configuration ([dunn](https://github.com/mastodon/mastodon/pull/15722), [dunn](https://github.com/mastodon/mastodon/pull/15728), [dunn](https://github.com/mastodon/mastodon/pull/15748), [dunn](https://github.com/mastodon/mastodon/pull/15749), [dunn](https://github.com/mastodon/mastodon/pull/15767)) +- Change Docker configuration ([SuperSandro2000](https://github.com/mastodon/mastodon/pull/10823), [mashirozx](https://github.com/mastodon/mastodon/pull/15978)) ### Removed -- Remove PubSubHubbub-related columns from accounts table ([Gargron](https://github.com/tootsuite/mastodon/pull/16170), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15857)) -- Remove dependency on @babel/plugin-proposal-class-properties ([ykzts](https://github.com/tootsuite/mastodon/pull/16155)) -- Remove dependency on pluck_each gem ([Gargron](https://github.com/tootsuite/mastodon/pull/16012)) -- Remove spam check and dependency on nilsimsa gem ([Gargron](https://github.com/tootsuite/mastodon/pull/16011)) -- Remove MySQL-specific code from Mastodon::MigrationHelpers ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15924)) -- Remove IE11 from supported browsers target ([gol-cha](https://github.com/tootsuite/mastodon/pull/15779)) +- Remove PubSubHubbub-related columns from accounts table ([Gargron](https://github.com/mastodon/mastodon/pull/16170), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15857)) +- Remove dependency on @babel/plugin-proposal-class-properties ([ykzts](https://github.com/mastodon/mastodon/pull/16155)) +- Remove dependency on pluck_each gem ([Gargron](https://github.com/mastodon/mastodon/pull/16012)) +- Remove spam check and dependency on nilsimsa gem ([Gargron](https://github.com/mastodon/mastodon/pull/16011)) +- Remove MySQL-specific code from Mastodon::MigrationHelpers ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15924)) +- Remove IE11 from supported browsers target ([gol-cha](https://github.com/mastodon/mastodon/pull/15779)) ### Fixed -- Fix "You might be interested in" flashing while searching in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/16162)) -- Fix display of posts without text content in web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15665)) -- Fix Google Translate breaking web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15610), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15611)) -- Fix web UI crashing when SVG support is disabled ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15809)) -- Fix web UI crash when a status opened in the media modal is deleted ([kaias1jp](https://github.com/tootsuite/mastodon/pull/15701)) -- Fix OCR language data failing to load in web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15519)) -- Fix footer links not being clickable in Safari in web UI ([noellabo](https://github.com/tootsuite/mastodon/pull/15496)) -- Fix autofocus/autoselection not working on mobile in web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15555), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15985)) -- Fix media redownload worker retrying on unexpected response codes ([Gargron](https://github.com/tootsuite/mastodon/pull/16111)) -- Fix thread resolve worker retrying when status no longer exists ([Gargron](https://github.com/tootsuite/mastodon/pull/16109)) -- Fix n+1 queries when rendering statuses in REST API ([abcang](https://github.com/tootsuite/mastodon/pull/15641)) -- Fix n+1 queries when rendering notifications in REST API ([abcang](https://github.com/tootsuite/mastodon/pull/15640)) -- Fix delete of local reply to local parent not being forwarded ([Gargron](https://github.com/tootsuite/mastodon/pull/16096)) -- Fix remote reporters not receiving suspend/unsuspend activities ([Gargron](https://github.com/tootsuite/mastodon/pull/16050)) -- Fix understanding (not fully qualified) `as:Public` and `Public` ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15948)) -- Fix actor update not being distributed on profile picture deletion ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15461)) -- Fix processing of incoming Delete activities ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16084)) -- Fix processing of incoming Block activities ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15546)) -- Fix processing of incoming Update activities of unknown accounts ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15514)) -- Fix URIs of repeat follow requests not being recorded ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15662)) -- Fix error on requests with no `Digest` header ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15782)) -- Fix activity object not requiring signature in secure mode ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15592)) -- Fix database serialization failure returning HTTP 500 ([Gargron](https://github.com/tootsuite/mastodon/pull/16101)) -- Fix media processing getting stuck on too much stdin/stderr ([Gargron](https://github.com/tootsuite/mastodon/pull/16136)) -- Fix some inefficient array manipulations ([007lva](https://github.com/tootsuite/mastodon/pull/15513), [007lva](https://github.com/tootsuite/mastodon/pull/15527)) -- Fix some inefficient regex matching ([007lva](https://github.com/tootsuite/mastodon/pull/15528)) -- Fix some inefficient SQL queries ([abcang](https://github.com/tootsuite/mastodon/pull/16104), [abcang](https://github.com/tootsuite/mastodon/pull/16106), [abcang](https://github.com/tootsuite/mastodon/pull/16105)) -- Fix trying to fetch key from empty URI when verifying HTTP signature ([Gargron](https://github.com/tootsuite/mastodon/pull/16100)) -- Fix `tootctl maintenance fix-duplicates` failures ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15923), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15515)) -- Fix error when removing status caused by race condition ([Gargron](https://github.com/tootsuite/mastodon/pull/16099)) -- Fix blocking someone not clearing up list feeds ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16205)) -- Fix misspelled URLs character counting ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15382)) -- Fix Sidekiq hanging forever due to a Resolv bug in Ruby 2.7.3 ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16157)) -- Fix edge case where follow limit interferes with accepting a follow ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16098)) -- Fix inconsistent lead text style in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/16052), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16086)) -- Fix reports of already suspended accounts being recorded ([Gargron](https://github.com/tootsuite/mastodon/pull/16047)) -- Fix sign-up restrictions based on IP addresses not being enforced ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15607)) -- Fix YouTube embeds failing due to YouTube serving wrong OEmbed URLs ([Gargron](https://github.com/tootsuite/mastodon/pull/15716)) -- Fix error when rendering public pages with media without meta ([Gargron](https://github.com/tootsuite/mastodon/pull/16112)) -- Fix misaligned logo on follow button on public pages ([noellabo](https://github.com/tootsuite/mastodon/pull/15458)) -- Fix video modal not working on public pages ([noellabo](https://github.com/tootsuite/mastodon/pull/15469)) -- Fix race conditions on account migration creation ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15597)) -- Fix not being able to change world filter expiration back to “Never” ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15858)) -- Fix `.env.vagrant` not setting `RAILS_ENV` variable ([chandrn7](https://github.com/tootsuite/mastodon/pull/15709)) -- Fix error when muting users with `duration` in REST API ([Tak](https://github.com/tootsuite/mastodon/pull/15516)) -- Fix border padding on front page in light theme ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15926)) -- Fix wrong URL to custom CSS when `CDN_HOST` is used ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15927)) -- Fix `tootctl accounts unfollow` ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15639)) -- Fix `tootctl emoji import` wasting time on MacOS shadow files ([cortices](https://github.com/tootsuite/mastodon/pull/15430)) -- Fix `tootctl emoji import` not treating shortcodes as case-insensitive ([angristan](https://github.com/tootsuite/mastodon/pull/15738)) -- Fix some issues with SAML account creation ([Gargron](https://github.com/tootsuite/mastodon/pull/15222), [kaiyou](https://github.com/tootsuite/mastodon/pull/15511)) -- Fix MX validation applying for explicitly allowed e-mail domains ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15930)) -- Fix share page not using configured custom mascot ([tribela](https://github.com/tootsuite/mastodon/pull/15687)) -- Fix instance actor not being automatically created if it wasn't seeded properly ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15693)) -- Fix HTTPS enforcement preventing Mastodon from being run as an Onion service ([cohosh](https://github.com/tootsuite/mastodon/pull/15560), [jtracey](https://github.com/tootsuite/mastodon/pull/15741), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/15712), [cohosh](https://github.com/tootsuite/mastodon/pull/15725)) -- Fix app name, website and redirect URIs not having a maximum length ([Gargron](https://github.com/tootsuite/mastodon/pull/16042)) +- Fix "You might be interested in" flashing while searching in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/16162)) +- Fix display of posts without text content in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15665)) +- Fix Google Translate breaking web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15610), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15611)) +- Fix web UI crashing when SVG support is disabled ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15809)) +- Fix web UI crash when a status opened in the media modal is deleted ([kaias1jp](https://github.com/mastodon/mastodon/pull/15701)) +- Fix OCR language data failing to load in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15519)) +- Fix footer links not being clickable in Safari in web UI ([noellabo](https://github.com/mastodon/mastodon/pull/15496)) +- Fix autofocus/autoselection not working on mobile in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15555), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15985)) +- Fix media redownload worker retrying on unexpected response codes ([Gargron](https://github.com/mastodon/mastodon/pull/16111)) +- Fix thread resolve worker retrying when status no longer exists ([Gargron](https://github.com/mastodon/mastodon/pull/16109)) +- Fix n+1 queries when rendering statuses in REST API ([abcang](https://github.com/mastodon/mastodon/pull/15641)) +- Fix n+1 queries when rendering notifications in REST API ([abcang](https://github.com/mastodon/mastodon/pull/15640)) +- Fix delete of local reply to local parent not being forwarded ([Gargron](https://github.com/mastodon/mastodon/pull/16096)) +- Fix remote reporters not receiving suspend/unsuspend activities ([Gargron](https://github.com/mastodon/mastodon/pull/16050)) +- Fix understanding (not fully qualified) `as:Public` and `Public` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15948)) +- Fix actor update not being distributed on profile picture deletion ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15461)) +- Fix processing of incoming Delete activities ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16084)) +- Fix processing of incoming Block activities ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15546)) +- Fix processing of incoming Update activities of unknown accounts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15514)) +- Fix URIs of repeat follow requests not being recorded ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15662)) +- Fix error on requests with no `Digest` header ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15782)) +- Fix activity object not requiring signature in secure mode ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15592)) +- Fix database serialization failure returning HTTP 500 ([Gargron](https://github.com/mastodon/mastodon/pull/16101)) +- Fix media processing getting stuck on too much stdin/stderr ([Gargron](https://github.com/mastodon/mastodon/pull/16136)) +- Fix some inefficient array manipulations ([007lva](https://github.com/mastodon/mastodon/pull/15513), [007lva](https://github.com/mastodon/mastodon/pull/15527)) +- Fix some inefficient regex matching ([007lva](https://github.com/mastodon/mastodon/pull/15528)) +- Fix some inefficient SQL queries ([abcang](https://github.com/mastodon/mastodon/pull/16104), [abcang](https://github.com/mastodon/mastodon/pull/16106), [abcang](https://github.com/mastodon/mastodon/pull/16105)) +- Fix trying to fetch key from empty URI when verifying HTTP signature ([Gargron](https://github.com/mastodon/mastodon/pull/16100)) +- Fix `tootctl maintenance fix-duplicates` failures ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15923), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15515)) +- Fix error when removing status caused by race condition ([Gargron](https://github.com/mastodon/mastodon/pull/16099)) +- Fix blocking someone not clearing up list feeds ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16205)) +- Fix misspelled URLs character counting ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15382)) +- Fix Sidekiq hanging forever due to a Resolv bug in Ruby 2.7.3 ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16157)) +- Fix edge case where follow limit interferes with accepting a follow ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16098)) +- Fix inconsistent lead text style in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/16052), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/16086)) +- Fix reports of already suspended accounts being recorded ([Gargron](https://github.com/mastodon/mastodon/pull/16047)) +- Fix sign-up restrictions based on IP addresses not being enforced ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15607)) +- Fix YouTube embeds failing due to YouTube serving wrong OEmbed URLs ([Gargron](https://github.com/mastodon/mastodon/pull/15716)) +- Fix error when rendering public pages with media without meta ([Gargron](https://github.com/mastodon/mastodon/pull/16112)) +- Fix misaligned logo on follow button on public pages ([noellabo](https://github.com/mastodon/mastodon/pull/15458)) +- Fix video modal not working on public pages ([noellabo](https://github.com/mastodon/mastodon/pull/15469)) +- Fix race conditions on account migration creation ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15597)) +- Fix not being able to change world filter expiration back to “Never” ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15858)) +- Fix `.env.vagrant` not setting `RAILS_ENV` variable ([chandrn7](https://github.com/mastodon/mastodon/pull/15709)) +- Fix error when muting users with `duration` in REST API ([Tak](https://github.com/mastodon/mastodon/pull/15516)) +- Fix border padding on front page in light theme ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15926)) +- Fix wrong URL to custom CSS when `CDN_HOST` is used ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15927)) +- Fix `tootctl accounts unfollow` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15639)) +- Fix `tootctl emoji import` wasting time on MacOS shadow files ([cortices](https://github.com/mastodon/mastodon/pull/15430)) +- Fix `tootctl emoji import` not treating shortcodes as case-insensitive ([angristan](https://github.com/mastodon/mastodon/pull/15738)) +- Fix some issues with SAML account creation ([Gargron](https://github.com/mastodon/mastodon/pull/15222), [kaiyou](https://github.com/mastodon/mastodon/pull/15511)) +- Fix MX validation applying for explicitly allowed e-mail domains ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15930)) +- Fix share page not using configured custom mascot ([tribela](https://github.com/mastodon/mastodon/pull/15687)) +- Fix instance actor not being automatically created if it wasn't seeded properly ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15693)) +- Fix HTTPS enforcement preventing Mastodon from being run as an Onion service ([cohosh](https://github.com/mastodon/mastodon/pull/15560), [jtracey](https://github.com/mastodon/mastodon/pull/15741), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15712), [cohosh](https://github.com/mastodon/mastodon/pull/15725)) +- Fix app name, website and redirect URIs not having a maximum length ([Gargron](https://github.com/mastodon/mastodon/pull/16042)) ## [3.3.0] - 2020-12-27 ### Added -- **Add hotkeys for audio/video control in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15158), [Gargron](https://github.com/tootsuite/mastodon/pull/15198)) +- **Add hotkeys for audio/video control in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/15158), [Gargron](https://github.com/mastodon/mastodon/pull/15198)) - `Space` and `k` to toggle playback - `m` to toggle mute - `f` to toggle fullscreen - `j` and `l` to go back and forward by 10 seconds - `.` and `,` to go back and forward by a frame (video only) -- Add expand/compress button on media modal in web UI ([mashirozx](https://github.com/tootsuite/mastodon/pull/15068), [mashirozx](https://github.com/tootsuite/mastodon/pull/15088), [mashirozx](https://github.com/tootsuite/mastodon/pull/15094)) -- Add border around 🕺 emoji in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14769)) -- Add border around 🐞 emoji in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14712)) -- Add home link to the getting started column when home isn't mounted ([ThibG](https://github.com/tootsuite/mastodon/pull/14707)) -- Add option to disable swiping motions across the web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13885)) -- **Add pop-out player for audio/video in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/14870), [Gargron](https://github.com/tootsuite/mastodon/pull/15157), [Gargron](https://github.com/tootsuite/mastodon/pull/14915), [noellabo](https://github.com/tootsuite/mastodon/pull/15309)) +- Add expand/compress button on media modal in web UI ([mashirozx](https://github.com/mastodon/mastodon/pull/15068), [mashirozx](https://github.com/mastodon/mastodon/pull/15088), [mashirozx](https://github.com/mastodon/mastodon/pull/15094)) +- Add border around 🕺 emoji in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14769)) +- Add border around 🐞 emoji in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14712)) +- Add home link to the getting started column when home isn't mounted ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14707)) +- Add option to disable swiping motions across the web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13885)) +- **Add pop-out player for audio/video in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/14870), [Gargron](https://github.com/mastodon/mastodon/pull/15157), [Gargron](https://github.com/mastodon/mastodon/pull/14915), [noellabo](https://github.com/mastodon/mastodon/pull/15309)) - Continue watching/listening when you scroll away - Action bar to interact with/open toot from the pop-out player -- Add unread notification markers in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14818), [ThibG](https://github.com/tootsuite/mastodon/pull/14960), [ThibG](https://github.com/tootsuite/mastodon/pull/14954), [noellabo](https://github.com/tootsuite/mastodon/pull/14897), [noellabo](https://github.com/tootsuite/mastodon/pull/14907)) -- Add paragraph about browser add-ons when encountering errors in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14801)) -- Add import and export for bookmarks ([ThibG](https://github.com/tootsuite/mastodon/pull/14956)) -- Add cache buster feature for media files ([Gargron](https://github.com/tootsuite/mastodon/pull/15155)) +- Add unread notification markers in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14818), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14960), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14954), [noellabo](https://github.com/mastodon/mastodon/pull/14897), [noellabo](https://github.com/mastodon/mastodon/pull/14907)) +- Add paragraph about browser add-ons when encountering errors in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14801)) +- Add import and export for bookmarks ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14956)) +- Add cache buster feature for media files ([Gargron](https://github.com/mastodon/mastodon/pull/15155)) - If you have a proxy cache in front of object storage, deleted files will persist until the cache expires - If enabled, cache buster will make a special request to the proxy to signal a cache reset -- Add duration option to the mute function ([aquarla](https://github.com/tootsuite/mastodon/pull/13831)) -- Add replies policy option to the list function ([ThibG](https://github.com/tootsuite/mastodon/pull/9205), [trwnh](https://github.com/tootsuite/mastodon/pull/15304)) -- Add `og:published_time` OpenGraph tags on toots ([nornagon](https://github.com/tootsuite/mastodon/pull/14865)) -- **Add option to be notified when a followed user posts** ([Gargron](https://github.com/tootsuite/mastodon/pull/13546), [ThibG](https://github.com/tootsuite/mastodon/pull/14896), [Gargron](https://github.com/tootsuite/mastodon/pull/14822)) +- Add duration option to the mute function ([aquarla](https://github.com/mastodon/mastodon/pull/13831)) +- Add replies policy option to the list function ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9205), [trwnh](https://github.com/mastodon/mastodon/pull/15304)) +- Add `og:published_time` OpenGraph tags on toots ([nornagon](https://github.com/mastodon/mastodon/pull/14865)) +- **Add option to be notified when a followed user posts** ([Gargron](https://github.com/mastodon/mastodon/pull/13546), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14896), [Gargron](https://github.com/mastodon/mastodon/pull/14822)) - If you don't want to miss a toot, click the bell button! -- Add client-side validation in password change forms ([ThibG](https://github.com/tootsuite/mastodon/pull/14564)) -- Add client-side validation in the registration form ([ThibG](https://github.com/tootsuite/mastodon/pull/14560), [ThibG](https://github.com/tootsuite/mastodon/pull/14599)) -- Add support for Gemini URLs ([joshleeb](https://github.com/tootsuite/mastodon/pull/15013)) -- Add app shortcuts to web app manifest ([mkljczk](https://github.com/tootsuite/mastodon/pull/15234)) -- Add WebAuthn as an alternative 2FA method ([santiagorodriguez96](https://github.com/tootsuite/mastodon/pull/14466), [jiikko](https://github.com/tootsuite/mastodon/pull/14806)) -- Add honeypot fields and minimum fill-out time for sign-up form ([ThibG](https://github.com/tootsuite/mastodon/pull/15276)) -- Add icon for mutual relationships in relationship manager ([noellabo](https://github.com/tootsuite/mastodon/pull/15149)) -- Add follow selected followers button in relationship manager ([noellabo](https://github.com/tootsuite/mastodon/pull/15148)) -- **Add subresource integrity for JS and CSS assets** ([Gargron](https://github.com/tootsuite/mastodon/pull/15096)) +- Add client-side validation in password change forms ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14564)) +- Add client-side validation in the registration form ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14560), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14599)) +- Add support for Gemini URLs ([joshleeb](https://github.com/mastodon/mastodon/pull/15013)) +- Add app shortcuts to web app manifest ([mkljczk](https://github.com/mastodon/mastodon/pull/15234)) +- Add WebAuthn as an alternative 2FA method ([santiagorodriguez96](https://github.com/mastodon/mastodon/pull/14466), [jiikko](https://github.com/mastodon/mastodon/pull/14806)) +- Add honeypot fields and minimum fill-out time for sign-up form ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15276)) +- Add icon for mutual relationships in relationship manager ([noellabo](https://github.com/mastodon/mastodon/pull/15149)) +- Add follow selected followers button in relationship manager ([noellabo](https://github.com/mastodon/mastodon/pull/15148)) +- **Add subresource integrity for JS and CSS assets** ([Gargron](https://github.com/mastodon/mastodon/pull/15096)) - If you use a CDN for static assets (JavaScript, CSS, and so on), you have to trust that the CDN does not modify the assets maliciously - Subresource integrity compares server-generated asset digests with what's actually served from the CDN and prevents such attacks -- Add `ku`, `sa`, `sc`, `zgh` to available locales ([ykzts](https://github.com/tootsuite/mastodon/pull/15138)) -- Add ability to force an account to mark media as sensitive ([noellabo](https://github.com/tootsuite/mastodon/pull/14361)) -- **Add ability to block access or limit sign-ups from chosen IPs** ([Gargron](https://github.com/tootsuite/mastodon/pull/14963), [ThibG](https://github.com/tootsuite/mastodon/pull/15263)) +- Add `ku`, `sa`, `sc`, `zgh` to available locales ([ykzts](https://github.com/mastodon/mastodon/pull/15138)) +- Add ability to force an account to mark media as sensitive ([noellabo](https://github.com/mastodon/mastodon/pull/14361)) +- **Add ability to block access or limit sign-ups from chosen IPs** ([Gargron](https://github.com/mastodon/mastodon/pull/14963), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15263)) - Add rules for IPs or CIDR ranges that automatically expire after a configurable amount of time - Choose the severity of the rule, either blocking all access or merely limiting sign-ups -- **Add support for reversible suspensions through ActivityPub** ([Gargron](https://github.com/tootsuite/mastodon/pull/14989)) +- **Add support for reversible suspensions through ActivityPub** ([Gargron](https://github.com/mastodon/mastodon/pull/14989)) - Servers can signal that one of their accounts has been suspended - During suspension, the account can only delete its own content - A reversal of the suspension can be signalled the same way - A local suspension always overrides a remote one -- Add indication to admin UI of whether a report has been forwarded ([ThibG](https://github.com/tootsuite/mastodon/pull/13237)) -- Add display of reasons for joining of an account in admin UI ([mashirozx](https://github.com/tootsuite/mastodon/pull/15265)) -- Add option to obfuscate domain name in public list of domain blocks ([Gargron](https://github.com/tootsuite/mastodon/pull/15355)) -- Add option to make reasons for joining required on sign-up ([ThibG](https://github.com/tootsuite/mastodon/pull/15326), [ThibG](https://github.com/tootsuite/mastodon/pull/15358), [ThibG](https://github.com/tootsuite/mastodon/pull/15385), [ThibG](https://github.com/tootsuite/mastodon/pull/15405)) -- Add ActivityPub follower synchronization mechanism ([ThibG](https://github.com/tootsuite/mastodon/pull/14510), [ThibG](https://github.com/tootsuite/mastodon/pull/15026)) -- Add outbox attribute to instance actor ([ThibG](https://github.com/tootsuite/mastodon/pull/14721)) -- Add featured hashtags as an ActivityPub collection ([Gargron](https://github.com/tootsuite/mastodon/pull/11595), [noellabo](https://github.com/tootsuite/mastodon/pull/15277)) -- Add support for dereferencing objects through bearcaps ([Gargron](https://github.com/tootsuite/mastodon/pull/14683), [noellabo](https://github.com/tootsuite/mastodon/pull/14981)) -- Add `S3_READ_TIMEOUT` environment variable ([tateisu](https://github.com/tootsuite/mastodon/pull/14952)) -- Add `ALLOWED_PRIVATE_ADDRESSES` environment variable ([ThibG](https://github.com/tootsuite/mastodon/pull/14722)) -- Add `--fix-permissions` option to `tootctl media remove-orphans` ([Gargron](https://github.com/tootsuite/mastodon/pull/14383), [uist1idrju3i](https://github.com/tootsuite/mastodon/pull/14715)) -- Add `tootctl accounts merge` ([Gargron](https://github.com/tootsuite/mastodon/pull/15201), [ThibG](https://github.com/tootsuite/mastodon/pull/15264), [ThibG](https://github.com/tootsuite/mastodon/pull/15256)) +- Add indication to admin UI of whether a report has been forwarded ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13237)) +- Add display of reasons for joining of an account in admin UI ([mashirozx](https://github.com/mastodon/mastodon/pull/15265)) +- Add option to obfuscate domain name in public list of domain blocks ([Gargron](https://github.com/mastodon/mastodon/pull/15355)) +- Add option to make reasons for joining required on sign-up ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15326), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15358), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15385), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15405)) +- Add ActivityPub follower synchronization mechanism ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14510), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15026)) +- Add outbox attribute to instance actor ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14721)) +- Add featured hashtags as an ActivityPub collection ([Gargron](https://github.com/mastodon/mastodon/pull/11595), [noellabo](https://github.com/mastodon/mastodon/pull/15277)) +- Add support for dereferencing objects through bearcaps ([Gargron](https://github.com/mastodon/mastodon/pull/14683), [noellabo](https://github.com/mastodon/mastodon/pull/14981)) +- Add `S3_READ_TIMEOUT` environment variable ([tateisu](https://github.com/mastodon/mastodon/pull/14952)) +- Add `ALLOWED_PRIVATE_ADDRESSES` environment variable ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14722)) +- Add `--fix-permissions` option to `tootctl media remove-orphans` ([Gargron](https://github.com/mastodon/mastodon/pull/14383), [uist1idrju3i](https://github.com/mastodon/mastodon/pull/14715)) +- Add `tootctl accounts merge` ([Gargron](https://github.com/mastodon/mastodon/pull/15201), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15264), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15256)) - Has someone changed their domain or subdomain thereby creating two accounts where there should be one? - This command will fix it on your end -- Add `tootctl maintenance fix-duplicates` ([ThibG](https://github.com/tootsuite/mastodon/pull/14860), [Gargron](https://github.com/tootsuite/mastodon/pull/15223), [ThibG](https://github.com/tootsuite/mastodon/pull/15373)) +- Add `tootctl maintenance fix-duplicates` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14860), [Gargron](https://github.com/mastodon/mastodon/pull/15223), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15373)) - Index corruption in the database? - This command is for you -- **Add support for managing multiple stream subscriptions in a single connection** ([Gargron](https://github.com/tootsuite/mastodon/pull/14524), [Gargron](https://github.com/tootsuite/mastodon/pull/14566), [mfmfuyu](https://github.com/tootsuite/mastodon/pull/14859), [zunda](https://github.com/tootsuite/mastodon/pull/14608)) +- **Add support for managing multiple stream subscriptions in a single connection** ([Gargron](https://github.com/mastodon/mastodon/pull/14524), [Gargron](https://github.com/mastodon/mastodon/pull/14566), [mfmfuyu](https://github.com/mastodon/mastodon/pull/14859), [zunda](https://github.com/mastodon/mastodon/pull/14608)) - Previously, getting live updates for multiple timelines required opening a HTTP or WebSocket connection for each - More connections means more resource consumption on both ends, not to mention the (ever so slight) delay when establishing a new connection - Now, with just a single WebSocket connection you can subscribe and unsubscribe to and from multiple streams -- Add support for limiting results by both `min_id` and `max_id` at the same time in REST API ([tateisu](https://github.com/tootsuite/mastodon/pull/14776)) -- Add `GET /api/v1/accounts/:id/featured_tags` to REST API ([noellabo](https://github.com/tootsuite/mastodon/pull/11817), [noellabo](https://github.com/tootsuite/mastodon/pull/15270)) -- Add stoplight for object storage failures, return HTTP 503 in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/13043)) -- Add optional `tootctl remove media` cronjob in Helm chart ([dunn](https://github.com/tootsuite/mastodon/pull/14396)) -- Add clean error message when `RAILS_ENV` is unset ([ThibG](https://github.com/tootsuite/mastodon/pull/15381)) +- Add support for limiting results by both `min_id` and `max_id` at the same time in REST API ([tateisu](https://github.com/mastodon/mastodon/pull/14776)) +- Add `GET /api/v1/accounts/:id/featured_tags` to REST API ([noellabo](https://github.com/mastodon/mastodon/pull/11817), [noellabo](https://github.com/mastodon/mastodon/pull/15270)) +- Add stoplight for object storage failures, return HTTP 503 in REST API ([Gargron](https://github.com/mastodon/mastodon/pull/13043)) +- Add optional `tootctl remove media` cronjob in Helm chart ([dunn](https://github.com/mastodon/mastodon/pull/14396)) +- Add clean error message when `RAILS_ENV` is unset ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15381)) ### Changed -- **Change media modals look in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15217), [Gargron](https://github.com/tootsuite/mastodon/pull/15221), [Gargron](https://github.com/tootsuite/mastodon/pull/15284), [Gargron](https://github.com/tootsuite/mastodon/pull/15283), [Kjwon15](https://github.com/tootsuite/mastodon/pull/15308), [noellabo](https://github.com/tootsuite/mastodon/pull/15305)) +- **Change media modals look in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/15217), [Gargron](https://github.com/mastodon/mastodon/pull/15221), [Gargron](https://github.com/mastodon/mastodon/pull/15284), [Gargron](https://github.com/mastodon/mastodon/pull/15283), [Kjwon15](https://github.com/mastodon/mastodon/pull/15308), [noellabo](https://github.com/mastodon/mastodon/pull/15305), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15417)) - Background of the overlay matches the color of the image - Action bar to interact with or open the toot from the modal -- Change order of announcements in admin UI to be newest-first ([ThibG](https://github.com/tootsuite/mastodon/pull/15091)) -- **Change account suspensions to be reversible by default** ([Gargron](https://github.com/tootsuite/mastodon/pull/14726), [ThibG](https://github.com/tootsuite/mastodon/pull/15152), [ThibG](https://github.com/tootsuite/mastodon/pull/15106), [ThibG](https://github.com/tootsuite/mastodon/pull/15100), [ThibG](https://github.com/tootsuite/mastodon/pull/15099), [noellabo](https://github.com/tootsuite/mastodon/pull/14855), [ThibG](https://github.com/tootsuite/mastodon/pull/15380)) +- Change order of announcements in admin UI to be newest-first ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15091)) +- **Change account suspensions to be reversible by default** ([Gargron](https://github.com/mastodon/mastodon/pull/14726), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15152), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15106), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15100), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15099), [noellabo](https://github.com/mastodon/mastodon/pull/14855), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15380), [Gargron](https://github.com/mastodon/mastodon/pull/15420), [Gargron](https://github.com/mastodon/mastodon/pull/15414)) - Suspensions no longer equal deletions - A suspended account can be unsuspended with minimal consequences for 30 days - Immediate deletion of data is still available as an explicit option - Suspended accounts can request an archive of their data through the UI - Change REST API to return empty data for suspended accounts (14765) -- Change web UI to show empty profile for suspended accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/14766), [Gargron](https://github.com/tootsuite/mastodon/pull/15345)) -- Change featured hashtag suggestions to be recently used instead of most used ([abcang](https://github.com/tootsuite/mastodon/pull/14760)) -- Change direct toots to appear in the home feed again ([Gargron](https://github.com/tootsuite/mastodon/pull/14711), [ThibG](https://github.com/tootsuite/mastodon/pull/15182), [noellabo](https://github.com/tootsuite/mastodon/pull/14727)) +- Change web UI to show empty profile for suspended accounts ([Gargron](https://github.com/mastodon/mastodon/pull/14766), [Gargron](https://github.com/mastodon/mastodon/pull/15345)) +- Change featured hashtag suggestions to be recently used instead of most used ([abcang](https://github.com/mastodon/mastodon/pull/14760)) +- Change direct toots to appear in the home feed again ([Gargron](https://github.com/mastodon/mastodon/pull/14711), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15182), [noellabo](https://github.com/mastodon/mastodon/pull/14727)) - Return to treating all toots the same instead of trying to retrofit direct visibility into an instant messaging model -- Change email address validation to return more specific errors ([ThibG](https://github.com/tootsuite/mastodon/pull/14565)) -- Change HTTP signature requirements to include `Digest` header on `POST` requests ([ThibG](https://github.com/tootsuite/mastodon/pull/15069)) -- Change click area of video/audio player buttons to be bigger in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/15049)) -- Change order of filters by alphabetic by "keyword or phrase" ([ariasuni](https://github.com/tootsuite/mastodon/pull/15050)) -- Change suspension of remote accounts to also undo outgoing follows ([ThibG](https://github.com/tootsuite/mastodon/pull/15188)) -- Change string "Home" to "Home and lists" in the filter creation screen ([ariasuni](https://github.com/tootsuite/mastodon/pull/15139)) -- Change string "Boost to original audience" to "Boost with original visibility" in web UI ([3n-k1](https://github.com/tootsuite/mastodon/pull/14598)) -- Change string "Show more" to "Show newer" and "Show older" on public pages ([ariasuni](https://github.com/tootsuite/mastodon/pull/15052)) -- Change order of announcements to be reverse chronological in web UI ([dariusk](https://github.com/tootsuite/mastodon/pull/15065), [dariusk](https://github.com/tootsuite/mastodon/pull/15070)) -- Change RTL detection to rely on unicode-bidi paragraph by paragraph in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14573)) -- Change visibility icon next to timestamp to be clickable in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/15053), [mayaeh](https://github.com/tootsuite/mastodon/pull/15055)) -- Change public thread view to hide "Show thread" link ([ThibG](https://github.com/tootsuite/mastodon/pull/15266)) -- Change number format on about page from full to shortened ([Gargron](https://github.com/tootsuite/mastodon/pull/15327)) -- Change how scheduled tasks run in multi-process environments ([noellabo](https://github.com/tootsuite/mastodon/pull/15314)) +- Change email address validation to return more specific errors ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14565)) +- Change HTTP signature requirements to include `Digest` header on `POST` requests ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15069)) +- Change click area of video/audio player buttons to be bigger in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/15049)) +- Change order of filters by alphabetic by "keyword or phrase" ([ariasuni](https://github.com/mastodon/mastodon/pull/15050)) +- Change suspension of remote accounts to also undo outgoing follows ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15188)) +- Change string "Home" to "Home and lists" in the filter creation screen ([ariasuni](https://github.com/mastodon/mastodon/pull/15139)) +- Change string "Boost to original audience" to "Boost with original visibility" in web UI ([3n-k1](https://github.com/mastodon/mastodon/pull/14598)) +- Change string "Show more" to "Show newer" and "Show older" on public pages ([ariasuni](https://github.com/mastodon/mastodon/pull/15052)) +- Change order of announcements to be reverse chronological in web UI ([dariusk](https://github.com/mastodon/mastodon/pull/15065), [dariusk](https://github.com/mastodon/mastodon/pull/15070)) +- Change RTL detection to rely on unicode-bidi paragraph by paragraph in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/14573)) +- Change visibility icon next to timestamp to be clickable in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/15053), [mayaeh](https://github.com/mastodon/mastodon/pull/15055)) +- Change public thread view to hide "Show thread" link ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15266)) +- Change number format on about page from full to shortened ([Gargron](https://github.com/mastodon/mastodon/pull/15327)) +- Change how scheduled tasks run in multi-process environments ([noellabo](https://github.com/mastodon/mastodon/pull/15314)) - New dedicated queue `scheduler` - Runs by default when Sidekiq is executed with no options - Has to be added manually in a multi-process environment ### Removed -- Remove fade-in animation from modals in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/15199)) -- Remove auto-redirect to direct messages in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/15142)) -- Remove obsolete IndexedDB operations from web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14730)) -- Remove dependency on unused and unmaintained http_parser.rb gem ([ThibG](https://github.com/tootsuite/mastodon/pull/14574)) +- Remove fade-in animation from modals in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/15199)) +- Remove auto-redirect to direct messages in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/15142)) +- Remove obsolete IndexedDB operations from web UI ([Gargron](https://github.com/mastodon/mastodon/pull/14730)) +- Remove dependency on unused and unmaintained http_parser.rb gem ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14574)) ### Fixed -- Fix layout on about page when contact account has a long username ([ThibG](https://github.com/tootsuite/mastodon/pull/15357)) -- Fix follow limit preventing re-following of a moved account ([Gargron](https://github.com/tootsuite/mastodon/pull/14207)) -- **Fix deletes not reaching every server that interacted with toot** ([Gargron](https://github.com/tootsuite/mastodon/pull/15200)) +- Fix layout on about page when contact account has a long username ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15357)) +- Fix follow limit preventing re-following of a moved account ([Gargron](https://github.com/mastodon/mastodon/pull/14207), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15384)) +- **Fix deletes not reaching every server that interacted with toot** ([Gargron](https://github.com/mastodon/mastodon/pull/15200)) - Previously, delete of a toot would be primarily sent to the followers of its author, people mentioned in the toot, and people who reblogged the toot - Now, additionally, it is ensured that it is sent to people who replied to it, favourited it, and to the person it replies to even if that person is not mentioned -- Fix resolving an account through its non-canonical form (i.e. alternate domain) ([ThibG](https://github.com/tootsuite/mastodon/pull/15187)) -- Fix sending redundant ActivityPub events when processing remote account deletion ([ThibG](https://github.com/tootsuite/mastodon/pull/15104)) -- Fix Move handler not being triggered when failing to fetch target account ([ThibG](https://github.com/tootsuite/mastodon/pull/15107)) -- Fix downloading remote media files when server returns empty filename ([ThibG](https://github.com/tootsuite/mastodon/pull/14867)) -- Fix account processing failing because of large collections ([ThibG](https://github.com/tootsuite/mastodon/pull/15027)) -- Fix not being able to unfavorite toots one has lost access to ([ThibG](https://github.com/tootsuite/mastodon/pull/15192)) -- Fix not being able to unbookmark toots one has lost access to ([ThibG](https://github.com/tootsuite/mastodon/pull/14604)) -- Fix possible casing inconsistencies in hashtag search ([ThibG](https://github.com/tootsuite/mastodon/pull/14906)) -- Fix updating account counters when association is not yet created ([Gargron](https://github.com/tootsuite/mastodon/pull/15108)) -- Fix cookies not having a SameSite attribute ([Gargron](https://github.com/tootsuite/mastodon/pull/15098)) -- Fix poll ending notifications being created for each vote ([ThibG](https://github.com/tootsuite/mastodon/pull/15071)) -- Fix multiple boosts of a same toot erroneously appearing in TL ([ThibG](https://github.com/tootsuite/mastodon/pull/14759)) -- Fix asset builds not picking up `CDN_HOST` change ([ThibG](https://github.com/tootsuite/mastodon/pull/14381)) -- Fix desktop notifications permission prompt in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14985), [Gargron](https://github.com/tootsuite/mastodon/pull/15141), [ThibG](https://github.com/tootsuite/mastodon/pull/13543), [ThibG](https://github.com/tootsuite/mastodon/pull/15176)) +- Fix resolving an account through its non-canonical form (i.e. alternate domain) ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15187)) +- Fix sending redundant ActivityPub events when processing remote account deletion ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15104)) +- Fix Move handler not being triggered when failing to fetch target account ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15107)) +- Fix downloading remote media files when server returns empty filename ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14867)) +- Fix account processing failing because of large collections ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15027)) +- Fix not being able to unfavorite toots one has lost access to ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15192)) +- Fix not being able to unbookmark toots one has lost access to ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14604)) +- Fix possible casing inconsistencies in hashtag search ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14906)) +- Fix updating account counters when association is not yet created ([Gargron](https://github.com/mastodon/mastodon/pull/15108)) +- Fix cookies not having a SameSite attribute ([Gargron](https://github.com/mastodon/mastodon/pull/15098)) +- Fix poll ending notifications being created for each vote ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15071)) +- Fix multiple boosts of a same toot erroneously appearing in TL ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14759)) +- Fix asset builds not picking up `CDN_HOST` change ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14381)) +- Fix desktop notifications permission prompt in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/14985), [Gargron](https://github.com/mastodon/mastodon/pull/15141), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13543), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15176)) - Some time ago, browsers added a requirement that desktop notification prompts could only be displayed in response to a user-generated event (such as a click) - This means that for some time, users who haven't already given the permission before were not getting a prompt and as such were not receiving desktop notifications -- Fix "Mark media as sensitive" string not supporting pluralizations in other languages in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/15051)) -- Fix glitched image uploads when canvas read access is blocked in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/15180)) -- Fix some account gallery items having empty labels in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/15073)) -- Fix alt-key hotkeys activating while typing in a text field in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14942)) -- Fix wrong seek bar width on media player in web UI ([mfmfuyu](https://github.com/tootsuite/mastodon/pull/15060)) -- Fix logging out on mobile in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14901)) -- Fix wrong click area for GIFVs in media modal in web UI ([noellabo](https://github.com/tootsuite/mastodon/pull/14615)) -- Fix unreadable placeholder text color in high contrast theme in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14803)) -- Fix scrolling issues when closing some dropdown menus in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14606)) -- Fix notification filter bar incorrectly filtering gaps in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14808)) -- Fix disabled boost icon being replaced by private boost icon on hover in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14456)) -- Fix hashtag detection in compose form being different to server-side in web UI ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/14484), [ThibG](https://github.com/tootsuite/mastodon/pull/14513)) -- Fix home last read marker mishandling gaps in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14809)) -- Fix unnecessary re-rendering of various components when typing in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/15286)) -- Fix notifications being unnecessarily re-rendered in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/15312)) -- Fix column swiping animation logic in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/15301)) -- Fix inefficiency when fetching hashtag timeline ([noellabo](https://github.com/tootsuite/mastodon/pull/14861), [akihikodaki](https://github.com/tootsuite/mastodon/pull/14662)) -- Fix inefficiency when fetching bookmarks ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14674)) -- Fix inefficiency when fetching favourites ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14673)) -- Fix inefficiency when fetching media-only account timeline ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14675)) -- Fix inefficieny when deleting accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/15387), [ThibG](https://github.com/tootsuite/mastodon/pull/15409), [ThibG](https://github.com/tootsuite/mastodon/pull/15407), [ThibG](https://github.com/tootsuite/mastodon/pull/15408), [ThibG](https://github.com/tootsuite/mastodon/pull/15402)) -- Fix redundant query when processing batch actions on custom emojis ([niwatori24](https://github.com/tootsuite/mastodon/pull/14534)) -- Fix slow distinct queries where grouped queries are faster ([Gargron](https://github.com/tootsuite/mastodon/pull/15287)) -- Fix performance on instances list in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/15282)) -- Fix server actor appearing in list of accounts in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14567)) -- Fix "bootstrap timeline accounts" toggle in site settings in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/15325)) -- Fix PostgreSQL secret name for cronjob in Helm chart ([metal3d](https://github.com/tootsuite/mastodon/pull/15072)) -- Fix Procfile not being compatible with herokuish ([acuteaura](https://github.com/tootsuite/mastodon/pull/12685)) -- Fix installation of tini being split into multiple steps in Dockerfile ([ryncsn](https://github.com/tootsuite/mastodon/pull/14686)) +- Fix "Mark media as sensitive" string not supporting pluralizations in other languages in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/15051)) +- Fix glitched image uploads when canvas read access is blocked in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15180)) +- Fix some account gallery items having empty labels in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15073)) +- Fix alt-key hotkeys activating while typing in a text field in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14942)) +- Fix wrong seek bar width on media player in web UI ([mfmfuyu](https://github.com/mastodon/mastodon/pull/15060)) +- Fix logging out on mobile in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14901)) +- Fix wrong click area for GIFVs in media modal in web UI ([noellabo](https://github.com/mastodon/mastodon/pull/14615)) +- Fix unreadable placeholder text color in high contrast theme in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/14803)) +- Fix scrolling issues when closing some dropdown menus in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14606)) +- Fix notification filter bar incorrectly filtering gaps in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14808)) +- Fix disabled boost icon being replaced by private boost icon on hover in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14456)) +- Fix hashtag detection in compose form being different to server-side in web UI ([kedamaDQ](https://github.com/mastodon/mastodon/pull/14484), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14513)) +- Fix home last read marker mishandling gaps in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14809)) +- Fix unnecessary re-rendering of various components when typing in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/15286)) +- Fix notifications being unnecessarily re-rendered in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15312)) +- Fix column swiping animation logic in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15301)) +- Fix inefficiency when fetching hashtag timeline ([noellabo](https://github.com/mastodon/mastodon/pull/14861), [akihikodaki](https://github.com/mastodon/mastodon/pull/14662)) +- Fix inefficiency when fetching bookmarks ([akihikodaki](https://github.com/mastodon/mastodon/pull/14674)) +- Fix inefficiency when fetching favourites ([akihikodaki](https://github.com/mastodon/mastodon/pull/14673)) +- Fix inefficiency when fetching media-only account timeline ([akihikodaki](https://github.com/mastodon/mastodon/pull/14675)) +- Fix inefficieny when deleting accounts ([Gargron](https://github.com/mastodon/mastodon/pull/15387), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15409), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15407), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15408), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15402), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15416), [Gargron](https://github.com/mastodon/mastodon/pull/15421)) +- Fix redundant query when processing batch actions on custom emojis ([niwatori24](https://github.com/mastodon/mastodon/pull/14534)) +- Fix slow distinct queries where grouped queries are faster ([Gargron](https://github.com/mastodon/mastodon/pull/15287)) +- Fix performance on instances list in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/15282)) +- Fix server actor appearing in list of accounts in admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14567)) +- Fix "bootstrap timeline accounts" toggle in site settings in admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15325)) +- Fix PostgreSQL secret name for cronjob in Helm chart ([metal3d](https://github.com/mastodon/mastodon/pull/15072)) +- Fix Procfile not being compatible with herokuish ([acuteaura](https://github.com/mastodon/mastodon/pull/12685)) +- Fix installation of tini being split into multiple steps in Dockerfile ([ryncsn](https://github.com/mastodon/mastodon/pull/14686)) ### Security -- Fix streaming API allowing connections to persist after access token invalidation ([Gargron](https://github.com/tootsuite/mastodon/pull/15111)) -- Fix 2FA/sign-in token sessions being valid after password change ([Gargron](https://github.com/tootsuite/mastodon/pull/14802)) -- Fix resolving accounts sometimes creating duplicate records for a given ActivityPub identifier ([ThibG](https://github.com/tootsuite/mastodon/pull/15364)) +- Fix streaming API allowing connections to persist after access token invalidation ([Gargron](https://github.com/mastodon/mastodon/pull/15111)) +- Fix 2FA/sign-in token sessions being valid after password change ([Gargron](https://github.com/mastodon/mastodon/pull/14802)) +- Fix resolving accounts sometimes creating duplicate records for a given ActivityPub identifier ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15364)) ## [3.2.2] - 2020-12-19 ### Added -- Add `tootctl maintenance fix-duplicates` ([ThibG](https://github.com/tootsuite/mastodon/pull/14860), [Gargron](https://github.com/tootsuite/mastodon/pull/15223)) +- Add `tootctl maintenance fix-duplicates` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14860), [Gargron](https://github.com/mastodon/mastodon/pull/15223)) - Index corruption in the database? - This command is for you ### Removed -- Remove dependency on unused and unmaintained http_parser.rb gem ([ThibG](https://github.com/tootsuite/mastodon/pull/14574)) +- Remove dependency on unused and unmaintained http_parser.rb gem ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14574)) ### Fixed -- Fix Move handler not being triggered when failing to fetch target account ([ThibG](https://github.com/tootsuite/mastodon/pull/15107)) -- Fix downloading remote media files when server returns empty filename ([ThibG](https://github.com/tootsuite/mastodon/pull/14867)) -- Fix possible casing inconsistencies in hashtag search ([ThibG](https://github.com/tootsuite/mastodon/pull/14906)) -- Fix updating account counters when association is not yet created ([Gargron](https://github.com/tootsuite/mastodon/pull/15108)) -- Fix account processing failing because of large collections ([ThibG](https://github.com/tootsuite/mastodon/pull/15027)) -- Fix resolving an account through its non-canonical form (i.e. alternate domain) ([ThibG](https://github.com/tootsuite/mastodon/pull/15187)) -- Fix slow distinct queries where grouped queries are faster ([Gargron](https://github.com/tootsuite/mastodon/pull/15287)) +- Fix Move handler not being triggered when failing to fetch target account ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15107)) +- Fix downloading remote media files when server returns empty filename ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14867)) +- Fix possible casing inconsistencies in hashtag search ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14906)) +- Fix updating account counters when association is not yet created ([Gargron](https://github.com/mastodon/mastodon/pull/15108)) +- Fix account processing failing because of large collections ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15027)) +- Fix resolving an account through its non-canonical form (i.e. alternate domain) ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15187)) +- Fix slow distinct queries where grouped queries are faster ([Gargron](https://github.com/mastodon/mastodon/pull/15287)) ### Security -- Fix 2FA/sign-in token sessions being valid after password change ([Gargron](https://github.com/tootsuite/mastodon/pull/14802)) -- Fix resolving accounts sometimes creating duplicate records for a given ActivityPub identifier ([ThibG](https://github.com/tootsuite/mastodon/pull/15364)) +- Fix 2FA/sign-in token sessions being valid after password change ([Gargron](https://github.com/mastodon/mastodon/pull/14802)) +- Fix resolving accounts sometimes creating duplicate records for a given ActivityPub identifier ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15364)) ## [3.2.1] - 2020-10-19 ### Added -- Add support for latest HTTP Signatures spec draft ([ThibG](https://github.com/tootsuite/mastodon/pull/14556)) -- Add support for inlined objects in ActivityPub `to`/`cc` ([ThibG](https://github.com/tootsuite/mastodon/pull/14514)) +- Add support for latest HTTP Signatures spec draft ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14556)) +- Add support for inlined objects in ActivityPub `to`/`cc` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14514)) ### Changed -- Change actors to not be served at all without authentication in limited federation mode ([ThibG](https://github.com/tootsuite/mastodon/pull/14800)) +- Change actors to not be served at all without authentication in limited federation mode ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14800)) - Previously, a bare version of an actor was served when not authenticated, i.e. username and public key - Because all actor fetch requests are signed using a separate system actor, that is no longer required ### Fixed -- Fix `tootctl media` commands not recognizing very large IDs ([ThibG](https://github.com/tootsuite/mastodon/pull/14536)) -- Fix crash when failing to load emoji picker in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14525)) -- Fix contrast requirements in thumbnail color extraction ([ThibG](https://github.com/tootsuite/mastodon/pull/14464)) -- Fix audio/video player not using `CDN_HOST` on public pages ([ThibG](https://github.com/tootsuite/mastodon/pull/14486)) -- Fix private boost icon not being used on public pages ([OmmyZhang](https://github.com/tootsuite/mastodon/pull/14471)) -- Fix audio player on Safari in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14485), [ThibG](https://github.com/tootsuite/mastodon/pull/14465)) -- Fix dereferencing remote statuses not using the correct account for signature when receiving a targeted inbox delivery ([ThibG](https://github.com/tootsuite/mastodon/pull/14656)) -- Fix nil error in `tootctl media remove` ([noellabo](https://github.com/tootsuite/mastodon/pull/14657)) -- Fix videos with near-60 fps being rejected ([Gargron](https://github.com/tootsuite/mastodon/pull/14684)) -- Fix reported statuses not being included in warning e-mail ([Gargron](https://github.com/tootsuite/mastodon/pull/14778)) -- Fix `Reject` activities of `Follow` objects not correctly destroying a follow relationship ([ThibG](https://github.com/tootsuite/mastodon/pull/14479)) -- Fix inefficiencies in fan-out-on-write service ([Gargron](https://github.com/tootsuite/mastodon/pull/14682), [noellabo](https://github.com/tootsuite/mastodon/pull/14709)) -- Fix timeout errors when trying to webfinger some IPv6 configurations ([Gargron](https://github.com/tootsuite/mastodon/pull/14919)) -- Fix files served as `application/octet-stream` being rejected without attempting mime type detection ([ThibG](https://github.com/tootsuite/mastodon/pull/14452)) +- Fix `tootctl media` commands not recognizing very large IDs ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14536)) +- Fix crash when failing to load emoji picker in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14525)) +- Fix contrast requirements in thumbnail color extraction ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14464)) +- Fix audio/video player not using `CDN_HOST` on public pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14486)) +- Fix private boost icon not being used on public pages ([OmmyZhang](https://github.com/mastodon/mastodon/pull/14471)) +- Fix audio player on Safari in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14485), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14465)) +- Fix dereferencing remote statuses not using the correct account for signature when receiving a targeted inbox delivery ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14656)) +- Fix nil error in `tootctl media remove` ([noellabo](https://github.com/mastodon/mastodon/pull/14657)) +- Fix videos with near-60 fps being rejected ([Gargron](https://github.com/mastodon/mastodon/pull/14684)) +- Fix reported statuses not being included in warning e-mail ([Gargron](https://github.com/mastodon/mastodon/pull/14778)) +- Fix `Reject` activities of `Follow` objects not correctly destroying a follow relationship ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14479)) +- Fix inefficiencies in fan-out-on-write service ([Gargron](https://github.com/mastodon/mastodon/pull/14682), [noellabo](https://github.com/mastodon/mastodon/pull/14709)) +- Fix timeout errors when trying to webfinger some IPv6 configurations ([Gargron](https://github.com/mastodon/mastodon/pull/14919)) +- Fix files served as `application/octet-stream` being rejected without attempting mime type detection ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14452)) ## [3.2.0] - 2020-07-27 ### Added -- Add `SMTP_SSL` environment variable ([OmmyZhang](https://github.com/tootsuite/mastodon/pull/14309)) -- Add hotkey for toggling content warning input in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13987)) -- **Add e-mail-based sign in challenge for users with disabled 2FA** ([Gargron](https://github.com/tootsuite/mastodon/pull/14013)) +- Add `SMTP_SSL` environment variable ([OmmyZhang](https://github.com/mastodon/mastodon/pull/14309)) +- Add hotkey for toggling content warning input in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13987)) +- **Add e-mail-based sign in challenge for users with disabled 2FA** ([Gargron](https://github.com/mastodon/mastodon/pull/14013)) - If user tries signing in after: - Being inactive for a while - With a previously unknown IP - Without 2FA being enabled - Require to enter a token sent via e-mail before sigining in -- Add `limit` param to RSS feeds ([noellabo](https://github.com/tootsuite/mastodon/pull/13743)) -- Add `visibility` param to share page ([noellabo](https://github.com/tootsuite/mastodon/pull/13023)) -- Add blurhash to link previews ([ThibG](https://github.com/tootsuite/mastodon/pull/13984), [ThibG](https://github.com/tootsuite/mastodon/pull/14143), [ThibG](https://github.com/tootsuite/mastodon/pull/13985), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/14267), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/14278), [ThibG](https://github.com/tootsuite/mastodon/pull/14126), [ThibG](https://github.com/tootsuite/mastodon/pull/14261), [ThibG](https://github.com/tootsuite/mastodon/pull/14260)) +- Add `limit` param to RSS feeds ([noellabo](https://github.com/mastodon/mastodon/pull/13743)) +- Add `visibility` param to share page ([noellabo](https://github.com/mastodon/mastodon/pull/13023)) +- Add blurhash to link previews ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13984), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14143), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13985), [Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/14267), [Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/14278), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14126), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14261), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14260)) - In web UI, toots cannot be marked as sensitive unless there is media attached - However, it's possible to do via API or ActivityPub - Thumnails of link previews of such posts now use blurhash in web UI - The Card entity in REST API has a new `blurhash` attribute -- Add support for `summary` field for media description in ActivityPub ([ThibG](https://github.com/tootsuite/mastodon/pull/13763)) -- Add hints about incomplete remote content to web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14031), [noellabo](https://github.com/tootsuite/mastodon/pull/14195)) -- **Add personal notes for accounts** ([ThibG](https://github.com/tootsuite/mastodon/pull/14148), [Gargron](https://github.com/tootsuite/mastodon/pull/14208), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/14251)) +- Add support for `summary` field for media description in ActivityPub ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13763)) +- Add hints about incomplete remote content to web UI ([Gargron](https://github.com/mastodon/mastodon/pull/14031), [noellabo](https://github.com/mastodon/mastodon/pull/14195)) +- **Add personal notes for accounts** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14148), [Gargron](https://github.com/mastodon/mastodon/pull/14208), [Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/14251)) - To clarify, these are notes only you can see, to help you remember details - Notes can be viewed and edited from profiles in web UI - New REST API: `POST /api/v1/accounts/:id/note` with `comment` param - The Relationship entity in REST API has a new `note` attribute -- Add Helm chart ([dunn](https://github.com/tootsuite/mastodon/pull/14090), [dunn](https://github.com/tootsuite/mastodon/pull/14256), [dunn](https://github.com/tootsuite/mastodon/pull/14245)) -- **Add customizable thumbnails for audio and video attachments** ([Gargron](https://github.com/tootsuite/mastodon/pull/14145), [Gargron](https://github.com/tootsuite/mastodon/pull/14244), [Gargron](https://github.com/tootsuite/mastodon/pull/14273), [Gargron](https://github.com/tootsuite/mastodon/pull/14203), [ThibG](https://github.com/tootsuite/mastodon/pull/14255), [ThibG](https://github.com/tootsuite/mastodon/pull/14306), [noellabo](https://github.com/tootsuite/mastodon/pull/14358), [noellabo](https://github.com/tootsuite/mastodon/pull/14357)) +- Add Helm chart ([dunn](https://github.com/mastodon/mastodon/pull/14090), [dunn](https://github.com/mastodon/mastodon/pull/14256), [dunn](https://github.com/mastodon/mastodon/pull/14245)) +- **Add customizable thumbnails for audio and video attachments** ([Gargron](https://github.com/mastodon/mastodon/pull/14145), [Gargron](https://github.com/mastodon/mastodon/pull/14244), [Gargron](https://github.com/mastodon/mastodon/pull/14273), [Gargron](https://github.com/mastodon/mastodon/pull/14203), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14255), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14306), [noellabo](https://github.com/mastodon/mastodon/pull/14358), [noellabo](https://github.com/mastodon/mastodon/pull/14357)) - Metadata (album, artist, etc) is no longer stripped from audio files - Album art is automatically extracted from audio files - Thumbnail can be manually uploaded for both audio and video attachments @@ -433,1429 +433,1422 @@ All notable changes to this project will be documented in this file. - And on `PUT /api/v1/media/:id` - ActivityPub representation of media attachments represents custom thumbnails with an `icon` attribute - The Media Attachment entity in REST API now has a `preview_remote_url` to its `preview_url`, equivalent to `remote_url` to its `url` -- **Add color extraction for thumbnails** ([Gargron](https://github.com/tootsuite/mastodon/pull/14209), [ThibG](https://github.com/tootsuite/mastodon/pull/14264)) +- **Add color extraction for thumbnails** ([Gargron](https://github.com/mastodon/mastodon/pull/14209), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14264)) - The `meta` attribute on the Media Attachment entity in REST API can now have a `colors` attribute which in turn contains three hex colors: `background`, `foreground`, and `accent` - The background color is chosen from the most dominant color around the edges of the thumbnail - The foreground and accent colors are chosen from the colors that are the most different from the background color using the CIEDE2000 algorithm - The most satured color of the two is designated as the accent color - The one with the highest W3C contrast is designated as the foreground color - If there are not enough colors in the thumbnail, new ones are generated using a monochrome pattern -- Add a visibility indicator to toots in web UI ([noellabo](https://github.com/tootsuite/mastodon/pull/14123), [highemerly](https://github.com/tootsuite/mastodon/pull/14292)) -- Add `tootctl email_domain_blocks` ([tateisu](https://github.com/tootsuite/mastodon/pull/13589), [Gargron](https://github.com/tootsuite/mastodon/pull/14147)) -- Add "Add new domain block" to header of federation page in admin UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/13934)) -- Add ability to keep emoji picker open with ctrl+click in web UI ([bclindner](https://github.com/tootsuite/mastodon/pull/13896), [noellabo](https://github.com/tootsuite/mastodon/pull/14096)) -- Add custom icon for private boosts in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14380)) -- Add support for Create and Update activities that don't inline objects in ActivityPub ([ThibG](https://github.com/tootsuite/mastodon/pull/14359)) -- Add support for Undo activities that don't inline activities in ActivityPub ([ThibG](https://github.com/tootsuite/mastodon/pull/14346)) +- Add a visibility indicator to toots in web UI ([noellabo](https://github.com/mastodon/mastodon/pull/14123), [highemerly](https://github.com/mastodon/mastodon/pull/14292)) +- Add `tootctl email_domain_blocks` ([tateisu](https://github.com/mastodon/mastodon/pull/13589), [Gargron](https://github.com/mastodon/mastodon/pull/14147)) +- Add "Add new domain block" to header of federation page in admin UI ([ariasuni](https://github.com/mastodon/mastodon/pull/13934)) +- Add ability to keep emoji picker open with ctrl+click in web UI ([bclindner](https://github.com/mastodon/mastodon/pull/13896), [noellabo](https://github.com/mastodon/mastodon/pull/14096)) +- Add custom icon for private boosts in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14380)) +- Add support for Create and Update activities that don't inline objects in ActivityPub ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14359)) +- Add support for Undo activities that don't inline activities in ActivityPub ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14346)) ### Changed -- Change `.env.production.sample` to be leaner and cleaner ([Gargron](https://github.com/tootsuite/mastodon/pull/14206)) +- Change `.env.production.sample` to be leaner and cleaner ([Gargron](https://github.com/mastodon/mastodon/pull/14206)) - It was overloaded as de-facto documentation and getting quite crowded - Defer to the actual documentation while still giving a minimal example -- Change `tootctl search deploy` to work faster and display progress ([Gargron](https://github.com/tootsuite/mastodon/pull/14300)) -- Change User-Agent of link preview fetching service to include "Bot" ([Gargron](https://github.com/tootsuite/mastodon/pull/14248)) +- Change `tootctl search deploy` to work faster and display progress ([Gargron](https://github.com/mastodon/mastodon/pull/14300)) +- Change User-Agent of link preview fetching service to include "Bot" ([Gargron](https://github.com/mastodon/mastodon/pull/14248)) - Some websites may not render OpenGraph tags into HTML if that's not the case -- Change behaviour to carry blocks over when someone migrates their followers ([ThibG](https://github.com/tootsuite/mastodon/pull/14144)) -- Change volume control and download buttons in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14122)) -- **Change design of audio players in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/14095), [ThibG](https://github.com/tootsuite/mastodon/pull/14281), [Gargron](https://github.com/tootsuite/mastodon/pull/14282), [ThibG](https://github.com/tootsuite/mastodon/pull/14118), [Gargron](https://github.com/tootsuite/mastodon/pull/14199), [ThibG](https://github.com/tootsuite/mastodon/pull/14338)) -- Change reply filter to never filter own toots in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14128)) -- Change boost button to no longer serve as visibility indicator in web UI ([noellabo](https://github.com/tootsuite/mastodon/pull/14132), [ThibG](https://github.com/tootsuite/mastodon/pull/14373)) -- Change contrast of flash messages ([cchoi12](https://github.com/tootsuite/mastodon/pull/13892)) -- Change wording from "Hide media" to "Hide image/images" in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/13834)) -- Change appearence of settings pages to be more consistent ([ariasuni](https://github.com/tootsuite/mastodon/pull/13938)) -- Change "Add media" tooltip to not include long list of formats in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/13954)) -- Change how badly contrasting emoji are rendered in web UI ([leo60228](https://github.com/tootsuite/mastodon/pull/13773), [ThibG](https://github.com/tootsuite/mastodon/pull/13772), [mfmfuyu](https://github.com/tootsuite/mastodon/pull/14020), [ThibG](https://github.com/tootsuite/mastodon/pull/14015)) -- Change structure of unavailable content section on about page ([ariasuni](https://github.com/tootsuite/mastodon/pull/13930)) -- Change behaviour to accept ActivityPub activities relayed through group actor ([noellabo](https://github.com/tootsuite/mastodon/pull/14279)) -- Change amount of processing retries for ActivityPub activities ([noellabo](https://github.com/tootsuite/mastodon/pull/14355)) +- Change behaviour to carry blocks over when someone migrates their followers ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14144)) +- Change volume control and download buttons in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/14122)) +- **Change design of audio players in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/14095), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14281), [Gargron](https://github.com/mastodon/mastodon/pull/14282), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14118), [Gargron](https://github.com/mastodon/mastodon/pull/14199), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14338)) +- Change reply filter to never filter own toots in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14128)) +- Change boost button to no longer serve as visibility indicator in web UI ([noellabo](https://github.com/mastodon/mastodon/pull/14132), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14373)) +- Change contrast of flash messages ([cchoi12](https://github.com/mastodon/mastodon/pull/13892)) +- Change wording from "Hide media" to "Hide image/images" in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/13834)) +- Change appearence of settings pages to be more consistent ([ariasuni](https://github.com/mastodon/mastodon/pull/13938)) +- Change "Add media" tooltip to not include long list of formats in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/13954)) +- Change how badly contrasting emoji are rendered in web UI ([leo60228](https://github.com/mastodon/mastodon/pull/13773), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13772), [mfmfuyu](https://github.com/mastodon/mastodon/pull/14020), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14015)) +- Change structure of unavailable content section on about page ([ariasuni](https://github.com/mastodon/mastodon/pull/13930)) +- Change behaviour to accept ActivityPub activities relayed through group actor ([noellabo](https://github.com/mastodon/mastodon/pull/14279)) +- Change amount of processing retries for ActivityPub activities ([noellabo](https://github.com/mastodon/mastodon/pull/14355)) ### Removed -- Remove the terms "blacklist" and "whitelist" from UX ([Gargron](https://github.com/tootsuite/mastodon/pull/14149), [mayaeh](https://github.com/tootsuite/mastodon/pull/14192)) +- Remove the terms "blacklist" and "whitelist" from UX ([Gargron](https://github.com/mastodon/mastodon/pull/14149), [mayaeh](https://github.com/mastodon/mastodon/pull/14192)) - Environment variables changed (old versions continue to work): - `WHITELIST_MODE` → `LIMITED_FEDERATION_MODE` - `EMAIL_DOMAIN_BLACKLIST` → `EMAIL_DOMAIN_DENYLIST` - `EMAIL_DOMAIN_WHITELIST` → `EMAIL_DOMAIN_ALLOWLIST` - CLI option changed: - `tootctl domains purge --whitelist-mode` → `tootctl domains purge --limited-federation-mode` -- Remove some unnecessary database indices ([lfuelling](https://github.com/tootsuite/mastodon/pull/13695), [noellabo](https://github.com/tootsuite/mastodon/pull/14259)) -- Remove unnecessary Node.js version upper bound ([ykzts](https://github.com/tootsuite/mastodon/pull/14139)) +- Remove some unnecessary database indices ([lfuelling](https://github.com/mastodon/mastodon/pull/13695), [noellabo](https://github.com/mastodon/mastodon/pull/14259)) +- Remove unnecessary Node.js version upper bound ([ykzts](https://github.com/mastodon/mastodon/pull/14139)) ### Fixed -- Fix `following` param not working when exact match is found in account search ([noellabo](https://github.com/tootsuite/mastodon/pull/14394)) -- Fix sometimes occuring duplicate mention notifications ([noellabo](https://github.com/tootsuite/mastodon/pull/14378)) -- Fix RSS feeds not being cachable ([ThibG](https://github.com/tootsuite/mastodon/pull/14368)) -- Fix lack of locking around processing of Announce activities in ActivityPub ([noellabo](https://github.com/tootsuite/mastodon/pull/14365)) -- Fix boosted toots from blocked account not being retroactively removed from TL ([ThibG](https://github.com/tootsuite/mastodon/pull/14339)) -- Fix large shortened numbers (like 1.2K) using incorrect pluralization ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/14061)) -- Fix streaming server trying to use empty password to connect to Redis when `REDIS_PASSWORD` is given but blank ([ThibG](https://github.com/tootsuite/mastodon/pull/14135)) -- Fix being unable to unboost posts when blocked by their author ([ThibG](https://github.com/tootsuite/mastodon/pull/14308)) -- Fix account domain block not properly unfollowing accounts from domain ([Gargron](https://github.com/tootsuite/mastodon/pull/14304)) -- Fix removing a domain allow wiping known accounts in open federation mode ([ThibG](https://github.com/tootsuite/mastodon/pull/14298)) -- Fix blocks and mutes pagination in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14275)) -- Fix new posts pushing down origin of opened dropdown in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14271), [ThibG](https://github.com/tootsuite/mastodon/pull/14348)) -- Fix timeline markers not being saved sometimes ([ThibG](https://github.com/tootsuite/mastodon/pull/13887), [ThibG](https://github.com/tootsuite/mastodon/pull/13889), [ThibG](https://github.com/tootsuite/mastodon/pull/14155)) -- Fix CSV uploads being rejected ([noellabo](https://github.com/tootsuite/mastodon/pull/13835)) -- Fix incompatibility with ElasticSearch 7.x ([noellabo](https://github.com/tootsuite/mastodon/pull/13828)) -- Fix being able to search posts where you're in the target audience but not actively mentioned ([noellabo](https://github.com/tootsuite/mastodon/pull/13829)) -- Fix non-local posts appearing on local-only hashtag timelines in web UI ([noellabo](https://github.com/tootsuite/mastodon/pull/13827)) -- Fix `tootctl media remove-orphans` choking on unknown files in storage ([Gargron](https://github.com/tootsuite/mastodon/pull/13765)) -- Fix `tootctl upgrade storage-schema` misbehaving ([Gargron](https://github.com/tootsuite/mastodon/pull/13761), [angristan](https://github.com/tootsuite/mastodon/pull/13768)) +- Fix `following` param not working when exact match is found in account search ([noellabo](https://github.com/mastodon/mastodon/pull/14394)) +- Fix sometimes occuring duplicate mention notifications ([noellabo](https://github.com/mastodon/mastodon/pull/14378)) +- Fix RSS feeds not being cachable ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14368)) +- Fix lack of locking around processing of Announce activities in ActivityPub ([noellabo](https://github.com/mastodon/mastodon/pull/14365)) +- Fix boosted toots from blocked account not being retroactively removed from TL ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14339)) +- Fix large shortened numbers (like 1.2K) using incorrect pluralization ([Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/14061)) +- Fix streaming server trying to use empty password to connect to Redis when `REDIS_PASSWORD` is given but blank ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14135)) +- Fix being unable to unboost posts when blocked by their author ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14308)) +- Fix account domain block not properly unfollowing accounts from domain ([Gargron](https://github.com/mastodon/mastodon/pull/14304)) +- Fix removing a domain allow wiping known accounts in open federation mode ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14298)) +- Fix blocks and mutes pagination in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14275)) +- Fix new posts pushing down origin of opened dropdown in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14271), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14348)) +- Fix timeline markers not being saved sometimes ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13887), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13889), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14155)) +- Fix CSV uploads being rejected ([noellabo](https://github.com/mastodon/mastodon/pull/13835)) +- Fix incompatibility with ElasticSearch 7.x ([noellabo](https://github.com/mastodon/mastodon/pull/13828)) +- Fix being able to search posts where you're in the target audience but not actively mentioned ([noellabo](https://github.com/mastodon/mastodon/pull/13829)) +- Fix non-local posts appearing on local-only hashtag timelines in web UI ([noellabo](https://github.com/mastodon/mastodon/pull/13827)) +- Fix `tootctl media remove-orphans` choking on unknown files in storage ([Gargron](https://github.com/mastodon/mastodon/pull/13765)) +- Fix `tootctl upgrade storage-schema` misbehaving ([Gargron](https://github.com/mastodon/mastodon/pull/13761), [angristan](https://github.com/mastodon/mastodon/pull/13768)) - Fix it marking records as upgraded even though no files were moved - Fix it not working with S3 storage - Fix it not working with custom emojis -- Fix GIF reader raising incorrect exceptions ([ThibG](https://github.com/tootsuite/mastodon/pull/13760)) -- Fix hashtag search performing account search as well ([ThibG](https://github.com/tootsuite/mastodon/pull/13758)) -- Fix Webfinger returning wrong status code on malformed or missing param ([ThibG](https://github.com/tootsuite/mastodon/pull/13759)) -- Fix `rake mastodon:setup` error when some environment variables are set ([ThibG](https://github.com/tootsuite/mastodon/pull/13928)) -- Fix admin page crashing when trying to block an invalid domain name in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13884)) -- Fix unsent toot confirmation dialog not popping up in single column mode in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13888)) -- Fix performance of follow import ([noellabo](https://github.com/tootsuite/mastodon/pull/13836)) +- Fix GIF reader raising incorrect exceptions ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13760)) +- Fix hashtag search performing account search as well ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13758)) +- Fix Webfinger returning wrong status code on malformed or missing param ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13759)) +- Fix `rake mastodon:setup` error when some environment variables are set ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13928)) +- Fix admin page crashing when trying to block an invalid domain name in admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13884)) +- Fix unsent toot confirmation dialog not popping up in single column mode in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13888)) +- Fix performance of follow import ([noellabo](https://github.com/mastodon/mastodon/pull/13836)) - Reduce timeout of Webfinger requests to that of other requests - Use circuit breakers to stop hitting unresponsive servers - Avoid hitting servers that are already known to be generally unavailable -- Fix filters ignoring media descriptions ([BenLubar](https://github.com/tootsuite/mastodon/pull/13837)) -- Fix some actions on custom emojis leading to cryptic errors in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13951)) -- Fix ActivityPub serialization of replies when some of them are URIs ([ThibG](https://github.com/tootsuite/mastodon/pull/13957)) -- Fix `rake mastodon:setup` choking on environment variables containing `%` ([ThibG](https://github.com/tootsuite/mastodon/pull/13940)) -- Fix account redirect confirmation message talking about moved followers ([ThibG](https://github.com/tootsuite/mastodon/pull/13950)) -- Fix avatars having the wrong size on public detailed status pages ([ThibG](https://github.com/tootsuite/mastodon/pull/14140)) -- Fix various issues around OpenGraph representation of media ([Gargron](https://github.com/tootsuite/mastodon/pull/14133)) +- Fix filters ignoring media descriptions ([BenLubar](https://github.com/mastodon/mastodon/pull/13837)) +- Fix some actions on custom emojis leading to cryptic errors in admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13951)) +- Fix ActivityPub serialization of replies when some of them are URIs ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13957)) +- Fix `rake mastodon:setup` choking on environment variables containing `%` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13940)) +- Fix account redirect confirmation message talking about moved followers ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13950)) +- Fix avatars having the wrong size on public detailed status pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14140)) +- Fix various issues around OpenGraph representation of media ([Gargron](https://github.com/mastodon/mastodon/pull/14133)) - Pages containing audio no longer say "Attached: 1 image" in description - Audio attachments now represented as OpenGraph `og:audio` - The `twitter:player` page now uses Mastodon's proper audio/video player - Audio/video buffered bars now display correctly in audio/video player - Volume and progress bars now respond to movement/move smoother -- Fix audio/video/images/cards not reacting to window resizes in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14130)) -- Fix very wide media attachments resulting in too thin a thumbnail in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14127)) -- Fix crash when merging posts into home feed after following someone ([ThibG](https://github.com/tootsuite/mastodon/pull/14129)) -- Fix unique username constraint for local users not being enforced in database ([ThibG](https://github.com/tootsuite/mastodon/pull/14099)) -- Fix unnecessary gap under video modal in web UI ([mfmfuyu](https://github.com/tootsuite/mastodon/pull/14098)) -- Fix 2FA and sign in token pages not respecting user locale ([mfmfuyu](https://github.com/tootsuite/mastodon/pull/14087)) -- Fix unapproved users being able to view profiles when in limited-federation mode *and* requiring approval for sign-ups ([ThibG](https://github.com/tootsuite/mastodon/pull/14093)) -- Fix initial audio volume not corresponding to what's displayed in audio player in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14057)) -- Fix timelines sometimes jumping when closing modals in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14019)) -- Fix memory usage of downloading remote files ([Gargron](https://github.com/tootsuite/mastodon/pull/14184), [Gargron](https://github.com/tootsuite/mastodon/pull/14181), [noellabo](https://github.com/tootsuite/mastodon/pull/14356)) +- Fix audio/video/images/cards not reacting to window resizes in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/14130)) +- Fix very wide media attachments resulting in too thin a thumbnail in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14127)) +- Fix crash when merging posts into home feed after following someone ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14129)) +- Fix unique username constraint for local users not being enforced in database ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14099)) +- Fix unnecessary gap under video modal in web UI ([mfmfuyu](https://github.com/mastodon/mastodon/pull/14098)) +- Fix 2FA and sign in token pages not respecting user locale ([mfmfuyu](https://github.com/mastodon/mastodon/pull/14087)) +- Fix unapproved users being able to view profiles when in limited-federation mode *and* requiring approval for sign-ups ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14093)) +- Fix initial audio volume not corresponding to what's displayed in audio player in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14057)) +- Fix timelines sometimes jumping when closing modals in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14019)) +- Fix memory usage of downloading remote files ([Gargron](https://github.com/mastodon/mastodon/pull/14184), [Gargron](https://github.com/mastodon/mastodon/pull/14181), [noellabo](https://github.com/mastodon/mastodon/pull/14356)) - Don't read entire file (up to 40 MB) into memory - Read and write it to temp file in small chunks -- Fix inconsistent account header padding in web UI ([trwnh](https://github.com/tootsuite/mastodon/pull/14179)) -- Fix Thai being skipped from language detection ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/13989)) +- Fix inconsistent account header padding in web UI ([trwnh](https://github.com/mastodon/mastodon/pull/14179)) +- Fix Thai being skipped from language detection ([Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/13989)) - Since Thai has its own alphabet, it can be detected more reliably -- Fix broken hashtag column options styling in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14247)) -- Fix pointer cursor being shown on toots that are not clickable in web UI ([arielrodrigues](https://github.com/tootsuite/mastodon/pull/14185)) -- Fix lock icon not being shown when locking account in profile settings ([ThibG](https://github.com/tootsuite/mastodon/pull/14190)) -- Fix domain blocks doing work the wrong way around ([ThibG](https://github.com/tootsuite/mastodon/pull/13424)) +- Fix broken hashtag column options styling in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14247)) +- Fix pointer cursor being shown on toots that are not clickable in web UI ([arielrodrigues](https://github.com/mastodon/mastodon/pull/14185)) +- Fix lock icon not being shown when locking account in profile settings ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14190)) +- Fix domain blocks doing work the wrong way around ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13424)) - Instead of suspending accounts one by one, mark all as suspended first (quick) - Only then proceed to start removing their data (slow) - Clear out media attachments in a separate worker (slow) -## [v3.1.5] - 2020-07-07 +## [3.1.5] - 2020-07-07 ### Security -- Fix media attachment enumeration ([ThibG](https://github.com/tootsuite/mastodon/pull/14254)) -- Change rate limits for various paths ([Gargron](https://github.com/tootsuite/mastodon/pull/14253)) -- Fix other sessions not being logged out on password change ([Gargron](https://github.com/tootsuite/mastodon/pull/14252)) +- Fix media attachment enumeration ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14254)) +- Change rate limits for various paths ([Gargron](https://github.com/mastodon/mastodon/pull/14253)) +- Fix other sessions not being logged out on password change ([Gargron](https://github.com/mastodon/mastodon/pull/14252)) -## [v3.1.5] - 2020-07-07 -### Security - -- Fix media attachment enumeration ([ThibG](https://github.com/tootsuite/mastodon/pull/14254)) -- Change rate limits for various paths ([Gargron](https://github.com/tootsuite/mastodon/pull/14253)) -- Fix other sessions not being logged out on password change ([Gargron](https://github.com/tootsuite/mastodon/pull/14252)) - -## [v3.1.4] - 2020-05-14 +## [3.1.4] - 2020-05-14 ### Added -- Add `vi` to available locales ([taicv](https://github.com/tootsuite/mastodon/pull/13542)) -- Add ability to remove identity proofs from account ([Gargron](https://github.com/tootsuite/mastodon/pull/13682)) -- Add ability to exclude local content from federated timeline ([noellabo](https://github.com/tootsuite/mastodon/pull/13504), [noellabo](https://github.com/tootsuite/mastodon/pull/13745)) +- Add `vi` to available locales ([taicv](https://github.com/mastodon/mastodon/pull/13542)) +- Add ability to remove identity proofs from account ([Gargron](https://github.com/mastodon/mastodon/pull/13682)) +- Add ability to exclude local content from federated timeline ([noellabo](https://github.com/mastodon/mastodon/pull/13504), [noellabo](https://github.com/mastodon/mastodon/pull/13745)) - Add `remote` param to `GET /api/v1/timelines/public` REST API - Add `public/remote` / `public:remote` variants to streaming API - "Remote only" option in federated timeline column settings in web UI -- Add ability to exclude remote content from hashtag timelines in web UI ([noellabo](https://github.com/tootsuite/mastodon/pull/13502)) +- Add ability to exclude remote content from hashtag timelines in web UI ([noellabo](https://github.com/mastodon/mastodon/pull/13502)) - No changes to REST API - "Local only" option in hashtag column settings in web UI -- Add Capistrano tasks that reload the services after deploying ([berkes](https://github.com/tootsuite/mastodon/pull/12642)) -- Add `invites_enabled` attribute to `GET /api/v1/instance` in REST API ([ThibG](https://github.com/tootsuite/mastodon/pull/13501)) -- Add `tootctl emoji export` command ([lfuelling](https://github.com/tootsuite/mastodon/pull/13534)) -- Add separate cache directory for non-local uploads ([Gargron](https://github.com/tootsuite/mastodon/pull/12821), [Hanage999](https://github.com/tootsuite/mastodon/pull/13593), [mayaeh](https://github.com/tootsuite/mastodon/pull/13551)) +- Add Capistrano tasks that reload the services after deploying ([berkes](https://github.com/mastodon/mastodon/pull/12642)) +- Add `invites_enabled` attribute to `GET /api/v1/instance` in REST API ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13501)) +- Add `tootctl emoji export` command ([lfuelling](https://github.com/mastodon/mastodon/pull/13534)) +- Add separate cache directory for non-local uploads ([Gargron](https://github.com/mastodon/mastodon/pull/12821), [Hanage999](https://github.com/mastodon/mastodon/pull/13593), [mayaeh](https://github.com/mastodon/mastodon/pull/13551)) - Add `tootctl upgrade storage-schema` command to move old non-local uploads to the cache directory -- Add buttons to delete header and avatar from profile settings ([sternenseemann](https://github.com/tootsuite/mastodon/pull/13234)) -- Add emoji graphics and shortcodes from Twemoji 12.1.5 ([DeeUnderscore](https://github.com/tootsuite/mastodon/pull/13021)) +- Add buttons to delete header and avatar from profile settings ([sternenseemann](https://github.com/mastodon/mastodon/pull/13234)) +- Add emoji graphics and shortcodes from Twemoji 12.1.5 ([DeeUnderscore](https://github.com/mastodon/mastodon/pull/13021)) ### Changed -- Change error message when trying to migrate to an account that does not have current account set as an alias to be more clear ([TheEvilSkeleton](https://github.com/tootsuite/mastodon/pull/13746)) -- Change delivery failure tracking to work with hostnames instead of URLs ([Gargron](https://github.com/tootsuite/mastodon/pull/13437), [noellabo](https://github.com/tootsuite/mastodon/pull/13481), [noellabo](https://github.com/tootsuite/mastodon/pull/13482), [noellabo](https://github.com/tootsuite/mastodon/pull/13535)) -- Change Content-Security-Policy to not need unsafe-inline style-src ([ThibG](https://github.com/tootsuite/mastodon/pull/13679), [ThibG](https://github.com/tootsuite/mastodon/pull/13692), [ThibG](https://github.com/tootsuite/mastodon/pull/13576), [ThibG](https://github.com/tootsuite/mastodon/pull/13575), [ThibG](https://github.com/tootsuite/mastodon/pull/13438)) -- Change how RSS items are titled and formatted ([ThibG](https://github.com/tootsuite/mastodon/pull/13592), [ykzts](https://github.com/tootsuite/mastodon/pull/13591)) +- Change error message when trying to migrate to an account that does not have current account set as an alias to be more clear ([TheEvilSkeleton](https://github.com/mastodon/mastodon/pull/13746)) +- Change delivery failure tracking to work with hostnames instead of URLs ([Gargron](https://github.com/mastodon/mastodon/pull/13437), [noellabo](https://github.com/mastodon/mastodon/pull/13481), [noellabo](https://github.com/mastodon/mastodon/pull/13482), [noellabo](https://github.com/mastodon/mastodon/pull/13535)) +- Change Content-Security-Policy to not need unsafe-inline style-src ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13679), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13692), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13576), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13575), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13438)) +- Change how RSS items are titled and formatted ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13592), [ykzts](https://github.com/mastodon/mastodon/pull/13591)) ### Fixed -- Fix dropdown of muted and followed accounts offering option to hide boosts in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13748)) -- Fix "You are already signed in" alert being shown at wrong times ([ThibG](https://github.com/tootsuite/mastodon/pull/13547)) -- Fix retrying of failed-to-download media files not actually working ([noellabo](https://github.com/tootsuite/mastodon/pull/13741)) -- Fix first poll option not being focused when adding a poll in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13740)) -- Fix `sr` locale being selected over `sr-Latn` ([ThibG](https://github.com/tootsuite/mastodon/pull/13693)) -- Fix error within error when limiting backtrace to 3 lines ([Gargron](https://github.com/tootsuite/mastodon/pull/13120)) -- Fix `tootctl media remove-orphans` crashing on "Import" files ([ThibG](https://github.com/tootsuite/mastodon/pull/13685)) -- Fix regression in `tootctl media remove-orphans` ([Gargron](https://github.com/tootsuite/mastodon/pull/13405)) -- Fix old unique jobs digests not having been cleaned up ([Gargron](https://github.com/tootsuite/mastodon/pull/13683)) -- Fix own following/followers not showing muted users ([ThibG](https://github.com/tootsuite/mastodon/pull/13614)) -- Fix list of followed people ignoring sorting on Follows & Followers page ([taras2358](https://github.com/tootsuite/mastodon/pull/13676)) -- Fix wrong pgHero Content-Security-Policy when `CDN_HOST` is set ([ThibG](https://github.com/tootsuite/mastodon/pull/13595)) -- Fix needlessly deduplicating usernames on collisions with remote accounts when signing-up through SAML/CAS ([kaiyou](https://github.com/tootsuite/mastodon/pull/13581)) -- Fix page incorrectly scrolling when bringing up dropdown menus in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13574)) -- Fix messed up z-index when NoScript blocks media/previews in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13449)) -- Fix "See what's happening" page showing public instead of local timeline for logged-in users ([ThibG](https://github.com/tootsuite/mastodon/pull/13499)) -- Fix not being able to resolve public resources in development environment ([Gargron](https://github.com/tootsuite/mastodon/pull/13505)) -- Fix uninformative error message when uploading unsupported image files ([ThibG](https://github.com/tootsuite/mastodon/pull/13540)) -- Fix expanded video player issues in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13541), [eai04191](https://github.com/tootsuite/mastodon/pull/13533)) -- Fix and refactor keyboard navigation in dropdown menus in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13528)) -- Fix uploaded image orientation being messed up in some browsers in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13493)) -- Fix actions log crash when displaying updates of deleted announcements in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13489)) -- Fix search not working due to proxy settings when using hidden services ([Gargron](https://github.com/tootsuite/mastodon/pull/13488)) -- Fix poll refresh button not being debounced in web UI ([rasjonell](https://github.com/tootsuite/mastodon/pull/13485), [ThibG](https://github.com/tootsuite/mastodon/pull/13490)) -- Fix confusing error when failing to add an alias to an unknown account ([ThibG](https://github.com/tootsuite/mastodon/pull/13480)) -- Fix "Email changed" notification sometimes having wrong e-mail ([ThibG](https://github.com/tootsuite/mastodon/pull/13475)) -- Fix varioues issues on the account aliases page ([ThibG](https://github.com/tootsuite/mastodon/pull/13452)) -- Fix API footer link in web UI ([bubblineyuri](https://github.com/tootsuite/mastodon/pull/13441)) -- Fix pagination of following, followers, follow requests, blocks and mutes lists in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13445)) -- Fix styling of polls in JS-less fallback on public pages ([ThibG](https://github.com/tootsuite/mastodon/pull/13436)) -- Fix trying to delete already deleted file when post-processing ([Gargron](https://github.com/tootsuite/mastodon/pull/13406)) +- Fix dropdown of muted and followed accounts offering option to hide boosts in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13748)) +- Fix "You are already signed in" alert being shown at wrong times ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13547)) +- Fix retrying of failed-to-download media files not actually working ([noellabo](https://github.com/mastodon/mastodon/pull/13741)) +- Fix first poll option not being focused when adding a poll in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13740)) +- Fix `sr` locale being selected over `sr-Latn` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13693)) +- Fix error within error when limiting backtrace to 3 lines ([Gargron](https://github.com/mastodon/mastodon/pull/13120)) +- Fix `tootctl media remove-orphans` crashing on "Import" files ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13685)) +- Fix regression in `tootctl media remove-orphans` ([Gargron](https://github.com/mastodon/mastodon/pull/13405)) +- Fix old unique jobs digests not having been cleaned up ([Gargron](https://github.com/mastodon/mastodon/pull/13683)) +- Fix own following/followers not showing muted users ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13614)) +- Fix list of followed people ignoring sorting on Follows & Followers page ([taras2358](https://github.com/mastodon/mastodon/pull/13676)) +- Fix wrong pgHero Content-Security-Policy when `CDN_HOST` is set ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13595)) +- Fix needlessly deduplicating usernames on collisions with remote accounts when signing-up through SAML/CAS ([kaiyou](https://github.com/mastodon/mastodon/pull/13581)) +- Fix page incorrectly scrolling when bringing up dropdown menus in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13574)) +- Fix messed up z-index when NoScript blocks media/previews in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13449)) +- Fix "See what's happening" page showing public instead of local timeline for logged-in users ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13499)) +- Fix not being able to resolve public resources in development environment ([Gargron](https://github.com/mastodon/mastodon/pull/13505)) +- Fix uninformative error message when uploading unsupported image files ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13540)) +- Fix expanded video player issues in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13541), [eai04191](https://github.com/mastodon/mastodon/pull/13533)) +- Fix and refactor keyboard navigation in dropdown menus in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13528)) +- Fix uploaded image orientation being messed up in some browsers in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13493)) +- Fix actions log crash when displaying updates of deleted announcements in admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13489)) +- Fix search not working due to proxy settings when using hidden services ([Gargron](https://github.com/mastodon/mastodon/pull/13488)) +- Fix poll refresh button not being debounced in web UI ([rasjonell](https://github.com/mastodon/mastodon/pull/13485), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13490)) +- Fix confusing error when failing to add an alias to an unknown account ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13480)) +- Fix "Email changed" notification sometimes having wrong e-mail ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13475)) +- Fix varioues issues on the account aliases page ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13452)) +- Fix API footer link in web UI ([bubblineyuri](https://github.com/mastodon/mastodon/pull/13441)) +- Fix pagination of following, followers, follow requests, blocks and mutes lists in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13445)) +- Fix styling of polls in JS-less fallback on public pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13436)) +- Fix trying to delete already deleted file when post-processing ([Gargron](https://github.com/mastodon/mastodon/pull/13406)) ### Security -- Fix Doorkeeper vulnerability that exposed app secret to users who authorized the app and reset secret of the web UI that could have been exposed ([dependabot-preview[bot]](https://github.com/tootsuite/mastodon/pull/13613), [Gargron](https://github.com/tootsuite/mastodon/pull/13688)) +- Fix Doorkeeper vulnerability that exposed app secret to users who authorized the app and reset secret of the web UI that could have been exposed ([dependabot-preview[bot]](https://github.com/mastodon/mastodon/pull/13613), [Gargron](https://github.com/mastodon/mastodon/pull/13688)) - For apps that self-register on behalf of every individual user (such as most mobile apps), this is a non-issue - The issue only affects developers of apps who are shared between multiple users, such as server-side apps like cross-posters -## [v3.1.3] - 2020-04-05 +## [3.1.3] - 2020-04-05 ### Added -- Add ability to filter audit log in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/13381)) -- Add titles to warning presets in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/13252)) -- Add option to include resolved DNS records when blacklisting e-mail domains in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/13254)) -- Add ability to delete files uploaded for settings in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13192)) -- Add sorting by username, creation and last activity in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13076)) -- Add explanation as to why unlocked accounts may have follow requests in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13385)) -- Add link to bookmarks to dropdown in web UI ([mayaeh](https://github.com/tootsuite/mastodon/pull/13273)) -- Add support for links to statuses in announcements to be opened in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13212), [ThibG](https://github.com/tootsuite/mastodon/pull/13250)) -- Add tooltips to audio/video player buttons in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/13203)) -- Add submit button to the top of preferences pages ([guigeekz](https://github.com/tootsuite/mastodon/pull/13068)) -- Add specific rate limits for posting, following and reporting ([Gargron](https://github.com/tootsuite/mastodon/pull/13172), [Gargron](https://github.com/tootsuite/mastodon/pull/13390)) +- Add ability to filter audit log in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/13381)) +- Add titles to warning presets in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/13252)) +- Add option to include resolved DNS records when blacklisting e-mail domains in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/13254)) +- Add ability to delete files uploaded for settings in admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13192)) +- Add sorting by username, creation and last activity in admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13076)) +- Add explanation as to why unlocked accounts may have follow requests in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13385)) +- Add link to bookmarks to dropdown in web UI ([mayaeh](https://github.com/mastodon/mastodon/pull/13273)) +- Add support for links to statuses in announcements to be opened in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13212), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13250)) +- Add tooltips to audio/video player buttons in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/13203)) +- Add submit button to the top of preferences pages ([guigeekz](https://github.com/mastodon/mastodon/pull/13068)) +- Add specific rate limits for posting, following and reporting ([Gargron](https://github.com/mastodon/mastodon/pull/13172), [Gargron](https://github.com/mastodon/mastodon/pull/13390)) - 300 posts every 3 hours - 400 follows or follow requests every 24 hours - 400 reports every 24 hours -- Add federation support for the "hide network" preference ([ThibG](https://github.com/tootsuite/mastodon/pull/11673)) -- Add `--skip-media-remove` option to `tootctl statuses remove` ([tateisu](https://github.com/tootsuite/mastodon/pull/13080)) +- Add federation support for the "hide network" preference ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11673)) +- Add `--skip-media-remove` option to `tootctl statuses remove` ([tateisu](https://github.com/mastodon/mastodon/pull/13080)) ### Changed -- **Change design of polls in web UI** ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/13257), [ThibG](https://github.com/tootsuite/mastodon/pull/13313)) -- Change status click areas in web UI to be bigger ([ariasuni](https://github.com/tootsuite/mastodon/pull/13327)) -- **Change `tootctl media remove-orphans` to work for all classes** ([Gargron](https://github.com/tootsuite/mastodon/pull/13316)) -- **Change local media attachments to perform heavy processing asynchronously** ([Gargron](https://github.com/tootsuite/mastodon/pull/13210)) -- Change video uploads to always be converted to H264/MP4 ([Gargron](https://github.com/tootsuite/mastodon/pull/13220), [ThibG](https://github.com/tootsuite/mastodon/pull/13239), [ThibG](https://github.com/tootsuite/mastodon/pull/13242)) -- Change video uploads to enforce certain limits ([Gargron](https://github.com/tootsuite/mastodon/pull/13218)) +- **Change design of polls in web UI** ([Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/13257), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13313)) +- Change status click areas in web UI to be bigger ([ariasuni](https://github.com/mastodon/mastodon/pull/13327)) +- **Change `tootctl media remove-orphans` to work for all classes** ([Gargron](https://github.com/mastodon/mastodon/pull/13316)) +- **Change local media attachments to perform heavy processing asynchronously** ([Gargron](https://github.com/mastodon/mastodon/pull/13210)) +- Change video uploads to always be converted to H264/MP4 ([Gargron](https://github.com/mastodon/mastodon/pull/13220), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13239), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13242)) +- Change video uploads to enforce certain limits ([Gargron](https://github.com/mastodon/mastodon/pull/13218)) - Dimensions smaller than 1920x1200px - Frame rate at most 60fps -- Change the tooltip "Toggle visibility" to "Hide media" in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/13199)) -- Change description of privacy levels to be more intuitive in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/13197)) -- Change GIF label to be displayed even when autoplay is enabled in web UI ([koyuawsmbrtn](https://github.com/tootsuite/mastodon/pull/13209)) -- Change the string "Hide everything from …" to "Block domain …" in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13178), [mayaeh](https://github.com/tootsuite/mastodon/pull/13221)) -- Change wording of media display preferences to be more intuitive ([ariasuni](https://github.com/tootsuite/mastodon/pull/13198)) +- Change the tooltip "Toggle visibility" to "Hide media" in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/13199)) +- Change description of privacy levels to be more intuitive in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/13197)) +- Change GIF label to be displayed even when autoplay is enabled in web UI ([koyuawsmbrtn](https://github.com/mastodon/mastodon/pull/13209)) +- Change the string "Hide everything from …" to "Block domain …" in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13178), [mayaeh](https://github.com/mastodon/mastodon/pull/13221)) +- Change wording of media display preferences to be more intuitive ([ariasuni](https://github.com/mastodon/mastodon/pull/13198)) ### Deprecated -- `POST /api/v1/media` → `POST /api/v2/media` ([Gargron](https://github.com/tootsuite/mastodon/pull/13210)) +- `POST /api/v1/media` → `POST /api/v2/media` ([Gargron](https://github.com/mastodon/mastodon/pull/13210)) ### Fixed -- Fix `tootctl media remove-orphans` ignoring `PAPERCLIP_ROOT_PATH` ([Gargron](https://github.com/tootsuite/mastodon/pull/13375)) -- Fix returning results when searching for URL with non-zero offset ([Gargron](https://github.com/tootsuite/mastodon/pull/13377)) -- Fix pinning a column in web UI sometimes redirecting out of web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/13376)) -- Fix background jobs not using locks like they are supposed to ([Gargron](https://github.com/tootsuite/mastodon/pull/13361)) -- Fix content warning being unnecessarily cleared when hiding content warning input in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13348)) -- Fix "Show more" not switching to "Show less" on public pages ([ThibG](https://github.com/tootsuite/mastodon/pull/13174)) -- Fix import overwrite option not being selectable ([noellabo](https://github.com/tootsuite/mastodon/pull/13347)) -- Fix wrong color for ellipsis in boost confirmation dialog in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/13355)) -- Fix unnecessary unfollowing when importing follows with overwrite option ([noellabo](https://github.com/tootsuite/mastodon/pull/13350)) -- Fix 404 and 410 API errors being silently discarded in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13279)) -- Fix OCR not working on Safari because of unsupported worker-src CSP ([ThibG](https://github.com/tootsuite/mastodon/pull/13323)) -- Fix media not being marked sensitive when a content warning is set with no text ([ThibG](https://github.com/tootsuite/mastodon/pull/13277)) -- Fix crash after deleting announcements in web UI ([codesections](https://github.com/tootsuite/mastodon/pull/13283), [ThibG](https://github.com/tootsuite/mastodon/pull/13312)) -- Fix bookmarks not being searchable ([Kjwon15](https://github.com/tootsuite/mastodon/pull/13271), [noellabo](https://github.com/tootsuite/mastodon/pull/13293)) -- Fix reported accounts not being whitelisted from further spam checks when resolving a spam check report ([ThibG](https://github.com/tootsuite/mastodon/pull/13289)) -- Fix web UI crash in single-column mode on prehistoric browsers ([ThibG](https://github.com/tootsuite/mastodon/pull/13267)) -- Fix some timeouts when searching for URLs ([ThibG](https://github.com/tootsuite/mastodon/pull/13253)) -- Fix detailed view of direct messages displaying a 0 boost count in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13244)) -- Fix regression in “Edit media” modal in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13243)) -- Fix public posts from silenced accounts not being changed to unlisted visibility ([ThibG](https://github.com/tootsuite/mastodon/pull/13096)) -- Fix error when searching for URLs that contain the mention syntax ([ThibG](https://github.com/tootsuite/mastodon/pull/13151)) -- Fix text area above/right of emoji picker being accidentally clickable in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/13148)) -- Fix too large announcements not being scrollable in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13211)) -- Fix `tootctl media remove-orphans` crashing when encountering invalid media ([ThibG](https://github.com/tootsuite/mastodon/pull/13170)) -- Fix installation failing when Redis password contains special characters ([ThibG](https://github.com/tootsuite/mastodon/pull/13156)) -- Fix announcements with fully-qualified mentions to local users crashing web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13164)) +- Fix `tootctl media remove-orphans` ignoring `PAPERCLIP_ROOT_PATH` ([Gargron](https://github.com/mastodon/mastodon/pull/13375)) +- Fix returning results when searching for URL with non-zero offset ([Gargron](https://github.com/mastodon/mastodon/pull/13377)) +- Fix pinning a column in web UI sometimes redirecting out of web UI ([Gargron](https://github.com/mastodon/mastodon/pull/13376)) +- Fix background jobs not using locks like they are supposed to ([Gargron](https://github.com/mastodon/mastodon/pull/13361)) +- Fix content warning being unnecessarily cleared when hiding content warning input in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13348)) +- Fix "Show more" not switching to "Show less" on public pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13174)) +- Fix import overwrite option not being selectable ([noellabo](https://github.com/mastodon/mastodon/pull/13347)) +- Fix wrong color for ellipsis in boost confirmation dialog in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/13355)) +- Fix unnecessary unfollowing when importing follows with overwrite option ([noellabo](https://github.com/mastodon/mastodon/pull/13350)) +- Fix 404 and 410 API errors being silently discarded in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13279)) +- Fix OCR not working on Safari because of unsupported worker-src CSP ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13323)) +- Fix media not being marked sensitive when a content warning is set with no text ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13277)) +- Fix crash after deleting announcements in web UI ([codesections](https://github.com/mastodon/mastodon/pull/13283), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13312)) +- Fix bookmarks not being searchable ([Kjwon15](https://github.com/mastodon/mastodon/pull/13271), [noellabo](https://github.com/mastodon/mastodon/pull/13293)) +- Fix reported accounts not being whitelisted from further spam checks when resolving a spam check report ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13289)) +- Fix web UI crash in single-column mode on prehistoric browsers ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13267)) +- Fix some timeouts when searching for URLs ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13253)) +- Fix detailed view of direct messages displaying a 0 boost count in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13244)) +- Fix regression in “Edit media” modal in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13243)) +- Fix public posts from silenced accounts not being changed to unlisted visibility ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13096)) +- Fix error when searching for URLs that contain the mention syntax ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13151)) +- Fix text area above/right of emoji picker being accidentally clickable in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/13148)) +- Fix too large announcements not being scrollable in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13211)) +- Fix `tootctl media remove-orphans` crashing when encountering invalid media ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13170)) +- Fix installation failing when Redis password contains special characters ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13156)) +- Fix announcements with fully-qualified mentions to local users crashing web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13164)) ### Security -- Fix re-sending of e-mail confirmation not being rate limited ([Gargron](https://github.com/tootsuite/mastodon/pull/13360)) +- Fix re-sending of e-mail confirmation not being rate limited ([Gargron](https://github.com/mastodon/mastodon/pull/13360)) ## [v3.1.2] - 2020-02-27 ### Added -- Add `--reset-password` option to `tootctl accounts modify` ([ThibG](https://github.com/tootsuite/mastodon/pull/13126)) -- Add source-mapped stacktrace to error message in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13082)) +- Add `--reset-password` option to `tootctl accounts modify` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13126)) +- Add source-mapped stacktrace to error message in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13082)) ### Fixed -- Fix dismissing an announcement twice raising an obscure error ([ThibG](https://github.com/tootsuite/mastodon/pull/13124)) -- Fix misleading error when attempting to re-send a pending follow request ([ThibG](https://github.com/tootsuite/mastodon/pull/13133)) -- Fix backups failing when files are missing from media attachments ([ThibG](https://github.com/tootsuite/mastodon/pull/13146)) -- Fix duplicate accounts being created when fetching an account for its key only ([ThibG](https://github.com/tootsuite/mastodon/pull/13147)) -- Fix `/web` redirecting to `/web/web` in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13128)) -- Fix previously OStatus-based accounts not being detected as ActivityPub ([ThibG](https://github.com/tootsuite/mastodon/pull/13129)) -- Fix account JSON/RSS not being cacheable due to wrong mime type comparison ([ThibG](https://github.com/tootsuite/mastodon/pull/13116)) -- Fix old browsers crashing because of missing `finally` polyfill in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13115)) -- Fix account's bio not being shown if there are no proofs/fields in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13075)) -- Fix sign-ups without checked user agreement being accepted through the web form ([ThibG](https://github.com/tootsuite/mastodon/pull/13088)) -- Fix non-x64 architectures not being able to build Docker image because of hardcoded Node.js architecture ([SaraSmiseth](https://github.com/tootsuite/mastodon/pull/13081)) -- Fix invite request input not being shown on sign-up error if left empty ([ThibG](https://github.com/tootsuite/mastodon/pull/13089)) -- Fix some migration hints mentioning GitLab instead of Mastodon ([saper](https://github.com/tootsuite/mastodon/pull/13084)) +- Fix dismissing an announcement twice raising an obscure error ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13124)) +- Fix misleading error when attempting to re-send a pending follow request ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13133)) +- Fix backups failing when files are missing from media attachments ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13146)) +- Fix duplicate accounts being created when fetching an account for its key only ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13147)) +- Fix `/web` redirecting to `/web/web` in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13128)) +- Fix previously OStatus-based accounts not being detected as ActivityPub ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13129)) +- Fix account JSON/RSS not being cacheable due to wrong mime type comparison ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13116)) +- Fix old browsers crashing because of missing `finally` polyfill in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13115)) +- Fix account's bio not being shown if there are no proofs/fields in admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13075)) +- Fix sign-ups without checked user agreement being accepted through the web form ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13088)) +- Fix non-x64 architectures not being able to build Docker image because of hardcoded Node.js architecture ([SaraSmiseth](https://github.com/mastodon/mastodon/pull/13081)) +- Fix invite request input not being shown on sign-up error if left empty ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13089)) +- Fix some migration hints mentioning GitLab instead of Mastodon ([saper](https://github.com/mastodon/mastodon/pull/13084)) ### Security -- Fix leak of arbitrary statuses through unfavourite action in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/13161)) +- Fix leak of arbitrary statuses through unfavourite action in REST API ([Gargron](https://github.com/mastodon/mastodon/pull/13161)) ## [3.1.1] - 2020-02-10 ### Fixed -- Fix yanked dependency preventing installation ([mayaeh](https://github.com/tootsuite/mastodon/pull/13059)) +- Fix yanked dependency preventing installation ([mayaeh](https://github.com/mastodon/mastodon/pull/13059)) ## [3.1.0] - 2020-02-09 ### Added -- Add bookmarks ([ThibG](https://github.com/tootsuite/mastodon/pull/7107), [Gargron](https://github.com/tootsuite/mastodon/pull/12494), [Gomasy](https://github.com/tootsuite/mastodon/pull/12381)) -- Add announcements ([Gargron](https://github.com/tootsuite/mastodon/pull/12662), [Gargron](https://github.com/tootsuite/mastodon/pull/12967), [Gargron](https://github.com/tootsuite/mastodon/pull/12970), [Gargron](https://github.com/tootsuite/mastodon/pull/12963), [Gargron](https://github.com/tootsuite/mastodon/pull/12950), [Gargron](https://github.com/tootsuite/mastodon/pull/12990), [Gargron](https://github.com/tootsuite/mastodon/pull/12949), [Gargron](https://github.com/tootsuite/mastodon/pull/12989), [Gargron](https://github.com/tootsuite/mastodon/pull/12964), [Gargron](https://github.com/tootsuite/mastodon/pull/12965), [ThibG](https://github.com/tootsuite/mastodon/pull/12958), [ThibG](https://github.com/tootsuite/mastodon/pull/12957), [Gargron](https://github.com/tootsuite/mastodon/pull/12955), [ThibG](https://github.com/tootsuite/mastodon/pull/12946), [ThibG](https://github.com/tootsuite/mastodon/pull/12954)) -- Add number animations in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12948), [Gargron](https://github.com/tootsuite/mastodon/pull/12971)) -- Add `kab`, `is`, `kn`, `mr`, `ur` to available locales ([Gargron](https://github.com/tootsuite/mastodon/pull/12882), [BoFFire](https://github.com/tootsuite/mastodon/pull/12962), [Gargron](https://github.com/tootsuite/mastodon/pull/12379)) -- Add profile filter category ([ThibG](https://github.com/tootsuite/mastodon/pull/12918)) -- Add ability to add oneself to lists ([ThibG](https://github.com/tootsuite/mastodon/pull/12271)) -- Add hint how to contribute translations to preferences page ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12736)) -- Add signatures to statuses in archive takeout ([noellabo](https://github.com/tootsuite/mastodon/pull/12649)) -- Add support for `magnet:` and `xmpp` links ([ThibG](https://github.com/tootsuite/mastodon/pull/12905), [ThibG](https://github.com/tootsuite/mastodon/pull/12709)) -- Add `follow_request` notification type ([ThibG](https://github.com/tootsuite/mastodon/pull/12198)) -- Add ability to filter reports by account domain in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12154)) -- Add link to search for users connected from the same IP address to admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12157)) -- Add link to reports targeting a specific domain in admin view ([ThibG](https://github.com/tootsuite/mastodon/pull/12513)) -- Add support for EventSource streaming in web UI ([BenLubar](https://github.com/tootsuite/mastodon/pull/12887)) -- Add hotkey for opening media attachments in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12498), [Kjwon15](https://github.com/tootsuite/mastodon/pull/12546)) -- Add relationship-based options to status dropdowns in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12377), [ThibG](https://github.com/tootsuite/mastodon/pull/12535), [Gargron](https://github.com/tootsuite/mastodon/pull/12430)) -- Add support for submitting media description with `ctrl`+`enter` in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12272)) -- Add download button to audio and video players in web UI ([NimaBoscarino](https://github.com/tootsuite/mastodon/pull/12179)) -- Add setting for whether to crop images in timelines in web UI ([duxovni](https://github.com/tootsuite/mastodon/pull/12126)) -- Add support for `Event` activities ([tcitworld](https://github.com/tootsuite/mastodon/pull/12637)) -- Add basic support for `Group` actors ([noellabo](https://github.com/tootsuite/mastodon/pull/12071)) -- Add `S3_OVERRIDE_PATH_STYLE` environment variable ([Gargron](https://github.com/tootsuite/mastodon/pull/12594)) -- Add `S3_OPEN_TIMEOUT` environment variable ([tateisu](https://github.com/tootsuite/mastodon/pull/12459)) -- Add `LDAP_MAIL` environment variable ([madmath03](https://github.com/tootsuite/mastodon/pull/12053)) -- Add `LDAP_UID_CONVERSION_ENABLED` environment variable ([madmath03](https://github.com/tootsuite/mastodon/pull/12461)) -- Add `--remote-only` option to `tootctl emoji purge` ([ThibG](https://github.com/tootsuite/mastodon/pull/12810)) -- Add `tootctl media remove-orphans` ([Gargron](https://github.com/tootsuite/mastodon/pull/12568), [Gargron](https://github.com/tootsuite/mastodon/pull/12571)) -- Add `tootctl media lookup` command ([irlcatgirl](https://github.com/tootsuite/mastodon/pull/12283)) -- Add cache for OEmbed endpoints to avoid extra HTTP requests ([Gargron](https://github.com/tootsuite/mastodon/pull/12403)) -- Add support for KaiOS arrow navigation to public pages ([nolanlawson](https://github.com/tootsuite/mastodon/pull/12251)) -- Add `discoverable` to accounts in REST API ([trwnh](https://github.com/tootsuite/mastodon/pull/12508)) -- Add admin setting to disable default follows ([ArisuOngaku](https://github.com/tootsuite/mastodon/pull/12566)) -- Add support for LDAP and PAM in the OAuth password grant strategy ([ntl-purism](https://github.com/tootsuite/mastodon/pull/12390), [Gargron](https://github.com/tootsuite/mastodon/pull/12743)) -- Allow support for `Accept`/`Reject` activities with a non-embedded object ([puckipedia](https://github.com/tootsuite/mastodon/pull/12199)) -- Add "Show thread" button to public profiles ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/13000)) +- Add bookmarks ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/7107), [Gargron](https://github.com/mastodon/mastodon/pull/12494), [Gomasy](https://github.com/mastodon/mastodon/pull/12381)) +- Add announcements ([Gargron](https://github.com/mastodon/mastodon/pull/12662), [Gargron](https://github.com/mastodon/mastodon/pull/12967), [Gargron](https://github.com/mastodon/mastodon/pull/12970), [Gargron](https://github.com/mastodon/mastodon/pull/12963), [Gargron](https://github.com/mastodon/mastodon/pull/12950), [Gargron](https://github.com/mastodon/mastodon/pull/12990), [Gargron](https://github.com/mastodon/mastodon/pull/12949), [Gargron](https://github.com/mastodon/mastodon/pull/12989), [Gargron](https://github.com/mastodon/mastodon/pull/12964), [Gargron](https://github.com/mastodon/mastodon/pull/12965), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/12958), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/12957), [Gargron](https://github.com/mastodon/mastodon/pull/12955), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/12946), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/12954)) +- Add number animations in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/12948), [Gargron](https://github.com/mastodon/mastodon/pull/12971)) +- Add `kab`, `is`, `kn`, `mr`, `ur` to available locales ([Gargron](https://github.com/mastodon/mastodon/pull/12882), [BoFFire](https://github.com/mastodon/mastodon/pull/12962), [Gargron](https://github.com/mastodon/mastodon/pull/12379)) +- Add profile filter category ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12918)) +- Add ability to add oneself to lists ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12271)) +- Add hint how to contribute translations to preferences page ([Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/12736)) +- Add signatures to statuses in archive takeout ([noellabo](https://github.com/mastodon/mastodon/pull/12649)) +- Add support for `magnet:` and `xmpp` links ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12905), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/12709)) +- Add `follow_request` notification type ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12198)) +- Add ability to filter reports by account domain in admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12154)) +- Add link to search for users connected from the same IP address to admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12157)) +- Add link to reports targeting a specific domain in admin view ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12513)) +- Add support for EventSource streaming in web UI ([BenLubar](https://github.com/mastodon/mastodon/pull/12887)) +- Add hotkey for opening media attachments in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12498), [Kjwon15](https://github.com/mastodon/mastodon/pull/12546)) +- Add relationship-based options to status dropdowns in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/12377), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/12535), [Gargron](https://github.com/mastodon/mastodon/pull/12430)) +- Add support for submitting media description with `ctrl`+`enter` in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12272)) +- Add download button to audio and video players in web UI ([NimaBoscarino](https://github.com/mastodon/mastodon/pull/12179)) +- Add setting for whether to crop images in timelines in web UI ([duxovni](https://github.com/mastodon/mastodon/pull/12126)) +- Add support for `Event` activities ([tcitworld](https://github.com/mastodon/mastodon/pull/12637)) +- Add basic support for `Group` actors ([noellabo](https://github.com/mastodon/mastodon/pull/12071)) +- Add `S3_OVERRIDE_PATH_STYLE` environment variable ([Gargron](https://github.com/mastodon/mastodon/pull/12594)) +- Add `S3_OPEN_TIMEOUT` environment variable ([tateisu](https://github.com/mastodon/mastodon/pull/12459)) +- Add `LDAP_MAIL` environment variable ([madmath03](https://github.com/mastodon/mastodon/pull/12053)) +- Add `LDAP_UID_CONVERSION_ENABLED` environment variable ([madmath03](https://github.com/mastodon/mastodon/pull/12461)) +- Add `--remote-only` option to `tootctl emoji purge` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12810)) +- Add `tootctl media remove-orphans` ([Gargron](https://github.com/mastodon/mastodon/pull/12568), [Gargron](https://github.com/mastodon/mastodon/pull/12571)) +- Add `tootctl media lookup` command ([irlcatgirl](https://github.com/mastodon/mastodon/pull/12283)) +- Add cache for OEmbed endpoints to avoid extra HTTP requests ([Gargron](https://github.com/mastodon/mastodon/pull/12403)) +- Add support for KaiOS arrow navigation to public pages ([nolanlawson](https://github.com/mastodon/mastodon/pull/12251)) +- Add `discoverable` to accounts in REST API ([trwnh](https://github.com/mastodon/mastodon/pull/12508)) +- Add admin setting to disable default follows ([ArisuOngaku](https://github.com/mastodon/mastodon/pull/12566)) +- Add support for LDAP and PAM in the OAuth password grant strategy ([ntl-purism](https://github.com/mastodon/mastodon/pull/12390), [Gargron](https://github.com/mastodon/mastodon/pull/12743)) +- Allow support for `Accept`/`Reject` activities with a non-embedded object ([puckipedia](https://github.com/mastodon/mastodon/pull/12199)) +- Add "Show thread" button to public profiles ([Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/13000)) ### Changed -- Change `last_status_at` to be a date, not datetime in REST API ([ThibG](https://github.com/tootsuite/mastodon/pull/12966)) -- Change followers page to relationships page in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12927), [Gargron](https://github.com/tootsuite/mastodon/pull/12934)) -- Change reported media attachments to always be hidden in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12879), [ThibG](https://github.com/tootsuite/mastodon/pull/12907)) -- Change string from "Disable" to "Disable login" in admin UI ([nileshkumar](https://github.com/tootsuite/mastodon/pull/12201)) -- Change report page structure in admin UI ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12615)) -- Change swipe sensitivity to be lower on small screens in web UI ([umonaca](https://github.com/tootsuite/mastodon/pull/12168)) -- Change audio/video playback to stop playback when out of view in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12486)) -- Change media description label based on upload type in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12270)) -- Change large numbers to render without decimal units in web UI ([noellabo](https://github.com/tootsuite/mastodon/pull/12706)) -- Change "Add a choice" button to be disabled rather than hidden when poll limit reached in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12319), [hinaloe](https://github.com/tootsuite/mastodon/pull/12544)) -- Change `tootctl statuses remove` to keep statuses favourited or bookmarked by local users ([ThibG](https://github.com/tootsuite/mastodon/pull/11267), [Gomasy](https://github.com/tootsuite/mastodon/pull/12818)) -- Change domain block behavior to update user records (fast) before deleting data (slower) ([ThibG](https://github.com/tootsuite/mastodon/pull/12247)) -- Change behaviour to strip audio metadata on uploads ([hugogameiro](https://github.com/tootsuite/mastodon/pull/12171)) -- Change accepted length of remote media descriptions from 420 to 1,500 characters ([ThibG](https://github.com/tootsuite/mastodon/pull/12262)) -- Change preferences pages structure ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12497), [mayaeh](https://github.com/tootsuite/mastodon/pull/12517), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12801), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12797), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12799), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12793)) -- Change format of titles in RSS ([devkral](https://github.com/tootsuite/mastodon/pull/8596)) -- Change favourite icon animation from spring-based motion to CSS animation in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12175)) -- Change minimum required Node.js version to 10, and default to 12 ([Shleeble](https://github.com/tootsuite/mastodon/pull/12791), [mkody](https://github.com/tootsuite/mastodon/pull/12906), [Shleeble](https://github.com/tootsuite/mastodon/pull/12703)) -- Change spam check to exempt server staff ([ThibG](https://github.com/tootsuite/mastodon/pull/12874)) -- Change to fallback to to `Create` audience when `object` has no defined audience ([ThibG](https://github.com/tootsuite/mastodon/pull/12249)) -- Change Twemoji library to 12.1.3 in web UI ([koyuawsmbrtn](https://github.com/tootsuite/mastodon/pull/12342)) -- Change blocked users to be hidden from following/followers lists ([ThibG](https://github.com/tootsuite/mastodon/pull/12733)) -- Change signature verification to ignore signatures with invalid host ([Gargron](https://github.com/tootsuite/mastodon/pull/13033)) +- Change `last_status_at` to be a date, not datetime in REST API ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12966)) +- Change followers page to relationships page in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/12927), [Gargron](https://github.com/mastodon/mastodon/pull/12934)) +- Change reported media attachments to always be hidden in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/12879), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/12907)) +- Change string from "Disable" to "Disable login" in admin UI ([nileshkumar](https://github.com/mastodon/mastodon/pull/12201)) +- Change report page structure in admin UI ([Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/12615)) +- Change swipe sensitivity to be lower on small screens in web UI ([umonaca](https://github.com/mastodon/mastodon/pull/12168)) +- Change audio/video playback to stop playback when out of view in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/12486)) +- Change media description label based on upload type in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12270)) +- Change large numbers to render without decimal units in web UI ([noellabo](https://github.com/mastodon/mastodon/pull/12706)) +- Change "Add a choice" button to be disabled rather than hidden when poll limit reached in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12319), [hinaloe](https://github.com/mastodon/mastodon/pull/12544)) +- Change `tootctl statuses remove` to keep statuses favourited or bookmarked by local users ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11267), [Gomasy](https://github.com/mastodon/mastodon/pull/12818)) +- Change domain block behavior to update user records (fast) before deleting data (slower) ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12247)) +- Change behaviour to strip audio metadata on uploads ([hugogameiro](https://github.com/mastodon/mastodon/pull/12171)) +- Change accepted length of remote media descriptions from 420 to 1,500 characters ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12262)) +- Change preferences pages structure ([Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/12497), [mayaeh](https://github.com/mastodon/mastodon/pull/12517), [Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/12801), [Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/12797), [Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/12799), [Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/12793)) +- Change format of titles in RSS ([devkral](https://github.com/mastodon/mastodon/pull/8596)) +- Change favourite icon animation from spring-based motion to CSS animation in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12175)) +- Change minimum required Node.js version to 10, and default to 12 ([Shleeble](https://github.com/mastodon/mastodon/pull/12791), [mkody](https://github.com/mastodon/mastodon/pull/12906), [Shleeble](https://github.com/mastodon/mastodon/pull/12703)) +- Change spam check to exempt server staff ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12874)) +- Change to fallback to to `Create` audience when `object` has no defined audience ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12249)) +- Change Twemoji library to 12.1.3 in web UI ([koyuawsmbrtn](https://github.com/mastodon/mastodon/pull/12342)) +- Change blocked users to be hidden from following/followers lists ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12733)) +- Change signature verification to ignore signatures with invalid host ([Gargron](https://github.com/mastodon/mastodon/pull/13033)) ### Removed -- Remove unused dependencies ([ykzts](https://github.com/tootsuite/mastodon/pull/12861), [mayaeh](https://github.com/tootsuite/mastodon/pull/12826), [ThibG](https://github.com/tootsuite/mastodon/pull/12822), [ykzts](https://github.com/tootsuite/mastodon/pull/12533)) +- Remove unused dependencies ([ykzts](https://github.com/mastodon/mastodon/pull/12861), [mayaeh](https://github.com/mastodon/mastodon/pull/12826), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/12822), [ykzts](https://github.com/mastodon/mastodon/pull/12533)) ### Fixed -- Fix some translatable strings being used wrongly ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12569), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12589), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12502), [mayaeh](https://github.com/tootsuite/mastodon/pull/12231)) -- Fix headline of public timeline page when set to local-only ([ykzts](https://github.com/tootsuite/mastodon/pull/12224)) -- Fix space between tabs not being spread evenly in web UI ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12944), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12961), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12446)) -- Fix interactive delays in database migrations with no TTY ([Gargron](https://github.com/tootsuite/mastodon/pull/12969)) -- Fix status overflowing in report dialog in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12959)) -- Fix unlocalized dropdown button title in web UI ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12947)) -- Fix media attachments without file being uploadable ([Gargron](https://github.com/tootsuite/mastodon/pull/12562)) -- Fix unfollow confirmations in profile directory in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12922)) -- Fix duplicate `description` meta tag on accounts public pages ([ThibG](https://github.com/tootsuite/mastodon/pull/12923)) -- Fix slow query of federated timeline ([notozeki](https://github.com/tootsuite/mastodon/pull/12886)) -- Fix not all of account's active IPs showing up in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12909), [Gargron](https://github.com/tootsuite/mastodon/pull/12943)) -- Fix search by IP not using alternative browser sessions in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12904)) -- Fix “X new items” not showing up for slow mode on empty timelines in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12875)) -- Fix OEmbed endpoint being inaccessible in secure mode ([Gargron](https://github.com/tootsuite/mastodon/pull/12864)) -- Fix proofs API being inaccessible in secure mode ([Gargron](https://github.com/tootsuite/mastodon/pull/12495)) -- Fix Ruby 2.7 incompatibilities ([ThibG](https://github.com/tootsuite/mastodon/pull/12831), [ThibG](https://github.com/tootsuite/mastodon/pull/12824), [Shleeble](https://github.com/tootsuite/mastodon/pull/12759), [zunda](https://github.com/tootsuite/mastodon/pull/12769)) -- Fix invalid poll votes being accepted in REST API ([ThibG](https://github.com/tootsuite/mastodon/pull/12601)) -- Fix old migrations failing because of strong migrations update ([ThibG](https://github.com/tootsuite/mastodon/pull/12787), [ThibG](https://github.com/tootsuite/mastodon/pull/12692)) -- Fix reuse of detailed status components in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12792)) -- Fix base64-encoded file uploads not being possible in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/12748), [Gargron](https://github.com/tootsuite/mastodon/pull/12857)) -- Fix error due to missing authentication call in filters controller ([Gargron](https://github.com/tootsuite/mastodon/pull/12746)) -- Fix uncaught unknown format error in host meta controller ([Gargron](https://github.com/tootsuite/mastodon/pull/12747)) -- Fix URL search not returning private toots user has access to ([ThibG](https://github.com/tootsuite/mastodon/pull/12742), [ThibG](https://github.com/tootsuite/mastodon/pull/12336)) -- Fix cache digesting log noise on status embeds ([Gargron](https://github.com/tootsuite/mastodon/pull/12750)) -- Fix slowness due to layout thrashing when reloading a large set of statuses in web UI ([panarom](https://github.com/tootsuite/mastodon/pull/12661), [panarom](https://github.com/tootsuite/mastodon/pull/12744), [Gargron](https://github.com/tootsuite/mastodon/pull/12712)) -- Fix error when fetching followers/following from REST API when user has network hidden ([Gargron](https://github.com/tootsuite/mastodon/pull/12716)) -- Fix IDN mentions not being processed, IDN domains not being rendered ([Gargron](https://github.com/tootsuite/mastodon/pull/12715), [Gargron](https://github.com/tootsuite/mastodon/pull/13035), [Gargron](https://github.com/tootsuite/mastodon/pull/13030)) -- Fix error when searching for empty phrase ([Gargron](https://github.com/tootsuite/mastodon/pull/12711)) -- Fix backups stopping due to read timeouts ([chr-1x](https://github.com/tootsuite/mastodon/pull/12281)) -- Fix batch actions on non-pending tags in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12537)) -- Fix sample `SAML_ACS_URL`, `SAML_ISSUER` ([orlea](https://github.com/tootsuite/mastodon/pull/12669)) -- Fix manual scrolling issue on Firefox/Windows in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12648)) -- Fix archive takeout failing if total dump size exceeds 2GB ([scd31](https://github.com/tootsuite/mastodon/pull/12602), [Gargron](https://github.com/tootsuite/mastodon/pull/12653)) -- Fix custom emoji category creation silently erroring out on duplicate category ([ThibG](https://github.com/tootsuite/mastodon/pull/12647)) -- Fix link crawler not specifying preferred content type ([ThibG](https://github.com/tootsuite/mastodon/pull/12646)) -- Fix featured hashtag setting page erroring out instead of rejecting invalid tags ([ThibG](https://github.com/tootsuite/mastodon/pull/12436)) -- Fix tooltip messages of single/multiple-choice polls switcher being reversed in web UI ([acid-chicken](https://github.com/tootsuite/mastodon/pull/12616)) -- Fix typo in help text of `tootctl statuses remove` ([trwnh](https://github.com/tootsuite/mastodon/pull/12603)) -- Fix generic HTTP 500 error on duplicate records ([Gargron](https://github.com/tootsuite/mastodon/pull/12563)) -- Fix old migration failing with new status default scope ([ThibG](https://github.com/tootsuite/mastodon/pull/12493)) -- Fix errors when using search API with no query ([Gargron](https://github.com/tootsuite/mastodon/pull/12541), [trwnh](https://github.com/tootsuite/mastodon/pull/12549)) -- Fix poll options not being selectable via keyboard in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12538)) -- Fix conversations not having an unread indicator in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12506)) -- Fix lost focus when modals open/close in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12437)) -- Fix pending upload count not being decremented on error in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12499)) -- Fix empty poll options not being removed on remote poll update ([ThibG](https://github.com/tootsuite/mastodon/pull/12484)) -- Fix OCR with delete & redraft in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12465)) -- Fix blur behind closed registration message ([ThibG](https://github.com/tootsuite/mastodon/pull/12442)) -- Fix OEmbed discovery not handling different URL variants in query ([Gargron](https://github.com/tootsuite/mastodon/pull/12439)) -- Fix link crawler crashing on `` tags without `href` ([ThibG](https://github.com/tootsuite/mastodon/pull/12159)) -- Fix whitelisted subdomains being ignored in whitelist mode ([noiob](https://github.com/tootsuite/mastodon/pull/12435)) -- Fix broken audit log in whitelist mode in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12303)) -- Fix unread indicator not honoring "Only media" option in local and federated timelines in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12330)) -- Fix error when rebuilding home feeds ([dariusk](https://github.com/tootsuite/mastodon/pull/12324)) -- Fix relationship caches being broken as result of a follow request ([ThibG](https://github.com/tootsuite/mastodon/pull/12299)) -- Fix more items than the limit being uploadable in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12300)) -- Fix various issues with account migration ([ThibG](https://github.com/tootsuite/mastodon/pull/12301)) -- Fix filtered out items being counted as pending items in slow mode in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12266)) -- Fix notification filters not applying to poll options ([ThibG](https://github.com/tootsuite/mastodon/pull/12269)) -- Fix notification message for user's own poll saying it's a poll they voted on in web UI ([ykzts](https://github.com/tootsuite/mastodon/pull/12219)) -- Fix polls with an expiration not showing up as expired in web UI ([noellabo](https://github.com/tootsuite/mastodon/pull/12222)) -- Fix volume slider having an offset between cursor and slider in Chromium in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12158)) -- Fix Vagrant image not accepting connections ([shrft](https://github.com/tootsuite/mastodon/pull/12180)) -- Fix batch actions being hidden on small screens in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12183)) -- Fix incoming federation not working in whitelist mode ([ThibG](https://github.com/tootsuite/mastodon/pull/12185)) -- Fix error when passing empty `source` param to `PUT /api/v1/accounts/update_credentials` ([jglauche](https://github.com/tootsuite/mastodon/pull/12259)) -- Fix HTTP-based streaming API being cacheable by proxies ([BenLubar](https://github.com/tootsuite/mastodon/pull/12945)) -- Fix users being able to register while `tootctl self-destruct` is in progress ([Kjwon15](https://github.com/tootsuite/mastodon/pull/12877)) -- Fix microformats detection in link crawler not ignoring `h-card` links ([nightpool](https://github.com/tootsuite/mastodon/pull/12189)) -- Fix outline on full-screen video in web UI ([hinaloe](https://github.com/tootsuite/mastodon/pull/12176)) -- Fix TLD domain blocks not being editable ([ThibG](https://github.com/tootsuite/mastodon/pull/12805)) -- Fix Nanobox deploy hooks ([danhunsaker](https://github.com/tootsuite/mastodon/pull/12663)) -- Fix needlessly complicated SQL query when performing account search amongst followings ([ThibG](https://github.com/tootsuite/mastodon/pull/12302)) -- Fix favourites count not updating when unfavouriting in web UI ([NimaBoscarino](https://github.com/tootsuite/mastodon/pull/12140)) -- Fix occasional crash on scroll in Chromium in web UI ([hinaloe](https://github.com/tootsuite/mastodon/pull/12274)) -- Fix intersection observer not working in single-column mode web UI ([panarom](https://github.com/tootsuite/mastodon/pull/12735)) -- Fix voting issue with remote polls that contain trailing spaces ([ThibG](https://github.com/tootsuite/mastodon/pull/12515)) -- Fix dynamic elements not working in pgHero due to CSP rules ([ykzts](https://github.com/tootsuite/mastodon/pull/12489)) -- Fix overly verbose backtraces when delivering ActivityPub payloads ([zunda](https://github.com/tootsuite/mastodon/pull/12798)) -- Fix rendering `` without `href` when scheme unsupported ([Gargron](https://github.com/tootsuite/mastodon/pull/13040)) -- Fix unfiltered params error when generating ActivityPub tag pagination ([Gargron](https://github.com/tootsuite/mastodon/pull/13049)) -- Fix malformed HTML causing uncaught error ([Gargron](https://github.com/tootsuite/mastodon/pull/13042)) -- Fix native share button not being displayed for unlisted toots ([ThibG](https://github.com/tootsuite/mastodon/pull/13045)) -- Fix remote convertible media attachments (e.g. GIFs) not being saved ([Gargron](https://github.com/tootsuite/mastodon/pull/13032)) -- Fix account query not using faster index ([abcang](https://github.com/tootsuite/mastodon/pull/13016)) -- Fix error when sending moderation notification ([renatolond](https://github.com/tootsuite/mastodon/pull/13014)) +- Fix some translatable strings being used wrongly ([Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/12569), [Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/12589), [Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/12502), [mayaeh](https://github.com/mastodon/mastodon/pull/12231)) +- Fix headline of public timeline page when set to local-only ([ykzts](https://github.com/mastodon/mastodon/pull/12224)) +- Fix space between tabs not being spread evenly in web UI ([Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/12944), [Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/12961), [Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/12446)) +- Fix interactive delays in database migrations with no TTY ([Gargron](https://github.com/mastodon/mastodon/pull/12969)) +- Fix status overflowing in report dialog in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12959)) +- Fix unlocalized dropdown button title in web UI ([Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/12947)) +- Fix media attachments without file being uploadable ([Gargron](https://github.com/mastodon/mastodon/pull/12562)) +- Fix unfollow confirmations in profile directory in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12922)) +- Fix duplicate `description` meta tag on accounts public pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12923)) +- Fix slow query of federated timeline ([notozeki](https://github.com/mastodon/mastodon/pull/12886)) +- Fix not all of account's active IPs showing up in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/12909), [Gargron](https://github.com/mastodon/mastodon/pull/12943)) +- Fix search by IP not using alternative browser sessions in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/12904)) +- Fix “X new items” not showing up for slow mode on empty timelines in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12875)) +- Fix OEmbed endpoint being inaccessible in secure mode ([Gargron](https://github.com/mastodon/mastodon/pull/12864)) +- Fix proofs API being inaccessible in secure mode ([Gargron](https://github.com/mastodon/mastodon/pull/12495)) +- Fix Ruby 2.7 incompatibilities ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12831), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/12824), [Shleeble](https://github.com/mastodon/mastodon/pull/12759), [zunda](https://github.com/mastodon/mastodon/pull/12769)) +- Fix invalid poll votes being accepted in REST API ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12601)) +- Fix old migrations failing because of strong migrations update ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12787), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/12692)) +- Fix reuse of detailed status components in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12792)) +- Fix base64-encoded file uploads not being possible in REST API ([Gargron](https://github.com/mastodon/mastodon/pull/12748), [Gargron](https://github.com/mastodon/mastodon/pull/12857)) +- Fix error due to missing authentication call in filters controller ([Gargron](https://github.com/mastodon/mastodon/pull/12746)) +- Fix uncaught unknown format error in host meta controller ([Gargron](https://github.com/mastodon/mastodon/pull/12747)) +- Fix URL search not returning private toots user has access to ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12742), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/12336)) +- Fix cache digesting log noise on status embeds ([Gargron](https://github.com/mastodon/mastodon/pull/12750)) +- Fix slowness due to layout thrashing when reloading a large set of statuses in web UI ([panarom](https://github.com/mastodon/mastodon/pull/12661), [panarom](https://github.com/mastodon/mastodon/pull/12744), [Gargron](https://github.com/mastodon/mastodon/pull/12712)) +- Fix error when fetching followers/following from REST API when user has network hidden ([Gargron](https://github.com/mastodon/mastodon/pull/12716)) +- Fix IDN mentions not being processed, IDN domains not being rendered ([Gargron](https://github.com/mastodon/mastodon/pull/12715), [Gargron](https://github.com/mastodon/mastodon/pull/13035), [Gargron](https://github.com/mastodon/mastodon/pull/13030)) +- Fix error when searching for empty phrase ([Gargron](https://github.com/mastodon/mastodon/pull/12711)) +- Fix backups stopping due to read timeouts ([chr-1x](https://github.com/mastodon/mastodon/pull/12281)) +- Fix batch actions on non-pending tags in admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12537)) +- Fix sample `SAML_ACS_URL`, `SAML_ISSUER` ([orlea](https://github.com/mastodon/mastodon/pull/12669)) +- Fix manual scrolling issue on Firefox/Windows in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12648)) +- Fix archive takeout failing if total dump size exceeds 2GB ([scd31](https://github.com/mastodon/mastodon/pull/12602), [Gargron](https://github.com/mastodon/mastodon/pull/12653)) +- Fix custom emoji category creation silently erroring out on duplicate category ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12647)) +- Fix link crawler not specifying preferred content type ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12646)) +- Fix featured hashtag setting page erroring out instead of rejecting invalid tags ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12436)) +- Fix tooltip messages of single/multiple-choice polls switcher being reversed in web UI ([acid-chicken](https://github.com/mastodon/mastodon/pull/12616)) +- Fix typo in help text of `tootctl statuses remove` ([trwnh](https://github.com/mastodon/mastodon/pull/12603)) +- Fix generic HTTP 500 error on duplicate records ([Gargron](https://github.com/mastodon/mastodon/pull/12563)) +- Fix old migration failing with new status default scope ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12493)) +- Fix errors when using search API with no query ([Gargron](https://github.com/mastodon/mastodon/pull/12541), [trwnh](https://github.com/mastodon/mastodon/pull/12549)) +- Fix poll options not being selectable via keyboard in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12538)) +- Fix conversations not having an unread indicator in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/12506)) +- Fix lost focus when modals open/close in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12437)) +- Fix pending upload count not being decremented on error in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12499)) +- Fix empty poll options not being removed on remote poll update ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12484)) +- Fix OCR with delete & redraft in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12465)) +- Fix blur behind closed registration message ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12442)) +- Fix OEmbed discovery not handling different URL variants in query ([Gargron](https://github.com/mastodon/mastodon/pull/12439)) +- Fix link crawler crashing on `` tags without `href` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12159)) +- Fix whitelisted subdomains being ignored in whitelist mode ([noiob](https://github.com/mastodon/mastodon/pull/12435)) +- Fix broken audit log in whitelist mode in admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12303)) +- Fix unread indicator not honoring "Only media" option in local and federated timelines in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12330)) +- Fix error when rebuilding home feeds ([dariusk](https://github.com/mastodon/mastodon/pull/12324)) +- Fix relationship caches being broken as result of a follow request ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12299)) +- Fix more items than the limit being uploadable in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12300)) +- Fix various issues with account migration ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12301)) +- Fix filtered out items being counted as pending items in slow mode in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12266)) +- Fix notification filters not applying to poll options ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12269)) +- Fix notification message for user's own poll saying it's a poll they voted on in web UI ([ykzts](https://github.com/mastodon/mastodon/pull/12219)) +- Fix polls with an expiration not showing up as expired in web UI ([noellabo](https://github.com/mastodon/mastodon/pull/12222)) +- Fix volume slider having an offset between cursor and slider in Chromium in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12158)) +- Fix Vagrant image not accepting connections ([shrft](https://github.com/mastodon/mastodon/pull/12180)) +- Fix batch actions being hidden on small screens in admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12183)) +- Fix incoming federation not working in whitelist mode ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12185)) +- Fix error when passing empty `source` param to `PUT /api/v1/accounts/update_credentials` ([jglauche](https://github.com/mastodon/mastodon/pull/12259)) +- Fix HTTP-based streaming API being cacheable by proxies ([BenLubar](https://github.com/mastodon/mastodon/pull/12945)) +- Fix users being able to register while `tootctl self-destruct` is in progress ([Kjwon15](https://github.com/mastodon/mastodon/pull/12877)) +- Fix microformats detection in link crawler not ignoring `h-card` links ([nightpool](https://github.com/mastodon/mastodon/pull/12189)) +- Fix outline on full-screen video in web UI ([hinaloe](https://github.com/mastodon/mastodon/pull/12176)) +- Fix TLD domain blocks not being editable ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12805)) +- Fix Nanobox deploy hooks ([danhunsaker](https://github.com/mastodon/mastodon/pull/12663)) +- Fix needlessly complicated SQL query when performing account search amongst followings ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12302)) +- Fix favourites count not updating when unfavouriting in web UI ([NimaBoscarino](https://github.com/mastodon/mastodon/pull/12140)) +- Fix occasional crash on scroll in Chromium in web UI ([hinaloe](https://github.com/mastodon/mastodon/pull/12274)) +- Fix intersection observer not working in single-column mode web UI ([panarom](https://github.com/mastodon/mastodon/pull/12735)) +- Fix voting issue with remote polls that contain trailing spaces ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12515)) +- Fix dynamic elements not working in pgHero due to CSP rules ([ykzts](https://github.com/mastodon/mastodon/pull/12489)) +- Fix overly verbose backtraces when delivering ActivityPub payloads ([zunda](https://github.com/mastodon/mastodon/pull/12798)) +- Fix rendering `` without `href` when scheme unsupported ([Gargron](https://github.com/mastodon/mastodon/pull/13040)) +- Fix unfiltered params error when generating ActivityPub tag pagination ([Gargron](https://github.com/mastodon/mastodon/pull/13049)) +- Fix malformed HTML causing uncaught error ([Gargron](https://github.com/mastodon/mastodon/pull/13042)) +- Fix native share button not being displayed for unlisted toots ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13045)) +- Fix remote convertible media attachments (e.g. GIFs) not being saved ([Gargron](https://github.com/mastodon/mastodon/pull/13032)) +- Fix account query not using faster index ([abcang](https://github.com/mastodon/mastodon/pull/13016)) +- Fix error when sending moderation notification ([renatolond](https://github.com/mastodon/mastodon/pull/13014)) ### Security -- Fix OEmbed leaking information about existence of non-public statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/12930)) -- Fix password change/reset not immediately invalidating other sessions ([Gargron](https://github.com/tootsuite/mastodon/pull/12928)) -- Fix settings pages being cacheable by the browser ([Gargron](https://github.com/tootsuite/mastodon/pull/12714)) +- Fix OEmbed leaking information about existence of non-public statuses ([Gargron](https://github.com/mastodon/mastodon/pull/12930)) +- Fix password change/reset not immediately invalidating other sessions ([Gargron](https://github.com/mastodon/mastodon/pull/12928)) +- Fix settings pages being cacheable by the browser ([Gargron](https://github.com/mastodon/mastodon/pull/12714)) ## [3.0.1] - 2019-10-10 ### Added -- Add `tootctl media usage` command ([Gargron](https://github.com/tootsuite/mastodon/pull/12115)) -- Add admin setting to auto-approve trending hashtags ([Gargron](https://github.com/tootsuite/mastodon/pull/12122), [Gargron](https://github.com/tootsuite/mastodon/pull/12130)) +- Add `tootctl media usage` command ([Gargron](https://github.com/mastodon/mastodon/pull/12115)) +- Add admin setting to auto-approve trending hashtags ([Gargron](https://github.com/mastodon/mastodon/pull/12122), [Gargron](https://github.com/mastodon/mastodon/pull/12130)) ### Changed -- Change `tootctl media refresh` to skip already downloaded attachments ([Gargron](https://github.com/tootsuite/mastodon/pull/12118)) +- Change `tootctl media refresh` to skip already downloaded attachments ([Gargron](https://github.com/mastodon/mastodon/pull/12118)) ### Removed -- Remove auto-silence behaviour from spam check ([Gargron](https://github.com/tootsuite/mastodon/pull/12117)) -- Remove HTML `lang` attribute from individual statuses in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12124)) -- Remove fallback to long description on sidebar and meta description ([Gargron](https://github.com/tootsuite/mastodon/pull/12119)) +- Remove auto-silence behaviour from spam check ([Gargron](https://github.com/mastodon/mastodon/pull/12117)) +- Remove HTML `lang` attribute from individual statuses in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/12124)) +- Remove fallback to long description on sidebar and meta description ([Gargron](https://github.com/mastodon/mastodon/pull/12119)) ### Fixed -- Fix preloaded JSON-LD context for identity not being used ([Gargron](https://github.com/tootsuite/mastodon/pull/12138)) -- Fix media editing modal changing dimensions once the image loads ([Gargron](https://github.com/tootsuite/mastodon/pull/12131)) -- Fix not showing whether a custom emoji has a local counterpart in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12135)) -- Fix attachment not being re-downloaded even if file is not stored ([Gargron](https://github.com/tootsuite/mastodon/pull/12125)) -- Fix old migration trying to use new column due to default status scope ([Gargron](https://github.com/tootsuite/mastodon/pull/12095)) -- Fix column back button missing for not found accounts ([trwnh](https://github.com/tootsuite/mastodon/pull/12094)) -- Fix issues with tootctl's parallelization and progress reporting ([Gargron](https://github.com/tootsuite/mastodon/pull/12093), [Gargron](https://github.com/tootsuite/mastodon/pull/12097)) -- Fix existing user records with now-renamed `pt` locale ([Gargron](https://github.com/tootsuite/mastodon/pull/12092)) -- Fix hashtag timeline REST API accepting too many hashtags ([Gargron](https://github.com/tootsuite/mastodon/pull/12091)) -- Fix `GET /api/v1/instance` REST APIs being unavailable in secure mode ([Gargron](https://github.com/tootsuite/mastodon/pull/12089)) -- Fix performance of home feed regeneration and merging ([Gargron](https://github.com/tootsuite/mastodon/pull/12084)) -- Fix ffmpeg performance issues due to stdout buffer overflow ([hugogameiro](https://github.com/tootsuite/mastodon/pull/12088)) -- Fix S3 adapter retrying failing uploads with exponential backoff ([Gargron](https://github.com/tootsuite/mastodon/pull/12085)) -- Fix `tootctl accounts cull` advertising unused option flag ([Kjwon15](https://github.com/tootsuite/mastodon/pull/12074)) +- Fix preloaded JSON-LD context for identity not being used ([Gargron](https://github.com/mastodon/mastodon/pull/12138)) +- Fix media editing modal changing dimensions once the image loads ([Gargron](https://github.com/mastodon/mastodon/pull/12131)) +- Fix not showing whether a custom emoji has a local counterpart in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/12135)) +- Fix attachment not being re-downloaded even if file is not stored ([Gargron](https://github.com/mastodon/mastodon/pull/12125)) +- Fix old migration trying to use new column due to default status scope ([Gargron](https://github.com/mastodon/mastodon/pull/12095)) +- Fix column back button missing for not found accounts ([trwnh](https://github.com/mastodon/mastodon/pull/12094)) +- Fix issues with tootctl's parallelization and progress reporting ([Gargron](https://github.com/mastodon/mastodon/pull/12093), [Gargron](https://github.com/mastodon/mastodon/pull/12097)) +- Fix existing user records with now-renamed `pt` locale ([Gargron](https://github.com/mastodon/mastodon/pull/12092)) +- Fix hashtag timeline REST API accepting too many hashtags ([Gargron](https://github.com/mastodon/mastodon/pull/12091)) +- Fix `GET /api/v1/instance` REST APIs being unavailable in secure mode ([Gargron](https://github.com/mastodon/mastodon/pull/12089)) +- Fix performance of home feed regeneration and merging ([Gargron](https://github.com/mastodon/mastodon/pull/12084)) +- Fix ffmpeg performance issues due to stdout buffer overflow ([hugogameiro](https://github.com/mastodon/mastodon/pull/12088)) +- Fix S3 adapter retrying failing uploads with exponential backoff ([Gargron](https://github.com/mastodon/mastodon/pull/12085)) +- Fix `tootctl accounts cull` advertising unused option flag ([Kjwon15](https://github.com/mastodon/mastodon/pull/12074)) ## [3.0.0] - 2019-10-03 ### Added -- Add "not available" label to unloaded media attachments in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11715), [Gargron](https://github.com/tootsuite/mastodon/pull/11745)) -- **Add profile directory to web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11688), [mayaeh](https://github.com/tootsuite/mastodon/pull/11872)) +- Add "not available" label to unloaded media attachments in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/11715), [Gargron](https://github.com/mastodon/mastodon/pull/11745)) +- **Add profile directory to web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/11688), [mayaeh](https://github.com/mastodon/mastodon/pull/11872)) - Add profile directory opt-in federation - Add profile directory REST API -- Add special alert for throttled requests in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11677)) -- Add confirmation modal when logging out from the web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11671)) -- **Add audio player in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11644), [Gargron](https://github.com/tootsuite/mastodon/pull/11652), [Gargron](https://github.com/tootsuite/mastodon/pull/11654), [ThibG](https://github.com/tootsuite/mastodon/pull/11629), [Gargron](https://github.com/tootsuite/mastodon/pull/12056)) -- **Add autosuggestions for hashtags in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11422), [ThibG](https://github.com/tootsuite/mastodon/pull/11632), [Gargron](https://github.com/tootsuite/mastodon/pull/11764), [Gargron](https://github.com/tootsuite/mastodon/pull/11588), [Gargron](https://github.com/tootsuite/mastodon/pull/11442)) -- **Add media editing modal with OCR tool in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11563), [Gargron](https://github.com/tootsuite/mastodon/pull/11566), [ThibG](https://github.com/tootsuite/mastodon/pull/11575), [ThibG](https://github.com/tootsuite/mastodon/pull/11576), [Gargron](https://github.com/tootsuite/mastodon/pull/11577), [Gargron](https://github.com/tootsuite/mastodon/pull/11573), [Gargron](https://github.com/tootsuite/mastodon/pull/11571)) -- Add indicator of unread notifications to window title when web UI is out of focus ([Gargron](https://github.com/tootsuite/mastodon/pull/11560), [Gargron](https://github.com/tootsuite/mastodon/pull/11572)) -- Add indicator for which options you voted for in a poll in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11195)) -- **Add search results pagination to web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11409), [ThibG](https://github.com/tootsuite/mastodon/pull/11447)) -- **Add option to disable real-time updates in web UI ("slow mode")** ([Gargron](https://github.com/tootsuite/mastodon/pull/9984), [ykzts](https://github.com/tootsuite/mastodon/pull/11880), [ThibG](https://github.com/tootsuite/mastodon/pull/11883), [Gargron](https://github.com/tootsuite/mastodon/pull/11898), [ThibG](https://github.com/tootsuite/mastodon/pull/11859)) -- Add option to disable blurhash previews in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11188)) -- Add native smooth scrolling when supported in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11207)) -- Add scrolling to the search bar on focus in web UI ([Kjwon15](https://github.com/tootsuite/mastodon/pull/12032)) -- Add refresh button to list of rebloggers/favouriters in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12031)) -- Add error description and button to copy stack trace to web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12033)) -- Add search and sort functions to hashtag admin UI ([mayaeh](https://github.com/tootsuite/mastodon/pull/11829), [Gargron](https://github.com/tootsuite/mastodon/pull/11897), [mayaeh](https://github.com/tootsuite/mastodon/pull/11875)) -- Add setting for default search engine indexing in admin UI ([brortao](https://github.com/tootsuite/mastodon/pull/11804)) -- Add account bio to account view in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11473)) -- **Add option to include reported statuses in warning e-mail from admin UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11639), [Gargron](https://github.com/tootsuite/mastodon/pull/11812), [Gargron](https://github.com/tootsuite/mastodon/pull/11741), [Gargron](https://github.com/tootsuite/mastodon/pull/11698), [mayaeh](https://github.com/tootsuite/mastodon/pull/11765)) -- Add number of pending accounts and pending hashtags to dashboard in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11514)) -- **Add account migration UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11846), [noellabo](https://github.com/tootsuite/mastodon/pull/11905), [noellabo](https://github.com/tootsuite/mastodon/pull/11907), [noellabo](https://github.com/tootsuite/mastodon/pull/11906), [noellabo](https://github.com/tootsuite/mastodon/pull/11902)) -- **Add table of contents to about page** ([Gargron](https://github.com/tootsuite/mastodon/pull/11885), [ykzts](https://github.com/tootsuite/mastodon/pull/11941), [ykzts](https://github.com/tootsuite/mastodon/pull/11895), [Kjwon15](https://github.com/tootsuite/mastodon/pull/11916)) -- **Add password challenge to 2FA settings, e-mail notifications** ([Gargron](https://github.com/tootsuite/mastodon/pull/11878)) -- **Add optional public list of domain blocks with comments** ([ThibG](https://github.com/tootsuite/mastodon/pull/11298), [ThibG](https://github.com/tootsuite/mastodon/pull/11515), [Gargron](https://github.com/tootsuite/mastodon/pull/11908)) -- Add an RSS feed for featured hashtags ([noellabo](https://github.com/tootsuite/mastodon/pull/10502)) -- Add explanations to featured hashtags UI and profile ([Gargron](https://github.com/tootsuite/mastodon/pull/11586)) -- **Add hashtag trends with admin and user settings** ([Gargron](https://github.com/tootsuite/mastodon/pull/11490), [Gargron](https://github.com/tootsuite/mastodon/pull/11502), [Gargron](https://github.com/tootsuite/mastodon/pull/11641), [Gargron](https://github.com/tootsuite/mastodon/pull/11594), [Gargron](https://github.com/tootsuite/mastodon/pull/11517), [mayaeh](https://github.com/tootsuite/mastodon/pull/11845), [Gargron](https://github.com/tootsuite/mastodon/pull/11774), [Gargron](https://github.com/tootsuite/mastodon/pull/11712), [Gargron](https://github.com/tootsuite/mastodon/pull/11791), [Gargron](https://github.com/tootsuite/mastodon/pull/11743), [Gargron](https://github.com/tootsuite/mastodon/pull/11740), [Gargron](https://github.com/tootsuite/mastodon/pull/11714), [ThibG](https://github.com/tootsuite/mastodon/pull/11631), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/11569), [Gargron](https://github.com/tootsuite/mastodon/pull/11524), [Gargron](https://github.com/tootsuite/mastodon/pull/11513)) +- Add special alert for throttled requests in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11677)) +- Add confirmation modal when logging out from the web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11671)) +- **Add audio player in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/11644), [Gargron](https://github.com/mastodon/mastodon/pull/11652), [Gargron](https://github.com/mastodon/mastodon/pull/11654), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11629), [Gargron](https://github.com/mastodon/mastodon/pull/12056)) +- **Add autosuggestions for hashtags in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/11422), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11632), [Gargron](https://github.com/mastodon/mastodon/pull/11764), [Gargron](https://github.com/mastodon/mastodon/pull/11588), [Gargron](https://github.com/mastodon/mastodon/pull/11442)) +- **Add media editing modal with OCR tool in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/11563), [Gargron](https://github.com/mastodon/mastodon/pull/11566), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11575), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11576), [Gargron](https://github.com/mastodon/mastodon/pull/11577), [Gargron](https://github.com/mastodon/mastodon/pull/11573), [Gargron](https://github.com/mastodon/mastodon/pull/11571)) +- Add indicator of unread notifications to window title when web UI is out of focus ([Gargron](https://github.com/mastodon/mastodon/pull/11560), [Gargron](https://github.com/mastodon/mastodon/pull/11572)) +- Add indicator for which options you voted for in a poll in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11195)) +- **Add search results pagination to web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/11409), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11447)) +- **Add option to disable real-time updates in web UI ("slow mode")** ([Gargron](https://github.com/mastodon/mastodon/pull/9984), [ykzts](https://github.com/mastodon/mastodon/pull/11880), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11883), [Gargron](https://github.com/mastodon/mastodon/pull/11898), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11859)) +- Add option to disable blurhash previews in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11188)) +- Add native smooth scrolling when supported in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11207)) +- Add scrolling to the search bar on focus in web UI ([Kjwon15](https://github.com/mastodon/mastodon/pull/12032)) +- Add refresh button to list of rebloggers/favouriters in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/12031)) +- Add error description and button to copy stack trace to web UI ([Gargron](https://github.com/mastodon/mastodon/pull/12033)) +- Add search and sort functions to hashtag admin UI ([mayaeh](https://github.com/mastodon/mastodon/pull/11829), [Gargron](https://github.com/mastodon/mastodon/pull/11897), [mayaeh](https://github.com/mastodon/mastodon/pull/11875)) +- Add setting for default search engine indexing in admin UI ([brortao](https://github.com/mastodon/mastodon/pull/11804)) +- Add account bio to account view in admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11473)) +- **Add option to include reported statuses in warning e-mail from admin UI** ([Gargron](https://github.com/mastodon/mastodon/pull/11639), [Gargron](https://github.com/mastodon/mastodon/pull/11812), [Gargron](https://github.com/mastodon/mastodon/pull/11741), [Gargron](https://github.com/mastodon/mastodon/pull/11698), [mayaeh](https://github.com/mastodon/mastodon/pull/11765)) +- Add number of pending accounts and pending hashtags to dashboard in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/11514)) +- **Add account migration UI** ([Gargron](https://github.com/mastodon/mastodon/pull/11846), [noellabo](https://github.com/mastodon/mastodon/pull/11905), [noellabo](https://github.com/mastodon/mastodon/pull/11907), [noellabo](https://github.com/mastodon/mastodon/pull/11906), [noellabo](https://github.com/mastodon/mastodon/pull/11902)) +- **Add table of contents to about page** ([Gargron](https://github.com/mastodon/mastodon/pull/11885), [ykzts](https://github.com/mastodon/mastodon/pull/11941), [ykzts](https://github.com/mastodon/mastodon/pull/11895), [Kjwon15](https://github.com/mastodon/mastodon/pull/11916)) +- **Add password challenge to 2FA settings, e-mail notifications** ([Gargron](https://github.com/mastodon/mastodon/pull/11878)) +- **Add optional public list of domain blocks with comments** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11298), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11515), [Gargron](https://github.com/mastodon/mastodon/pull/11908)) +- Add an RSS feed for featured hashtags ([noellabo](https://github.com/mastodon/mastodon/pull/10502)) +- Add explanations to featured hashtags UI and profile ([Gargron](https://github.com/mastodon/mastodon/pull/11586)) +- **Add hashtag trends with admin and user settings** ([Gargron](https://github.com/mastodon/mastodon/pull/11490), [Gargron](https://github.com/mastodon/mastodon/pull/11502), [Gargron](https://github.com/mastodon/mastodon/pull/11641), [Gargron](https://github.com/mastodon/mastodon/pull/11594), [Gargron](https://github.com/mastodon/mastodon/pull/11517), [mayaeh](https://github.com/mastodon/mastodon/pull/11845), [Gargron](https://github.com/mastodon/mastodon/pull/11774), [Gargron](https://github.com/mastodon/mastodon/pull/11712), [Gargron](https://github.com/mastodon/mastodon/pull/11791), [Gargron](https://github.com/mastodon/mastodon/pull/11743), [Gargron](https://github.com/mastodon/mastodon/pull/11740), [Gargron](https://github.com/mastodon/mastodon/pull/11714), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11631), [Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/11569), [Gargron](https://github.com/mastodon/mastodon/pull/11524), [Gargron](https://github.com/mastodon/mastodon/pull/11513)) - Add hashtag usage breakdown to admin UI - Add batch actions for hashtags to admin UI - Add trends to web UI - Add trends to public pages - Add user preference to hide trends - Add admin setting to disable trends -- **Add categories for custom emojis** ([Gargron](https://github.com/tootsuite/mastodon/pull/11196), [Gargron](https://github.com/tootsuite/mastodon/pull/11793), [Gargron](https://github.com/tootsuite/mastodon/pull/11920), [highemerly](https://github.com/tootsuite/mastodon/pull/11876)) +- **Add categories for custom emojis** ([Gargron](https://github.com/mastodon/mastodon/pull/11196), [Gargron](https://github.com/mastodon/mastodon/pull/11793), [Gargron](https://github.com/mastodon/mastodon/pull/11920), [highemerly](https://github.com/mastodon/mastodon/pull/11876)) - Add custom emoji categories to emoji picker in web UI - Add `category` to custom emojis in REST API - Add batch actions for custom emojis in admin UI -- Add max image dimensions to error message ([raboof](https://github.com/tootsuite/mastodon/pull/11552)) -- Add aac, m4a, 3gp, amr, wma to allowed audio formats ([Gargron](https://github.com/tootsuite/mastodon/pull/11342), [umonaca](https://github.com/tootsuite/mastodon/pull/11687)) -- **Add search syntax for operators and phrases** ([Gargron](https://github.com/tootsuite/mastodon/pull/11411)) -- **Add REST API for managing featured hashtags** ([noellabo](https://github.com/tootsuite/mastodon/pull/11778)) -- **Add REST API for managing timeline read markers** ([Gargron](https://github.com/tootsuite/mastodon/pull/11762)) -- Add `exclude_unreviewed` param to `GET /api/v2/search` REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/11977)) -- Add `reason` param to `POST /api/v1/accounts` REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/12064)) -- **Add ActivityPub secure mode** ([Gargron](https://github.com/tootsuite/mastodon/pull/11269), [ThibG](https://github.com/tootsuite/mastodon/pull/11332), [ThibG](https://github.com/tootsuite/mastodon/pull/11295)) -- Add HTTP signatures to all outgoing ActivityPub GET requests ([Gargron](https://github.com/tootsuite/mastodon/pull/11284), [ThibG](https://github.com/tootsuite/mastodon/pull/11300)) -- Add support for ActivityPub Audio activities ([ThibG](https://github.com/tootsuite/mastodon/pull/11189)) -- Add ActivityPub actor representing the entire server ([ThibG](https://github.com/tootsuite/mastodon/pull/11321), [rtucker](https://github.com/tootsuite/mastodon/pull/11400), [ThibG](https://github.com/tootsuite/mastodon/pull/11561), [Gargron](https://github.com/tootsuite/mastodon/pull/11798)) -- **Add whitelist mode** ([Gargron](https://github.com/tootsuite/mastodon/pull/11291), [mayaeh](https://github.com/tootsuite/mastodon/pull/11634)) -- Add config of multipart threshold for S3 ([ykzts](https://github.com/tootsuite/mastodon/pull/11924), [ykzts](https://github.com/tootsuite/mastodon/pull/11944)) -- Add health check endpoint for web ([ykzts](https://github.com/tootsuite/mastodon/pull/11770), [ykzts](https://github.com/tootsuite/mastodon/pull/11947)) -- Add HTTP signature keyId to request log ([Gargron](https://github.com/tootsuite/mastodon/pull/11591)) -- Add `SMTP_REPLY_TO` environment variable ([hugogameiro](https://github.com/tootsuite/mastodon/pull/11718)) -- Add `tootctl preview_cards remove` command ([mayaeh](https://github.com/tootsuite/mastodon/pull/11320)) -- Add `tootctl media refresh` command ([Gargron](https://github.com/tootsuite/mastodon/pull/11775)) -- Add `tootctl cache recount` command ([Gargron](https://github.com/tootsuite/mastodon/pull/11597)) -- Add option to exclude suspended domains from `tootctl domains crawl` ([dariusk](https://github.com/tootsuite/mastodon/pull/11454)) -- Add parallelization to `tootctl search deploy` ([noellabo](https://github.com/tootsuite/mastodon/pull/12051)) -- Add soft delete for statuses for instant deletes through API ([Gargron](https://github.com/tootsuite/mastodon/pull/11623), [Gargron](https://github.com/tootsuite/mastodon/pull/11648)) -- Add rails-level JSON caching ([Gargron](https://github.com/tootsuite/mastodon/pull/11333), [Gargron](https://github.com/tootsuite/mastodon/pull/11271)) -- **Add request pool to improve delivery performance** ([Gargron](https://github.com/tootsuite/mastodon/pull/10353), [ykzts](https://github.com/tootsuite/mastodon/pull/11756)) -- Add concurrent connection attempts to resolved IP addresses ([ThibG](https://github.com/tootsuite/mastodon/pull/11757)) -- Add index for remember_token to improve login performance ([abcang](https://github.com/tootsuite/mastodon/pull/11881)) -- **Add more accurate hashtag search** ([Gargron](https://github.com/tootsuite/mastodon/pull/11579), [Gargron](https://github.com/tootsuite/mastodon/pull/11427), [Gargron](https://github.com/tootsuite/mastodon/pull/11448)) -- **Add more accurate account search** ([Gargron](https://github.com/tootsuite/mastodon/pull/11537), [Gargron](https://github.com/tootsuite/mastodon/pull/11580)) -- **Add a spam check** ([Gargron](https://github.com/tootsuite/mastodon/pull/11217), [Gargron](https://github.com/tootsuite/mastodon/pull/11806), [ThibG](https://github.com/tootsuite/mastodon/pull/11296)) -- Add new languages ([Gargron](https://github.com/tootsuite/mastodon/pull/12062)) +- Add max image dimensions to error message ([raboof](https://github.com/mastodon/mastodon/pull/11552)) +- Add aac, m4a, 3gp, amr, wma to allowed audio formats ([Gargron](https://github.com/mastodon/mastodon/pull/11342), [umonaca](https://github.com/mastodon/mastodon/pull/11687)) +- **Add search syntax for operators and phrases** ([Gargron](https://github.com/mastodon/mastodon/pull/11411)) +- **Add REST API for managing featured hashtags** ([noellabo](https://github.com/mastodon/mastodon/pull/11778)) +- **Add REST API for managing timeline read markers** ([Gargron](https://github.com/mastodon/mastodon/pull/11762)) +- Add `exclude_unreviewed` param to `GET /api/v2/search` REST API ([Gargron](https://github.com/mastodon/mastodon/pull/11977)) +- Add `reason` param to `POST /api/v1/accounts` REST API ([Gargron](https://github.com/mastodon/mastodon/pull/12064)) +- **Add ActivityPub secure mode** ([Gargron](https://github.com/mastodon/mastodon/pull/11269), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11332), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11295)) +- Add HTTP signatures to all outgoing ActivityPub GET requests ([Gargron](https://github.com/mastodon/mastodon/pull/11284), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11300)) +- Add support for ActivityPub Audio activities ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11189)) +- Add ActivityPub actor representing the entire server ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11321), [rtucker](https://github.com/mastodon/mastodon/pull/11400), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11561), [Gargron](https://github.com/mastodon/mastodon/pull/11798)) +- **Add whitelist mode** ([Gargron](https://github.com/mastodon/mastodon/pull/11291), [mayaeh](https://github.com/mastodon/mastodon/pull/11634)) +- Add config of multipart threshold for S3 ([ykzts](https://github.com/mastodon/mastodon/pull/11924), [ykzts](https://github.com/mastodon/mastodon/pull/11944)) +- Add health check endpoint for web ([ykzts](https://github.com/mastodon/mastodon/pull/11770), [ykzts](https://github.com/mastodon/mastodon/pull/11947)) +- Add HTTP signature keyId to request log ([Gargron](https://github.com/mastodon/mastodon/pull/11591)) +- Add `SMTP_REPLY_TO` environment variable ([hugogameiro](https://github.com/mastodon/mastodon/pull/11718)) +- Add `tootctl preview_cards remove` command ([mayaeh](https://github.com/mastodon/mastodon/pull/11320)) +- Add `tootctl media refresh` command ([Gargron](https://github.com/mastodon/mastodon/pull/11775)) +- Add `tootctl cache recount` command ([Gargron](https://github.com/mastodon/mastodon/pull/11597)) +- Add option to exclude suspended domains from `tootctl domains crawl` ([dariusk](https://github.com/mastodon/mastodon/pull/11454)) +- Add parallelization to `tootctl search deploy` ([noellabo](https://github.com/mastodon/mastodon/pull/12051)) +- Add soft delete for statuses for instant deletes through API ([Gargron](https://github.com/mastodon/mastodon/pull/11623), [Gargron](https://github.com/mastodon/mastodon/pull/11648)) +- Add rails-level JSON caching ([Gargron](https://github.com/mastodon/mastodon/pull/11333), [Gargron](https://github.com/mastodon/mastodon/pull/11271)) +- **Add request pool to improve delivery performance** ([Gargron](https://github.com/mastodon/mastodon/pull/10353), [ykzts](https://github.com/mastodon/mastodon/pull/11756)) +- Add concurrent connection attempts to resolved IP addresses ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11757)) +- Add index for remember_token to improve login performance ([abcang](https://github.com/mastodon/mastodon/pull/11881)) +- **Add more accurate hashtag search** ([Gargron](https://github.com/mastodon/mastodon/pull/11579), [Gargron](https://github.com/mastodon/mastodon/pull/11427), [Gargron](https://github.com/mastodon/mastodon/pull/11448)) +- **Add more accurate account search** ([Gargron](https://github.com/mastodon/mastodon/pull/11537), [Gargron](https://github.com/mastodon/mastodon/pull/11580)) +- **Add a spam check** ([Gargron](https://github.com/mastodon/mastodon/pull/11217), [Gargron](https://github.com/mastodon/mastodon/pull/11806), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11296)) +- Add new languages ([Gargron](https://github.com/mastodon/mastodon/pull/12062)) - Breton - Spanish (Argentina) - Estonian - Macedonian - New Norwegian -- Add NodeInfo endpoint ([Gargron](https://github.com/tootsuite/mastodon/pull/12002), [Gargron](https://github.com/tootsuite/mastodon/pull/12058)) +- Add NodeInfo endpoint ([Gargron](https://github.com/mastodon/mastodon/pull/12002), [Gargron](https://github.com/mastodon/mastodon/pull/12058)) ### Changed -- **Change conversations UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11896)) -- Change dashboard to short number notation ([noellabo](https://github.com/tootsuite/mastodon/pull/11847), [noellabo](https://github.com/tootsuite/mastodon/pull/11911)) -- Change REST API `GET /api/v1/timelines/public` to require authentication when public preview is off ([ThibG](https://github.com/tootsuite/mastodon/pull/11802)) -- Change REST API `POST /api/v1/follow_requests/:id/(approve|reject)` to return relationship ([ThibG](https://github.com/tootsuite/mastodon/pull/11800)) -- Change rate limit for media proxy ([ykzts](https://github.com/tootsuite/mastodon/pull/11814)) -- Change unlisted custom emoji to not appear in autosuggestions ([Gargron](https://github.com/tootsuite/mastodon/pull/11818)) -- Change max length of media descriptions from 420 to 1500 characters ([Gargron](https://github.com/tootsuite/mastodon/pull/11819), [ThibG](https://github.com/tootsuite/mastodon/pull/11836)) -- **Change deletes to preserve soft-deleted statuses in unresolved reports** ([Gargron](https://github.com/tootsuite/mastodon/pull/11805)) -- **Change tootctl to use inline parallelization instead of Sidekiq** ([Gargron](https://github.com/tootsuite/mastodon/pull/11776)) -- **Change account deletion page to have better explanations** ([Gargron](https://github.com/tootsuite/mastodon/pull/11753), [Gargron](https://github.com/tootsuite/mastodon/pull/11763)) -- Change hashtag component in web UI to show numbers for 2 last days ([Gargron](https://github.com/tootsuite/mastodon/pull/11742), [Gargron](https://github.com/tootsuite/mastodon/pull/11755), [Gargron](https://github.com/tootsuite/mastodon/pull/11754)) -- Change OpenGraph description on sign-up page to reflect invite ([Gargron](https://github.com/tootsuite/mastodon/pull/11744)) -- Change layout of public profile directory to be the same as in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11705)) -- Change detailed status child ordering to sort self-replies on top ([ThibG](https://github.com/tootsuite/mastodon/pull/11686)) -- Change window resize handler to switch to/from mobile layout as soon as needed ([ThibG](https://github.com/tootsuite/mastodon/pull/11656)) -- Change icon button styles to make hover/focus states more obvious ([ThibG](https://github.com/tootsuite/mastodon/pull/11474)) -- Change contrast of status links that are not mentions or hashtags ([ThibG](https://github.com/tootsuite/mastodon/pull/11406)) -- **Change hashtags to preserve first-used casing** ([Gargron](https://github.com/tootsuite/mastodon/pull/11416), [Gargron](https://github.com/tootsuite/mastodon/pull/11508), [Gargron](https://github.com/tootsuite/mastodon/pull/11504), [Gargron](https://github.com/tootsuite/mastodon/pull/11507), [Gargron](https://github.com/tootsuite/mastodon/pull/11441)) -- **Change unconfirmed user login behaviour** ([Gargron](https://github.com/tootsuite/mastodon/pull/11375), [ThibG](https://github.com/tootsuite/mastodon/pull/11394), [Gargron](https://github.com/tootsuite/mastodon/pull/11860)) -- **Change single-column mode to scroll the whole page** ([Gargron](https://github.com/tootsuite/mastodon/pull/11359), [Gargron](https://github.com/tootsuite/mastodon/pull/11894), [Gargron](https://github.com/tootsuite/mastodon/pull/11891), [ThibG](https://github.com/tootsuite/mastodon/pull/11655), [Gargron](https://github.com/tootsuite/mastodon/pull/11463), [Gargron](https://github.com/tootsuite/mastodon/pull/11458), [ThibG](https://github.com/tootsuite/mastodon/pull/11395), [Gargron](https://github.com/tootsuite/mastodon/pull/11418)) -- Change `tootctl accounts follow` to only work with local accounts ([angristan](https://github.com/tootsuite/mastodon/pull/11592)) -- Change Dockerfile ([Shleeble](https://github.com/tootsuite/mastodon/pull/11710), [ykzts](https://github.com/tootsuite/mastodon/pull/11768), [Shleeble](https://github.com/tootsuite/mastodon/pull/11707)) -- Change supported Node versions to include v12 ([abcang](https://github.com/tootsuite/mastodon/pull/11706)) -- Change Portuguese language from `pt` to `pt-PT` ([Gargron](https://github.com/tootsuite/mastodon/pull/11820)) -- Change domain block silence to always require approval on follow ([ThibG](https://github.com/tootsuite/mastodon/pull/11975)) -- Change link preview fetcher to not perform a HEAD request first ([Gargron](https://github.com/tootsuite/mastodon/pull/12028)) -- Change `tootctl domains purge` to accept multiple domains at once ([Gargron](https://github.com/tootsuite/mastodon/pull/12046)) +- **Change conversations UI** ([Gargron](https://github.com/mastodon/mastodon/pull/11896)) +- Change dashboard to short number notation ([noellabo](https://github.com/mastodon/mastodon/pull/11847), [noellabo](https://github.com/mastodon/mastodon/pull/11911)) +- Change REST API `GET /api/v1/timelines/public` to require authentication when public preview is off ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11802)) +- Change REST API `POST /api/v1/follow_requests/:id/(approve|reject)` to return relationship ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11800)) +- Change rate limit for media proxy ([ykzts](https://github.com/mastodon/mastodon/pull/11814)) +- Change unlisted custom emoji to not appear in autosuggestions ([Gargron](https://github.com/mastodon/mastodon/pull/11818)) +- Change max length of media descriptions from 420 to 1500 characters ([Gargron](https://github.com/mastodon/mastodon/pull/11819), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11836)) +- **Change deletes to preserve soft-deleted statuses in unresolved reports** ([Gargron](https://github.com/mastodon/mastodon/pull/11805)) +- **Change tootctl to use inline parallelization instead of Sidekiq** ([Gargron](https://github.com/mastodon/mastodon/pull/11776)) +- **Change account deletion page to have better explanations** ([Gargron](https://github.com/mastodon/mastodon/pull/11753), [Gargron](https://github.com/mastodon/mastodon/pull/11763)) +- Change hashtag component in web UI to show numbers for 2 last days ([Gargron](https://github.com/mastodon/mastodon/pull/11742), [Gargron](https://github.com/mastodon/mastodon/pull/11755), [Gargron](https://github.com/mastodon/mastodon/pull/11754)) +- Change OpenGraph description on sign-up page to reflect invite ([Gargron](https://github.com/mastodon/mastodon/pull/11744)) +- Change layout of public profile directory to be the same as in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/11705)) +- Change detailed status child ordering to sort self-replies on top ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11686)) +- Change window resize handler to switch to/from mobile layout as soon as needed ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11656)) +- Change icon button styles to make hover/focus states more obvious ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11474)) +- Change contrast of status links that are not mentions or hashtags ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11406)) +- **Change hashtags to preserve first-used casing** ([Gargron](https://github.com/mastodon/mastodon/pull/11416), [Gargron](https://github.com/mastodon/mastodon/pull/11508), [Gargron](https://github.com/mastodon/mastodon/pull/11504), [Gargron](https://github.com/mastodon/mastodon/pull/11507), [Gargron](https://github.com/mastodon/mastodon/pull/11441)) +- **Change unconfirmed user login behaviour** ([Gargron](https://github.com/mastodon/mastodon/pull/11375), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11394), [Gargron](https://github.com/mastodon/mastodon/pull/11860)) +- **Change single-column mode to scroll the whole page** ([Gargron](https://github.com/mastodon/mastodon/pull/11359), [Gargron](https://github.com/mastodon/mastodon/pull/11894), [Gargron](https://github.com/mastodon/mastodon/pull/11891), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11655), [Gargron](https://github.com/mastodon/mastodon/pull/11463), [Gargron](https://github.com/mastodon/mastodon/pull/11458), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11395), [Gargron](https://github.com/mastodon/mastodon/pull/11418)) +- Change `tootctl accounts follow` to only work with local accounts ([angristan](https://github.com/mastodon/mastodon/pull/11592)) +- Change Dockerfile ([Shleeble](https://github.com/mastodon/mastodon/pull/11710), [ykzts](https://github.com/mastodon/mastodon/pull/11768), [Shleeble](https://github.com/mastodon/mastodon/pull/11707)) +- Change supported Node versions to include v12 ([abcang](https://github.com/mastodon/mastodon/pull/11706)) +- Change Portuguese language from `pt` to `pt-PT` ([Gargron](https://github.com/mastodon/mastodon/pull/11820)) +- Change domain block silence to always require approval on follow ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11975)) +- Change link preview fetcher to not perform a HEAD request first ([Gargron](https://github.com/mastodon/mastodon/pull/12028)) +- Change `tootctl domains purge` to accept multiple domains at once ([Gargron](https://github.com/mastodon/mastodon/pull/12046)) ### Removed -- **Remove OStatus support** ([Gargron](https://github.com/tootsuite/mastodon/pull/11205), [Gargron](https://github.com/tootsuite/mastodon/pull/11303), [Gargron](https://github.com/tootsuite/mastodon/pull/11460), [ThibG](https://github.com/tootsuite/mastodon/pull/11280), [ThibG](https://github.com/tootsuite/mastodon/pull/11278)) -- Remove Atom feeds and old URLs in the form of `GET /:username/updates/:id` ([Gargron](https://github.com/tootsuite/mastodon/pull/11247)) -- Remove WebP support ([angristan](https://github.com/tootsuite/mastodon/pull/11589)) -- Remove deprecated config options from Heroku and Scalingo ([ykzts](https://github.com/tootsuite/mastodon/pull/11925)) -- Remove deprecated REST API `GET /api/v1/search` API ([Gargron](https://github.com/tootsuite/mastodon/pull/11823)) -- Remove deprecated REST API `GET /api/v1/statuses/:id/card` ([Gargron](https://github.com/tootsuite/mastodon/pull/11213)) -- Remove deprecated REST API `POST /api/v1/notifications/dismiss?id=:id` ([Gargron](https://github.com/tootsuite/mastodon/pull/11214)) -- Remove deprecated REST API `GET /api/v1/timelines/direct` ([Gargron](https://github.com/tootsuite/mastodon/pull/11212)) +- **Remove OStatus support** ([Gargron](https://github.com/mastodon/mastodon/pull/11205), [Gargron](https://github.com/mastodon/mastodon/pull/11303), [Gargron](https://github.com/mastodon/mastodon/pull/11460), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11280), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11278)) +- Remove Atom feeds and old URLs in the form of `GET /:username/updates/:id` ([Gargron](https://github.com/mastodon/mastodon/pull/11247)) +- Remove WebP support ([angristan](https://github.com/mastodon/mastodon/pull/11589)) +- Remove deprecated config options from Heroku and Scalingo ([ykzts](https://github.com/mastodon/mastodon/pull/11925)) +- Remove deprecated REST API `GET /api/v1/search` API ([Gargron](https://github.com/mastodon/mastodon/pull/11823)) +- Remove deprecated REST API `GET /api/v1/statuses/:id/card` ([Gargron](https://github.com/mastodon/mastodon/pull/11213)) +- Remove deprecated REST API `POST /api/v1/notifications/dismiss?id=:id` ([Gargron](https://github.com/mastodon/mastodon/pull/11214)) +- Remove deprecated REST API `GET /api/v1/timelines/direct` ([Gargron](https://github.com/mastodon/mastodon/pull/11212)) ### Fixed -- Fix manifest warning ([ykzts](https://github.com/tootsuite/mastodon/pull/11767)) -- Fix admin UI for custom emoji not respecting GIF autoplay preference ([ThibG](https://github.com/tootsuite/mastodon/pull/11801)) -- Fix page body not being scrollable in admin/settings layout ([Gargron](https://github.com/tootsuite/mastodon/pull/11893)) -- Fix placeholder colors for inputs not being explicitly defined ([Gargron](https://github.com/tootsuite/mastodon/pull/11890)) -- Fix incorrect enclosure length in RSS ([tsia](https://github.com/tootsuite/mastodon/pull/11889)) -- Fix TOTP codes not being filtered from logs during enabling/disabling ([Gargron](https://github.com/tootsuite/mastodon/pull/11877)) -- Fix webfinger response not returning 410 when account is suspended ([Gargron](https://github.com/tootsuite/mastodon/pull/11869)) -- Fix ActivityPub Move handler queuing jobs that will fail if account is suspended ([Gargron](https://github.com/tootsuite/mastodon/pull/11864)) -- Fix SSO login not using existing account when e-mail is verified ([Gargron](https://github.com/tootsuite/mastodon/pull/11862)) -- Fix web UI allowing uploads past status limit via drag & drop ([Gargron](https://github.com/tootsuite/mastodon/pull/11863)) -- Fix expiring polls not being displayed as such in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11835)) -- Fix 2FA challenge and password challenge for non-database users ([Gargron](https://github.com/tootsuite/mastodon/pull/11831), [Gargron](https://github.com/tootsuite/mastodon/pull/11943)) -- Fix profile fields overflowing page width in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11828)) -- Fix web push subscriptions being deleted on rate limit or timeout ([Gargron](https://github.com/tootsuite/mastodon/pull/11826)) -- Fix display of long poll options in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11717), [ThibG](https://github.com/tootsuite/mastodon/pull/11833)) -- Fix search API not resolving URL when `type` is given ([Gargron](https://github.com/tootsuite/mastodon/pull/11822)) -- Fix hashtags being split by ZWNJ character ([Gargron](https://github.com/tootsuite/mastodon/pull/11821)) -- Fix scroll position resetting when opening media modals in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11815)) -- Fix duplicate HTML IDs on about page ([ThibG](https://github.com/tootsuite/mastodon/pull/11803)) -- Fix admin UI showing superfluous reject media/reports on suspended domain blocks ([ThibG](https://github.com/tootsuite/mastodon/pull/11749)) -- Fix ActivityPub context not being dynamically computed ([ThibG](https://github.com/tootsuite/mastodon/pull/11746)) -- Fix Mastodon logo style on hover on public pages' footer ([ThibG](https://github.com/tootsuite/mastodon/pull/11735)) -- Fix height of dashboard counters ([ThibG](https://github.com/tootsuite/mastodon/pull/11736)) -- Fix custom emoji animation on hover in web UI directory bios ([ThibG](https://github.com/tootsuite/mastodon/pull/11716)) -- Fix non-numbers being passed to Redis and causing an error ([Gargron](https://github.com/tootsuite/mastodon/pull/11697)) -- Fix error in REST API for an account's statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/11700)) -- Fix uncaught error when resource param is missing in Webfinger request ([Gargron](https://github.com/tootsuite/mastodon/pull/11701)) -- Fix uncaught domain normalization error in remote follow ([Gargron](https://github.com/tootsuite/mastodon/pull/11703)) -- Fix uncaught 422 and 500 errors ([Gargron](https://github.com/tootsuite/mastodon/pull/11590), [Gargron](https://github.com/tootsuite/mastodon/pull/11811)) -- Fix uncaught parameter missing exceptions and missing error templates ([Gargron](https://github.com/tootsuite/mastodon/pull/11702)) -- Fix encoding error when checking e-mail MX records ([Gargron](https://github.com/tootsuite/mastodon/pull/11696)) -- Fix items in StatusContent render list not all having a key ([ThibG](https://github.com/tootsuite/mastodon/pull/11645)) -- Fix remote and staff-removed statuses leaving media behind for a day ([Gargron](https://github.com/tootsuite/mastodon/pull/11638)) -- Fix CSP needlessly allowing blob URLs in script-src ([ThibG](https://github.com/tootsuite/mastodon/pull/11620)) -- Fix ignoring whole status because of one invalid hashtag ([Gargron](https://github.com/tootsuite/mastodon/pull/11621)) -- Fix hidden statuses losing focus ([ThibG](https://github.com/tootsuite/mastodon/pull/11208)) -- Fix loading bar being obscured by other elements in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11598)) -- Fix multiple issues with replies collection for pages further than self-replies ([ThibG](https://github.com/tootsuite/mastodon/pull/11582)) -- Fix blurhash and autoplay not working on public pages ([Gargron](https://github.com/tootsuite/mastodon/pull/11585)) -- Fix 422 being returned instead of 404 when POSTing to unmatched routes ([Gargron](https://github.com/tootsuite/mastodon/pull/11574), [Gargron](https://github.com/tootsuite/mastodon/pull/11704)) -- Fix client-side resizing of image uploads ([ThibG](https://github.com/tootsuite/mastodon/pull/11570)) -- Fix short number formatting for numbers above million in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11559)) -- Fix ActivityPub and REST API queries setting cookies and preventing caching ([ThibG](https://github.com/tootsuite/mastodon/pull/11539), [ThibG](https://github.com/tootsuite/mastodon/pull/11557), [ThibG](https://github.com/tootsuite/mastodon/pull/11336), [ThibG](https://github.com/tootsuite/mastodon/pull/11331)) -- Fix some emojis in profile metadata labels are not emojified. ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/11534)) -- Fix account search always returning exact match on paginated results ([Gargron](https://github.com/tootsuite/mastodon/pull/11525)) -- Fix acct URIs with IDN domains not being resolved ([Gargron](https://github.com/tootsuite/mastodon/pull/11520)) -- Fix admin dashboard missing latest features ([Gargron](https://github.com/tootsuite/mastodon/pull/11505)) -- Fix jumping of toot date when clicking spoiler button ([ariasuni](https://github.com/tootsuite/mastodon/pull/11449)) -- Fix boost to original audience not working on mobile in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11371)) -- Fix handling of webfinger redirects in ResolveAccountService ([ThibG](https://github.com/tootsuite/mastodon/pull/11279)) -- Fix URLs appearing twice in errors of ActivityPub::DeliveryWorker ([Gargron](https://github.com/tootsuite/mastodon/pull/11231)) -- Fix support for HTTP proxies ([ThibG](https://github.com/tootsuite/mastodon/pull/11245)) -- Fix HTTP requests to IPv6 hosts ([ThibG](https://github.com/tootsuite/mastodon/pull/11240)) -- Fix error in ElasticSearch index import ([mayaeh](https://github.com/tootsuite/mastodon/pull/11192)) -- Fix duplicate account error when seeding development database ([ysksn](https://github.com/tootsuite/mastodon/pull/11366)) -- Fix performance of session clean-up scheduler ([abcang](https://github.com/tootsuite/mastodon/pull/11871)) -- Fix older migrations not running ([zunda](https://github.com/tootsuite/mastodon/pull/11377)) -- Fix URLs counting towards RTL detection ([ahangarha](https://github.com/tootsuite/mastodon/pull/11759)) -- Fix unnecessary status re-rendering in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11211)) -- Fix http_parser.rb gem not being compiled when no network available ([petabyteboy](https://github.com/tootsuite/mastodon/pull/11444)) -- Fix muted text color not applying to all text ([trwnh](https://github.com/tootsuite/mastodon/pull/11996)) -- Fix follower/following lists resetting on back-navigation in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11986)) -- Fix n+1 query when approving multiple follow requests ([abcang](https://github.com/tootsuite/mastodon/pull/12004)) -- Fix records not being indexed into ElasticSearch sometimes ([Gargron](https://github.com/tootsuite/mastodon/pull/12024)) -- Fix needlessly indexing unsearchable statuses into ElasticSearch ([Gargron](https://github.com/tootsuite/mastodon/pull/12041)) -- Fix new user bootstrapping crashing when to-be-followed accounts are invalid ([ThibG](https://github.com/tootsuite/mastodon/pull/12037)) -- Fix featured hashtag URL being interpreted as media or replies tab ([Gargron](https://github.com/tootsuite/mastodon/pull/12048)) -- Fix account counters being overwritten by parallel writes ([Gargron](https://github.com/tootsuite/mastodon/pull/12045)) +- Fix manifest warning ([ykzts](https://github.com/mastodon/mastodon/pull/11767)) +- Fix admin UI for custom emoji not respecting GIF autoplay preference ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11801)) +- Fix page body not being scrollable in admin/settings layout ([Gargron](https://github.com/mastodon/mastodon/pull/11893)) +- Fix placeholder colors for inputs not being explicitly defined ([Gargron](https://github.com/mastodon/mastodon/pull/11890)) +- Fix incorrect enclosure length in RSS ([tsia](https://github.com/mastodon/mastodon/pull/11889)) +- Fix TOTP codes not being filtered from logs during enabling/disabling ([Gargron](https://github.com/mastodon/mastodon/pull/11877)) +- Fix webfinger response not returning 410 when account is suspended ([Gargron](https://github.com/mastodon/mastodon/pull/11869)) +- Fix ActivityPub Move handler queuing jobs that will fail if account is suspended ([Gargron](https://github.com/mastodon/mastodon/pull/11864)) +- Fix SSO login not using existing account when e-mail is verified ([Gargron](https://github.com/mastodon/mastodon/pull/11862)) +- Fix web UI allowing uploads past status limit via drag & drop ([Gargron](https://github.com/mastodon/mastodon/pull/11863)) +- Fix expiring polls not being displayed as such in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11835)) +- Fix 2FA challenge and password challenge for non-database users ([Gargron](https://github.com/mastodon/mastodon/pull/11831), [Gargron](https://github.com/mastodon/mastodon/pull/11943)) +- Fix profile fields overflowing page width in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/11828)) +- Fix web push subscriptions being deleted on rate limit or timeout ([Gargron](https://github.com/mastodon/mastodon/pull/11826)) +- Fix display of long poll options in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11717), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11833)) +- Fix search API not resolving URL when `type` is given ([Gargron](https://github.com/mastodon/mastodon/pull/11822)) +- Fix hashtags being split by ZWNJ character ([Gargron](https://github.com/mastodon/mastodon/pull/11821)) +- Fix scroll position resetting when opening media modals in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/11815)) +- Fix duplicate HTML IDs on about page ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11803)) +- Fix admin UI showing superfluous reject media/reports on suspended domain blocks ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11749)) +- Fix ActivityPub context not being dynamically computed ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11746)) +- Fix Mastodon logo style on hover on public pages' footer ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11735)) +- Fix height of dashboard counters ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11736)) +- Fix custom emoji animation on hover in web UI directory bios ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11716)) +- Fix non-numbers being passed to Redis and causing an error ([Gargron](https://github.com/mastodon/mastodon/pull/11697)) +- Fix error in REST API for an account's statuses ([Gargron](https://github.com/mastodon/mastodon/pull/11700)) +- Fix uncaught error when resource param is missing in Webfinger request ([Gargron](https://github.com/mastodon/mastodon/pull/11701)) +- Fix uncaught domain normalization error in remote follow ([Gargron](https://github.com/mastodon/mastodon/pull/11703)) +- Fix uncaught 422 and 500 errors ([Gargron](https://github.com/mastodon/mastodon/pull/11590), [Gargron](https://github.com/mastodon/mastodon/pull/11811)) +- Fix uncaught parameter missing exceptions and missing error templates ([Gargron](https://github.com/mastodon/mastodon/pull/11702)) +- Fix encoding error when checking e-mail MX records ([Gargron](https://github.com/mastodon/mastodon/pull/11696)) +- Fix items in StatusContent render list not all having a key ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11645)) +- Fix remote and staff-removed statuses leaving media behind for a day ([Gargron](https://github.com/mastodon/mastodon/pull/11638)) +- Fix CSP needlessly allowing blob URLs in script-src ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11620)) +- Fix ignoring whole status because of one invalid hashtag ([Gargron](https://github.com/mastodon/mastodon/pull/11621)) +- Fix hidden statuses losing focus ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11208)) +- Fix loading bar being obscured by other elements in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/11598)) +- Fix multiple issues with replies collection for pages further than self-replies ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11582)) +- Fix blurhash and autoplay not working on public pages ([Gargron](https://github.com/mastodon/mastodon/pull/11585)) +- Fix 422 being returned instead of 404 when POSTing to unmatched routes ([Gargron](https://github.com/mastodon/mastodon/pull/11574), [Gargron](https://github.com/mastodon/mastodon/pull/11704)) +- Fix client-side resizing of image uploads ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11570)) +- Fix short number formatting for numbers above million in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/11559)) +- Fix ActivityPub and REST API queries setting cookies and preventing caching ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11539), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11557), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11336), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11331)) +- Fix some emojis in profile metadata labels are not emojified. ([kedamaDQ](https://github.com/mastodon/mastodon/pull/11534)) +- Fix account search always returning exact match on paginated results ([Gargron](https://github.com/mastodon/mastodon/pull/11525)) +- Fix acct URIs with IDN domains not being resolved ([Gargron](https://github.com/mastodon/mastodon/pull/11520)) +- Fix admin dashboard missing latest features ([Gargron](https://github.com/mastodon/mastodon/pull/11505)) +- Fix jumping of toot date when clicking spoiler button ([ariasuni](https://github.com/mastodon/mastodon/pull/11449)) +- Fix boost to original audience not working on mobile in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11371)) +- Fix handling of webfinger redirects in ResolveAccountService ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11279)) +- Fix URLs appearing twice in errors of ActivityPub::DeliveryWorker ([Gargron](https://github.com/mastodon/mastodon/pull/11231)) +- Fix support for HTTP proxies ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11245)) +- Fix HTTP requests to IPv6 hosts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11240)) +- Fix error in ElasticSearch index import ([mayaeh](https://github.com/mastodon/mastodon/pull/11192)) +- Fix duplicate account error when seeding development database ([ysksn](https://github.com/mastodon/mastodon/pull/11366)) +- Fix performance of session clean-up scheduler ([abcang](https://github.com/mastodon/mastodon/pull/11871)) +- Fix older migrations not running ([zunda](https://github.com/mastodon/mastodon/pull/11377)) +- Fix URLs counting towards RTL detection ([ahangarha](https://github.com/mastodon/mastodon/pull/11759)) +- Fix unnecessary status re-rendering in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11211)) +- Fix http_parser.rb gem not being compiled when no network available ([petabyteboy](https://github.com/mastodon/mastodon/pull/11444)) +- Fix muted text color not applying to all text ([trwnh](https://github.com/mastodon/mastodon/pull/11996)) +- Fix follower/following lists resetting on back-navigation in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/11986)) +- Fix n+1 query when approving multiple follow requests ([abcang](https://github.com/mastodon/mastodon/pull/12004)) +- Fix records not being indexed into ElasticSearch sometimes ([Gargron](https://github.com/mastodon/mastodon/pull/12024)) +- Fix needlessly indexing unsearchable statuses into ElasticSearch ([Gargron](https://github.com/mastodon/mastodon/pull/12041)) +- Fix new user bootstrapping crashing when to-be-followed accounts are invalid ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/12037)) +- Fix featured hashtag URL being interpreted as media or replies tab ([Gargron](https://github.com/mastodon/mastodon/pull/12048)) +- Fix account counters being overwritten by parallel writes ([Gargron](https://github.com/mastodon/mastodon/pull/12045)) ### Security -- Fix performance of GIF re-encoding and always strip EXIF data from videos ([Gargron](https://github.com/tootsuite/mastodon/pull/12057)) +- Fix performance of GIF re-encoding and always strip EXIF data from videos ([Gargron](https://github.com/mastodon/mastodon/pull/12057)) ## [2.9.3] - 2019-08-10 ### Added -- Add GIF and WebP support for custom emojis ([Gargron](https://github.com/tootsuite/mastodon/pull/11519)) -- Add logout link to dropdown menu in web UI ([koyuawsmbrtn](https://github.com/tootsuite/mastodon/pull/11353)) -- Add indication that text search is unavailable in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11112), [ThibG](https://github.com/tootsuite/mastodon/pull/11202)) -- Add `suffix` to `Mastodon::Version` to help forks ([clarfon](https://github.com/tootsuite/mastodon/pull/11407)) -- Add on-hover animation to animated custom emoji in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11348), [ThibG](https://github.com/tootsuite/mastodon/pull/11404), [ThibG](https://github.com/tootsuite/mastodon/pull/11522)) -- Add custom emoji support in profile metadata labels ([ThibG](https://github.com/tootsuite/mastodon/pull/11350)) +- Add GIF and WebP support for custom emojis ([Gargron](https://github.com/mastodon/mastodon/pull/11519)) +- Add logout link to dropdown menu in web UI ([koyuawsmbrtn](https://github.com/mastodon/mastodon/pull/11353)) +- Add indication that text search is unavailable in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11112), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11202)) +- Add `suffix` to `Mastodon::Version` to help forks ([clarfon](https://github.com/mastodon/mastodon/pull/11407)) +- Add on-hover animation to animated custom emoji in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11348), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11404), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11522)) +- Add custom emoji support in profile metadata labels ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11350)) ### Changed -- Change default interface of web and streaming from 0.0.0.0 to 127.0.0.1 ([Gargron](https://github.com/tootsuite/mastodon/pull/11302), [zunda](https://github.com/tootsuite/mastodon/pull/11378), [Gargron](https://github.com/tootsuite/mastodon/pull/11351), [zunda](https://github.com/tootsuite/mastodon/pull/11326)) -- Change the retry limit of web push notifications ([highemerly](https://github.com/tootsuite/mastodon/pull/11292)) -- Change ActivityPub deliveries to not retry HTTP 501 errors ([Gargron](https://github.com/tootsuite/mastodon/pull/11233)) -- Change language detection to include hashtags as words ([Gargron](https://github.com/tootsuite/mastodon/pull/11341)) -- Change terms and privacy policy pages to always be accessible ([Gargron](https://github.com/tootsuite/mastodon/pull/11334)) -- Change robots tag to include `noarchive` when user opts out of indexing ([Kjwon15](https://github.com/tootsuite/mastodon/pull/11421)) +- Change default interface of web and streaming from 0.0.0.0 to 127.0.0.1 ([Gargron](https://github.com/mastodon/mastodon/pull/11302), [zunda](https://github.com/mastodon/mastodon/pull/11378), [Gargron](https://github.com/mastodon/mastodon/pull/11351), [zunda](https://github.com/mastodon/mastodon/pull/11326)) +- Change the retry limit of web push notifications ([highemerly](https://github.com/mastodon/mastodon/pull/11292)) +- Change ActivityPub deliveries to not retry HTTP 501 errors ([Gargron](https://github.com/mastodon/mastodon/pull/11233)) +- Change language detection to include hashtags as words ([Gargron](https://github.com/mastodon/mastodon/pull/11341)) +- Change terms and privacy policy pages to always be accessible ([Gargron](https://github.com/mastodon/mastodon/pull/11334)) +- Change robots tag to include `noarchive` when user opts out of indexing ([Kjwon15](https://github.com/mastodon/mastodon/pull/11421)) ### Fixed -- Fix account domain block not clearing out notifications ([Gargron](https://github.com/tootsuite/mastodon/pull/11393)) -- Fix incorrect locale sometimes being detected for browser ([Gargron](https://github.com/tootsuite/mastodon/pull/8657)) -- Fix crash when saving invalid domain name ([Gargron](https://github.com/tootsuite/mastodon/pull/11528)) -- Fix pinned statuses REST API returning pagination headers ([Gargron](https://github.com/tootsuite/mastodon/pull/11526)) -- Fix "cancel follow request" button having unreadable text in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11521)) -- Fix image uploads being blank when canvas read access is blocked ([ThibG](https://github.com/tootsuite/mastodon/pull/11499)) -- Fix avatars not being animated on hover when not logged in ([ThibG](https://github.com/tootsuite/mastodon/pull/11349)) -- Fix overzealous sanitization of HTML lists ([ThibG](https://github.com/tootsuite/mastodon/pull/11354)) -- Fix block crashing when a follow request exists ([ThibG](https://github.com/tootsuite/mastodon/pull/11288)) -- Fix backup service crashing when an attachment is missing ([ThibG](https://github.com/tootsuite/mastodon/pull/11241)) -- Fix account moderation action always sending e-mail notification ([Gargron](https://github.com/tootsuite/mastodon/pull/11242)) -- Fix swiping columns on mobile sometimes failing in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11200)) -- Fix wrong actor URI being serialized into poll updates ([ThibG](https://github.com/tootsuite/mastodon/pull/11194)) -- Fix statsd UDP sockets not being cleaned up in Sidekiq ([Gargron](https://github.com/tootsuite/mastodon/pull/11230)) -- Fix expiration date of filters being set to "never" when editing them ([ThibG](https://github.com/tootsuite/mastodon/pull/11204)) -- Fix support for MP4 files that are actually M4V files ([Gargron](https://github.com/tootsuite/mastodon/pull/11210)) -- Fix `alerts` not being typecast correctly in push subscription in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/11343)) -- Fix some notices staying on unrelated pages ([ThibG](https://github.com/tootsuite/mastodon/pull/11364)) -- Fix unboosting sometimes preventing a boost from reappearing on feed ([ThibG](https://github.com/tootsuite/mastodon/pull/11405), [Gargron](https://github.com/tootsuite/mastodon/pull/11450)) -- Fix only one middle dot being recognized in hashtags ([Gargron](https://github.com/tootsuite/mastodon/pull/11345), [ThibG](https://github.com/tootsuite/mastodon/pull/11363)) -- Fix unnecessary SQL query performed on unauthenticated requests ([Gargron](https://github.com/tootsuite/mastodon/pull/11179)) -- Fix incorrect timestamp displayed on featured tags ([Kjwon15](https://github.com/tootsuite/mastodon/pull/11477)) -- Fix privacy dropdown active state when dropdown is placed on top of it ([ThibG](https://github.com/tootsuite/mastodon/pull/11495)) -- Fix filters not being applied to poll options ([ThibG](https://github.com/tootsuite/mastodon/pull/11174)) -- Fix keyboard navigation on various dropdowns ([ThibG](https://github.com/tootsuite/mastodon/pull/11511), [ThibG](https://github.com/tootsuite/mastodon/pull/11492), [ThibG](https://github.com/tootsuite/mastodon/pull/11491)) -- Fix keyboard navigation in modals ([ThibG](https://github.com/tootsuite/mastodon/pull/11493)) -- Fix image conversation being non-deterministic due to timestamps ([Gargron](https://github.com/tootsuite/mastodon/pull/11408)) -- Fix web UI performance ([ThibG](https://github.com/tootsuite/mastodon/pull/11211), [ThibG](https://github.com/tootsuite/mastodon/pull/11234)) -- Fix scrolling to compose form when not necessary in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11246), [ThibG](https://github.com/tootsuite/mastodon/pull/11182)) -- Fix save button being enabled when list title is empty in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11475)) -- Fix poll expiration not being pre-filled on delete & redraft in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11203)) -- Fix content warning sometimes being set when not requested in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11206)) +- Fix account domain block not clearing out notifications ([Gargron](https://github.com/mastodon/mastodon/pull/11393)) +- Fix incorrect locale sometimes being detected for browser ([Gargron](https://github.com/mastodon/mastodon/pull/8657)) +- Fix crash when saving invalid domain name ([Gargron](https://github.com/mastodon/mastodon/pull/11528)) +- Fix pinned statuses REST API returning pagination headers ([Gargron](https://github.com/mastodon/mastodon/pull/11526)) +- Fix "cancel follow request" button having unreadable text in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/11521)) +- Fix image uploads being blank when canvas read access is blocked ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11499)) +- Fix avatars not being animated on hover when not logged in ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11349)) +- Fix overzealous sanitization of HTML lists ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11354)) +- Fix block crashing when a follow request exists ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11288)) +- Fix backup service crashing when an attachment is missing ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11241)) +- Fix account moderation action always sending e-mail notification ([Gargron](https://github.com/mastodon/mastodon/pull/11242)) +- Fix swiping columns on mobile sometimes failing in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11200)) +- Fix wrong actor URI being serialized into poll updates ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11194)) +- Fix statsd UDP sockets not being cleaned up in Sidekiq ([Gargron](https://github.com/mastodon/mastodon/pull/11230)) +- Fix expiration date of filters being set to "never" when editing them ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11204)) +- Fix support for MP4 files that are actually M4V files ([Gargron](https://github.com/mastodon/mastodon/pull/11210)) +- Fix `alerts` not being typecast correctly in push subscription in REST API ([Gargron](https://github.com/mastodon/mastodon/pull/11343)) +- Fix some notices staying on unrelated pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11364)) +- Fix unboosting sometimes preventing a boost from reappearing on feed ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11405), [Gargron](https://github.com/mastodon/mastodon/pull/11450)) +- Fix only one middle dot being recognized in hashtags ([Gargron](https://github.com/mastodon/mastodon/pull/11345), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11363)) +- Fix unnecessary SQL query performed on unauthenticated requests ([Gargron](https://github.com/mastodon/mastodon/pull/11179)) +- Fix incorrect timestamp displayed on featured tags ([Kjwon15](https://github.com/mastodon/mastodon/pull/11477)) +- Fix privacy dropdown active state when dropdown is placed on top of it ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11495)) +- Fix filters not being applied to poll options ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11174)) +- Fix keyboard navigation on various dropdowns ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11511), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11492), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11491)) +- Fix keyboard navigation in modals ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11493)) +- Fix image conversation being non-deterministic due to timestamps ([Gargron](https://github.com/mastodon/mastodon/pull/11408)) +- Fix web UI performance ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11211), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11234)) +- Fix scrolling to compose form when not necessary in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11246), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/11182)) +- Fix save button being enabled when list title is empty in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11475)) +- Fix poll expiration not being pre-filled on delete & redraft in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11203)) +- Fix content warning sometimes being set when not requested in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11206)) ### Security -- Fix invites not being disabled upon account suspension ([ThibG](https://github.com/tootsuite/mastodon/pull/11412)) -- Fix blocked domains still being able to fill database with account records ([Gargron](https://github.com/tootsuite/mastodon/pull/11219)) +- Fix invites not being disabled upon account suspension ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11412)) +- Fix blocked domains still being able to fill database with account records ([Gargron](https://github.com/mastodon/mastodon/pull/11219)) ## [2.9.2] - 2019-06-22 ### Added -- Add `short_description` and `approval_required` to `GET /api/v1/instance` ([Gargron](https://github.com/tootsuite/mastodon/pull/11146)) +- Add `short_description` and `approval_required` to `GET /api/v1/instance` ([Gargron](https://github.com/mastodon/mastodon/pull/11146)) ### Changed -- Change camera icon to paperclip icon in upload form ([koyuawsmbrtn](https://github.com/tootsuite/mastodon/pull/11149)) +- Change camera icon to paperclip icon in upload form ([koyuawsmbrtn](https://github.com/mastodon/mastodon/pull/11149)) ### Fixed -- Fix audio-only OGG and WebM files not being processed as such ([Gargron](https://github.com/tootsuite/mastodon/pull/11151)) -- Fix audio not being downloaded from remote servers ([Gargron](https://github.com/tootsuite/mastodon/pull/11145)) +- Fix audio-only OGG and WebM files not being processed as such ([Gargron](https://github.com/mastodon/mastodon/pull/11151)) +- Fix audio not being downloaded from remote servers ([Gargron](https://github.com/mastodon/mastodon/pull/11145)) ## [2.9.1] - 2019-06-22 ### Added -- Add moderation API ([Gargron](https://github.com/tootsuite/mastodon/pull/9387)) -- Add audio uploads ([Gargron](https://github.com/tootsuite/mastodon/pull/11123), [Gargron](https://github.com/tootsuite/mastodon/pull/11141)) +- Add moderation API ([Gargron](https://github.com/mastodon/mastodon/pull/9387)) +- Add audio uploads ([Gargron](https://github.com/mastodon/mastodon/pull/11123), [Gargron](https://github.com/mastodon/mastodon/pull/11141)) ### Changed -- Change domain blocks to automatically support subdomains ([Gargron](https://github.com/tootsuite/mastodon/pull/11138)) -- Change Nanobox configuration to bring it up to date ([danhunsaker](https://github.com/tootsuite/mastodon/pull/11083)) +- Change domain blocks to automatically support subdomains ([Gargron](https://github.com/mastodon/mastodon/pull/11138)) +- Change Nanobox configuration to bring it up to date ([danhunsaker](https://github.com/mastodon/mastodon/pull/11083)) ### Removed -- Remove expensive counters from federation page in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11139)) +- Remove expensive counters from federation page in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/11139)) ### Fixed -- Fix converted media being saved with original extension and mime type ([Gargron](https://github.com/tootsuite/mastodon/pull/11130)) -- Fix layout of identity proofs settings ([acid-chicken](https://github.com/tootsuite/mastodon/pull/11126)) -- Fix active scope only returning suspended users ([ThibG](https://github.com/tootsuite/mastodon/pull/11111)) -- Fix sanitizer making block level elements unreadable ([Gargron](https://github.com/tootsuite/mastodon/pull/10836)) -- Fix label for site theme not being translated in admin UI ([palindromordnilap](https://github.com/tootsuite/mastodon/pull/11121)) -- Fix statuses not being filtered irreversibly in web UI under some circumstances ([ThibG](https://github.com/tootsuite/mastodon/pull/11113)) -- Fix scrolling behaviour in compose form ([ThibG](https://github.com/tootsuite/mastodon/pull/11093)) +- Fix converted media being saved with original extension and mime type ([Gargron](https://github.com/mastodon/mastodon/pull/11130)) +- Fix layout of identity proofs settings ([acid-chicken](https://github.com/mastodon/mastodon/pull/11126)) +- Fix active scope only returning suspended users ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11111)) +- Fix sanitizer making block level elements unreadable ([Gargron](https://github.com/mastodon/mastodon/pull/10836)) +- Fix label for site theme not being translated in admin UI ([palindromordnilap](https://github.com/mastodon/mastodon/pull/11121)) +- Fix statuses not being filtered irreversibly in web UI under some circumstances ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11113)) +- Fix scrolling behaviour in compose form ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11093)) ## [2.9.0] - 2019-06-13 ### Added -- **Add single-column mode in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/10807), [Gargron](https://github.com/tootsuite/mastodon/pull/10848), [Gargron](https://github.com/tootsuite/mastodon/pull/11003), [Gargron](https://github.com/tootsuite/mastodon/pull/10961), [Hanage999](https://github.com/tootsuite/mastodon/pull/10915), [noellabo](https://github.com/tootsuite/mastodon/pull/10917), [abcang](https://github.com/tootsuite/mastodon/pull/10859), [Gargron](https://github.com/tootsuite/mastodon/pull/10820), [Gargron](https://github.com/tootsuite/mastodon/pull/10835), [Gargron](https://github.com/tootsuite/mastodon/pull/10809), [Gargron](https://github.com/tootsuite/mastodon/pull/10963), [noellabo](https://github.com/tootsuite/mastodon/pull/10883), [Hanage999](https://github.com/tootsuite/mastodon/pull/10839)) -- Add waiting time to the list of pending accounts in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10985)) -- Add a keyboard shortcut to hide/show media in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/10647), [Gargron](https://github.com/tootsuite/mastodon/pull/10838), [ThibG](https://github.com/tootsuite/mastodon/pull/10872)) -- Add `account_id` param to `GET /api/v1/notifications` ([pwoolcoc](https://github.com/tootsuite/mastodon/pull/10796)) -- Add confirmation modal for unboosting toots in web UI ([aurelien-reeves](https://github.com/tootsuite/mastodon/pull/10287)) -- Add emoji suggestions to content warning and poll option fields in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/10555)) -- Add `source` attribute to response of `DELETE /api/v1/statuses/:id` ([ThibG](https://github.com/tootsuite/mastodon/pull/10669)) -- Add some caching for HTML versions of public status pages ([ThibG](https://github.com/tootsuite/mastodon/pull/10701)) -- Add button to conveniently copy OAuth code ([ThibG](https://github.com/tootsuite/mastodon/pull/11065)) +- **Add single-column mode in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/10807), [Gargron](https://github.com/mastodon/mastodon/pull/10848), [Gargron](https://github.com/mastodon/mastodon/pull/11003), [Gargron](https://github.com/mastodon/mastodon/pull/10961), [Hanage999](https://github.com/mastodon/mastodon/pull/10915), [noellabo](https://github.com/mastodon/mastodon/pull/10917), [abcang](https://github.com/mastodon/mastodon/pull/10859), [Gargron](https://github.com/mastodon/mastodon/pull/10820), [Gargron](https://github.com/mastodon/mastodon/pull/10835), [Gargron](https://github.com/mastodon/mastodon/pull/10809), [Gargron](https://github.com/mastodon/mastodon/pull/10963), [noellabo](https://github.com/mastodon/mastodon/pull/10883), [Hanage999](https://github.com/mastodon/mastodon/pull/10839)) +- Add waiting time to the list of pending accounts in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/10985)) +- Add a keyboard shortcut to hide/show media in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10647), [Gargron](https://github.com/mastodon/mastodon/pull/10838), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10872)) +- Add `account_id` param to `GET /api/v1/notifications` ([pwoolcoc](https://github.com/mastodon/mastodon/pull/10796)) +- Add confirmation modal for unboosting toots in web UI ([aurelien-reeves](https://github.com/mastodon/mastodon/pull/10287)) +- Add emoji suggestions to content warning and poll option fields in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10555)) +- Add `source` attribute to response of `DELETE /api/v1/statuses/:id` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10669)) +- Add some caching for HTML versions of public status pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10701)) +- Add button to conveniently copy OAuth code ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/11065)) ### Changed -- **Change default layout to single column in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/10847)) -- **Change light theme** ([Gargron](https://github.com/tootsuite/mastodon/pull/10992), [Gargron](https://github.com/tootsuite/mastodon/pull/10996), [yuzulabo](https://github.com/tootsuite/mastodon/pull/10754), [Gargron](https://github.com/tootsuite/mastodon/pull/10845)) -- **Change preferences page into appearance, notifications, and other** ([Gargron](https://github.com/tootsuite/mastodon/pull/10977), [Gargron](https://github.com/tootsuite/mastodon/pull/10988)) -- Change priority of delete activity forwards for replies and reblogs ([Gargron](https://github.com/tootsuite/mastodon/pull/11002)) -- Change Mastodon logo to use primary text color of the given theme ([Gargron](https://github.com/tootsuite/mastodon/pull/10994)) -- Change reblogs counter to be updated when boosted privately ([Gargron](https://github.com/tootsuite/mastodon/pull/10964)) -- Change bio limit from 160 to 500 characters ([trwnh](https://github.com/tootsuite/mastodon/pull/10790)) -- Change API rate limiting to reduce allowed unauthenticated requests ([ThibG](https://github.com/tootsuite/mastodon/pull/10860), [hinaloe](https://github.com/tootsuite/mastodon/pull/10868), [mayaeh](https://github.com/tootsuite/mastodon/pull/10867)) -- Change help text of `tootctl emoji import` command to specify a gzipped TAR archive is required ([dariusk](https://github.com/tootsuite/mastodon/pull/11000)) -- Change web UI to hide poll options behind content warnings ([ThibG](https://github.com/tootsuite/mastodon/pull/10983)) -- Change silencing to ensure local effects and remote effects are the same for silenced local users ([ThibG](https://github.com/tootsuite/mastodon/pull/10575)) -- Change `tootctl domains purge` to remove custom emoji as well ([Kjwon15](https://github.com/tootsuite/mastodon/pull/10721)) -- Change Docker image to keep `apt` working ([SuperSandro2000](https://github.com/tootsuite/mastodon/pull/10830)) +- **Change default layout to single column in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/10847)) +- **Change light theme** ([Gargron](https://github.com/mastodon/mastodon/pull/10992), [Gargron](https://github.com/mastodon/mastodon/pull/10996), [yuzulabo](https://github.com/mastodon/mastodon/pull/10754), [Gargron](https://github.com/mastodon/mastodon/pull/10845)) +- **Change preferences page into appearance, notifications, and other** ([Gargron](https://github.com/mastodon/mastodon/pull/10977), [Gargron](https://github.com/mastodon/mastodon/pull/10988)) +- Change priority of delete activity forwards for replies and reblogs ([Gargron](https://github.com/mastodon/mastodon/pull/11002)) +- Change Mastodon logo to use primary text color of the given theme ([Gargron](https://github.com/mastodon/mastodon/pull/10994)) +- Change reblogs counter to be updated when boosted privately ([Gargron](https://github.com/mastodon/mastodon/pull/10964)) +- Change bio limit from 160 to 500 characters ([trwnh](https://github.com/mastodon/mastodon/pull/10790)) +- Change API rate limiting to reduce allowed unauthenticated requests ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10860), [hinaloe](https://github.com/mastodon/mastodon/pull/10868), [mayaeh](https://github.com/mastodon/mastodon/pull/10867)) +- Change help text of `tootctl emoji import` command to specify a gzipped TAR archive is required ([dariusk](https://github.com/mastodon/mastodon/pull/11000)) +- Change web UI to hide poll options behind content warnings ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10983)) +- Change silencing to ensure local effects and remote effects are the same for silenced local users ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10575)) +- Change `tootctl domains purge` to remove custom emoji as well ([Kjwon15](https://github.com/mastodon/mastodon/pull/10721)) +- Change Docker image to keep `apt` working ([SuperSandro2000](https://github.com/mastodon/mastodon/pull/10830)) ### Removed -- Remove `dist-upgrade` from Docker image ([SuperSandro2000](https://github.com/tootsuite/mastodon/pull/10822)) +- Remove `dist-upgrade` from Docker image ([SuperSandro2000](https://github.com/mastodon/mastodon/pull/10822)) ### Fixed -- Fix RTL layout not being RTL within the columns area in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10990)) -- Fix display of alternative text when a media attachment is not available in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/10981)) -- Fix not being able to directly switch between list timelines in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10973)) -- Fix media sensitivity not being maintained in delete & redraft in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/10980)) -- Fix emoji picker being always displayed in web UI ([noellabo](https://github.com/tootsuite/mastodon/pull/10979), [yuzulabo](https://github.com/tootsuite/mastodon/pull/10801), [wcpaez](https://github.com/tootsuite/mastodon/pull/10978)) -- Fix potential private status leak through caching ([ThibG](https://github.com/tootsuite/mastodon/pull/10969)) -- Fix refreshing featured toots when the new collection is empty in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/10971)) -- Fix undoing domain block also undoing individual moderation on users from before the domain block ([ThibG](https://github.com/tootsuite/mastodon/pull/10660)) -- Fix time not being local in the audit log ([yuzulabo](https://github.com/tootsuite/mastodon/pull/10751)) -- Fix statuses removed by moderation re-appearing on subsequent fetches ([Kjwon15](https://github.com/tootsuite/mastodon/pull/10732)) -- Fix misattribution of inlined announces if `attributedTo` isn't present in ActivityPub ([ThibG](https://github.com/tootsuite/mastodon/pull/10967)) -- Fix `GET /api/v1/polls/:id` not requiring authentication for non-public polls ([Gargron](https://github.com/tootsuite/mastodon/pull/10960)) -- Fix handling of blank poll options in ActivityPub ([ThibG](https://github.com/tootsuite/mastodon/pull/10946)) -- Fix avatar preview aspect ratio on edit profile page ([Kjwon15](https://github.com/tootsuite/mastodon/pull/10931)) -- Fix web push notifications not being sent for polls ([ThibG](https://github.com/tootsuite/mastodon/pull/10864)) -- Fix cut off letters in last paragraph of statuses in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/10821)) -- Fix list not being automatically unpinned when it returns 404 in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11045)) -- Fix login sometimes redirecting to paths that are not pages ([Gargron](https://github.com/tootsuite/mastodon/pull/11019)) +- Fix RTL layout not being RTL within the columns area in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/10990)) +- Fix display of alternative text when a media attachment is not available in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10981)) +- Fix not being able to directly switch between list timelines in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/10973)) +- Fix media sensitivity not being maintained in delete & redraft in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10980)) +- Fix emoji picker being always displayed in web UI ([noellabo](https://github.com/mastodon/mastodon/pull/10979), [yuzulabo](https://github.com/mastodon/mastodon/pull/10801), [wcpaez](https://github.com/mastodon/mastodon/pull/10978)) +- Fix potential private status leak through caching ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10969)) +- Fix refreshing featured toots when the new collection is empty in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10971)) +- Fix undoing domain block also undoing individual moderation on users from before the domain block ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10660)) +- Fix time not being local in the audit log ([yuzulabo](https://github.com/mastodon/mastodon/pull/10751)) +- Fix statuses removed by moderation re-appearing on subsequent fetches ([Kjwon15](https://github.com/mastodon/mastodon/pull/10732)) +- Fix misattribution of inlined announces if `attributedTo` isn't present in ActivityPub ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10967)) +- Fix `GET /api/v1/polls/:id` not requiring authentication for non-public polls ([Gargron](https://github.com/mastodon/mastodon/pull/10960)) +- Fix handling of blank poll options in ActivityPub ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10946)) +- Fix avatar preview aspect ratio on edit profile page ([Kjwon15](https://github.com/mastodon/mastodon/pull/10931)) +- Fix web push notifications not being sent for polls ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10864)) +- Fix cut off letters in last paragraph of statuses in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/10821)) +- Fix list not being automatically unpinned when it returns 404 in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/11045)) +- Fix login sometimes redirecting to paths that are not pages ([Gargron](https://github.com/mastodon/mastodon/pull/11019)) ## [2.8.4] - 2019-05-24 ### Fixed -- Fix delivery not retrying on some inbox errors that should be retriable ([ThibG](https://github.com/tootsuite/mastodon/pull/10812)) -- Fix unnecessary 5 minute cooldowns on signature verifications in some cases ([ThibG](https://github.com/tootsuite/mastodon/pull/10813)) -- Fix possible race condition when processing statuses ([ThibG](https://github.com/tootsuite/mastodon/pull/10815)) +- Fix delivery not retrying on some inbox errors that should be retriable ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10812)) +- Fix unnecessary 5 minute cooldowns on signature verifications in some cases ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10813)) +- Fix possible race condition when processing statuses ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10815)) ### Security -- Require specific OAuth scopes for specific endpoints of the streaming API, instead of merely requiring a token for all endpoints, and allow using WebSockets protocol negotiation to specify the access token instead of using a query string ([ThibG](https://github.com/tootsuite/mastodon/pull/10818)) +- Require specific OAuth scopes for specific endpoints of the streaming API, instead of merely requiring a token for all endpoints, and allow using WebSockets protocol negotiation to specify the access token instead of using a query string ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10818)) ## [2.8.3] - 2019-05-19 ### Added -- Add `og:image:alt` OpenGraph tag ([BenLubar](https://github.com/tootsuite/mastodon/pull/10779)) -- Add clickable area below avatar in statuses in web UI ([Dar13](https://github.com/tootsuite/mastodon/pull/10766)) -- Add crossed-out eye icon on account gallery in web UI ([Kjwon15](https://github.com/tootsuite/mastodon/pull/10715)) -- Add media description tooltip to thumbnails in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/10713)) +- Add `og:image:alt` OpenGraph tag ([BenLubar](https://github.com/mastodon/mastodon/pull/10779)) +- Add clickable area below avatar in statuses in web UI ([Dar13](https://github.com/mastodon/mastodon/pull/10766)) +- Add crossed-out eye icon on account gallery in web UI ([Kjwon15](https://github.com/mastodon/mastodon/pull/10715)) +- Add media description tooltip to thumbnails in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10713)) ### Changed -- Change "mark as sensitive" button into a checkbox for clarity ([ThibG](https://github.com/tootsuite/mastodon/pull/10748)) +- Change "mark as sensitive" button into a checkbox for clarity ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10748)) ### Fixed -- Fix bug allowing users to publicly boost their private statuses ([ThibG](https://github.com/tootsuite/mastodon/pull/10775), [ThibG](https://github.com/tootsuite/mastodon/pull/10783)) -- Fix performance in formatter by a little ([ThibG](https://github.com/tootsuite/mastodon/pull/10765)) -- Fix some colors in the light theme ([yuzulabo](https://github.com/tootsuite/mastodon/pull/10754)) -- Fix some colors of the high contrast theme ([yuzulabo](https://github.com/tootsuite/mastodon/pull/10711)) -- Fix ambivalent active state of poll refresh button in web UI ([MaciekBaron](https://github.com/tootsuite/mastodon/pull/10720)) -- Fix duplicate posting being possible from web UI ([hinaloe](https://github.com/tootsuite/mastodon/pull/10785)) -- Fix "invited by" not showing up in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/10791)) +- Fix bug allowing users to publicly boost their private statuses ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10775), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10783)) +- Fix performance in formatter by a little ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10765)) +- Fix some colors in the light theme ([yuzulabo](https://github.com/mastodon/mastodon/pull/10754)) +- Fix some colors of the high contrast theme ([yuzulabo](https://github.com/mastodon/mastodon/pull/10711)) +- Fix ambivalent active state of poll refresh button in web UI ([MaciekBaron](https://github.com/mastodon/mastodon/pull/10720)) +- Fix duplicate posting being possible from web UI ([hinaloe](https://github.com/mastodon/mastodon/pull/10785)) +- Fix "invited by" not showing up in admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10791)) ## [2.8.2] - 2019-05-05 ### Added -- Add `SOURCE_TAG` environment variable ([ushitora-anqou](https://github.com/tootsuite/mastodon/pull/10698)) +- Add `SOURCE_TAG` environment variable ([ushitora-anqou](https://github.com/mastodon/mastodon/pull/10698)) ### Fixed -- Fix cropped hero image on frontpage ([BaptisteGelez](https://github.com/tootsuite/mastodon/pull/10702)) -- Fix blurhash gem not compiling on some operating systems ([Gargron](https://github.com/tootsuite/mastodon/pull/10700)) -- Fix unexpected CSS animations in some browsers ([ThibG](https://github.com/tootsuite/mastodon/pull/10699)) -- Fix closing video modal scrolling timelines to top ([ThibG](https://github.com/tootsuite/mastodon/pull/10695)) +- Fix cropped hero image on frontpage ([BaptisteGelez](https://github.com/mastodon/mastodon/pull/10702)) +- Fix blurhash gem not compiling on some operating systems ([Gargron](https://github.com/mastodon/mastodon/pull/10700)) +- Fix unexpected CSS animations in some browsers ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10699)) +- Fix closing video modal scrolling timelines to top ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10695)) ## [2.8.1] - 2019-05-04 ### Added -- Add link to existing domain block when trying to block an already-blocked domain ([ThibG](https://github.com/tootsuite/mastodon/pull/10663)) -- Add button to view context to media modal when opened from account gallery in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10676)) -- Add ability to create multiple-choice polls in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/10603)) -- Add `GITHUB_REPOSITORY` and `SOURCE_BASE_URL` environment variables ([rosylilly](https://github.com/tootsuite/mastodon/pull/10600)) -- Add `/interact/` paths to `robots.txt` ([ThibG](https://github.com/tootsuite/mastodon/pull/10666)) -- Add `blurhash` to the Attachment entity in the REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/10630)) +- Add link to existing domain block when trying to block an already-blocked domain ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10663)) +- Add button to view context to media modal when opened from account gallery in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/10676)) +- Add ability to create multiple-choice polls in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10603)) +- Add `GITHUB_REPOSITORY` and `SOURCE_BASE_URL` environment variables ([rosylilly](https://github.com/mastodon/mastodon/pull/10600)) +- Add `/interact/` paths to `robots.txt` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10666)) +- Add `blurhash` to the Attachment entity in the REST API ([Gargron](https://github.com/mastodon/mastodon/pull/10630)) ### Changed -- Change hidden media to be shown as a blurhash-based colorful gradient instead of a black box in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10630)) -- Change rejected media to be shown as a blurhash-based gradient instead of a list of filenames in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10630)) -- Change e-mail whitelist/blacklist to not be checked when invited ([Gargron](https://github.com/tootsuite/mastodon/pull/10683)) -- Change cache header of REST API results to no-cache ([ThibG](https://github.com/tootsuite/mastodon/pull/10655)) -- Change the "mark media as sensitive" button to be more obvious in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10673), [Gargron](https://github.com/tootsuite/mastodon/pull/10682)) -- Change account gallery in web UI to display 3 columns, open media modal ([Gargron](https://github.com/tootsuite/mastodon/pull/10667), [Gargron](https://github.com/tootsuite/mastodon/pull/10674)) +- Change hidden media to be shown as a blurhash-based colorful gradient instead of a black box in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/10630)) +- Change rejected media to be shown as a blurhash-based gradient instead of a list of filenames in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/10630)) +- Change e-mail whitelist/blacklist to not be checked when invited ([Gargron](https://github.com/mastodon/mastodon/pull/10683)) +- Change cache header of REST API results to no-cache ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10655)) +- Change the "mark media as sensitive" button to be more obvious in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/10673), [Gargron](https://github.com/mastodon/mastodon/pull/10682)) +- Change account gallery in web UI to display 3 columns, open media modal ([Gargron](https://github.com/mastodon/mastodon/pull/10667), [Gargron](https://github.com/mastodon/mastodon/pull/10674)) ### Fixed -- Fix LDAP/PAM/SAML/CAS users not being pre-approved ([Gargron](https://github.com/tootsuite/mastodon/pull/10621)) -- Fix accounts created through tootctl not being always pre-approved ([Gargron](https://github.com/tootsuite/mastodon/pull/10684)) -- Fix Sidekiq retrying ActivityPub processing jobs that fail validation ([ThibG](https://github.com/tootsuite/mastodon/pull/10614)) -- Fix toots not being scrolled into view sometimes through keyboard selection ([ThibG](https://github.com/tootsuite/mastodon/pull/10593)) -- Fix expired invite links being usable to bypass approval mode ([ThibG](https://github.com/tootsuite/mastodon/pull/10657)) -- Fix not being able to save e-mail preference for new pending accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/10622)) -- Fix upload progressbar when image resizing is involved ([ThibG](https://github.com/tootsuite/mastodon/pull/10632)) -- Fix block action not automatically cancelling pending follow request ([ThibG](https://github.com/tootsuite/mastodon/pull/10633)) -- Fix stoplight logging to stderr separate from Rails logger ([Gargron](https://github.com/tootsuite/mastodon/pull/10624)) -- Fix sign up button not saying sign up when invite is used ([Gargron](https://github.com/tootsuite/mastodon/pull/10623)) -- Fix health checks in Docker Compose configuration ([fabianonline](https://github.com/tootsuite/mastodon/pull/10553)) -- Fix modal items not being scrollable on touch devices ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/10605)) -- Fix Keybase configuration using wrong domain when a web domain is used ([BenLubar](https://github.com/tootsuite/mastodon/pull/10565)) -- Fix avatar GIFs not being animated on-hover on public profiles ([hyenagirl64](https://github.com/tootsuite/mastodon/pull/10549)) -- Fix OpenGraph parser not understanding some valid property meta tags ([da2x](https://github.com/tootsuite/mastodon/pull/10604)) -- Fix wrong fonts being displayed when Roboto is installed on user's machine ([ThibG](https://github.com/tootsuite/mastodon/pull/10594)) -- Fix confirmation modals being too narrow for a secondary action button ([ThibG](https://github.com/tootsuite/mastodon/pull/10586)) +- Fix LDAP/PAM/SAML/CAS users not being pre-approved ([Gargron](https://github.com/mastodon/mastodon/pull/10621)) +- Fix accounts created through tootctl not being always pre-approved ([Gargron](https://github.com/mastodon/mastodon/pull/10684)) +- Fix Sidekiq retrying ActivityPub processing jobs that fail validation ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10614)) +- Fix toots not being scrolled into view sometimes through keyboard selection ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10593)) +- Fix expired invite links being usable to bypass approval mode ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10657)) +- Fix not being able to save e-mail preference for new pending accounts ([Gargron](https://github.com/mastodon/mastodon/pull/10622)) +- Fix upload progressbar when image resizing is involved ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10632)) +- Fix block action not automatically cancelling pending follow request ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10633)) +- Fix stoplight logging to stderr separate from Rails logger ([Gargron](https://github.com/mastodon/mastodon/pull/10624)) +- Fix sign up button not saying sign up when invite is used ([Gargron](https://github.com/mastodon/mastodon/pull/10623)) +- Fix health checks in Docker Compose configuration ([fabianonline](https://github.com/mastodon/mastodon/pull/10553)) +- Fix modal items not being scrollable on touch devices ([kedamaDQ](https://github.com/mastodon/mastodon/pull/10605)) +- Fix Keybase configuration using wrong domain when a web domain is used ([BenLubar](https://github.com/mastodon/mastodon/pull/10565)) +- Fix avatar GIFs not being animated on-hover on public profiles ([hyenagirl64](https://github.com/mastodon/mastodon/pull/10549)) +- Fix OpenGraph parser not understanding some valid property meta tags ([da2x](https://github.com/mastodon/mastodon/pull/10604)) +- Fix wrong fonts being displayed when Roboto is installed on user's machine ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10594)) +- Fix confirmation modals being too narrow for a secondary action button ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10586)) ## [2.8.0] - 2019-04-10 ### Added -- Add polls ([Gargron](https://github.com/tootsuite/mastodon/pull/10111), [ThibG](https://github.com/tootsuite/mastodon/pull/10155), [Gargron](https://github.com/tootsuite/mastodon/pull/10184), [ThibG](https://github.com/tootsuite/mastodon/pull/10196), [Gargron](https://github.com/tootsuite/mastodon/pull/10248), [ThibG](https://github.com/tootsuite/mastodon/pull/10255), [ThibG](https://github.com/tootsuite/mastodon/pull/10322), [Gargron](https://github.com/tootsuite/mastodon/pull/10138), [Gargron](https://github.com/tootsuite/mastodon/pull/10139), [Gargron](https://github.com/tootsuite/mastodon/pull/10144), [Gargron](https://github.com/tootsuite/mastodon/pull/10145),[Gargron](https://github.com/tootsuite/mastodon/pull/10146), [Gargron](https://github.com/tootsuite/mastodon/pull/10148), [Gargron](https://github.com/tootsuite/mastodon/pull/10151), [ThibG](https://github.com/tootsuite/mastodon/pull/10150), [Gargron](https://github.com/tootsuite/mastodon/pull/10168), [Gargron](https://github.com/tootsuite/mastodon/pull/10165), [Gargron](https://github.com/tootsuite/mastodon/pull/10172), [Gargron](https://github.com/tootsuite/mastodon/pull/10170), [Gargron](https://github.com/tootsuite/mastodon/pull/10171), [Gargron](https://github.com/tootsuite/mastodon/pull/10186), [Gargron](https://github.com/tootsuite/mastodon/pull/10189), [ThibG](https://github.com/tootsuite/mastodon/pull/10200), [rinsuki](https://github.com/tootsuite/mastodon/pull/10203), [Gargron](https://github.com/tootsuite/mastodon/pull/10213), [Gargron](https://github.com/tootsuite/mastodon/pull/10246), [Gargron](https://github.com/tootsuite/mastodon/pull/10265), [Gargron](https://github.com/tootsuite/mastodon/pull/10261), [ThibG](https://github.com/tootsuite/mastodon/pull/10333), [Gargron](https://github.com/tootsuite/mastodon/pull/10352), [ThibG](https://github.com/tootsuite/mastodon/pull/10140), [ThibG](https://github.com/tootsuite/mastodon/pull/10142), [ThibG](https://github.com/tootsuite/mastodon/pull/10141), [ThibG](https://github.com/tootsuite/mastodon/pull/10162), [ThibG](https://github.com/tootsuite/mastodon/pull/10161), [ThibG](https://github.com/tootsuite/mastodon/pull/10158), [ThibG](https://github.com/tootsuite/mastodon/pull/10156), [ThibG](https://github.com/tootsuite/mastodon/pull/10160), [Gargron](https://github.com/tootsuite/mastodon/pull/10185), [Gargron](https://github.com/tootsuite/mastodon/pull/10188), [ThibG](https://github.com/tootsuite/mastodon/pull/10195), [ThibG](https://github.com/tootsuite/mastodon/pull/10208), [Gargron](https://github.com/tootsuite/mastodon/pull/10187), [ThibG](https://github.com/tootsuite/mastodon/pull/10214), [ThibG](https://github.com/tootsuite/mastodon/pull/10209)) -- Add follows & followers managing UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10268), [Gargron](https://github.com/tootsuite/mastodon/pull/10308), [Gargron](https://github.com/tootsuite/mastodon/pull/10404), [Gargron](https://github.com/tootsuite/mastodon/pull/10293)) -- Add identity proof integration with Keybase ([Gargron](https://github.com/tootsuite/mastodon/pull/10297), [xgess](https://github.com/tootsuite/mastodon/pull/10375), [Gargron](https://github.com/tootsuite/mastodon/pull/10338), [Gargron](https://github.com/tootsuite/mastodon/pull/10350), [Gargron](https://github.com/tootsuite/mastodon/pull/10414)) -- Add option to overwrite imported data instead of merging ([Gargron](https://github.com/tootsuite/mastodon/pull/9962)) -- Add featured hashtags to profiles ([Gargron](https://github.com/tootsuite/mastodon/pull/9755), [Gargron](https://github.com/tootsuite/mastodon/pull/10167), [Gargron](https://github.com/tootsuite/mastodon/pull/10249), [ThibG](https://github.com/tootsuite/mastodon/pull/10034)) -- Add admission-based registrations mode ([Gargron](https://github.com/tootsuite/mastodon/pull/10250), [ThibG](https://github.com/tootsuite/mastodon/pull/10269), [Gargron](https://github.com/tootsuite/mastodon/pull/10264), [ThibG](https://github.com/tootsuite/mastodon/pull/10321), [Gargron](https://github.com/tootsuite/mastodon/pull/10349), [Gargron](https://github.com/tootsuite/mastodon/pull/10469)) -- Add support for WebP uploads ([acid-chicken](https://github.com/tootsuite/mastodon/pull/9879)) -- Add "copy link" item to status action bars in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/9983)) -- Add list title editing in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/9748)) -- Add a "Block & Report" button to the block confirmation dialog in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/10360)) -- Add disappointed elephant when the page crashes in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10275)) -- Add ability to upload multiple files at once in web UI ([tmm576](https://github.com/tootsuite/mastodon/pull/9856)) -- Add indication when you are not allowed to follow an account in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10420), [Gargron](https://github.com/tootsuite/mastodon/pull/10491)) -- Add validations to admin settings to catch common mistakes ([Gargron](https://github.com/tootsuite/mastodon/pull/10348), [ThibG](https://github.com/tootsuite/mastodon/pull/10354)) -- Add `type`, `limit`, `offset`, `min_id`, `max_id`, `account_id` to search API ([Gargron](https://github.com/tootsuite/mastodon/pull/10091)) -- Add a preferences API so apps can share basic behaviours ([Gargron](https://github.com/tootsuite/mastodon/pull/10109)) -- Add `visibility` param to reblog REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/9851), [ThibG](https://github.com/tootsuite/mastodon/pull/10302)) -- Add `allowfullscreen` attribute to OEmbed iframe ([rinsuki](https://github.com/tootsuite/mastodon/pull/10370)) -- Add `blocked_by` relationship to the REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/10373)) -- Add `tootctl statuses remove` to sweep unreferenced statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/10063)) -- Add `tootctl search deploy` to avoid ugly rake task syntax ([Gargron](https://github.com/tootsuite/mastodon/pull/10403)) -- Add `tootctl self-destruct` to shut down server gracefully ([Gargron](https://github.com/tootsuite/mastodon/pull/10367)) -- Add option to hide application used to toot ([ThibG](https://github.com/tootsuite/mastodon/pull/9897), [rinsuki](https://github.com/tootsuite/mastodon/pull/9994), [hinaloe](https://github.com/tootsuite/mastodon/pull/10086)) -- Add `DB_SSLMODE` configuration variable ([sascha-sl](https://github.com/tootsuite/mastodon/pull/10210)) -- Add click-to-copy UI to invites page ([Gargron](https://github.com/tootsuite/mastodon/pull/10259)) -- Add self-replies fetching ([ThibG](https://github.com/tootsuite/mastodon/pull/10106), [ThibG](https://github.com/tootsuite/mastodon/pull/10128), [ThibG](https://github.com/tootsuite/mastodon/pull/10175), [ThibG](https://github.com/tootsuite/mastodon/pull/10201)) -- Add rate limit for media proxy requests ([Gargron](https://github.com/tootsuite/mastodon/pull/10490)) -- Add `tootctl emoji purge` ([Gargron](https://github.com/tootsuite/mastodon/pull/10481)) -- Add `tootctl accounts approve` ([Gargron](https://github.com/tootsuite/mastodon/pull/10480)) -- Add `tootctl accounts reset-relationships` ([noellabo](https://github.com/tootsuite/mastodon/pull/10483)) +- Add polls ([Gargron](https://github.com/mastodon/mastodon/pull/10111), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10155), [Gargron](https://github.com/mastodon/mastodon/pull/10184), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10196), [Gargron](https://github.com/mastodon/mastodon/pull/10248), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10255), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10322), [Gargron](https://github.com/mastodon/mastodon/pull/10138), [Gargron](https://github.com/mastodon/mastodon/pull/10139), [Gargron](https://github.com/mastodon/mastodon/pull/10144), [Gargron](https://github.com/mastodon/mastodon/pull/10145),[Gargron](https://github.com/mastodon/mastodon/pull/10146), [Gargron](https://github.com/mastodon/mastodon/pull/10148), [Gargron](https://github.com/mastodon/mastodon/pull/10151), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10150), [Gargron](https://github.com/mastodon/mastodon/pull/10168), [Gargron](https://github.com/mastodon/mastodon/pull/10165), [Gargron](https://github.com/mastodon/mastodon/pull/10172), [Gargron](https://github.com/mastodon/mastodon/pull/10170), [Gargron](https://github.com/mastodon/mastodon/pull/10171), [Gargron](https://github.com/mastodon/mastodon/pull/10186), [Gargron](https://github.com/mastodon/mastodon/pull/10189), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10200), [rinsuki](https://github.com/mastodon/mastodon/pull/10203), [Gargron](https://github.com/mastodon/mastodon/pull/10213), [Gargron](https://github.com/mastodon/mastodon/pull/10246), [Gargron](https://github.com/mastodon/mastodon/pull/10265), [Gargron](https://github.com/mastodon/mastodon/pull/10261), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10333), [Gargron](https://github.com/mastodon/mastodon/pull/10352), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10140), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10142), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10141), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10162), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10161), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10158), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10156), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10160), [Gargron](https://github.com/mastodon/mastodon/pull/10185), [Gargron](https://github.com/mastodon/mastodon/pull/10188), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10195), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10208), [Gargron](https://github.com/mastodon/mastodon/pull/10187), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10214), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10209)) +- Add follows & followers managing UI ([Gargron](https://github.com/mastodon/mastodon/pull/10268), [Gargron](https://github.com/mastodon/mastodon/pull/10308), [Gargron](https://github.com/mastodon/mastodon/pull/10404), [Gargron](https://github.com/mastodon/mastodon/pull/10293)) +- Add identity proof integration with Keybase ([Gargron](https://github.com/mastodon/mastodon/pull/10297), [xgess](https://github.com/mastodon/mastodon/pull/10375), [Gargron](https://github.com/mastodon/mastodon/pull/10338), [Gargron](https://github.com/mastodon/mastodon/pull/10350), [Gargron](https://github.com/mastodon/mastodon/pull/10414)) +- Add option to overwrite imported data instead of merging ([Gargron](https://github.com/mastodon/mastodon/pull/9962)) +- Add featured hashtags to profiles ([Gargron](https://github.com/mastodon/mastodon/pull/9755), [Gargron](https://github.com/mastodon/mastodon/pull/10167), [Gargron](https://github.com/mastodon/mastodon/pull/10249), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10034)) +- Add admission-based registrations mode ([Gargron](https://github.com/mastodon/mastodon/pull/10250), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10269), [Gargron](https://github.com/mastodon/mastodon/pull/10264), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10321), [Gargron](https://github.com/mastodon/mastodon/pull/10349), [Gargron](https://github.com/mastodon/mastodon/pull/10469)) +- Add support for WebP uploads ([acid-chicken](https://github.com/mastodon/mastodon/pull/9879)) +- Add "copy link" item to status action bars in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/9983)) +- Add list title editing in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9748)) +- Add a "Block & Report" button to the block confirmation dialog in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10360)) +- Add disappointed elephant when the page crashes in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/10275)) +- Add ability to upload multiple files at once in web UI ([tmm576](https://github.com/mastodon/mastodon/pull/9856)) +- Add indication when you are not allowed to follow an account in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/10420), [Gargron](https://github.com/mastodon/mastodon/pull/10491)) +- Add validations to admin settings to catch common mistakes ([Gargron](https://github.com/mastodon/mastodon/pull/10348), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10354)) +- Add `type`, `limit`, `offset`, `min_id`, `max_id`, `account_id` to search API ([Gargron](https://github.com/mastodon/mastodon/pull/10091)) +- Add a preferences API so apps can share basic behaviours ([Gargron](https://github.com/mastodon/mastodon/pull/10109)) +- Add `visibility` param to reblog REST API ([Gargron](https://github.com/mastodon/mastodon/pull/9851), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10302)) +- Add `allowfullscreen` attribute to OEmbed iframe ([rinsuki](https://github.com/mastodon/mastodon/pull/10370)) +- Add `blocked_by` relationship to the REST API ([Gargron](https://github.com/mastodon/mastodon/pull/10373)) +- Add `tootctl statuses remove` to sweep unreferenced statuses ([Gargron](https://github.com/mastodon/mastodon/pull/10063)) +- Add `tootctl search deploy` to avoid ugly rake task syntax ([Gargron](https://github.com/mastodon/mastodon/pull/10403)) +- Add `tootctl self-destruct` to shut down server gracefully ([Gargron](https://github.com/mastodon/mastodon/pull/10367)) +- Add option to hide application used to toot ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9897), [rinsuki](https://github.com/mastodon/mastodon/pull/9994), [hinaloe](https://github.com/mastodon/mastodon/pull/10086)) +- Add `DB_SSLMODE` configuration variable ([sascha-sl](https://github.com/mastodon/mastodon/pull/10210)) +- Add click-to-copy UI to invites page ([Gargron](https://github.com/mastodon/mastodon/pull/10259)) +- Add self-replies fetching ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10106), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10128), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10175), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10201)) +- Add rate limit for media proxy requests ([Gargron](https://github.com/mastodon/mastodon/pull/10490)) +- Add `tootctl emoji purge` ([Gargron](https://github.com/mastodon/mastodon/pull/10481)) +- Add `tootctl accounts approve` ([Gargron](https://github.com/mastodon/mastodon/pull/10480)) +- Add `tootctl accounts reset-relationships` ([noellabo](https://github.com/mastodon/mastodon/pull/10483)) ### Changed -- Change design of landing page ([Gargron](https://github.com/tootsuite/mastodon/pull/10232), [Gargron](https://github.com/tootsuite/mastodon/pull/10260), [ThibG](https://github.com/tootsuite/mastodon/pull/10284), [ThibG](https://github.com/tootsuite/mastodon/pull/10291), [koyuawsmbrtn](https://github.com/tootsuite/mastodon/pull/10356), [Gargron](https://github.com/tootsuite/mastodon/pull/10245)) -- Change design of profile column in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10337), [Aditoo17](https://github.com/tootsuite/mastodon/pull/10387), [ThibG](https://github.com/tootsuite/mastodon/pull/10390), [mayaeh](https://github.com/tootsuite/mastodon/pull/10379), [ThibG](https://github.com/tootsuite/mastodon/pull/10411)) -- Change language detector threshold from 140 characters to 4 words ([Gargron](https://github.com/tootsuite/mastodon/pull/10376)) -- Change language detector to always kick in for non-latin alphabets ([Gargron](https://github.com/tootsuite/mastodon/pull/10276)) -- Change icons of features on admin dashboard ([Gargron](https://github.com/tootsuite/mastodon/pull/10366)) -- Change DNS timeouts from 1s to 5s ([ThibG](https://github.com/tootsuite/mastodon/pull/10238)) -- Change Docker image to use Ubuntu with jemalloc ([Sir-Boops](https://github.com/tootsuite/mastodon/pull/10100), [BenLubar](https://github.com/tootsuite/mastodon/pull/10212)) -- Change public pages to be cacheable by proxies ([BenLubar](https://github.com/tootsuite/mastodon/pull/9059)) -- Change the 410 gone response for suspended accounts to be cacheable by proxies ([ThibG](https://github.com/tootsuite/mastodon/pull/10339)) -- Change web UI to not not empty timeline of blocked users on block ([ThibG](https://github.com/tootsuite/mastodon/pull/10359)) -- Change JSON serializer to remove unused `@context` values ([Gargron](https://github.com/tootsuite/mastodon/pull/10378)) -- Change GIFV file size limit to be the same as for other videos ([rinsuki](https://github.com/tootsuite/mastodon/pull/9924)) -- Change Webpack to not use @babel/preset-env to compile node_modules ([ykzts](https://github.com/tootsuite/mastodon/pull/10289)) -- Change web UI to use new Web Share Target API ([gol-cha](https://github.com/tootsuite/mastodon/pull/9963)) -- Change ActivityPub reports to have persistent URIs ([ThibG](https://github.com/tootsuite/mastodon/pull/10303)) -- Change `tootctl accounts cull --dry-run` to list accounts that would be deleted ([BenLubar](https://github.com/tootsuite/mastodon/pull/10460)) -- Change format of CSV exports of follows and mutes to include extra settings ([ThibG](https://github.com/tootsuite/mastodon/pull/10495), [ThibG](https://github.com/tootsuite/mastodon/pull/10335)) -- Change ActivityPub collections to be cacheable by proxies ([ThibG](https://github.com/tootsuite/mastodon/pull/10467)) -- Change REST API and public profiles to not return follows/followers for users that have blocked you ([Gargron](https://github.com/tootsuite/mastodon/pull/10491)) -- Change the groupings of menu items in settings navigation ([Gargron](https://github.com/tootsuite/mastodon/pull/10533)) +- Change design of landing page ([Gargron](https://github.com/mastodon/mastodon/pull/10232), [Gargron](https://github.com/mastodon/mastodon/pull/10260), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10284), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10291), [koyuawsmbrtn](https://github.com/mastodon/mastodon/pull/10356), [Gargron](https://github.com/mastodon/mastodon/pull/10245)) +- Change design of profile column in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/10337), [Aditoo17](https://github.com/mastodon/mastodon/pull/10387), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10390), [mayaeh](https://github.com/mastodon/mastodon/pull/10379), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10411)) +- Change language detector threshold from 140 characters to 4 words ([Gargron](https://github.com/mastodon/mastodon/pull/10376)) +- Change language detector to always kick in for non-latin alphabets ([Gargron](https://github.com/mastodon/mastodon/pull/10276)) +- Change icons of features on admin dashboard ([Gargron](https://github.com/mastodon/mastodon/pull/10366)) +- Change DNS timeouts from 1s to 5s ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10238)) +- Change Docker image to use Ubuntu with jemalloc ([Sir-Boops](https://github.com/mastodon/mastodon/pull/10100), [BenLubar](https://github.com/mastodon/mastodon/pull/10212)) +- Change public pages to be cacheable by proxies ([BenLubar](https://github.com/mastodon/mastodon/pull/9059)) +- Change the 410 gone response for suspended accounts to be cacheable by proxies ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10339)) +- Change web UI to not not empty timeline of blocked users on block ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10359)) +- Change JSON serializer to remove unused `@context` values ([Gargron](https://github.com/mastodon/mastodon/pull/10378)) +- Change GIFV file size limit to be the same as for other videos ([rinsuki](https://github.com/mastodon/mastodon/pull/9924)) +- Change Webpack to not use @babel/preset-env to compile node_modules ([ykzts](https://github.com/mastodon/mastodon/pull/10289)) +- Change web UI to use new Web Share Target API ([gol-cha](https://github.com/mastodon/mastodon/pull/9963)) +- Change ActivityPub reports to have persistent URIs ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10303)) +- Change `tootctl accounts cull --dry-run` to list accounts that would be deleted ([BenLubar](https://github.com/mastodon/mastodon/pull/10460)) +- Change format of CSV exports of follows and mutes to include extra settings ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10495), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10335)) +- Change ActivityPub collections to be cacheable by proxies ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10467)) +- Change REST API and public profiles to not return follows/followers for users that have blocked you ([Gargron](https://github.com/mastodon/mastodon/pull/10491)) +- Change the groupings of menu items in settings navigation ([Gargron](https://github.com/mastodon/mastodon/pull/10533)) ### Removed -- Remove zopfli compression to speed up Webpack from 6min to 1min ([nolanlawson](https://github.com/tootsuite/mastodon/pull/10288)) -- Remove stats.json generation to speed up Webpack ([nolanlawson](https://github.com/tootsuite/mastodon/pull/10290)) +- Remove zopfli compression to speed up Webpack from 6min to 1min ([nolanlawson](https://github.com/mastodon/mastodon/pull/10288)) +- Remove stats.json generation to speed up Webpack ([nolanlawson](https://github.com/mastodon/mastodon/pull/10290)) ### Fixed -- Fix public timelines being broken by new toots when they are not mounted in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10131)) -- Fix quick filter settings not being saved when selecting a different filter in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/10296)) -- Fix remote interaction dialogs being indexed by search engines ([Gargron](https://github.com/tootsuite/mastodon/pull/10240)) -- Fix maxed-out invites not showing up as expired in UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10274)) -- Fix scrollbar styles on compose textarea ([Gargron](https://github.com/tootsuite/mastodon/pull/10292)) -- Fix timeline merge workers being queued for remote users ([Gargron](https://github.com/tootsuite/mastodon/pull/10355)) -- Fix alternative relay support regression ([Gargron](https://github.com/tootsuite/mastodon/pull/10398)) -- Fix trying to fetch keys of unknown accounts on a self-delete from them ([ThibG](https://github.com/tootsuite/mastodon/pull/10326)) -- Fix CAS `:service_validate_url` option ([enewhuis](https://github.com/tootsuite/mastodon/pull/10328)) -- Fix race conditions when creating backups ([ThibG](https://github.com/tootsuite/mastodon/pull/10234)) -- Fix whitespace not being stripped out of username before validation ([aurelien-reeves](https://github.com/tootsuite/mastodon/pull/10239)) -- Fix n+1 query when deleting status ([Gargron](https://github.com/tootsuite/mastodon/pull/10247)) -- Fix exiting follows not being rejected when suspending a remote account ([ThibG](https://github.com/tootsuite/mastodon/pull/10230)) -- Fix the underlying button element in a disabled icon button not being disabled ([ThibG](https://github.com/tootsuite/mastodon/pull/10194)) -- Fix race condition when streaming out deleted statuses ([ThibG](https://github.com/tootsuite/mastodon/pull/10280)) -- Fix performance of admin federation UI by caching account counts ([Gargron](https://github.com/tootsuite/mastodon/pull/10374)) -- Fix JS error on pages that don't define a CSRF token ([hinaloe](https://github.com/tootsuite/mastodon/pull/10383)) -- Fix `tootctl accounts cull` sometimes removing accounts that are temporarily unreachable ([BenLubar](https://github.com/tootsuite/mastodon/pull/10460)) +- Fix public timelines being broken by new toots when they are not mounted in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/10131)) +- Fix quick filter settings not being saved when selecting a different filter in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10296)) +- Fix remote interaction dialogs being indexed by search engines ([Gargron](https://github.com/mastodon/mastodon/pull/10240)) +- Fix maxed-out invites not showing up as expired in UI ([Gargron](https://github.com/mastodon/mastodon/pull/10274)) +- Fix scrollbar styles on compose textarea ([Gargron](https://github.com/mastodon/mastodon/pull/10292)) +- Fix timeline merge workers being queued for remote users ([Gargron](https://github.com/mastodon/mastodon/pull/10355)) +- Fix alternative relay support regression ([Gargron](https://github.com/mastodon/mastodon/pull/10398)) +- Fix trying to fetch keys of unknown accounts on a self-delete from them ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10326)) +- Fix CAS `:service_validate_url` option ([enewhuis](https://github.com/mastodon/mastodon/pull/10328)) +- Fix race conditions when creating backups ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10234)) +- Fix whitespace not being stripped out of username before validation ([aurelien-reeves](https://github.com/mastodon/mastodon/pull/10239)) +- Fix n+1 query when deleting status ([Gargron](https://github.com/mastodon/mastodon/pull/10247)) +- Fix exiting follows not being rejected when suspending a remote account ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10230)) +- Fix the underlying button element in a disabled icon button not being disabled ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10194)) +- Fix race condition when streaming out deleted statuses ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10280)) +- Fix performance of admin federation UI by caching account counts ([Gargron](https://github.com/mastodon/mastodon/pull/10374)) +- Fix JS error on pages that don't define a CSRF token ([hinaloe](https://github.com/mastodon/mastodon/pull/10383)) +- Fix `tootctl accounts cull` sometimes removing accounts that are temporarily unreachable ([BenLubar](https://github.com/mastodon/mastodon/pull/10460)) ## [2.7.4] - 2019-03-05 ### Fixed -- Fix web UI not cleaning up notifications after block ([Gargron](https://github.com/tootsuite/mastodon/pull/10108)) -- Fix redundant HTTP requests when resolving private statuses ([ThibG](https://github.com/tootsuite/mastodon/pull/10115)) -- Fix performance of account media query ([abcang](https://github.com/tootsuite/mastodon/pull/10121)) -- Fix mention processing for unknown accounts ([ThibG](https://github.com/tootsuite/mastodon/pull/10125)) -- Fix getting started column not scrolling on short screens ([trwnh](https://github.com/tootsuite/mastodon/pull/10075)) -- Fix direct messages pagination in the web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/10126)) -- Fix serialization of Announce activities ([ThibG](https://github.com/tootsuite/mastodon/pull/10129)) -- Fix home timeline perpetually reloading when empty in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10130)) -- Fix lists export ([ThibG](https://github.com/tootsuite/mastodon/pull/10136)) -- Fix edit profile page crash for suspended-then-unsuspended users ([ThibG](https://github.com/tootsuite/mastodon/pull/10178)) +- Fix web UI not cleaning up notifications after block ([Gargron](https://github.com/mastodon/mastodon/pull/10108)) +- Fix redundant HTTP requests when resolving private statuses ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10115)) +- Fix performance of account media query ([abcang](https://github.com/mastodon/mastodon/pull/10121)) +- Fix mention processing for unknown accounts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10125)) +- Fix getting started column not scrolling on short screens ([trwnh](https://github.com/mastodon/mastodon/pull/10075)) +- Fix direct messages pagination in the web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10126)) +- Fix serialization of Announce activities ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10129)) +- Fix home timeline perpetually reloading when empty in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/10130)) +- Fix lists export ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10136)) +- Fix edit profile page crash for suspended-then-unsuspended users ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10178)) ## [2.7.3] - 2019-02-23 ### Added -- Add domain filter to the admin federation page ([ThibG](https://github.com/tootsuite/mastodon/pull/10071)) -- Add quick link from admin account view to block/unblock instance ([ThibG](https://github.com/tootsuite/mastodon/pull/10073)) +- Add domain filter to the admin federation page ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10071)) +- Add quick link from admin account view to block/unblock instance ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10073)) ### Fixed -- Fix video player width not being updated to fit container width ([ThibG](https://github.com/tootsuite/mastodon/pull/10069)) -- Fix domain filter being shown in admin page when local filter is active ([ThibG](https://github.com/tootsuite/mastodon/pull/10074)) -- Fix crash when conversations have no valid participants ([ThibG](https://github.com/tootsuite/mastodon/pull/10078)) -- Fix error when performing admin actions on no statuses ([ThibG](https://github.com/tootsuite/mastodon/pull/10094)) +- Fix video player width not being updated to fit container width ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10069)) +- Fix domain filter being shown in admin page when local filter is active ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10074)) +- Fix crash when conversations have no valid participants ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10078)) +- Fix error when performing admin actions on no statuses ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10094)) ### Changed -- Change custom emojis to randomize stored file name ([hinaloe](https://github.com/tootsuite/mastodon/pull/10090)) +- Change custom emojis to randomize stored file name ([hinaloe](https://github.com/mastodon/mastodon/pull/10090)) ## [2.7.2] - 2019-02-17 ### Added -- Add support for IPv6 in e-mail validation ([zoc](https://github.com/tootsuite/mastodon/pull/10009)) -- Add record of IP address used for signing up ([ThibG](https://github.com/tootsuite/mastodon/pull/10026)) -- Add tight rate-limit for API deletions (30 per 30 minutes) ([Gargron](https://github.com/tootsuite/mastodon/pull/10042)) -- Add support for embedded `Announce` objects attributed to the same actor ([ThibG](https://github.com/tootsuite/mastodon/pull/9998), [Gargron](https://github.com/tootsuite/mastodon/pull/10065)) -- Add spam filter for `Create` and `Announce` activities ([Gargron](https://github.com/tootsuite/mastodon/pull/10005), [Gargron](https://github.com/tootsuite/mastodon/pull/10041), [Gargron](https://github.com/tootsuite/mastodon/pull/10062)) -- Add `registrations` attribute to `GET /api/v1/instance` ([Gargron](https://github.com/tootsuite/mastodon/pull/10060)) -- Add `vapid_key` to `POST /api/v1/apps` and `GET /api/v1/apps/verify_credentials` ([Gargron](https://github.com/tootsuite/mastodon/pull/10058)) +- Add support for IPv6 in e-mail validation ([zoc](https://github.com/mastodon/mastodon/pull/10009)) +- Add record of IP address used for signing up ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10026)) +- Add tight rate-limit for API deletions (30 per 30 minutes) ([Gargron](https://github.com/mastodon/mastodon/pull/10042)) +- Add support for embedded `Announce` objects attributed to the same actor ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9998), [Gargron](https://github.com/mastodon/mastodon/pull/10065)) +- Add spam filter for `Create` and `Announce` activities ([Gargron](https://github.com/mastodon/mastodon/pull/10005), [Gargron](https://github.com/mastodon/mastodon/pull/10041), [Gargron](https://github.com/mastodon/mastodon/pull/10062)) +- Add `registrations` attribute to `GET /api/v1/instance` ([Gargron](https://github.com/mastodon/mastodon/pull/10060)) +- Add `vapid_key` to `POST /api/v1/apps` and `GET /api/v1/apps/verify_credentials` ([Gargron](https://github.com/mastodon/mastodon/pull/10058)) ### Fixed -- Fix link color and add link underlines in high-contrast theme ([Gargron](https://github.com/tootsuite/mastodon/pull/9949), [Gargron](https://github.com/tootsuite/mastodon/pull/10028)) -- Fix unicode characters in URLs not being linkified ([JMendyk](https://github.com/tootsuite/mastodon/pull/8447), [hinaloe](https://github.com/tootsuite/mastodon/pull/9991)) -- Fix URLs linkifier grabbing ending quotation as part of the link ([Gargron](https://github.com/tootsuite/mastodon/pull/9997)) -- Fix authorized applications page design ([rinsuki](https://github.com/tootsuite/mastodon/pull/9969)) -- Fix custom emojis not showing up in share page emoji picker ([rinsuki](https://github.com/tootsuite/mastodon/pull/9970)) -- Fix too liberal application of whitespace in toots ([trwnh](https://github.com/tootsuite/mastodon/pull/9968)) -- Fix misleading e-mail hint being displayed in admin view ([ThibG](https://github.com/tootsuite/mastodon/pull/9973)) -- Fix tombstones not being cleared out ([abcang](https://github.com/tootsuite/mastodon/pull/9978)) -- Fix some timeline jumps ([ThibG](https://github.com/tootsuite/mastodon/pull/9982), [ThibG](https://github.com/tootsuite/mastodon/pull/10001), [rinsuki](https://github.com/tootsuite/mastodon/pull/10046)) -- Fix content warning input taking keyboard focus even when hidden ([hinaloe](https://github.com/tootsuite/mastodon/pull/10017)) -- Fix hashtags select styling in default and high-contrast themes ([Gargron](https://github.com/tootsuite/mastodon/pull/10029)) -- Fix style regressions on landing page ([Gargron](https://github.com/tootsuite/mastodon/pull/10030)) -- Fix hashtag column not subscribing to stream on mount ([Gargron](https://github.com/tootsuite/mastodon/pull/10040)) -- Fix relay enabling/disabling not resetting inbox availability status ([Gargron](https://github.com/tootsuite/mastodon/pull/10048)) -- Fix mutes, blocks, domain blocks and follow requests not paginating ([Gargron](https://github.com/tootsuite/mastodon/pull/10057)) -- Fix crash on public hashtag pages when streaming fails ([ThibG](https://github.com/tootsuite/mastodon/pull/10061)) +- Fix link color and add link underlines in high-contrast theme ([Gargron](https://github.com/mastodon/mastodon/pull/9949), [Gargron](https://github.com/mastodon/mastodon/pull/10028)) +- Fix unicode characters in URLs not being linkified ([JMendyk](https://github.com/mastodon/mastodon/pull/8447), [hinaloe](https://github.com/mastodon/mastodon/pull/9991)) +- Fix URLs linkifier grabbing ending quotation as part of the link ([Gargron](https://github.com/mastodon/mastodon/pull/9997)) +- Fix authorized applications page design ([rinsuki](https://github.com/mastodon/mastodon/pull/9969)) +- Fix custom emojis not showing up in share page emoji picker ([rinsuki](https://github.com/mastodon/mastodon/pull/9970)) +- Fix too liberal application of whitespace in toots ([trwnh](https://github.com/mastodon/mastodon/pull/9968)) +- Fix misleading e-mail hint being displayed in admin view ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9973)) +- Fix tombstones not being cleared out ([abcang](https://github.com/mastodon/mastodon/pull/9978)) +- Fix some timeline jumps ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9982), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/10001), [rinsuki](https://github.com/mastodon/mastodon/pull/10046)) +- Fix content warning input taking keyboard focus even when hidden ([hinaloe](https://github.com/mastodon/mastodon/pull/10017)) +- Fix hashtags select styling in default and high-contrast themes ([Gargron](https://github.com/mastodon/mastodon/pull/10029)) +- Fix style regressions on landing page ([Gargron](https://github.com/mastodon/mastodon/pull/10030)) +- Fix hashtag column not subscribing to stream on mount ([Gargron](https://github.com/mastodon/mastodon/pull/10040)) +- Fix relay enabling/disabling not resetting inbox availability status ([Gargron](https://github.com/mastodon/mastodon/pull/10048)) +- Fix mutes, blocks, domain blocks and follow requests not paginating ([Gargron](https://github.com/mastodon/mastodon/pull/10057)) +- Fix crash on public hashtag pages when streaming fails ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10061)) ### Changed -- Change icon for unlisted visibility level ([clarcharr](https://github.com/tootsuite/mastodon/pull/9952)) -- Change queue of actor deletes from push to pull for non-follower recipients ([ThibG](https://github.com/tootsuite/mastodon/pull/10016)) -- Change robots.txt to exclude media proxy URLs ([nightpool](https://github.com/tootsuite/mastodon/pull/10038)) -- Change upload description input to allow line breaks ([BenLubar](https://github.com/tootsuite/mastodon/pull/10036)) -- Change `dist/mastodon-streaming.service` to recommend running node without intermediary npm command ([nolanlawson](https://github.com/tootsuite/mastodon/pull/10032)) -- Change conversations to always show names of other participants ([Gargron](https://github.com/tootsuite/mastodon/pull/10047)) -- Change buttons on timeline preview to open the interaction dialog ([Gargron](https://github.com/tootsuite/mastodon/pull/10054)) -- Change error graphic to hover-to-play ([Gargron](https://github.com/tootsuite/mastodon/pull/10055)) +- Change icon for unlisted visibility level ([clarcharr](https://github.com/mastodon/mastodon/pull/9952)) +- Change queue of actor deletes from push to pull for non-follower recipients ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10016)) +- Change robots.txt to exclude media proxy URLs ([nightpool](https://github.com/mastodon/mastodon/pull/10038)) +- Change upload description input to allow line breaks ([BenLubar](https://github.com/mastodon/mastodon/pull/10036)) +- Change `dist/mastodon-streaming.service` to recommend running node without intermediary npm command ([nolanlawson](https://github.com/mastodon/mastodon/pull/10032)) +- Change conversations to always show names of other participants ([Gargron](https://github.com/mastodon/mastodon/pull/10047)) +- Change buttons on timeline preview to open the interaction dialog ([Gargron](https://github.com/mastodon/mastodon/pull/10054)) +- Change error graphic to hover-to-play ([Gargron](https://github.com/mastodon/mastodon/pull/10055)) ## [2.7.1] - 2019-01-28 ### Fixed -- Fix SSO authentication not working due to missing agreement boolean ([Gargron](https://github.com/tootsuite/mastodon/pull/9915)) -- Fix slow fallback of CopyAccountStats migration setting stats to 0 ([Gargron](https://github.com/tootsuite/mastodon/pull/9930)) -- Fix wrong command in migration error message ([angristan](https://github.com/tootsuite/mastodon/pull/9877)) -- Fix initial value of volume slider in video player and handle volume changes ([ThibG](https://github.com/tootsuite/mastodon/pull/9929)) -- Fix missing hotkeys for notifications ([ThibG](https://github.com/tootsuite/mastodon/pull/9927)) -- Fix being able to attach unattached media created by other users ([ThibG](https://github.com/tootsuite/mastodon/pull/9921)) -- Fix unrescued SSL error during link verification ([renatolond](https://github.com/tootsuite/mastodon/pull/9914)) -- Fix Firefox scrollbar color regression ([trwnh](https://github.com/tootsuite/mastodon/pull/9908)) -- Fix scheduled status with media immediately creating a status ([ThibG](https://github.com/tootsuite/mastodon/pull/9894)) -- Fix missing strong style for landing page description ([Kjwon15](https://github.com/tootsuite/mastodon/pull/9892)) +- Fix SSO authentication not working due to missing agreement boolean ([Gargron](https://github.com/mastodon/mastodon/pull/9915)) +- Fix slow fallback of CopyAccountStats migration setting stats to 0 ([Gargron](https://github.com/mastodon/mastodon/pull/9930)) +- Fix wrong command in migration error message ([angristan](https://github.com/mastodon/mastodon/pull/9877)) +- Fix initial value of volume slider in video player and handle volume changes ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9929)) +- Fix missing hotkeys for notifications ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9927)) +- Fix being able to attach unattached media created by other users ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9921)) +- Fix unrescued SSL error during link verification ([renatolond](https://github.com/mastodon/mastodon/pull/9914)) +- Fix Firefox scrollbar color regression ([trwnh](https://github.com/mastodon/mastodon/pull/9908)) +- Fix scheduled status with media immediately creating a status ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9894)) +- Fix missing strong style for landing page description ([Kjwon15](https://github.com/mastodon/mastodon/pull/9892)) ## [2.7.0] - 2019-01-20 ### Added -- Add link for adding a user to a list from their profile ([namelessGonbai](https://github.com/tootsuite/mastodon/pull/9062)) -- Add joining several hashtags in a single column ([gdpelican](https://github.com/tootsuite/mastodon/pull/8904)) -- Add volume sliders for videos ([sumdog](https://github.com/tootsuite/mastodon/pull/9366)) -- Add a tooltip explaining what a locked account is ([pawelngei](https://github.com/tootsuite/mastodon/pull/9403)) -- Add preloaded cache for common JSON-LD contexts ([ThibG](https://github.com/tootsuite/mastodon/pull/9412)) -- Add profile directory ([Gargron](https://github.com/tootsuite/mastodon/pull/9427)) -- Add setting to not group reblogs in home feed ([ThibG](https://github.com/tootsuite/mastodon/pull/9248)) -- Add admin ability to remove a user's header image ([ThibG](https://github.com/tootsuite/mastodon/pull/9495)) -- Add account hashtags to ActivityPub actor JSON ([Gargron](https://github.com/tootsuite/mastodon/pull/9450)) -- Add error message for avatar image that's too large ([sumdog](https://github.com/tootsuite/mastodon/pull/9518)) -- Add notification quick-filter bar ([pawelngei](https://github.com/tootsuite/mastodon/pull/9399)) -- Add new first-time tutorial ([Gargron](https://github.com/tootsuite/mastodon/pull/9531)) -- Add moderation warnings ([Gargron](https://github.com/tootsuite/mastodon/pull/9519)) -- Add emoji codepoint mappings for v11.0 ([Gargron](https://github.com/tootsuite/mastodon/pull/9618)) -- Add REST API for creating an account ([Gargron](https://github.com/tootsuite/mastodon/pull/9572)) -- Add support for Malayalam in language filter ([tachyons](https://github.com/tootsuite/mastodon/pull/9624)) -- Add exclude_reblogs option to account statuses API ([Gargron](https://github.com/tootsuite/mastodon/pull/9640)) -- Add local followers page to admin account UI ([chr-1x](https://github.com/tootsuite/mastodon/pull/9610)) -- Add healthcheck commands to docker-compose.yml ([BenLubar](https://github.com/tootsuite/mastodon/pull/9143)) -- Add handler for Move activity to migrate followers ([Gargron](https://github.com/tootsuite/mastodon/pull/9629)) -- Add CSV export for lists and domain blocks ([Gargron](https://github.com/tootsuite/mastodon/pull/9677)) -- Add `tootctl accounts follow ACCT` ([Gargron](https://github.com/tootsuite/mastodon/pull/9414)) -- Add scheduled statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/9706)) -- Add immutable caching for S3 objects ([nolanlawson](https://github.com/tootsuite/mastodon/pull/9722)) -- Add cache to custom emojis API ([Gargron](https://github.com/tootsuite/mastodon/pull/9732)) -- Add preview cards to non-detailed statuses on public pages ([Gargron](https://github.com/tootsuite/mastodon/pull/9714)) -- Add `mod` and `moderator` to list of default reserved usernames ([Gargron](https://github.com/tootsuite/mastodon/pull/9713)) -- Add quick links to the admin interface in the web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/8545)) -- Add `tootctl domains crawl` ([Gargron](https://github.com/tootsuite/mastodon/pull/9809)) -- Add attachment list fallback to public pages ([ThibG](https://github.com/tootsuite/mastodon/pull/9780)) -- Add `tootctl --version` ([Gargron](https://github.com/tootsuite/mastodon/pull/9835)) -- Add information about how to opt-in to the directory on the directory ([Gargron](https://github.com/tootsuite/mastodon/pull/9834)) -- Add timeouts for S3 ([Gargron](https://github.com/tootsuite/mastodon/pull/9842)) -- Add support for non-public reblogs from ActivityPub ([Gargron](https://github.com/tootsuite/mastodon/pull/9841)) -- Add sending of `Reject` activity when sending a `Block` activity ([ThibG](https://github.com/tootsuite/mastodon/pull/9811)) +- Add link for adding a user to a list from their profile ([namelessGonbai](https://github.com/mastodon/mastodon/pull/9062)) +- Add joining several hashtags in a single column ([gdpelican](https://github.com/mastodon/mastodon/pull/8904)) +- Add volume sliders for videos ([sumdog](https://github.com/mastodon/mastodon/pull/9366)) +- Add a tooltip explaining what a locked account is ([pawelngei](https://github.com/mastodon/mastodon/pull/9403)) +- Add preloaded cache for common JSON-LD contexts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9412)) +- Add profile directory ([Gargron](https://github.com/mastodon/mastodon/pull/9427)) +- Add setting to not group reblogs in home feed ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9248)) +- Add admin ability to remove a user's header image ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9495)) +- Add account hashtags to ActivityPub actor JSON ([Gargron](https://github.com/mastodon/mastodon/pull/9450)) +- Add error message for avatar image that's too large ([sumdog](https://github.com/mastodon/mastodon/pull/9518)) +- Add notification quick-filter bar ([pawelngei](https://github.com/mastodon/mastodon/pull/9399)) +- Add new first-time tutorial ([Gargron](https://github.com/mastodon/mastodon/pull/9531)) +- Add moderation warnings ([Gargron](https://github.com/mastodon/mastodon/pull/9519)) +- Add emoji codepoint mappings for v11.0 ([Gargron](https://github.com/mastodon/mastodon/pull/9618)) +- Add REST API for creating an account ([Gargron](https://github.com/mastodon/mastodon/pull/9572)) +- Add support for Malayalam in language filter ([tachyons](https://github.com/mastodon/mastodon/pull/9624)) +- Add exclude_reblogs option to account statuses API ([Gargron](https://github.com/mastodon/mastodon/pull/9640)) +- Add local followers page to admin account UI ([chr-1x](https://github.com/mastodon/mastodon/pull/9610)) +- Add healthcheck commands to docker-compose.yml ([BenLubar](https://github.com/mastodon/mastodon/pull/9143)) +- Add handler for Move activity to migrate followers ([Gargron](https://github.com/mastodon/mastodon/pull/9629)) +- Add CSV export for lists and domain blocks ([Gargron](https://github.com/mastodon/mastodon/pull/9677)) +- Add `tootctl accounts follow ACCT` ([Gargron](https://github.com/mastodon/mastodon/pull/9414)) +- Add scheduled statuses ([Gargron](https://github.com/mastodon/mastodon/pull/9706)) +- Add immutable caching for S3 objects ([nolanlawson](https://github.com/mastodon/mastodon/pull/9722)) +- Add cache to custom emojis API ([Gargron](https://github.com/mastodon/mastodon/pull/9732)) +- Add preview cards to non-detailed statuses on public pages ([Gargron](https://github.com/mastodon/mastodon/pull/9714)) +- Add `mod` and `moderator` to list of default reserved usernames ([Gargron](https://github.com/mastodon/mastodon/pull/9713)) +- Add quick links to the admin interface in the web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/8545)) +- Add `tootctl domains crawl` ([Gargron](https://github.com/mastodon/mastodon/pull/9809)) +- Add attachment list fallback to public pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9780)) +- Add `tootctl --version` ([Gargron](https://github.com/mastodon/mastodon/pull/9835)) +- Add information about how to opt-in to the directory on the directory ([Gargron](https://github.com/mastodon/mastodon/pull/9834)) +- Add timeouts for S3 ([Gargron](https://github.com/mastodon/mastodon/pull/9842)) +- Add support for non-public reblogs from ActivityPub ([Gargron](https://github.com/mastodon/mastodon/pull/9841)) +- Add sending of `Reject` activity when sending a `Block` activity ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9811)) ### Changed -- Temporarily pause timeline if mouse moved recently ([lmorchard](https://github.com/tootsuite/mastodon/pull/9200)) -- Change the password form order ([mayaeh](https://github.com/tootsuite/mastodon/pull/9267)) -- Redesign admin UI for accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/9340), [Gargron](https://github.com/tootsuite/mastodon/pull/9643)) -- Redesign admin UI for instances/domain blocks ([Gargron](https://github.com/tootsuite/mastodon/pull/9645)) -- Swap avatar and header input fields in profile page ([ThibG](https://github.com/tootsuite/mastodon/pull/9271)) -- When posting in mobile mode, go back to previous history location ([ThibG](https://github.com/tootsuite/mastodon/pull/9502)) -- Split out is_changing_upload from is_submitting ([ThibG](https://github.com/tootsuite/mastodon/pull/9536)) -- Back to the getting-started when pins the timeline. ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/9561)) -- Allow unauthenticated REST API access to GET /api/v1/accounts/:id/statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/9573)) -- Limit maximum visibility of local silenced users to unlisted ([ThibG](https://github.com/tootsuite/mastodon/pull/9583)) -- Change API error message for unconfirmed accounts ([noellabo](https://github.com/tootsuite/mastodon/pull/9625)) -- Change the icon to "reply-all" when it's a reply to other accounts ([mayaeh](https://github.com/tootsuite/mastodon/pull/9378)) -- Do not ignore federated reports targetting already-reported accounts ([ThibG](https://github.com/tootsuite/mastodon/pull/9534)) -- Upgrade default Ruby version to 2.6.0 ([Gargron](https://github.com/tootsuite/mastodon/pull/9688)) -- Change e-mail digest frequency ([Gargron](https://github.com/tootsuite/mastodon/pull/9689)) -- Change Docker images for Tor support in docker-compose.yml ([Sir-Boops](https://github.com/tootsuite/mastodon/pull/9438)) -- Display fallback link card thumbnail when none is given ([Gargron](https://github.com/tootsuite/mastodon/pull/9715)) -- Change account bio length validation to ignore mention domains and URLs ([Gargron](https://github.com/tootsuite/mastodon/pull/9717)) -- Use configured contact user for "anonymous" federation activities ([yukimochi](https://github.com/tootsuite/mastodon/pull/9661)) -- Change remote interaction dialog to use specific actions instead of generic "interact" ([Gargron](https://github.com/tootsuite/mastodon/pull/9743)) -- Always re-fetch public key when signature verification fails to support blind key rotation ([ThibG](https://github.com/tootsuite/mastodon/pull/9667)) -- Make replies to boosts impossible, connect reply to original status instead ([valerauko](https://github.com/tootsuite/mastodon/pull/9129)) -- Change e-mail MX validation to check both A and MX records against blacklist ([Gargron](https://github.com/tootsuite/mastodon/pull/9489)) -- Hide floating action button on search and getting started pages ([tmm576](https://github.com/tootsuite/mastodon/pull/9826)) -- Redesign public hashtag page to use a masonry layout ([Gargron](https://github.com/tootsuite/mastodon/pull/9822)) -- Use `summary` as summary instead of content warning for converted ActivityPub objects ([Gargron](https://github.com/tootsuite/mastodon/pull/9823)) -- Display a double reply arrow on public pages for toots that are replies ([ThibG](https://github.com/tootsuite/mastodon/pull/9808)) -- Change admin UI right panel size to be wider ([Kjwon15](https://github.com/tootsuite/mastodon/pull/9768)) +- Temporarily pause timeline if mouse moved recently ([lmorchard](https://github.com/mastodon/mastodon/pull/9200)) +- Change the password form order ([mayaeh](https://github.com/mastodon/mastodon/pull/9267)) +- Redesign admin UI for accounts ([Gargron](https://github.com/mastodon/mastodon/pull/9340), [Gargron](https://github.com/mastodon/mastodon/pull/9643)) +- Redesign admin UI for instances/domain blocks ([Gargron](https://github.com/mastodon/mastodon/pull/9645)) +- Swap avatar and header input fields in profile page ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9271)) +- When posting in mobile mode, go back to previous history location ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9502)) +- Split out is_changing_upload from is_submitting ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9536)) +- Back to the getting-started when pins the timeline. ([kedamaDQ](https://github.com/mastodon/mastodon/pull/9561)) +- Allow unauthenticated REST API access to GET /api/v1/accounts/:id/statuses ([Gargron](https://github.com/mastodon/mastodon/pull/9573)) +- Limit maximum visibility of local silenced users to unlisted ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9583)) +- Change API error message for unconfirmed accounts ([noellabo](https://github.com/mastodon/mastodon/pull/9625)) +- Change the icon to "reply-all" when it's a reply to other accounts ([mayaeh](https://github.com/mastodon/mastodon/pull/9378)) +- Do not ignore federated reports targetting already-reported accounts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9534)) +- Upgrade default Ruby version to 2.6.0 ([Gargron](https://github.com/mastodon/mastodon/pull/9688)) +- Change e-mail digest frequency ([Gargron](https://github.com/mastodon/mastodon/pull/9689)) +- Change Docker images for Tor support in docker-compose.yml ([Sir-Boops](https://github.com/mastodon/mastodon/pull/9438)) +- Display fallback link card thumbnail when none is given ([Gargron](https://github.com/mastodon/mastodon/pull/9715)) +- Change account bio length validation to ignore mention domains and URLs ([Gargron](https://github.com/mastodon/mastodon/pull/9717)) +- Use configured contact user for "anonymous" federation activities ([yukimochi](https://github.com/mastodon/mastodon/pull/9661)) +- Change remote interaction dialog to use specific actions instead of generic "interact" ([Gargron](https://github.com/mastodon/mastodon/pull/9743)) +- Always re-fetch public key when signature verification fails to support blind key rotation ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9667)) +- Make replies to boosts impossible, connect reply to original status instead ([valerauko](https://github.com/mastodon/mastodon/pull/9129)) +- Change e-mail MX validation to check both A and MX records against blacklist ([Gargron](https://github.com/mastodon/mastodon/pull/9489)) +- Hide floating action button on search and getting started pages ([tmm576](https://github.com/mastodon/mastodon/pull/9826)) +- Redesign public hashtag page to use a masonry layout ([Gargron](https://github.com/mastodon/mastodon/pull/9822)) +- Use `summary` as summary instead of content warning for converted ActivityPub objects ([Gargron](https://github.com/mastodon/mastodon/pull/9823)) +- Display a double reply arrow on public pages for toots that are replies ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9808)) +- Change admin UI right panel size to be wider ([Kjwon15](https://github.com/mastodon/mastodon/pull/9768)) ### Removed -- Remove links to bridge.joinmastodon.org (non-functional) ([Gargron](https://github.com/tootsuite/mastodon/pull/9608)) -- Remove LD-Signatures from activities that do not need them ([ThibG](https://github.com/tootsuite/mastodon/pull/9659)) +- Remove links to bridge.joinmastodon.org (non-functional) ([Gargron](https://github.com/mastodon/mastodon/pull/9608)) +- Remove LD-Signatures from activities that do not need them ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9659)) ### Fixed -- Remove unused computation of reblog references from updateTimeline ([ThibG](https://github.com/tootsuite/mastodon/pull/9244)) -- Fix loaded embeds resetting if a status arrives from API again ([ThibG](https://github.com/tootsuite/mastodon/pull/9270)) -- Fix race condition causing shallow status with only a "favourited" attribute ([ThibG](https://github.com/tootsuite/mastodon/pull/9272)) -- Remove intermediary arrays when creating hash maps from results ([Gargron](https://github.com/tootsuite/mastodon/pull/9291)) -- Extract counters from accounts table to account_stats table to improve performance ([Gargron](https://github.com/tootsuite/mastodon/pull/9295)) -- Change identities id column to a bigint ([Gargron](https://github.com/tootsuite/mastodon/pull/9371)) -- Fix conversations API pagination ([ThibG](https://github.com/tootsuite/mastodon/pull/9407)) -- Improve account suspension speed and completeness ([Gargron](https://github.com/tootsuite/mastodon/pull/9290)) -- Fix thread depth computation in statuses_controller ([ThibG](https://github.com/tootsuite/mastodon/pull/9426)) -- Fix database deadlocks by moving account stats update outside transaction ([ThibG](https://github.com/tootsuite/mastodon/pull/9437)) -- Escape HTML in profile name preview in profile settings ([pawelngei](https://github.com/tootsuite/mastodon/pull/9446)) -- Use same CORS policy for /@:username and /users/:username ([ThibG](https://github.com/tootsuite/mastodon/pull/9485)) -- Make custom emoji domains case insensitive ([Esteth](https://github.com/tootsuite/mastodon/pull/9474)) -- Various fixes to scrollable lists and media gallery ([ThibG](https://github.com/tootsuite/mastodon/pull/9501)) -- Fix bootsnap cache directory being declared relatively ([Gargron](https://github.com/tootsuite/mastodon/pull/9511)) -- Fix timeline pagination in the web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/9516)) -- Fix padding on dropdown elements in preferences ([ThibG](https://github.com/tootsuite/mastodon/pull/9517)) -- Make avatar and headers respect GIF autoplay settings ([ThibG](https://github.com/tootsuite/mastodon/pull/9515)) -- Do no retry Web Push workers if the server returns a 4xx response ([Gargron](https://github.com/tootsuite/mastodon/pull/9434)) -- Minor scrollable list fixes ([ThibG](https://github.com/tootsuite/mastodon/pull/9551)) -- Ignore low-confidence CharlockHolmes guesses when parsing link cards ([ThibG](https://github.com/tootsuite/mastodon/pull/9510)) -- Fix `tootctl accounts rotate` not updating public keys ([Gargron](https://github.com/tootsuite/mastodon/pull/9556)) -- Fix CSP / X-Frame-Options for media players ([jomo](https://github.com/tootsuite/mastodon/pull/9558)) -- Fix unnecessary loadMore calls when the end of a timeline has been reached ([ThibG](https://github.com/tootsuite/mastodon/pull/9581)) -- Skip mailer job retries when a record no longer exists ([Gargron](https://github.com/tootsuite/mastodon/pull/9590)) -- Fix composer not getting focus after reply confirmation dialog ([ThibG](https://github.com/tootsuite/mastodon/pull/9602)) -- Fix signature verification stoplight triggering on non-timeout errors ([Gargron](https://github.com/tootsuite/mastodon/pull/9617)) -- Fix ThreadResolveWorker getting queued with invalid URLs ([Gargron](https://github.com/tootsuite/mastodon/pull/9628)) -- Fix crash when clearing uninitialized timeline ([ThibG](https://github.com/tootsuite/mastodon/pull/9662)) -- Avoid duplicate work by merging ReplyDistributionWorker into DistributionWorker ([ThibG](https://github.com/tootsuite/mastodon/pull/9660)) -- Skip full text search if it fails, instead of erroring out completely ([Kjwon15](https://github.com/tootsuite/mastodon/pull/9654)) -- Fix profile metadata links not verifying correctly sometimes ([shrft](https://github.com/tootsuite/mastodon/pull/9673)) -- Ensure blocked user unfollows blocker if Block/Undo-Block activities are processed out of order ([ThibG](https://github.com/tootsuite/mastodon/pull/9687)) -- Fix unreadable text color in report modal for some statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/9716)) -- Stop GIFV timeline preview explicitly when it's opened in modal ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/9749)) -- Fix scrollbar width compensation ([ThibG](https://github.com/tootsuite/mastodon/pull/9824)) -- Fix race conditions when processing deleted toots ([ThibG](https://github.com/tootsuite/mastodon/pull/9815)) -- Fix SSO issues on WebKit browsers by disabling Same-Site cookie again ([moritzheiber](https://github.com/tootsuite/mastodon/pull/9819)) -- Fix empty OEmbed error ([renatolond](https://github.com/tootsuite/mastodon/pull/9807)) -- Fix drag & drop modal not disappearing sometimes ([hinaloe](https://github.com/tootsuite/mastodon/pull/9797)) -- Fix statuses with content warnings being displayed in web push notifications sometimes ([ThibG](https://github.com/tootsuite/mastodon/pull/9778)) -- Fix scroll-to-detailed status not working on public pages ([ThibG](https://github.com/tootsuite/mastodon/pull/9773)) -- Fix media modal loading indicator ([ThibG](https://github.com/tootsuite/mastodon/pull/9771)) -- Fix hashtag search results not having a permalink fallback in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/9810)) -- Fix slightly cropped font on settings page dropdowns when using system font ([ariasuni](https://github.com/tootsuite/mastodon/pull/9839)) -- Fix not being able to drag & drop text into forms ([tmm576](https://github.com/tootsuite/mastodon/pull/9840)) +- Remove unused computation of reblog references from updateTimeline ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9244)) +- Fix loaded embeds resetting if a status arrives from API again ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9270)) +- Fix race condition causing shallow status with only a "favourited" attribute ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9272)) +- Remove intermediary arrays when creating hash maps from results ([Gargron](https://github.com/mastodon/mastodon/pull/9291)) +- Extract counters from accounts table to account_stats table to improve performance ([Gargron](https://github.com/mastodon/mastodon/pull/9295)) +- Change identities id column to a bigint ([Gargron](https://github.com/mastodon/mastodon/pull/9371)) +- Fix conversations API pagination ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9407)) +- Improve account suspension speed and completeness ([Gargron](https://github.com/mastodon/mastodon/pull/9290)) +- Fix thread depth computation in statuses_controller ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9426)) +- Fix database deadlocks by moving account stats update outside transaction ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9437)) +- Escape HTML in profile name preview in profile settings ([pawelngei](https://github.com/mastodon/mastodon/pull/9446)) +- Use same CORS policy for /@:username and /users/:username ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9485)) +- Make custom emoji domains case insensitive ([Esteth](https://github.com/mastodon/mastodon/pull/9474)) +- Various fixes to scrollable lists and media gallery ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9501)) +- Fix bootsnap cache directory being declared relatively ([Gargron](https://github.com/mastodon/mastodon/pull/9511)) +- Fix timeline pagination in the web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9516)) +- Fix padding on dropdown elements in preferences ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9517)) +- Make avatar and headers respect GIF autoplay settings ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9515)) +- Do no retry Web Push workers if the server returns a 4xx response ([Gargron](https://github.com/mastodon/mastodon/pull/9434)) +- Minor scrollable list fixes ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9551)) +- Ignore low-confidence CharlockHolmes guesses when parsing link cards ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9510)) +- Fix `tootctl accounts rotate` not updating public keys ([Gargron](https://github.com/mastodon/mastodon/pull/9556)) +- Fix CSP / X-Frame-Options for media players ([jomo](https://github.com/mastodon/mastodon/pull/9558)) +- Fix unnecessary loadMore calls when the end of a timeline has been reached ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9581)) +- Skip mailer job retries when a record no longer exists ([Gargron](https://github.com/mastodon/mastodon/pull/9590)) +- Fix composer not getting focus after reply confirmation dialog ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9602)) +- Fix signature verification stoplight triggering on non-timeout errors ([Gargron](https://github.com/mastodon/mastodon/pull/9617)) +- Fix ThreadResolveWorker getting queued with invalid URLs ([Gargron](https://github.com/mastodon/mastodon/pull/9628)) +- Fix crash when clearing uninitialized timeline ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9662)) +- Avoid duplicate work by merging ReplyDistributionWorker into DistributionWorker ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9660)) +- Skip full text search if it fails, instead of erroring out completely ([Kjwon15](https://github.com/mastodon/mastodon/pull/9654)) +- Fix profile metadata links not verifying correctly sometimes ([shrft](https://github.com/mastodon/mastodon/pull/9673)) +- Ensure blocked user unfollows blocker if Block/Undo-Block activities are processed out of order ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9687)) +- Fix unreadable text color in report modal for some statuses ([Gargron](https://github.com/mastodon/mastodon/pull/9716)) +- Stop GIFV timeline preview explicitly when it's opened in modal ([kedamaDQ](https://github.com/mastodon/mastodon/pull/9749)) +- Fix scrollbar width compensation ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9824)) +- Fix race conditions when processing deleted toots ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9815)) +- Fix SSO issues on WebKit browsers by disabling Same-Site cookie again ([moritzheiber](https://github.com/mastodon/mastodon/pull/9819)) +- Fix empty OEmbed error ([renatolond](https://github.com/mastodon/mastodon/pull/9807)) +- Fix drag & drop modal not disappearing sometimes ([hinaloe](https://github.com/mastodon/mastodon/pull/9797)) +- Fix statuses with content warnings being displayed in web push notifications sometimes ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9778)) +- Fix scroll-to-detailed status not working on public pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9773)) +- Fix media modal loading indicator ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9771)) +- Fix hashtag search results not having a permalink fallback in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9810)) +- Fix slightly cropped font on settings page dropdowns when using system font ([ariasuni](https://github.com/mastodon/mastodon/pull/9839)) +- Fix not being able to drag & drop text into forms ([tmm576](https://github.com/mastodon/mastodon/pull/9840)) ### Security -- Sanitize and sandbox toot embeds in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/9552)) -- Add tombstones for remote statuses to prevent replay attacks ([ThibG](https://github.com/tootsuite/mastodon/pull/9830)) +- Sanitize and sandbox toot embeds in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9552)) +- Add tombstones for remote statuses to prevent replay attacks ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9830)) ## [2.6.5] - 2018-12-01 ### Changed -- Change lists to display replies to others on the list and list owner ([ThibG](https://github.com/tootsuite/mastodon/pull/9324)) +- Change lists to display replies to others on the list and list owner ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9324)) ### Fixed -- Fix failures caused by commonly-used JSON-LD contexts being unavailable ([ThibG](https://github.com/tootsuite/mastodon/pull/9412)) +- Fix failures caused by commonly-used JSON-LD contexts being unavailable ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9412)) ## [2.6.4] - 2018-11-30 ### Fixed -- Fix yarn dependencies not installing due to yanked event-stream package ([Gargron](https://github.com/tootsuite/mastodon/pull/9401)) +- Fix yarn dependencies not installing due to yanked event-stream package ([Gargron](https://github.com/mastodon/mastodon/pull/9401)) ## [2.6.3] - 2018-11-30 ### Added -- Add hyphen to characters allowed in remote usernames ([ThibG](https://github.com/tootsuite/mastodon/pull/9345)) +- Add hyphen to characters allowed in remote usernames ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9345)) ### Changed -- Change server user count to exclude suspended accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/9380)) +- Change server user count to exclude suspended accounts ([Gargron](https://github.com/mastodon/mastodon/pull/9380)) ### Fixed -- Fix ffmpeg processing sometimes stalling due to overfilled stdout buffer ([hugogameiro](https://github.com/tootsuite/mastodon/pull/9368)) -- Fix missing DNS records raising the wrong kind of exception ([Gargron](https://github.com/tootsuite/mastodon/pull/9379)) -- Fix already queued deliveries still trying to reach inboxes marked as unavailable ([Gargron](https://github.com/tootsuite/mastodon/pull/9358)) +- Fix ffmpeg processing sometimes stalling due to overfilled stdout buffer ([hugogameiro](https://github.com/mastodon/mastodon/pull/9368)) +- Fix missing DNS records raising the wrong kind of exception ([Gargron](https://github.com/mastodon/mastodon/pull/9379)) +- Fix already queued deliveries still trying to reach inboxes marked as unavailable ([Gargron](https://github.com/mastodon/mastodon/pull/9358)) ### Security -- Fix TLS handshake timeout not being enforced ([Gargron](https://github.com/tootsuite/mastodon/pull/9381)) +- Fix TLS handshake timeout not being enforced ([Gargron](https://github.com/mastodon/mastodon/pull/9381)) ## [2.6.2] - 2018-11-23 ### Added -- Add Page to whitelisted ActivityPub types ([mbajur](https://github.com/tootsuite/mastodon/pull/9188)) -- Add 20px to column width in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/9227)) -- Add amount of freed disk space in `tootctl media remove` ([Gargron](https://github.com/tootsuite/mastodon/pull/9229), [Gargron](https://github.com/tootsuite/mastodon/pull/9239), [mayaeh](https://github.com/tootsuite/mastodon/pull/9288)) -- Add "Show thread" link to self-replies ([Gargron](https://github.com/tootsuite/mastodon/pull/9228)) +- Add Page to whitelisted ActivityPub types ([mbajur](https://github.com/mastodon/mastodon/pull/9188)) +- Add 20px to column width in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/9227)) +- Add amount of freed disk space in `tootctl media remove` ([Gargron](https://github.com/mastodon/mastodon/pull/9229), [Gargron](https://github.com/mastodon/mastodon/pull/9239), [mayaeh](https://github.com/mastodon/mastodon/pull/9288)) +- Add "Show thread" link to self-replies ([Gargron](https://github.com/mastodon/mastodon/pull/9228)) ### Changed -- Change order of Atom and RSS links so Atom is first ([Alkarex](https://github.com/tootsuite/mastodon/pull/9302)) -- Change Nginx configuration for Nanobox apps ([danhunsaker](https://github.com/tootsuite/mastodon/pull/9310)) -- Change the follow action to appear instant in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/9220)) -- Change how the ActiveRecord connection is instantiated in on_worker_boot ([Gargron](https://github.com/tootsuite/mastodon/pull/9238)) -- Change `tootctl accounts cull` to always touch accounts so they can be skipped ([renatolond](https://github.com/tootsuite/mastodon/pull/9293)) -- Change mime type comparison to ignore JSON-LD profile ([valerauko](https://github.com/tootsuite/mastodon/pull/9179)) +- Change order of Atom and RSS links so Atom is first ([Alkarex](https://github.com/mastodon/mastodon/pull/9302)) +- Change Nginx configuration for Nanobox apps ([danhunsaker](https://github.com/mastodon/mastodon/pull/9310)) +- Change the follow action to appear instant in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/9220)) +- Change how the ActiveRecord connection is instantiated in on_worker_boot ([Gargron](https://github.com/mastodon/mastodon/pull/9238)) +- Change `tootctl accounts cull` to always touch accounts so they can be skipped ([renatolond](https://github.com/mastodon/mastodon/pull/9293)) +- Change mime type comparison to ignore JSON-LD profile ([valerauko](https://github.com/mastodon/mastodon/pull/9179)) ### Fixed -- Fix web UI crash when conversation has no last status ([sammy8806](https://github.com/tootsuite/mastodon/pull/9207)) -- Fix follow limit validator reporting lower number past threshold ([Gargron](https://github.com/tootsuite/mastodon/pull/9230)) -- Fix form validation flash message color and input borders ([Gargron](https://github.com/tootsuite/mastodon/pull/9235)) -- Fix invalid twitter:player cards being displayed ([ThibG](https://github.com/tootsuite/mastodon/pull/9254)) -- Fix emoji update date being processed incorrectly ([ThibG](https://github.com/tootsuite/mastodon/pull/9255)) -- Fix playing embed resetting if status is reloaded in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/9270), [Gargron](https://github.com/tootsuite/mastodon/pull/9275)) -- Fix web UI crash when favouriting a deleted status ([ThibG](https://github.com/tootsuite/mastodon/pull/9272)) -- Fix intermediary arrays being created for hash maps ([Gargron](https://github.com/tootsuite/mastodon/pull/9291)) -- Fix filter ID not being a string in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/9303)) +- Fix web UI crash when conversation has no last status ([sammy8806](https://github.com/mastodon/mastodon/pull/9207)) +- Fix follow limit validator reporting lower number past threshold ([Gargron](https://github.com/mastodon/mastodon/pull/9230)) +- Fix form validation flash message color and input borders ([Gargron](https://github.com/mastodon/mastodon/pull/9235)) +- Fix invalid twitter:player cards being displayed ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9254)) +- Fix emoji update date being processed incorrectly ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9255)) +- Fix playing embed resetting if status is reloaded in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9270), [Gargron](https://github.com/mastodon/mastodon/pull/9275)) +- Fix web UI crash when favouriting a deleted status ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9272)) +- Fix intermediary arrays being created for hash maps ([Gargron](https://github.com/mastodon/mastodon/pull/9291)) +- Fix filter ID not being a string in REST API ([Gargron](https://github.com/mastodon/mastodon/pull/9303)) ### Security -- Fix multiple remote account deletions being able to deadlock the database ([Gargron](https://github.com/tootsuite/mastodon/pull/9292)) -- Fix HTTP connection timeout of 10s not being enforced ([Gargron](https://github.com/tootsuite/mastodon/pull/9329)) +- Fix multiple remote account deletions being able to deadlock the database ([Gargron](https://github.com/mastodon/mastodon/pull/9292)) +- Fix HTTP connection timeout of 10s not being enforced ([Gargron](https://github.com/mastodon/mastodon/pull/9329)) ## [2.6.1] - 2018-10-30 ### Fixed -- Fix resolving resources by URL not working due to a regression in [valerauko](https://github.com/tootsuite/mastodon/pull/9132) ([Gargron](https://github.com/tootsuite/mastodon/pull/9171)) -- Fix reducer error in web UI when a conversation has no last status ([Gargron](https://github.com/tootsuite/mastodon/pull/9173)) +- Fix resolving resources by URL not working due to a regression in [valerauko](https://github.com/mastodon/mastodon/pull/9132) ([Gargron](https://github.com/mastodon/mastodon/pull/9171)) +- Fix reducer error in web UI when a conversation has no last status ([Gargron](https://github.com/mastodon/mastodon/pull/9173)) ## [2.6.0] - 2018-10-30 ### Added -- Add link ownership verification ([Gargron](https://github.com/tootsuite/mastodon/pull/8703)) -- Add conversations API ([Gargron](https://github.com/tootsuite/mastodon/pull/8832)) -- Add limit for the number of people that can be followed from one account ([Gargron](https://github.com/tootsuite/mastodon/pull/8807)) -- Add admin setting to customize mascot ([ashleyhull-versent](https://github.com/tootsuite/mastodon/pull/8766)) -- Add support for more granular ActivityPub audiences from other software, i.e. circles ([Gargron](https://github.com/tootsuite/mastodon/pull/8950), [Gargron](https://github.com/tootsuite/mastodon/pull/9093), [Gargron](https://github.com/tootsuite/mastodon/pull/9150)) -- Add option to block all reports from a domain ([Gargron](https://github.com/tootsuite/mastodon/pull/8830)) -- Add user preference to always expand toots marked with content warnings ([webroo](https://github.com/tootsuite/mastodon/pull/8762)) -- Add user preference to always hide all media ([fvh-P](https://github.com/tootsuite/mastodon/pull/8569)) -- Add `force_login` param to OAuth authorize page ([Gargron](https://github.com/tootsuite/mastodon/pull/8655)) -- Add `tootctl accounts backup` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811)) -- Add `tootctl accounts create` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811)) -- Add `tootctl accounts cull` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811)) -- Add `tootctl accounts delete` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811)) -- Add `tootctl accounts modify` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811)) -- Add `tootctl accounts refresh` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811)) -- Add `tootctl feeds build` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811)) -- Add `tootctl feeds clear` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811)) -- Add `tootctl settings registrations open` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811)) -- Add `tootctl settings registrations close` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811)) -- Add `min_id` param to REST API to support backwards pagination ([Gargron](https://github.com/tootsuite/mastodon/pull/8736)) -- Add a confirmation dialog when hitting reply and the compose box isn't empty ([ThibG](https://github.com/tootsuite/mastodon/pull/8893)) -- Add PostgreSQL disk space growth tracking in PGHero ([Gargron](https://github.com/tootsuite/mastodon/pull/8906)) -- Add button for disabling local account to report quick actions bar ([Gargron](https://github.com/tootsuite/mastodon/pull/9024)) -- Add Czech language ([Aditoo17](https://github.com/tootsuite/mastodon/pull/8594)) -- Add `same-site` (`lax`) attribute to cookies ([sorin-davidoi](https://github.com/tootsuite/mastodon/pull/8626)) -- Add support for styled scrollbars in Firefox Nightly ([sorin-davidoi](https://github.com/tootsuite/mastodon/pull/8653)) -- Add highlight to the active tab in web UI profiles ([rhoio](https://github.com/tootsuite/mastodon/pull/8673)) -- Add auto-focus for comment textarea in report modal ([ThibG](https://github.com/tootsuite/mastodon/pull/8689)) -- Add auto-focus for emoji picker's search field ([ThibG](https://github.com/tootsuite/mastodon/pull/8688)) -- Add nginx and systemd templates to `dist/` directory ([Gargron](https://github.com/tootsuite/mastodon/pull/8770)) -- Add support for `/.well-known/change-password` ([Gargron](https://github.com/tootsuite/mastodon/pull/8828)) -- Add option to override FFMPEG binary path ([sascha-sl](https://github.com/tootsuite/mastodon/pull/8855)) -- Add `dns-prefetch` tag when using different host for assets or uploads ([Gargron](https://github.com/tootsuite/mastodon/pull/8942)) -- Add `description` meta tag ([Gargron](https://github.com/tootsuite/mastodon/pull/8941)) -- Add `Content-Security-Policy` header ([ThibG](https://github.com/tootsuite/mastodon/pull/8957)) -- Add cache for the instance info API ([ykzts](https://github.com/tootsuite/mastodon/pull/8765)) -- Add suggested follows to search screen in mobile layout ([Gargron](https://github.com/tootsuite/mastodon/pull/9010)) -- Add CORS header to `/.well-known/*` routes ([BenLubar](https://github.com/tootsuite/mastodon/pull/9083)) -- Add `card` attribute to statuses returned from REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/9120)) -- Add in-stream link preview ([Gargron](https://github.com/tootsuite/mastodon/pull/9120)) -- Add support for ActivityPub `Page` objects ([mbajur](https://github.com/tootsuite/mastodon/pull/9121)) +- Add link ownership verification ([Gargron](https://github.com/mastodon/mastodon/pull/8703)) +- Add conversations API ([Gargron](https://github.com/mastodon/mastodon/pull/8832)) +- Add limit for the number of people that can be followed from one account ([Gargron](https://github.com/mastodon/mastodon/pull/8807)) +- Add admin setting to customize mascot ([ashleyhull-versent](https://github.com/mastodon/mastodon/pull/8766)) +- Add support for more granular ActivityPub audiences from other software, i.e. circles ([Gargron](https://github.com/mastodon/mastodon/pull/8950), [Gargron](https://github.com/mastodon/mastodon/pull/9093), [Gargron](https://github.com/mastodon/mastodon/pull/9150)) +- Add option to block all reports from a domain ([Gargron](https://github.com/mastodon/mastodon/pull/8830)) +- Add user preference to always expand toots marked with content warnings ([webroo](https://github.com/mastodon/mastodon/pull/8762)) +- Add user preference to always hide all media ([fvh-P](https://github.com/mastodon/mastodon/pull/8569)) +- Add `force_login` param to OAuth authorize page ([Gargron](https://github.com/mastodon/mastodon/pull/8655)) +- Add `tootctl accounts backup` ([Gargron](https://github.com/mastodon/mastodon/pull/8642), [Gargron](https://github.com/mastodon/mastodon/pull/8811)) +- Add `tootctl accounts create` ([Gargron](https://github.com/mastodon/mastodon/pull/8642), [Gargron](https://github.com/mastodon/mastodon/pull/8811)) +- Add `tootctl accounts cull` ([Gargron](https://github.com/mastodon/mastodon/pull/8642), [Gargron](https://github.com/mastodon/mastodon/pull/8811)) +- Add `tootctl accounts delete` ([Gargron](https://github.com/mastodon/mastodon/pull/8642), [Gargron](https://github.com/mastodon/mastodon/pull/8811)) +- Add `tootctl accounts modify` ([Gargron](https://github.com/mastodon/mastodon/pull/8642), [Gargron](https://github.com/mastodon/mastodon/pull/8811)) +- Add `tootctl accounts refresh` ([Gargron](https://github.com/mastodon/mastodon/pull/8642), [Gargron](https://github.com/mastodon/mastodon/pull/8811)) +- Add `tootctl feeds build` ([Gargron](https://github.com/mastodon/mastodon/pull/8642), [Gargron](https://github.com/mastodon/mastodon/pull/8811)) +- Add `tootctl feeds clear` ([Gargron](https://github.com/mastodon/mastodon/pull/8642), [Gargron](https://github.com/mastodon/mastodon/pull/8811)) +- Add `tootctl settings registrations open` ([Gargron](https://github.com/mastodon/mastodon/pull/8642), [Gargron](https://github.com/mastodon/mastodon/pull/8811)) +- Add `tootctl settings registrations close` ([Gargron](https://github.com/mastodon/mastodon/pull/8642), [Gargron](https://github.com/mastodon/mastodon/pull/8811)) +- Add `min_id` param to REST API to support backwards pagination ([Gargron](https://github.com/mastodon/mastodon/pull/8736)) +- Add a confirmation dialog when hitting reply and the compose box isn't empty ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/8893)) +- Add PostgreSQL disk space growth tracking in PGHero ([Gargron](https://github.com/mastodon/mastodon/pull/8906)) +- Add button for disabling local account to report quick actions bar ([Gargron](https://github.com/mastodon/mastodon/pull/9024)) +- Add Czech language ([Aditoo17](https://github.com/mastodon/mastodon/pull/8594)) +- Add `same-site` (`lax`) attribute to cookies ([sorin-davidoi](https://github.com/mastodon/mastodon/pull/8626)) +- Add support for styled scrollbars in Firefox Nightly ([sorin-davidoi](https://github.com/mastodon/mastodon/pull/8653)) +- Add highlight to the active tab in web UI profiles ([rhoio](https://github.com/mastodon/mastodon/pull/8673)) +- Add auto-focus for comment textarea in report modal ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/8689)) +- Add auto-focus for emoji picker's search field ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/8688)) +- Add nginx and systemd templates to `dist/` directory ([Gargron](https://github.com/mastodon/mastodon/pull/8770)) +- Add support for `/.well-known/change-password` ([Gargron](https://github.com/mastodon/mastodon/pull/8828)) +- Add option to override FFMPEG binary path ([sascha-sl](https://github.com/mastodon/mastodon/pull/8855)) +- Add `dns-prefetch` tag when using different host for assets or uploads ([Gargron](https://github.com/mastodon/mastodon/pull/8942)) +- Add `description` meta tag ([Gargron](https://github.com/mastodon/mastodon/pull/8941)) +- Add `Content-Security-Policy` header ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/8957)) +- Add cache for the instance info API ([ykzts](https://github.com/mastodon/mastodon/pull/8765)) +- Add suggested follows to search screen in mobile layout ([Gargron](https://github.com/mastodon/mastodon/pull/9010)) +- Add CORS header to `/.well-known/*` routes ([BenLubar](https://github.com/mastodon/mastodon/pull/9083)) +- Add `card` attribute to statuses returned from REST API ([Gargron](https://github.com/mastodon/mastodon/pull/9120)) +- Add in-stream link preview ([Gargron](https://github.com/mastodon/mastodon/pull/9120)) +- Add support for ActivityPub `Page` objects ([mbajur](https://github.com/mastodon/mastodon/pull/9121)) ### Changed -- Change forms design ([Gargron](https://github.com/tootsuite/mastodon/pull/8703)) -- Change reports overview to group by target account ([Gargron](https://github.com/tootsuite/mastodon/pull/8674)) -- Change web UI to show "read more" link on overly long in-stream statuses ([lanodan](https://github.com/tootsuite/mastodon/pull/8205)) -- Change design of direct messages column ([Gargron](https://github.com/tootsuite/mastodon/pull/8832), [Gargron](https://github.com/tootsuite/mastodon/pull/9022)) -- Change home timelines to exclude DMs ([Gargron](https://github.com/tootsuite/mastodon/pull/8940)) -- Change list timelines to exclude all replies ([cbayerlein](https://github.com/tootsuite/mastodon/pull/8683)) -- Change admin accounts UI default sort to most recent ([Gargron](https://github.com/tootsuite/mastodon/pull/8813)) -- Change documentation URL in the UI ([Gargron](https://github.com/tootsuite/mastodon/pull/8898)) -- Change style of success and failure messages ([Gargron](https://github.com/tootsuite/mastodon/pull/8973)) -- Change DM filtering to always allow DMs from staff ([qguv](https://github.com/tootsuite/mastodon/pull/8993)) -- Change recommended Ruby version to 2.5.3 ([zunda](https://github.com/tootsuite/mastodon/pull/9003)) -- Change docker-compose default to persist volumes in current directory ([Gargron](https://github.com/tootsuite/mastodon/pull/9055)) -- Change character counters on edit profile page to input length limit ([Gargron](https://github.com/tootsuite/mastodon/pull/9100)) -- Change notification filtering to always let through messages from staff ([Gargron](https://github.com/tootsuite/mastodon/pull/9152)) -- Change "hide boosts from user" function also hiding notifications about boosts ([ThibG](https://github.com/tootsuite/mastodon/pull/9147)) -- Change CSS `detailed-status__wrapper` class actually wrap the detailed status ([trwnh](https://github.com/tootsuite/mastodon/pull/8547)) +- Change forms design ([Gargron](https://github.com/mastodon/mastodon/pull/8703)) +- Change reports overview to group by target account ([Gargron](https://github.com/mastodon/mastodon/pull/8674)) +- Change web UI to show "read more" link on overly long in-stream statuses ([lanodan](https://github.com/mastodon/mastodon/pull/8205)) +- Change design of direct messages column ([Gargron](https://github.com/mastodon/mastodon/pull/8832), [Gargron](https://github.com/mastodon/mastodon/pull/9022)) +- Change home timelines to exclude DMs ([Gargron](https://github.com/mastodon/mastodon/pull/8940)) +- Change list timelines to exclude all replies ([cbayerlein](https://github.com/mastodon/mastodon/pull/8683)) +- Change admin accounts UI default sort to most recent ([Gargron](https://github.com/mastodon/mastodon/pull/8813)) +- Change documentation URL in the UI ([Gargron](https://github.com/mastodon/mastodon/pull/8898)) +- Change style of success and failure messages ([Gargron](https://github.com/mastodon/mastodon/pull/8973)) +- Change DM filtering to always allow DMs from staff ([qguv](https://github.com/mastodon/mastodon/pull/8993)) +- Change recommended Ruby version to 2.5.3 ([zunda](https://github.com/mastodon/mastodon/pull/9003)) +- Change docker-compose default to persist volumes in current directory ([Gargron](https://github.com/mastodon/mastodon/pull/9055)) +- Change character counters on edit profile page to input length limit ([Gargron](https://github.com/mastodon/mastodon/pull/9100)) +- Change notification filtering to always let through messages from staff ([Gargron](https://github.com/mastodon/mastodon/pull/9152)) +- Change "hide boosts from user" function also hiding notifications about boosts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9147)) +- Change CSS `detailed-status__wrapper` class actually wrap the detailed status ([trwnh](https://github.com/mastodon/mastodon/pull/8547)) ### Deprecated -- `GET /api/v1/timelines/direct` → `GET /api/v1/conversations` ([Gargron](https://github.com/tootsuite/mastodon/pull/8832)) -- `POST /api/v1/notifications/dismiss` → `POST /api/v1/notifications/:id/dismiss` ([Gargron](https://github.com/tootsuite/mastodon/pull/8905)) -- `GET /api/v1/statuses/:id/card` → `card` attributed included in status ([Gargron](https://github.com/tootsuite/mastodon/pull/9120)) +- `GET /api/v1/timelines/direct` → `GET /api/v1/conversations` ([Gargron](https://github.com/mastodon/mastodon/pull/8832)) +- `POST /api/v1/notifications/dismiss` → `POST /api/v1/notifications/:id/dismiss` ([Gargron](https://github.com/mastodon/mastodon/pull/8905)) +- `GET /api/v1/statuses/:id/card` → `card` attributed included in status ([Gargron](https://github.com/mastodon/mastodon/pull/9120)) ### Removed -- Remove "on this device" label in column push settings ([rhoio](https://github.com/tootsuite/mastodon/pull/8704)) -- Remove rake tasks in favour of tootctl commands ([Gargron](https://github.com/tootsuite/mastodon/pull/8675)) +- Remove "on this device" label in column push settings ([rhoio](https://github.com/mastodon/mastodon/pull/8704)) +- Remove rake tasks in favour of tootctl commands ([Gargron](https://github.com/mastodon/mastodon/pull/8675)) ### Fixed -- Fix remote statuses using instance's default locale if no language given ([Kjwon15](https://github.com/tootsuite/mastodon/pull/8861)) -- Fix streaming API not exiting when port or socket is unavailable ([Gargron](https://github.com/tootsuite/mastodon/pull/9023)) -- Fix network calls being performed in database transaction in ActivityPub handler ([Gargron](https://github.com/tootsuite/mastodon/pull/8951)) -- Fix dropdown arrow position ([ThibG](https://github.com/tootsuite/mastodon/pull/8637)) -- Fix first element of dropdowns being focused even if not using keyboard ([ThibG](https://github.com/tootsuite/mastodon/pull/8679)) -- Fix tootctl requiring `bundle exec` invocation ([abcang](https://github.com/tootsuite/mastodon/pull/8619)) -- Fix public pages not using animation preference for avatars ([renatolond](https://github.com/tootsuite/mastodon/pull/8614)) -- Fix OEmbed/OpenGraph cards not understanding relative URLs ([ThibG](https://github.com/tootsuite/mastodon/pull/8669)) -- Fix some dark emojis not having a white outline ([ThibG](https://github.com/tootsuite/mastodon/pull/8597)) -- Fix media description not being displayed in various media modals ([ThibG](https://github.com/tootsuite/mastodon/pull/8678)) -- Fix generated URLs of desktop notifications missing base URL ([GenbuHase](https://github.com/tootsuite/mastodon/pull/8758)) -- Fix RTL styles ([mabkenar](https://github.com/tootsuite/mastodon/pull/8764), [mabkenar](https://github.com/tootsuite/mastodon/pull/8767), [mabkenar](https://github.com/tootsuite/mastodon/pull/8823), [mabkenar](https://github.com/tootsuite/mastodon/pull/8897), [mabkenar](https://github.com/tootsuite/mastodon/pull/9005), [mabkenar](https://github.com/tootsuite/mastodon/pull/9007), [mabkenar](https://github.com/tootsuite/mastodon/pull/9018), [mabkenar](https://github.com/tootsuite/mastodon/pull/9021), [mabkenar](https://github.com/tootsuite/mastodon/pull/9145), [mabkenar](https://github.com/tootsuite/mastodon/pull/9146)) -- Fix crash in streaming API when tag param missing ([Gargron](https://github.com/tootsuite/mastodon/pull/8955)) -- Fix hotkeys not working when no element is focused ([ThibG](https://github.com/tootsuite/mastodon/pull/8998)) -- Fix some hotkeys not working on detailed status view ([ThibG](https://github.com/tootsuite/mastodon/pull/9006)) -- Fix og:url on status pages ([ThibG](https://github.com/tootsuite/mastodon/pull/9047)) -- Fix upload option buttons only being visible on hover ([Gargron](https://github.com/tootsuite/mastodon/pull/9074)) -- Fix tootctl not returning exit code 1 on wrong arguments ([sascha-sl](https://github.com/tootsuite/mastodon/pull/9094)) -- Fix preview cards for appearing for profiles mentioned in toot ([ThibG](https://github.com/tootsuite/mastodon/pull/6934), [ThibG](https://github.com/tootsuite/mastodon/pull/9158)) -- Fix local accounts sometimes being duplicated as faux-remote ([Gargron](https://github.com/tootsuite/mastodon/pull/9109)) -- Fix emoji search when the shortcode has multiple separators ([ThibG](https://github.com/tootsuite/mastodon/pull/9124)) -- Fix dropdowns sometimes being partially obscured by other elements ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/9126)) -- Fix cache not updating when reply/boost/favourite counters or media sensitivity update ([Gargron](https://github.com/tootsuite/mastodon/pull/9119)) -- Fix empty display name precedence over username in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/9163)) -- Fix td instead of th in sessions table header ([Gargron](https://github.com/tootsuite/mastodon/pull/9162)) -- Fix handling of content types with profile ([valerauko](https://github.com/tootsuite/mastodon/pull/9132)) +- Fix remote statuses using instance's default locale if no language given ([Kjwon15](https://github.com/mastodon/mastodon/pull/8861)) +- Fix streaming API not exiting when port or socket is unavailable ([Gargron](https://github.com/mastodon/mastodon/pull/9023)) +- Fix network calls being performed in database transaction in ActivityPub handler ([Gargron](https://github.com/mastodon/mastodon/pull/8951)) +- Fix dropdown arrow position ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/8637)) +- Fix first element of dropdowns being focused even if not using keyboard ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/8679)) +- Fix tootctl requiring `bundle exec` invocation ([abcang](https://github.com/mastodon/mastodon/pull/8619)) +- Fix public pages not using animation preference for avatars ([renatolond](https://github.com/mastodon/mastodon/pull/8614)) +- Fix OEmbed/OpenGraph cards not understanding relative URLs ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/8669)) +- Fix some dark emojis not having a white outline ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/8597)) +- Fix media description not being displayed in various media modals ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/8678)) +- Fix generated URLs of desktop notifications missing base URL ([GenbuHase](https://github.com/mastodon/mastodon/pull/8758)) +- Fix RTL styles ([mabkenar](https://github.com/mastodon/mastodon/pull/8764), [mabkenar](https://github.com/mastodon/mastodon/pull/8767), [mabkenar](https://github.com/mastodon/mastodon/pull/8823), [mabkenar](https://github.com/mastodon/mastodon/pull/8897), [mabkenar](https://github.com/mastodon/mastodon/pull/9005), [mabkenar](https://github.com/mastodon/mastodon/pull/9007), [mabkenar](https://github.com/mastodon/mastodon/pull/9018), [mabkenar](https://github.com/mastodon/mastodon/pull/9021), [mabkenar](https://github.com/mastodon/mastodon/pull/9145), [mabkenar](https://github.com/mastodon/mastodon/pull/9146)) +- Fix crash in streaming API when tag param missing ([Gargron](https://github.com/mastodon/mastodon/pull/8955)) +- Fix hotkeys not working when no element is focused ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/8998)) +- Fix some hotkeys not working on detailed status view ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9006)) +- Fix og:url on status pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9047)) +- Fix upload option buttons only being visible on hover ([Gargron](https://github.com/mastodon/mastodon/pull/9074)) +- Fix tootctl not returning exit code 1 on wrong arguments ([sascha-sl](https://github.com/mastodon/mastodon/pull/9094)) +- Fix preview cards for appearing for profiles mentioned in toot ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/6934), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/9158)) +- Fix local accounts sometimes being duplicated as faux-remote ([Gargron](https://github.com/mastodon/mastodon/pull/9109)) +- Fix emoji search when the shortcode has multiple separators ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9124)) +- Fix dropdowns sometimes being partially obscured by other elements ([kedamaDQ](https://github.com/mastodon/mastodon/pull/9126)) +- Fix cache not updating when reply/boost/favourite counters or media sensitivity update ([Gargron](https://github.com/mastodon/mastodon/pull/9119)) +- Fix empty display name precedence over username in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/9163)) +- Fix td instead of th in sessions table header ([Gargron](https://github.com/mastodon/mastodon/pull/9162)) +- Fix handling of content types with profile ([valerauko](https://github.com/mastodon/mastodon/pull/9132)) ## [2.5.2] - 2018-10-12 ### Security -- Fix XSS vulnerability ([Gargron](https://github.com/tootsuite/mastodon/pull/8959)) +- Fix XSS vulnerability ([Gargron](https://github.com/mastodon/mastodon/pull/8959)) ## [2.5.1] - 2018-10-07 ### Fixed -- Fix database migrations for PostgreSQL below 9.5 ([Gargron](https://github.com/tootsuite/mastodon/pull/8903)) -- Fix class autoloading issue in ActivityPub Create handler ([Gargron](https://github.com/tootsuite/mastodon/pull/8820)) -- Fix cache statistics not being sent via statsd when statsd enabled ([ykzts](https://github.com/tootsuite/mastodon/pull/8831)) -- Bump puma from 3.11.4 to 3.12.0 ([dependabot[bot]](https://github.com/tootsuite/mastodon/pull/8883)) +- Fix database migrations for PostgreSQL below 9.5 ([Gargron](https://github.com/mastodon/mastodon/pull/8903)) +- Fix class autoloading issue in ActivityPub Create handler ([Gargron](https://github.com/mastodon/mastodon/pull/8820)) +- Fix cache statistics not being sent via statsd when statsd enabled ([ykzts](https://github.com/mastodon/mastodon/pull/8831)) +- Bump puma from 3.11.4 to 3.12.0 ([dependabot[bot]](https://github.com/mastodon/mastodon/pull/8883)) ### Security -- Fix some local images not having their EXIF metadata stripped on upload ([ThibG](https://github.com/tootsuite/mastodon/pull/8714)) -- Fix being able to enable a disabled relay via ActivityPub Accept handler ([ThibG](https://github.com/tootsuite/mastodon/pull/8864)) -- Bump nokogiri from 1.8.4 to 1.8.5 ([dependabot[bot]](https://github.com/tootsuite/mastodon/pull/8881)) -- Fix being able to report statuses not belonging to the reported account ([ThibG](https://github.com/tootsuite/mastodon/pull/8916)) +- Fix some local images not having their EXIF metadata stripped on upload ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/8714)) +- Fix being able to enable a disabled relay via ActivityPub Accept handler ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/8864)) +- Bump nokogiri from 1.8.4 to 1.8.5 ([dependabot[bot]](https://github.com/mastodon/mastodon/pull/8881)) +- Fix being able to report statuses not belonging to the reported account ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/8916)) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0d563559b..3f51c4bd0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,7 +14,7 @@ If your contributions are accepted into Mastodon, you can request to be paid thr ## Bug reports -Bug reports and feature suggestions must use descriptive and concise titles and be submitted to [GitHub Issues](https://github.com/tootsuite/mastodon/issues). Please use the search function to make sure that you are not submitting duplicates, and that a similar report or request has not already been resolved or rejected. +Bug reports and feature suggestions must use descriptive and concise titles and be submitted to [GitHub Issues](https://github.com/mastodon/mastodon/issues). Please use the search function to make sure that you are not submitting duplicates, and that a similar report or request has not already been resolved or rejected. ## Translations @@ -44,4 +44,4 @@ It is not always possible to phrase every change in such a manner, but it is des ## Documentation -The [Mastodon documentation](https://docs.joinmastodon.org) is a statically generated site. You can [submit merge requests to tootsuite/documentation](https://github.com/tootsuite/documentation). +The [Mastodon documentation](https://docs.joinmastodon.org) is a statically generated site. You can [submit merge requests to mastodon/documentation](https://github.com/mastodon/documentation). diff --git a/Dockerfile b/Dockerfile index 962e5a8c9..ab29e79b8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,8 +3,8 @@ FROM ubuntu:20.04 as build-dep # Use bash for the shell SHELL ["/bin/bash", "-c"] -# Install Node v12 (LTS) -ENV NODE_VER="12.21.0" +# Install Node v14 (LTS) +ENV NODE_VER="14.17.6" RUN ARCH= && \ dpkgArch="$(dpkg --print-architecture)" && \ case "${dpkgArch##*-}" in \ @@ -26,7 +26,7 @@ RUN ARCH= && \ mv node-v$NODE_VER-linux-$ARCH /opt/node # Install Ruby -ENV RUBY_VER="2.7.2" +ENV RUBY_VER="2.7.4" RUN apt-get update && \ apt-get install -y --no-install-recommends build-essential \ bison libyaml-dev libgdbm-dev libreadline-dev libjemalloc-dev \ @@ -56,6 +56,7 @@ COPY Gemfile* package.json yarn.lock /opt/mastodon/ RUN cd /opt/mastodon && \ bundle config set deployment 'true' && \ bundle config set without 'development test' && \ + bundle config set silence_root_warning true && \ bundle install -j"$(nproc)" && \ yarn install --pure-lockfile diff --git a/Gemfile b/Gemfile index a7187d691..e0fd2f49a 100644 --- a/Gemfile +++ b/Gemfile @@ -5,8 +5,8 @@ ruby '>= 2.5.0', '< 3.1.0' gem 'pkg-config', '~> 1.4' -gem 'puma', '~> 5.3' -gem 'rails', '~> 6.1.3' +gem 'puma', '~> 5.5' +gem 'rails', '~> 6.1.4' gem 'sprockets', '~> 3.7.2' gem 'thor', '~> 1.1' gem 'rack', '~> 2.2.3' @@ -17,15 +17,15 @@ gem 'makara', '~> 0.5' gem 'pghero', '~> 2.8' gem 'dotenv-rails', '~> 2.7' -gem 'aws-sdk-s3', '~> 1.95', require: false +gem 'aws-sdk-s3', '~> 1.103', require: false gem 'fog-core', '<= 2.1.0' gem 'fog-openstack', '~> 0.3', require: false -gem 'paperclip', '~> 6.0' +gem 'kt-paperclip', '~> 7.0' gem 'blurhash', '~> 0.1' gem 'active_model_serializers', '~> 0.10' -gem 'addressable', '~> 2.7' -gem 'bootsnap', '~> 1.6.0', require: false +gem 'addressable', '~> 2.8' +gem 'bootsnap', '~> 1.9.1', require: false gem 'browser' gem 'charlock_holmes', '~> 0.7.7' gem 'iso-639' @@ -53,19 +53,18 @@ gem 'fastimage' gem 'hiredis', '~> 0.6' gem 'redis-namespace', '~> 1.8' gem 'htmlentities', '~> 4.3' -gem 'http', '~> 4.4' +gem 'http', '~> 5.0' gem 'http_accept_language', '~> 2.1' gem 'httplog', '~> 1.5.0' gem 'idn-ruby', require: 'idn' gem 'kaminari', '~> 1.2' gem 'link_header', '~> 0.0' gem 'mime-types', '~> 3.3.1', require: 'mime/types/columnar' -gem 'nokogiri', '~> 1.11' +gem 'nokogiri', '~> 1.12' gem 'nsa', '~> 0.2' -gem 'oj', '~> 3.11' +gem 'oj', '~> 3.13' gem 'ox', '~> 2.14' gem 'parslet' -gem 'parallel', '~> 1.20' gem 'posix-spawn' gem 'pundit', '~> 2.1' gem 'premailer-rails' @@ -73,15 +72,15 @@ gem 'rack-attack', '~> 6.5' gem 'rack-cors', '~> 1.1', require: 'rack/cors' gem 'rails-i18n', '~> 6.0' gem 'rails-settings-cached', '~> 0.6' -gem 'redis', '~> 4.2', require: ['redis', 'redis/connection/hiredis'] +gem 'redis', '~> 4.5', require: ['redis', 'redis/connection/hiredis'] gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock' -gem 'rqrcode', '~> 2.0' +gem 'rqrcode', '~> 2.1' gem 'ruby-progressbar', '~> 1.11' -gem 'sanitize', '~> 5.2' +gem 'sanitize', '~> 6.0' gem 'scenic', '~> 1.5' gem 'sidekiq', '~> 6.2' -gem 'sidekiq-scheduler', '~> 3.0' -gem 'sidekiq-unique-jobs', '~> 7.0' +gem 'sidekiq-scheduler', '~> 3.1' +gem 'sidekiq-unique-jobs', '~> 7.1' gem 'sidekiq-bulk', '~>0.2.0' gem 'simple-navigation', '~> 4.3' gem 'simple_form', '~> 5.1' @@ -115,13 +114,12 @@ end group :test do gem 'capybara', '~> 3.35' gem 'climate_control', '~> 0.2' - gem 'faker', '~> 2.18' + gem 'faker', '~> 2.19' gem 'microformats', '~> 4.2' gem 'rails-controller-testing', '~> 1.0' gem 'rspec-sidekiq', '~> 3.1' gem 'simplecov', '~> 0.21', require: false - gem 'webmock', '~> 3.13' - gem 'parallel_tests', '~> 3.7' + gem 'webmock', '~> 3.14' gem 'rspec_junit_formatter', '~> 0.4' end @@ -134,10 +132,10 @@ group :development do gem 'letter_opener', '~> 1.7' gem 'letter_opener_web', '~> 1.4' gem 'memory_profiler' - gem 'rubocop', '~> 1.15', require: false - gem 'rubocop-rails', '~> 2.10', require: false - gem 'brakeman', '~> 5.0', require: false - gem 'bundler-audit', '~> 0.8', require: false + gem 'rubocop', '~> 1.22', require: false + gem 'rubocop-rails', '~> 2.12', require: false + gem 'brakeman', '~> 5.1', require: false + gem 'bundler-audit', '~> 0.9', require: false gem 'capistrano', '~> 3.16' gem 'capistrano-rails', '~> 1.6' @@ -155,5 +153,3 @@ gem 'concurrent-ruby', require: false gem 'connection_pool', require: false gem 'xorcist', '~> 1.1' - -gem 'resolv', '~> 0.1.0' diff --git a/Gemfile.lock b/Gemfile.lock index d67b35e8c..45de45a3d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,40 +1,40 @@ GEM remote: https://rubygems.org/ specs: - actioncable (6.1.3.2) - actionpack (= 6.1.3.2) - activesupport (= 6.1.3.2) + actioncable (6.1.4.1) + actionpack (= 6.1.4.1) + activesupport (= 6.1.4.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (6.1.3.2) - actionpack (= 6.1.3.2) - activejob (= 6.1.3.2) - activerecord (= 6.1.3.2) - activestorage (= 6.1.3.2) - activesupport (= 6.1.3.2) + actionmailbox (6.1.4.1) + actionpack (= 6.1.4.1) + activejob (= 6.1.4.1) + activerecord (= 6.1.4.1) + activestorage (= 6.1.4.1) + activesupport (= 6.1.4.1) mail (>= 2.7.1) - actionmailer (6.1.3.2) - actionpack (= 6.1.3.2) - actionview (= 6.1.3.2) - activejob (= 6.1.3.2) - activesupport (= 6.1.3.2) + actionmailer (6.1.4.1) + actionpack (= 6.1.4.1) + actionview (= 6.1.4.1) + activejob (= 6.1.4.1) + activesupport (= 6.1.4.1) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (6.1.3.2) - actionview (= 6.1.3.2) - activesupport (= 6.1.3.2) + actionpack (6.1.4.1) + actionview (= 6.1.4.1) + activesupport (= 6.1.4.1) rack (~> 2.0, >= 2.0.9) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (6.1.3.2) - actionpack (= 6.1.3.2) - activerecord (= 6.1.3.2) - activestorage (= 6.1.3.2) - activesupport (= 6.1.3.2) + actiontext (6.1.4.1) + actionpack (= 6.1.4.1) + activerecord (= 6.1.4.1) + activestorage (= 6.1.4.1) + activesupport (= 6.1.4.1) nokogiri (>= 1.8.5) - actionview (6.1.3.2) - activesupport (= 6.1.3.2) + actionview (6.1.4.1) + activesupport (= 6.1.4.1) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) @@ -45,28 +45,28 @@ GEM case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) active_record_query_trace (1.8) - activejob (6.1.3.2) - activesupport (= 6.1.3.2) + activejob (6.1.4.1) + activesupport (= 6.1.4.1) globalid (>= 0.3.6) - activemodel (6.1.3.2) - activesupport (= 6.1.3.2) - activerecord (6.1.3.2) - activemodel (= 6.1.3.2) - activesupport (= 6.1.3.2) - activestorage (6.1.3.2) - actionpack (= 6.1.3.2) - activejob (= 6.1.3.2) - activerecord (= 6.1.3.2) - activesupport (= 6.1.3.2) + activemodel (6.1.4.1) + activesupport (= 6.1.4.1) + activerecord (6.1.4.1) + activemodel (= 6.1.4.1) + activesupport (= 6.1.4.1) + activestorage (6.1.4.1) + actionpack (= 6.1.4.1) + activejob (= 6.1.4.1) + activerecord (= 6.1.4.1) + activesupport (= 6.1.4.1) marcel (~> 1.0.0) - mini_mime (~> 1.0.2) - activesupport (6.1.3.2) + mini_mime (>= 1.1.0) + activesupport (6.1.4.1) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) zeitwerk (~> 2.3) - addressable (2.7.0) + addressable (2.8.0) public_suffix (>= 2.0.2, < 5.0) airbrussh (1.4.0) sshkit (>= 1.6.1, != 1.7.0) @@ -78,44 +78,44 @@ GEM attr_encrypted (3.1.0) encryptor (~> 3.0.0) awrence (1.1.1) - aws-eventstream (1.1.1) - aws-partitions (1.465.0) - aws-sdk-core (3.114.0) + aws-eventstream (1.2.0) + aws-partitions (1.503.0) + aws-sdk-core (3.121.0) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) jmespath (~> 1.0) - aws-sdk-kms (1.43.0) - aws-sdk-core (~> 3, >= 3.112.0) + aws-sdk-kms (1.48.0) + aws-sdk-core (~> 3, >= 3.120.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.95.1) - aws-sdk-core (~> 3, >= 3.112.0) + aws-sdk-s3 (1.103.0) + aws-sdk-core (~> 3, >= 3.120.0) aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.1) - aws-sigv4 (1.2.3) + aws-sigv4 (~> 1.4) + aws-sigv4 (1.4.0) aws-eventstream (~> 1, >= 1.0.2) bcrypt (3.1.16) better_errors (2.9.1) coderay (>= 1.0.0) erubi (>= 1.0.0) rack (>= 0.9.0) - bindata (2.4.8) + bindata (2.4.10) binding_of_caller (1.0.0) debug_inspector (>= 0.0.1) blurhash (0.1.5) ffi (~> 1.14) - bootsnap (1.6.0) + bootsnap (1.9.1) msgpack (~> 1.0) - brakeman (5.0.1) + brakeman (5.1.1) browser (4.2.0) brpoplpush-redis_script (0.1.2) concurrent-ruby (~> 1.0, >= 1.0.5) redis (>= 1.0, <= 5.0) builder (3.2.4) - bullet (6.1.4) + bullet (6.1.5) activesupport (>= 3.0.0) uniform_notifier (~> 1.11) - bundler-audit (0.8.0) + bundler-audit (0.9.0.1) bundler (>= 1.2.0, < 3) thor (~> 1.0) byebug (11.1.3) @@ -156,7 +156,7 @@ GEM climate_control (0.2.0) coderay (1.1.3) color_diff (0.1) - concurrent-ruby (1.1.8) + concurrent-ruby (1.1.9) connection_pool (2.2.5) cose (1.0.0) cbor (~> 0.5.9) @@ -173,7 +173,7 @@ GEM railties (>= 4.1.0) responders warden (~> 1.2.3) - devise-two-factor (4.0.0) + devise-two-factor (4.0.1) activesupport (< 6.2) attr_encrypted (>= 1.3, < 4, != 2) devise (~> 4.0) @@ -188,7 +188,7 @@ GEM docile (1.3.4) domain_name (0.5.20190701) unf (>= 0.0.5, < 1.0.0) - doorkeeper (5.5.1) + doorkeeper (5.5.4) railties (>= 5) dotenv (2.7.6) dotenv-rails (2.7.6) @@ -211,16 +211,16 @@ GEM tzinfo excon (0.76.0) fabrication (2.22.0) - faker (2.18.0) + faker (2.19.0) i18n (>= 1.6, < 2) faraday (1.3.0) faraday-net_http (~> 1.0) multipart-post (>= 1.2, < 3) ruby2_keywords faraday-net_http (1.0.1) - fast_blank (1.0.0) - fastimage (2.2.3) - ffi (1.15.0) + fast_blank (1.0.1) + fastimage (2.2.5) + ffi (1.15.4) ffi-compiler (1.0.1) ffi (>= 1.0.0) rake @@ -237,14 +237,14 @@ GEM fog-json (>= 1.0) ipaddress (>= 0.8) formatador (0.2.5) - fugit (1.3.9) + fugit (1.4.5) et-orbi (~> 1.1, >= 1.1.8) - raabro (~> 1.3) + raabro (~> 1.4) fuubar (2.5.1) rspec-core (~> 3.0) ruby-progressbar (~> 1.4) - globalid (0.4.2) - activesupport (>= 4.2.0) + globalid (0.5.2) + activesupport (>= 5.0) hamlit (2.13.0) temple (>= 0.8.2) thor @@ -262,16 +262,14 @@ GEM hiredis (0.6.3) hkdf (0.3.0) htmlentities (4.3.4) - http (4.4.1) - addressable (~> 2.3) + http (5.0.4) + addressable (~> 2.8) http-cookie (~> 1.0) http-form_data (~> 2.2) - http-parser (~> 1.2.0) - http-cookie (1.0.3) + llhttp-ffi (~> 0.4.0) + http-cookie (1.0.4) domain_name (~> 0.5) http-form_data (2.3.0) - http-parser (1.2.1) - ffi-compiler (>= 1.0, < 2.0) http_accept_language (2.1.1) httplog (1.5.0) rack (>= 1.0) @@ -288,20 +286,20 @@ GEM rails-i18n rainbow (>= 2.2.2, < 4.0) terminal-table (>= 1.5.1) - idn-ruby (0.1.0) + idn-ruby (0.1.2) ipaddress (0.8.3) iso-639 (0.3.5) jmespath (1.4.0) json (2.5.1) json-canonicalization (0.2.1) - json-ld (3.1.9) + json-ld (3.1.10) htmlentities (~> 4.3) json-canonicalization (~> 0.2) link_header (~> 0.0, >= 0.0.8) multi_json (~> 1.14) rack (~> 2.0) rdf (~> 3.1) - json-ld-preloaded (3.1.5) + json-ld-preloaded (3.1.6) json-ld (~> 3.1) rdf (~> 3.1) jsonapi-renderer (0.2.2) @@ -318,27 +316,36 @@ GEM activerecord kaminari-core (= 1.2.1) kaminari-core (1.2.1) + kt-paperclip (7.0.1) + activemodel (>= 4.2.0) + activesupport (>= 4.2.0) + marcel (~> 1.0.1) + mime-types + terrapin (~> 0.6.0) launchy (2.5.0) addressable (~> 2.7) letter_opener (1.7.0) launchy (~> 2.2) - letter_opener_web (1.4.0) + letter_opener_web (1.4.1) actionmailer (>= 3.2) letter_opener (~> 1.0) railties (>= 3.2) link_header (0.0.8) + llhttp-ffi (0.4.0) + ffi-compiler (~> 1.0) + rake (~> 13.0) lograge (0.11.2) actionpack (>= 4) activesupport (>= 4) railties (>= 4) request_store (~> 1.0) - loofah (2.9.1) + loofah (2.12.0) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) mini_mime (>= 0.1.1) - makara (0.5.0) - activerecord (>= 3.0.0) + makara (0.5.1) + activerecord (>= 5.2.0) marcel (1.0.1) mario-redis-lock (1.2.1) redis (>= 3.0.5) @@ -349,37 +356,27 @@ GEM nokogiri (~> 1.10) mime-types (3.3.1) mime-types-data (~> 3.2015) - mime-types-data (3.2020.0512) - mimemagic (0.3.10) - nokogiri (~> 1) - rake - mini_mime (1.0.3) - mini_portile2 (2.5.2) - net-ftp (~> 0.1) + mime-types-data (3.2021.0901) + mini_mime (1.1.2) + mini_portile2 (2.6.1) minitest (5.14.4) msgpack (1.4.2) multi_json (1.15.0) multipart-post (2.1.1) - net-ftp (0.1.2) - net-protocol - time net-ldap (0.17.0) - net-protocol (0.1.0) net-scp (3.0.0) net-ssh (>= 2.6.5, < 7.0.0) net-ssh (6.1.0) - nio4r (2.5.7) - nokogiri (1.11.6) - mini_portile2 (~> 2.5.0) + nio4r (2.5.8) + nokogiri (1.12.5) + mini_portile2 (~> 2.6.1) racc (~> 1.4) - nokogumbo (2.0.4) - nokogiri (~> 1.8, >= 1.8.4) nsa (0.2.8) activesupport (>= 4.2, < 7) concurrent-ruby (~> 1.0, >= 1.0.2) sidekiq (>= 3.5) statsd-ruby (~> 1.4, >= 1.4.0) - oj (3.11.5) + oj (3.13.9) omniauth (1.9.1) hashie (>= 3.4.6) rack (>= 1.6.2, < 3) @@ -396,17 +393,9 @@ GEM openssl (2.2.0) openssl-signature_algorithm (0.4.0) orm_adapter (0.5.0) - ox (2.14.4) - paperclip (6.0.0) - activemodel (>= 4.2.0) - activesupport (>= 4.2.0) - mime-types - mimemagic (~> 0.3.0) - terrapin (~> 0.6.0) - parallel (1.20.1) - parallel_tests (3.7.0) - parallel - parser (3.0.1.1) + ox (2.14.5) + parallel (1.21.0) + parser (3.0.2.0) ast (~> 2.4.1) parslet (2.0.0) pastel (0.8.0) @@ -433,35 +422,35 @@ GEM pry-rails (0.3.9) pry (>= 0.10.4) public_suffix (4.0.6) - puma (5.3.2) + puma (5.5.2) nio4r (~> 2.0) - pundit (2.1.0) + pundit (2.1.1) activesupport (>= 3.0.0) - raabro (1.3.3) + raabro (1.4.0) racc (1.5.2) rack (2.2.3) rack-attack (6.5.0) rack (>= 1.0, < 3) rack-cors (1.1.1) rack (>= 2.0.0) - rack-proxy (0.6.5) + rack-proxy (0.7.0) rack rack-test (1.1.0) rack (>= 1.0, < 3) - rails (6.1.3.2) - actioncable (= 6.1.3.2) - actionmailbox (= 6.1.3.2) - actionmailer (= 6.1.3.2) - actionpack (= 6.1.3.2) - actiontext (= 6.1.3.2) - actionview (= 6.1.3.2) - activejob (= 6.1.3.2) - activemodel (= 6.1.3.2) - activerecord (= 6.1.3.2) - activestorage (= 6.1.3.2) - activesupport (= 6.1.3.2) + rails (6.1.4.1) + actioncable (= 6.1.4.1) + actionmailbox (= 6.1.4.1) + actionmailer (= 6.1.4.1) + actionpack (= 6.1.4.1) + actiontext (= 6.1.4.1) + actionview (= 6.1.4.1) + activejob (= 6.1.4.1) + activemodel (= 6.1.4.1) + activerecord (= 6.1.4.1) + activestorage (= 6.1.4.1) + activesupport (= 6.1.4.1) bundler (>= 1.15.0) - railties (= 6.1.3.2) + railties (= 6.1.4.1) sprockets-rails (>= 2.0.0) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) @@ -470,43 +459,42 @@ GEM rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) - rails-html-sanitizer (1.3.0) + rails-html-sanitizer (1.4.2) loofah (~> 2.3) rails-i18n (6.0.0) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 7) rails-settings-cached (0.6.6) rails (>= 4.2.0) - railties (6.1.3.2) - actionpack (= 6.1.3.2) - activesupport (= 6.1.3.2) + railties (6.1.4.1) + actionpack (= 6.1.4.1) + activesupport (= 6.1.4.1) method_source - rake (>= 0.8.7) + rake (>= 0.13) thor (~> 1.0) rainbow (3.0.0) - rake (13.0.3) - rdf (3.1.13) + rake (13.0.6) + rdf (3.1.15) hamster (~> 3.0) link_header (~> 0.0, >= 0.0.8) rdf-normalize (0.4.0) rdf (~> 3.1) - redis (4.2.5) + redis (4.5.1) redis-namespace (1.8.1) redis (>= 3.0.4) regexp_parser (2.1.1) request_store (1.5.0) rack (>= 1.4) - resolv (0.1.0) responders (3.0.1) actionpack (>= 5.0) railties (>= 5.0) rexml (3.2.5) rotp (6.2.0) rpam2 (4.0.2) - rqrcode (2.0.0) + rqrcode (2.1.0) chunky_png (~> 1.0) rqrcode_core (~> 1.0) - rqrcode_core (1.0.0) + rqrcode_core (1.2.0) rspec-core (3.10.1) rspec-support (~> 3.10.0) rspec-expectations (3.10.1) @@ -515,7 +503,7 @@ GEM rspec-mocks (3.10.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.10.0) - rspec-rails (5.0.1) + rspec-rails (5.0.2) actionpack (>= 5.2) activesupport (>= 5.2) railties (>= 5.2) @@ -529,56 +517,56 @@ GEM rspec-support (3.10.2) rspec_junit_formatter (0.4.1) rspec-core (>= 2, < 4, != 2.12.0) - rubocop (1.15.0) + rubocop (1.22.1) parallel (~> 1.10) parser (>= 3.0.0.0) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) rexml - rubocop-ast (>= 1.5.0, < 2.0) + rubocop-ast (>= 1.12.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.5.0) + rubocop-ast (1.12.0) parser (>= 3.0.1.1) - rubocop-rails (2.10.1) + rubocop-rails (2.12.4) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.7.0, < 2.0) ruby-progressbar (1.11.0) - ruby-saml (1.11.0) - nokogiri (>= 1.5.10) + ruby-saml (1.13.0) + nokogiri (>= 1.10.5) + rexml ruby2_keywords (0.0.4) - rufus-scheduler (3.6.0) + rufus-scheduler (3.7.0) fugit (~> 1.1, >= 1.1.6) safety_net_attestation (0.4.0) jwt (~> 2.0) - sanitize (5.2.3) + sanitize (6.0.0) crass (~> 1.0.2) - nokogiri (>= 1.8.0) - nokogumbo (~> 2.0) + nokogiri (>= 1.12.0) scenic (1.5.4) activerecord (>= 4.0.0) railties (>= 4.0.0) securecompare (1.0.0) semantic_range (3.0.0) - sidekiq (6.2.1) + sidekiq (6.2.2) connection_pool (>= 2.2.2) rack (~> 2.0) redis (>= 4.2.0) sidekiq-bulk (0.2.0) sidekiq - sidekiq-scheduler (3.0.1) + sidekiq-scheduler (3.1.0) e2mmap redis (>= 3, < 5) rufus-scheduler (~> 3.2) sidekiq (>= 3) thwait tilt (>= 1.4.0) - sidekiq-unique-jobs (7.0.11) + sidekiq-unique-jobs (7.1.8) brpoplpush-redis_script (> 0.1.1, <= 2.0.0) concurrent-ruby (~> 1.0, >= 1.0.5) - sidekiq (>= 5.0, < 7.0) - thor (>= 0.20, < 2.0) + sidekiq (>= 5.0, < 8.0) + thor (>= 0.20, < 3.0) simple-navigation (4.3.0) activesupport (>= 2.3.2) simple_form (5.1.0) @@ -603,7 +591,7 @@ GEM stackprof (0.2.17) statsd-ruby (1.5.0) stoplight (2.2.1) - strong_migrations (0.7.6) + strong_migrations (0.7.8) activerecord (>= 5) temple (0.8.2) terminal-table (3.0.0) @@ -614,7 +602,6 @@ GEM thwait (0.2.0) e2mmap tilt (2.0.10) - time (0.1.0) tpm-key_attestation (0.9.0) bindata (~> 2.4) openssl-signature_algorithm (~> 0.4.0) @@ -633,13 +620,13 @@ GEM unf (~> 0.1.0) tzinfo (2.0.4) concurrent-ruby (~> 1.0) - tzinfo-data (1.2021.1) + tzinfo-data (1.2021.4) tzinfo (>= 1.0.0) unf (0.1.4) unf_ext - unf_ext (0.0.7.7) - unicode-display_width (1.7.0) - uniform_notifier (1.14.1) + unf_ext (0.0.8) + unicode-display_width (1.8.0) + uniform_notifier (1.14.2) warden (1.2.9) rack (>= 2.0.9) webauthn (3.0.0.alpha1) @@ -652,11 +639,11 @@ GEM safety_net_attestation (~> 0.4.0) securecompare (~> 1.0) tpm-key_attestation (~> 0.9.0) - webmock (3.13.0) - addressable (>= 2.3.6) + webmock (3.14.0) + addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) - webpacker (5.4.0) + webpacker (5.4.3) activesupport (>= 5.2) rack-proxy (>= 0.6.1) railties (>= 5.2) @@ -664,7 +651,7 @@ GEM webpush (0.3.8) hkdf (~> 0.2) jwt (~> 2.0) - websocket-driver (0.7.3) + websocket-driver (0.7.5) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) wisper (2.0.1) @@ -679,17 +666,17 @@ PLATFORMS DEPENDENCIES active_model_serializers (~> 0.10) active_record_query_trace (~> 1.8) - addressable (~> 2.7) + addressable (~> 2.8) annotate (~> 3.1) - aws-sdk-s3 (~> 1.95) + aws-sdk-s3 (~> 1.103) better_errors (~> 2.9) binding_of_caller (~> 1.0) blurhash (~> 0.1) - bootsnap (~> 1.6.0) - brakeman (~> 5.0) + bootsnap (~> 1.9.1) + brakeman (~> 5.1) browser bullet (~> 6.1) - bundler-audit (~> 0.8) + bundler-audit (~> 0.9) capistrano (~> 3.16) capistrano-rails (~> 1.6) capistrano-rbenv (~> 2.2) @@ -710,7 +697,7 @@ DEPENDENCIES dotenv-rails (~> 2.7) ed25519 (~> 1.2) fabrication (~> 2.22) - faker (~> 2.18) + faker (~> 2.19) fast_blank (~> 1.0) fastimage fog-core (<= 2.1.0) @@ -719,7 +706,7 @@ DEPENDENCIES hamlit-rails (~> 0.2) hiredis (~> 0.6) htmlentities (~> 4.3) - http (~> 4.4) + http (~> 5.0) http_accept_language (~> 2.1) httplog (~> 1.5.0) i18n-tasks (~> 0.9) @@ -728,6 +715,7 @@ DEPENDENCIES json-ld json-ld-preloaded (~> 3.1) kaminari (~> 1.2) + kt-paperclip (~> 7.0) letter_opener (~> 1.7) letter_opener_web (~> 1.4) link_header (~> 0.0) @@ -738,17 +726,14 @@ DEPENDENCIES microformats (~> 4.2) mime-types (~> 3.3.1) net-ldap (~> 0.17) - nokogiri (~> 1.11) + nokogiri (~> 1.12) nsa (~> 0.2) - oj (~> 3.11) + oj (~> 3.13) omniauth (~> 1.9) omniauth-cas (~> 2.0) omniauth-rails_csrf_protection (~> 0.1) omniauth-saml (~> 1.10) ox (~> 2.14) - paperclip (~> 6.0) - parallel (~> 1.20) - parallel_tests (~> 3.7) parslet pg (~> 1.2) pghero (~> 2.8) @@ -758,32 +743,31 @@ DEPENDENCIES private_address_check (~> 0.5) pry-byebug (~> 3.9) pry-rails (~> 0.3) - puma (~> 5.3) + puma (~> 5.5) pundit (~> 2.1) rack (~> 2.2.3) rack-attack (~> 6.5) rack-cors (~> 1.1) - rails (~> 6.1.3) + rails (~> 6.1.4) rails-controller-testing (~> 1.0) rails-i18n (~> 6.0) rails-settings-cached (~> 0.6) rdf-normalize (~> 0.4) - redis (~> 4.2) + redis (~> 4.5) redis-namespace (~> 1.8) - resolv (~> 0.1.0) - rqrcode (~> 2.0) + rqrcode (~> 2.1) rspec-rails (~> 5.0) rspec-sidekiq (~> 3.1) rspec_junit_formatter (~> 0.4) - rubocop (~> 1.15) - rubocop-rails (~> 2.10) + rubocop (~> 1.22) + rubocop-rails (~> 2.12) ruby-progressbar (~> 1.11) - sanitize (~> 5.2) + sanitize (~> 6.0) scenic (~> 1.5) sidekiq (~> 6.2) sidekiq-bulk (~> 0.2.0) - sidekiq-scheduler (~> 3.0) - sidekiq-unique-jobs (~> 7.0) + sidekiq-scheduler (~> 3.1) + sidekiq-unique-jobs (~> 7.1) simple-navigation (~> 4.3) simple_form (~> 5.1) simplecov (~> 0.21) @@ -797,7 +781,7 @@ DEPENDENCIES twitter-text (~> 3.1.0) tzinfo-data (~> 1.2021) webauthn (~> 3.0.0.alpha1) - webmock (~> 3.13) + webmock (~> 3.14) webpacker (~> 5.4) webpush (~> 0.3) xorcist (~> 1.1) diff --git a/README.md b/README.md index 646e32267..87edcca1c 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ ![Mastodon](https://i.imgur.com/NhZc40l.png) - [mastodon.CipherBliss.com](https://mastodon.CipherBliss.com) version ======== -[![GitHub release](https://img.shields.io/github/release/tootsuite/mastodon.svg)][releases] -[![Build Status](https://img.shields.io/circleci/project/github/tootsuite/mastodon.svg)][circleci] -[![Code Climate](https://img.shields.io/codeclimate/maintainability/tootsuite/mastodon.svg)][code_climate] +[![GitHub release](https://img.shields.io/github/release/mastodon/mastodon.svg)][releases] +[![Build Status](https://img.shields.io/circleci/project/github/mastodon/mastodon.svg)][circleci] +[![Code Climate](https://img.shields.io/codeclimate/maintainability/mastodon/mastodon.svg)][code_climate] [![Crowdin](https://d322cqt584bo4o.cloudfront.net/mastodon/localized.svg)][crowdin] [![Docker Pulls](https://img.shields.io/docker/pulls/tootsuite/mastodon.svg)][docker] -[releases]: https://github.com/tootsuite/mastodon/releases -[circleci]: https://circleci.com/gh/tootsuite/mastodon -[code_climate]: https://codeclimate.com/github/tootsuite/mastodon +[releases]: https://github.com/mastodon/mastodon/releases +[circleci]: https://circleci.com/gh/mastodon/mastodon +[code_climate]: https://codeclimate.com/github/mastodon/mastodon [crowdin]: https://crowdin.com/project/mastodon [docker]: https://hub.docker.com/r/tootsuite/mastodon/ @@ -74,7 +74,12 @@ Mastodon acts as an OAuth2 provider so 3rd party apps can use the REST and Strea The repository includes deployment configurations for **Docker and docker-compose**, but also a few specific platforms like **Heroku**, **Scalingo**, and **Nanobox**. The [**stand-alone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the documentation. -A **Vagrant** configuration is included for development purposes. +A **Vagrant** configuration is included for development purposes. To use it, complete following steps: + +- Install Vagrant and Virtualbox +- Run `vagrant up` +- Run `vagrant ssh -c "cd /vagrant && foreman start"` +- Open `http://mastodon.local` in your browser ## Contributing diff --git a/Vagrantfile b/Vagrantfile index 4d0cc0f76..e086ddd98 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -12,7 +12,7 @@ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - sudo apt-add-repository 'deb https://dl.yarnpkg.com/debian/ stable main' # Add repo for NodeJS -curl -sL https://deb.nodesource.com/setup_12.x | sudo bash - +curl -sL https://deb.nodesource.com/setup_14.x | sudo bash - # Add firewall rule to redirect 80 to PORT and save sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port #{ENV["PORT"]} @@ -45,16 +45,8 @@ sudo apt-get install \ # Install rvm read RUBY_VERSION < .ruby-version -gpg_command="gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB" -$($gpg_command) -if [ $? -ne 0 ];then - echo "GPG command failed, This prevented RVM from installing." - echo "Retrying once..." && $($gpg_command) - if [ $? -ne 0 ];then - echo "GPG failed for the second time, please ensure network connectivity." - echo "Exiting..." && exit 1 - fi -fi +curl -sSL https://rvm.io/mpapis.asc | gpg --import +curl -sSL https://rvm.io/pkuczynski.asc | gpg --import curl -sSL https://raw.githubusercontent.com/rvm/rvm/stable/binscripts/rvm-installer | bash -s stable --ruby=$RUBY_VERSION source /home/vagrant/.rvm/scripts/rvm diff --git a/app.json b/app.json index e4f7cf403..6b4365383 100644 --- a/app.json +++ b/app.json @@ -1,8 +1,8 @@ { "name": "Mastodon", "description": "A GNU Social-compatible microblogging server", - "repository": "https://github.com/tootsuite/mastodon", - "logo": "https://github.com/tootsuite.png", + "repository": "https://github.com/mastodon/mastodon", + "logo": "https://github.com/mastodon.png", "env": { "HEROKU": { "description": "Leave this as true", diff --git a/app/controllers/activitypub/followers_synchronizations_controller.rb b/app/controllers/activitypub/followers_synchronizations_controller.rb index 525031105..940b77cf0 100644 --- a/app/controllers/activitypub/followers_synchronizations_controller.rb +++ b/app/controllers/activitypub/followers_synchronizations_controller.rb @@ -19,11 +19,11 @@ class ActivityPub::FollowersSynchronizationsController < ActivityPub::BaseContro private def uri_prefix - signed_request_account.uri[/http(s?):\/\/[^\/]+\//] + signed_request_account.uri[Account::URL_PREFIX_RE] end def set_items - @items = @account.followers.where(Account.arel_table[:uri].matches(uri_prefix + '%', false, true)).pluck(:uri) + @items = @account.followers.where(Account.arel_table[:uri].matches("#{Account.sanitize_sql_like(uri_prefix)}/%", false, true)).or(@account.followers.where(uri: uri_prefix)).pluck(:uri) end def collection_presenter diff --git a/app/controllers/activitypub/outboxes_controller.rb b/app/controllers/activitypub/outboxes_controller.rb index 4a52560ac..b2aab56a5 100644 --- a/app/controllers/activitypub/outboxes_controller.rb +++ b/app/controllers/activitypub/outboxes_controller.rb @@ -11,7 +11,11 @@ class ActivityPub::OutboxesController < ActivityPub::BaseController before_action :set_cache_headers def show - expires_in(page_requested? ? 0 : 3.minutes, public: public_fetch_mode? && !(signed_request_account.present? && page_requested?)) + if page_requested? + expires_in(1.minute, public: public_fetch_mode? && signed_request_account.nil?) + else + expires_in(3.minutes, public: public_fetch_mode?) + end render json: outbox_presenter, serializer: ActivityPub::OutboxSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json' end @@ -76,4 +80,8 @@ class ActivityPub::OutboxesController < ActivityPub::BaseController def set_account @account = params[:account_username].present? ? Account.find_local!(username_param) : Account.representative end + + def set_cache_headers + response.headers['Vary'] = 'Signature' if authorized_fetch_mode? || page_requested? + end end diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb index c829ed98f..cbfff2707 100644 --- a/app/controllers/admin/dashboard_controller.rb +++ b/app/controllers/admin/dashboard_controller.rb @@ -1,49 +1,17 @@ # frozen_string_literal: true -require 'sidekiq/api' module Admin class DashboardController < BaseController def index @system_checks = Admin::SystemCheck.perform - @users_count = User.count + @time_period = (1.month.ago.to_date...Time.now.utc.to_date) @pending_users_count = User.pending.count - @registrations_week = Redis.current.get("activity:accounts:local:#{current_week}") || 0 - @logins_week = Redis.current.pfcount("activity:logins:#{current_week}") - @interactions_week = Redis.current.get("activity:interactions:#{current_week}") || 0 - @relay_enabled = Relay.enabled.exists? - @single_user_mode = Rails.configuration.x.single_user_mode - @registrations_enabled = Setting.registrations_mode != 'none' - @deletions_enabled = Setting.open_deletion - @invites_enabled = Setting.min_invite_role == 'user' - @search_enabled = Chewy.enabled? - @version = Mastodon::Version.to_s - @database_version = ActiveRecord::Base.connection.execute('SELECT VERSION()').first['version'].match(/\A(?:PostgreSQL |)([^\s]+).*\z/)[1] - @redis_version = redis_info['redis_version'] - @reports_count = Report.unresolved.count - @queue_backlog = Sidekiq::Stats.new.enqueued - @recent_users = User.confirmed.recent.includes(:account).limit(8) - @database_size = ActiveRecord::Base.connection.execute('SELECT pg_database_size(current_database())').first['pg_database_size'] - @redis_size = redis_info['used_memory'] - @ldap_enabled = ENV['LDAP_ENABLED'] == 'true' - @cas_enabled = ENV['CAS_ENABLED'] == 'true' - @saml_enabled = ENV['SAML_ENABLED'] == 'true' - @pam_enabled = ENV['PAM_ENABLED'] == 'true' - @hidden_service = ENV['ALLOW_ACCESS_TO_HIDDEN_SERVICE'] == 'true' - @trending_hashtags = TrendingTags.get(10, filtered: false) + @pending_reports_count = Report.unresolved.count @pending_tags_count = Tag.pending_review.count - @authorized_fetch = authorized_fetch_mode? - @whitelist_enabled = whitelist_mode? - @profile_directory = Setting.profile_directory - @timeline_preview = Setting.timeline_preview - @trends_enabled = Setting.trends end private - def current_week - @current_week ||= Time.now.utc.to_date.cweek - end - def redis_info @redis_info ||= begin if Redis.current.is_a?(Redis::Namespace) diff --git a/app/controllers/admin/resets_controller.rb b/app/controllers/admin/resets_controller.rb index db8f61d64..7962b7a58 100644 --- a/app/controllers/admin/resets_controller.rb +++ b/app/controllers/admin/resets_controller.rb @@ -6,9 +6,9 @@ module Admin def create authorize @user, :reset_password? - @user.send_reset_password_instructions + @user.reset_password! log_action :reset_password, @user - redirect_to admin_accounts_path + redirect_to admin_account_path(@user.account_id) end end end diff --git a/app/controllers/admin/sign_in_token_authentications_controller.rb b/app/controllers/admin/sign_in_token_authentications_controller.rb new file mode 100644 index 000000000..e620ab292 --- /dev/null +++ b/app/controllers/admin/sign_in_token_authentications_controller.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module Admin + class SignInTokenAuthenticationsController < BaseController + before_action :set_target_user + + def create + authorize @user, :enable_sign_in_token_auth? + @user.update(skip_sign_in_token: false) + log_action :enable_sign_in_token_auth, @user + redirect_to admin_account_path(@user.account_id) + end + + def destroy + authorize @user, :disable_sign_in_token_auth? + @user.update(skip_sign_in_token: true) + log_action :disable_sign_in_token_auth, @user + redirect_to admin_account_path(@user.account_id) + end + + private + + def set_target_user + @user = User.find(params[:user_id]) + end + end +end diff --git a/app/controllers/admin/two_factor_authentications_controller.rb b/app/controllers/admin/two_factor_authentications_controller.rb index 0652c3a7a..f7fb7eb8f 100644 --- a/app/controllers/admin/two_factor_authentications_controller.rb +++ b/app/controllers/admin/two_factor_authentications_controller.rb @@ -9,7 +9,7 @@ module Admin @user.disable_two_factor! log_action :disable_2fa, @user UserMailer.two_factor_disabled(@user).deliver_later! - redirect_to admin_accounts_path + redirect_to admin_account_path(@user.account_id) end private diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb index 85f4cc768..b863d8643 100644 --- a/app/controllers/api/base_controller.rb +++ b/app/controllers/api/base_controller.rb @@ -40,7 +40,12 @@ class Api::BaseController < ApplicationController render json: { error: 'This action is not allowed' }, status: 403 end - rescue_from Mastodon::RaceConditionError, Seahorse::Client::NetworkingError, Stoplight::Error::RedLight do + rescue_from Seahorse::Client::NetworkingError do |e| + Rails.logger.warn "Storage server error: #{e}" + render json: { error: 'There was a temporary problem serving your request, please try again' }, status: 503 + end + + rescue_from Mastodon::RaceConditionError, Stoplight::Error::RedLight do render json: { error: 'There was a temporary problem serving your request, please try again' }, status: 503 end diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 95869f554..cbccd64f3 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true class Api::V1::AccountsController < Api::BaseController - before_action -> { authorize_if_got_token! :read, :'read:accounts' }, except: [:create, :follow, :unfollow, :block, :unblock, :mute, :unmute] - before_action -> { doorkeeper_authorize! :follow, :'write:follows' }, only: [:follow, :unfollow] + before_action -> { authorize_if_got_token! :read, :'read:accounts' }, except: [:create, :follow, :unfollow, :remove_from_followers, :block, :unblock, :mute, :unmute] + before_action -> { doorkeeper_authorize! :follow, :'write:follows' }, only: [:follow, :unfollow, :remove_from_followers] before_action -> { doorkeeper_authorize! :follow, :'write:mutes' }, only: [:mute, :unmute] before_action -> { doorkeeper_authorize! :follow, :'write:blocks' }, only: [:block, :unblock] before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, only: [:create] @@ -53,6 +53,11 @@ class Api::V1::AccountsController < Api::BaseController render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships end + def remove_from_followers + RemoveFromFollowersService.new.call(current_user.account, @account) + render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships + end + def unblock UnblockService.new.call(current_user.account, @account) render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships diff --git a/app/controllers/api/v1/admin/dimensions_controller.rb b/app/controllers/api/v1/admin/dimensions_controller.rb new file mode 100644 index 000000000..170596d27 --- /dev/null +++ b/app/controllers/api/v1/admin/dimensions_controller.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class Api::V1::Admin::DimensionsController < Api::BaseController + protect_from_forgery with: :exception + + before_action :require_staff! + before_action :set_dimensions + + def create + render json: @dimensions, each_serializer: REST::Admin::DimensionSerializer + end + + private + + def set_dimensions + @dimensions = Admin::Metrics::Dimension.retrieve( + params[:keys], + params[:start_at], + params[:end_at], + params[:limit] + ) + end +end diff --git a/app/controllers/api/v1/admin/measures_controller.rb b/app/controllers/api/v1/admin/measures_controller.rb new file mode 100644 index 000000000..a3ac6fe85 --- /dev/null +++ b/app/controllers/api/v1/admin/measures_controller.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +class Api::V1::Admin::MeasuresController < Api::BaseController + protect_from_forgery with: :exception + + before_action :require_staff! + before_action :set_measures + + def create + render json: @measures, each_serializer: REST::Admin::MeasureSerializer + end + + private + + def set_measures + @measures = Admin::Metrics::Measure.retrieve( + params[:keys], + params[:start_at], + params[:end_at] + ) + end +end diff --git a/app/controllers/api/v1/admin/retention_controller.rb b/app/controllers/api/v1/admin/retention_controller.rb new file mode 100644 index 000000000..a8ff64f21 --- /dev/null +++ b/app/controllers/api/v1/admin/retention_controller.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +class Api::V1::Admin::RetentionController < Api::BaseController + protect_from_forgery with: :exception + + before_action :require_staff! + before_action :set_cohorts + + def create + render json: @cohorts, each_serializer: REST::Admin::CohortSerializer + end + + private + + def set_cohorts + @cohorts = Admin::Metrics::Retention.new( + params[:start_at], + params[:end_at], + params[:frequency] + ).cohorts + end +end diff --git a/app/controllers/api/v1/admin/trends_controller.rb b/app/controllers/api/v1/admin/trends_controller.rb new file mode 100644 index 000000000..e32ab5d2c --- /dev/null +++ b/app/controllers/api/v1/admin/trends_controller.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class Api::V1::Admin::TrendsController < Api::BaseController + before_action :require_staff! + before_action :set_trends + + def index + render json: @trends, each_serializer: REST::Admin::TagSerializer + end + + private + + def set_trends + @trends = TrendingTags.get(10, filtered: false) + end +end diff --git a/app/controllers/api/v1/instances/activity_controller.rb b/app/controllers/api/v1/instances/activity_controller.rb index 4f6b4bcbf..bad61425a 100644 --- a/app/controllers/api/v1/instances/activity_controller.rb +++ b/app/controllers/api/v1/instances/activity_controller.rb @@ -14,22 +14,21 @@ class Api::V1::Instances::ActivityController < Api::BaseController private def activity - weeks = [] + statuses_tracker = ActivityTracker.new('activity:statuses:local', :basic) + logins_tracker = ActivityTracker.new('activity:logins', :unique) + registrations_tracker = ActivityTracker.new('activity:accounts:local', :basic) - 12.times do |i| - day = i.weeks.ago.to_date - week_id = day.cweek - week = Date.commercial(day.cwyear, week_id) + (0...12).map do |i| + start_of_week = i.weeks.ago + end_of_week = start_of_week + 6.days - weeks << { - week: week.to_time.to_i.to_s, - statuses: Redis.current.get("activity:statuses:local:#{week_id}") || '0', - logins: Redis.current.pfcount("activity:logins:#{week_id}").to_s, - registrations: Redis.current.get("activity:accounts:local:#{week_id}") || '0', + { + week: start_of_week.to_i.to_s, + statuses: statuses_tracker.sum(start_of_week, end_of_week).to_s, + logins: logins_tracker.sum(start_of_week, end_of_week).to_s, + registrations: registrations_tracker.sum(start_of_week, end_of_week).to_s, } end - - weeks end def require_enabled_api! diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index b4fb83661..3d2f8280b 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -26,7 +26,12 @@ class ApplicationController < ActionController::Base rescue_from Mastodon::RateLimitExceededError, with: :too_many_requests rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error - rescue_from Mastodon::RaceConditionError, Seahorse::Client::NetworkingError, Stoplight::Error::RedLight, ActiveRecord::SerializationFailure, with: :service_unavailable + rescue_from Mastodon::RaceConditionError, Stoplight::Error::RedLight, ActiveRecord::SerializationFailure, with: :service_unavailable + + rescue_from Seahorse::Client::NetworkingError do |e| + Rails.logger.warn "Storage server error: #{e}" + service_unavailable + end before_action :store_current_location, except: :raise_not_found, unless: :devise_controller? before_action :require_functional!, if: :user_signed_in? diff --git a/app/controllers/auth/omniauth_callbacks_controller.rb b/app/controllers/auth/omniauth_callbacks_controller.rb index 682c77016..991a50b03 100644 --- a/app/controllers/auth/omniauth_callbacks_controller.rb +++ b/app/controllers/auth/omniauth_callbacks_controller.rb @@ -10,6 +10,15 @@ class Auth::OmniauthCallbacksController < Devise::OmniauthCallbacksController @user = User.find_for_oauth(request.env['omniauth.auth'], current_user) if @user.persisted? + LoginActivity.create( + user: @user, + success: true, + authentication_method: :omniauth, + provider: provider, + ip: request.remote_ip, + user_agent: request.user_agent + ) + sign_in_and_redirect @user, event: :authentication set_flash_message(:notice, :success, kind: provider_id.capitalize) if is_navigational_format? else diff --git a/app/controllers/auth/sessions_controller.rb b/app/controllers/auth/sessions_controller.rb index 13d158c67..d48abb707 100644 --- a/app/controllers/auth/sessions_controller.rb +++ b/app/controllers/auth/sessions_controller.rb @@ -25,9 +25,11 @@ class Auth::SessionsController < Devise::SessionsController def create super do |resource| - resource.update_sign_in!(request, new_sign_in: true) - remember_me(resource) - flash.delete(:notice) + # We only need to call this if this hasn't already been + # called from one of the two-factor or sign-in token + # authentication methods + + on_authentication_success(resource, :password) unless @on_authentication_success_called end end @@ -40,11 +42,12 @@ class Auth::SessionsController < Devise::SessionsController end def webauthn_options - user = find_user + user = User.find_by(id: session[:attempt_user_id]) - if user.webauthn_enabled? + if user&.webauthn_enabled? options_for_get = WebAuthn::Credential.options_for_get( - allow: user.webauthn_credentials.pluck(:external_id) + allow: user.webauthn_credentials.pluck(:external_id), + user_verification: 'discouraged' ) session[:webauthn_challenge] = options_for_get.challenge @@ -58,16 +61,20 @@ class Auth::SessionsController < Devise::SessionsController protected def find_user - if session[:attempt_user_id] + if user_params[:email].present? + find_user_from_params + elsif session[:attempt_user_id] User.find_by(id: session[:attempt_user_id]) - else - user = User.authenticate_with_ldap(user_params) if Devise.ldap_authentication - user ||= User.authenticate_with_pam(user_params) if Devise.pam_authentication - user ||= User.find_for_authentication(email: user_params[:email]) - user end end + def find_user_from_params + user = User.authenticate_with_ldap(user_params) if Devise.ldap_authentication + user ||= User.authenticate_with_pam(user_params) if Devise.pam_authentication + user ||= User.find_for_authentication(email: user_params[:email]) + user + end + def user_params params.require(:user).permit(:email, :password, :otp_attempt, :sign_in_token_attempt, credential: {}) end @@ -136,4 +143,34 @@ class Auth::SessionsController < Devise::SessionsController session.delete(:attempt_user_id) session.delete(:attempt_user_updated_at) end + + def on_authentication_success(user, security_measure) + @on_authentication_success_called = true + + clear_attempt_from_session + + user.update_sign_in!(request, new_sign_in: true) + remember_me(user) + sign_in(user) + flash.delete(:notice) + + LoginActivity.create( + user: user, + success: true, + authentication_method: security_measure, + ip: request.remote_ip, + user_agent: request.user_agent + ) + end + + def on_authentication_failure(user, security_measure, failure_reason) + LoginActivity.create( + user: user, + success: false, + authentication_method: security_measure, + failure_reason: failure_reason, + ip: request.remote_ip, + user_agent: request.user_agent + ) + end end diff --git a/app/controllers/concerns/sign_in_token_authentication_concern.rb b/app/controllers/concerns/sign_in_token_authentication_concern.rb index 3c95a4afd..384c5c50c 100644 --- a/app/controllers/concerns/sign_in_token_authentication_concern.rb +++ b/app/controllers/concerns/sign_in_token_authentication_concern.rb @@ -16,23 +16,26 @@ module SignInTokenAuthenticationConcern end def authenticate_with_sign_in_token - user = self.resource = find_user + if user_params[:email].present? + user = self.resource = find_user_from_params + prompt_for_sign_in_token(user) if user&.external_or_valid_password?(user_params[:password]) + elsif session[:attempt_user_id] + user = self.resource = User.find_by(id: session[:attempt_user_id]) + return if user.nil? - if user.present? && session[:attempt_user_id].present? && session[:attempt_user_updated_at] != user.updated_at.to_s - restart_session - elsif user_params.key?(:sign_in_token_attempt) && session[:attempt_user_id] - authenticate_with_sign_in_token_attempt(user) - elsif user.present? && user.external_or_valid_password?(user_params[:password]) - prompt_for_sign_in_token(user) + if session[:attempt_user_updated_at] != user.updated_at.to_s + restart_session + elsif user_params.key?(:sign_in_token_attempt) + authenticate_with_sign_in_token_attempt(user) + end end end def authenticate_with_sign_in_token_attempt(user) if valid_sign_in_token_attempt?(user) - clear_attempt_from_session - remember_me(user) - sign_in(user) + on_authentication_success(user, :sign_in_token) else + on_authentication_failure(user, :sign_in_token, :invalid_sign_in_token) flash.now[:alert] = I18n.t('users.invalid_sign_in_token') prompt_for_sign_in_token(user) end diff --git a/app/controllers/concerns/two_factor_authentication_concern.rb b/app/controllers/concerns/two_factor_authentication_concern.rb index 4d4ccf49c..2583d324b 100644 --- a/app/controllers/concerns/two_factor_authentication_concern.rb +++ b/app/controllers/concerns/two_factor_authentication_concern.rb @@ -35,16 +35,20 @@ module TwoFactorAuthenticationConcern end def authenticate_with_two_factor - user = self.resource = find_user + if user_params[:email].present? + user = self.resource = find_user_from_params + prompt_for_two_factor(user) if user&.external_or_valid_password?(user_params[:password]) + elsif session[:attempt_user_id] + user = self.resource = User.find_by(id: session[:attempt_user_id]) + return if user.nil? - if user.present? && session[:attempt_user_id].present? && session[:attempt_user_updated_at] != user.updated_at.to_s - restart_session - elsif user.webauthn_enabled? && user_params.key?(:credential) && session[:attempt_user_id] - authenticate_with_two_factor_via_webauthn(user) - elsif user_params.key?(:otp_attempt) && session[:attempt_user_id] - authenticate_with_two_factor_via_otp(user) - elsif user.present? && user.external_or_valid_password?(user_params[:password]) - prompt_for_two_factor(user) + if session[:attempt_user_updated_at] != user.updated_at.to_s + restart_session + elsif user.webauthn_enabled? && user_params.key?(:credential) + authenticate_with_two_factor_via_webauthn(user) + elsif user_params.key?(:otp_attempt) + authenticate_with_two_factor_via_otp(user) + end end end @@ -52,21 +56,19 @@ module TwoFactorAuthenticationConcern webauthn_credential = WebAuthn::Credential.from_get(user_params[:credential]) if valid_webauthn_credential?(user, webauthn_credential) - clear_attempt_from_session - remember_me(user) - sign_in(user) + on_authentication_success(user, :webauthn) render json: { redirect_path: root_path }, status: :ok else + on_authentication_failure(user, :webauthn, :invalid_credential) render json: { error: t('webauthn_credentials.invalid_credential') }, status: :unprocessable_entity end end def authenticate_with_two_factor_via_otp(user) if valid_otp_attempt?(user) - clear_attempt_from_session - remember_me(user) - sign_in(user) + on_authentication_success(user, :otp) else + on_authentication_failure(user, :otp, :invalid_otp_token) flash.now[:alert] = I18n.t('users.invalid_otp_token') prompt_for_two_factor(user) end diff --git a/app/controllers/follower_accounts_controller.rb b/app/controllers/follower_accounts_controller.rb index ff4df2adf..b3589a39f 100644 --- a/app/controllers/follower_accounts_controller.rb +++ b/app/controllers/follower_accounts_controller.rb @@ -85,7 +85,7 @@ class FollowerAccountsController < ApplicationController if page_requested? || !@account.user_hides_network? # Return all fields else - %i(id type totalItems) + %i(id type total_items) end end end diff --git a/app/controllers/following_accounts_controller.rb b/app/controllers/following_accounts_controller.rb index 6bb95c454..8a72dc475 100644 --- a/app/controllers/following_accounts_controller.rb +++ b/app/controllers/following_accounts_controller.rb @@ -85,7 +85,7 @@ class FollowingAccountsController < ApplicationController if page_requested? || !@account.user_hides_network? # Return all fields else - %i(id type totalItems) + %i(id type total_items) end end end diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 702889cd0..7e443eb9e 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -14,30 +14,7 @@ class HomeController < ApplicationController def redirect_unauthenticated_to_permalinks! return if user_signed_in? - matches = request.path.match(/\A\/web\/(statuses|accounts)\/([\d]+)\z/) - - if matches - case matches[1] - when 'statuses' - status = Status.find_by(id: matches[2]) - - if status&.distributable? - redirect_to(ActivityPub::TagManager.instance.url_for(status)) - return - end - when 'accounts' - account = Account.find_by(id: matches[2]) - - if account - redirect_to(ActivityPub::TagManager.instance.url_for(account)) - return - end - end - end - - matches = request.path.match(%r{\A/web/timelines/tag/(?.+)\z}) - - redirect_to(matches ? tag_path(CGI.unescape(matches[:tag])) : default_redirect_path) + redirect_to(PermalinkRedirector.new(request.path).redirect_path || default_redirect_path) end def default_redirect_path diff --git a/app/controllers/media_controller.rb b/app/controllers/media_controller.rb index ce015dd1b..ee82625a0 100644 --- a/app/controllers/media_controller.rb +++ b/app/controllers/media_controller.rb @@ -27,7 +27,12 @@ class MediaController < ApplicationController private def set_media_attachment - @media_attachment = MediaAttachment.attached.find_by!(shortcode: params[:id] || params[:medium_id]) + id = params[:id] || params[:medium_id] + return if id.nil? + + scope = MediaAttachment.local.attached + # If id is 19 characters long, it's a shortcode, otherwise it's an identifier + @media_attachment = id.size == 19 ? scope.find_by!(shortcode: id) : scope.find_by!(id: id) end def verify_permitted_status! diff --git a/app/controllers/settings/deletes_controller.rb b/app/controllers/settings/deletes_controller.rb index 7b8f8d207..e0dd5edcb 100644 --- a/app/controllers/settings/deletes_controller.rb +++ b/app/controllers/settings/deletes_controller.rb @@ -42,7 +42,7 @@ class Settings::DeletesController < Settings::BaseController end def destroy_account! - current_account.suspend!(origin: :local) + current_account.suspend!(origin: :local, block_email: false) AccountDeletionWorker.perform_async(current_user.account_id) sign_out end diff --git a/app/controllers/settings/login_activities_controller.rb b/app/controllers/settings/login_activities_controller.rb new file mode 100644 index 000000000..57fa6aef0 --- /dev/null +++ b/app/controllers/settings/login_activities_controller.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class Settings::LoginActivitiesController < Settings::BaseController + def index + @login_activities = LoginActivity.where(user: current_user).order(id: :desc).page(params[:page]) + end +end diff --git a/app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb b/app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb index 1c557092b..a50d30f06 100644 --- a/app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb +++ b/app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb @@ -21,7 +21,8 @@ module Settings display_name: current_user.account.username, id: current_user.webauthn_id, }, - exclude: current_user.webauthn_credentials.pluck(:external_id) + exclude: current_user.webauthn_credentials.pluck(:external_id), + authenticator_selection: { user_verification: 'discouraged' } ) session[:webauthn_challenge] = options_for_create.challenge diff --git a/app/controllers/statuses_cleanup_controller.rb b/app/controllers/statuses_cleanup_controller.rb new file mode 100644 index 000000000..be234cdcb --- /dev/null +++ b/app/controllers/statuses_cleanup_controller.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +class StatusesCleanupController < ApplicationController + layout 'admin' + + before_action :authenticate_user! + before_action :set_policy + before_action :set_body_classes + + def show; end + + def update + if @policy.update(resource_params) + redirect_to statuses_cleanup_path, notice: I18n.t('generic.changes_saved_msg') + else + render action: :show + end + rescue ActionController::ParameterMissing + # Do nothing + end + + private + + def set_policy + @policy = current_account.statuses_cleanup_policy || current_account.build_statuses_cleanup_policy(enabled: false) + end + + def resource_params + params.require(:account_statuses_cleanup_policy).permit(:enabled, :min_status_age, :keep_direct, :keep_pinned, :keep_polls, :keep_media, :keep_self_fav, :keep_self_bookmark, :min_favs, :min_reblogs) + end + + def set_body_classes + @body_classes = 'admin' + end +end diff --git a/app/controllers/well_known/webfinger_controller.rb b/app/controllers/well_known/webfinger_controller.rb index 0227f722a..2b296ea3b 100644 --- a/app/controllers/well_known/webfinger_controller.rb +++ b/app/controllers/well_known/webfinger_controller.rb @@ -4,7 +4,6 @@ module WellKnown class WebfingerController < ActionController::Base include RoutingHelper - before_action { response.headers['Vary'] = 'Accept' } before_action :set_account before_action :check_account_suspension @@ -39,10 +38,12 @@ module WellKnown end def bad_request + expires_in(3.minutes, public: true) head 400 end def not_found + expires_in(3.minutes, public: true) head 404 end diff --git a/app/helpers/accounts_helper.rb b/app/helpers/accounts_helper.rb index 134217734..db3da2b05 100644 --- a/app/helpers/accounts_helper.rb +++ b/app/helpers/accounts_helper.rb @@ -80,17 +80,17 @@ module AccountsHelper def account_description(account) prepend_str = [ [ - number_to_human(account.statuses_count, strip_insignificant_zeros: true), + number_to_human(account.statuses_count, precision: 3, strip_insignificant_zeros: true), I18n.t('accounts.posts', count: account.statuses_count), ].join(' '), [ - number_to_human(account.following_count, strip_insignificant_zeros: true), + number_to_human(account.following_count, precision: 3, strip_insignificant_zeros: true), I18n.t('accounts.following', count: account.following_count), ].join(' '), [ - number_to_human(account.followers_count, strip_insignificant_zeros: true), + number_to_human(account.followers_count, precision: 3, strip_insignificant_zeros: true), I18n.t('accounts.followers', count: account.followers_count), ].join(' '), ].join(', ') diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index bf5742d34..34fc46615 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -14,6 +14,17 @@ module ApplicationHelper ku ).freeze + def friendly_number_to_human(number, **options) + # By default, the number of precision digits used by number_to_human + # is looked up from the locales definition, and rails-i18n comes with + # values that don't seem to make much sense for many languages, so + # override these values with a default of 3 digits of precision. + options[:precision] = 3 + options[:strip_insignificant_zeros] = true + + number_to_human(number, **options) + end + def active_nav_class(*paths) paths.any? { |path| current_page?(path) } ? 'active' : '' end @@ -126,6 +137,10 @@ module ApplicationHelper end end + def react_admin_component(name, props = {}) + content_tag(:div, nil, data: { 'admin-component': name.to_s.camelcase, props: Oj.dump({ locale: I18n.locale }.merge(props)) }) + end + def body_classes output = (@body_classes || '').split(' ') output << "theme-#{current_theme.parameterize}" diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index 0ebfab75d..ac4c18746 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -41,6 +41,7 @@ module SettingsHelper ka: 'ქართული', kab: 'Taqbaylit', kk: 'Қазақша', + kmr: 'Kurmancî', kn: 'ಕನ್ನಡ', ko: '한국어', ku: 'سۆرانی', diff --git a/app/javascript/mastodon/actions/accounts.js b/app/javascript/mastodon/actions/accounts.js index b941de8cc..0e5b3e99b 100644 --- a/app/javascript/mastodon/actions/accounts.js +++ b/app/javascript/mastodon/actions/accounts.js @@ -5,6 +5,10 @@ export const ACCOUNT_FETCH_REQUEST = 'ACCOUNT_FETCH_REQUEST'; export const ACCOUNT_FETCH_SUCCESS = 'ACCOUNT_FETCH_SUCCESS'; export const ACCOUNT_FETCH_FAIL = 'ACCOUNT_FETCH_FAIL'; +export const ACCOUNT_LOOKUP_REQUEST = 'ACCOUNT_LOOKUP_REQUEST'; +export const ACCOUNT_LOOKUP_SUCCESS = 'ACCOUNT_LOOKUP_SUCCESS'; +export const ACCOUNT_LOOKUP_FAIL = 'ACCOUNT_LOOKUP_FAIL'; + export const ACCOUNT_FOLLOW_REQUEST = 'ACCOUNT_FOLLOW_REQUEST'; export const ACCOUNT_FOLLOW_SUCCESS = 'ACCOUNT_FOLLOW_SUCCESS'; export const ACCOUNT_FOLLOW_FAIL = 'ACCOUNT_FOLLOW_FAIL'; @@ -87,6 +91,34 @@ export function fetchAccount(id) { }; } +export const lookupAccount = acct => (dispatch, getState) => { + dispatch(lookupAccountRequest(acct)); + + api(getState).get('/api/v1/accounts/lookup', { params: { acct } }).then(response => { + dispatch(fetchRelationships([response.data.id])); + dispatch(importFetchedAccount(response.data)); + dispatch(lookupAccountSuccess()); + }).catch(error => { + dispatch(lookupAccountFail(acct, error)); + }); +}; + +export const lookupAccountRequest = (acct) => ({ + type: ACCOUNT_LOOKUP_REQUEST, + acct, +}); + +export const lookupAccountSuccess = () => ({ + type: ACCOUNT_LOOKUP_SUCCESS, +}); + +export const lookupAccountFail = (acct, error) => ({ + type: ACCOUNT_LOOKUP_FAIL, + acct, + error, + skipAlert: true, +}); + export function fetchAccountRequest(id) { return { type: ACCOUNT_FETCH_REQUEST, diff --git a/app/javascript/mastodon/actions/compose.js b/app/javascript/mastodon/actions/compose.js index 6ab8bf1f9..4ffdf75d9 100644 --- a/app/javascript/mastodon/actions/compose.js +++ b/app/javascript/mastodon/actions/compose.js @@ -7,7 +7,9 @@ import { useEmoji } from './emojis'; import resizeImage from '../utils/resize_image'; import { importFetchedAccounts } from './importer'; import { updateTimeline } from './timelines'; -import { showAlert, showAlertForError } from './alerts'; +import { showAlertForError } from './alerts'; +import { showAlert } from './alerts'; +import { openModal } from './modal'; import { defineMessages } from 'react-intl'; let cancelFetchComposeSuggestionsAccounts, cancelFetchComposeSuggestionsTags; @@ -62,6 +64,11 @@ export const COMPOSE_POLL_OPTION_CHANGE = 'COMPOSE_POLL_OPTION_CHANGE'; export const COMPOSE_POLL_OPTION_REMOVE = 'COMPOSE_POLL_OPTION_REMOVE'; export const COMPOSE_POLL_SETTINGS_CHANGE = 'COMPOSE_POLL_SETTINGS_CHANGE'; +export const INIT_MEDIA_EDIT_MODAL = 'INIT_MEDIA_EDIT_MODAL'; + +export const COMPOSE_CHANGE_MEDIA_DESCRIPTION = 'COMPOSE_CHANGE_MEDIA_DESCRIPTION'; +export const COMPOSE_CHANGE_MEDIA_FOCUS = 'COMPOSE_CHANGE_MEDIA_FOCUS'; + const messages = defineMessages({ uploadErrorLimit: { id: 'upload_error.limit', defaultMessage: 'File upload limit exceeded.' }, uploadErrorPoll: { id: 'upload_error.poll', defaultMessage: 'File upload not allowed with polls.' }, @@ -71,7 +78,7 @@ const COMPOSE_PANEL_BREAKPOINT = 600 + (285 * 1) + (10 * 1); export const ensureComposeIsVisible = (getState, routerHistory) => { if (!getState().getIn(['compose', 'mounted']) && window.innerWidth < COMPOSE_PANEL_BREAKPOINT) { - routerHistory.push('/statuses/new'); + routerHistory.push('/publish'); } }; @@ -80,7 +87,7 @@ export function changeCompose(text) { type: COMPOSE_CHANGE, text: text, }; -} +}; export function replyCompose(status, routerHistory) { return (dispatch, getState) => { @@ -91,19 +98,19 @@ export function replyCompose(status, routerHistory) { ensureComposeIsVisible(getState, routerHistory); }; -} +}; export function cancelReplyCompose() { return { type: COMPOSE_REPLY_CANCEL, }; -} +}; export function resetCompose() { return { type: COMPOSE_RESET, }; -} +}; export function mentionCompose(account, routerHistory) { return (dispatch, getState) => { @@ -114,7 +121,7 @@ export function mentionCompose(account, routerHistory) { ensureComposeIsVisible(getState, routerHistory); }; -} +}; export function directCompose(account, routerHistory) { return (dispatch, getState) => { @@ -125,7 +132,7 @@ export function directCompose(account, routerHistory) { ensureComposeIsVisible(getState, routerHistory); }; -} +}; export function submitCompose(routerHistory) { return function (dispatch, getState) { @@ -151,7 +158,7 @@ export function submitCompose(routerHistory) { 'Idempotency-Key': getState().getIn(['compose', 'idempotencyKey']), }, }).then(function (response) { - if (routerHistory && routerHistory.location.pathname === '/statuses/new' && window.history.state) { + if (routerHistory && (routerHistory.location.pathname === '/publish' || routerHistory.location.pathname === '/statuses/new') && window.history.state) { routerHistory.goBack(); } @@ -181,27 +188,27 @@ export function submitCompose(routerHistory) { dispatch(submitComposeFail(error)); }); }; -} +}; export function submitComposeRequest() { return { type: COMPOSE_SUBMIT_REQUEST, }; -} +}; export function submitComposeSuccess(status) { return { type: COMPOSE_SUBMIT_SUCCESS, status: status, }; -} +}; export function submitComposeFail(error) { return { type: COMPOSE_SUBMIT_FAIL, error: error, }; -} +}; export function uploadCompose(files) { return function (dispatch, getState) { @@ -233,7 +240,7 @@ export function uploadCompose(files) { total += file.size - f.size; return api(getState).post('/api/v2/media', data, { - onUploadProgress: function ({ loaded }) { + onUploadProgress: function({ loaded }){ progress[i] = loaded; dispatch(uploadComposeProgress(progress.reduce((a, v) => a + v, 0), total)); }, @@ -258,9 +265,9 @@ export function uploadCompose(files) { } }); }).catch(error => dispatch(uploadComposeFail(error))); - } + }; }; -} +}; export const uploadThumbnail = (id, file) => (dispatch, getState) => { dispatch(uploadThumbnailRequest()); @@ -305,6 +312,32 @@ export const uploadThumbnailFail = error => ({ skipLoading: true, }); +export function initMediaEditModal(id) { + return dispatch => { + dispatch({ + type: INIT_MEDIA_EDIT_MODAL, + id, + }); + + dispatch(openModal('FOCAL_POINT', { id })); + }; +}; + +export function onChangeMediaDescription(description) { + return { + type: COMPOSE_CHANGE_MEDIA_DESCRIPTION, + description, + }; +}; + +export function onChangeMediaFocus(focusX, focusY) { + return { + type: COMPOSE_CHANGE_MEDIA_FOCUS, + focusX, + focusY, + }; +}; + export function changeUploadCompose(id, params) { return (dispatch, getState) => { dispatch(changeUploadComposeRequest()); @@ -315,7 +348,7 @@ export function changeUploadCompose(id, params) { dispatch(changeUploadComposeFail(id, error)); }); }; -} +}; export function changeUploadComposeRequest() { return { @@ -330,7 +363,7 @@ export function changeUploadComposeSuccess(media) { media: media, skipLoading: true, }; -} +}; export function changeUploadComposeFail(error) { return { @@ -338,14 +371,14 @@ export function changeUploadComposeFail(error) { error: error, skipLoading: true, }; -} +}; export function uploadComposeRequest() { return { type: COMPOSE_UPLOAD_REQUEST, skipLoading: true, }; -} +}; export function uploadComposeProgress(loaded, total) { return { @@ -353,7 +386,7 @@ export function uploadComposeProgress(loaded, total) { loaded: loaded, total: total, }; -} +}; export function uploadComposeSuccess(media, file) { return { @@ -362,7 +395,7 @@ export function uploadComposeSuccess(media, file) { file: file, skipLoading: true, }; -} +}; export function uploadComposeFail(error) { return { @@ -370,14 +403,14 @@ export function uploadComposeFail(error) { error: error, skipLoading: true, }; -} +}; export function undoUploadCompose(media_id) { return { type: COMPOSE_UPLOAD_UNDO, media_id: media_id, }; -} +}; export function clearComposeSuggestions() { if (cancelFetchComposeSuggestionsAccounts) { @@ -386,7 +419,7 @@ export function clearComposeSuggestions() { return { type: COMPOSE_SUGGESTIONS_CLEAR, }; -} +}; const fetchComposeSuggestionsAccounts = throttle((dispatch, getState, token) => { if (cancelFetchComposeSuggestionsAccounts) { @@ -460,7 +493,7 @@ export function fetchComposeSuggestions(token) { break; } }; -} +}; export function readyComposeSuggestionsEmojis(token, emojis) { return { @@ -468,7 +501,7 @@ export function readyComposeSuggestionsEmojis(token, emojis) { token, emojis, }; -} +}; export function readyComposeSuggestionsAccounts(token, accounts) { return { @@ -476,7 +509,7 @@ export function readyComposeSuggestionsAccounts(token, accounts) { token, accounts, }; -} +}; export const readyComposeSuggestionsTags = (token, tags) => ({ type: COMPOSE_SUGGESTIONS_READY, @@ -509,7 +542,7 @@ export function selectComposeSuggestion(position, token, suggestion, path) { path, }); }; -} +}; export function updateSuggestionTags(token) { return { @@ -557,39 +590,39 @@ export function mountCompose() { return { type: COMPOSE_MOUNT, }; -} +}; export function unmountCompose() { return { type: COMPOSE_UNMOUNT, }; -} +}; export function changeComposeSensitivity() { return { type: COMPOSE_SENSITIVITY_CHANGE, }; -} +}; export function changeComposeSpoilerness() { return { type: COMPOSE_SPOILERNESS_CHANGE, }; -} +}; export function changeComposeSpoilerText(text) { return { type: COMPOSE_SPOILER_TEXT_CHANGE, text, }; -} +}; export function changeComposeVisibility(value) { return { type: COMPOSE_VISIBILITY_CHANGE, value, }; -} +}; export function insertEmojiCompose(position, emoji, needsSpace) { return { @@ -598,33 +631,33 @@ export function insertEmojiCompose(position, emoji, needsSpace) { emoji, needsSpace, }; -} +}; export function changeComposing(value) { return { type: COMPOSE_COMPOSING_CHANGE, value, }; -} +}; export function addPoll() { return { type: COMPOSE_POLL_ADD, }; -} +}; export function removePoll() { return { type: COMPOSE_POLL_REMOVE, }; -} +}; export function addPollOption(title) { return { type: COMPOSE_POLL_OPTION_ADD, title, }; -} +}; export function changePollOption(index, title) { return { @@ -632,14 +665,14 @@ export function changePollOption(index, title) { index, title, }; -} +}; export function removePollOption(index) { return { type: COMPOSE_POLL_OPTION_REMOVE, index, }; -} +}; export function changePollSettings(expiresIn, isMultiple) { return { @@ -647,4 +680,4 @@ export function changePollSettings(expiresIn, isMultiple) { expiresIn, isMultiple, }; -} +}; diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index 3464ac995..663cf21e3 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -1,6 +1,6 @@ import api, { getLinks } from '../api'; import IntlMessageFormat from 'intl-messageformat'; -import { fetchRelationships } from './accounts'; +import { fetchFollowRequests, fetchRelationships } from './accounts'; import { importFetchedAccount, importFetchedAccounts, @@ -78,6 +78,10 @@ export function updateNotifications(notification, intlMessages, intlLocale) { filtered = regex && regex.test(searchIndex); } + if (['follow_request'].includes(notification.type)) { + dispatch(fetchFollowRequests()); + } + dispatch(submitMarkers()); if (showInColumn) { diff --git a/app/javascript/mastodon/actions/picture_in_picture.js b/app/javascript/mastodon/actions/picture_in_picture.js index 4085cb59e..33d8d57d4 100644 --- a/app/javascript/mastodon/actions/picture_in_picture.js +++ b/app/javascript/mastodon/actions/picture_in_picture.js @@ -22,13 +22,20 @@ export const PICTURE_IN_PICTURE_REMOVE = 'PICTURE_IN_PICTURE_REMOVE'; * @param {MediaProps} props * @return {object} */ -export const deployPictureInPicture = (statusId, accountId, playerType, props) => ({ - type: PICTURE_IN_PICTURE_DEPLOY, - statusId, - accountId, - playerType, - props, -}); +export const deployPictureInPicture = (statusId, accountId, playerType, props) => { + return (dispatch, getState) => { + // Do not open a player for a toot that does not exist + if (getState().hasIn(['statuses', statusId])) { + dispatch({ + type: PICTURE_IN_PICTURE_DEPLOY, + statusId, + accountId, + playerType, + props, + }); + } + }; +}; /* * @return {object} diff --git a/app/javascript/mastodon/api.js b/app/javascript/mastodon/api.js index 98d59de43..645ef6500 100644 --- a/app/javascript/mastodon/api.js +++ b/app/javascript/mastodon/api.js @@ -12,21 +12,35 @@ export const getLinks = response => { return LinkHeader.parse(value); }; -let csrfHeader = {}; +const csrfHeader = {}; -function setCSRFHeader() { +const setCSRFHeader = () => { const csrfToken = document.querySelector('meta[name=csrf-token]'); + if (csrfToken) { csrfHeader['X-CSRF-Token'] = csrfToken.content; } -} +}; ready(setCSRFHeader); +const authorizationHeaderFromState = getState => { + const accessToken = getState && getState().getIn(['meta', 'access_token'], ''); + + if (!accessToken) { + return {}; + } + + return { + 'Authorization': `Bearer ${accessToken}`, + }; +}; + export default getState => axios.create({ - headers: Object.assign(csrfHeader, getState ? { - 'Authorization': `Bearer ${getState().getIn(['meta', 'access_token'], '')}`, - } : {}), + headers: { + ...csrfHeader, + ...authorizationHeaderFromState(getState), + }, transformResponse: [function (data) { try { diff --git a/app/javascript/mastodon/components/account.js b/app/javascript/mastodon/components/account.js index a85d683a7..62b5843a9 100644 --- a/app/javascript/mastodon/components/account.js +++ b/app/javascript/mastodon/components/account.js @@ -118,7 +118,7 @@ class Account extends ImmutablePureComponent { return (
- +
{mute_expires_at} diff --git a/app/javascript/mastodon/components/admin/Counter.js b/app/javascript/mastodon/components/admin/Counter.js new file mode 100644 index 000000000..cda572dce --- /dev/null +++ b/app/javascript/mastodon/components/admin/Counter.js @@ -0,0 +1,115 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import api from 'mastodon/api'; +import { FormattedNumber } from 'react-intl'; +import { Sparklines, SparklinesCurve } from 'react-sparklines'; +import classNames from 'classnames'; +import Skeleton from 'mastodon/components/skeleton'; + +const percIncrease = (a, b) => { + let percent; + + if (b !== 0) { + if (a !== 0) { + percent = (b - a) / a; + } else { + percent = 1; + } + } else if (b === 0 && a === 0) { + percent = 0; + } else { + percent = - 1; + } + + return percent; +}; + +export default class Counter extends React.PureComponent { + + static propTypes = { + measure: PropTypes.string.isRequired, + start_at: PropTypes.string.isRequired, + end_at: PropTypes.string.isRequired, + label: PropTypes.string.isRequired, + href: PropTypes.string, + }; + + state = { + loading: true, + data: null, + }; + + componentDidMount () { + const { measure, start_at, end_at } = this.props; + + api().post('/api/v1/admin/measures', { keys: [measure], start_at, end_at }).then(res => { + this.setState({ + loading: false, + data: res.data, + }); + }).catch(err => { + console.error(err); + }); + } + + render () { + const { label, href } = this.props; + const { loading, data } = this.state; + + let content; + + if (loading) { + content = ( + + + + + ); + } else { + const measure = data[0]; + const percentChange = percIncrease(measure.previous_total * 1, measure.total * 1); + + content = ( + + + 0, negative: percentChange < 0 })}>{percentChange > 0 && '+'} + + ); + } + + const inner = ( + +
+ {content} +
+ +
+ {label} +
+ +
+ {!loading && ( + x.value * 1)}> + + + )} +
+
+ ); + + if (href) { + return ( +
+ {inner} + + ); + } else { + return ( +
+ {inner} +
+ ); + } + } + +} diff --git a/app/javascript/mastodon/components/admin/Dimension.js b/app/javascript/mastodon/components/admin/Dimension.js new file mode 100644 index 000000000..ac6dbd1c7 --- /dev/null +++ b/app/javascript/mastodon/components/admin/Dimension.js @@ -0,0 +1,92 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import api from 'mastodon/api'; +import { FormattedNumber } from 'react-intl'; +import { roundTo10 } from 'mastodon/utils/numbers'; +import Skeleton from 'mastodon/components/skeleton'; + +export default class Dimension extends React.PureComponent { + + static propTypes = { + dimension: PropTypes.string.isRequired, + start_at: PropTypes.string.isRequired, + end_at: PropTypes.string.isRequired, + limit: PropTypes.number.isRequired, + label: PropTypes.string.isRequired, + }; + + state = { + loading: true, + data: null, + }; + + componentDidMount () { + const { start_at, end_at, dimension, limit } = this.props; + + api().post('/api/v1/admin/dimensions', { keys: [dimension], start_at, end_at, limit }).then(res => { + this.setState({ + loading: false, + data: res.data, + }); + }).catch(err => { + console.error(err); + }); + } + + render () { + const { label, limit } = this.props; + const { loading, data } = this.state; + + let content; + + if (loading) { + content = ( + + + {Array.from(Array(limit)).map((_, i) => ( + + + + + + ))} + +
+ + + +
+ ); + } else { + const sum = data[0].data.reduce((sum, cur) => sum + (cur.value * 1), 0); + + content = ( + + + {data[0].data.map(item => ( + + + + + + ))} + +
+ + {item.human_key} + + {typeof item.human_value !== 'undefined' ? item.human_value : } +
+ ); + } + + return ( +
+

{label}

+ + {content} +
+ ); + } + +} diff --git a/app/javascript/mastodon/components/admin/Retention.js b/app/javascript/mastodon/components/admin/Retention.js new file mode 100644 index 000000000..aa06722f7 --- /dev/null +++ b/app/javascript/mastodon/components/admin/Retention.js @@ -0,0 +1,141 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import api from 'mastodon/api'; +import { FormattedMessage, FormattedNumber, FormattedDate } from 'react-intl'; +import classNames from 'classnames'; +import { roundTo10 } from 'mastodon/utils/numbers'; + +const dateForCohort = cohort => { + switch(cohort.frequency) { + case 'day': + return ; + default: + return ; + } +}; + +export default class Retention extends React.PureComponent { + + static propTypes = { + start_at: PropTypes.string, + end_at: PropTypes.string, + frequency: PropTypes.string, + }; + + state = { + loading: true, + data: null, + }; + + componentDidMount () { + const { start_at, end_at, frequency } = this.props; + + api().post('/api/v1/admin/retention', { start_at, end_at, frequency }).then(res => { + this.setState({ + loading: false, + data: res.data, + }); + }).catch(err => { + console.error(err); + }); + } + + render () { + const { loading, data } = this.state; + + let content; + + if (loading) { + content = ; + } else { + content = ( + + + + + + + + {data[0].data.slice(1).map((retention, i) => ( + + ))} + + + + + + + + {data[0].data.slice(1).map((retention, i) => { + const average = data.reduce((sum, cohort, k) => cohort.data[i + 1] ? sum + (cohort.data[i + 1].percent - sum)/(k + 1) : sum, 0); + + return ( + + ); + })} + + + + + {data.slice(0, -1).map(cohort => ( + + + + + + {cohort.data.slice(1).map(retention => ( + + ))} + + ))} + +
+
+ +
+
+
+ +
+
+
+ {i + 1} +
+
+
+ +
+
+
+ sum + ((cohort.data[0].value * 1) - sum) / (i + 1), 0)} maximumFractionDigits={0} /> +
+
+
+ +
+
+
+ {dateForCohort(cohort)} +
+
+
+ +
+
+
+ +
+
+ ); + } + + return ( +
+

+ + {content} +
+ ); + } + +} diff --git a/app/javascript/mastodon/components/admin/Trends.js b/app/javascript/mastodon/components/admin/Trends.js new file mode 100644 index 000000000..46307a28a --- /dev/null +++ b/app/javascript/mastodon/components/admin/Trends.js @@ -0,0 +1,73 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import api from 'mastodon/api'; +import { FormattedMessage } from 'react-intl'; +import classNames from 'classnames'; +import Hashtag from 'mastodon/components/hashtag'; + +export default class Trends extends React.PureComponent { + + static propTypes = { + limit: PropTypes.number.isRequired, + }; + + state = { + loading: true, + data: null, + }; + + componentDidMount () { + const { limit } = this.props; + + api().get('/api/v1/admin/trends', { params: { limit } }).then(res => { + this.setState({ + loading: false, + data: res.data, + }); + }).catch(err => { + console.error(err); + }); + } + + render () { + const { limit } = this.props; + const { loading, data } = this.state; + + let content; + + if (loading) { + content = ( +
+ {Array.from(Array(limit)).map((_, i) => ( + + ))} +
+ ); + } else { + content = ( +
+ {data.map(hashtag => ( + day.uses)} + className={classNames(hashtag.requires_review && 'trends__item--requires-review', !hashtag.trendable && !hashtag.requires_review && 'trends__item--disabled')} + /> + ))} +
+ ); + } + + return ( +
+

+ + {content} +
+ ); + } + +} diff --git a/app/javascript/mastodon/components/attachment_list.js b/app/javascript/mastodon/components/attachment_list.js index ebd696583..0e23889de 100644 --- a/app/javascript/mastodon/components/attachment_list.js +++ b/app/javascript/mastodon/components/attachment_list.js @@ -2,6 +2,8 @@ import React from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import ImmutablePureComponent from 'react-immutable-pure-component'; +import { FormattedMessage } from 'react-intl'; +import classNames from 'classnames'; import Icon from 'mastodon/components/icon'; const filename = url => url.split('/').pop().split('#')[0].split('?')[0]; @@ -16,29 +18,13 @@ export default class AttachmentList extends ImmutablePureComponent { render () { const { media, compact } = this.props; - if (compact) { - return ( -
-
    - {media.map(attachment => { - const displayUrl = attachment.get('remote_url') || attachment.get('url'); - - return ( -
  • - {filename(displayUrl)} -
  • - ); - })} -
-
- ); - } - return ( -
-
- -
+
+ {!compact && ( +
+ +
+ )}
    {media.map(attachment => { @@ -46,7 +32,11 @@ export default class AttachmentList extends ImmutablePureComponent { return (
  • - {filename(displayUrl)} + + {compact && } + {compact && ' ' } + {displayUrl ? filename(displayUrl) : } +
  • ); })} diff --git a/app/javascript/mastodon/components/column_header.js b/app/javascript/mastodon/components/column_header.js index 236e92296..cbbc490a8 100644 --- a/app/javascript/mastodon/components/column_header.js +++ b/app/javascript/mastodon/components/column_header.js @@ -119,8 +119,8 @@ class ColumnHeader extends React.PureComponent { moveButtons = (
    - - + +
    ); } else if (multiColumn && this.props.onPin) { @@ -141,8 +141,8 @@ class ColumnHeader extends React.PureComponent { ]; if (multiColumn) { - collapsedContent.push(moveButtons); collapsedContent.push(pinButton); + collapsedContent.push(moveButtons); } if (children || (multiColumn && this.props.onPin)) { diff --git a/app/javascript/mastodon/components/hashtag.js b/app/javascript/mastodon/components/hashtag.js index 75fcf20e3..a793a32f5 100644 --- a/app/javascript/mastodon/components/hashtag.js +++ b/app/javascript/mastodon/components/hashtag.js @@ -6,6 +6,8 @@ import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import Permalink from './permalink'; import ShortNumber from 'mastodon/components/short_number'; +import Skeleton from 'mastodon/components/skeleton'; +import classNames from 'classnames'; class SilentErrorBoundary extends React.Component { @@ -47,45 +49,38 @@ const accountsCountRenderer = (displayNumber, pluralReady) => ( /> ); -const Hashtag = ({ hashtag }) => ( -
    +export const ImmutableHashtag = ({ hashtag }) => ( + day.get('uses')).toArray()} + /> +); + +ImmutableHashtag.propTypes = { + hashtag: ImmutablePropTypes.map.isRequired, +}; + +const Hashtag = ({ name, href, to, people, uses, history, className }) => ( +
    - - #{hashtag.get('name')} + + {name ? #{name} : } - + {typeof people !== 'undefined' ? : }
    - + {typeof uses !== 'undefined' ? : }
    - day.get('uses')) - .toArray()} - > + 0)}> @@ -94,7 +89,13 @@ const Hashtag = ({ hashtag }) => ( ); Hashtag.propTypes = { - hashtag: ImmutablePropTypes.map.isRequired, + name: PropTypes.string, + href: PropTypes.string, + to: PropTypes.string, + people: PropTypes.number, + uses: PropTypes.number, + history: PropTypes.arrayOf(PropTypes.number), + className: PropTypes.string, }; export default Hashtag; diff --git a/app/javascript/mastodon/components/intersection_observer_article.js b/app/javascript/mastodon/components/intersection_observer_article.js index 2d87f19b5..26f85fa40 100644 --- a/app/javascript/mastodon/components/intersection_observer_article.js +++ b/app/javascript/mastodon/components/intersection_observer_article.js @@ -93,7 +93,7 @@ export default class IntersectionObserverArticle extends React.Component { // When the browser gets a chance, test if we're still not intersecting, // and if so, set our isHidden to true to trigger an unrender. The point of // this is to save DOM nodes and avoid using up too much memory. - // See: https://github.com/tootsuite/mastodon/issues/2900 + // See: https://github.com/mastodon/mastodon/issues/2900 this.setState((prevState) => ({ isHidden: !prevState.isIntersecting })); } diff --git a/app/javascript/mastodon/components/modal_root.js b/app/javascript/mastodon/components/modal_root.js index 26344528e..755c46fd6 100644 --- a/app/javascript/mastodon/components/modal_root.js +++ b/app/javascript/mastodon/components/modal_root.js @@ -1,10 +1,15 @@ import React from 'react'; import PropTypes from 'prop-types'; import 'wicg-inert'; +import { createBrowserHistory } from 'history'; import { multiply } from 'color-blend'; export default class ModalRoot extends React.PureComponent { + static contextTypes = { + router: PropTypes.object, + }; + static propTypes = { children: PropTypes.node, onClose: PropTypes.func.isRequired, @@ -48,6 +53,7 @@ export default class ModalRoot extends React.PureComponent { componentDidMount () { window.addEventListener('keyup', this.handleKeyUp, false); window.addEventListener('keydown', this.handleKeyDown, false); + this.history = this.context.router ? this.context.router.history : createBrowserHistory(); } componentWillReceiveProps (nextProps) { @@ -69,6 +75,14 @@ export default class ModalRoot extends React.PureComponent { this.activeElement.focus({ preventScroll: true }); this.activeElement = null; }).catch(console.error); + + this._handleModalClose(); + } + if (this.props.children && !prevProps.children) { + this._handleModalOpen(); + } + if (this.props.children) { + this._ensureHistoryBuffer(); } } @@ -77,6 +91,32 @@ export default class ModalRoot extends React.PureComponent { window.removeEventListener('keydown', this.handleKeyDown); } + _handleModalOpen () { + this._modalHistoryKey = Date.now(); + this.unlistenHistory = this.history.listen((_, action) => { + if (action === 'POP') { + this.props.onClose(); + } + }); + } + + _handleModalClose () { + if (this.unlistenHistory) { + this.unlistenHistory(); + } + const { state } = this.history.location; + if (state && state.mastodonModalKey === this._modalHistoryKey) { + this.history.goBack(); + } + } + + _ensureHistoryBuffer () { + const { pathname, state } = this.history.location; + if (!state || state.mastodonModalKey !== this._modalHistoryKey) { + this.history.push(pathname, { ...state, mastodonModalKey: this._modalHistoryKey }); + } + } + getSiblings = () => { return Array(...this.node.parentElement.childNodes).filter(node => node !== this.node); } diff --git a/app/javascript/mastodon/components/poll.js b/app/javascript/mastodon/components/poll.js index 477f56e13..85aa28816 100644 --- a/app/javascript/mastodon/components/poll.js +++ b/app/javascript/mastodon/components/poll.js @@ -12,8 +12,18 @@ import RelativeTimestamp from './relative_timestamp'; import Icon from 'mastodon/components/icon'; const messages = defineMessages({ - closed: { id: 'poll.closed', defaultMessage: 'Closed' }, - voted: { id: 'poll.voted', defaultMessage: 'You voted for this answer', description: 'Tooltip of the "voted" checkmark in polls' }, + closed: { + id: 'poll.closed', + defaultMessage: 'Closed', + }, + voted: { + id: 'poll.voted', + defaultMessage: 'You voted for this answer', + }, + votes: { + id: 'poll.votes', + defaultMessage: '{votes, plural, one {# vote} other {# votes}}', + }, }); const makeEmojiMap = record => record.get('emojis').reduce((obj, emoji) => { @@ -148,9 +158,16 @@ class Poll extends ImmutablePureComponent { data-index={optionIndex} /> )} - {showResults && - {Math.round(percent)}% - } + {showResults && ( + + {Math.round(percent)}% + + )} + {scrollableArea} ); diff --git a/app/javascript/mastodon/components/skeleton.js b/app/javascript/mastodon/components/skeleton.js new file mode 100644 index 000000000..09093e99c --- /dev/null +++ b/app/javascript/mastodon/components/skeleton.js @@ -0,0 +1,11 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +const Skeleton = ({ width, height }) => ; + +Skeleton.propTypes = { + width: PropTypes.number, + height: PropTypes.number, +}; + +export default Skeleton; diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index 295e83f58..96e6a6c8d 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -134,42 +134,28 @@ class Status extends ImmutablePureComponent { this.setState({ showMedia: !this.state.showMedia }); } - handleClick = () => { - if (this.props.onClick) { - this.props.onClick(); + handleClick = e => { + if (e && (e.button !== 0 || e.ctrlKey || e.metaKey)) { return; } - if (!this.context.router) { - return; - } - - const { status } = this.props; - this.context.router.history.push(`/statuses/${status.getIn(['reblog', 'id'], status.get('id'))}`); - } - - handleExpandClick = (e) => { - if (this.props.onClick) { - this.props.onClick(); - return; - } - - if (e.button === 0) { - if (!this.context.router) { - return; - } - - const { status } = this.props; - this.context.router.history.push(`/statuses/${status.getIn(['reblog', 'id'], status.get('id'))}`); - } - } - - handleAccountClick = (e) => { - if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) { - const id = e.currentTarget.getAttribute('data-id'); + if (e) { e.preventDefault(); - this.context.router.history.push(`/accounts/${id}`); } + + this.handleHotkeyOpen(); + } + + handleAccountClick = e => { + if (e && (e.button !== 0 || e.ctrlKey || e.metaKey)) { + return; + } + + if (e) { + e.preventDefault(); + } + + this.handleHotkeyOpenProfile(); } handleExpandedToggle = () => { @@ -242,11 +228,30 @@ class Status extends ImmutablePureComponent { } handleHotkeyOpen = () => { - this.context.router.history.push(`/statuses/${this._properStatus().get('id')}`); + if (this.props.onClick) { + this.props.onClick(); + return; + } + + const { router } = this.context; + const status = this._properStatus(); + + if (!router) { + return; + } + + router.history.push(`/@${status.getIn(['account', 'acct'])}/${status.get('id')}`); } handleHotkeyOpenProfile = () => { - this.context.router.history.push(`/accounts/${this._properStatus().getIn(['account', 'id'])}`); + const { router } = this.context; + const status = this._properStatus(); + + if (!router) { + return; + } + + router.history.push(`/@${status.getIn(['account', 'acct'])}`); } handleHotkeyMoveUp = e => { @@ -309,8 +314,8 @@ class Status extends ImmutablePureComponent { return (
    - {status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])} - {status.get('content')} + {status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])} + {status.get('content')}
    ); @@ -465,14 +470,15 @@ class Status extends ImmutablePureComponent { {prepend}
    -
    +
    +
    - + - +
    {statusAvatar}
    diff --git a/app/javascript/mastodon/components/status_action_bar.js b/app/javascript/mastodon/components/status_action_bar.js index 27f2ed8ba..7e9d557bf 100644 --- a/app/javascript/mastodon/components/status_action_bar.js +++ b/app/javascript/mastodon/components/status_action_bar.js @@ -187,8 +187,8 @@ class StatusActionBar extends ImmutablePureComponent { }; handleOpen = () => { - this.context.router.history.push(`/statuses/${this.props.status.get('id')}`); - }; + this.context.router.history.push(`/@${this.props.status.getIn(['account', 'acct'])}/${this.props.status.get('id')}`); + } handleEmbed = () => { this.props.onEmbed(this.props.status); diff --git a/app/javascript/mastodon/components/status_content.js b/app/javascript/mastodon/components/status_content.js index a138d5289..224429a20 100644 --- a/app/javascript/mastodon/components/status_content.js +++ b/app/javascript/mastodon/components/status_content.js @@ -111,7 +111,7 @@ export default class StatusContent extends React.PureComponent { onMentionClick = (mention, e) => { if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) { e.preventDefault(); - this.context.router.history.push(`/accounts/${mention.get('id')}`); + this.context.router.history.push(`/@${mention.get('acct')}`); } }; @@ -120,7 +120,7 @@ export default class StatusContent extends React.PureComponent { if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) { e.preventDefault(); - this.context.router.history.push(`/timelines/tag/${hashtag}`); + this.context.router.history.push(`/tags/${hashtag}`); } }; @@ -217,14 +217,9 @@ export default class StatusContent extends React.PureComponent { let mentionsPlaceholder = ''; const mentionLinks = status.get('mentions').map(item => ( - - @{item.get('username')} - + + @{item.get('username')} + )).reduce((aggregate, item) => [...aggregate, item, ' '], []); const toggleText = hidden ? ( + {scrollableContent} ); diff --git a/app/javascript/mastodon/containers/admin_component.js b/app/javascript/mastodon/containers/admin_component.js new file mode 100644 index 000000000..816b44bd1 --- /dev/null +++ b/app/javascript/mastodon/containers/admin_component.js @@ -0,0 +1,26 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { IntlProvider, addLocaleData } from 'react-intl'; +import { getLocale } from '../locales'; + +const { localeData, messages } = getLocale(); +addLocaleData(localeData); + +export default class AdminComponent extends React.PureComponent { + + static propTypes = { + locale: PropTypes.string.isRequired, + children: PropTypes.node.isRequired, + }; + + render () { + const { locale, children } = this.props; + + return ( + + {children} + + ); + } + +} diff --git a/app/javascript/mastodon/containers/mastodon.js b/app/javascript/mastodon/containers/mastodon.js index 513b59908..0c3f6afa8 100644 --- a/app/javascript/mastodon/containers/mastodon.js +++ b/app/javascript/mastodon/containers/mastodon.js @@ -10,8 +10,6 @@ import { hydrateStore } from '../actions/store'; import { connectUserStream } from '../actions/streaming'; import { IntlProvider, addLocaleData } from 'react-intl'; import { getLocale } from '../locales'; -import { previewState as previewMediaState } from 'mastodon/features/ui/components/media_modal'; -import { previewState as previewVideoState } from 'mastodon/features/ui/components/video_modal'; import initialState from '../initial_state'; import ErrorBoundary from '../components/error_boundary'; @@ -24,14 +22,38 @@ const hydrateAction = hydrateStore(initialState); store.dispatch(hydrateAction); store.dispatch(fetchCustomEmojis()); +const createIdentityContext = state => ({ + signedIn: !!state.meta.me, + accountId: state.meta.me, + accessToken: state.meta.access_token, +}); + export default class Mastodon extends React.PureComponent { static propTypes = { locale: PropTypes.string.isRequired, }; + static childContextTypes = { + identity: PropTypes.shape({ + signedIn: PropTypes.bool.isRequired, + accountId: PropTypes.string, + accessToken: PropTypes.string, + }).isRequired, + }; + + identity = createIdentityContext(initialState); + + getChildContext() { + return { + identity: this.identity, + }; + } + componentDidMount() { - this.disconnect = store.dispatch(connectUserStream()); + if (this.identity.signedIn) { + this.disconnect = store.dispatch(connectUserStream()); + } } componentWillUnmount () { @@ -41,8 +63,8 @@ export default class Mastodon extends React.PureComponent { } } - shouldUpdateScroll (_, { location }) { - return location.state !== previewMediaState && location.state !== previewVideoState; + shouldUpdateScroll (prevRouterProps, { location }) { + return !(location.state?.mastodonModalKey && location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey); } render () { diff --git a/app/javascript/mastodon/containers/media_container.js b/app/javascript/mastodon/containers/media_container.js index 81f54578d..098e7a594 100644 --- a/app/javascript/mastodon/containers/media_container.js +++ b/app/javascript/mastodon/containers/media_container.js @@ -7,7 +7,7 @@ import { getLocale } from 'mastodon/locales'; import { getScrollbarWidth } from 'mastodon/utils/scrollbar'; import MediaGallery from 'mastodon/components/media_gallery'; import Poll from 'mastodon/components/poll'; -import Hashtag from 'mastodon/components/hashtag'; +import { ImmutableHashtag as Hashtag } from 'mastodon/components/hashtag'; import ModalRoot from 'mastodon/components/modal_root'; import MediaModal from 'mastodon/features/ui/components/media_modal'; import Video from 'mastodon/features/video'; diff --git a/app/javascript/mastodon/containers/scroll_container.js b/app/javascript/mastodon/containers/scroll_container.js new file mode 100644 index 000000000..d21ff6368 --- /dev/null +++ b/app/javascript/mastodon/containers/scroll_container.js @@ -0,0 +1,18 @@ +import { ScrollContainer as OriginalScrollContainer } from 'react-router-scroll-4'; + +// ScrollContainer is used to automatically scroll to the top when pushing a +// new history state and remembering the scroll position when going back. +// There are a few things we need to do differently, though. +const defaultShouldUpdateScroll = (prevRouterProps, { location }) => { + // If the change is caused by opening a modal, do not scroll to top + return !(location.state?.mastodonModalKey && location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey); +}; + +export default +class ScrollContainer extends OriginalScrollContainer { + + static defaultProps = { + shouldUpdateScroll: defaultShouldUpdateScroll, + }; + +} diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js index 20641121f..4d0a828c7 100644 --- a/app/javascript/mastodon/features/account/components/header.js +++ b/app/javascript/mastodon/features/account/components/header.js @@ -332,21 +332,21 @@ class Header extends ImmutablePureComponent { {!suspended && (
    - + - + - + ({ - isAccount: !!state.getIn(['accounts', props.params.accountId]), - attachments: getAccountGallery(state, props.params.accountId), - isLoading: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'isLoading']), - hasMore: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'hasMore']), - suspended: state.getIn(['accounts', props.params.accountId, 'suspended'], false), - blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false), -}); +const mapStateToProps = (state, { params: { acct, id } }) => { + const accountId = id || state.getIn(['accounts_map', acct]); + + if (!accountId) { + return { + isLoading: true, + }; + } + + return { + accountId, + isAccount: !!state.getIn(['accounts', accountId]), + attachments: getAccountGallery(state, accountId), + isLoading: state.getIn(['timelines', `account:${accountId}:media`, 'isLoading']), + hasMore: state.getIn(['timelines', `account:${accountId}:media`, 'hasMore']), + suspended: state.getIn(['accounts', accountId, 'suspended'], false), + blockedBy: state.getIn(['relationships', accountId, 'blocked_by'], false), + }; +}; class LoadMoreMedia extends ImmutablePureComponent { static propTypes = { - shouldUpdateScroll: PropTypes.func, maxId: PropTypes.string, onLoadMore: PropTypes.func.isRequired, }; @@ -53,7 +63,11 @@ export default @connect(mapStateToProps) class AccountGallery extends ImmutablePureComponent { static propTypes = { - params: PropTypes.object.isRequired, + params: PropTypes.shape({ + acct: PropTypes.string, + id: PropTypes.string, + }).isRequired, + accountId: PropTypes.string, dispatch: PropTypes.func.isRequired, attachments: ImmutablePropTypes.list.isRequired, isLoading: PropTypes.bool, @@ -68,15 +82,30 @@ class AccountGallery extends ImmutablePureComponent { width: 323, }; - componentDidMount () { - this.props.dispatch(fetchAccount(this.props.params.accountId)); - this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId)); + _load () { + const { accountId, isAccount, dispatch } = this.props; + + if (!isAccount) dispatch(fetchAccount(accountId)); + dispatch(expandAccountMediaTimeline(accountId)); } - componentWillReceiveProps (nextProps) { - if (nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) { - this.props.dispatch(fetchAccount(nextProps.params.accountId)); - this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId)); + componentDidMount () { + const { params: { acct }, accountId, dispatch } = this.props; + + if (accountId) { + this._load(); + } else { + dispatch(lookupAccount(acct)); + } + } + + componentDidUpdate (prevProps) { + const { params: { acct }, accountId, dispatch } = this.props; + + if (prevProps.accountId !== accountId && accountId) { + this._load(); + } else if (prevProps.params.acct !== acct) { + dispatch(lookupAccount(acct)); } } @@ -96,7 +125,7 @@ class AccountGallery extends ImmutablePureComponent { } handleLoadMore = maxId => { - this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId, { maxId })); + this.props.dispatch(expandAccountMediaTimeline(this.props.accountId, { maxId })); }; handleLoadOlder = e => { @@ -127,7 +156,7 @@ class AccountGallery extends ImmutablePureComponent { } render () { - const { attachments, shouldUpdateScroll, isLoading, hasMore, isAccount, multiColumn, blockedBy, suspended } = this.props; + const { attachments, isLoading, hasMore, isAccount, multiColumn, blockedBy, suspended } = this.props; const { width } = this.state; if (!isAccount) { @@ -164,9 +193,9 @@ class AccountGallery extends ImmutablePureComponent { - +
    - + {(suspended || blockedBy) ? (
    diff --git a/app/javascript/mastodon/features/account_timeline/components/header.js b/app/javascript/mastodon/features/account_timeline/components/header.js index 6b52defe4..17b693600 100644 --- a/app/javascript/mastodon/features/account_timeline/components/header.js +++ b/app/javascript/mastodon/features/account_timeline/components/header.js @@ -123,9 +123,9 @@ export default class Header extends ImmutablePureComponent { {!hideTabs && (
    - - - + + +
    )}
    diff --git a/app/javascript/mastodon/features/account_timeline/components/moved_note.js b/app/javascript/mastodon/features/account_timeline/components/moved_note.js index 3e090bb5f..2e32d660f 100644 --- a/app/javascript/mastodon/features/account_timeline/components/moved_note.js +++ b/app/javascript/mastodon/features/account_timeline/components/moved_note.js @@ -21,7 +21,7 @@ export default class MovedNote extends ImmutablePureComponent { handleAccountClick = e => { if (e.button === 0) { e.preventDefault(); - this.context.router.history.push(`/accounts/${this.props.to.get('id')}`); + this.context.router.history.push(`/@${this.props.to.get('acct')}`); } e.stopPropagation(); diff --git a/app/javascript/mastodon/features/account_timeline/index.js b/app/javascript/mastodon/features/account_timeline/index.js index fa4239d6f..20f1dba9f 100644 --- a/app/javascript/mastodon/features/account_timeline/index.js +++ b/app/javascript/mastodon/features/account_timeline/index.js @@ -2,7 +2,7 @@ import React from 'react'; import { connect } from 'react-redux'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; -import { fetchAccount } from '../../actions/accounts'; +import { lookupAccount, fetchAccount } from '../../actions/accounts'; import { expandAccountFeaturedTimeline, expandAccountTimeline } from '../../actions/timelines'; import StatusList from '../../components/status_list'; import LoadingIndicator from '../../components/loading_indicator'; @@ -20,10 +20,19 @@ import { connectTimeline, disconnectTimeline } from 'mastodon/actions/timelines' const emptyList = ImmutableList(); -const mapStateToProps = (state, { params: { accountId }, withReplies = false }) => { +const mapStateToProps = (state, { params: { acct, id }, withReplies = false }) => { + const accountId = id || state.getIn(['accounts_map', acct]); + + if (!accountId) { + return { + isLoading: true, + }; + } + const path = withReplies ? `${accountId}:with_replies` : accountId; return { + accountId, remote: !!(state.getIn(['accounts', accountId, 'acct']) !== state.getIn(['accounts', accountId, 'username'])), remoteUrl: state.getIn(['accounts', accountId, 'url']), isAccount: !!state.getIn(['accounts', accountId]), @@ -48,9 +57,12 @@ export default @connect(mapStateToProps) class AccountTimeline extends ImmutablePureComponent { static propTypes = { - params: PropTypes.object.isRequired, + params: PropTypes.shape({ + acct: PropTypes.string, + id: PropTypes.string, + }).isRequired, + accountId: PropTypes.string, dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, statusIds: ImmutablePropTypes.list, featuredStatusIds: ImmutablePropTypes.list, isLoading: PropTypes.bool, @@ -64,8 +76,8 @@ class AccountTimeline extends ImmutablePureComponent { multiColumn: PropTypes.bool, }; - componentWillMount () { - const { params: { accountId }, withReplies, dispatch } = this.props; + _load () { + const { accountId, withReplies, dispatch } = this.props; dispatch(fetchAccount(accountId)); dispatch(fetchAccountIdentityProofs(accountId)); @@ -81,29 +93,32 @@ class AccountTimeline extends ImmutablePureComponent { } } - componentWillReceiveProps (nextProps) { - const { dispatch } = this.props; + componentDidMount () { + const { params: { acct }, accountId, dispatch } = this.props; - if ((nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) || nextProps.withReplies !== this.props.withReplies) { - dispatch(fetchAccount(nextProps.params.accountId)); - dispatch(fetchAccountIdentityProofs(nextProps.params.accountId)); + if (accountId) { + this._load(); + } else { + dispatch(lookupAccount(acct)); + } + } - if (!nextProps.withReplies) { - dispatch(expandAccountFeaturedTimeline(nextProps.params.accountId)); - } + componentDidUpdate (prevProps) { + const { params: { acct }, accountId, dispatch } = this.props; - dispatch(expandAccountTimeline(nextProps.params.accountId, { withReplies: nextProps.params.withReplies })); + if (prevProps.accountId !== accountId && accountId) { + this._load(); + } else if (prevProps.params.acct !== acct) { + dispatch(lookupAccount(acct)); } - if (nextProps.params.accountId === me && this.props.params.accountId !== me) { - dispatch(connectTimeline(`account:${me}`)); - } else if (this.props.params.accountId === me && nextProps.params.accountId !== me) { + if (prevProps.accountId === me && accountId !== me) { dispatch(disconnectTimeline(`account:${me}`)); } } componentWillUnmount () { - const { dispatch, params: { accountId } } = this.props; + const { dispatch, accountId } = this.props; if (accountId === me) { dispatch(disconnectTimeline(`account:${me}`)); @@ -111,11 +126,11 @@ class AccountTimeline extends ImmutablePureComponent { } handleLoadMore = maxId => { - this.props.dispatch(expandAccountTimeline(this.props.params.accountId, { maxId, withReplies: this.props.withReplies })); + this.props.dispatch(expandAccountTimeline(this.props.accountId, { maxId, withReplies: this.props.withReplies })); } render () { - const { shouldUpdateScroll, statusIds, featuredStatusIds, isLoading, hasMore, blockedBy, suspended, isAccount, multiColumn, remote, remoteUrl } = this.props; + const { statusIds, featuredStatusIds, isLoading, hasMore, blockedBy, suspended, isAccount, multiColumn, remote, remoteUrl } = this.props; if (!isAccount) { return ( @@ -153,7 +168,7 @@ class AccountTimeline extends ImmutablePureComponent { } + prepend={} alwaysPrepend append={remoteMessage} scrollKey='account_timeline' @@ -162,7 +177,6 @@ class AccountTimeline extends ImmutablePureComponent { isLoading={isLoading} hasMore={hasMore} onLoadMore={this.handleLoadMore} - shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} bindToDocument={!multiColumn} timelineId='account' diff --git a/app/javascript/mastodon/features/blocks/index.js b/app/javascript/mastodon/features/blocks/index.js index 107deb841..7ec177434 100644 --- a/app/javascript/mastodon/features/blocks/index.js +++ b/app/javascript/mastodon/features/blocks/index.js @@ -29,7 +29,6 @@ class Blocks extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, accountIds: ImmutablePropTypes.list, hasMore: PropTypes.bool, isLoading: PropTypes.bool, @@ -46,7 +45,7 @@ class Blocks extends ImmutablePureComponent { }, 300, { leading: true }); render () { - const { intl, accountIds, shouldUpdateScroll, hasMore, multiColumn, isLoading } = this.props; + const { intl, accountIds, hasMore, multiColumn, isLoading } = this.props; if (!accountIds) { return ( @@ -66,7 +65,6 @@ class Blocks extends ImmutablePureComponent { onLoadMore={this.handleLoadMore} hasMore={hasMore} isLoading={isLoading} - shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} bindToDocument={!multiColumn} > diff --git a/app/javascript/mastodon/features/bookmarked_statuses/index.js b/app/javascript/mastodon/features/bookmarked_statuses/index.js index c37cb9176..cf067d954 100644 --- a/app/javascript/mastodon/features/bookmarked_statuses/index.js +++ b/app/javascript/mastodon/features/bookmarked_statuses/index.js @@ -27,7 +27,6 @@ class Bookmarks extends ImmutablePureComponent { static propTypes = { dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, statusIds: ImmutablePropTypes.list.isRequired, intl: PropTypes.object.isRequired, columnId: PropTypes.string, @@ -68,7 +67,7 @@ class Bookmarks extends ImmutablePureComponent { }, 300, { leading: true }) render () { - const { intl, shouldUpdateScroll, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props; + const { intl, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props; const pinned = !!columnId; const emptyMessage = ; @@ -93,7 +92,6 @@ class Bookmarks extends ImmutablePureComponent { hasMore={hasMore} isLoading={isLoading} onLoadMore={this.handleLoadMore} - shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} bindToDocument={!multiColumn} /> diff --git a/app/javascript/mastodon/features/community_timeline/index.js b/app/javascript/mastodon/features/community_timeline/index.js index b3cd39685..30f776048 100644 --- a/app/javascript/mastodon/features/community_timeline/index.js +++ b/app/javascript/mastodon/features/community_timeline/index.js @@ -41,7 +41,6 @@ class CommunityTimeline extends React.PureComponent { static propTypes = { dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, columnId: PropTypes.string, intl: PropTypes.object.isRequired, hasUnread: PropTypes.bool, @@ -103,7 +102,7 @@ class CommunityTimeline extends React.PureComponent { } render () { - const { intl, shouldUpdateScroll, hasUnread, columnId, multiColumn, onlyMedia } = this.props; + const { intl, hasUnread, columnId, multiColumn, onlyMedia } = this.props; const pinned = !!columnId; return ( @@ -127,7 +126,6 @@ class CommunityTimeline extends React.PureComponent { timelineId={`community${onlyMedia ? ':media' : ''}`} onLoadMore={this.handleLoadMore} emptyMessage={} - shouldUpdateScroll={shouldUpdateScroll} bindToDocument={!multiColumn} /> diff --git a/app/javascript/mastodon/features/compose/components/navigation_bar.js b/app/javascript/mastodon/features/compose/components/navigation_bar.js index 226e9fe79..fe2952031 100644 --- a/app/javascript/mastodon/features/compose/components/navigation_bar.js +++ b/app/javascript/mastodon/features/compose/components/navigation_bar.js @@ -21,7 +21,7 @@ export default class NavigationBar extends ImmutablePureComponent {
    {this.props.account.get('acct')} @{this.props.account.get('acct')} diff --git a/app/javascript/mastodon/features/compose/components/reply_indicator.js b/app/javascript/mastodon/features/compose/components/reply_indicator.js index f62dc8ffa..e7b2c0ad1 100644 --- a/app/javascript/mastodon/features/compose/components/reply_indicator.js +++ b/app/javascript/mastodon/features/compose/components/reply_indicator.js @@ -32,7 +32,7 @@ class ReplyIndicator extends ImmutablePureComponent { handleAccountClick = (e) => { if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { e.preventDefault(); - this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`); + this.context.router.history.push(`/@${this.props.status.getIn(['account', 'acct'])}`); } } diff --git a/app/javascript/mastodon/features/compose/components/search_results.js b/app/javascript/mastodon/features/compose/components/search_results.js index 958a65286..9b3d01cfd 100644 --- a/app/javascript/mastodon/features/compose/components/search_results.js +++ b/app/javascript/mastodon/features/compose/components/search_results.js @@ -5,7 +5,7 @@ import { FormattedMessage, defineMessages, injectIntl } from 'react-intl'; import AccountContainer from '../../../containers/account_container'; import StatusContainer from '../../../containers/status_container'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import Hashtag from '../../../components/hashtag'; +import { ImmutableHashtag as Hashtag } from '../../../components/hashtag'; import Icon from 'mastodon/components/icon'; import { searchEnabled } from '../../../initial_state'; import LoadMore from 'mastodon/components/load_more'; diff --git a/app/javascript/mastodon/features/compose/containers/navigation_container.js b/app/javascript/mastodon/features/compose/containers/navigation_container.js index 8606a642e..654c14df9 100644 --- a/app/javascript/mastodon/features/compose/containers/navigation_container.js +++ b/app/javascript/mastodon/features/compose/containers/navigation_container.js @@ -21,6 +21,7 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ dispatch(openModal('CONFIRM', { message: intl.formatMessage(messages.logoutMessage), confirm: intl.formatMessage(messages.logoutConfirm), + closeWhenConfirm: false, onConfirm: () => logOut(), })); }, diff --git a/app/javascript/mastodon/features/compose/containers/upload_container.js b/app/javascript/mastodon/features/compose/containers/upload_container.js index 342b0c2a9..05cd2ecc1 100644 --- a/app/javascript/mastodon/features/compose/containers/upload_container.js +++ b/app/javascript/mastodon/features/compose/containers/upload_container.js @@ -1,7 +1,6 @@ import { connect } from 'react-redux'; import Upload from '../components/upload'; -import { undoUploadCompose } from '../../../actions/compose'; -import { openModal } from '../../../actions/modal'; +import { undoUploadCompose, initMediaEditModal } from '../../../actions/compose'; import { submitCompose } from '../../../actions/compose'; const mapStateToProps = (state, { id }) => ({ @@ -15,7 +14,7 @@ const mapDispatchToProps = dispatch => ({ }, onOpenFocalPoint: id => { - dispatch(openModal('FOCAL_POINT', { id })); + dispatch(initMediaEditModal(id)); }, onSubmit (router) { diff --git a/app/javascript/mastodon/features/compose/index.js b/app/javascript/mastodon/features/compose/index.js index 35074cf19..4d31c5931 100644 --- a/app/javascript/mastodon/features/compose/index.js +++ b/app/javascript/mastodon/features/compose/index.js @@ -4,13 +4,14 @@ import NavigationContainer from './containers/navigation_container'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; -import { changeComposing, mountCompose, unmountCompose } from '../../actions/compose'; +import { mountCompose, unmountCompose } from '../../actions/compose'; import { Link } from 'react-router-dom'; -import { defineMessages, injectIntl } from 'react-intl'; +import { injectIntl, defineMessages } from 'react-intl'; import SearchContainer from './containers/search_container'; import Motion from '../ui/util/optional_motion'; import spring from 'react-motion/lib/spring'; import SearchResultsContainer from './containers/search_results_container'; +import { changeComposing } from '../../actions/compose'; import { openModal } from 'mastodon/actions/modal'; import cipherblissLogo from '../../../images/logo_cipherbliss.png'; import { mascot } from '../../initial_state'; @@ -48,7 +49,7 @@ class Compose extends React.PureComponent { intl : PropTypes.object.isRequired, }; - componentDidMount() { + componentDidMount () { const { isSearchPage } = this.props; if (!isSearchPage) { @@ -56,7 +57,7 @@ class Compose extends React.PureComponent { } } - componentWillUnmount() { + componentWillUnmount () { const { isSearchPage } = this.props; if (!isSearchPage) { @@ -71,23 +72,24 @@ class Compose extends React.PureComponent { e.stopPropagation(); dispatch(openModal('CONFIRM', { - message : intl.formatMessage(messages.logoutMessage), - confirm : intl.formatMessage(messages.logoutConfirm), + message: intl.formatMessage(messages.logoutMessage), + confirm: intl.formatMessage(messages.logoutConfirm), + closeWhenConfirm: false, onConfirm: () => logOut(), })); return false; - }; + } onFocus = () => { this.props.dispatch(changeComposing(true)); - }; + } onBlur = () => { this.props.dispatch(changeComposing(false)); - }; + } - render() { + render () { const { multiColumn, showSearch, isSearchPage, intl } = this.props; let header = ''; @@ -96,97 +98,33 @@ class Compose extends React.PureComponent { const { columns } = this.props; header = ( + + + ); } return ( -
    +
    {header} - {(multiColumn || isSearchPage) && } + {(multiColumn || isSearchPage) && }
    - {!isSearchPage &&
    + {!isSearchPage &&
    @@ -201,21 +139,15 @@ class Compose extends React.PureComponent {
    } - + {({ x }) => ( -
    +
    -
    +
    )} -
    -
    -
    + +
    +
    ); } diff --git a/app/javascript/mastodon/features/direct_timeline/components/conversation.js b/app/javascript/mastodon/features/direct_timeline/components/conversation.js index 43e1d77b9..77ff2ce7b 100644 --- a/app/javascript/mastodon/features/direct_timeline/components/conversation.js +++ b/app/javascript/mastodon/features/direct_timeline/components/conversation.js @@ -81,7 +81,7 @@ class Conversation extends ImmutablePureComponent { markRead(); } - this.context.router.history.push(`/statuses/${lastStatus.get('id')}`); + this.context.router.history.push(`/@${lastStatus.getIn(['account', 'acct'])}/${lastStatus.get('id')}`); } handleMarkAsRead = () => { @@ -133,7 +133,7 @@ class Conversation extends ImmutablePureComponent { menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDelete }); - const names = accounts.map(a => ).reduce((prev, cur) => [prev, ', ', cur]); + const names = accounts.map(a => ).reduce((prev, cur) => [prev, ', ', cur]); const handlers = { reply: this.handleReply, diff --git a/app/javascript/mastodon/features/direct_timeline/components/conversations_list.js b/app/javascript/mastodon/features/direct_timeline/components/conversations_list.js index 4ee8e5212..fd1df7256 100644 --- a/app/javascript/mastodon/features/direct_timeline/components/conversations_list.js +++ b/app/javascript/mastodon/features/direct_timeline/components/conversations_list.js @@ -14,7 +14,6 @@ export default class ConversationsList extends ImmutablePureComponent { hasMore: PropTypes.bool, isLoading: PropTypes.bool, onLoadMore: PropTypes.func, - shouldUpdateScroll: PropTypes.func, }; getCurrentIndex = id => this.props.conversations.findIndex(x => x.get('id') === id) diff --git a/app/javascript/mastodon/features/direct_timeline/index.js b/app/javascript/mastodon/features/direct_timeline/index.js index 5ce795760..68523666c 100644 --- a/app/javascript/mastodon/features/direct_timeline/index.js +++ b/app/javascript/mastodon/features/direct_timeline/index.js @@ -19,7 +19,6 @@ class DirectTimeline extends React.PureComponent { static propTypes = { dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, columnId: PropTypes.string, intl: PropTypes.object.isRequired, hasUnread: PropTypes.bool, @@ -71,7 +70,7 @@ class DirectTimeline extends React.PureComponent { } render () { - const { intl, hasUnread, columnId, multiColumn, shouldUpdateScroll } = this.props; + const { intl, hasUnread, columnId, multiColumn } = this.props; const pinned = !!columnId; return ( @@ -93,7 +92,6 @@ class DirectTimeline extends React.PureComponent { timelineId='direct' onLoadMore={this.handleLoadMore} emptyMessage={} - shouldUpdateScroll={shouldUpdateScroll} /> ); diff --git a/app/javascript/mastodon/features/directory/components/account_card.js b/app/javascript/mastodon/features/directory/components/account_card.js index 1f0f174eb..30fb640c4 100644 --- a/app/javascript/mastodon/features/directory/components/account_card.js +++ b/app/javascript/mastodon/features/directory/components/account_card.js @@ -208,20 +208,15 @@ class AccountCard extends ImmutablePureComponent { />
    -
    -
    -
    - - - - +
    + + + +
    {buttons} @@ -276,8 +271,6 @@ class AccountCard extends ImmutablePureComponent {
    -
    -
    ); } diff --git a/app/javascript/mastodon/features/directory/index.js b/app/javascript/mastodon/features/directory/index.js index 2f91e759b..88f20d330 100644 --- a/app/javascript/mastodon/features/directory/index.js +++ b/app/javascript/mastodon/features/directory/index.js @@ -12,7 +12,7 @@ import AccountCard from './components/account_card'; import RadioButton from 'mastodon/components/radio_button'; import classNames from 'classnames'; import LoadMore from 'mastodon/components/load_more'; -import { ScrollContainer } from 'react-router-scroll-4'; +import ScrollContainer from 'mastodon/containers/scroll_container'; const messages = defineMessages({ title: { id: 'column.directory', defaultMessage: 'Browse profiles' }, @@ -40,7 +40,6 @@ class Directory extends React.PureComponent { isLoading: PropTypes.bool, accountIds: ImmutablePropTypes.list.isRequired, dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, columnId: PropTypes.string, intl: PropTypes.object.isRequired, multiColumn: PropTypes.bool, @@ -125,7 +124,7 @@ class Directory extends React.PureComponent { } render () { - const { isLoading, accountIds, intl, columnId, multiColumn, domain, shouldUpdateScroll } = this.props; + const { isLoading, accountIds, intl, columnId, multiColumn, domain } = this.props; const { order, local } = this.getParams(this.props, this.state); const pinned = !!columnId; @@ -163,7 +162,7 @@ class Directory extends React.PureComponent { multiColumn={multiColumn} /> - {multiColumn && !pinned ? {scrollableArea} : scrollableArea} + {multiColumn && !pinned ? {scrollableArea} : scrollableArea} ); } diff --git a/app/javascript/mastodon/features/domain_blocks/index.js b/app/javascript/mastodon/features/domain_blocks/index.js index e5cfd9ddb..7bcadbee9 100644 --- a/app/javascript/mastodon/features/domain_blocks/index.js +++ b/app/javascript/mastodon/features/domain_blocks/index.js @@ -29,7 +29,6 @@ class Blocks extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, hasMore: PropTypes.bool, domains: ImmutablePropTypes.orderedSet, intl: PropTypes.object.isRequired, @@ -45,7 +44,7 @@ class Blocks extends ImmutablePureComponent { }, 300, { leading: true }); render () { - const { intl, domains, shouldUpdateScroll, hasMore, multiColumn } = this.props; + const { intl, domains, hasMore, multiColumn } = this.props; if (!domains) { return ( @@ -67,7 +66,6 @@ class Blocks extends ImmutablePureComponent { scrollKey='domain_blocks' onLoadMore={this.handleLoadMore} hasMore={hasMore} - shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} bindToDocument={!multiColumn} > diff --git a/app/javascript/mastodon/features/emoji/emoji_map.json b/app/javascript/mastodon/features/emoji/emoji_map.json index d54ef154a..121fea2a5 100644 --- a/app/javascript/mastodon/features/emoji/emoji_map.json +++ b/app/javascript/mastodon/features/emoji/emoji_map.json @@ -1 +1 @@ -{"😀":"1f600","😃":"1f603","😄":"1f604","😁":"1f601","😆":"1f606","😅":"1f605","🤣":"1f923","😂":"1f602","🙂":"1f642","🙃":"1f643","😉":"1f609","😊":"1f60a","😇":"1f607","🥰":"1f970","😍":"1f60d","🤩":"1f929","😘":"1f618","😗":"1f617","☺":"263a","😚":"1f61a","😙":"1f619","😋":"1f60b","😛":"1f61b","😜":"1f61c","🤪":"1f92a","😝":"1f61d","🤑":"1f911","🤗":"1f917","🤭":"1f92d","🤫":"1f92b","🤔":"1f914","🤐":"1f910","🤨":"1f928","😐":"1f610","😑":"1f611","😶":"1f636","😏":"1f60f","😒":"1f612","🙄":"1f644","😬":"1f62c","🤥":"1f925","😌":"1f60c","😔":"1f614","😪":"1f62a","🤤":"1f924","😴":"1f634","😷":"1f637","🤒":"1f912","🤕":"1f915","🤢":"1f922","🤮":"1f92e","🤧":"1f927","🥵":"1f975","🥶":"1f976","🥴":"1f974","😵":"1f635","🤯":"1f92f","🤠":"1f920","🥳":"1f973","😎":"1f60e","🤓":"1f913","🧐":"1f9d0","😕":"1f615","😟":"1f61f","🙁":"1f641","☹":"2639","😮":"1f62e","😯":"1f62f","😲":"1f632","😳":"1f633","🥺":"1f97a","😦":"1f626","😧":"1f627","😨":"1f628","😰":"1f630","😥":"1f625","😢":"1f622","😭":"1f62d","😱":"1f631","😖":"1f616","😣":"1f623","😞":"1f61e","😓":"1f613","😩":"1f629","😫":"1f62b","🥱":"1f971","😤":"1f624","😡":"1f621","😠":"1f620","🤬":"1f92c","😈":"1f608","👿":"1f47f","💀":"1f480","☠":"2620","💩":"1f4a9","🤡":"1f921","👹":"1f479","👺":"1f47a","👻":"1f47b","👽":"1f47d","👾":"1f47e","🤖":"1f916","😺":"1f63a","😸":"1f638","😹":"1f639","😻":"1f63b","😼":"1f63c","😽":"1f63d","🙀":"1f640","😿":"1f63f","😾":"1f63e","🙈":"1f648","🙉":"1f649","🙊":"1f64a","💋":"1f48b","💌":"1f48c","💘":"1f498","💝":"1f49d","💖":"1f496","💗":"1f497","💓":"1f493","💞":"1f49e","💕":"1f495","💟":"1f49f","❣":"2763","💔":"1f494","❤":"2764","🧡":"1f9e1","💛":"1f49b","💚":"1f49a","💙":"1f499","💜":"1f49c","🤎":"1f90e","🖤":"1f5a4","🤍":"1f90d","💯":"1f4af","💢":"1f4a2","💥":"1f4a5","💫":"1f4ab","💦":"1f4a6","💨":"1f4a8","🕳":"1f573","💣":"1f4a3","💬":"1f4ac","🗨":"1f5e8","🗯":"1f5ef","💭":"1f4ad","💤":"1f4a4","👋":"1f44b","🤚":"1f91a","🖐":"1f590","✋":"270b","🖖":"1f596","👌":"1f44c","🤏":"1f90f","✌":"270c","🤞":"1f91e","🤟":"1f91f","🤘":"1f918","🤙":"1f919","👈":"1f448","👉":"1f449","👆":"1f446","🖕":"1f595","👇":"1f447","☝":"261d","👍":"1f44d","👎":"1f44e","✊":"270a","👊":"1f44a","🤛":"1f91b","🤜":"1f91c","👏":"1f44f","🙌":"1f64c","👐":"1f450","🤲":"1f932","🤝":"1f91d","🙏":"1f64f","✍":"270d","💅":"1f485","🤳":"1f933","💪":"1f4aa","🦾":"1f9be","🦿":"1f9bf","🦵":"1f9b5","🦶":"1f9b6","👂":"1f442","🦻":"1f9bb","👃":"1f443","🧠":"1f9e0","🦷":"1f9b7","🦴":"1f9b4","👀":"1f440","👁":"1f441","👅":"1f445","👄":"1f444","👶":"1f476","🧒":"1f9d2","👦":"1f466","👧":"1f467","🧑":"1f9d1","👱":"1f471","👨":"1f468","🧔":"1f9d4","👩":"1f469","🧓":"1f9d3","👴":"1f474","👵":"1f475","🙍":"1f64d","🙎":"1f64e","🙅":"1f645","🙆":"1f646","💁":"1f481","🙋":"1f64b","🧏":"1f9cf","🙇":"1f647","🤦":"1f926","🤷":"1f937","👮":"1f46e","🕵":"1f575","💂":"1f482","👷":"1f477","🤴":"1f934","👸":"1f478","👳":"1f473","👲":"1f472","🧕":"1f9d5","🤵":"1f935","👰":"1f470","🤰":"1f930","🤱":"1f931","👼":"1f47c","🎅":"1f385","🤶":"1f936","🦸":"1f9b8","🦹":"1f9b9","🧙":"1f9d9","🧚":"1f9da","🧛":"1f9db","🧜":"1f9dc","🧝":"1f9dd","🧞":"1f9de","🧟":"1f9df","💆":"1f486","💇":"1f487","🚶":"1f6b6","🧍":"1f9cd","🧎":"1f9ce","🏃":"1f3c3","💃":"1f483","🕺":"1f57a","🕴":"1f574","👯":"1f46f","🧖":"1f9d6","🧗":"1f9d7","🤺":"1f93a","🏇":"1f3c7","⛷":"26f7","🏂":"1f3c2","🏌":"1f3cc","🏄":"1f3c4","🚣":"1f6a3","🏊":"1f3ca","⛹":"26f9","🏋":"1f3cb","🚴":"1f6b4","🚵":"1f6b5","🤸":"1f938","🤼":"1f93c","🤽":"1f93d","🤾":"1f93e","🤹":"1f939","🧘":"1f9d8","🛀":"1f6c0","🛌":"1f6cc","👭":"1f46d","👫":"1f46b","👬":"1f46c","💏":"1f48f","💑":"1f491","👪":"1f46a","🗣":"1f5e3","👤":"1f464","👥":"1f465","👣":"1f463","🏻":"1f463","🏼":"1f463","🏽":"1f463","🏾":"1f463","🏿":"1f463","🦰":"1f463","🦱":"1f463","🦳":"1f463","🦲":"1f463","🐵":"1f435","🐒":"1f412","🦍":"1f98d","🦧":"1f9a7","🐶":"1f436","🐕":"1f415","🦮":"1f9ae","🐩":"1f429","🐺":"1f43a","🦊":"1f98a","🦝":"1f99d","🐱":"1f431","🐈":"1f408","🦁":"1f981","🐯":"1f42f","🐅":"1f405","🐆":"1f406","🐴":"1f434","🐎":"1f40e","🦄":"1f984","🦓":"1f993","🦌":"1f98c","🐮":"1f42e","🐂":"1f402","🐃":"1f403","🐄":"1f404","🐷":"1f437","🐖":"1f416","🐗":"1f417","🐽":"1f43d","🐏":"1f40f","🐑":"1f411","🐐":"1f410","🐪":"1f42a","🐫":"1f42b","🦙":"1f999","🦒":"1f992","🐘":"1f418","🦏":"1f98f","🦛":"1f99b","🐭":"1f42d","🐁":"1f401","🐀":"1f400","🐹":"1f439","🐰":"1f430","🐇":"1f407","🐿":"1f43f","🦔":"1f994","🦇":"1f987","🐻":"1f43b","🐨":"1f428","🐼":"1f43c","🦥":"1f9a5","🦦":"1f9a6","🦨":"1f9a8","🦘":"1f998","🦡":"1f9a1","🐾":"1f43e","🦃":"1f983","🐔":"1f414","🐓":"1f413","🐣":"1f423","🐤":"1f424","🐥":"1f425","🐦":"1f426","🐧":"1f427","🕊":"1f54a","🦅":"1f985","🦆":"1f986","🦢":"1f9a2","🦉":"1f989","🦩":"1f9a9","🦚":"1f99a","🦜":"1f99c","🐸":"1f438","🐊":"1f40a","🐢":"1f422","🦎":"1f98e","🐍":"1f40d","🐲":"1f432","🐉":"1f409","🦕":"1f995","🦖":"1f996","🐳":"1f433","🐋":"1f40b","🐬":"1f42c","🐟":"1f41f","🐠":"1f420","🐡":"1f421","🦈":"1f988","🐙":"1f419","🐚":"1f41a","🐌":"1f40c","🦋":"1f98b","🐛":"1f41b","🐜":"1f41c","🐝":"1f41d","🐞":"1f41e","🦗":"1f997","🕷":"1f577","🕸":"1f578","🦂":"1f982","🦟":"1f99f","🦠":"1f9a0","💐":"1f490","🌸":"1f338","💮":"1f4ae","🏵":"1f3f5","🌹":"1f339","🥀":"1f940","🌺":"1f33a","🌻":"1f33b","🌼":"1f33c","🌷":"1f337","🌱":"1f331","🌲":"1f332","🌳":"1f333","🌴":"1f334","🌵":"1f335","🌾":"1f33e","🌿":"1f33f","☘":"2618","🍀":"1f340","🍁":"1f341","🍂":"1f342","🍃":"1f343","🍇":"1f347","🍈":"1f348","🍉":"1f349","🍊":"1f34a","🍋":"1f34b","🍌":"1f34c","🍍":"1f34d","🥭":"1f96d","🍎":"1f34e","🍏":"1f34f","🍐":"1f350","🍑":"1f351","🍒":"1f352","🍓":"1f353","🥝":"1f95d","🍅":"1f345","🥥":"1f965","🥑":"1f951","🍆":"1f346","🥔":"1f954","🥕":"1f955","🌽":"1f33d","🌶":"1f336","🥒":"1f952","🥬":"1f96c","🥦":"1f966","🧄":"1f9c4","🧅":"1f9c5","🍄":"1f344","🥜":"1f95c","🌰":"1f330","🍞":"1f35e","🥐":"1f950","🥖":"1f956","🥨":"1f968","🥯":"1f96f","🥞":"1f95e","🧇":"1f9c7","🧀":"1f9c0","🍖":"1f356","🍗":"1f357","🥩":"1f969","🥓":"1f953","🍔":"1f354","🍟":"1f35f","🍕":"1f355","🌭":"1f32d","🥪":"1f96a","🌮":"1f32e","🌯":"1f32f","🥙":"1f959","🧆":"1f9c6","🥚":"1f95a","🍳":"1f373","🥘":"1f958","🍲":"1f372","🥣":"1f963","🥗":"1f957","🍿":"1f37f","🧈":"1f9c8","🧂":"1f9c2","🥫":"1f96b","🍱":"1f371","🍘":"1f358","🍙":"1f359","🍚":"1f35a","🍛":"1f35b","🍜":"1f35c","🍝":"1f35d","🍠":"1f360","🍢":"1f362","🍣":"1f363","🍤":"1f364","🍥":"1f365","🥮":"1f96e","🍡":"1f361","🥟":"1f95f","🥠":"1f960","🥡":"1f961","🦀":"1f980","🦞":"1f99e","🦐":"1f990","🦑":"1f991","🦪":"1f9aa","🍦":"1f366","🍧":"1f367","🍨":"1f368","🍩":"1f369","🍪":"1f36a","🎂":"1f382","🍰":"1f370","🧁":"1f9c1","🥧":"1f967","🍫":"1f36b","🍬":"1f36c","🍭":"1f36d","🍮":"1f36e","🍯":"1f36f","🍼":"1f37c","🥛":"1f95b","☕":"2615","🍵":"1f375","🍶":"1f376","🍾":"1f37e","🍷":"1f377","🍸":"1f378","🍹":"1f379","🍺":"1f37a","🍻":"1f37b","🥂":"1f942","🥃":"1f943","🥤":"1f964","🧃":"1f9c3","🧉":"1f9c9","🧊":"1f9ca","🥢":"1f962","🍽":"1f37d","🍴":"1f374","🥄":"1f944","🔪":"1f52a","🏺":"1f3fa","🌍":"1f30d","🌎":"1f30e","🌏":"1f30f","🌐":"1f310","🗺":"1f5fa","🗾":"1f5fe","🧭":"1f9ed","🏔":"1f3d4","⛰":"26f0","🌋":"1f30b","🗻":"1f5fb","🏕":"1f3d5","🏖":"1f3d6","🏜":"1f3dc","🏝":"1f3dd","🏞":"1f3de","🏟":"1f3df","🏛":"1f3db","🏗":"1f3d7","🧱":"1f9f1","🏘":"1f3d8","🏚":"1f3da","🏠":"1f3e0","🏡":"1f3e1","🏢":"1f3e2","🏣":"1f3e3","🏤":"1f3e4","🏥":"1f3e5","🏦":"1f3e6","🏨":"1f3e8","🏩":"1f3e9","🏪":"1f3ea","🏫":"1f3eb","🏬":"1f3ec","🏭":"1f3ed","🏯":"1f3ef","🏰":"1f3f0","💒":"1f492","🗼":"1f5fc","🗽":"1f5fd","⛪":"26ea","🕌":"1f54c","🛕":"1f6d5","🕍":"1f54d","⛩":"26e9","🕋":"1f54b","⛲":"26f2","⛺":"26fa","🌁":"1f301","🌃":"1f303","🏙":"1f3d9","🌄":"1f304","🌅":"1f305","🌆":"1f306","🌇":"1f307","🌉":"1f309","♨":"2668","🎠":"1f3a0","🎡":"1f3a1","🎢":"1f3a2","💈":"1f488","🎪":"1f3aa","🚂":"1f682","🚃":"1f683","🚄":"1f684","🚅":"1f685","🚆":"1f686","🚇":"1f687","🚈":"1f688","🚉":"1f689","🚊":"1f68a","🚝":"1f69d","🚞":"1f69e","🚋":"1f68b","🚌":"1f68c","🚍":"1f68d","🚎":"1f68e","🚐":"1f690","🚑":"1f691","🚒":"1f692","🚓":"1f693","🚔":"1f694","🚕":"1f695","🚖":"1f696","🚗":"1f697","🚘":"1f698","🚙":"1f699","🚚":"1f69a","🚛":"1f69b","🚜":"1f69c","🏎":"1f3ce","🏍":"1f3cd","🛵":"1f6f5","🦽":"1f9bd","🦼":"1f9bc","🛺":"1f6fa","🚲":"1f6b2","🛴":"1f6f4","🛹":"1f6f9","🚏":"1f68f","🛣":"1f6e3","🛤":"1f6e4","🛢":"1f6e2","⛽":"26fd","🚨":"1f6a8","🚥":"1f6a5","🚦":"1f6a6","🛑":"1f6d1","🚧":"1f6a7","⚓":"2693","⛵":"26f5","🛶":"1f6f6","🚤":"1f6a4","🛳":"1f6f3","⛴":"26f4","🛥":"1f6e5","🚢":"1f6a2","✈":"2708","🛩":"1f6e9","🛫":"1f6eb","🛬":"1f6ec","🪂":"1fa82","💺":"1f4ba","🚁":"1f681","🚟":"1f69f","🚠":"1f6a0","🚡":"1f6a1","🛰":"1f6f0","🚀":"1f680","🛸":"1f6f8","🛎":"1f6ce","🧳":"1f9f3","⌛":"231b","⏳":"23f3","⌚":"231a","⏰":"23f0","⏱":"23f1","⏲":"23f2","🕰":"1f570","🕛":"1f55b","🕧":"1f567","🕐":"1f550","🕜":"1f55c","🕑":"1f551","🕝":"1f55d","🕒":"1f552","🕞":"1f55e","🕓":"1f553","🕟":"1f55f","🕔":"1f554","🕠":"1f560","🕕":"1f555","🕡":"1f561","🕖":"1f556","🕢":"1f562","🕗":"1f557","🕣":"1f563","🕘":"1f558","🕤":"1f564","🕙":"1f559","🕥":"1f565","🕚":"1f55a","🕦":"1f566","🌑":"1f311","🌒":"1f312","🌓":"1f313","🌔":"1f314","🌕":"1f315","🌖":"1f316","🌗":"1f317","🌘":"1f318","🌙":"1f319","🌚":"1f31a","🌛":"1f31b","🌜":"1f31c","🌡":"1f321","☀":"2600","🌝":"1f31d","🌞":"1f31e","🪐":"1fa90","⭐":"2b50","🌟":"1f31f","🌠":"1f320","🌌":"1f30c","☁":"2601","⛅":"26c5","⛈":"26c8","🌤":"1f324","🌥":"1f325","🌦":"1f326","🌧":"1f327","🌨":"1f328","🌩":"1f329","🌪":"1f32a","🌫":"1f32b","🌬":"1f32c","🌀":"1f300","🌈":"1f308","🌂":"1f302","☂":"2602","☔":"2614","⛱":"26f1","⚡":"26a1","❄":"2744","☃":"2603","⛄":"26c4","☄":"2604","🔥":"1f525","💧":"1f4a7","🌊":"1f30a","🎃":"1f383","🎄":"1f384","🎆":"1f386","🎇":"1f387","🧨":"1f9e8","✨":"2728","🎈":"1f388","🎉":"1f389","🎊":"1f38a","🎋":"1f38b","🎍":"1f38d","🎎":"1f38e","🎏":"1f38f","🎐":"1f390","🎑":"1f391","🧧":"1f9e7","🎀":"1f380","🎁":"1f381","🎗":"1f397","🎟":"1f39f","🎫":"1f3ab","🎖":"1f396","🏆":"1f3c6","🏅":"1f3c5","🥇":"1f947","🥈":"1f948","🥉":"1f949","⚽":"26bd","⚾":"26be","🥎":"1f94e","🏀":"1f3c0","🏐":"1f3d0","🏈":"1f3c8","🏉":"1f3c9","🎾":"1f3be","🥏":"1f94f","🎳":"1f3b3","🏏":"1f3cf","🏑":"1f3d1","🏒":"1f3d2","🥍":"1f94d","🏓":"1f3d3","🏸":"1f3f8","🥊":"1f94a","🥋":"1f94b","🥅":"1f945","⛳":"26f3","⛸":"26f8","🎣":"1f3a3","🤿":"1f93f","🎽":"1f3bd","🎿":"1f3bf","🛷":"1f6f7","🥌":"1f94c","🎯":"1f3af","🪀":"1fa80","🪁":"1fa81","🎱":"1f3b1","🔮":"1f52e","🧿":"1f9ff","🎮":"1f3ae","🕹":"1f579","🎰":"1f3b0","🎲":"1f3b2","🧩":"1f9e9","🧸":"1f9f8","♠":"2660","♥":"2665","♦":"2666","♣":"2663","♟":"265f","🃏":"1f0cf","🀄":"1f004","🎴":"1f3b4","🎭":"1f3ad","🖼":"1f5bc","🎨":"1f3a8","🧵":"1f9f5","🧶":"1f9f6","👓":"1f453","🕶":"1f576","🥽":"1f97d","🥼":"1f97c","🦺":"1f9ba","👔":"1f454","👕":"1f455","👖":"1f456","🧣":"1f9e3","🧤":"1f9e4","🧥":"1f9e5","🧦":"1f9e6","👗":"1f457","👘":"1f458","🥻":"1f97b","🩱":"1fa71","🩲":"1fa72","🩳":"1fa73","👙":"1f459","👚":"1f45a","👛":"1f45b","👜":"1f45c","👝":"1f45d","🛍":"1f6cd","🎒":"1f392","👞":"1f45e","👟":"1f45f","🥾":"1f97e","🥿":"1f97f","👠":"1f460","👡":"1f461","🩰":"1fa70","👢":"1f462","👑":"1f451","👒":"1f452","🎩":"1f3a9","🎓":"1f393","🧢":"1f9e2","⛑":"26d1","📿":"1f4ff","💄":"1f484","💍":"1f48d","💎":"1f48e","🔇":"1f507","🔈":"1f508","🔉":"1f509","🔊":"1f50a","📢":"1f4e2","📣":"1f4e3","📯":"1f4ef","🔔":"1f514","🔕":"1f515","🎼":"1f3bc","🎵":"1f3b5","🎶":"1f3b6","🎙":"1f399","🎚":"1f39a","🎛":"1f39b","🎤":"1f3a4","🎧":"1f3a7","📻":"1f4fb","🎷":"1f3b7","🎸":"1f3b8","🎹":"1f3b9","🎺":"1f3ba","🎻":"1f3bb","🪕":"1fa95","🥁":"1f941","📱":"1f4f1","📲":"1f4f2","☎":"260e","📞":"1f4de","📟":"1f4df","📠":"1f4e0","🔋":"1f50b","🔌":"1f50c","💻":"1f4bb","🖥":"1f5a5","🖨":"1f5a8","⌨":"2328","🖱":"1f5b1","🖲":"1f5b2","💽":"1f4bd","💾":"1f4be","💿":"1f4bf","📀":"1f4c0","🧮":"1f9ee","🎥":"1f3a5","🎞":"1f39e","📽":"1f4fd","🎬":"1f3ac","📺":"1f4fa","📷":"1f4f7","📸":"1f4f8","📹":"1f4f9","📼":"1f4fc","🔍":"1f50d","🔎":"1f50e","🕯":"1f56f","💡":"1f4a1","🔦":"1f526","🏮":"1f3ee","🪔":"1fa94","📔":"1f4d4","📕":"1f4d5","📖":"1f4d6","📗":"1f4d7","📘":"1f4d8","📙":"1f4d9","📚":"1f4da","📓":"1f4d3","📒":"1f4d2","📃":"1f4c3","📜":"1f4dc","📄":"1f4c4","📰":"1f4f0","🗞":"1f5de","📑":"1f4d1","🔖":"1f516","🏷":"1f3f7","💰":"1f4b0","💴":"1f4b4","💵":"1f4b5","💶":"1f4b6","💷":"1f4b7","💸":"1f4b8","💳":"1f4b3","🧾":"1f9fe","💹":"1f4b9","💱":"1f4b1","💲":"1f4b2","✉":"2709","📧":"1f4e7","📨":"1f4e8","📩":"1f4e9","📤":"1f4e4","📥":"1f4e5","📦":"1f4e6","📫":"1f4eb","📪":"1f4ea","📬":"1f4ec","📭":"1f4ed","📮":"1f4ee","🗳":"1f5f3","✏":"270f","✒":"2712","🖋":"1f58b","🖊":"1f58a","🖌":"1f58c","🖍":"1f58d","📝":"1f4dd","💼":"1f4bc","📁":"1f4c1","📂":"1f4c2","🗂":"1f5c2","📅":"1f4c5","📆":"1f4c6","🗒":"1f5d2","🗓":"1f5d3","📇":"1f4c7","📈":"1f4c8","📉":"1f4c9","📊":"1f4ca","📋":"1f4cb","📌":"1f4cc","📍":"1f4cd","📎":"1f4ce","🖇":"1f587","📏":"1f4cf","📐":"1f4d0","✂":"2702","🗃":"1f5c3","🗄":"1f5c4","🗑":"1f5d1","🔒":"1f512","🔓":"1f513","🔏":"1f50f","🔐":"1f510","🔑":"1f511","🗝":"1f5dd","🔨":"1f528","🪓":"1fa93","⛏":"26cf","⚒":"2692","🛠":"1f6e0","🗡":"1f5e1","⚔":"2694","🔫":"1f52b","🏹":"1f3f9","🛡":"1f6e1","🔧":"1f527","🔩":"1f529","⚙":"2699","🗜":"1f5dc","⚖":"2696","🦯":"1f9af","🔗":"1f517","⛓":"26d3","🧰":"1f9f0","🧲":"1f9f2","⚗":"2697","🧪":"1f9ea","🧫":"1f9eb","🧬":"1f9ec","🔬":"1f52c","🔭":"1f52d","📡":"1f4e1","💉":"1f489","🩸":"1fa78","💊":"1f48a","🩹":"1fa79","🩺":"1fa7a","🚪":"1f6aa","🛏":"1f6cf","🛋":"1f6cb","🪑":"1fa91","🚽":"1f6bd","🚿":"1f6bf","🛁":"1f6c1","🪒":"1fa92","🧴":"1f9f4","🧷":"1f9f7","🧹":"1f9f9","🧺":"1f9fa","🧻":"1f9fb","🧼":"1f9fc","🧽":"1f9fd","🧯":"1f9ef","🛒":"1f6d2","🚬":"1f6ac","⚰":"26b0","⚱":"26b1","🗿":"1f5ff","🏧":"1f3e7","🚮":"1f6ae","🚰":"1f6b0","♿":"267f","🚹":"1f6b9","🚺":"1f6ba","🚻":"1f6bb","🚼":"1f6bc","🚾":"1f6be","🛂":"1f6c2","🛃":"1f6c3","🛄":"1f6c4","🛅":"1f6c5","⚠":"26a0","🚸":"1f6b8","⛔":"26d4","🚫":"1f6ab","🚳":"1f6b3","🚭":"1f6ad","🚯":"1f6af","🚱":"1f6b1","🚷":"1f6b7","📵":"1f4f5","🔞":"1f51e","☢":"2622","☣":"2623","⬆":"2b06","↗":"2197","➡":"27a1","↘":"2198","⬇":"2b07","↙":"2199","⬅":"2b05","↖":"2196","↕":"2195","↔":"2194","↩":"21a9","↪":"21aa","⤴":"2934","⤵":"2935","🔃":"1f503","🔄":"1f504","🔙":"1f519","🔚":"1f51a","🔛":"1f51b","🔜":"1f51c","🔝":"1f51d","🛐":"1f6d0","⚛":"269b","🕉":"1f549","✡":"2721","☸":"2638","☯":"262f","✝":"271d","☦":"2626","☪":"262a","☮":"262e","🕎":"1f54e","🔯":"1f52f","♈":"2648","♉":"2649","♊":"264a","♋":"264b","♌":"264c","♍":"264d","♎":"264e","♏":"264f","♐":"2650","♑":"2651","♒":"2652","♓":"2653","⛎":"26ce","🔀":"1f500","🔁":"1f501","🔂":"1f502","▶":"25b6","⏩":"23e9","⏭":"23ed","⏯":"23ef","◀":"25c0","⏪":"23ea","⏮":"23ee","🔼":"1f53c","⏫":"23eb","🔽":"1f53d","⏬":"23ec","⏸":"23f8","⏹":"23f9","⏺":"23fa","⏏":"23cf","🎦":"1f3a6","🔅":"1f505","🔆":"1f506","📶":"1f4f6","📳":"1f4f3","📴":"1f4f4","♀":"2640","♂":"2642","⚕":"2695","♾":"267e","♻":"267b","⚜":"269c","🔱":"1f531","📛":"1f4db","🔰":"1f530","⭕":"2b55","✅":"2705","☑":"2611","✔":"2714","✖":"2716","❌":"274c","❎":"274e","➕":"2795","➖":"2796","➗":"2797","➰":"27b0","➿":"27bf","〽":"303d","✳":"2733","✴":"2734","❇":"2747","‼":"203c","⁉":"2049","❓":"2753","❔":"2754","❕":"2755","❗":"2757","〰":"3030","©":"a9","®":"ae","™":"2122","🔟":"1f51f","🔠":"1f520","🔡":"1f521","🔢":"1f522","🔣":"1f523","🔤":"1f524","🅰":"1f170","🆎":"1f18e","🅱":"1f171","🆑":"1f191","🆒":"1f192","🆓":"1f193","ℹ":"2139","🆔":"1f194","Ⓜ":"24c2","🆕":"1f195","🆖":"1f196","🅾":"1f17e","🆗":"1f197","🅿":"1f17f","🆘":"1f198","🆙":"1f199","🆚":"1f19a","🈁":"1f201","🈂":"1f202","🈷":"1f237","🈶":"1f236","🈯":"1f22f","🉐":"1f250","🈹":"1f239","🈚":"1f21a","🈲":"1f232","🉑":"1f251","🈸":"1f238","🈴":"1f234","🈳":"1f233","㊗":"3297","㊙":"3299","🈺":"1f23a","🈵":"1f235","🔴":"1f534","🟠":"1f7e0","🟡":"1f7e1","🟢":"1f7e2","🔵":"1f535","🟣":"1f7e3","🟤":"1f7e4","⚫":"26ab","⚪":"26aa","🟥":"1f7e5","🟧":"1f7e7","🟨":"1f7e8","🟩":"1f7e9","🟦":"1f7e6","🟪":"1f7ea","🟫":"1f7eb","⬛":"2b1b","⬜":"2b1c","◼":"25fc","◻":"25fb","◾":"25fe","◽":"25fd","▪":"25aa","▫":"25ab","🔶":"1f536","🔷":"1f537","🔸":"1f538","🔹":"1f539","🔺":"1f53a","🔻":"1f53b","💠":"1f4a0","🔘":"1f518","🔳":"1f533","🔲":"1f532","🏁":"1f3c1","🚩":"1f6a9","🎌":"1f38c","🏴":"1f3f4","🏳":"1f3f3","☺️":"263a","☹️":"2639","☠️":"2620","❣️":"2763","❤️":"2764","🕳️":"1f573","🗨️":"1f5e8","🗯️":"1f5ef","👋🏻":"1f44b-1f3fb","👋🏼":"1f44b-1f3fc","👋🏽":"1f44b-1f3fd","👋🏾":"1f44b-1f3fe","👋🏿":"1f44b-1f3ff","🤚🏻":"1f91a-1f3fb","🤚🏼":"1f91a-1f3fc","🤚🏽":"1f91a-1f3fd","🤚🏾":"1f91a-1f3fe","🤚🏿":"1f91a-1f3ff","🖐️":"1f590","🖐🏻":"1f590-1f3fb","🖐🏼":"1f590-1f3fc","🖐🏽":"1f590-1f3fd","🖐🏾":"1f590-1f3fe","🖐🏿":"1f590-1f3ff","✋🏻":"270b-1f3fb","✋🏼":"270b-1f3fc","✋🏽":"270b-1f3fd","✋🏾":"270b-1f3fe","✋🏿":"270b-1f3ff","🖖🏻":"1f596-1f3fb","🖖🏼":"1f596-1f3fc","🖖🏽":"1f596-1f3fd","🖖🏾":"1f596-1f3fe","🖖🏿":"1f596-1f3ff","👌🏻":"1f44c-1f3fb","👌🏼":"1f44c-1f3fc","👌🏽":"1f44c-1f3fd","👌🏾":"1f44c-1f3fe","👌🏿":"1f44c-1f3ff","🤏🏻":"1f90f-1f3fb","🤏🏼":"1f90f-1f3fc","🤏🏽":"1f90f-1f3fd","🤏🏾":"1f90f-1f3fe","🤏🏿":"1f90f-1f3ff","✌️":"270c","✌🏻":"270c-1f3fb","✌🏼":"270c-1f3fc","✌🏽":"270c-1f3fd","✌🏾":"270c-1f3fe","✌🏿":"270c-1f3ff","🤞🏻":"1f91e-1f3fb","🤞🏼":"1f91e-1f3fc","🤞🏽":"1f91e-1f3fd","🤞🏾":"1f91e-1f3fe","🤞🏿":"1f91e-1f3ff","🤟🏻":"1f91f-1f3fb","🤟🏼":"1f91f-1f3fc","🤟🏽":"1f91f-1f3fd","🤟🏾":"1f91f-1f3fe","🤟🏿":"1f91f-1f3ff","🤘🏻":"1f918-1f3fb","🤘🏼":"1f918-1f3fc","🤘🏽":"1f918-1f3fd","🤘🏾":"1f918-1f3fe","🤘🏿":"1f918-1f3ff","🤙🏻":"1f919-1f3fb","🤙🏼":"1f919-1f3fc","🤙🏽":"1f919-1f3fd","🤙🏾":"1f919-1f3fe","🤙🏿":"1f919-1f3ff","👈🏻":"1f448-1f3fb","👈🏼":"1f448-1f3fc","👈🏽":"1f448-1f3fd","👈🏾":"1f448-1f3fe","👈🏿":"1f448-1f3ff","👉🏻":"1f449-1f3fb","👉🏼":"1f449-1f3fc","👉🏽":"1f449-1f3fd","👉🏾":"1f449-1f3fe","👉🏿":"1f449-1f3ff","👆🏻":"1f446-1f3fb","👆🏼":"1f446-1f3fc","👆🏽":"1f446-1f3fd","👆🏾":"1f446-1f3fe","👆🏿":"1f446-1f3ff","🖕🏻":"1f595-1f3fb","🖕🏼":"1f595-1f3fc","🖕🏽":"1f595-1f3fd","🖕🏾":"1f595-1f3fe","🖕🏿":"1f595-1f3ff","👇🏻":"1f447-1f3fb","👇🏼":"1f447-1f3fc","👇🏽":"1f447-1f3fd","👇🏾":"1f447-1f3fe","👇🏿":"1f447-1f3ff","☝️":"261d","☝🏻":"261d-1f3fb","☝🏼":"261d-1f3fc","☝🏽":"261d-1f3fd","☝🏾":"261d-1f3fe","☝🏿":"261d-1f3ff","👍🏻":"1f44d-1f3fb","👍🏼":"1f44d-1f3fc","👍🏽":"1f44d-1f3fd","👍🏾":"1f44d-1f3fe","👍🏿":"1f44d-1f3ff","👎🏻":"1f44e-1f3fb","👎🏼":"1f44e-1f3fc","👎🏽":"1f44e-1f3fd","👎🏾":"1f44e-1f3fe","👎🏿":"1f44e-1f3ff","✊🏻":"270a-1f3fb","✊🏼":"270a-1f3fc","✊🏽":"270a-1f3fd","✊🏾":"270a-1f3fe","✊🏿":"270a-1f3ff","👊🏻":"1f44a-1f3fb","👊🏼":"1f44a-1f3fc","👊🏽":"1f44a-1f3fd","👊🏾":"1f44a-1f3fe","👊🏿":"1f44a-1f3ff","🤛🏻":"1f91b-1f3fb","🤛🏼":"1f91b-1f3fc","🤛🏽":"1f91b-1f3fd","🤛🏾":"1f91b-1f3fe","🤛🏿":"1f91b-1f3ff","🤜🏻":"1f91c-1f3fb","🤜🏼":"1f91c-1f3fc","🤜🏽":"1f91c-1f3fd","🤜🏾":"1f91c-1f3fe","🤜🏿":"1f91c-1f3ff","👏🏻":"1f44f-1f3fb","👏🏼":"1f44f-1f3fc","👏🏽":"1f44f-1f3fd","👏🏾":"1f44f-1f3fe","👏🏿":"1f44f-1f3ff","🙌🏻":"1f64c-1f3fb","🙌🏼":"1f64c-1f3fc","🙌🏽":"1f64c-1f3fd","🙌🏾":"1f64c-1f3fe","🙌🏿":"1f64c-1f3ff","👐🏻":"1f450-1f3fb","👐🏼":"1f450-1f3fc","👐🏽":"1f450-1f3fd","👐🏾":"1f450-1f3fe","👐🏿":"1f450-1f3ff","🤲🏻":"1f932-1f3fb","🤲🏼":"1f932-1f3fc","🤲🏽":"1f932-1f3fd","🤲🏾":"1f932-1f3fe","🤲🏿":"1f932-1f3ff","🙏🏻":"1f64f-1f3fb","🙏🏼":"1f64f-1f3fc","🙏🏽":"1f64f-1f3fd","🙏🏾":"1f64f-1f3fe","🙏🏿":"1f64f-1f3ff","✍️":"270d","✍🏻":"270d-1f3fb","✍🏼":"270d-1f3fc","✍🏽":"270d-1f3fd","✍🏾":"270d-1f3fe","✍🏿":"270d-1f3ff","💅🏻":"1f485-1f3fb","💅🏼":"1f485-1f3fc","💅🏽":"1f485-1f3fd","💅🏾":"1f485-1f3fe","💅🏿":"1f485-1f3ff","🤳🏻":"1f933-1f3fb","🤳🏼":"1f933-1f3fc","🤳🏽":"1f933-1f3fd","🤳🏾":"1f933-1f3fe","🤳🏿":"1f933-1f3ff","💪🏻":"1f4aa-1f3fb","💪🏼":"1f4aa-1f3fc","💪🏽":"1f4aa-1f3fd","💪🏾":"1f4aa-1f3fe","💪🏿":"1f4aa-1f3ff","🦵🏻":"1f9b5-1f3fb","🦵🏼":"1f9b5-1f3fc","🦵🏽":"1f9b5-1f3fd","🦵🏾":"1f9b5-1f3fe","🦵🏿":"1f9b5-1f3ff","🦶🏻":"1f9b6-1f3fb","🦶🏼":"1f9b6-1f3fc","🦶🏽":"1f9b6-1f3fd","🦶🏾":"1f9b6-1f3fe","🦶🏿":"1f9b6-1f3ff","👂🏻":"1f442-1f3fb","👂🏼":"1f442-1f3fc","👂🏽":"1f442-1f3fd","👂🏾":"1f442-1f3fe","👂🏿":"1f442-1f3ff","🦻🏻":"1f9bb-1f3fb","🦻🏼":"1f9bb-1f3fc","🦻🏽":"1f9bb-1f3fd","🦻🏾":"1f9bb-1f3fe","🦻🏿":"1f9bb-1f3ff","👃🏻":"1f443-1f3fb","👃🏼":"1f443-1f3fc","👃🏽":"1f443-1f3fd","👃🏾":"1f443-1f3fe","👃🏿":"1f443-1f3ff","👁️":"1f441","👶🏻":"1f476-1f3fb","👶🏼":"1f476-1f3fc","👶🏽":"1f476-1f3fd","👶🏾":"1f476-1f3fe","👶🏿":"1f476-1f3ff","🧒🏻":"1f9d2-1f3fb","🧒🏼":"1f9d2-1f3fc","🧒🏽":"1f9d2-1f3fd","🧒🏾":"1f9d2-1f3fe","🧒🏿":"1f9d2-1f3ff","👦🏻":"1f466-1f3fb","👦🏼":"1f466-1f3fc","👦🏽":"1f466-1f3fd","👦🏾":"1f466-1f3fe","👦🏿":"1f466-1f3ff","👧🏻":"1f467-1f3fb","👧🏼":"1f467-1f3fc","👧🏽":"1f467-1f3fd","👧🏾":"1f467-1f3fe","👧🏿":"1f467-1f3ff","🧑🏻":"1f9d1-1f3fb","🧑🏼":"1f9d1-1f3fc","🧑🏽":"1f9d1-1f3fd","🧑🏾":"1f9d1-1f3fe","🧑🏿":"1f9d1-1f3ff","👱🏻":"1f471-1f3fb","👱🏼":"1f471-1f3fc","👱🏽":"1f471-1f3fd","👱🏾":"1f471-1f3fe","👱🏿":"1f471-1f3ff","👨🏻":"1f468-1f3fb","👨🏼":"1f468-1f3fc","👨🏽":"1f468-1f3fd","👨🏾":"1f468-1f3fe","👨🏿":"1f468-1f3ff","🧔🏻":"1f9d4-1f3fb","🧔🏼":"1f9d4-1f3fc","🧔🏽":"1f9d4-1f3fd","🧔🏾":"1f9d4-1f3fe","🧔🏿":"1f9d4-1f3ff","👩🏻":"1f469-1f3fb","👩🏼":"1f469-1f3fc","👩🏽":"1f469-1f3fd","👩🏾":"1f469-1f3fe","👩🏿":"1f469-1f3ff","🧓🏻":"1f9d3-1f3fb","🧓🏼":"1f9d3-1f3fc","🧓🏽":"1f9d3-1f3fd","🧓🏾":"1f9d3-1f3fe","🧓🏿":"1f9d3-1f3ff","👴🏻":"1f474-1f3fb","👴🏼":"1f474-1f3fc","👴🏽":"1f474-1f3fd","👴🏾":"1f474-1f3fe","👴🏿":"1f474-1f3ff","👵🏻":"1f475-1f3fb","👵🏼":"1f475-1f3fc","👵🏽":"1f475-1f3fd","👵🏾":"1f475-1f3fe","👵🏿":"1f475-1f3ff","🙍🏻":"1f64d-1f3fb","🙍🏼":"1f64d-1f3fc","🙍🏽":"1f64d-1f3fd","🙍🏾":"1f64d-1f3fe","🙍🏿":"1f64d-1f3ff","🙎🏻":"1f64e-1f3fb","🙎🏼":"1f64e-1f3fc","🙎🏽":"1f64e-1f3fd","🙎🏾":"1f64e-1f3fe","🙎🏿":"1f64e-1f3ff","🙅🏻":"1f645-1f3fb","🙅🏼":"1f645-1f3fc","🙅🏽":"1f645-1f3fd","🙅🏾":"1f645-1f3fe","🙅🏿":"1f645-1f3ff","🙆🏻":"1f646-1f3fb","🙆🏼":"1f646-1f3fc","🙆🏽":"1f646-1f3fd","🙆🏾":"1f646-1f3fe","🙆🏿":"1f646-1f3ff","💁🏻":"1f481-1f3fb","💁🏼":"1f481-1f3fc","💁🏽":"1f481-1f3fd","💁🏾":"1f481-1f3fe","💁🏿":"1f481-1f3ff","🙋🏻":"1f64b-1f3fb","🙋🏼":"1f64b-1f3fc","🙋🏽":"1f64b-1f3fd","🙋🏾":"1f64b-1f3fe","🙋🏿":"1f64b-1f3ff","🧏🏻":"1f9cf-1f3fb","🧏🏼":"1f9cf-1f3fc","🧏🏽":"1f9cf-1f3fd","🧏🏾":"1f9cf-1f3fe","🧏🏿":"1f9cf-1f3ff","🙇🏻":"1f647-1f3fb","🙇🏼":"1f647-1f3fc","🙇🏽":"1f647-1f3fd","🙇🏾":"1f647-1f3fe","🙇🏿":"1f647-1f3ff","🤦🏻":"1f926-1f3fb","🤦🏼":"1f926-1f3fc","🤦🏽":"1f926-1f3fd","🤦🏾":"1f926-1f3fe","🤦🏿":"1f926-1f3ff","🤷🏻":"1f937-1f3fb","🤷🏼":"1f937-1f3fc","🤷🏽":"1f937-1f3fd","🤷🏾":"1f937-1f3fe","🤷🏿":"1f937-1f3ff","👮🏻":"1f46e-1f3fb","👮🏼":"1f46e-1f3fc","👮🏽":"1f46e-1f3fd","👮🏾":"1f46e-1f3fe","👮🏿":"1f46e-1f3ff","🕵️":"1f575","🕵🏻":"1f575-1f3fb","🕵🏼":"1f575-1f3fc","🕵🏽":"1f575-1f3fd","🕵🏾":"1f575-1f3fe","🕵🏿":"1f575-1f3ff","💂🏻":"1f482-1f3fb","💂🏼":"1f482-1f3fc","💂🏽":"1f482-1f3fd","💂🏾":"1f482-1f3fe","💂🏿":"1f482-1f3ff","👷🏻":"1f477-1f3fb","👷🏼":"1f477-1f3fc","👷🏽":"1f477-1f3fd","👷🏾":"1f477-1f3fe","👷🏿":"1f477-1f3ff","🤴🏻":"1f934-1f3fb","🤴🏼":"1f934-1f3fc","🤴🏽":"1f934-1f3fd","🤴🏾":"1f934-1f3fe","🤴🏿":"1f934-1f3ff","👸🏻":"1f478-1f3fb","👸🏼":"1f478-1f3fc","👸🏽":"1f478-1f3fd","👸🏾":"1f478-1f3fe","👸🏿":"1f478-1f3ff","👳🏻":"1f473-1f3fb","👳🏼":"1f473-1f3fc","👳🏽":"1f473-1f3fd","👳🏾":"1f473-1f3fe","👳🏿":"1f473-1f3ff","👲🏻":"1f472-1f3fb","👲🏼":"1f472-1f3fc","👲🏽":"1f472-1f3fd","👲🏾":"1f472-1f3fe","👲🏿":"1f472-1f3ff","🧕🏻":"1f9d5-1f3fb","🧕🏼":"1f9d5-1f3fc","🧕🏽":"1f9d5-1f3fd","🧕🏾":"1f9d5-1f3fe","🧕🏿":"1f9d5-1f3ff","🤵🏻":"1f935-1f3fb","🤵🏼":"1f935-1f3fc","🤵🏽":"1f935-1f3fd","🤵🏾":"1f935-1f3fe","🤵🏿":"1f935-1f3ff","👰🏻":"1f470-1f3fb","👰🏼":"1f470-1f3fc","👰🏽":"1f470-1f3fd","👰🏾":"1f470-1f3fe","👰🏿":"1f470-1f3ff","🤰🏻":"1f930-1f3fb","🤰🏼":"1f930-1f3fc","🤰🏽":"1f930-1f3fd","🤰🏾":"1f930-1f3fe","🤰🏿":"1f930-1f3ff","🤱🏻":"1f931-1f3fb","🤱🏼":"1f931-1f3fc","🤱🏽":"1f931-1f3fd","🤱🏾":"1f931-1f3fe","🤱🏿":"1f931-1f3ff","👼🏻":"1f47c-1f3fb","👼🏼":"1f47c-1f3fc","👼🏽":"1f47c-1f3fd","👼🏾":"1f47c-1f3fe","👼🏿":"1f47c-1f3ff","🎅🏻":"1f385-1f3fb","🎅🏼":"1f385-1f3fc","🎅🏽":"1f385-1f3fd","🎅🏾":"1f385-1f3fe","🎅🏿":"1f385-1f3ff","🤶🏻":"1f936-1f3fb","🤶🏼":"1f936-1f3fc","🤶🏽":"1f936-1f3fd","🤶🏾":"1f936-1f3fe","🤶🏿":"1f936-1f3ff","🦸🏻":"1f9b8-1f3fb","🦸🏼":"1f9b8-1f3fc","🦸🏽":"1f9b8-1f3fd","🦸🏾":"1f9b8-1f3fe","🦸🏿":"1f9b8-1f3ff","🦹🏻":"1f9b9-1f3fb","🦹🏼":"1f9b9-1f3fc","🦹🏽":"1f9b9-1f3fd","🦹🏾":"1f9b9-1f3fe","🦹🏿":"1f9b9-1f3ff","🧙🏻":"1f9d9-1f3fb","🧙🏼":"1f9d9-1f3fc","🧙🏽":"1f9d9-1f3fd","🧙🏾":"1f9d9-1f3fe","🧙🏿":"1f9d9-1f3ff","🧚🏻":"1f9da-1f3fb","🧚🏼":"1f9da-1f3fc","🧚🏽":"1f9da-1f3fd","🧚🏾":"1f9da-1f3fe","🧚🏿":"1f9da-1f3ff","🧛🏻":"1f9db-1f3fb","🧛🏼":"1f9db-1f3fc","🧛🏽":"1f9db-1f3fd","🧛🏾":"1f9db-1f3fe","🧛🏿":"1f9db-1f3ff","🧜🏻":"1f9dc-1f3fb","🧜🏼":"1f9dc-1f3fc","🧜🏽":"1f9dc-1f3fd","🧜🏾":"1f9dc-1f3fe","🧜🏿":"1f9dc-1f3ff","🧝🏻":"1f9dd-1f3fb","🧝🏼":"1f9dd-1f3fc","🧝🏽":"1f9dd-1f3fd","🧝🏾":"1f9dd-1f3fe","🧝🏿":"1f9dd-1f3ff","💆🏻":"1f486-1f3fb","💆🏼":"1f486-1f3fc","💆🏽":"1f486-1f3fd","💆🏾":"1f486-1f3fe","💆🏿":"1f486-1f3ff","💇🏻":"1f487-1f3fb","💇🏼":"1f487-1f3fc","💇🏽":"1f487-1f3fd","💇🏾":"1f487-1f3fe","💇🏿":"1f487-1f3ff","🚶🏻":"1f6b6-1f3fb","🚶🏼":"1f6b6-1f3fc","🚶🏽":"1f6b6-1f3fd","🚶🏾":"1f6b6-1f3fe","🚶🏿":"1f6b6-1f3ff","🧍🏻":"1f9cd-1f3fb","🧍🏼":"1f9cd-1f3fc","🧍🏽":"1f9cd-1f3fd","🧍🏾":"1f9cd-1f3fe","🧍🏿":"1f9cd-1f3ff","🧎🏻":"1f9ce-1f3fb","🧎🏼":"1f9ce-1f3fc","🧎🏽":"1f9ce-1f3fd","🧎🏾":"1f9ce-1f3fe","🧎🏿":"1f9ce-1f3ff","🏃🏻":"1f3c3-1f3fb","🏃🏼":"1f3c3-1f3fc","🏃🏽":"1f3c3-1f3fd","🏃🏾":"1f3c3-1f3fe","🏃🏿":"1f3c3-1f3ff","💃🏻":"1f483-1f3fb","💃🏼":"1f483-1f3fc","💃🏽":"1f483-1f3fd","💃🏾":"1f483-1f3fe","💃🏿":"1f483-1f3ff","🕺🏻":"1f57a-1f3fb","🕺🏼":"1f57a-1f3fc","🕺🏽":"1f57a-1f3fd","🕺🏾":"1f57a-1f3fe","🕺🏿":"1f57a-1f3ff","🕴️":"1f574","🕴🏻":"1f574-1f3fb","🕴🏼":"1f574-1f3fc","🕴🏽":"1f574-1f3fd","🕴🏾":"1f574-1f3fe","🕴🏿":"1f574-1f3ff","🧖🏻":"1f9d6-1f3fb","🧖🏼":"1f9d6-1f3fc","🧖🏽":"1f9d6-1f3fd","🧖🏾":"1f9d6-1f3fe","🧖🏿":"1f9d6-1f3ff","🧗🏻":"1f9d7-1f3fb","🧗🏼":"1f9d7-1f3fc","🧗🏽":"1f9d7-1f3fd","🧗🏾":"1f9d7-1f3fe","🧗🏿":"1f9d7-1f3ff","🏇🏻":"1f3c7-1f3fb","🏇🏼":"1f3c7-1f3fc","🏇🏽":"1f3c7-1f3fd","🏇🏾":"1f3c7-1f3fe","🏇🏿":"1f3c7-1f3ff","⛷️":"26f7","🏂🏻":"1f3c2-1f3fb","🏂🏼":"1f3c2-1f3fc","🏂🏽":"1f3c2-1f3fd","🏂🏾":"1f3c2-1f3fe","🏂🏿":"1f3c2-1f3ff","🏌️":"1f3cc","🏌🏻":"1f3cc-1f3fb","🏌🏼":"1f3cc-1f3fc","🏌🏽":"1f3cc-1f3fd","🏌🏾":"1f3cc-1f3fe","🏌🏿":"1f3cc-1f3ff","🏄🏻":"1f3c4-1f3fb","🏄🏼":"1f3c4-1f3fc","🏄🏽":"1f3c4-1f3fd","🏄🏾":"1f3c4-1f3fe","🏄🏿":"1f3c4-1f3ff","🚣🏻":"1f6a3-1f3fb","🚣🏼":"1f6a3-1f3fc","🚣🏽":"1f6a3-1f3fd","🚣🏾":"1f6a3-1f3fe","🚣🏿":"1f6a3-1f3ff","🏊🏻":"1f3ca-1f3fb","🏊🏼":"1f3ca-1f3fc","🏊🏽":"1f3ca-1f3fd","🏊🏾":"1f3ca-1f3fe","🏊🏿":"1f3ca-1f3ff","⛹️":"26f9","⛹🏻":"26f9-1f3fb","⛹🏼":"26f9-1f3fc","⛹🏽":"26f9-1f3fd","⛹🏾":"26f9-1f3fe","⛹🏿":"26f9-1f3ff","🏋️":"1f3cb","🏋🏻":"1f3cb-1f3fb","🏋🏼":"1f3cb-1f3fc","🏋🏽":"1f3cb-1f3fd","🏋🏾":"1f3cb-1f3fe","🏋🏿":"1f3cb-1f3ff","🚴🏻":"1f6b4-1f3fb","🚴🏼":"1f6b4-1f3fc","🚴🏽":"1f6b4-1f3fd","🚴🏾":"1f6b4-1f3fe","🚴🏿":"1f6b4-1f3ff","🚵🏻":"1f6b5-1f3fb","🚵🏼":"1f6b5-1f3fc","🚵🏽":"1f6b5-1f3fd","🚵🏾":"1f6b5-1f3fe","🚵🏿":"1f6b5-1f3ff","🤸🏻":"1f938-1f3fb","🤸🏼":"1f938-1f3fc","🤸🏽":"1f938-1f3fd","🤸🏾":"1f938-1f3fe","🤸🏿":"1f938-1f3ff","🤽🏻":"1f93d-1f3fb","🤽🏼":"1f93d-1f3fc","🤽🏽":"1f93d-1f3fd","🤽🏾":"1f93d-1f3fe","🤽🏿":"1f93d-1f3ff","🤾🏻":"1f93e-1f3fb","🤾🏼":"1f93e-1f3fc","🤾🏽":"1f93e-1f3fd","🤾🏾":"1f93e-1f3fe","🤾🏿":"1f93e-1f3ff","🤹🏻":"1f939-1f3fb","🤹🏼":"1f939-1f3fc","🤹🏽":"1f939-1f3fd","🤹🏾":"1f939-1f3fe","🤹🏿":"1f939-1f3ff","🧘🏻":"1f9d8-1f3fb","🧘🏼":"1f9d8-1f3fc","🧘🏽":"1f9d8-1f3fd","🧘🏾":"1f9d8-1f3fe","🧘🏿":"1f9d8-1f3ff","🛀🏻":"1f6c0-1f3fb","🛀🏼":"1f6c0-1f3fc","🛀🏽":"1f6c0-1f3fd","🛀🏾":"1f6c0-1f3fe","🛀🏿":"1f6c0-1f3ff","🛌🏻":"1f6cc-1f3fb","🛌🏼":"1f6cc-1f3fc","🛌🏽":"1f6cc-1f3fd","🛌🏾":"1f6cc-1f3fe","🛌🏿":"1f6cc-1f3ff","👭🏻":"1f46d-1f3fb","👭🏼":"1f46d-1f3fc","👭🏽":"1f46d-1f3fd","👭🏾":"1f46d-1f3fe","👭🏿":"1f46d-1f3ff","👫🏻":"1f46b-1f3fb","👫🏼":"1f46b-1f3fc","👫🏽":"1f46b-1f3fd","👫🏾":"1f46b-1f3fe","👫🏿":"1f46b-1f3ff","👬🏻":"1f46c-1f3fb","👬🏼":"1f46c-1f3fc","👬🏽":"1f46c-1f3fd","👬🏾":"1f46c-1f3fe","👬🏿":"1f46c-1f3ff","🗣️":"1f5e3","🐿️":"1f43f","🕊️":"1f54a","🕷️":"1f577","🕸️":"1f578","🏵️":"1f3f5","☘️":"2618","🌶️":"1f336","🍽️":"1f37d","🗺️":"1f5fa","🏔️":"1f3d4","⛰️":"26f0","🏕️":"1f3d5","🏖️":"1f3d6","🏜️":"1f3dc","🏝️":"1f3dd","🏞️":"1f3de","🏟️":"1f3df","🏛️":"1f3db","🏗️":"1f3d7","🏘️":"1f3d8","🏚️":"1f3da","⛩️":"26e9","🏙️":"1f3d9","♨️":"2668","🏎️":"1f3ce","🏍️":"1f3cd","🛣️":"1f6e3","🛤️":"1f6e4","🛢️":"1f6e2","🛳️":"1f6f3","⛴️":"26f4","🛥️":"1f6e5","✈️":"2708","🛩️":"1f6e9","🛰️":"1f6f0","🛎️":"1f6ce","⏱️":"23f1","⏲️":"23f2","🕰️":"1f570","🌡️":"1f321","☀️":"2600","☁️":"2601","⛈️":"26c8","🌤️":"1f324","🌥️":"1f325","🌦️":"1f326","🌧️":"1f327","🌨️":"1f328","🌩️":"1f329","🌪️":"1f32a","🌫️":"1f32b","🌬️":"1f32c","☂️":"2602","⛱️":"26f1","❄️":"2744","☃️":"2603","☄️":"2604","🎗️":"1f397","🎟️":"1f39f","🎖️":"1f396","⛸️":"26f8","🕹️":"1f579","♠️":"2660","♥️":"2665","♦️":"2666","♣️":"2663","♟️":"265f","🖼️":"1f5bc","🕶️":"1f576","🛍️":"1f6cd","⛑️":"26d1","🎙️":"1f399","🎚️":"1f39a","🎛️":"1f39b","☎️":"260e","🖥️":"1f5a5","🖨️":"1f5a8","⌨️":"2328","🖱️":"1f5b1","🖲️":"1f5b2","🎞️":"1f39e","📽️":"1f4fd","🕯️":"1f56f","🗞️":"1f5de","🏷️":"1f3f7","✉️":"2709","🗳️":"1f5f3","✏️":"270f","✒️":"2712","🖋️":"1f58b","🖊️":"1f58a","🖌️":"1f58c","🖍️":"1f58d","🗂️":"1f5c2","🗒️":"1f5d2","🗓️":"1f5d3","🖇️":"1f587","✂️":"2702","🗃️":"1f5c3","🗄️":"1f5c4","🗑️":"1f5d1","🗝️":"1f5dd","⛏️":"26cf","⚒️":"2692","🛠️":"1f6e0","🗡️":"1f5e1","⚔️":"2694","🛡️":"1f6e1","⚙️":"2699","🗜️":"1f5dc","⚖️":"2696","⛓️":"26d3","⚗️":"2697","🛏️":"1f6cf","🛋️":"1f6cb","⚰️":"26b0","⚱️":"26b1","⚠️":"26a0","☢️":"2622","☣️":"2623","⬆️":"2b06","↗️":"2197","➡️":"27a1","↘️":"2198","⬇️":"2b07","↙️":"2199","⬅️":"2b05","↖️":"2196","↕️":"2195","↔️":"2194","↩️":"21a9","↪️":"21aa","⤴️":"2934","⤵️":"2935","⚛️":"269b","🕉️":"1f549","✡️":"2721","☸️":"2638","☯️":"262f","✝️":"271d","☦️":"2626","☪️":"262a","☮️":"262e","▶️":"25b6","⏭️":"23ed","⏯️":"23ef","◀️":"25c0","⏮️":"23ee","⏸️":"23f8","⏹️":"23f9","⏺️":"23fa","⏏️":"23cf","♀️":"2640","♂️":"2642","⚕️":"2695","♾️":"267e","♻️":"267b","⚜️":"269c","☑️":"2611","✔️":"2714","✖️":"2716","〽️":"303d","✳️":"2733","✴️":"2734","❇️":"2747","‼️":"203c","⁉️":"2049","〰️":"3030","©️":"a9","®️":"ae","™️":"2122","#⃣":"23-20e3","*⃣":"2a-20e3","0⃣":"30-20e3","1⃣":"31-20e3","2⃣":"32-20e3","3⃣":"33-20e3","4⃣":"34-20e3","5⃣":"35-20e3","6⃣":"36-20e3","7⃣":"37-20e3","8⃣":"38-20e3","9⃣":"39-20e3","🅰️":"1f170","🅱️":"1f171","ℹ️":"2139","Ⓜ️":"24c2","🅾️":"1f17e","🅿️":"1f17f","🈂️":"1f202","🈷️":"1f237","㊗️":"3297","㊙️":"3299","◼️":"25fc","◻️":"25fb","▪️":"25aa","▫️":"25ab","🏳️":"1f3f3","🇦🇨":"1f1e6-1f1e8","🇦🇩":"1f1e6-1f1e9","🇦🇪":"1f1e6-1f1ea","🇦🇫":"1f1e6-1f1eb","🇦🇬":"1f1e6-1f1ec","🇦🇮":"1f1e6-1f1ee","🇦🇱":"1f1e6-1f1f1","🇦🇲":"1f1e6-1f1f2","🇦🇴":"1f1e6-1f1f4","🇦🇶":"1f1e6-1f1f6","🇦🇷":"1f1e6-1f1f7","🇦🇸":"1f1e6-1f1f8","🇦🇹":"1f1e6-1f1f9","🇦🇺":"1f1e6-1f1fa","🇦🇼":"1f1e6-1f1fc","🇦🇽":"1f1e6-1f1fd","🇦🇿":"1f1e6-1f1ff","🇧🇦":"1f1e7-1f1e6","🇧🇧":"1f1e7-1f1e7","🇧🇩":"1f1e7-1f1e9","🇧🇪":"1f1e7-1f1ea","🇧🇫":"1f1e7-1f1eb","🇧🇬":"1f1e7-1f1ec","🇧🇭":"1f1e7-1f1ed","🇧🇮":"1f1e7-1f1ee","🇧🇯":"1f1e7-1f1ef","🇧🇱":"1f1e7-1f1f1","🇧🇲":"1f1e7-1f1f2","🇧🇳":"1f1e7-1f1f3","🇧🇴":"1f1e7-1f1f4","🇧🇶":"1f1e7-1f1f6","🇧🇷":"1f1e7-1f1f7","🇧🇸":"1f1e7-1f1f8","🇧🇹":"1f1e7-1f1f9","🇧🇻":"1f1e7-1f1fb","🇧🇼":"1f1e7-1f1fc","🇧🇾":"1f1e7-1f1fe","🇧🇿":"1f1e7-1f1ff","🇨🇦":"1f1e8-1f1e6","🇨🇨":"1f1e8-1f1e8","🇨🇩":"1f1e8-1f1e9","🇨🇫":"1f1e8-1f1eb","🇨🇬":"1f1e8-1f1ec","🇨🇭":"1f1e8-1f1ed","🇨🇮":"1f1e8-1f1ee","🇨🇰":"1f1e8-1f1f0","🇨🇱":"1f1e8-1f1f1","🇨🇲":"1f1e8-1f1f2","🇨🇳":"1f1e8-1f1f3","🇨🇴":"1f1e8-1f1f4","🇨🇵":"1f1e8-1f1f5","🇨🇷":"1f1e8-1f1f7","🇨🇺":"1f1e8-1f1fa","🇨🇻":"1f1e8-1f1fb","🇨🇼":"1f1e8-1f1fc","🇨🇽":"1f1e8-1f1fd","🇨🇾":"1f1e8-1f1fe","🇨🇿":"1f1e8-1f1ff","🇩🇪":"1f1e9-1f1ea","🇩🇬":"1f1e9-1f1ec","🇩🇯":"1f1e9-1f1ef","🇩🇰":"1f1e9-1f1f0","🇩🇲":"1f1e9-1f1f2","🇩🇴":"1f1e9-1f1f4","🇩🇿":"1f1e9-1f1ff","🇪🇦":"1f1ea-1f1e6","🇪🇨":"1f1ea-1f1e8","🇪🇪":"1f1ea-1f1ea","🇪🇬":"1f1ea-1f1ec","🇪🇭":"1f1ea-1f1ed","🇪🇷":"1f1ea-1f1f7","🇪🇸":"1f1ea-1f1f8","🇪🇹":"1f1ea-1f1f9","🇪🇺":"1f1ea-1f1fa","🇫🇮":"1f1eb-1f1ee","🇫🇯":"1f1eb-1f1ef","🇫🇰":"1f1eb-1f1f0","🇫🇲":"1f1eb-1f1f2","🇫🇴":"1f1eb-1f1f4","🇫🇷":"1f1eb-1f1f7","🇬🇦":"1f1ec-1f1e6","🇬🇧":"1f1ec-1f1e7","🇬🇩":"1f1ec-1f1e9","🇬🇪":"1f1ec-1f1ea","🇬🇫":"1f1ec-1f1eb","🇬🇬":"1f1ec-1f1ec","🇬🇭":"1f1ec-1f1ed","🇬🇮":"1f1ec-1f1ee","🇬🇱":"1f1ec-1f1f1","🇬🇲":"1f1ec-1f1f2","🇬🇳":"1f1ec-1f1f3","🇬🇵":"1f1ec-1f1f5","🇬🇶":"1f1ec-1f1f6","🇬🇷":"1f1ec-1f1f7","🇬🇸":"1f1ec-1f1f8","🇬🇹":"1f1ec-1f1f9","🇬🇺":"1f1ec-1f1fa","🇬🇼":"1f1ec-1f1fc","🇬🇾":"1f1ec-1f1fe","🇭🇰":"1f1ed-1f1f0","🇭🇲":"1f1ed-1f1f2","🇭🇳":"1f1ed-1f1f3","🇭🇷":"1f1ed-1f1f7","🇭🇹":"1f1ed-1f1f9","🇭🇺":"1f1ed-1f1fa","🇮🇨":"1f1ee-1f1e8","🇮🇩":"1f1ee-1f1e9","🇮🇪":"1f1ee-1f1ea","🇮🇱":"1f1ee-1f1f1","🇮🇲":"1f1ee-1f1f2","🇮🇳":"1f1ee-1f1f3","🇮🇴":"1f1ee-1f1f4","🇮🇶":"1f1ee-1f1f6","🇮🇷":"1f1ee-1f1f7","🇮🇸":"1f1ee-1f1f8","🇮🇹":"1f1ee-1f1f9","🇯🇪":"1f1ef-1f1ea","🇯🇲":"1f1ef-1f1f2","🇯🇴":"1f1ef-1f1f4","🇯🇵":"1f1ef-1f1f5","🇰🇪":"1f1f0-1f1ea","🇰🇬":"1f1f0-1f1ec","🇰🇭":"1f1f0-1f1ed","🇰🇮":"1f1f0-1f1ee","🇰🇲":"1f1f0-1f1f2","🇰🇳":"1f1f0-1f1f3","🇰🇵":"1f1f0-1f1f5","🇰🇷":"1f1f0-1f1f7","🇰🇼":"1f1f0-1f1fc","🇰🇾":"1f1f0-1f1fe","🇰🇿":"1f1f0-1f1ff","🇱🇦":"1f1f1-1f1e6","🇱🇧":"1f1f1-1f1e7","🇱🇨":"1f1f1-1f1e8","🇱🇮":"1f1f1-1f1ee","🇱🇰":"1f1f1-1f1f0","🇱🇷":"1f1f1-1f1f7","🇱🇸":"1f1f1-1f1f8","🇱🇹":"1f1f1-1f1f9","🇱🇺":"1f1f1-1f1fa","🇱🇻":"1f1f1-1f1fb","🇱🇾":"1f1f1-1f1fe","🇲🇦":"1f1f2-1f1e6","🇲🇨":"1f1f2-1f1e8","🇲🇩":"1f1f2-1f1e9","🇲🇪":"1f1f2-1f1ea","🇲🇫":"1f1f2-1f1eb","🇲🇬":"1f1f2-1f1ec","🇲🇭":"1f1f2-1f1ed","🇲🇰":"1f1f2-1f1f0","🇲🇱":"1f1f2-1f1f1","🇲🇲":"1f1f2-1f1f2","🇲🇳":"1f1f2-1f1f3","🇲🇴":"1f1f2-1f1f4","🇲🇵":"1f1f2-1f1f5","🇲🇶":"1f1f2-1f1f6","🇲🇷":"1f1f2-1f1f7","🇲🇸":"1f1f2-1f1f8","🇲🇹":"1f1f2-1f1f9","🇲🇺":"1f1f2-1f1fa","🇲🇻":"1f1f2-1f1fb","🇲🇼":"1f1f2-1f1fc","🇲🇽":"1f1f2-1f1fd","🇲🇾":"1f1f2-1f1fe","🇲🇿":"1f1f2-1f1ff","🇳🇦":"1f1f3-1f1e6","🇳🇨":"1f1f3-1f1e8","🇳🇪":"1f1f3-1f1ea","🇳🇫":"1f1f3-1f1eb","🇳🇬":"1f1f3-1f1ec","🇳🇮":"1f1f3-1f1ee","🇳🇱":"1f1f3-1f1f1","🇳🇴":"1f1f3-1f1f4","🇳🇵":"1f1f3-1f1f5","🇳🇷":"1f1f3-1f1f7","🇳🇺":"1f1f3-1f1fa","🇳🇿":"1f1f3-1f1ff","🇴🇲":"1f1f4-1f1f2","🇵🇦":"1f1f5-1f1e6","🇵🇪":"1f1f5-1f1ea","🇵🇫":"1f1f5-1f1eb","🇵🇬":"1f1f5-1f1ec","🇵🇭":"1f1f5-1f1ed","🇵🇰":"1f1f5-1f1f0","🇵🇱":"1f1f5-1f1f1","🇵🇲":"1f1f5-1f1f2","🇵🇳":"1f1f5-1f1f3","🇵🇷":"1f1f5-1f1f7","🇵🇸":"1f1f5-1f1f8","🇵🇹":"1f1f5-1f1f9","🇵🇼":"1f1f5-1f1fc","🇵🇾":"1f1f5-1f1fe","🇶🇦":"1f1f6-1f1e6","🇷🇪":"1f1f7-1f1ea","🇷🇴":"1f1f7-1f1f4","🇷🇸":"1f1f7-1f1f8","🇷🇺":"1f1f7-1f1fa","🇷🇼":"1f1f7-1f1fc","🇸🇦":"1f1f8-1f1e6","🇸🇧":"1f1f8-1f1e7","🇸🇨":"1f1f8-1f1e8","🇸🇩":"1f1f8-1f1e9","🇸🇪":"1f1f8-1f1ea","🇸🇬":"1f1f8-1f1ec","🇸🇭":"1f1f8-1f1ed","🇸🇮":"1f1f8-1f1ee","🇸🇯":"1f1f8-1f1ef","🇸🇰":"1f1f8-1f1f0","🇸🇱":"1f1f8-1f1f1","🇸🇲":"1f1f8-1f1f2","🇸🇳":"1f1f8-1f1f3","🇸🇴":"1f1f8-1f1f4","🇸🇷":"1f1f8-1f1f7","🇸🇸":"1f1f8-1f1f8","🇸🇹":"1f1f8-1f1f9","🇸🇻":"1f1f8-1f1fb","🇸🇽":"1f1f8-1f1fd","🇸🇾":"1f1f8-1f1fe","🇸🇿":"1f1f8-1f1ff","🇹🇦":"1f1f9-1f1e6","🇹🇨":"1f1f9-1f1e8","🇹🇩":"1f1f9-1f1e9","🇹🇫":"1f1f9-1f1eb","🇹🇬":"1f1f9-1f1ec","🇹🇭":"1f1f9-1f1ed","🇹🇯":"1f1f9-1f1ef","🇹🇰":"1f1f9-1f1f0","🇹🇱":"1f1f9-1f1f1","🇹🇲":"1f1f9-1f1f2","🇹🇳":"1f1f9-1f1f3","🇹🇴":"1f1f9-1f1f4","🇹🇷":"1f1f9-1f1f7","🇹🇹":"1f1f9-1f1f9","🇹🇻":"1f1f9-1f1fb","🇹🇼":"1f1f9-1f1fc","🇹🇿":"1f1f9-1f1ff","🇺🇦":"1f1fa-1f1e6","🇺🇬":"1f1fa-1f1ec","🇺🇲":"1f1fa-1f1f2","🇺🇳":"1f1fa-1f1f3","🇺🇸":"1f1fa-1f1f8","🇺🇾":"1f1fa-1f1fe","🇺🇿":"1f1fa-1f1ff","🇻🇦":"1f1fb-1f1e6","🇻🇨":"1f1fb-1f1e8","🇻🇪":"1f1fb-1f1ea","🇻🇬":"1f1fb-1f1ec","🇻🇮":"1f1fb-1f1ee","🇻🇳":"1f1fb-1f1f3","🇻🇺":"1f1fb-1f1fa","🇼🇫":"1f1fc-1f1eb","🇼🇸":"1f1fc-1f1f8","🇽🇰":"1f1fd-1f1f0","🇾🇪":"1f1fe-1f1ea","🇾🇹":"1f1fe-1f1f9","🇿🇦":"1f1ff-1f1e6","🇿🇲":"1f1ff-1f1f2","🇿🇼":"1f1ff-1f1fc","👁‍🗨":"1f441-200d-1f5e8","👱‍♂":"1f471-200d-2642-fe0f","👨‍🦰":"1f468-200d-1f9b0","👨‍🦱":"1f468-200d-1f9b1","👨‍🦳":"1f468-200d-1f9b3","👨‍🦲":"1f468-200d-1f9b2","👱‍♀":"1f471-200d-2640-fe0f","👩‍🦰":"1f469-200d-1f9b0","👩‍🦱":"1f469-200d-1f9b1","👩‍🦳":"1f469-200d-1f9b3","👩‍🦲":"1f469-200d-1f9b2","🙍‍♂":"1f64d-200d-2642-fe0f","🙍‍♀":"1f64d-200d-2640-fe0f","🙎‍♂":"1f64e-200d-2642-fe0f","🙎‍♀":"1f64e-200d-2640-fe0f","🙅‍♂":"1f645-200d-2642-fe0f","🙅‍♀":"1f645-200d-2640-fe0f","🙆‍♂":"1f646-200d-2642-fe0f","🙆‍♀":"1f646-200d-2640-fe0f","💁‍♂":"1f481-200d-2642-fe0f","💁‍♀":"1f481-200d-2640-fe0f","🙋‍♂":"1f64b-200d-2642-fe0f","🙋‍♀":"1f64b-200d-2640-fe0f","🧏‍♂":"1f9cf-200d-2642-fe0f","🧏‍♀":"1f9cf-200d-2640-fe0f","🙇‍♂":"1f647-200d-2642-fe0f","🙇‍♀":"1f647-200d-2640-fe0f","🤦‍♂":"1f926-200d-2642-fe0f","🤦‍♀":"1f926-200d-2640-fe0f","🤷‍♂":"1f937-200d-2642-fe0f","🤷‍♀":"1f937-200d-2640-fe0f","👨‍⚕":"1f468-200d-2695-fe0f","👩‍⚕":"1f469-200d-2695-fe0f","👨‍🎓":"1f468-200d-1f393","👩‍🎓":"1f469-200d-1f393","👨‍🏫":"1f468-200d-1f3eb","👩‍🏫":"1f469-200d-1f3eb","👨‍⚖":"1f468-200d-2696-fe0f","👩‍⚖":"1f469-200d-2696-fe0f","👨‍🌾":"1f468-200d-1f33e","👩‍🌾":"1f469-200d-1f33e","👨‍🍳":"1f468-200d-1f373","👩‍🍳":"1f469-200d-1f373","👨‍🔧":"1f468-200d-1f527","👩‍🔧":"1f469-200d-1f527","👨‍🏭":"1f468-200d-1f3ed","👩‍🏭":"1f469-200d-1f3ed","👨‍💼":"1f468-200d-1f4bc","👩‍💼":"1f469-200d-1f4bc","👨‍🔬":"1f468-200d-1f52c","👩‍🔬":"1f469-200d-1f52c","👨‍💻":"1f468-200d-1f4bb","👩‍💻":"1f469-200d-1f4bb","👨‍🎤":"1f468-200d-1f3a4","👩‍🎤":"1f469-200d-1f3a4","👨‍🎨":"1f468-200d-1f3a8","👩‍🎨":"1f469-200d-1f3a8","👨‍✈":"1f468-200d-2708-fe0f","👩‍✈":"1f469-200d-2708-fe0f","👨‍🚀":"1f468-200d-1f680","👩‍🚀":"1f469-200d-1f680","👨‍🚒":"1f468-200d-1f692","👩‍🚒":"1f469-200d-1f692","👮‍♂":"1f46e-200d-2642-fe0f","👮‍♀":"1f46e-200d-2640-fe0f","🕵‍♂":"1f575-fe0f-200d-2642-fe0f","🕵‍♀":"1f575-fe0f-200d-2640-fe0f","💂‍♂":"1f482-200d-2642-fe0f","💂‍♀":"1f482-200d-2640-fe0f","👷‍♂":"1f477-200d-2642-fe0f","👷‍♀":"1f477-200d-2640-fe0f","👳‍♂":"1f473-200d-2642-fe0f","👳‍♀":"1f473-200d-2640-fe0f","🦸‍♂":"1f9b8-200d-2642-fe0f","🦸‍♀":"1f9b8-200d-2640-fe0f","🦹‍♂":"1f9b9-200d-2642-fe0f","🦹‍♀":"1f9b9-200d-2640-fe0f","🧙‍♂":"1f9d9-200d-2642-fe0f","🧙‍♀":"1f9d9-200d-2640-fe0f","🧚‍♂":"1f9da-200d-2642-fe0f","🧚‍♀":"1f9da-200d-2640-fe0f","🧛‍♂":"1f9db-200d-2642-fe0f","🧛‍♀":"1f9db-200d-2640-fe0f","🧜‍♂":"1f9dc-200d-2642-fe0f","🧜‍♀":"1f9dc-200d-2640-fe0f","🧝‍♂":"1f9dd-200d-2642-fe0f","🧝‍♀":"1f9dd-200d-2640-fe0f","🧞‍♂":"1f9de-200d-2642-fe0f","🧞‍♀":"1f9de-200d-2640-fe0f","🧟‍♂":"1f9df-200d-2642-fe0f","🧟‍♀":"1f9df-200d-2640-fe0f","💆‍♂":"1f486-200d-2642-fe0f","💆‍♀":"1f486-200d-2640-fe0f","💇‍♂":"1f487-200d-2642-fe0f","💇‍♀":"1f487-200d-2640-fe0f","🚶‍♂":"1f6b6-200d-2642-fe0f","🚶‍♀":"1f6b6-200d-2640-fe0f","🧍‍♂":"1f9cd-200d-2642-fe0f","🧍‍♀":"1f9cd-200d-2640-fe0f","🧎‍♂":"1f9ce-200d-2642-fe0f","🧎‍♀":"1f9ce-200d-2640-fe0f","👨‍🦯":"1f468-200d-1f9af","👩‍🦯":"1f469-200d-1f9af","👨‍🦼":"1f468-200d-1f9bc","👩‍🦼":"1f469-200d-1f9bc","👨‍🦽":"1f468-200d-1f9bd","👩‍🦽":"1f469-200d-1f9bd","🏃‍♂":"1f3c3-200d-2642-fe0f","🏃‍♀":"1f3c3-200d-2640-fe0f","👯‍♂":"1f46f-200d-2642-fe0f","👯‍♀":"1f46f-200d-2640-fe0f","🧖‍♂":"1f9d6-200d-2642-fe0f","🧖‍♀":"1f9d6-200d-2640-fe0f","🧗‍♂":"1f9d7-200d-2642-fe0f","🧗‍♀":"1f9d7-200d-2640-fe0f","🏌‍♂":"1f3cc-fe0f-200d-2642-fe0f","🏌‍♀":"1f3cc-fe0f-200d-2640-fe0f","🏄‍♂":"1f3c4-200d-2642-fe0f","🏄‍♀":"1f3c4-200d-2640-fe0f","🚣‍♂":"1f6a3-200d-2642-fe0f","🚣‍♀":"1f6a3-200d-2640-fe0f","🏊‍♂":"1f3ca-200d-2642-fe0f","🏊‍♀":"1f3ca-200d-2640-fe0f","⛹‍♂":"26f9-fe0f-200d-2642-fe0f","⛹‍♀":"26f9-fe0f-200d-2640-fe0f","🏋‍♂":"1f3cb-fe0f-200d-2642-fe0f","🏋‍♀":"1f3cb-fe0f-200d-2640-fe0f","🚴‍♂":"1f6b4-200d-2642-fe0f","🚴‍♀":"1f6b4-200d-2640-fe0f","🚵‍♂":"1f6b5-200d-2642-fe0f","🚵‍♀":"1f6b5-200d-2640-fe0f","🤸‍♂":"1f938-200d-2642-fe0f","🤸‍♀":"1f938-200d-2640-fe0f","🤼‍♂":"1f93c-200d-2642-fe0f","🤼‍♀":"1f93c-200d-2640-fe0f","🤽‍♂":"1f93d-200d-2642-fe0f","🤽‍♀":"1f93d-200d-2640-fe0f","🤾‍♂":"1f93e-200d-2642-fe0f","🤾‍♀":"1f93e-200d-2640-fe0f","🤹‍♂":"1f939-200d-2642-fe0f","🤹‍♀":"1f939-200d-2640-fe0f","🧘‍♂":"1f9d8-200d-2642-fe0f","🧘‍♀":"1f9d8-200d-2640-fe0f","👨‍👦":"1f468-200d-1f466","👨‍👧":"1f468-200d-1f467","👩‍👦":"1f469-200d-1f466","👩‍👧":"1f469-200d-1f467","🐕‍🦺":"1f415-200d-1f9ba","#️⃣":"23-20e3","*️⃣":"2a-20e3","0️⃣":"30-20e3","1️⃣":"31-20e3","2️⃣":"32-20e3","3️⃣":"33-20e3","4️⃣":"34-20e3","5️⃣":"35-20e3","6️⃣":"36-20e3","7️⃣":"37-20e3","8️⃣":"38-20e3","9️⃣":"39-20e3","🏳‍🌈":"1f3f3-fe0f-200d-1f308","🏴‍☠":"1f3f4-200d-2620-fe0f","👁‍🗨️":"1f441-200d-1f5e8","👁️‍🗨":"1f441-200d-1f5e8","👱‍♂️":"1f471-200d-2642-fe0f","👱🏻‍♂":"1f471-1f3fb-200d-2642-fe0f","👱🏼‍♂":"1f471-1f3fc-200d-2642-fe0f","👱🏽‍♂":"1f471-1f3fd-200d-2642-fe0f","👱🏾‍♂":"1f471-1f3fe-200d-2642-fe0f","👱🏿‍♂":"1f471-1f3ff-200d-2642-fe0f","👨🏻‍🦰":"1f468-1f3fb-200d-1f9b0","👨🏼‍🦰":"1f468-1f3fc-200d-1f9b0","👨🏽‍🦰":"1f468-1f3fd-200d-1f9b0","👨🏾‍🦰":"1f468-1f3fe-200d-1f9b0","👨🏿‍🦰":"1f468-1f3ff-200d-1f9b0","👨🏻‍🦱":"1f468-1f3fb-200d-1f9b1","👨🏼‍🦱":"1f468-1f3fc-200d-1f9b1","👨🏽‍🦱":"1f468-1f3fd-200d-1f9b1","👨🏾‍🦱":"1f468-1f3fe-200d-1f9b1","👨🏿‍🦱":"1f468-1f3ff-200d-1f9b1","👨🏻‍🦳":"1f468-1f3fb-200d-1f9b3","👨🏼‍🦳":"1f468-1f3fc-200d-1f9b3","👨🏽‍🦳":"1f468-1f3fd-200d-1f9b3","👨🏾‍🦳":"1f468-1f3fe-200d-1f9b3","👨🏿‍🦳":"1f468-1f3ff-200d-1f9b3","👨🏻‍🦲":"1f468-1f3fb-200d-1f9b2","👨🏼‍🦲":"1f468-1f3fc-200d-1f9b2","👨🏽‍🦲":"1f468-1f3fd-200d-1f9b2","👨🏾‍🦲":"1f468-1f3fe-200d-1f9b2","👨🏿‍🦲":"1f468-1f3ff-200d-1f9b2","👱‍♀️":"1f471-200d-2640-fe0f","👱🏻‍♀":"1f471-1f3fb-200d-2640-fe0f","👱🏼‍♀":"1f471-1f3fc-200d-2640-fe0f","👱🏽‍♀":"1f471-1f3fd-200d-2640-fe0f","👱🏾‍♀":"1f471-1f3fe-200d-2640-fe0f","👱🏿‍♀":"1f471-1f3ff-200d-2640-fe0f","👩🏻‍🦰":"1f469-1f3fb-200d-1f9b0","👩🏼‍🦰":"1f469-1f3fc-200d-1f9b0","👩🏽‍🦰":"1f469-1f3fd-200d-1f9b0","👩🏾‍🦰":"1f469-1f3fe-200d-1f9b0","👩🏿‍🦰":"1f469-1f3ff-200d-1f9b0","👩🏻‍🦱":"1f469-1f3fb-200d-1f9b1","👩🏼‍🦱":"1f469-1f3fc-200d-1f9b1","👩🏽‍🦱":"1f469-1f3fd-200d-1f9b1","👩🏾‍🦱":"1f469-1f3fe-200d-1f9b1","👩🏿‍🦱":"1f469-1f3ff-200d-1f9b1","👩🏻‍🦳":"1f469-1f3fb-200d-1f9b3","👩🏼‍🦳":"1f469-1f3fc-200d-1f9b3","👩🏽‍🦳":"1f469-1f3fd-200d-1f9b3","👩🏾‍🦳":"1f469-1f3fe-200d-1f9b3","👩🏿‍🦳":"1f469-1f3ff-200d-1f9b3","👩🏻‍🦲":"1f469-1f3fb-200d-1f9b2","👩🏼‍🦲":"1f469-1f3fc-200d-1f9b2","👩🏽‍🦲":"1f469-1f3fd-200d-1f9b2","👩🏾‍🦲":"1f469-1f3fe-200d-1f9b2","👩🏿‍🦲":"1f469-1f3ff-200d-1f9b2","🙍‍♂️":"1f64d-200d-2642-fe0f","🙍🏻‍♂":"1f64d-1f3fb-200d-2642-fe0f","🙍🏼‍♂":"1f64d-1f3fc-200d-2642-fe0f","🙍🏽‍♂":"1f64d-1f3fd-200d-2642-fe0f","🙍🏾‍♂":"1f64d-1f3fe-200d-2642-fe0f","🙍🏿‍♂":"1f64d-1f3ff-200d-2642-fe0f","🙍‍♀️":"1f64d-200d-2640-fe0f","🙍🏻‍♀":"1f64d-1f3fb-200d-2640-fe0f","🙍🏼‍♀":"1f64d-1f3fc-200d-2640-fe0f","🙍🏽‍♀":"1f64d-1f3fd-200d-2640-fe0f","🙍🏾‍♀":"1f64d-1f3fe-200d-2640-fe0f","🙍🏿‍♀":"1f64d-1f3ff-200d-2640-fe0f","🙎‍♂️":"1f64e-200d-2642-fe0f","🙎🏻‍♂":"1f64e-1f3fb-200d-2642-fe0f","🙎🏼‍♂":"1f64e-1f3fc-200d-2642-fe0f","🙎🏽‍♂":"1f64e-1f3fd-200d-2642-fe0f","🙎🏾‍♂":"1f64e-1f3fe-200d-2642-fe0f","🙎🏿‍♂":"1f64e-1f3ff-200d-2642-fe0f","🙎‍♀️":"1f64e-200d-2640-fe0f","🙎🏻‍♀":"1f64e-1f3fb-200d-2640-fe0f","🙎🏼‍♀":"1f64e-1f3fc-200d-2640-fe0f","🙎🏽‍♀":"1f64e-1f3fd-200d-2640-fe0f","🙎🏾‍♀":"1f64e-1f3fe-200d-2640-fe0f","🙎🏿‍♀":"1f64e-1f3ff-200d-2640-fe0f","🙅‍♂️":"1f645-200d-2642-fe0f","🙅🏻‍♂":"1f645-1f3fb-200d-2642-fe0f","🙅🏼‍♂":"1f645-1f3fc-200d-2642-fe0f","🙅🏽‍♂":"1f645-1f3fd-200d-2642-fe0f","🙅🏾‍♂":"1f645-1f3fe-200d-2642-fe0f","🙅🏿‍♂":"1f645-1f3ff-200d-2642-fe0f","🙅‍♀️":"1f645-200d-2640-fe0f","🙅🏻‍♀":"1f645-1f3fb-200d-2640-fe0f","🙅🏼‍♀":"1f645-1f3fc-200d-2640-fe0f","🙅🏽‍♀":"1f645-1f3fd-200d-2640-fe0f","🙅🏾‍♀":"1f645-1f3fe-200d-2640-fe0f","🙅🏿‍♀":"1f645-1f3ff-200d-2640-fe0f","🙆‍♂️":"1f646-200d-2642-fe0f","🙆🏻‍♂":"1f646-1f3fb-200d-2642-fe0f","🙆🏼‍♂":"1f646-1f3fc-200d-2642-fe0f","🙆🏽‍♂":"1f646-1f3fd-200d-2642-fe0f","🙆🏾‍♂":"1f646-1f3fe-200d-2642-fe0f","🙆🏿‍♂":"1f646-1f3ff-200d-2642-fe0f","🙆‍♀️":"1f646-200d-2640-fe0f","🙆🏻‍♀":"1f646-1f3fb-200d-2640-fe0f","🙆🏼‍♀":"1f646-1f3fc-200d-2640-fe0f","🙆🏽‍♀":"1f646-1f3fd-200d-2640-fe0f","🙆🏾‍♀":"1f646-1f3fe-200d-2640-fe0f","🙆🏿‍♀":"1f646-1f3ff-200d-2640-fe0f","💁‍♂️":"1f481-200d-2642-fe0f","💁🏻‍♂":"1f481-1f3fb-200d-2642-fe0f","💁🏼‍♂":"1f481-1f3fc-200d-2642-fe0f","💁🏽‍♂":"1f481-1f3fd-200d-2642-fe0f","💁🏾‍♂":"1f481-1f3fe-200d-2642-fe0f","💁🏿‍♂":"1f481-1f3ff-200d-2642-fe0f","💁‍♀️":"1f481-200d-2640-fe0f","💁🏻‍♀":"1f481-1f3fb-200d-2640-fe0f","💁🏼‍♀":"1f481-1f3fc-200d-2640-fe0f","💁🏽‍♀":"1f481-1f3fd-200d-2640-fe0f","💁🏾‍♀":"1f481-1f3fe-200d-2640-fe0f","💁🏿‍♀":"1f481-1f3ff-200d-2640-fe0f","🙋‍♂️":"1f64b-200d-2642-fe0f","🙋🏻‍♂":"1f64b-1f3fb-200d-2642-fe0f","🙋🏼‍♂":"1f64b-1f3fc-200d-2642-fe0f","🙋🏽‍♂":"1f64b-1f3fd-200d-2642-fe0f","🙋🏾‍♂":"1f64b-1f3fe-200d-2642-fe0f","🙋🏿‍♂":"1f64b-1f3ff-200d-2642-fe0f","🙋‍♀️":"1f64b-200d-2640-fe0f","🙋🏻‍♀":"1f64b-1f3fb-200d-2640-fe0f","🙋🏼‍♀":"1f64b-1f3fc-200d-2640-fe0f","🙋🏽‍♀":"1f64b-1f3fd-200d-2640-fe0f","🙋🏾‍♀":"1f64b-1f3fe-200d-2640-fe0f","🙋🏿‍♀":"1f64b-1f3ff-200d-2640-fe0f","🧏‍♂️":"1f9cf-200d-2642-fe0f","🧏🏻‍♂":"1f9cf-1f3fb-200d-2642-fe0f","🧏🏼‍♂":"1f9cf-1f3fc-200d-2642-fe0f","🧏🏽‍♂":"1f9cf-1f3fd-200d-2642-fe0f","🧏🏾‍♂":"1f9cf-1f3fe-200d-2642-fe0f","🧏🏿‍♂":"1f9cf-1f3ff-200d-2642-fe0f","🧏‍♀️":"1f9cf-200d-2640-fe0f","🧏🏻‍♀":"1f9cf-1f3fb-200d-2640-fe0f","🧏🏼‍♀":"1f9cf-1f3fc-200d-2640-fe0f","🧏🏽‍♀":"1f9cf-1f3fd-200d-2640-fe0f","🧏🏾‍♀":"1f9cf-1f3fe-200d-2640-fe0f","🧏🏿‍♀":"1f9cf-1f3ff-200d-2640-fe0f","🙇‍♂️":"1f647-200d-2642-fe0f","🙇🏻‍♂":"1f647-1f3fb-200d-2642-fe0f","🙇🏼‍♂":"1f647-1f3fc-200d-2642-fe0f","🙇🏽‍♂":"1f647-1f3fd-200d-2642-fe0f","🙇🏾‍♂":"1f647-1f3fe-200d-2642-fe0f","🙇🏿‍♂":"1f647-1f3ff-200d-2642-fe0f","🙇‍♀️":"1f647-200d-2640-fe0f","🙇🏻‍♀":"1f647-1f3fb-200d-2640-fe0f","🙇🏼‍♀":"1f647-1f3fc-200d-2640-fe0f","🙇🏽‍♀":"1f647-1f3fd-200d-2640-fe0f","🙇🏾‍♀":"1f647-1f3fe-200d-2640-fe0f","🙇🏿‍♀":"1f647-1f3ff-200d-2640-fe0f","🤦‍♂️":"1f926-200d-2642-fe0f","🤦🏻‍♂":"1f926-1f3fb-200d-2642-fe0f","🤦🏼‍♂":"1f926-1f3fc-200d-2642-fe0f","🤦🏽‍♂":"1f926-1f3fd-200d-2642-fe0f","🤦🏾‍♂":"1f926-1f3fe-200d-2642-fe0f","🤦🏿‍♂":"1f926-1f3ff-200d-2642-fe0f","🤦‍♀️":"1f926-200d-2640-fe0f","🤦🏻‍♀":"1f926-1f3fb-200d-2640-fe0f","🤦🏼‍♀":"1f926-1f3fc-200d-2640-fe0f","🤦🏽‍♀":"1f926-1f3fd-200d-2640-fe0f","🤦🏾‍♀":"1f926-1f3fe-200d-2640-fe0f","🤦🏿‍♀":"1f926-1f3ff-200d-2640-fe0f","🤷‍♂️":"1f937-200d-2642-fe0f","🤷🏻‍♂":"1f937-1f3fb-200d-2642-fe0f","🤷🏼‍♂":"1f937-1f3fc-200d-2642-fe0f","🤷🏽‍♂":"1f937-1f3fd-200d-2642-fe0f","🤷🏾‍♂":"1f937-1f3fe-200d-2642-fe0f","🤷🏿‍♂":"1f937-1f3ff-200d-2642-fe0f","🤷‍♀️":"1f937-200d-2640-fe0f","🤷🏻‍♀":"1f937-1f3fb-200d-2640-fe0f","🤷🏼‍♀":"1f937-1f3fc-200d-2640-fe0f","🤷🏽‍♀":"1f937-1f3fd-200d-2640-fe0f","🤷🏾‍♀":"1f937-1f3fe-200d-2640-fe0f","🤷🏿‍♀":"1f937-1f3ff-200d-2640-fe0f","👨‍⚕️":"1f468-200d-2695-fe0f","👨🏻‍⚕":"1f468-1f3fb-200d-2695-fe0f","👨🏼‍⚕":"1f468-1f3fc-200d-2695-fe0f","👨🏽‍⚕":"1f468-1f3fd-200d-2695-fe0f","👨🏾‍⚕":"1f468-1f3fe-200d-2695-fe0f","👨🏿‍⚕":"1f468-1f3ff-200d-2695-fe0f","👩‍⚕️":"1f469-200d-2695-fe0f","👩🏻‍⚕":"1f469-1f3fb-200d-2695-fe0f","👩🏼‍⚕":"1f469-1f3fc-200d-2695-fe0f","👩🏽‍⚕":"1f469-1f3fd-200d-2695-fe0f","👩🏾‍⚕":"1f469-1f3fe-200d-2695-fe0f","👩🏿‍⚕":"1f469-1f3ff-200d-2695-fe0f","👨🏻‍🎓":"1f468-1f3fb-200d-1f393","👨🏼‍🎓":"1f468-1f3fc-200d-1f393","👨🏽‍🎓":"1f468-1f3fd-200d-1f393","👨🏾‍🎓":"1f468-1f3fe-200d-1f393","👨🏿‍🎓":"1f468-1f3ff-200d-1f393","👩🏻‍🎓":"1f469-1f3fb-200d-1f393","👩🏼‍🎓":"1f469-1f3fc-200d-1f393","👩🏽‍🎓":"1f469-1f3fd-200d-1f393","👩🏾‍🎓":"1f469-1f3fe-200d-1f393","👩🏿‍🎓":"1f469-1f3ff-200d-1f393","👨🏻‍🏫":"1f468-1f3fb-200d-1f3eb","👨🏼‍🏫":"1f468-1f3fc-200d-1f3eb","👨🏽‍🏫":"1f468-1f3fd-200d-1f3eb","👨🏾‍🏫":"1f468-1f3fe-200d-1f3eb","👨🏿‍🏫":"1f468-1f3ff-200d-1f3eb","👩🏻‍🏫":"1f469-1f3fb-200d-1f3eb","👩🏼‍🏫":"1f469-1f3fc-200d-1f3eb","👩🏽‍🏫":"1f469-1f3fd-200d-1f3eb","👩🏾‍🏫":"1f469-1f3fe-200d-1f3eb","👩🏿‍🏫":"1f469-1f3ff-200d-1f3eb","👨‍⚖️":"1f468-200d-2696-fe0f","👨🏻‍⚖":"1f468-1f3fb-200d-2696-fe0f","👨🏼‍⚖":"1f468-1f3fc-200d-2696-fe0f","👨🏽‍⚖":"1f468-1f3fd-200d-2696-fe0f","👨🏾‍⚖":"1f468-1f3fe-200d-2696-fe0f","👨🏿‍⚖":"1f468-1f3ff-200d-2696-fe0f","👩‍⚖️":"1f469-200d-2696-fe0f","👩🏻‍⚖":"1f469-1f3fb-200d-2696-fe0f","👩🏼‍⚖":"1f469-1f3fc-200d-2696-fe0f","👩🏽‍⚖":"1f469-1f3fd-200d-2696-fe0f","👩🏾‍⚖":"1f469-1f3fe-200d-2696-fe0f","👩🏿‍⚖":"1f469-1f3ff-200d-2696-fe0f","👨🏻‍🌾":"1f468-1f3fb-200d-1f33e","👨🏼‍🌾":"1f468-1f3fc-200d-1f33e","👨🏽‍🌾":"1f468-1f3fd-200d-1f33e","👨🏾‍🌾":"1f468-1f3fe-200d-1f33e","👨🏿‍🌾":"1f468-1f3ff-200d-1f33e","👩🏻‍🌾":"1f469-1f3fb-200d-1f33e","👩🏼‍🌾":"1f469-1f3fc-200d-1f33e","👩🏽‍🌾":"1f469-1f3fd-200d-1f33e","👩🏾‍🌾":"1f469-1f3fe-200d-1f33e","👩🏿‍🌾":"1f469-1f3ff-200d-1f33e","👨🏻‍🍳":"1f468-1f3fb-200d-1f373","👨🏼‍🍳":"1f468-1f3fc-200d-1f373","👨🏽‍🍳":"1f468-1f3fd-200d-1f373","👨🏾‍🍳":"1f468-1f3fe-200d-1f373","👨🏿‍🍳":"1f468-1f3ff-200d-1f373","👩🏻‍🍳":"1f469-1f3fb-200d-1f373","👩🏼‍🍳":"1f469-1f3fc-200d-1f373","👩🏽‍🍳":"1f469-1f3fd-200d-1f373","👩🏾‍🍳":"1f469-1f3fe-200d-1f373","👩🏿‍🍳":"1f469-1f3ff-200d-1f373","👨🏻‍🔧":"1f468-1f3fb-200d-1f527","👨🏼‍🔧":"1f468-1f3fc-200d-1f527","👨🏽‍🔧":"1f468-1f3fd-200d-1f527","👨🏾‍🔧":"1f468-1f3fe-200d-1f527","👨🏿‍🔧":"1f468-1f3ff-200d-1f527","👩🏻‍🔧":"1f469-1f3fb-200d-1f527","👩🏼‍🔧":"1f469-1f3fc-200d-1f527","👩🏽‍🔧":"1f469-1f3fd-200d-1f527","👩🏾‍🔧":"1f469-1f3fe-200d-1f527","👩🏿‍🔧":"1f469-1f3ff-200d-1f527","👨🏻‍🏭":"1f468-1f3fb-200d-1f3ed","👨🏼‍🏭":"1f468-1f3fc-200d-1f3ed","👨🏽‍🏭":"1f468-1f3fd-200d-1f3ed","👨🏾‍🏭":"1f468-1f3fe-200d-1f3ed","👨🏿‍🏭":"1f468-1f3ff-200d-1f3ed","👩🏻‍🏭":"1f469-1f3fb-200d-1f3ed","👩🏼‍🏭":"1f469-1f3fc-200d-1f3ed","👩🏽‍🏭":"1f469-1f3fd-200d-1f3ed","👩🏾‍🏭":"1f469-1f3fe-200d-1f3ed","👩🏿‍🏭":"1f469-1f3ff-200d-1f3ed","👨🏻‍💼":"1f468-1f3fb-200d-1f4bc","👨🏼‍💼":"1f468-1f3fc-200d-1f4bc","👨🏽‍💼":"1f468-1f3fd-200d-1f4bc","👨🏾‍💼":"1f468-1f3fe-200d-1f4bc","👨🏿‍💼":"1f468-1f3ff-200d-1f4bc","👩🏻‍💼":"1f469-1f3fb-200d-1f4bc","👩🏼‍💼":"1f469-1f3fc-200d-1f4bc","👩🏽‍💼":"1f469-1f3fd-200d-1f4bc","👩🏾‍💼":"1f469-1f3fe-200d-1f4bc","👩🏿‍💼":"1f469-1f3ff-200d-1f4bc","👨🏻‍🔬":"1f468-1f3fb-200d-1f52c","👨🏼‍🔬":"1f468-1f3fc-200d-1f52c","👨🏽‍🔬":"1f468-1f3fd-200d-1f52c","👨🏾‍🔬":"1f468-1f3fe-200d-1f52c","👨🏿‍🔬":"1f468-1f3ff-200d-1f52c","👩🏻‍🔬":"1f469-1f3fb-200d-1f52c","👩🏼‍🔬":"1f469-1f3fc-200d-1f52c","👩🏽‍🔬":"1f469-1f3fd-200d-1f52c","👩🏾‍🔬":"1f469-1f3fe-200d-1f52c","👩🏿‍🔬":"1f469-1f3ff-200d-1f52c","👨🏻‍💻":"1f468-1f3fb-200d-1f4bb","👨🏼‍💻":"1f468-1f3fc-200d-1f4bb","👨🏽‍💻":"1f468-1f3fd-200d-1f4bb","👨🏾‍💻":"1f468-1f3fe-200d-1f4bb","👨🏿‍💻":"1f468-1f3ff-200d-1f4bb","👩🏻‍💻":"1f469-1f3fb-200d-1f4bb","👩🏼‍💻":"1f469-1f3fc-200d-1f4bb","👩🏽‍💻":"1f469-1f3fd-200d-1f4bb","👩🏾‍💻":"1f469-1f3fe-200d-1f4bb","👩🏿‍💻":"1f469-1f3ff-200d-1f4bb","👨🏻‍🎤":"1f468-1f3fb-200d-1f3a4","👨🏼‍🎤":"1f468-1f3fc-200d-1f3a4","👨🏽‍🎤":"1f468-1f3fd-200d-1f3a4","👨🏾‍🎤":"1f468-1f3fe-200d-1f3a4","👨🏿‍🎤":"1f468-1f3ff-200d-1f3a4","👩🏻‍🎤":"1f469-1f3fb-200d-1f3a4","👩🏼‍🎤":"1f469-1f3fc-200d-1f3a4","👩🏽‍🎤":"1f469-1f3fd-200d-1f3a4","👩🏾‍🎤":"1f469-1f3fe-200d-1f3a4","👩🏿‍🎤":"1f469-1f3ff-200d-1f3a4","👨🏻‍🎨":"1f468-1f3fb-200d-1f3a8","👨🏼‍🎨":"1f468-1f3fc-200d-1f3a8","👨🏽‍🎨":"1f468-1f3fd-200d-1f3a8","👨🏾‍🎨":"1f468-1f3fe-200d-1f3a8","👨🏿‍🎨":"1f468-1f3ff-200d-1f3a8","👩🏻‍🎨":"1f469-1f3fb-200d-1f3a8","👩🏼‍🎨":"1f469-1f3fc-200d-1f3a8","👩🏽‍🎨":"1f469-1f3fd-200d-1f3a8","👩🏾‍🎨":"1f469-1f3fe-200d-1f3a8","👩🏿‍🎨":"1f469-1f3ff-200d-1f3a8","👨‍✈️":"1f468-200d-2708-fe0f","👨🏻‍✈":"1f468-1f3fb-200d-2708-fe0f","👨🏼‍✈":"1f468-1f3fc-200d-2708-fe0f","👨🏽‍✈":"1f468-1f3fd-200d-2708-fe0f","👨🏾‍✈":"1f468-1f3fe-200d-2708-fe0f","👨🏿‍✈":"1f468-1f3ff-200d-2708-fe0f","👩‍✈️":"1f469-200d-2708-fe0f","👩🏻‍✈":"1f469-1f3fb-200d-2708-fe0f","👩🏼‍✈":"1f469-1f3fc-200d-2708-fe0f","👩🏽‍✈":"1f469-1f3fd-200d-2708-fe0f","👩🏾‍✈":"1f469-1f3fe-200d-2708-fe0f","👩🏿‍✈":"1f469-1f3ff-200d-2708-fe0f","👨🏻‍🚀":"1f468-1f3fb-200d-1f680","👨🏼‍🚀":"1f468-1f3fc-200d-1f680","👨🏽‍🚀":"1f468-1f3fd-200d-1f680","👨🏾‍🚀":"1f468-1f3fe-200d-1f680","👨🏿‍🚀":"1f468-1f3ff-200d-1f680","👩🏻‍🚀":"1f469-1f3fb-200d-1f680","👩🏼‍🚀":"1f469-1f3fc-200d-1f680","👩🏽‍🚀":"1f469-1f3fd-200d-1f680","👩🏾‍🚀":"1f469-1f3fe-200d-1f680","👩🏿‍🚀":"1f469-1f3ff-200d-1f680","👨🏻‍🚒":"1f468-1f3fb-200d-1f692","👨🏼‍🚒":"1f468-1f3fc-200d-1f692","👨🏽‍🚒":"1f468-1f3fd-200d-1f692","👨🏾‍🚒":"1f468-1f3fe-200d-1f692","👨🏿‍🚒":"1f468-1f3ff-200d-1f692","👩🏻‍🚒":"1f469-1f3fb-200d-1f692","👩🏼‍🚒":"1f469-1f3fc-200d-1f692","👩🏽‍🚒":"1f469-1f3fd-200d-1f692","👩🏾‍🚒":"1f469-1f3fe-200d-1f692","👩🏿‍🚒":"1f469-1f3ff-200d-1f692","👮‍♂️":"1f46e-200d-2642-fe0f","👮🏻‍♂":"1f46e-1f3fb-200d-2642-fe0f","👮🏼‍♂":"1f46e-1f3fc-200d-2642-fe0f","👮🏽‍♂":"1f46e-1f3fd-200d-2642-fe0f","👮🏾‍♂":"1f46e-1f3fe-200d-2642-fe0f","👮🏿‍♂":"1f46e-1f3ff-200d-2642-fe0f","👮‍♀️":"1f46e-200d-2640-fe0f","👮🏻‍♀":"1f46e-1f3fb-200d-2640-fe0f","👮🏼‍♀":"1f46e-1f3fc-200d-2640-fe0f","👮🏽‍♀":"1f46e-1f3fd-200d-2640-fe0f","👮🏾‍♀":"1f46e-1f3fe-200d-2640-fe0f","👮🏿‍♀":"1f46e-1f3ff-200d-2640-fe0f","🕵‍♂️":"1f575-fe0f-200d-2642-fe0f","🕵️‍♂":"1f575-fe0f-200d-2642-fe0f","🕵🏻‍♂":"1f575-1f3fb-200d-2642-fe0f","🕵🏼‍♂":"1f575-1f3fc-200d-2642-fe0f","🕵🏽‍♂":"1f575-1f3fd-200d-2642-fe0f","🕵🏾‍♂":"1f575-1f3fe-200d-2642-fe0f","🕵🏿‍♂":"1f575-1f3ff-200d-2642-fe0f","🕵‍♀️":"1f575-fe0f-200d-2640-fe0f","🕵️‍♀":"1f575-fe0f-200d-2640-fe0f","🕵🏻‍♀":"1f575-1f3fb-200d-2640-fe0f","🕵🏼‍♀":"1f575-1f3fc-200d-2640-fe0f","🕵🏽‍♀":"1f575-1f3fd-200d-2640-fe0f","🕵🏾‍♀":"1f575-1f3fe-200d-2640-fe0f","🕵🏿‍♀":"1f575-1f3ff-200d-2640-fe0f","💂‍♂️":"1f482-200d-2642-fe0f","💂🏻‍♂":"1f482-1f3fb-200d-2642-fe0f","💂🏼‍♂":"1f482-1f3fc-200d-2642-fe0f","💂🏽‍♂":"1f482-1f3fd-200d-2642-fe0f","💂🏾‍♂":"1f482-1f3fe-200d-2642-fe0f","💂🏿‍♂":"1f482-1f3ff-200d-2642-fe0f","💂‍♀️":"1f482-200d-2640-fe0f","💂🏻‍♀":"1f482-1f3fb-200d-2640-fe0f","💂🏼‍♀":"1f482-1f3fc-200d-2640-fe0f","💂🏽‍♀":"1f482-1f3fd-200d-2640-fe0f","💂🏾‍♀":"1f482-1f3fe-200d-2640-fe0f","💂🏿‍♀":"1f482-1f3ff-200d-2640-fe0f","👷‍♂️":"1f477-200d-2642-fe0f","👷🏻‍♂":"1f477-1f3fb-200d-2642-fe0f","👷🏼‍♂":"1f477-1f3fc-200d-2642-fe0f","👷🏽‍♂":"1f477-1f3fd-200d-2642-fe0f","👷🏾‍♂":"1f477-1f3fe-200d-2642-fe0f","👷🏿‍♂":"1f477-1f3ff-200d-2642-fe0f","👷‍♀️":"1f477-200d-2640-fe0f","👷🏻‍♀":"1f477-1f3fb-200d-2640-fe0f","👷🏼‍♀":"1f477-1f3fc-200d-2640-fe0f","👷🏽‍♀":"1f477-1f3fd-200d-2640-fe0f","👷🏾‍♀":"1f477-1f3fe-200d-2640-fe0f","👷🏿‍♀":"1f477-1f3ff-200d-2640-fe0f","👳‍♂️":"1f473-200d-2642-fe0f","👳🏻‍♂":"1f473-1f3fb-200d-2642-fe0f","👳🏼‍♂":"1f473-1f3fc-200d-2642-fe0f","👳🏽‍♂":"1f473-1f3fd-200d-2642-fe0f","👳🏾‍♂":"1f473-1f3fe-200d-2642-fe0f","👳🏿‍♂":"1f473-1f3ff-200d-2642-fe0f","👳‍♀️":"1f473-200d-2640-fe0f","👳🏻‍♀":"1f473-1f3fb-200d-2640-fe0f","👳🏼‍♀":"1f473-1f3fc-200d-2640-fe0f","👳🏽‍♀":"1f473-1f3fd-200d-2640-fe0f","👳🏾‍♀":"1f473-1f3fe-200d-2640-fe0f","👳🏿‍♀":"1f473-1f3ff-200d-2640-fe0f","🦸‍♂️":"1f9b8-200d-2642-fe0f","🦸🏻‍♂":"1f9b8-1f3fb-200d-2642-fe0f","🦸🏼‍♂":"1f9b8-1f3fc-200d-2642-fe0f","🦸🏽‍♂":"1f9b8-1f3fd-200d-2642-fe0f","🦸🏾‍♂":"1f9b8-1f3fe-200d-2642-fe0f","🦸🏿‍♂":"1f9b8-1f3ff-200d-2642-fe0f","🦸‍♀️":"1f9b8-200d-2640-fe0f","🦸🏻‍♀":"1f9b8-1f3fb-200d-2640-fe0f","🦸🏼‍♀":"1f9b8-1f3fc-200d-2640-fe0f","🦸🏽‍♀":"1f9b8-1f3fd-200d-2640-fe0f","🦸🏾‍♀":"1f9b8-1f3fe-200d-2640-fe0f","🦸🏿‍♀":"1f9b8-1f3ff-200d-2640-fe0f","🦹‍♂️":"1f9b9-200d-2642-fe0f","🦹🏻‍♂":"1f9b9-1f3fb-200d-2642-fe0f","🦹🏼‍♂":"1f9b9-1f3fc-200d-2642-fe0f","🦹🏽‍♂":"1f9b9-1f3fd-200d-2642-fe0f","🦹🏾‍♂":"1f9b9-1f3fe-200d-2642-fe0f","🦹🏿‍♂":"1f9b9-1f3ff-200d-2642-fe0f","🦹‍♀️":"1f9b9-200d-2640-fe0f","🦹🏻‍♀":"1f9b9-1f3fb-200d-2640-fe0f","🦹🏼‍♀":"1f9b9-1f3fc-200d-2640-fe0f","🦹🏽‍♀":"1f9b9-1f3fd-200d-2640-fe0f","🦹🏾‍♀":"1f9b9-1f3fe-200d-2640-fe0f","🦹🏿‍♀":"1f9b9-1f3ff-200d-2640-fe0f","🧙‍♂️":"1f9d9-200d-2642-fe0f","🧙🏻‍♂":"1f9d9-1f3fb-200d-2642-fe0f","🧙🏼‍♂":"1f9d9-1f3fc-200d-2642-fe0f","🧙🏽‍♂":"1f9d9-1f3fd-200d-2642-fe0f","🧙🏾‍♂":"1f9d9-1f3fe-200d-2642-fe0f","🧙🏿‍♂":"1f9d9-1f3ff-200d-2642-fe0f","🧙‍♀️":"1f9d9-200d-2640-fe0f","🧙🏻‍♀":"1f9d9-1f3fb-200d-2640-fe0f","🧙🏼‍♀":"1f9d9-1f3fc-200d-2640-fe0f","🧙🏽‍♀":"1f9d9-1f3fd-200d-2640-fe0f","🧙🏾‍♀":"1f9d9-1f3fe-200d-2640-fe0f","🧙🏿‍♀":"1f9d9-1f3ff-200d-2640-fe0f","🧚‍♂️":"1f9da-200d-2642-fe0f","🧚🏻‍♂":"1f9da-1f3fb-200d-2642-fe0f","🧚🏼‍♂":"1f9da-1f3fc-200d-2642-fe0f","🧚🏽‍♂":"1f9da-1f3fd-200d-2642-fe0f","🧚🏾‍♂":"1f9da-1f3fe-200d-2642-fe0f","🧚🏿‍♂":"1f9da-1f3ff-200d-2642-fe0f","🧚‍♀️":"1f9da-200d-2640-fe0f","🧚🏻‍♀":"1f9da-1f3fb-200d-2640-fe0f","🧚🏼‍♀":"1f9da-1f3fc-200d-2640-fe0f","🧚🏽‍♀":"1f9da-1f3fd-200d-2640-fe0f","🧚🏾‍♀":"1f9da-1f3fe-200d-2640-fe0f","🧚🏿‍♀":"1f9da-1f3ff-200d-2640-fe0f","🧛‍♂️":"1f9db-200d-2642-fe0f","🧛🏻‍♂":"1f9db-1f3fb-200d-2642-fe0f","🧛🏼‍♂":"1f9db-1f3fc-200d-2642-fe0f","🧛🏽‍♂":"1f9db-1f3fd-200d-2642-fe0f","🧛🏾‍♂":"1f9db-1f3fe-200d-2642-fe0f","🧛🏿‍♂":"1f9db-1f3ff-200d-2642-fe0f","🧛‍♀️":"1f9db-200d-2640-fe0f","🧛🏻‍♀":"1f9db-1f3fb-200d-2640-fe0f","🧛🏼‍♀":"1f9db-1f3fc-200d-2640-fe0f","🧛🏽‍♀":"1f9db-1f3fd-200d-2640-fe0f","🧛🏾‍♀":"1f9db-1f3fe-200d-2640-fe0f","🧛🏿‍♀":"1f9db-1f3ff-200d-2640-fe0f","🧜‍♂️":"1f9dc-200d-2642-fe0f","🧜🏻‍♂":"1f9dc-1f3fb-200d-2642-fe0f","🧜🏼‍♂":"1f9dc-1f3fc-200d-2642-fe0f","🧜🏽‍♂":"1f9dc-1f3fd-200d-2642-fe0f","🧜🏾‍♂":"1f9dc-1f3fe-200d-2642-fe0f","🧜🏿‍♂":"1f9dc-1f3ff-200d-2642-fe0f","🧜‍♀️":"1f9dc-200d-2640-fe0f","🧜🏻‍♀":"1f9dc-1f3fb-200d-2640-fe0f","🧜🏼‍♀":"1f9dc-1f3fc-200d-2640-fe0f","🧜🏽‍♀":"1f9dc-1f3fd-200d-2640-fe0f","🧜🏾‍♀":"1f9dc-1f3fe-200d-2640-fe0f","🧜🏿‍♀":"1f9dc-1f3ff-200d-2640-fe0f","🧝‍♂️":"1f9dd-200d-2642-fe0f","🧝🏻‍♂":"1f9dd-1f3fb-200d-2642-fe0f","🧝🏼‍♂":"1f9dd-1f3fc-200d-2642-fe0f","🧝🏽‍♂":"1f9dd-1f3fd-200d-2642-fe0f","🧝🏾‍♂":"1f9dd-1f3fe-200d-2642-fe0f","🧝🏿‍♂":"1f9dd-1f3ff-200d-2642-fe0f","🧝‍♀️":"1f9dd-200d-2640-fe0f","🧝🏻‍♀":"1f9dd-1f3fb-200d-2640-fe0f","🧝🏼‍♀":"1f9dd-1f3fc-200d-2640-fe0f","🧝🏽‍♀":"1f9dd-1f3fd-200d-2640-fe0f","🧝🏾‍♀":"1f9dd-1f3fe-200d-2640-fe0f","🧝🏿‍♀":"1f9dd-1f3ff-200d-2640-fe0f","🧞‍♂️":"1f9de-200d-2642-fe0f","🧞‍♀️":"1f9de-200d-2640-fe0f","🧟‍♂️":"1f9df-200d-2642-fe0f","🧟‍♀️":"1f9df-200d-2640-fe0f","💆‍♂️":"1f486-200d-2642-fe0f","💆🏻‍♂":"1f486-1f3fb-200d-2642-fe0f","💆🏼‍♂":"1f486-1f3fc-200d-2642-fe0f","💆🏽‍♂":"1f486-1f3fd-200d-2642-fe0f","💆🏾‍♂":"1f486-1f3fe-200d-2642-fe0f","💆🏿‍♂":"1f486-1f3ff-200d-2642-fe0f","💆‍♀️":"1f486-200d-2640-fe0f","💆🏻‍♀":"1f486-1f3fb-200d-2640-fe0f","💆🏼‍♀":"1f486-1f3fc-200d-2640-fe0f","💆🏽‍♀":"1f486-1f3fd-200d-2640-fe0f","💆🏾‍♀":"1f486-1f3fe-200d-2640-fe0f","💆🏿‍♀":"1f486-1f3ff-200d-2640-fe0f","💇‍♂️":"1f487-200d-2642-fe0f","💇🏻‍♂":"1f487-1f3fb-200d-2642-fe0f","💇🏼‍♂":"1f487-1f3fc-200d-2642-fe0f","💇🏽‍♂":"1f487-1f3fd-200d-2642-fe0f","💇🏾‍♂":"1f487-1f3fe-200d-2642-fe0f","💇🏿‍♂":"1f487-1f3ff-200d-2642-fe0f","💇‍♀️":"1f487-200d-2640-fe0f","💇🏻‍♀":"1f487-1f3fb-200d-2640-fe0f","💇🏼‍♀":"1f487-1f3fc-200d-2640-fe0f","💇🏽‍♀":"1f487-1f3fd-200d-2640-fe0f","💇🏾‍♀":"1f487-1f3fe-200d-2640-fe0f","💇🏿‍♀":"1f487-1f3ff-200d-2640-fe0f","🚶‍♂️":"1f6b6-200d-2642-fe0f","🚶🏻‍♂":"1f6b6-1f3fb-200d-2642-fe0f","🚶🏼‍♂":"1f6b6-1f3fc-200d-2642-fe0f","🚶🏽‍♂":"1f6b6-1f3fd-200d-2642-fe0f","🚶🏾‍♂":"1f6b6-1f3fe-200d-2642-fe0f","🚶🏿‍♂":"1f6b6-1f3ff-200d-2642-fe0f","🚶‍♀️":"1f6b6-200d-2640-fe0f","🚶🏻‍♀":"1f6b6-1f3fb-200d-2640-fe0f","🚶🏼‍♀":"1f6b6-1f3fc-200d-2640-fe0f","🚶🏽‍♀":"1f6b6-1f3fd-200d-2640-fe0f","🚶🏾‍♀":"1f6b6-1f3fe-200d-2640-fe0f","🚶🏿‍♀":"1f6b6-1f3ff-200d-2640-fe0f","🧍‍♂️":"1f9cd-200d-2642-fe0f","🧍🏻‍♂":"1f9cd-1f3fb-200d-2642-fe0f","🧍🏼‍♂":"1f9cd-1f3fc-200d-2642-fe0f","🧍🏽‍♂":"1f9cd-1f3fd-200d-2642-fe0f","🧍🏾‍♂":"1f9cd-1f3fe-200d-2642-fe0f","🧍🏿‍♂":"1f9cd-1f3ff-200d-2642-fe0f","🧍‍♀️":"1f9cd-200d-2640-fe0f","🧍🏻‍♀":"1f9cd-1f3fb-200d-2640-fe0f","🧍🏼‍♀":"1f9cd-1f3fc-200d-2640-fe0f","🧍🏽‍♀":"1f9cd-1f3fd-200d-2640-fe0f","🧍🏾‍♀":"1f9cd-1f3fe-200d-2640-fe0f","🧍🏿‍♀":"1f9cd-1f3ff-200d-2640-fe0f","🧎‍♂️":"1f9ce-200d-2642-fe0f","🧎🏻‍♂":"1f9ce-1f3fb-200d-2642-fe0f","🧎🏼‍♂":"1f9ce-1f3fc-200d-2642-fe0f","🧎🏽‍♂":"1f9ce-1f3fd-200d-2642-fe0f","🧎🏾‍♂":"1f9ce-1f3fe-200d-2642-fe0f","🧎🏿‍♂":"1f9ce-1f3ff-200d-2642-fe0f","🧎‍♀️":"1f9ce-200d-2640-fe0f","🧎🏻‍♀":"1f9ce-1f3fb-200d-2640-fe0f","🧎🏼‍♀":"1f9ce-1f3fc-200d-2640-fe0f","🧎🏽‍♀":"1f9ce-1f3fd-200d-2640-fe0f","🧎🏾‍♀":"1f9ce-1f3fe-200d-2640-fe0f","🧎🏿‍♀":"1f9ce-1f3ff-200d-2640-fe0f","👨🏻‍🦯":"1f468-1f3fb-200d-1f9af","👨🏼‍🦯":"1f468-1f3fc-200d-1f9af","👨🏽‍🦯":"1f468-1f3fd-200d-1f9af","👨🏾‍🦯":"1f468-1f3fe-200d-1f9af","👨🏿‍🦯":"1f468-1f3ff-200d-1f9af","👩🏻‍🦯":"1f469-1f3fb-200d-1f9af","👩🏼‍🦯":"1f469-1f3fc-200d-1f9af","👩🏽‍🦯":"1f469-1f3fd-200d-1f9af","👩🏾‍🦯":"1f469-1f3fe-200d-1f9af","👩🏿‍🦯":"1f469-1f3ff-200d-1f9af","👨🏻‍🦼":"1f468-1f3fb-200d-1f9bc","👨🏼‍🦼":"1f468-1f3fc-200d-1f9bc","👨🏽‍🦼":"1f468-1f3fd-200d-1f9bc","👨🏾‍🦼":"1f468-1f3fe-200d-1f9bc","👨🏿‍🦼":"1f468-1f3ff-200d-1f9bc","👩🏻‍🦼":"1f469-1f3fb-200d-1f9bc","👩🏼‍🦼":"1f469-1f3fc-200d-1f9bc","👩🏽‍🦼":"1f469-1f3fd-200d-1f9bc","👩🏾‍🦼":"1f469-1f3fe-200d-1f9bc","👩🏿‍🦼":"1f469-1f3ff-200d-1f9bc","👨🏻‍🦽":"1f468-1f3fb-200d-1f9bd","👨🏼‍🦽":"1f468-1f3fc-200d-1f9bd","👨🏽‍🦽":"1f468-1f3fd-200d-1f9bd","👨🏾‍🦽":"1f468-1f3fe-200d-1f9bd","👨🏿‍🦽":"1f468-1f3ff-200d-1f9bd","👩🏻‍🦽":"1f469-1f3fb-200d-1f9bd","👩🏼‍🦽":"1f469-1f3fc-200d-1f9bd","👩🏽‍🦽":"1f469-1f3fd-200d-1f9bd","👩🏾‍🦽":"1f469-1f3fe-200d-1f9bd","👩🏿‍🦽":"1f469-1f3ff-200d-1f9bd","🏃‍♂️":"1f3c3-200d-2642-fe0f","🏃🏻‍♂":"1f3c3-1f3fb-200d-2642-fe0f","🏃🏼‍♂":"1f3c3-1f3fc-200d-2642-fe0f","🏃🏽‍♂":"1f3c3-1f3fd-200d-2642-fe0f","🏃🏾‍♂":"1f3c3-1f3fe-200d-2642-fe0f","🏃🏿‍♂":"1f3c3-1f3ff-200d-2642-fe0f","🏃‍♀️":"1f3c3-200d-2640-fe0f","🏃🏻‍♀":"1f3c3-1f3fb-200d-2640-fe0f","🏃🏼‍♀":"1f3c3-1f3fc-200d-2640-fe0f","🏃🏽‍♀":"1f3c3-1f3fd-200d-2640-fe0f","🏃🏾‍♀":"1f3c3-1f3fe-200d-2640-fe0f","🏃🏿‍♀":"1f3c3-1f3ff-200d-2640-fe0f","👯‍♂️":"1f46f-200d-2642-fe0f","👯‍♀️":"1f46f-200d-2640-fe0f","🧖‍♂️":"1f9d6-200d-2642-fe0f","🧖🏻‍♂":"1f9d6-1f3fb-200d-2642-fe0f","🧖🏼‍♂":"1f9d6-1f3fc-200d-2642-fe0f","🧖🏽‍♂":"1f9d6-1f3fd-200d-2642-fe0f","🧖🏾‍♂":"1f9d6-1f3fe-200d-2642-fe0f","🧖🏿‍♂":"1f9d6-1f3ff-200d-2642-fe0f","🧖‍♀️":"1f9d6-200d-2640-fe0f","🧖🏻‍♀":"1f9d6-1f3fb-200d-2640-fe0f","🧖🏼‍♀":"1f9d6-1f3fc-200d-2640-fe0f","🧖🏽‍♀":"1f9d6-1f3fd-200d-2640-fe0f","🧖🏾‍♀":"1f9d6-1f3fe-200d-2640-fe0f","🧖🏿‍♀":"1f9d6-1f3ff-200d-2640-fe0f","🧗‍♂️":"1f9d7-200d-2642-fe0f","🧗🏻‍♂":"1f9d7-1f3fb-200d-2642-fe0f","🧗🏼‍♂":"1f9d7-1f3fc-200d-2642-fe0f","🧗🏽‍♂":"1f9d7-1f3fd-200d-2642-fe0f","🧗🏾‍♂":"1f9d7-1f3fe-200d-2642-fe0f","🧗🏿‍♂":"1f9d7-1f3ff-200d-2642-fe0f","🧗‍♀️":"1f9d7-200d-2640-fe0f","🧗🏻‍♀":"1f9d7-1f3fb-200d-2640-fe0f","🧗🏼‍♀":"1f9d7-1f3fc-200d-2640-fe0f","🧗🏽‍♀":"1f9d7-1f3fd-200d-2640-fe0f","🧗🏾‍♀":"1f9d7-1f3fe-200d-2640-fe0f","🧗🏿‍♀":"1f9d7-1f3ff-200d-2640-fe0f","🏌‍♂️":"1f3cc-fe0f-200d-2642-fe0f","🏌️‍♂":"1f3cc-fe0f-200d-2642-fe0f","🏌🏻‍♂":"1f3cc-1f3fb-200d-2642-fe0f","🏌🏼‍♂":"1f3cc-1f3fc-200d-2642-fe0f","🏌🏽‍♂":"1f3cc-1f3fd-200d-2642-fe0f","🏌🏾‍♂":"1f3cc-1f3fe-200d-2642-fe0f","🏌🏿‍♂":"1f3cc-1f3ff-200d-2642-fe0f","🏌‍♀️":"1f3cc-fe0f-200d-2640-fe0f","🏌️‍♀":"1f3cc-fe0f-200d-2640-fe0f","🏌🏻‍♀":"1f3cc-1f3fb-200d-2640-fe0f","🏌🏼‍♀":"1f3cc-1f3fc-200d-2640-fe0f","🏌🏽‍♀":"1f3cc-1f3fd-200d-2640-fe0f","🏌🏾‍♀":"1f3cc-1f3fe-200d-2640-fe0f","🏌🏿‍♀":"1f3cc-1f3ff-200d-2640-fe0f","🏄‍♂️":"1f3c4-200d-2642-fe0f","🏄🏻‍♂":"1f3c4-1f3fb-200d-2642-fe0f","🏄🏼‍♂":"1f3c4-1f3fc-200d-2642-fe0f","🏄🏽‍♂":"1f3c4-1f3fd-200d-2642-fe0f","🏄🏾‍♂":"1f3c4-1f3fe-200d-2642-fe0f","🏄🏿‍♂":"1f3c4-1f3ff-200d-2642-fe0f","🏄‍♀️":"1f3c4-200d-2640-fe0f","🏄🏻‍♀":"1f3c4-1f3fb-200d-2640-fe0f","🏄🏼‍♀":"1f3c4-1f3fc-200d-2640-fe0f","🏄🏽‍♀":"1f3c4-1f3fd-200d-2640-fe0f","🏄🏾‍♀":"1f3c4-1f3fe-200d-2640-fe0f","🏄🏿‍♀":"1f3c4-1f3ff-200d-2640-fe0f","🚣‍♂️":"1f6a3-200d-2642-fe0f","🚣🏻‍♂":"1f6a3-1f3fb-200d-2642-fe0f","🚣🏼‍♂":"1f6a3-1f3fc-200d-2642-fe0f","🚣🏽‍♂":"1f6a3-1f3fd-200d-2642-fe0f","🚣🏾‍♂":"1f6a3-1f3fe-200d-2642-fe0f","🚣🏿‍♂":"1f6a3-1f3ff-200d-2642-fe0f","🚣‍♀️":"1f6a3-200d-2640-fe0f","🚣🏻‍♀":"1f6a3-1f3fb-200d-2640-fe0f","🚣🏼‍♀":"1f6a3-1f3fc-200d-2640-fe0f","🚣🏽‍♀":"1f6a3-1f3fd-200d-2640-fe0f","🚣🏾‍♀":"1f6a3-1f3fe-200d-2640-fe0f","🚣🏿‍♀":"1f6a3-1f3ff-200d-2640-fe0f","🏊‍♂️":"1f3ca-200d-2642-fe0f","🏊🏻‍♂":"1f3ca-1f3fb-200d-2642-fe0f","🏊🏼‍♂":"1f3ca-1f3fc-200d-2642-fe0f","🏊🏽‍♂":"1f3ca-1f3fd-200d-2642-fe0f","🏊🏾‍♂":"1f3ca-1f3fe-200d-2642-fe0f","🏊🏿‍♂":"1f3ca-1f3ff-200d-2642-fe0f","🏊‍♀️":"1f3ca-200d-2640-fe0f","🏊🏻‍♀":"1f3ca-1f3fb-200d-2640-fe0f","🏊🏼‍♀":"1f3ca-1f3fc-200d-2640-fe0f","🏊🏽‍♀":"1f3ca-1f3fd-200d-2640-fe0f","🏊🏾‍♀":"1f3ca-1f3fe-200d-2640-fe0f","🏊🏿‍♀":"1f3ca-1f3ff-200d-2640-fe0f","⛹‍♂️":"26f9-fe0f-200d-2642-fe0f","⛹️‍♂":"26f9-fe0f-200d-2642-fe0f","⛹🏻‍♂":"26f9-1f3fb-200d-2642-fe0f","⛹🏼‍♂":"26f9-1f3fc-200d-2642-fe0f","⛹🏽‍♂":"26f9-1f3fd-200d-2642-fe0f","⛹🏾‍♂":"26f9-1f3fe-200d-2642-fe0f","⛹🏿‍♂":"26f9-1f3ff-200d-2642-fe0f","⛹‍♀️":"26f9-fe0f-200d-2640-fe0f","⛹️‍♀":"26f9-fe0f-200d-2640-fe0f","⛹🏻‍♀":"26f9-1f3fb-200d-2640-fe0f","⛹🏼‍♀":"26f9-1f3fc-200d-2640-fe0f","⛹🏽‍♀":"26f9-1f3fd-200d-2640-fe0f","⛹🏾‍♀":"26f9-1f3fe-200d-2640-fe0f","⛹🏿‍♀":"26f9-1f3ff-200d-2640-fe0f","🏋‍♂️":"1f3cb-fe0f-200d-2642-fe0f","🏋️‍♂":"1f3cb-fe0f-200d-2642-fe0f","🏋🏻‍♂":"1f3cb-1f3fb-200d-2642-fe0f","🏋🏼‍♂":"1f3cb-1f3fc-200d-2642-fe0f","🏋🏽‍♂":"1f3cb-1f3fd-200d-2642-fe0f","🏋🏾‍♂":"1f3cb-1f3fe-200d-2642-fe0f","🏋🏿‍♂":"1f3cb-1f3ff-200d-2642-fe0f","🏋‍♀️":"1f3cb-fe0f-200d-2640-fe0f","🏋️‍♀":"1f3cb-fe0f-200d-2640-fe0f","🏋🏻‍♀":"1f3cb-1f3fb-200d-2640-fe0f","🏋🏼‍♀":"1f3cb-1f3fc-200d-2640-fe0f","🏋🏽‍♀":"1f3cb-1f3fd-200d-2640-fe0f","🏋🏾‍♀":"1f3cb-1f3fe-200d-2640-fe0f","🏋🏿‍♀":"1f3cb-1f3ff-200d-2640-fe0f","🚴‍♂️":"1f6b4-200d-2642-fe0f","🚴🏻‍♂":"1f6b4-1f3fb-200d-2642-fe0f","🚴🏼‍♂":"1f6b4-1f3fc-200d-2642-fe0f","🚴🏽‍♂":"1f6b4-1f3fd-200d-2642-fe0f","🚴🏾‍♂":"1f6b4-1f3fe-200d-2642-fe0f","🚴🏿‍♂":"1f6b4-1f3ff-200d-2642-fe0f","🚴‍♀️":"1f6b4-200d-2640-fe0f","🚴🏻‍♀":"1f6b4-1f3fb-200d-2640-fe0f","🚴🏼‍♀":"1f6b4-1f3fc-200d-2640-fe0f","🚴🏽‍♀":"1f6b4-1f3fd-200d-2640-fe0f","🚴🏾‍♀":"1f6b4-1f3fe-200d-2640-fe0f","🚴🏿‍♀":"1f6b4-1f3ff-200d-2640-fe0f","🚵‍♂️":"1f6b5-200d-2642-fe0f","🚵🏻‍♂":"1f6b5-1f3fb-200d-2642-fe0f","🚵🏼‍♂":"1f6b5-1f3fc-200d-2642-fe0f","🚵🏽‍♂":"1f6b5-1f3fd-200d-2642-fe0f","🚵🏾‍♂":"1f6b5-1f3fe-200d-2642-fe0f","🚵🏿‍♂":"1f6b5-1f3ff-200d-2642-fe0f","🚵‍♀️":"1f6b5-200d-2640-fe0f","🚵🏻‍♀":"1f6b5-1f3fb-200d-2640-fe0f","🚵🏼‍♀":"1f6b5-1f3fc-200d-2640-fe0f","🚵🏽‍♀":"1f6b5-1f3fd-200d-2640-fe0f","🚵🏾‍♀":"1f6b5-1f3fe-200d-2640-fe0f","🚵🏿‍♀":"1f6b5-1f3ff-200d-2640-fe0f","🤸‍♂️":"1f938-200d-2642-fe0f","🤸🏻‍♂":"1f938-1f3fb-200d-2642-fe0f","🤸🏼‍♂":"1f938-1f3fc-200d-2642-fe0f","🤸🏽‍♂":"1f938-1f3fd-200d-2642-fe0f","🤸🏾‍♂":"1f938-1f3fe-200d-2642-fe0f","🤸🏿‍♂":"1f938-1f3ff-200d-2642-fe0f","🤸‍♀️":"1f938-200d-2640-fe0f","🤸🏻‍♀":"1f938-1f3fb-200d-2640-fe0f","🤸🏼‍♀":"1f938-1f3fc-200d-2640-fe0f","🤸🏽‍♀":"1f938-1f3fd-200d-2640-fe0f","🤸🏾‍♀":"1f938-1f3fe-200d-2640-fe0f","🤸🏿‍♀":"1f938-1f3ff-200d-2640-fe0f","🤼‍♂️":"1f93c-200d-2642-fe0f","🤼‍♀️":"1f93c-200d-2640-fe0f","🤽‍♂️":"1f93d-200d-2642-fe0f","🤽🏻‍♂":"1f93d-1f3fb-200d-2642-fe0f","🤽🏼‍♂":"1f93d-1f3fc-200d-2642-fe0f","🤽🏽‍♂":"1f93d-1f3fd-200d-2642-fe0f","🤽🏾‍♂":"1f93d-1f3fe-200d-2642-fe0f","🤽🏿‍♂":"1f93d-1f3ff-200d-2642-fe0f","🤽‍♀️":"1f93d-200d-2640-fe0f","🤽🏻‍♀":"1f93d-1f3fb-200d-2640-fe0f","🤽🏼‍♀":"1f93d-1f3fc-200d-2640-fe0f","🤽🏽‍♀":"1f93d-1f3fd-200d-2640-fe0f","🤽🏾‍♀":"1f93d-1f3fe-200d-2640-fe0f","🤽🏿‍♀":"1f93d-1f3ff-200d-2640-fe0f","🤾‍♂️":"1f93e-200d-2642-fe0f","🤾🏻‍♂":"1f93e-1f3fb-200d-2642-fe0f","🤾🏼‍♂":"1f93e-1f3fc-200d-2642-fe0f","🤾🏽‍♂":"1f93e-1f3fd-200d-2642-fe0f","🤾🏾‍♂":"1f93e-1f3fe-200d-2642-fe0f","🤾🏿‍♂":"1f93e-1f3ff-200d-2642-fe0f","🤾‍♀️":"1f93e-200d-2640-fe0f","🤾🏻‍♀":"1f93e-1f3fb-200d-2640-fe0f","🤾🏼‍♀":"1f93e-1f3fc-200d-2640-fe0f","🤾🏽‍♀":"1f93e-1f3fd-200d-2640-fe0f","🤾🏾‍♀":"1f93e-1f3fe-200d-2640-fe0f","🤾🏿‍♀":"1f93e-1f3ff-200d-2640-fe0f","🤹‍♂️":"1f939-200d-2642-fe0f","🤹🏻‍♂":"1f939-1f3fb-200d-2642-fe0f","🤹🏼‍♂":"1f939-1f3fc-200d-2642-fe0f","🤹🏽‍♂":"1f939-1f3fd-200d-2642-fe0f","🤹🏾‍♂":"1f939-1f3fe-200d-2642-fe0f","🤹🏿‍♂":"1f939-1f3ff-200d-2642-fe0f","🤹‍♀️":"1f939-200d-2640-fe0f","🤹🏻‍♀":"1f939-1f3fb-200d-2640-fe0f","🤹🏼‍♀":"1f939-1f3fc-200d-2640-fe0f","🤹🏽‍♀":"1f939-1f3fd-200d-2640-fe0f","🤹🏾‍♀":"1f939-1f3fe-200d-2640-fe0f","🤹🏿‍♀":"1f939-1f3ff-200d-2640-fe0f","🧘‍♂️":"1f9d8-200d-2642-fe0f","🧘🏻‍♂":"1f9d8-1f3fb-200d-2642-fe0f","🧘🏼‍♂":"1f9d8-1f3fc-200d-2642-fe0f","🧘🏽‍♂":"1f9d8-1f3fd-200d-2642-fe0f","🧘🏾‍♂":"1f9d8-1f3fe-200d-2642-fe0f","🧘🏿‍♂":"1f9d8-1f3ff-200d-2642-fe0f","🧘‍♀️":"1f9d8-200d-2640-fe0f","🧘🏻‍♀":"1f9d8-1f3fb-200d-2640-fe0f","🧘🏼‍♀":"1f9d8-1f3fc-200d-2640-fe0f","🧘🏽‍♀":"1f9d8-1f3fd-200d-2640-fe0f","🧘🏾‍♀":"1f9d8-1f3fe-200d-2640-fe0f","🧘🏿‍♀":"1f9d8-1f3ff-200d-2640-fe0f","🏳️‍🌈":"1f3f3-fe0f-200d-1f308","🏴‍☠️":"1f3f4-200d-2620-fe0f","👁️‍🗨️":"1f441-200d-1f5e8","👱🏻‍♂️":"1f471-1f3fb-200d-2642-fe0f","👱🏼‍♂️":"1f471-1f3fc-200d-2642-fe0f","👱🏽‍♂️":"1f471-1f3fd-200d-2642-fe0f","👱🏾‍♂️":"1f471-1f3fe-200d-2642-fe0f","👱🏿‍♂️":"1f471-1f3ff-200d-2642-fe0f","👱🏻‍♀️":"1f471-1f3fb-200d-2640-fe0f","👱🏼‍♀️":"1f471-1f3fc-200d-2640-fe0f","👱🏽‍♀️":"1f471-1f3fd-200d-2640-fe0f","👱🏾‍♀️":"1f471-1f3fe-200d-2640-fe0f","👱🏿‍♀️":"1f471-1f3ff-200d-2640-fe0f","🙍🏻‍♂️":"1f64d-1f3fb-200d-2642-fe0f","🙍🏼‍♂️":"1f64d-1f3fc-200d-2642-fe0f","🙍🏽‍♂️":"1f64d-1f3fd-200d-2642-fe0f","🙍🏾‍♂️":"1f64d-1f3fe-200d-2642-fe0f","🙍🏿‍♂️":"1f64d-1f3ff-200d-2642-fe0f","🙍🏻‍♀️":"1f64d-1f3fb-200d-2640-fe0f","🙍🏼‍♀️":"1f64d-1f3fc-200d-2640-fe0f","🙍🏽‍♀️":"1f64d-1f3fd-200d-2640-fe0f","🙍🏾‍♀️":"1f64d-1f3fe-200d-2640-fe0f","🙍🏿‍♀️":"1f64d-1f3ff-200d-2640-fe0f","🙎🏻‍♂️":"1f64e-1f3fb-200d-2642-fe0f","🙎🏼‍♂️":"1f64e-1f3fc-200d-2642-fe0f","🙎🏽‍♂️":"1f64e-1f3fd-200d-2642-fe0f","🙎🏾‍♂️":"1f64e-1f3fe-200d-2642-fe0f","🙎🏿‍♂️":"1f64e-1f3ff-200d-2642-fe0f","🙎🏻‍♀️":"1f64e-1f3fb-200d-2640-fe0f","🙎🏼‍♀️":"1f64e-1f3fc-200d-2640-fe0f","🙎🏽‍♀️":"1f64e-1f3fd-200d-2640-fe0f","🙎🏾‍♀️":"1f64e-1f3fe-200d-2640-fe0f","🙎🏿‍♀️":"1f64e-1f3ff-200d-2640-fe0f","🙅🏻‍♂️":"1f645-1f3fb-200d-2642-fe0f","🙅🏼‍♂️":"1f645-1f3fc-200d-2642-fe0f","🙅🏽‍♂️":"1f645-1f3fd-200d-2642-fe0f","🙅🏾‍♂️":"1f645-1f3fe-200d-2642-fe0f","🙅🏿‍♂️":"1f645-1f3ff-200d-2642-fe0f","🙅🏻‍♀️":"1f645-1f3fb-200d-2640-fe0f","🙅🏼‍♀️":"1f645-1f3fc-200d-2640-fe0f","🙅🏽‍♀️":"1f645-1f3fd-200d-2640-fe0f","🙅🏾‍♀️":"1f645-1f3fe-200d-2640-fe0f","🙅🏿‍♀️":"1f645-1f3ff-200d-2640-fe0f","🙆🏻‍♂️":"1f646-1f3fb-200d-2642-fe0f","🙆🏼‍♂️":"1f646-1f3fc-200d-2642-fe0f","🙆🏽‍♂️":"1f646-1f3fd-200d-2642-fe0f","🙆🏾‍♂️":"1f646-1f3fe-200d-2642-fe0f","🙆🏿‍♂️":"1f646-1f3ff-200d-2642-fe0f","🙆🏻‍♀️":"1f646-1f3fb-200d-2640-fe0f","🙆🏼‍♀️":"1f646-1f3fc-200d-2640-fe0f","🙆🏽‍♀️":"1f646-1f3fd-200d-2640-fe0f","🙆🏾‍♀️":"1f646-1f3fe-200d-2640-fe0f","🙆🏿‍♀️":"1f646-1f3ff-200d-2640-fe0f","💁🏻‍♂️":"1f481-1f3fb-200d-2642-fe0f","💁🏼‍♂️":"1f481-1f3fc-200d-2642-fe0f","💁🏽‍♂️":"1f481-1f3fd-200d-2642-fe0f","💁🏾‍♂️":"1f481-1f3fe-200d-2642-fe0f","💁🏿‍♂️":"1f481-1f3ff-200d-2642-fe0f","💁🏻‍♀️":"1f481-1f3fb-200d-2640-fe0f","💁🏼‍♀️":"1f481-1f3fc-200d-2640-fe0f","💁🏽‍♀️":"1f481-1f3fd-200d-2640-fe0f","💁🏾‍♀️":"1f481-1f3fe-200d-2640-fe0f","💁🏿‍♀️":"1f481-1f3ff-200d-2640-fe0f","🙋🏻‍♂️":"1f64b-1f3fb-200d-2642-fe0f","🙋🏼‍♂️":"1f64b-1f3fc-200d-2642-fe0f","🙋🏽‍♂️":"1f64b-1f3fd-200d-2642-fe0f","🙋🏾‍♂️":"1f64b-1f3fe-200d-2642-fe0f","🙋🏿‍♂️":"1f64b-1f3ff-200d-2642-fe0f","🙋🏻‍♀️":"1f64b-1f3fb-200d-2640-fe0f","🙋🏼‍♀️":"1f64b-1f3fc-200d-2640-fe0f","🙋🏽‍♀️":"1f64b-1f3fd-200d-2640-fe0f","🙋🏾‍♀️":"1f64b-1f3fe-200d-2640-fe0f","🙋🏿‍♀️":"1f64b-1f3ff-200d-2640-fe0f","🧏🏻‍♂️":"1f9cf-1f3fb-200d-2642-fe0f","🧏🏼‍♂️":"1f9cf-1f3fc-200d-2642-fe0f","🧏🏽‍♂️":"1f9cf-1f3fd-200d-2642-fe0f","🧏🏾‍♂️":"1f9cf-1f3fe-200d-2642-fe0f","🧏🏿‍♂️":"1f9cf-1f3ff-200d-2642-fe0f","🧏🏻‍♀️":"1f9cf-1f3fb-200d-2640-fe0f","🧏🏼‍♀️":"1f9cf-1f3fc-200d-2640-fe0f","🧏🏽‍♀️":"1f9cf-1f3fd-200d-2640-fe0f","🧏🏾‍♀️":"1f9cf-1f3fe-200d-2640-fe0f","🧏🏿‍♀️":"1f9cf-1f3ff-200d-2640-fe0f","🙇🏻‍♂️":"1f647-1f3fb-200d-2642-fe0f","🙇🏼‍♂️":"1f647-1f3fc-200d-2642-fe0f","🙇🏽‍♂️":"1f647-1f3fd-200d-2642-fe0f","🙇🏾‍♂️":"1f647-1f3fe-200d-2642-fe0f","🙇🏿‍♂️":"1f647-1f3ff-200d-2642-fe0f","🙇🏻‍♀️":"1f647-1f3fb-200d-2640-fe0f","🙇🏼‍♀️":"1f647-1f3fc-200d-2640-fe0f","🙇🏽‍♀️":"1f647-1f3fd-200d-2640-fe0f","🙇🏾‍♀️":"1f647-1f3fe-200d-2640-fe0f","🙇🏿‍♀️":"1f647-1f3ff-200d-2640-fe0f","🤦🏻‍♂️":"1f926-1f3fb-200d-2642-fe0f","🤦🏼‍♂️":"1f926-1f3fc-200d-2642-fe0f","🤦🏽‍♂️":"1f926-1f3fd-200d-2642-fe0f","🤦🏾‍♂️":"1f926-1f3fe-200d-2642-fe0f","🤦🏿‍♂️":"1f926-1f3ff-200d-2642-fe0f","🤦🏻‍♀️":"1f926-1f3fb-200d-2640-fe0f","🤦🏼‍♀️":"1f926-1f3fc-200d-2640-fe0f","🤦🏽‍♀️":"1f926-1f3fd-200d-2640-fe0f","🤦🏾‍♀️":"1f926-1f3fe-200d-2640-fe0f","🤦🏿‍♀️":"1f926-1f3ff-200d-2640-fe0f","🤷🏻‍♂️":"1f937-1f3fb-200d-2642-fe0f","🤷🏼‍♂️":"1f937-1f3fc-200d-2642-fe0f","🤷🏽‍♂️":"1f937-1f3fd-200d-2642-fe0f","🤷🏾‍♂️":"1f937-1f3fe-200d-2642-fe0f","🤷🏿‍♂️":"1f937-1f3ff-200d-2642-fe0f","🤷🏻‍♀️":"1f937-1f3fb-200d-2640-fe0f","🤷🏼‍♀️":"1f937-1f3fc-200d-2640-fe0f","🤷🏽‍♀️":"1f937-1f3fd-200d-2640-fe0f","🤷🏾‍♀️":"1f937-1f3fe-200d-2640-fe0f","🤷🏿‍♀️":"1f937-1f3ff-200d-2640-fe0f","👨🏻‍⚕️":"1f468-1f3fb-200d-2695-fe0f","👨🏼‍⚕️":"1f468-1f3fc-200d-2695-fe0f","👨🏽‍⚕️":"1f468-1f3fd-200d-2695-fe0f","👨🏾‍⚕️":"1f468-1f3fe-200d-2695-fe0f","👨🏿‍⚕️":"1f468-1f3ff-200d-2695-fe0f","👩🏻‍⚕️":"1f469-1f3fb-200d-2695-fe0f","👩🏼‍⚕️":"1f469-1f3fc-200d-2695-fe0f","👩🏽‍⚕️":"1f469-1f3fd-200d-2695-fe0f","👩🏾‍⚕️":"1f469-1f3fe-200d-2695-fe0f","👩🏿‍⚕️":"1f469-1f3ff-200d-2695-fe0f","👨🏻‍⚖️":"1f468-1f3fb-200d-2696-fe0f","👨🏼‍⚖️":"1f468-1f3fc-200d-2696-fe0f","👨🏽‍⚖️":"1f468-1f3fd-200d-2696-fe0f","👨🏾‍⚖️":"1f468-1f3fe-200d-2696-fe0f","👨🏿‍⚖️":"1f468-1f3ff-200d-2696-fe0f","👩🏻‍⚖️":"1f469-1f3fb-200d-2696-fe0f","👩🏼‍⚖️":"1f469-1f3fc-200d-2696-fe0f","👩🏽‍⚖️":"1f469-1f3fd-200d-2696-fe0f","👩🏾‍⚖️":"1f469-1f3fe-200d-2696-fe0f","👩🏿‍⚖️":"1f469-1f3ff-200d-2696-fe0f","👨🏻‍✈️":"1f468-1f3fb-200d-2708-fe0f","👨🏼‍✈️":"1f468-1f3fc-200d-2708-fe0f","👨🏽‍✈️":"1f468-1f3fd-200d-2708-fe0f","👨🏾‍✈️":"1f468-1f3fe-200d-2708-fe0f","👨🏿‍✈️":"1f468-1f3ff-200d-2708-fe0f","👩🏻‍✈️":"1f469-1f3fb-200d-2708-fe0f","👩🏼‍✈️":"1f469-1f3fc-200d-2708-fe0f","👩🏽‍✈️":"1f469-1f3fd-200d-2708-fe0f","👩🏾‍✈️":"1f469-1f3fe-200d-2708-fe0f","👩🏿‍✈️":"1f469-1f3ff-200d-2708-fe0f","👮🏻‍♂️":"1f46e-1f3fb-200d-2642-fe0f","👮🏼‍♂️":"1f46e-1f3fc-200d-2642-fe0f","👮🏽‍♂️":"1f46e-1f3fd-200d-2642-fe0f","👮🏾‍♂️":"1f46e-1f3fe-200d-2642-fe0f","👮🏿‍♂️":"1f46e-1f3ff-200d-2642-fe0f","👮🏻‍♀️":"1f46e-1f3fb-200d-2640-fe0f","👮🏼‍♀️":"1f46e-1f3fc-200d-2640-fe0f","👮🏽‍♀️":"1f46e-1f3fd-200d-2640-fe0f","👮🏾‍♀️":"1f46e-1f3fe-200d-2640-fe0f","👮🏿‍♀️":"1f46e-1f3ff-200d-2640-fe0f","🕵️‍♂️":"1f575-fe0f-200d-2642-fe0f","🕵🏻‍♂️":"1f575-1f3fb-200d-2642-fe0f","🕵🏼‍♂️":"1f575-1f3fc-200d-2642-fe0f","🕵🏽‍♂️":"1f575-1f3fd-200d-2642-fe0f","🕵🏾‍♂️":"1f575-1f3fe-200d-2642-fe0f","🕵🏿‍♂️":"1f575-1f3ff-200d-2642-fe0f","🕵️‍♀️":"1f575-fe0f-200d-2640-fe0f","🕵🏻‍♀️":"1f575-1f3fb-200d-2640-fe0f","🕵🏼‍♀️":"1f575-1f3fc-200d-2640-fe0f","🕵🏽‍♀️":"1f575-1f3fd-200d-2640-fe0f","🕵🏾‍♀️":"1f575-1f3fe-200d-2640-fe0f","🕵🏿‍♀️":"1f575-1f3ff-200d-2640-fe0f","💂🏻‍♂️":"1f482-1f3fb-200d-2642-fe0f","💂🏼‍♂️":"1f482-1f3fc-200d-2642-fe0f","💂🏽‍♂️":"1f482-1f3fd-200d-2642-fe0f","💂🏾‍♂️":"1f482-1f3fe-200d-2642-fe0f","💂🏿‍♂️":"1f482-1f3ff-200d-2642-fe0f","💂🏻‍♀️":"1f482-1f3fb-200d-2640-fe0f","💂🏼‍♀️":"1f482-1f3fc-200d-2640-fe0f","💂🏽‍♀️":"1f482-1f3fd-200d-2640-fe0f","💂🏾‍♀️":"1f482-1f3fe-200d-2640-fe0f","💂🏿‍♀️":"1f482-1f3ff-200d-2640-fe0f","👷🏻‍♂️":"1f477-1f3fb-200d-2642-fe0f","👷🏼‍♂️":"1f477-1f3fc-200d-2642-fe0f","👷🏽‍♂️":"1f477-1f3fd-200d-2642-fe0f","👷🏾‍♂️":"1f477-1f3fe-200d-2642-fe0f","👷🏿‍♂️":"1f477-1f3ff-200d-2642-fe0f","👷🏻‍♀️":"1f477-1f3fb-200d-2640-fe0f","👷🏼‍♀️":"1f477-1f3fc-200d-2640-fe0f","👷🏽‍♀️":"1f477-1f3fd-200d-2640-fe0f","👷🏾‍♀️":"1f477-1f3fe-200d-2640-fe0f","👷🏿‍♀️":"1f477-1f3ff-200d-2640-fe0f","👳🏻‍♂️":"1f473-1f3fb-200d-2642-fe0f","👳🏼‍♂️":"1f473-1f3fc-200d-2642-fe0f","👳🏽‍♂️":"1f473-1f3fd-200d-2642-fe0f","👳🏾‍♂️":"1f473-1f3fe-200d-2642-fe0f","👳🏿‍♂️":"1f473-1f3ff-200d-2642-fe0f","👳🏻‍♀️":"1f473-1f3fb-200d-2640-fe0f","👳🏼‍♀️":"1f473-1f3fc-200d-2640-fe0f","👳🏽‍♀️":"1f473-1f3fd-200d-2640-fe0f","👳🏾‍♀️":"1f473-1f3fe-200d-2640-fe0f","👳🏿‍♀️":"1f473-1f3ff-200d-2640-fe0f","🦸🏻‍♂️":"1f9b8-1f3fb-200d-2642-fe0f","🦸🏼‍♂️":"1f9b8-1f3fc-200d-2642-fe0f","🦸🏽‍♂️":"1f9b8-1f3fd-200d-2642-fe0f","🦸🏾‍♂️":"1f9b8-1f3fe-200d-2642-fe0f","🦸🏿‍♂️":"1f9b8-1f3ff-200d-2642-fe0f","🦸🏻‍♀️":"1f9b8-1f3fb-200d-2640-fe0f","🦸🏼‍♀️":"1f9b8-1f3fc-200d-2640-fe0f","🦸🏽‍♀️":"1f9b8-1f3fd-200d-2640-fe0f","🦸🏾‍♀️":"1f9b8-1f3fe-200d-2640-fe0f","🦸🏿‍♀️":"1f9b8-1f3ff-200d-2640-fe0f","🦹🏻‍♂️":"1f9b9-1f3fb-200d-2642-fe0f","🦹🏼‍♂️":"1f9b9-1f3fc-200d-2642-fe0f","🦹🏽‍♂️":"1f9b9-1f3fd-200d-2642-fe0f","🦹🏾‍♂️":"1f9b9-1f3fe-200d-2642-fe0f","🦹🏿‍♂️":"1f9b9-1f3ff-200d-2642-fe0f","🦹🏻‍♀️":"1f9b9-1f3fb-200d-2640-fe0f","🦹🏼‍♀️":"1f9b9-1f3fc-200d-2640-fe0f","🦹🏽‍♀️":"1f9b9-1f3fd-200d-2640-fe0f","🦹🏾‍♀️":"1f9b9-1f3fe-200d-2640-fe0f","🦹🏿‍♀️":"1f9b9-1f3ff-200d-2640-fe0f","🧙🏻‍♂️":"1f9d9-1f3fb-200d-2642-fe0f","🧙🏼‍♂️":"1f9d9-1f3fc-200d-2642-fe0f","🧙🏽‍♂️":"1f9d9-1f3fd-200d-2642-fe0f","🧙🏾‍♂️":"1f9d9-1f3fe-200d-2642-fe0f","🧙🏿‍♂️":"1f9d9-1f3ff-200d-2642-fe0f","🧙🏻‍♀️":"1f9d9-1f3fb-200d-2640-fe0f","🧙🏼‍♀️":"1f9d9-1f3fc-200d-2640-fe0f","🧙🏽‍♀️":"1f9d9-1f3fd-200d-2640-fe0f","🧙🏾‍♀️":"1f9d9-1f3fe-200d-2640-fe0f","🧙🏿‍♀️":"1f9d9-1f3ff-200d-2640-fe0f","🧚🏻‍♂️":"1f9da-1f3fb-200d-2642-fe0f","🧚🏼‍♂️":"1f9da-1f3fc-200d-2642-fe0f","🧚🏽‍♂️":"1f9da-1f3fd-200d-2642-fe0f","🧚🏾‍♂️":"1f9da-1f3fe-200d-2642-fe0f","🧚🏿‍♂️":"1f9da-1f3ff-200d-2642-fe0f","🧚🏻‍♀️":"1f9da-1f3fb-200d-2640-fe0f","🧚🏼‍♀️":"1f9da-1f3fc-200d-2640-fe0f","🧚🏽‍♀️":"1f9da-1f3fd-200d-2640-fe0f","🧚🏾‍♀️":"1f9da-1f3fe-200d-2640-fe0f","🧚🏿‍♀️":"1f9da-1f3ff-200d-2640-fe0f","🧛🏻‍♂️":"1f9db-1f3fb-200d-2642-fe0f","🧛🏼‍♂️":"1f9db-1f3fc-200d-2642-fe0f","🧛🏽‍♂️":"1f9db-1f3fd-200d-2642-fe0f","🧛🏾‍♂️":"1f9db-1f3fe-200d-2642-fe0f","🧛🏿‍♂️":"1f9db-1f3ff-200d-2642-fe0f","🧛🏻‍♀️":"1f9db-1f3fb-200d-2640-fe0f","🧛🏼‍♀️":"1f9db-1f3fc-200d-2640-fe0f","🧛🏽‍♀️":"1f9db-1f3fd-200d-2640-fe0f","🧛🏾‍♀️":"1f9db-1f3fe-200d-2640-fe0f","🧛🏿‍♀️":"1f9db-1f3ff-200d-2640-fe0f","🧜🏻‍♂️":"1f9dc-1f3fb-200d-2642-fe0f","🧜🏼‍♂️":"1f9dc-1f3fc-200d-2642-fe0f","🧜🏽‍♂️":"1f9dc-1f3fd-200d-2642-fe0f","🧜🏾‍♂️":"1f9dc-1f3fe-200d-2642-fe0f","🧜🏿‍♂️":"1f9dc-1f3ff-200d-2642-fe0f","🧜🏻‍♀️":"1f9dc-1f3fb-200d-2640-fe0f","🧜🏼‍♀️":"1f9dc-1f3fc-200d-2640-fe0f","🧜🏽‍♀️":"1f9dc-1f3fd-200d-2640-fe0f","🧜🏾‍♀️":"1f9dc-1f3fe-200d-2640-fe0f","🧜🏿‍♀️":"1f9dc-1f3ff-200d-2640-fe0f","🧝🏻‍♂️":"1f9dd-1f3fb-200d-2642-fe0f","🧝🏼‍♂️":"1f9dd-1f3fc-200d-2642-fe0f","🧝🏽‍♂️":"1f9dd-1f3fd-200d-2642-fe0f","🧝🏾‍♂️":"1f9dd-1f3fe-200d-2642-fe0f","🧝🏿‍♂️":"1f9dd-1f3ff-200d-2642-fe0f","🧝🏻‍♀️":"1f9dd-1f3fb-200d-2640-fe0f","🧝🏼‍♀️":"1f9dd-1f3fc-200d-2640-fe0f","🧝🏽‍♀️":"1f9dd-1f3fd-200d-2640-fe0f","🧝🏾‍♀️":"1f9dd-1f3fe-200d-2640-fe0f","🧝🏿‍♀️":"1f9dd-1f3ff-200d-2640-fe0f","💆🏻‍♂️":"1f486-1f3fb-200d-2642-fe0f","💆🏼‍♂️":"1f486-1f3fc-200d-2642-fe0f","💆🏽‍♂️":"1f486-1f3fd-200d-2642-fe0f","💆🏾‍♂️":"1f486-1f3fe-200d-2642-fe0f","💆🏿‍♂️":"1f486-1f3ff-200d-2642-fe0f","💆🏻‍♀️":"1f486-1f3fb-200d-2640-fe0f","💆🏼‍♀️":"1f486-1f3fc-200d-2640-fe0f","💆🏽‍♀️":"1f486-1f3fd-200d-2640-fe0f","💆🏾‍♀️":"1f486-1f3fe-200d-2640-fe0f","💆🏿‍♀️":"1f486-1f3ff-200d-2640-fe0f","💇🏻‍♂️":"1f487-1f3fb-200d-2642-fe0f","💇🏼‍♂️":"1f487-1f3fc-200d-2642-fe0f","💇🏽‍♂️":"1f487-1f3fd-200d-2642-fe0f","💇🏾‍♂️":"1f487-1f3fe-200d-2642-fe0f","💇🏿‍♂️":"1f487-1f3ff-200d-2642-fe0f","💇🏻‍♀️":"1f487-1f3fb-200d-2640-fe0f","💇🏼‍♀️":"1f487-1f3fc-200d-2640-fe0f","💇🏽‍♀️":"1f487-1f3fd-200d-2640-fe0f","💇🏾‍♀️":"1f487-1f3fe-200d-2640-fe0f","💇🏿‍♀️":"1f487-1f3ff-200d-2640-fe0f","🚶🏻‍♂️":"1f6b6-1f3fb-200d-2642-fe0f","🚶🏼‍♂️":"1f6b6-1f3fc-200d-2642-fe0f","🚶🏽‍♂️":"1f6b6-1f3fd-200d-2642-fe0f","🚶🏾‍♂️":"1f6b6-1f3fe-200d-2642-fe0f","🚶🏿‍♂️":"1f6b6-1f3ff-200d-2642-fe0f","🚶🏻‍♀️":"1f6b6-1f3fb-200d-2640-fe0f","🚶🏼‍♀️":"1f6b6-1f3fc-200d-2640-fe0f","🚶🏽‍♀️":"1f6b6-1f3fd-200d-2640-fe0f","🚶🏾‍♀️":"1f6b6-1f3fe-200d-2640-fe0f","🚶🏿‍♀️":"1f6b6-1f3ff-200d-2640-fe0f","🧍🏻‍♂️":"1f9cd-1f3fb-200d-2642-fe0f","🧍🏼‍♂️":"1f9cd-1f3fc-200d-2642-fe0f","🧍🏽‍♂️":"1f9cd-1f3fd-200d-2642-fe0f","🧍🏾‍♂️":"1f9cd-1f3fe-200d-2642-fe0f","🧍🏿‍♂️":"1f9cd-1f3ff-200d-2642-fe0f","🧍🏻‍♀️":"1f9cd-1f3fb-200d-2640-fe0f","🧍🏼‍♀️":"1f9cd-1f3fc-200d-2640-fe0f","🧍🏽‍♀️":"1f9cd-1f3fd-200d-2640-fe0f","🧍🏾‍♀️":"1f9cd-1f3fe-200d-2640-fe0f","🧍🏿‍♀️":"1f9cd-1f3ff-200d-2640-fe0f","🧎🏻‍♂️":"1f9ce-1f3fb-200d-2642-fe0f","🧎🏼‍♂️":"1f9ce-1f3fc-200d-2642-fe0f","🧎🏽‍♂️":"1f9ce-1f3fd-200d-2642-fe0f","🧎🏾‍♂️":"1f9ce-1f3fe-200d-2642-fe0f","🧎🏿‍♂️":"1f9ce-1f3ff-200d-2642-fe0f","🧎🏻‍♀️":"1f9ce-1f3fb-200d-2640-fe0f","🧎🏼‍♀️":"1f9ce-1f3fc-200d-2640-fe0f","🧎🏽‍♀️":"1f9ce-1f3fd-200d-2640-fe0f","🧎🏾‍♀️":"1f9ce-1f3fe-200d-2640-fe0f","🧎🏿‍♀️":"1f9ce-1f3ff-200d-2640-fe0f","🏃🏻‍♂️":"1f3c3-1f3fb-200d-2642-fe0f","🏃🏼‍♂️":"1f3c3-1f3fc-200d-2642-fe0f","🏃🏽‍♂️":"1f3c3-1f3fd-200d-2642-fe0f","🏃🏾‍♂️":"1f3c3-1f3fe-200d-2642-fe0f","🏃🏿‍♂️":"1f3c3-1f3ff-200d-2642-fe0f","🏃🏻‍♀️":"1f3c3-1f3fb-200d-2640-fe0f","🏃🏼‍♀️":"1f3c3-1f3fc-200d-2640-fe0f","🏃🏽‍♀️":"1f3c3-1f3fd-200d-2640-fe0f","🏃🏾‍♀️":"1f3c3-1f3fe-200d-2640-fe0f","🏃🏿‍♀️":"1f3c3-1f3ff-200d-2640-fe0f","🧖🏻‍♂️":"1f9d6-1f3fb-200d-2642-fe0f","🧖🏼‍♂️":"1f9d6-1f3fc-200d-2642-fe0f","🧖🏽‍♂️":"1f9d6-1f3fd-200d-2642-fe0f","🧖🏾‍♂️":"1f9d6-1f3fe-200d-2642-fe0f","🧖🏿‍♂️":"1f9d6-1f3ff-200d-2642-fe0f","🧖🏻‍♀️":"1f9d6-1f3fb-200d-2640-fe0f","🧖🏼‍♀️":"1f9d6-1f3fc-200d-2640-fe0f","🧖🏽‍♀️":"1f9d6-1f3fd-200d-2640-fe0f","🧖🏾‍♀️":"1f9d6-1f3fe-200d-2640-fe0f","🧖🏿‍♀️":"1f9d6-1f3ff-200d-2640-fe0f","🧗🏻‍♂️":"1f9d7-1f3fb-200d-2642-fe0f","🧗🏼‍♂️":"1f9d7-1f3fc-200d-2642-fe0f","🧗🏽‍♂️":"1f9d7-1f3fd-200d-2642-fe0f","🧗🏾‍♂️":"1f9d7-1f3fe-200d-2642-fe0f","🧗🏿‍♂️":"1f9d7-1f3ff-200d-2642-fe0f","🧗🏻‍♀️":"1f9d7-1f3fb-200d-2640-fe0f","🧗🏼‍♀️":"1f9d7-1f3fc-200d-2640-fe0f","🧗🏽‍♀️":"1f9d7-1f3fd-200d-2640-fe0f","🧗🏾‍♀️":"1f9d7-1f3fe-200d-2640-fe0f","🧗🏿‍♀️":"1f9d7-1f3ff-200d-2640-fe0f","🏌️‍♂️":"1f3cc-fe0f-200d-2642-fe0f","🏌🏻‍♂️":"1f3cc-1f3fb-200d-2642-fe0f","🏌🏼‍♂️":"1f3cc-1f3fc-200d-2642-fe0f","🏌🏽‍♂️":"1f3cc-1f3fd-200d-2642-fe0f","🏌🏾‍♂️":"1f3cc-1f3fe-200d-2642-fe0f","🏌🏿‍♂️":"1f3cc-1f3ff-200d-2642-fe0f","🏌️‍♀️":"1f3cc-fe0f-200d-2640-fe0f","🏌🏻‍♀️":"1f3cc-1f3fb-200d-2640-fe0f","🏌🏼‍♀️":"1f3cc-1f3fc-200d-2640-fe0f","🏌🏽‍♀️":"1f3cc-1f3fd-200d-2640-fe0f","🏌🏾‍♀️":"1f3cc-1f3fe-200d-2640-fe0f","🏌🏿‍♀️":"1f3cc-1f3ff-200d-2640-fe0f","🏄🏻‍♂️":"1f3c4-1f3fb-200d-2642-fe0f","🏄🏼‍♂️":"1f3c4-1f3fc-200d-2642-fe0f","🏄🏽‍♂️":"1f3c4-1f3fd-200d-2642-fe0f","🏄🏾‍♂️":"1f3c4-1f3fe-200d-2642-fe0f","🏄🏿‍♂️":"1f3c4-1f3ff-200d-2642-fe0f","🏄🏻‍♀️":"1f3c4-1f3fb-200d-2640-fe0f","🏄🏼‍♀️":"1f3c4-1f3fc-200d-2640-fe0f","🏄🏽‍♀️":"1f3c4-1f3fd-200d-2640-fe0f","🏄🏾‍♀️":"1f3c4-1f3fe-200d-2640-fe0f","🏄🏿‍♀️":"1f3c4-1f3ff-200d-2640-fe0f","🚣🏻‍♂️":"1f6a3-1f3fb-200d-2642-fe0f","🚣🏼‍♂️":"1f6a3-1f3fc-200d-2642-fe0f","🚣🏽‍♂️":"1f6a3-1f3fd-200d-2642-fe0f","🚣🏾‍♂️":"1f6a3-1f3fe-200d-2642-fe0f","🚣🏿‍♂️":"1f6a3-1f3ff-200d-2642-fe0f","🚣🏻‍♀️":"1f6a3-1f3fb-200d-2640-fe0f","🚣🏼‍♀️":"1f6a3-1f3fc-200d-2640-fe0f","🚣🏽‍♀️":"1f6a3-1f3fd-200d-2640-fe0f","🚣🏾‍♀️":"1f6a3-1f3fe-200d-2640-fe0f","🚣🏿‍♀️":"1f6a3-1f3ff-200d-2640-fe0f","🏊🏻‍♂️":"1f3ca-1f3fb-200d-2642-fe0f","🏊🏼‍♂️":"1f3ca-1f3fc-200d-2642-fe0f","🏊🏽‍♂️":"1f3ca-1f3fd-200d-2642-fe0f","🏊🏾‍♂️":"1f3ca-1f3fe-200d-2642-fe0f","🏊🏿‍♂️":"1f3ca-1f3ff-200d-2642-fe0f","🏊🏻‍♀️":"1f3ca-1f3fb-200d-2640-fe0f","🏊🏼‍♀️":"1f3ca-1f3fc-200d-2640-fe0f","🏊🏽‍♀️":"1f3ca-1f3fd-200d-2640-fe0f","🏊🏾‍♀️":"1f3ca-1f3fe-200d-2640-fe0f","🏊🏿‍♀️":"1f3ca-1f3ff-200d-2640-fe0f","⛹️‍♂️":"26f9-fe0f-200d-2642-fe0f","⛹🏻‍♂️":"26f9-1f3fb-200d-2642-fe0f","⛹🏼‍♂️":"26f9-1f3fc-200d-2642-fe0f","⛹🏽‍♂️":"26f9-1f3fd-200d-2642-fe0f","⛹🏾‍♂️":"26f9-1f3fe-200d-2642-fe0f","⛹🏿‍♂️":"26f9-1f3ff-200d-2642-fe0f","⛹️‍♀️":"26f9-fe0f-200d-2640-fe0f","⛹🏻‍♀️":"26f9-1f3fb-200d-2640-fe0f","⛹🏼‍♀️":"26f9-1f3fc-200d-2640-fe0f","⛹🏽‍♀️":"26f9-1f3fd-200d-2640-fe0f","⛹🏾‍♀️":"26f9-1f3fe-200d-2640-fe0f","⛹🏿‍♀️":"26f9-1f3ff-200d-2640-fe0f","🏋️‍♂️":"1f3cb-fe0f-200d-2642-fe0f","🏋🏻‍♂️":"1f3cb-1f3fb-200d-2642-fe0f","🏋🏼‍♂️":"1f3cb-1f3fc-200d-2642-fe0f","🏋🏽‍♂️":"1f3cb-1f3fd-200d-2642-fe0f","🏋🏾‍♂️":"1f3cb-1f3fe-200d-2642-fe0f","🏋🏿‍♂️":"1f3cb-1f3ff-200d-2642-fe0f","🏋️‍♀️":"1f3cb-fe0f-200d-2640-fe0f","🏋🏻‍♀️":"1f3cb-1f3fb-200d-2640-fe0f","🏋🏼‍♀️":"1f3cb-1f3fc-200d-2640-fe0f","🏋🏽‍♀️":"1f3cb-1f3fd-200d-2640-fe0f","🏋🏾‍♀️":"1f3cb-1f3fe-200d-2640-fe0f","🏋🏿‍♀️":"1f3cb-1f3ff-200d-2640-fe0f","🚴🏻‍♂️":"1f6b4-1f3fb-200d-2642-fe0f","🚴🏼‍♂️":"1f6b4-1f3fc-200d-2642-fe0f","🚴🏽‍♂️":"1f6b4-1f3fd-200d-2642-fe0f","🚴🏾‍♂️":"1f6b4-1f3fe-200d-2642-fe0f","🚴🏿‍♂️":"1f6b4-1f3ff-200d-2642-fe0f","🚴🏻‍♀️":"1f6b4-1f3fb-200d-2640-fe0f","🚴🏼‍♀️":"1f6b4-1f3fc-200d-2640-fe0f","🚴🏽‍♀️":"1f6b4-1f3fd-200d-2640-fe0f","🚴🏾‍♀️":"1f6b4-1f3fe-200d-2640-fe0f","🚴🏿‍♀️":"1f6b4-1f3ff-200d-2640-fe0f","🚵🏻‍♂️":"1f6b5-1f3fb-200d-2642-fe0f","🚵🏼‍♂️":"1f6b5-1f3fc-200d-2642-fe0f","🚵🏽‍♂️":"1f6b5-1f3fd-200d-2642-fe0f","🚵🏾‍♂️":"1f6b5-1f3fe-200d-2642-fe0f","🚵🏿‍♂️":"1f6b5-1f3ff-200d-2642-fe0f","🚵🏻‍♀️":"1f6b5-1f3fb-200d-2640-fe0f","🚵🏼‍♀️":"1f6b5-1f3fc-200d-2640-fe0f","🚵🏽‍♀️":"1f6b5-1f3fd-200d-2640-fe0f","🚵🏾‍♀️":"1f6b5-1f3fe-200d-2640-fe0f","🚵🏿‍♀️":"1f6b5-1f3ff-200d-2640-fe0f","🤸🏻‍♂️":"1f938-1f3fb-200d-2642-fe0f","🤸🏼‍♂️":"1f938-1f3fc-200d-2642-fe0f","🤸🏽‍♂️":"1f938-1f3fd-200d-2642-fe0f","🤸🏾‍♂️":"1f938-1f3fe-200d-2642-fe0f","🤸🏿‍♂️":"1f938-1f3ff-200d-2642-fe0f","🤸🏻‍♀️":"1f938-1f3fb-200d-2640-fe0f","🤸🏼‍♀️":"1f938-1f3fc-200d-2640-fe0f","🤸🏽‍♀️":"1f938-1f3fd-200d-2640-fe0f","🤸🏾‍♀️":"1f938-1f3fe-200d-2640-fe0f","🤸🏿‍♀️":"1f938-1f3ff-200d-2640-fe0f","🤽🏻‍♂️":"1f93d-1f3fb-200d-2642-fe0f","🤽🏼‍♂️":"1f93d-1f3fc-200d-2642-fe0f","🤽🏽‍♂️":"1f93d-1f3fd-200d-2642-fe0f","🤽🏾‍♂️":"1f93d-1f3fe-200d-2642-fe0f","🤽🏿‍♂️":"1f93d-1f3ff-200d-2642-fe0f","🤽🏻‍♀️":"1f93d-1f3fb-200d-2640-fe0f","🤽🏼‍♀️":"1f93d-1f3fc-200d-2640-fe0f","🤽🏽‍♀️":"1f93d-1f3fd-200d-2640-fe0f","🤽🏾‍♀️":"1f93d-1f3fe-200d-2640-fe0f","🤽🏿‍♀️":"1f93d-1f3ff-200d-2640-fe0f","🤾🏻‍♂️":"1f93e-1f3fb-200d-2642-fe0f","🤾🏼‍♂️":"1f93e-1f3fc-200d-2642-fe0f","🤾🏽‍♂️":"1f93e-1f3fd-200d-2642-fe0f","🤾🏾‍♂️":"1f93e-1f3fe-200d-2642-fe0f","🤾🏿‍♂️":"1f93e-1f3ff-200d-2642-fe0f","🤾🏻‍♀️":"1f93e-1f3fb-200d-2640-fe0f","🤾🏼‍♀️":"1f93e-1f3fc-200d-2640-fe0f","🤾🏽‍♀️":"1f93e-1f3fd-200d-2640-fe0f","🤾🏾‍♀️":"1f93e-1f3fe-200d-2640-fe0f","🤾🏿‍♀️":"1f93e-1f3ff-200d-2640-fe0f","🤹🏻‍♂️":"1f939-1f3fb-200d-2642-fe0f","🤹🏼‍♂️":"1f939-1f3fc-200d-2642-fe0f","🤹🏽‍♂️":"1f939-1f3fd-200d-2642-fe0f","🤹🏾‍♂️":"1f939-1f3fe-200d-2642-fe0f","🤹🏿‍♂️":"1f939-1f3ff-200d-2642-fe0f","🤹🏻‍♀️":"1f939-1f3fb-200d-2640-fe0f","🤹🏼‍♀️":"1f939-1f3fc-200d-2640-fe0f","🤹🏽‍♀️":"1f939-1f3fd-200d-2640-fe0f","🤹🏾‍♀️":"1f939-1f3fe-200d-2640-fe0f","🤹🏿‍♀️":"1f939-1f3ff-200d-2640-fe0f","🧘🏻‍♂️":"1f9d8-1f3fb-200d-2642-fe0f","🧘🏼‍♂️":"1f9d8-1f3fc-200d-2642-fe0f","🧘🏽‍♂️":"1f9d8-1f3fd-200d-2642-fe0f","🧘🏾‍♂️":"1f9d8-1f3fe-200d-2642-fe0f","🧘🏿‍♂️":"1f9d8-1f3ff-200d-2642-fe0f","🧘🏻‍♀️":"1f9d8-1f3fb-200d-2640-fe0f","🧘🏼‍♀️":"1f9d8-1f3fc-200d-2640-fe0f","🧘🏽‍♀️":"1f9d8-1f3fd-200d-2640-fe0f","🧘🏾‍♀️":"1f9d8-1f3fe-200d-2640-fe0f","🧘🏿‍♀️":"1f9d8-1f3ff-200d-2640-fe0f","🧑‍🤝‍🧑":"1f9d1-200d-1f91d-200d-1f9d1","👩‍❤‍👨":"1f469-200d-2764-fe0f-200d-1f468","👨‍❤‍👨":"1f468-200d-2764-fe0f-200d-1f468","👩‍❤‍👩":"1f469-200d-2764-fe0f-200d-1f469","👨‍👩‍👦":"1f468-200d-1f469-200d-1f466","👨‍👩‍👧":"1f468-200d-1f469-200d-1f467","👨‍👨‍👦":"1f468-200d-1f468-200d-1f466","👨‍👨‍👧":"1f468-200d-1f468-200d-1f467","👩‍👩‍👦":"1f469-200d-1f469-200d-1f466","👩‍👩‍👧":"1f469-200d-1f469-200d-1f467","👨‍👦‍👦":"1f468-200d-1f466-200d-1f466","👨‍👧‍👦":"1f468-200d-1f467-200d-1f466","👨‍👧‍👧":"1f468-200d-1f467-200d-1f467","👩‍👦‍👦":"1f469-200d-1f466-200d-1f466","👩‍👧‍👦":"1f469-200d-1f467-200d-1f466","👩‍👧‍👧":"1f469-200d-1f467-200d-1f467","👩‍❤️‍👨":"1f469-200d-2764-fe0f-200d-1f468","👨‍❤️‍👨":"1f468-200d-2764-fe0f-200d-1f468","👩‍❤️‍👩":"1f469-200d-2764-fe0f-200d-1f469","🧑🏻‍🤝‍🧑🏻":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb","🧑🏼‍🤝‍🧑🏻":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb","🧑🏼‍🤝‍🧑🏼":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc","🧑🏽‍🤝‍🧑🏻":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb","🧑🏽‍🤝‍🧑🏼":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc","🧑🏽‍🤝‍🧑🏽":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd","🧑🏾‍🤝‍🧑🏻":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb","🧑🏾‍🤝‍🧑🏼":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc","🧑🏾‍🤝‍🧑🏽":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd","🧑🏾‍🤝‍🧑🏾":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe","🧑🏿‍🤝‍🧑🏻":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb","🧑🏿‍🤝‍🧑🏼":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc","🧑🏿‍🤝‍🧑🏽":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd","🧑🏿‍🤝‍🧑🏾":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe","🧑🏿‍🤝‍🧑🏿":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff","👩🏼‍🤝‍👩🏻":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb","👩🏽‍🤝‍👩🏻":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb","👩🏽‍🤝‍👩🏼":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc","👩🏾‍🤝‍👩🏻":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb","👩🏾‍🤝‍👩🏼":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc","👩🏾‍🤝‍👩🏽":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd","👩🏿‍🤝‍👩🏻":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb","👩🏿‍🤝‍👩🏼":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc","👩🏿‍🤝‍👩🏽":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd","👩🏿‍🤝‍👩🏾":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe","👩🏻‍🤝‍👨🏼":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc","👩🏻‍🤝‍👨🏽":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd","👩🏻‍🤝‍👨🏾":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe","👩🏻‍🤝‍👨🏿":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff","👩🏼‍🤝‍👨🏻":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb","👩🏼‍🤝‍👨🏽":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd","👩🏼‍🤝‍👨🏾":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe","👩🏼‍🤝‍👨🏿":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff","👩🏽‍🤝‍👨🏻":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb","👩🏽‍🤝‍👨🏼":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc","👩🏽‍🤝‍👨🏾":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe","👩🏽‍🤝‍👨🏿":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff","👩🏾‍🤝‍👨🏻":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb","👩🏾‍🤝‍👨🏼":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc","👩🏾‍🤝‍👨🏽":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd","👩🏾‍🤝‍👨🏿":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff","👩🏿‍🤝‍👨🏻":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb","👩🏿‍🤝‍👨🏼":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc","👩🏿‍🤝‍👨🏽":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd","👩🏿‍🤝‍👨🏾":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe","👨🏼‍🤝‍👨🏻":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb","👨🏽‍🤝‍👨🏻":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb","👨🏽‍🤝‍👨🏼":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc","👨🏾‍🤝‍👨🏻":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb","👨🏾‍🤝‍👨🏼":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc","👨🏾‍🤝‍👨🏽":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd","👨🏿‍🤝‍👨🏻":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb","👨🏿‍🤝‍👨🏼":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc","👨🏿‍🤝‍👨🏽":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd","👨🏿‍🤝‍👨🏾":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe","👩‍❤‍💋‍👨":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f468","👨‍❤‍💋‍👨":"1f468-200d-2764-fe0f-200d-1f48b-200d-1f468","👩‍❤‍💋‍👩":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f469","👨‍👩‍👧‍👦":"1f468-200d-1f469-200d-1f467-200d-1f466","👨‍👩‍👦‍👦":"1f468-200d-1f469-200d-1f466-200d-1f466","👨‍👩‍👧‍👧":"1f468-200d-1f469-200d-1f467-200d-1f467","👨‍👨‍👧‍👦":"1f468-200d-1f468-200d-1f467-200d-1f466","👨‍👨‍👦‍👦":"1f468-200d-1f468-200d-1f466-200d-1f466","👨‍👨‍👧‍👧":"1f468-200d-1f468-200d-1f467-200d-1f467","👩‍👩‍👧‍👦":"1f469-200d-1f469-200d-1f467-200d-1f466","👩‍👩‍👦‍👦":"1f469-200d-1f469-200d-1f466-200d-1f466","👩‍👩‍👧‍👧":"1f469-200d-1f469-200d-1f467-200d-1f467","🏴󠁧󠁢󠁥󠁮󠁧󠁿":"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f","🏴󠁧󠁢󠁳󠁣󠁴󠁿":"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f","🏴󠁧󠁢󠁷󠁬󠁳󠁿":"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f","👩‍❤️‍💋‍👨":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f468","👨‍❤️‍💋‍👨":"1f468-200d-2764-fe0f-200d-1f48b-200d-1f468","👩‍❤️‍💋‍👩":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f469"} \ No newline at end of file +{"😀":"1f600","😃":"1f603","😄":"1f604","😁":"1f601","😆":"1f606","😅":"1f605","🤣":"1f923","😂":"1f602","🙂":"1f642","🙃":"1f643","😉":"1f609","😊":"1f60a","😇":"1f607","🥰":"1f970","😍":"1f60d","🤩":"1f929","😘":"1f618","😗":"1f617","☺":"263a","😚":"1f61a","😙":"1f619","🥲":"1f972","😋":"1f60b","😛":"1f61b","😜":"1f61c","🤪":"1f92a","😝":"1f61d","🤑":"1f911","🤗":"1f917","🤭":"1f92d","🤫":"1f92b","🤔":"1f914","🤐":"1f910","🤨":"1f928","😐":"1f610","😑":"1f611","😶":"1f636","😏":"1f60f","😒":"1f612","🙄":"1f644","😬":"1f62c","🤥":"1f925","😌":"1f60c","😔":"1f614","😪":"1f62a","🤤":"1f924","😴":"1f634","😷":"1f637","🤒":"1f912","🤕":"1f915","🤢":"1f922","🤮":"1f92e","🤧":"1f927","🥵":"1f975","🥶":"1f976","🥴":"1f974","😵":"1f635","🤯":"1f92f","🤠":"1f920","🥳":"1f973","🥸":"1f978","😎":"1f60e","🤓":"1f913","🧐":"1f9d0","😕":"1f615","😟":"1f61f","🙁":"1f641","☹":"2639","😮":"1f62e","😯":"1f62f","😲":"1f632","😳":"1f633","🥺":"1f97a","😦":"1f626","😧":"1f627","😨":"1f628","😰":"1f630","😥":"1f625","😢":"1f622","😭":"1f62d","😱":"1f631","😖":"1f616","😣":"1f623","😞":"1f61e","😓":"1f613","😩":"1f629","😫":"1f62b","🥱":"1f971","😤":"1f624","😡":"1f621","😠":"1f620","🤬":"1f92c","😈":"1f608","👿":"1f47f","💀":"1f480","☠":"2620","💩":"1f4a9","🤡":"1f921","👹":"1f479","👺":"1f47a","👻":"1f47b","👽":"1f47d","👾":"1f47e","🤖":"1f916","😺":"1f63a","😸":"1f638","😹":"1f639","😻":"1f63b","😼":"1f63c","😽":"1f63d","🙀":"1f640","😿":"1f63f","😾":"1f63e","🙈":"1f648","🙉":"1f649","🙊":"1f64a","💋":"1f48b","💌":"1f48c","💘":"1f498","💝":"1f49d","💖":"1f496","💗":"1f497","💓":"1f493","💞":"1f49e","💕":"1f495","💟":"1f49f","❣":"2763","💔":"1f494","❤":"2764","🧡":"1f9e1","💛":"1f49b","💚":"1f49a","💙":"1f499","💜":"1f49c","🤎":"1f90e","🖤":"1f5a4","🤍":"1f90d","💯":"1f4af","💢":"1f4a2","💥":"1f4a5","💫":"1f4ab","💦":"1f4a6","💨":"1f4a8","🕳":"1f573","💣":"1f4a3","💬":"1f4ac","🗨":"1f5e8","🗯":"1f5ef","💭":"1f4ad","💤":"1f4a4","👋":"1f44b","🤚":"1f91a","🖐":"1f590","✋":"270b","🖖":"1f596","👌":"1f44c","🤌":"1f90c","🤏":"1f90f","✌":"270c","🤞":"1f91e","🤟":"1f91f","🤘":"1f918","🤙":"1f919","👈":"1f448","👉":"1f449","👆":"1f446","🖕":"1f595","👇":"1f447","☝":"261d","👍":"1f44d","👎":"1f44e","✊":"270a","👊":"1f44a","🤛":"1f91b","🤜":"1f91c","👏":"1f44f","🙌":"1f64c","👐":"1f450","🤲":"1f932","🤝":"1f91d","🙏":"1f64f","✍":"270d","💅":"1f485","🤳":"1f933","💪":"1f4aa","🦾":"1f9be","🦿":"1f9bf","🦵":"1f9b5","🦶":"1f9b6","👂":"1f442","🦻":"1f9bb","👃":"1f443","🧠":"1f9e0","🫀":"1fac0","🫁":"1fac1","🦷":"1f9b7","🦴":"1f9b4","👀":"1f440","👁":"1f441","👅":"1f445","👄":"1f444","👶":"1f476","🧒":"1f9d2","👦":"1f466","👧":"1f467","🧑":"1f9d1","👱":"1f471","👨":"1f468","🧔":"1f9d4","👩":"1f469","🧓":"1f9d3","👴":"1f474","👵":"1f475","🙍":"1f64d","🙎":"1f64e","🙅":"1f645","🙆":"1f646","💁":"1f481","🙋":"1f64b","🧏":"1f9cf","🙇":"1f647","🤦":"1f926","🤷":"1f937","👮":"1f46e","🕵":"1f575","💂":"1f482","🥷":"1f977","👷":"1f477","🤴":"1f934","👸":"1f478","👳":"1f473","👲":"1f472","🧕":"1f9d5","🤵":"1f935","👰":"1f470","🤰":"1f930","🤱":"1f931","👼":"1f47c","🎅":"1f385","🤶":"1f936","🦸":"1f9b8","🦹":"1f9b9","🧙":"1f9d9","🧚":"1f9da","🧛":"1f9db","🧜":"1f9dc","🧝":"1f9dd","🧞":"1f9de","🧟":"1f9df","💆":"1f486","💇":"1f487","🚶":"1f6b6","🧍":"1f9cd","🧎":"1f9ce","🏃":"1f3c3","💃":"1f483","🕺":"1f57a","🕴":"1f574","👯":"1f46f","🧖":"1f9d6","🧗":"1f9d7","🤺":"1f93a","🏇":"1f3c7","⛷":"26f7","🏂":"1f3c2","🏌":"1f3cc","🏄":"1f3c4","🚣":"1f6a3","🏊":"1f3ca","⛹":"26f9","🏋":"1f3cb","🚴":"1f6b4","🚵":"1f6b5","🤸":"1f938","🤼":"1f93c","🤽":"1f93d","🤾":"1f93e","🤹":"1f939","🧘":"1f9d8","🛀":"1f6c0","🛌":"1f6cc","👭":"1f46d","👫":"1f46b","👬":"1f46c","💏":"1f48f","💑":"1f491","👪":"1f46a","🗣":"1f5e3","👤":"1f464","👥":"1f465","🫂":"1fac2","👣":"1f463","🏻":"1f463","🏼":"1f463","🏽":"1f463","🏾":"1f463","🏿":"1f463","🦰":"1f463","🦱":"1f463","🦳":"1f463","🦲":"1f463","🐵":"1f435","🐒":"1f412","🦍":"1f98d","🦧":"1f9a7","🐶":"1f436","🐕":"1f415","🦮":"1f9ae","🐩":"1f429","🐺":"1f43a","🦊":"1f98a","🦝":"1f99d","🐱":"1f431","🐈":"1f408","🦁":"1f981","🐯":"1f42f","🐅":"1f405","🐆":"1f406","🐴":"1f434","🐎":"1f40e","🦄":"1f984","🦓":"1f993","🦌":"1f98c","🦬":"1f9ac","🐮":"1f42e","🐂":"1f402","🐃":"1f403","🐄":"1f404","🐷":"1f437","🐖":"1f416","🐗":"1f417","🐽":"1f43d","🐏":"1f40f","🐑":"1f411","🐐":"1f410","🐪":"1f42a","🐫":"1f42b","🦙":"1f999","🦒":"1f992","🐘":"1f418","🦣":"1f9a3","🦏":"1f98f","🦛":"1f99b","🐭":"1f42d","🐁":"1f401","🐀":"1f400","🐹":"1f439","🐰":"1f430","🐇":"1f407","🐿":"1f43f","🦫":"1f9ab","🦔":"1f994","🦇":"1f987","🐻":"1f43b","🐨":"1f428","🐼":"1f43c","🦥":"1f9a5","🦦":"1f9a6","🦨":"1f9a8","🦘":"1f998","🦡":"1f9a1","🐾":"1f43e","🦃":"1f983","🐔":"1f414","🐓":"1f413","🐣":"1f423","🐤":"1f424","🐥":"1f425","🐦":"1f426","🐧":"1f427","🕊":"1f54a","🦅":"1f985","🦆":"1f986","🦢":"1f9a2","🦉":"1f989","🦤":"1f9a4","🪶":"1fab6","🦩":"1f9a9","🦚":"1f99a","🦜":"1f99c","🐸":"1f438","🐊":"1f40a","🐢":"1f422","🦎":"1f98e","🐍":"1f40d","🐲":"1f432","🐉":"1f409","🦕":"1f995","🦖":"1f996","🐳":"1f433","🐋":"1f40b","🐬":"1f42c","🦭":"1f9ad","🐟":"1f41f","🐠":"1f420","🐡":"1f421","🦈":"1f988","🐙":"1f419","🐚":"1f41a","🐌":"1f40c","🦋":"1f98b","🐛":"1f41b","🐜":"1f41c","🐝":"1f41d","🪲":"1fab2","🐞":"1f41e","🦗":"1f997","🪳":"1fab3","🕷":"1f577","🕸":"1f578","🦂":"1f982","🦟":"1f99f","🪰":"1fab0","🪱":"1fab1","🦠":"1f9a0","💐":"1f490","🌸":"1f338","💮":"1f4ae","🏵":"1f3f5","🌹":"1f339","🥀":"1f940","🌺":"1f33a","🌻":"1f33b","🌼":"1f33c","🌷":"1f337","🌱":"1f331","🪴":"1fab4","🌲":"1f332","🌳":"1f333","🌴":"1f334","🌵":"1f335","🌾":"1f33e","🌿":"1f33f","☘":"2618","🍀":"1f340","🍁":"1f341","🍂":"1f342","🍃":"1f343","🍇":"1f347","🍈":"1f348","🍉":"1f349","🍊":"1f34a","🍋":"1f34b","🍌":"1f34c","🍍":"1f34d","🥭":"1f96d","🍎":"1f34e","🍏":"1f34f","🍐":"1f350","🍑":"1f351","🍒":"1f352","🍓":"1f353","🫐":"1fad0","🥝":"1f95d","🍅":"1f345","🫒":"1fad2","🥥":"1f965","🥑":"1f951","🍆":"1f346","🥔":"1f954","🥕":"1f955","🌽":"1f33d","🌶":"1f336","🫑":"1fad1","🥒":"1f952","🥬":"1f96c","🥦":"1f966","🧄":"1f9c4","🧅":"1f9c5","🍄":"1f344","🥜":"1f95c","🌰":"1f330","🍞":"1f35e","🥐":"1f950","🥖":"1f956","🫓":"1fad3","🥨":"1f968","🥯":"1f96f","🥞":"1f95e","🧇":"1f9c7","🧀":"1f9c0","🍖":"1f356","🍗":"1f357","🥩":"1f969","🥓":"1f953","🍔":"1f354","🍟":"1f35f","🍕":"1f355","🌭":"1f32d","🥪":"1f96a","🌮":"1f32e","🌯":"1f32f","🫔":"1fad4","🥙":"1f959","🧆":"1f9c6","🥚":"1f95a","🍳":"1f373","🥘":"1f958","🍲":"1f372","🫕":"1fad5","🥣":"1f963","🥗":"1f957","🍿":"1f37f","🧈":"1f9c8","🧂":"1f9c2","🥫":"1f96b","🍱":"1f371","🍘":"1f358","🍙":"1f359","🍚":"1f35a","🍛":"1f35b","🍜":"1f35c","🍝":"1f35d","🍠":"1f360","🍢":"1f362","🍣":"1f363","🍤":"1f364","🍥":"1f365","🥮":"1f96e","🍡":"1f361","🥟":"1f95f","🥠":"1f960","🥡":"1f961","🦀":"1f980","🦞":"1f99e","🦐":"1f990","🦑":"1f991","🦪":"1f9aa","🍦":"1f366","🍧":"1f367","🍨":"1f368","🍩":"1f369","🍪":"1f36a","🎂":"1f382","🍰":"1f370","🧁":"1f9c1","🥧":"1f967","🍫":"1f36b","🍬":"1f36c","🍭":"1f36d","🍮":"1f36e","🍯":"1f36f","🍼":"1f37c","🥛":"1f95b","☕":"2615","🫖":"1fad6","🍵":"1f375","🍶":"1f376","🍾":"1f37e","🍷":"1f377","🍸":"1f378","🍹":"1f379","🍺":"1f37a","🍻":"1f37b","🥂":"1f942","🥃":"1f943","🥤":"1f964","🧋":"1f9cb","🧃":"1f9c3","🧉":"1f9c9","🧊":"1f9ca","🥢":"1f962","🍽":"1f37d","🍴":"1f374","🥄":"1f944","🔪":"1f52a","🏺":"1f3fa","🌍":"1f30d","🌎":"1f30e","🌏":"1f30f","🌐":"1f310","🗺":"1f5fa","🗾":"1f5fe","🧭":"1f9ed","🏔":"1f3d4","⛰":"26f0","🌋":"1f30b","🗻":"1f5fb","🏕":"1f3d5","🏖":"1f3d6","🏜":"1f3dc","🏝":"1f3dd","🏞":"1f3de","🏟":"1f3df","🏛":"1f3db","🏗":"1f3d7","🧱":"1f9f1","🪨":"1faa8","🪵":"1fab5","🛖":"1f6d6","🏘":"1f3d8","🏚":"1f3da","🏠":"1f3e0","🏡":"1f3e1","🏢":"1f3e2","🏣":"1f3e3","🏤":"1f3e4","🏥":"1f3e5","🏦":"1f3e6","🏨":"1f3e8","🏩":"1f3e9","🏪":"1f3ea","🏫":"1f3eb","🏬":"1f3ec","🏭":"1f3ed","🏯":"1f3ef","🏰":"1f3f0","💒":"1f492","🗼":"1f5fc","🗽":"1f5fd","⛪":"26ea","🕌":"1f54c","🛕":"1f6d5","🕍":"1f54d","⛩":"26e9","🕋":"1f54b","⛲":"26f2","⛺":"26fa","🌁":"1f301","🌃":"1f303","🏙":"1f3d9","🌄":"1f304","🌅":"1f305","🌆":"1f306","🌇":"1f307","🌉":"1f309","♨":"2668","🎠":"1f3a0","🎡":"1f3a1","🎢":"1f3a2","💈":"1f488","🎪":"1f3aa","🚂":"1f682","🚃":"1f683","🚄":"1f684","🚅":"1f685","🚆":"1f686","🚇":"1f687","🚈":"1f688","🚉":"1f689","🚊":"1f68a","🚝":"1f69d","🚞":"1f69e","🚋":"1f68b","🚌":"1f68c","🚍":"1f68d","🚎":"1f68e","🚐":"1f690","🚑":"1f691","🚒":"1f692","🚓":"1f693","🚔":"1f694","🚕":"1f695","🚖":"1f696","🚗":"1f697","🚘":"1f698","🚙":"1f699","🛻":"1f6fb","🚚":"1f69a","🚛":"1f69b","🚜":"1f69c","🏎":"1f3ce","🏍":"1f3cd","🛵":"1f6f5","🦽":"1f9bd","🦼":"1f9bc","🛺":"1f6fa","🚲":"1f6b2","🛴":"1f6f4","🛹":"1f6f9","🛼":"1f6fc","🚏":"1f68f","🛣":"1f6e3","🛤":"1f6e4","🛢":"1f6e2","⛽":"26fd","🚨":"1f6a8","🚥":"1f6a5","🚦":"1f6a6","🛑":"1f6d1","🚧":"1f6a7","⚓":"2693","⛵":"26f5","🛶":"1f6f6","🚤":"1f6a4","🛳":"1f6f3","⛴":"26f4","🛥":"1f6e5","🚢":"1f6a2","✈":"2708","🛩":"1f6e9","🛫":"1f6eb","🛬":"1f6ec","🪂":"1fa82","💺":"1f4ba","🚁":"1f681","🚟":"1f69f","🚠":"1f6a0","🚡":"1f6a1","🛰":"1f6f0","🚀":"1f680","🛸":"1f6f8","🛎":"1f6ce","🧳":"1f9f3","⌛":"231b","⏳":"23f3","⌚":"231a","⏰":"23f0","⏱":"23f1","⏲":"23f2","🕰":"1f570","🕛":"1f55b","🕧":"1f567","🕐":"1f550","🕜":"1f55c","🕑":"1f551","🕝":"1f55d","🕒":"1f552","🕞":"1f55e","🕓":"1f553","🕟":"1f55f","🕔":"1f554","🕠":"1f560","🕕":"1f555","🕡":"1f561","🕖":"1f556","🕢":"1f562","🕗":"1f557","🕣":"1f563","🕘":"1f558","🕤":"1f564","🕙":"1f559","🕥":"1f565","🕚":"1f55a","🕦":"1f566","🌑":"1f311","🌒":"1f312","🌓":"1f313","🌔":"1f314","🌕":"1f315","🌖":"1f316","🌗":"1f317","🌘":"1f318","🌙":"1f319","🌚":"1f31a","🌛":"1f31b","🌜":"1f31c","🌡":"1f321","☀":"2600","🌝":"1f31d","🌞":"1f31e","🪐":"1fa90","⭐":"2b50","🌟":"1f31f","🌠":"1f320","🌌":"1f30c","☁":"2601","⛅":"26c5","⛈":"26c8","🌤":"1f324","🌥":"1f325","🌦":"1f326","🌧":"1f327","🌨":"1f328","🌩":"1f329","🌪":"1f32a","🌫":"1f32b","🌬":"1f32c","🌀":"1f300","🌈":"1f308","🌂":"1f302","☂":"2602","☔":"2614","⛱":"26f1","⚡":"26a1","❄":"2744","☃":"2603","⛄":"26c4","☄":"2604","🔥":"1f525","💧":"1f4a7","🌊":"1f30a","🎃":"1f383","🎄":"1f384","🎆":"1f386","🎇":"1f387","🧨":"1f9e8","✨":"2728","🎈":"1f388","🎉":"1f389","🎊":"1f38a","🎋":"1f38b","🎍":"1f38d","🎎":"1f38e","🎏":"1f38f","🎐":"1f390","🎑":"1f391","🧧":"1f9e7","🎀":"1f380","🎁":"1f381","🎗":"1f397","🎟":"1f39f","🎫":"1f3ab","🎖":"1f396","🏆":"1f3c6","🏅":"1f3c5","🥇":"1f947","🥈":"1f948","🥉":"1f949","⚽":"26bd","⚾":"26be","🥎":"1f94e","🏀":"1f3c0","🏐":"1f3d0","🏈":"1f3c8","🏉":"1f3c9","🎾":"1f3be","🥏":"1f94f","🎳":"1f3b3","🏏":"1f3cf","🏑":"1f3d1","🏒":"1f3d2","🥍":"1f94d","🏓":"1f3d3","🏸":"1f3f8","🥊":"1f94a","🥋":"1f94b","🥅":"1f945","⛳":"26f3","⛸":"26f8","🎣":"1f3a3","🤿":"1f93f","🎽":"1f3bd","🎿":"1f3bf","🛷":"1f6f7","🥌":"1f94c","🎯":"1f3af","🪀":"1fa80","🪁":"1fa81","🎱":"1f3b1","🔮":"1f52e","🪄":"1fa84","🧿":"1f9ff","🎮":"1f3ae","🕹":"1f579","🎰":"1f3b0","🎲":"1f3b2","🧩":"1f9e9","🧸":"1f9f8","🪅":"1fa85","🪆":"1fa86","♠":"2660","♥":"2665","♦":"2666","♣":"2663","♟":"265f","🃏":"1f0cf","🀄":"1f004","🎴":"1f3b4","🎭":"1f3ad","🖼":"1f5bc","🎨":"1f3a8","🧵":"1f9f5","🪡":"1faa1","🧶":"1f9f6","🪢":"1faa2","👓":"1f453","🕶":"1f576","🥽":"1f97d","🥼":"1f97c","🦺":"1f9ba","👔":"1f454","👕":"1f455","👖":"1f456","🧣":"1f9e3","🧤":"1f9e4","🧥":"1f9e5","🧦":"1f9e6","👗":"1f457","👘":"1f458","🥻":"1f97b","🩱":"1fa71","🩲":"1fa72","🩳":"1fa73","👙":"1f459","👚":"1f45a","👛":"1f45b","👜":"1f45c","👝":"1f45d","🛍":"1f6cd","🎒":"1f392","🩴":"1fa74","👞":"1f45e","👟":"1f45f","🥾":"1f97e","🥿":"1f97f","👠":"1f460","👡":"1f461","🩰":"1fa70","👢":"1f462","👑":"1f451","👒":"1f452","🎩":"1f3a9","🎓":"1f393","🧢":"1f9e2","🪖":"1fa96","⛑":"26d1","📿":"1f4ff","💄":"1f484","💍":"1f48d","💎":"1f48e","🔇":"1f507","🔈":"1f508","🔉":"1f509","🔊":"1f50a","📢":"1f4e2","📣":"1f4e3","📯":"1f4ef","🔔":"1f514","🔕":"1f515","🎼":"1f3bc","🎵":"1f3b5","🎶":"1f3b6","🎙":"1f399","🎚":"1f39a","🎛":"1f39b","🎤":"1f3a4","🎧":"1f3a7","📻":"1f4fb","🎷":"1f3b7","🪗":"1fa97","🎸":"1f3b8","🎹":"1f3b9","🎺":"1f3ba","🎻":"1f3bb","🪕":"1fa95","🥁":"1f941","🪘":"1fa98","📱":"1f4f1","📲":"1f4f2","☎":"260e","📞":"1f4de","📟":"1f4df","📠":"1f4e0","🔋":"1f50b","🔌":"1f50c","💻":"1f4bb","🖥":"1f5a5","🖨":"1f5a8","⌨":"2328","🖱":"1f5b1","🖲":"1f5b2","💽":"1f4bd","💾":"1f4be","💿":"1f4bf","📀":"1f4c0","🧮":"1f9ee","🎥":"1f3a5","🎞":"1f39e","📽":"1f4fd","🎬":"1f3ac","📺":"1f4fa","📷":"1f4f7","📸":"1f4f8","📹":"1f4f9","📼":"1f4fc","🔍":"1f50d","🔎":"1f50e","🕯":"1f56f","💡":"1f4a1","🔦":"1f526","🏮":"1f3ee","🪔":"1fa94","📔":"1f4d4","📕":"1f4d5","📖":"1f4d6","📗":"1f4d7","📘":"1f4d8","📙":"1f4d9","📚":"1f4da","📓":"1f4d3","📒":"1f4d2","📃":"1f4c3","📜":"1f4dc","📄":"1f4c4","📰":"1f4f0","🗞":"1f5de","📑":"1f4d1","🔖":"1f516","🏷":"1f3f7","💰":"1f4b0","🪙":"1fa99","💴":"1f4b4","💵":"1f4b5","💶":"1f4b6","💷":"1f4b7","💸":"1f4b8","💳":"1f4b3","🧾":"1f9fe","💹":"1f4b9","✉":"2709","📧":"1f4e7","📨":"1f4e8","📩":"1f4e9","📤":"1f4e4","📥":"1f4e5","📦":"1f4e6","📫":"1f4eb","📪":"1f4ea","📬":"1f4ec","📭":"1f4ed","📮":"1f4ee","🗳":"1f5f3","✏":"270f","✒":"2712","🖋":"1f58b","🖊":"1f58a","🖌":"1f58c","🖍":"1f58d","📝":"1f4dd","💼":"1f4bc","📁":"1f4c1","📂":"1f4c2","🗂":"1f5c2","📅":"1f4c5","📆":"1f4c6","🗒":"1f5d2","🗓":"1f5d3","📇":"1f4c7","📈":"1f4c8","📉":"1f4c9","📊":"1f4ca","📋":"1f4cb","📌":"1f4cc","📍":"1f4cd","📎":"1f4ce","🖇":"1f587","📏":"1f4cf","📐":"1f4d0","✂":"2702","🗃":"1f5c3","🗄":"1f5c4","🗑":"1f5d1","🔒":"1f512","🔓":"1f513","🔏":"1f50f","🔐":"1f510","🔑":"1f511","🗝":"1f5dd","🔨":"1f528","🪓":"1fa93","⛏":"26cf","⚒":"2692","🛠":"1f6e0","🗡":"1f5e1","⚔":"2694","🔫":"1f52b","🪃":"1fa83","🏹":"1f3f9","🛡":"1f6e1","🪚":"1fa9a","🔧":"1f527","🪛":"1fa9b","🔩":"1f529","⚙":"2699","🗜":"1f5dc","⚖":"2696","🦯":"1f9af","🔗":"1f517","⛓":"26d3","🪝":"1fa9d","🧰":"1f9f0","🧲":"1f9f2","🪜":"1fa9c","⚗":"2697","🧪":"1f9ea","🧫":"1f9eb","🧬":"1f9ec","🔬":"1f52c","🔭":"1f52d","📡":"1f4e1","💉":"1f489","🩸":"1fa78","💊":"1f48a","🩹":"1fa79","🩺":"1fa7a","🚪":"1f6aa","🛗":"1f6d7","🪞":"1fa9e","🪟":"1fa9f","🛏":"1f6cf","🛋":"1f6cb","🪑":"1fa91","🚽":"1f6bd","🪠":"1faa0","🚿":"1f6bf","🛁":"1f6c1","🪤":"1faa4","🪒":"1fa92","🧴":"1f9f4","🧷":"1f9f7","🧹":"1f9f9","🧺":"1f9fa","🧻":"1f9fb","🪣":"1faa3","🧼":"1f9fc","🪥":"1faa5","🧽":"1f9fd","🧯":"1f9ef","🛒":"1f6d2","🚬":"1f6ac","⚰":"26b0","🪦":"1faa6","⚱":"26b1","🗿":"1f5ff","🪧":"1faa7","🏧":"1f3e7","🚮":"1f6ae","🚰":"1f6b0","♿":"267f","🚹":"1f6b9","🚺":"1f6ba","🚻":"1f6bb","🚼":"1f6bc","🚾":"1f6be","🛂":"1f6c2","🛃":"1f6c3","🛄":"1f6c4","🛅":"1f6c5","⚠":"26a0","🚸":"1f6b8","⛔":"26d4","🚫":"1f6ab","🚳":"1f6b3","🚭":"1f6ad","🚯":"1f6af","🚱":"1f6b1","🚷":"1f6b7","📵":"1f4f5","🔞":"1f51e","☢":"2622","☣":"2623","⬆":"2b06","↗":"2197","➡":"27a1","↘":"2198","⬇":"2b07","↙":"2199","⬅":"2b05","↖":"2196","↕":"2195","↔":"2194","↩":"21a9","↪":"21aa","⤴":"2934","⤵":"2935","🔃":"1f503","🔄":"1f504","🔙":"1f519","🔚":"1f51a","🔛":"1f51b","🔜":"1f51c","🔝":"1f51d","🛐":"1f6d0","⚛":"269b","🕉":"1f549","✡":"2721","☸":"2638","☯":"262f","✝":"271d","☦":"2626","☪":"262a","☮":"262e","🕎":"1f54e","🔯":"1f52f","♈":"2648","♉":"2649","♊":"264a","♋":"264b","♌":"264c","♍":"264d","♎":"264e","♏":"264f","♐":"2650","♑":"2651","♒":"2652","♓":"2653","⛎":"26ce","🔀":"1f500","🔁":"1f501","🔂":"1f502","▶":"25b6","⏩":"23e9","⏭":"23ed","⏯":"23ef","◀":"25c0","⏪":"23ea","⏮":"23ee","🔼":"1f53c","⏫":"23eb","🔽":"1f53d","⏬":"23ec","⏸":"23f8","⏹":"23f9","⏺":"23fa","⏏":"23cf","🎦":"1f3a6","🔅":"1f505","🔆":"1f506","📶":"1f4f6","📳":"1f4f3","📴":"1f4f4","♀":"2640","♂":"2642","⚧":"26a7","✖":"2716","➕":"2795","➖":"2796","➗":"2797","♾":"267e","‼":"203c","⁉":"2049","❓":"2753","❔":"2754","❕":"2755","❗":"2757","〰":"3030","💱":"1f4b1","💲":"1f4b2","⚕":"2695","♻":"267b","⚜":"269c","🔱":"1f531","📛":"1f4db","🔰":"1f530","⭕":"2b55","✅":"2705","☑":"2611","✔":"2714","❌":"274c","❎":"274e","➰":"27b0","➿":"27bf","〽":"303d","✳":"2733","✴":"2734","❇":"2747","©":"a9","®":"ae","™":"2122","🔟":"1f51f","🔠":"1f520","🔡":"1f521","🔢":"1f522","🔣":"1f523","🔤":"1f524","🅰":"1f170","🆎":"1f18e","🅱":"1f171","🆑":"1f191","🆒":"1f192","🆓":"1f193","ℹ":"2139","🆔":"1f194","Ⓜ":"24c2","🆕":"1f195","🆖":"1f196","🅾":"1f17e","🆗":"1f197","🅿":"1f17f","🆘":"1f198","🆙":"1f199","🆚":"1f19a","🈁":"1f201","🈂":"1f202","🈷":"1f237","🈶":"1f236","🈯":"1f22f","🉐":"1f250","🈹":"1f239","🈚":"1f21a","🈲":"1f232","🉑":"1f251","🈸":"1f238","🈴":"1f234","🈳":"1f233","㊗":"3297","㊙":"3299","🈺":"1f23a","🈵":"1f235","🔴":"1f534","🟠":"1f7e0","🟡":"1f7e1","🟢":"1f7e2","🔵":"1f535","🟣":"1f7e3","🟤":"1f7e4","⚫":"26ab","⚪":"26aa","🟥":"1f7e5","🟧":"1f7e7","🟨":"1f7e8","🟩":"1f7e9","🟦":"1f7e6","🟪":"1f7ea","🟫":"1f7eb","⬛":"2b1b","⬜":"2b1c","◼":"25fc","◻":"25fb","◾":"25fe","◽":"25fd","▪":"25aa","▫":"25ab","🔶":"1f536","🔷":"1f537","🔸":"1f538","🔹":"1f539","🔺":"1f53a","🔻":"1f53b","💠":"1f4a0","🔘":"1f518","🔳":"1f533","🔲":"1f532","🏁":"1f3c1","🚩":"1f6a9","🎌":"1f38c","🏴":"1f3f4","🏳":"1f3f3","☺️":"263a","☹️":"2639","☠️":"2620","❣️":"2763","❤️":"2764","🕳️":"1f573","🗨️":"1f5e8","🗯️":"1f5ef","👋🏻":"1f44b-1f3fb","👋🏼":"1f44b-1f3fc","👋🏽":"1f44b-1f3fd","👋🏾":"1f44b-1f3fe","👋🏿":"1f44b-1f3ff","🤚🏻":"1f91a-1f3fb","🤚🏼":"1f91a-1f3fc","🤚🏽":"1f91a-1f3fd","🤚🏾":"1f91a-1f3fe","🤚🏿":"1f91a-1f3ff","🖐️":"1f590","🖐🏻":"1f590-1f3fb","🖐🏼":"1f590-1f3fc","🖐🏽":"1f590-1f3fd","🖐🏾":"1f590-1f3fe","🖐🏿":"1f590-1f3ff","✋🏻":"270b-1f3fb","✋🏼":"270b-1f3fc","✋🏽":"270b-1f3fd","✋🏾":"270b-1f3fe","✋🏿":"270b-1f3ff","🖖🏻":"1f596-1f3fb","🖖🏼":"1f596-1f3fc","🖖🏽":"1f596-1f3fd","🖖🏾":"1f596-1f3fe","🖖🏿":"1f596-1f3ff","👌🏻":"1f44c-1f3fb","👌🏼":"1f44c-1f3fc","👌🏽":"1f44c-1f3fd","👌🏾":"1f44c-1f3fe","👌🏿":"1f44c-1f3ff","🤌🏻":"1f90c-1f3fb","🤌🏼":"1f90c-1f3fc","🤌🏽":"1f90c-1f3fd","🤌🏾":"1f90c-1f3fe","🤌🏿":"1f90c-1f3ff","🤏🏻":"1f90f-1f3fb","🤏🏼":"1f90f-1f3fc","🤏🏽":"1f90f-1f3fd","🤏🏾":"1f90f-1f3fe","🤏🏿":"1f90f-1f3ff","✌️":"270c","✌🏻":"270c-1f3fb","✌🏼":"270c-1f3fc","✌🏽":"270c-1f3fd","✌🏾":"270c-1f3fe","✌🏿":"270c-1f3ff","🤞🏻":"1f91e-1f3fb","🤞🏼":"1f91e-1f3fc","🤞🏽":"1f91e-1f3fd","🤞🏾":"1f91e-1f3fe","🤞🏿":"1f91e-1f3ff","🤟🏻":"1f91f-1f3fb","🤟🏼":"1f91f-1f3fc","🤟🏽":"1f91f-1f3fd","🤟🏾":"1f91f-1f3fe","🤟🏿":"1f91f-1f3ff","🤘🏻":"1f918-1f3fb","🤘🏼":"1f918-1f3fc","🤘🏽":"1f918-1f3fd","🤘🏾":"1f918-1f3fe","🤘🏿":"1f918-1f3ff","🤙🏻":"1f919-1f3fb","🤙🏼":"1f919-1f3fc","🤙🏽":"1f919-1f3fd","🤙🏾":"1f919-1f3fe","🤙🏿":"1f919-1f3ff","👈🏻":"1f448-1f3fb","👈🏼":"1f448-1f3fc","👈🏽":"1f448-1f3fd","👈🏾":"1f448-1f3fe","👈🏿":"1f448-1f3ff","👉🏻":"1f449-1f3fb","👉🏼":"1f449-1f3fc","👉🏽":"1f449-1f3fd","👉🏾":"1f449-1f3fe","👉🏿":"1f449-1f3ff","👆🏻":"1f446-1f3fb","👆🏼":"1f446-1f3fc","👆🏽":"1f446-1f3fd","👆🏾":"1f446-1f3fe","👆🏿":"1f446-1f3ff","🖕🏻":"1f595-1f3fb","🖕🏼":"1f595-1f3fc","🖕🏽":"1f595-1f3fd","🖕🏾":"1f595-1f3fe","🖕🏿":"1f595-1f3ff","👇🏻":"1f447-1f3fb","👇🏼":"1f447-1f3fc","👇🏽":"1f447-1f3fd","👇🏾":"1f447-1f3fe","👇🏿":"1f447-1f3ff","☝️":"261d","☝🏻":"261d-1f3fb","☝🏼":"261d-1f3fc","☝🏽":"261d-1f3fd","☝🏾":"261d-1f3fe","☝🏿":"261d-1f3ff","👍🏻":"1f44d-1f3fb","👍🏼":"1f44d-1f3fc","👍🏽":"1f44d-1f3fd","👍🏾":"1f44d-1f3fe","👍🏿":"1f44d-1f3ff","👎🏻":"1f44e-1f3fb","👎🏼":"1f44e-1f3fc","👎🏽":"1f44e-1f3fd","👎🏾":"1f44e-1f3fe","👎🏿":"1f44e-1f3ff","✊🏻":"270a-1f3fb","✊🏼":"270a-1f3fc","✊🏽":"270a-1f3fd","✊🏾":"270a-1f3fe","✊🏿":"270a-1f3ff","👊🏻":"1f44a-1f3fb","👊🏼":"1f44a-1f3fc","👊🏽":"1f44a-1f3fd","👊🏾":"1f44a-1f3fe","👊🏿":"1f44a-1f3ff","🤛🏻":"1f91b-1f3fb","🤛🏼":"1f91b-1f3fc","🤛🏽":"1f91b-1f3fd","🤛🏾":"1f91b-1f3fe","🤛🏿":"1f91b-1f3ff","🤜🏻":"1f91c-1f3fb","🤜🏼":"1f91c-1f3fc","🤜🏽":"1f91c-1f3fd","🤜🏾":"1f91c-1f3fe","🤜🏿":"1f91c-1f3ff","👏🏻":"1f44f-1f3fb","👏🏼":"1f44f-1f3fc","👏🏽":"1f44f-1f3fd","👏🏾":"1f44f-1f3fe","👏🏿":"1f44f-1f3ff","🙌🏻":"1f64c-1f3fb","🙌🏼":"1f64c-1f3fc","🙌🏽":"1f64c-1f3fd","🙌🏾":"1f64c-1f3fe","🙌🏿":"1f64c-1f3ff","👐🏻":"1f450-1f3fb","👐🏼":"1f450-1f3fc","👐🏽":"1f450-1f3fd","👐🏾":"1f450-1f3fe","👐🏿":"1f450-1f3ff","🤲🏻":"1f932-1f3fb","🤲🏼":"1f932-1f3fc","🤲🏽":"1f932-1f3fd","🤲🏾":"1f932-1f3fe","🤲🏿":"1f932-1f3ff","🙏🏻":"1f64f-1f3fb","🙏🏼":"1f64f-1f3fc","🙏🏽":"1f64f-1f3fd","🙏🏾":"1f64f-1f3fe","🙏🏿":"1f64f-1f3ff","✍️":"270d","✍🏻":"270d-1f3fb","✍🏼":"270d-1f3fc","✍🏽":"270d-1f3fd","✍🏾":"270d-1f3fe","✍🏿":"270d-1f3ff","💅🏻":"1f485-1f3fb","💅🏼":"1f485-1f3fc","💅🏽":"1f485-1f3fd","💅🏾":"1f485-1f3fe","💅🏿":"1f485-1f3ff","🤳🏻":"1f933-1f3fb","🤳🏼":"1f933-1f3fc","🤳🏽":"1f933-1f3fd","🤳🏾":"1f933-1f3fe","🤳🏿":"1f933-1f3ff","💪🏻":"1f4aa-1f3fb","💪🏼":"1f4aa-1f3fc","💪🏽":"1f4aa-1f3fd","💪🏾":"1f4aa-1f3fe","💪🏿":"1f4aa-1f3ff","🦵🏻":"1f9b5-1f3fb","🦵🏼":"1f9b5-1f3fc","🦵🏽":"1f9b5-1f3fd","🦵🏾":"1f9b5-1f3fe","🦵🏿":"1f9b5-1f3ff","🦶🏻":"1f9b6-1f3fb","🦶🏼":"1f9b6-1f3fc","🦶🏽":"1f9b6-1f3fd","🦶🏾":"1f9b6-1f3fe","🦶🏿":"1f9b6-1f3ff","👂🏻":"1f442-1f3fb","👂🏼":"1f442-1f3fc","👂🏽":"1f442-1f3fd","👂🏾":"1f442-1f3fe","👂🏿":"1f442-1f3ff","🦻🏻":"1f9bb-1f3fb","🦻🏼":"1f9bb-1f3fc","🦻🏽":"1f9bb-1f3fd","🦻🏾":"1f9bb-1f3fe","🦻🏿":"1f9bb-1f3ff","👃🏻":"1f443-1f3fb","👃🏼":"1f443-1f3fc","👃🏽":"1f443-1f3fd","👃🏾":"1f443-1f3fe","👃🏿":"1f443-1f3ff","👁️":"1f441","👶🏻":"1f476-1f3fb","👶🏼":"1f476-1f3fc","👶🏽":"1f476-1f3fd","👶🏾":"1f476-1f3fe","👶🏿":"1f476-1f3ff","🧒🏻":"1f9d2-1f3fb","🧒🏼":"1f9d2-1f3fc","🧒🏽":"1f9d2-1f3fd","🧒🏾":"1f9d2-1f3fe","🧒🏿":"1f9d2-1f3ff","👦🏻":"1f466-1f3fb","👦🏼":"1f466-1f3fc","👦🏽":"1f466-1f3fd","👦🏾":"1f466-1f3fe","👦🏿":"1f466-1f3ff","👧🏻":"1f467-1f3fb","👧🏼":"1f467-1f3fc","👧🏽":"1f467-1f3fd","👧🏾":"1f467-1f3fe","👧🏿":"1f467-1f3ff","🧑🏻":"1f9d1-1f3fb","🧑🏼":"1f9d1-1f3fc","🧑🏽":"1f9d1-1f3fd","🧑🏾":"1f9d1-1f3fe","🧑🏿":"1f9d1-1f3ff","👱🏻":"1f471-1f3fb","👱🏼":"1f471-1f3fc","👱🏽":"1f471-1f3fd","👱🏾":"1f471-1f3fe","👱🏿":"1f471-1f3ff","👨🏻":"1f468-1f3fb","👨🏼":"1f468-1f3fc","👨🏽":"1f468-1f3fd","👨🏾":"1f468-1f3fe","👨🏿":"1f468-1f3ff","🧔🏻":"1f9d4-1f3fb","🧔🏼":"1f9d4-1f3fc","🧔🏽":"1f9d4-1f3fd","🧔🏾":"1f9d4-1f3fe","🧔🏿":"1f9d4-1f3ff","👩🏻":"1f469-1f3fb","👩🏼":"1f469-1f3fc","👩🏽":"1f469-1f3fd","👩🏾":"1f469-1f3fe","👩🏿":"1f469-1f3ff","🧓🏻":"1f9d3-1f3fb","🧓🏼":"1f9d3-1f3fc","🧓🏽":"1f9d3-1f3fd","🧓🏾":"1f9d3-1f3fe","🧓🏿":"1f9d3-1f3ff","👴🏻":"1f474-1f3fb","👴🏼":"1f474-1f3fc","👴🏽":"1f474-1f3fd","👴🏾":"1f474-1f3fe","👴🏿":"1f474-1f3ff","👵🏻":"1f475-1f3fb","👵🏼":"1f475-1f3fc","👵🏽":"1f475-1f3fd","👵🏾":"1f475-1f3fe","👵🏿":"1f475-1f3ff","🙍🏻":"1f64d-1f3fb","🙍🏼":"1f64d-1f3fc","🙍🏽":"1f64d-1f3fd","🙍🏾":"1f64d-1f3fe","🙍🏿":"1f64d-1f3ff","🙎🏻":"1f64e-1f3fb","🙎🏼":"1f64e-1f3fc","🙎🏽":"1f64e-1f3fd","🙎🏾":"1f64e-1f3fe","🙎🏿":"1f64e-1f3ff","🙅🏻":"1f645-1f3fb","🙅🏼":"1f645-1f3fc","🙅🏽":"1f645-1f3fd","🙅🏾":"1f645-1f3fe","🙅🏿":"1f645-1f3ff","🙆🏻":"1f646-1f3fb","🙆🏼":"1f646-1f3fc","🙆🏽":"1f646-1f3fd","🙆🏾":"1f646-1f3fe","🙆🏿":"1f646-1f3ff","💁🏻":"1f481-1f3fb","💁🏼":"1f481-1f3fc","💁🏽":"1f481-1f3fd","💁🏾":"1f481-1f3fe","💁🏿":"1f481-1f3ff","🙋🏻":"1f64b-1f3fb","🙋🏼":"1f64b-1f3fc","🙋🏽":"1f64b-1f3fd","🙋🏾":"1f64b-1f3fe","🙋🏿":"1f64b-1f3ff","🧏🏻":"1f9cf-1f3fb","🧏🏼":"1f9cf-1f3fc","🧏🏽":"1f9cf-1f3fd","🧏🏾":"1f9cf-1f3fe","🧏🏿":"1f9cf-1f3ff","🙇🏻":"1f647-1f3fb","🙇🏼":"1f647-1f3fc","🙇🏽":"1f647-1f3fd","🙇🏾":"1f647-1f3fe","🙇🏿":"1f647-1f3ff","🤦🏻":"1f926-1f3fb","🤦🏼":"1f926-1f3fc","🤦🏽":"1f926-1f3fd","🤦🏾":"1f926-1f3fe","🤦🏿":"1f926-1f3ff","🤷🏻":"1f937-1f3fb","🤷🏼":"1f937-1f3fc","🤷🏽":"1f937-1f3fd","🤷🏾":"1f937-1f3fe","🤷🏿":"1f937-1f3ff","👮🏻":"1f46e-1f3fb","👮🏼":"1f46e-1f3fc","👮🏽":"1f46e-1f3fd","👮🏾":"1f46e-1f3fe","👮🏿":"1f46e-1f3ff","🕵️":"1f575","🕵🏻":"1f575-1f3fb","🕵🏼":"1f575-1f3fc","🕵🏽":"1f575-1f3fd","🕵🏾":"1f575-1f3fe","🕵🏿":"1f575-1f3ff","💂🏻":"1f482-1f3fb","💂🏼":"1f482-1f3fc","💂🏽":"1f482-1f3fd","💂🏾":"1f482-1f3fe","💂🏿":"1f482-1f3ff","🥷🏻":"1f977-1f3fb","🥷🏼":"1f977-1f3fc","🥷🏽":"1f977-1f3fd","🥷🏾":"1f977-1f3fe","🥷🏿":"1f977-1f3ff","👷🏻":"1f477-1f3fb","👷🏼":"1f477-1f3fc","👷🏽":"1f477-1f3fd","👷🏾":"1f477-1f3fe","👷🏿":"1f477-1f3ff","🤴🏻":"1f934-1f3fb","🤴🏼":"1f934-1f3fc","🤴🏽":"1f934-1f3fd","🤴🏾":"1f934-1f3fe","🤴🏿":"1f934-1f3ff","👸🏻":"1f478-1f3fb","👸🏼":"1f478-1f3fc","👸🏽":"1f478-1f3fd","👸🏾":"1f478-1f3fe","👸🏿":"1f478-1f3ff","👳🏻":"1f473-1f3fb","👳🏼":"1f473-1f3fc","👳🏽":"1f473-1f3fd","👳🏾":"1f473-1f3fe","👳🏿":"1f473-1f3ff","👲🏻":"1f472-1f3fb","👲🏼":"1f472-1f3fc","👲🏽":"1f472-1f3fd","👲🏾":"1f472-1f3fe","👲🏿":"1f472-1f3ff","🧕🏻":"1f9d5-1f3fb","🧕🏼":"1f9d5-1f3fc","🧕🏽":"1f9d5-1f3fd","🧕🏾":"1f9d5-1f3fe","🧕🏿":"1f9d5-1f3ff","🤵🏻":"1f935-1f3fb","🤵🏼":"1f935-1f3fc","🤵🏽":"1f935-1f3fd","🤵🏾":"1f935-1f3fe","🤵🏿":"1f935-1f3ff","👰🏻":"1f470-1f3fb","👰🏼":"1f470-1f3fc","👰🏽":"1f470-1f3fd","👰🏾":"1f470-1f3fe","👰🏿":"1f470-1f3ff","🤰🏻":"1f930-1f3fb","🤰🏼":"1f930-1f3fc","🤰🏽":"1f930-1f3fd","🤰🏾":"1f930-1f3fe","🤰🏿":"1f930-1f3ff","🤱🏻":"1f931-1f3fb","🤱🏼":"1f931-1f3fc","🤱🏽":"1f931-1f3fd","🤱🏾":"1f931-1f3fe","🤱🏿":"1f931-1f3ff","👼🏻":"1f47c-1f3fb","👼🏼":"1f47c-1f3fc","👼🏽":"1f47c-1f3fd","👼🏾":"1f47c-1f3fe","👼🏿":"1f47c-1f3ff","🎅🏻":"1f385-1f3fb","🎅🏼":"1f385-1f3fc","🎅🏽":"1f385-1f3fd","🎅🏾":"1f385-1f3fe","🎅🏿":"1f385-1f3ff","🤶🏻":"1f936-1f3fb","🤶🏼":"1f936-1f3fc","🤶🏽":"1f936-1f3fd","🤶🏾":"1f936-1f3fe","🤶🏿":"1f936-1f3ff","🦸🏻":"1f9b8-1f3fb","🦸🏼":"1f9b8-1f3fc","🦸🏽":"1f9b8-1f3fd","🦸🏾":"1f9b8-1f3fe","🦸🏿":"1f9b8-1f3ff","🦹🏻":"1f9b9-1f3fb","🦹🏼":"1f9b9-1f3fc","🦹🏽":"1f9b9-1f3fd","🦹🏾":"1f9b9-1f3fe","🦹🏿":"1f9b9-1f3ff","🧙🏻":"1f9d9-1f3fb","🧙🏼":"1f9d9-1f3fc","🧙🏽":"1f9d9-1f3fd","🧙🏾":"1f9d9-1f3fe","🧙🏿":"1f9d9-1f3ff","🧚🏻":"1f9da-1f3fb","🧚🏼":"1f9da-1f3fc","🧚🏽":"1f9da-1f3fd","🧚🏾":"1f9da-1f3fe","🧚🏿":"1f9da-1f3ff","🧛🏻":"1f9db-1f3fb","🧛🏼":"1f9db-1f3fc","🧛🏽":"1f9db-1f3fd","🧛🏾":"1f9db-1f3fe","🧛🏿":"1f9db-1f3ff","🧜🏻":"1f9dc-1f3fb","🧜🏼":"1f9dc-1f3fc","🧜🏽":"1f9dc-1f3fd","🧜🏾":"1f9dc-1f3fe","🧜🏿":"1f9dc-1f3ff","🧝🏻":"1f9dd-1f3fb","🧝🏼":"1f9dd-1f3fc","🧝🏽":"1f9dd-1f3fd","🧝🏾":"1f9dd-1f3fe","🧝🏿":"1f9dd-1f3ff","💆🏻":"1f486-1f3fb","💆🏼":"1f486-1f3fc","💆🏽":"1f486-1f3fd","💆🏾":"1f486-1f3fe","💆🏿":"1f486-1f3ff","💇🏻":"1f487-1f3fb","💇🏼":"1f487-1f3fc","💇🏽":"1f487-1f3fd","💇🏾":"1f487-1f3fe","💇🏿":"1f487-1f3ff","🚶🏻":"1f6b6-1f3fb","🚶🏼":"1f6b6-1f3fc","🚶🏽":"1f6b6-1f3fd","🚶🏾":"1f6b6-1f3fe","🚶🏿":"1f6b6-1f3ff","🧍🏻":"1f9cd-1f3fb","🧍🏼":"1f9cd-1f3fc","🧍🏽":"1f9cd-1f3fd","🧍🏾":"1f9cd-1f3fe","🧍🏿":"1f9cd-1f3ff","🧎🏻":"1f9ce-1f3fb","🧎🏼":"1f9ce-1f3fc","🧎🏽":"1f9ce-1f3fd","🧎🏾":"1f9ce-1f3fe","🧎🏿":"1f9ce-1f3ff","🏃🏻":"1f3c3-1f3fb","🏃🏼":"1f3c3-1f3fc","🏃🏽":"1f3c3-1f3fd","🏃🏾":"1f3c3-1f3fe","🏃🏿":"1f3c3-1f3ff","💃🏻":"1f483-1f3fb","💃🏼":"1f483-1f3fc","💃🏽":"1f483-1f3fd","💃🏾":"1f483-1f3fe","💃🏿":"1f483-1f3ff","🕺🏻":"1f57a-1f3fb","🕺🏼":"1f57a-1f3fc","🕺🏽":"1f57a-1f3fd","🕺🏾":"1f57a-1f3fe","🕺🏿":"1f57a-1f3ff","🕴️":"1f574","🕴🏻":"1f574-1f3fb","🕴🏼":"1f574-1f3fc","🕴🏽":"1f574-1f3fd","🕴🏾":"1f574-1f3fe","🕴🏿":"1f574-1f3ff","🧖🏻":"1f9d6-1f3fb","🧖🏼":"1f9d6-1f3fc","🧖🏽":"1f9d6-1f3fd","🧖🏾":"1f9d6-1f3fe","🧖🏿":"1f9d6-1f3ff","🧗🏻":"1f9d7-1f3fb","🧗🏼":"1f9d7-1f3fc","🧗🏽":"1f9d7-1f3fd","🧗🏾":"1f9d7-1f3fe","🧗🏿":"1f9d7-1f3ff","🏇🏻":"1f3c7-1f3fb","🏇🏼":"1f3c7-1f3fc","🏇🏽":"1f3c7-1f3fd","🏇🏾":"1f3c7-1f3fe","🏇🏿":"1f3c7-1f3ff","⛷️":"26f7","🏂🏻":"1f3c2-1f3fb","🏂🏼":"1f3c2-1f3fc","🏂🏽":"1f3c2-1f3fd","🏂🏾":"1f3c2-1f3fe","🏂🏿":"1f3c2-1f3ff","🏌️":"1f3cc","🏌🏻":"1f3cc-1f3fb","🏌🏼":"1f3cc-1f3fc","🏌🏽":"1f3cc-1f3fd","🏌🏾":"1f3cc-1f3fe","🏌🏿":"1f3cc-1f3ff","🏄🏻":"1f3c4-1f3fb","🏄🏼":"1f3c4-1f3fc","🏄🏽":"1f3c4-1f3fd","🏄🏾":"1f3c4-1f3fe","🏄🏿":"1f3c4-1f3ff","🚣🏻":"1f6a3-1f3fb","🚣🏼":"1f6a3-1f3fc","🚣🏽":"1f6a3-1f3fd","🚣🏾":"1f6a3-1f3fe","🚣🏿":"1f6a3-1f3ff","🏊🏻":"1f3ca-1f3fb","🏊🏼":"1f3ca-1f3fc","🏊🏽":"1f3ca-1f3fd","🏊🏾":"1f3ca-1f3fe","🏊🏿":"1f3ca-1f3ff","⛹️":"26f9","⛹🏻":"26f9-1f3fb","⛹🏼":"26f9-1f3fc","⛹🏽":"26f9-1f3fd","⛹🏾":"26f9-1f3fe","⛹🏿":"26f9-1f3ff","🏋️":"1f3cb","🏋🏻":"1f3cb-1f3fb","🏋🏼":"1f3cb-1f3fc","🏋🏽":"1f3cb-1f3fd","🏋🏾":"1f3cb-1f3fe","🏋🏿":"1f3cb-1f3ff","🚴🏻":"1f6b4-1f3fb","🚴🏼":"1f6b4-1f3fc","🚴🏽":"1f6b4-1f3fd","🚴🏾":"1f6b4-1f3fe","🚴🏿":"1f6b4-1f3ff","🚵🏻":"1f6b5-1f3fb","🚵🏼":"1f6b5-1f3fc","🚵🏽":"1f6b5-1f3fd","🚵🏾":"1f6b5-1f3fe","🚵🏿":"1f6b5-1f3ff","🤸🏻":"1f938-1f3fb","🤸🏼":"1f938-1f3fc","🤸🏽":"1f938-1f3fd","🤸🏾":"1f938-1f3fe","🤸🏿":"1f938-1f3ff","🤽🏻":"1f93d-1f3fb","🤽🏼":"1f93d-1f3fc","🤽🏽":"1f93d-1f3fd","🤽🏾":"1f93d-1f3fe","🤽🏿":"1f93d-1f3ff","🤾🏻":"1f93e-1f3fb","🤾🏼":"1f93e-1f3fc","🤾🏽":"1f93e-1f3fd","🤾🏾":"1f93e-1f3fe","🤾🏿":"1f93e-1f3ff","🤹🏻":"1f939-1f3fb","🤹🏼":"1f939-1f3fc","🤹🏽":"1f939-1f3fd","🤹🏾":"1f939-1f3fe","🤹🏿":"1f939-1f3ff","🧘🏻":"1f9d8-1f3fb","🧘🏼":"1f9d8-1f3fc","🧘🏽":"1f9d8-1f3fd","🧘🏾":"1f9d8-1f3fe","🧘🏿":"1f9d8-1f3ff","🛀🏻":"1f6c0-1f3fb","🛀🏼":"1f6c0-1f3fc","🛀🏽":"1f6c0-1f3fd","🛀🏾":"1f6c0-1f3fe","🛀🏿":"1f6c0-1f3ff","🛌🏻":"1f6cc-1f3fb","🛌🏼":"1f6cc-1f3fc","🛌🏽":"1f6cc-1f3fd","🛌🏾":"1f6cc-1f3fe","🛌🏿":"1f6cc-1f3ff","👭🏻":"1f46d-1f3fb","👭🏼":"1f46d-1f3fc","👭🏽":"1f46d-1f3fd","👭🏾":"1f46d-1f3fe","👭🏿":"1f46d-1f3ff","👫🏻":"1f46b-1f3fb","👫🏼":"1f46b-1f3fc","👫🏽":"1f46b-1f3fd","👫🏾":"1f46b-1f3fe","👫🏿":"1f46b-1f3ff","👬🏻":"1f46c-1f3fb","👬🏼":"1f46c-1f3fc","👬🏽":"1f46c-1f3fd","👬🏾":"1f46c-1f3fe","👬🏿":"1f46c-1f3ff","💏🏻":"1f48f-1f3fb","💏🏼":"1f48f-1f3fc","💏🏽":"1f48f-1f3fd","💏🏾":"1f48f-1f3fe","💏🏿":"1f48f-1f3ff","💑🏻":"1f491-1f3fb","💑🏼":"1f491-1f3fc","💑🏽":"1f491-1f3fd","💑🏾":"1f491-1f3fe","💑🏿":"1f491-1f3ff","🗣️":"1f5e3","🐿️":"1f43f","🕊️":"1f54a","🕷️":"1f577","🕸️":"1f578","🏵️":"1f3f5","☘️":"2618","🌶️":"1f336","🍽️":"1f37d","🗺️":"1f5fa","🏔️":"1f3d4","⛰️":"26f0","🏕️":"1f3d5","🏖️":"1f3d6","🏜️":"1f3dc","🏝️":"1f3dd","🏞️":"1f3de","🏟️":"1f3df","🏛️":"1f3db","🏗️":"1f3d7","🏘️":"1f3d8","🏚️":"1f3da","⛩️":"26e9","🏙️":"1f3d9","♨️":"2668","🏎️":"1f3ce","🏍️":"1f3cd","🛣️":"1f6e3","🛤️":"1f6e4","🛢️":"1f6e2","🛳️":"1f6f3","⛴️":"26f4","🛥️":"1f6e5","✈️":"2708","🛩️":"1f6e9","🛰️":"1f6f0","🛎️":"1f6ce","⏱️":"23f1","⏲️":"23f2","🕰️":"1f570","🌡️":"1f321","☀️":"2600","☁️":"2601","⛈️":"26c8","🌤️":"1f324","🌥️":"1f325","🌦️":"1f326","🌧️":"1f327","🌨️":"1f328","🌩️":"1f329","🌪️":"1f32a","🌫️":"1f32b","🌬️":"1f32c","☂️":"2602","⛱️":"26f1","❄️":"2744","☃️":"2603","☄️":"2604","🎗️":"1f397","🎟️":"1f39f","🎖️":"1f396","⛸️":"26f8","🕹️":"1f579","♠️":"2660","♥️":"2665","♦️":"2666","♣️":"2663","♟️":"265f","🖼️":"1f5bc","🕶️":"1f576","🛍️":"1f6cd","⛑️":"26d1","🎙️":"1f399","🎚️":"1f39a","🎛️":"1f39b","☎️":"260e","🖥️":"1f5a5","🖨️":"1f5a8","⌨️":"2328","🖱️":"1f5b1","🖲️":"1f5b2","🎞️":"1f39e","📽️":"1f4fd","🕯️":"1f56f","🗞️":"1f5de","🏷️":"1f3f7","✉️":"2709","🗳️":"1f5f3","✏️":"270f","✒️":"2712","🖋️":"1f58b","🖊️":"1f58a","🖌️":"1f58c","🖍️":"1f58d","🗂️":"1f5c2","🗒️":"1f5d2","🗓️":"1f5d3","🖇️":"1f587","✂️":"2702","🗃️":"1f5c3","🗄️":"1f5c4","🗑️":"1f5d1","🗝️":"1f5dd","⛏️":"26cf","⚒️":"2692","🛠️":"1f6e0","🗡️":"1f5e1","⚔️":"2694","🛡️":"1f6e1","⚙️":"2699","🗜️":"1f5dc","⚖️":"2696","⛓️":"26d3","⚗️":"2697","🛏️":"1f6cf","🛋️":"1f6cb","⚰️":"26b0","⚱️":"26b1","⚠️":"26a0","☢️":"2622","☣️":"2623","⬆️":"2b06","↗️":"2197","➡️":"27a1","↘️":"2198","⬇️":"2b07","↙️":"2199","⬅️":"2b05","↖️":"2196","↕️":"2195","↔️":"2194","↩️":"21a9","↪️":"21aa","⤴️":"2934","⤵️":"2935","⚛️":"269b","🕉️":"1f549","✡️":"2721","☸️":"2638","☯️":"262f","✝️":"271d","☦️":"2626","☪️":"262a","☮️":"262e","▶️":"25b6","⏭️":"23ed","⏯️":"23ef","◀️":"25c0","⏮️":"23ee","⏸️":"23f8","⏹️":"23f9","⏺️":"23fa","⏏️":"23cf","♀️":"2640","♂️":"2642","⚧️":"26a7","✖️":"2716","♾️":"267e","‼️":"203c","⁉️":"2049","〰️":"3030","⚕️":"2695","♻️":"267b","⚜️":"269c","☑️":"2611","✔️":"2714","〽️":"303d","✳️":"2733","✴️":"2734","❇️":"2747","©️":"a9","®️":"ae","™️":"2122","#⃣":"23-20e3","*⃣":"2a-20e3","0⃣":"30-20e3","1⃣":"31-20e3","2⃣":"32-20e3","3⃣":"33-20e3","4⃣":"34-20e3","5⃣":"35-20e3","6⃣":"36-20e3","7⃣":"37-20e3","8⃣":"38-20e3","9⃣":"39-20e3","🅰️":"1f170","🅱️":"1f171","ℹ️":"2139","Ⓜ️":"24c2","🅾️":"1f17e","🅿️":"1f17f","🈂️":"1f202","🈷️":"1f237","㊗️":"3297","㊙️":"3299","◼️":"25fc","◻️":"25fb","▪️":"25aa","▫️":"25ab","🏳️":"1f3f3","🇦🇨":"1f1e6-1f1e8","🇦🇩":"1f1e6-1f1e9","🇦🇪":"1f1e6-1f1ea","🇦🇫":"1f1e6-1f1eb","🇦🇬":"1f1e6-1f1ec","🇦🇮":"1f1e6-1f1ee","🇦🇱":"1f1e6-1f1f1","🇦🇲":"1f1e6-1f1f2","🇦🇴":"1f1e6-1f1f4","🇦🇶":"1f1e6-1f1f6","🇦🇷":"1f1e6-1f1f7","🇦🇸":"1f1e6-1f1f8","🇦🇹":"1f1e6-1f1f9","🇦🇺":"1f1e6-1f1fa","🇦🇼":"1f1e6-1f1fc","🇦🇽":"1f1e6-1f1fd","🇦🇿":"1f1e6-1f1ff","🇧🇦":"1f1e7-1f1e6","🇧🇧":"1f1e7-1f1e7","🇧🇩":"1f1e7-1f1e9","🇧🇪":"1f1e7-1f1ea","🇧🇫":"1f1e7-1f1eb","🇧🇬":"1f1e7-1f1ec","🇧🇭":"1f1e7-1f1ed","🇧🇮":"1f1e7-1f1ee","🇧🇯":"1f1e7-1f1ef","🇧🇱":"1f1e7-1f1f1","🇧🇲":"1f1e7-1f1f2","🇧🇳":"1f1e7-1f1f3","🇧🇴":"1f1e7-1f1f4","🇧🇶":"1f1e7-1f1f6","🇧🇷":"1f1e7-1f1f7","🇧🇸":"1f1e7-1f1f8","🇧🇹":"1f1e7-1f1f9","🇧🇻":"1f1e7-1f1fb","🇧🇼":"1f1e7-1f1fc","🇧🇾":"1f1e7-1f1fe","🇧🇿":"1f1e7-1f1ff","🇨🇦":"1f1e8-1f1e6","🇨🇨":"1f1e8-1f1e8","🇨🇩":"1f1e8-1f1e9","🇨🇫":"1f1e8-1f1eb","🇨🇬":"1f1e8-1f1ec","🇨🇭":"1f1e8-1f1ed","🇨🇮":"1f1e8-1f1ee","🇨🇰":"1f1e8-1f1f0","🇨🇱":"1f1e8-1f1f1","🇨🇲":"1f1e8-1f1f2","🇨🇳":"1f1e8-1f1f3","🇨🇴":"1f1e8-1f1f4","🇨🇵":"1f1e8-1f1f5","🇨🇷":"1f1e8-1f1f7","🇨🇺":"1f1e8-1f1fa","🇨🇻":"1f1e8-1f1fb","🇨🇼":"1f1e8-1f1fc","🇨🇽":"1f1e8-1f1fd","🇨🇾":"1f1e8-1f1fe","🇨🇿":"1f1e8-1f1ff","🇩🇪":"1f1e9-1f1ea","🇩🇬":"1f1e9-1f1ec","🇩🇯":"1f1e9-1f1ef","🇩🇰":"1f1e9-1f1f0","🇩🇲":"1f1e9-1f1f2","🇩🇴":"1f1e9-1f1f4","🇩🇿":"1f1e9-1f1ff","🇪🇦":"1f1ea-1f1e6","🇪🇨":"1f1ea-1f1e8","🇪🇪":"1f1ea-1f1ea","🇪🇬":"1f1ea-1f1ec","🇪🇭":"1f1ea-1f1ed","🇪🇷":"1f1ea-1f1f7","🇪🇸":"1f1ea-1f1f8","🇪🇹":"1f1ea-1f1f9","🇪🇺":"1f1ea-1f1fa","🇫🇮":"1f1eb-1f1ee","🇫🇯":"1f1eb-1f1ef","🇫🇰":"1f1eb-1f1f0","🇫🇲":"1f1eb-1f1f2","🇫🇴":"1f1eb-1f1f4","🇫🇷":"1f1eb-1f1f7","🇬🇦":"1f1ec-1f1e6","🇬🇧":"1f1ec-1f1e7","🇬🇩":"1f1ec-1f1e9","🇬🇪":"1f1ec-1f1ea","🇬🇫":"1f1ec-1f1eb","🇬🇬":"1f1ec-1f1ec","🇬🇭":"1f1ec-1f1ed","🇬🇮":"1f1ec-1f1ee","🇬🇱":"1f1ec-1f1f1","🇬🇲":"1f1ec-1f1f2","🇬🇳":"1f1ec-1f1f3","🇬🇵":"1f1ec-1f1f5","🇬🇶":"1f1ec-1f1f6","🇬🇷":"1f1ec-1f1f7","🇬🇸":"1f1ec-1f1f8","🇬🇹":"1f1ec-1f1f9","🇬🇺":"1f1ec-1f1fa","🇬🇼":"1f1ec-1f1fc","🇬🇾":"1f1ec-1f1fe","🇭🇰":"1f1ed-1f1f0","🇭🇲":"1f1ed-1f1f2","🇭🇳":"1f1ed-1f1f3","🇭🇷":"1f1ed-1f1f7","🇭🇹":"1f1ed-1f1f9","🇭🇺":"1f1ed-1f1fa","🇮🇨":"1f1ee-1f1e8","🇮🇩":"1f1ee-1f1e9","🇮🇪":"1f1ee-1f1ea","🇮🇱":"1f1ee-1f1f1","🇮🇲":"1f1ee-1f1f2","🇮🇳":"1f1ee-1f1f3","🇮🇴":"1f1ee-1f1f4","🇮🇶":"1f1ee-1f1f6","🇮🇷":"1f1ee-1f1f7","🇮🇸":"1f1ee-1f1f8","🇮🇹":"1f1ee-1f1f9","🇯🇪":"1f1ef-1f1ea","🇯🇲":"1f1ef-1f1f2","🇯🇴":"1f1ef-1f1f4","🇯🇵":"1f1ef-1f1f5","🇰🇪":"1f1f0-1f1ea","🇰🇬":"1f1f0-1f1ec","🇰🇭":"1f1f0-1f1ed","🇰🇮":"1f1f0-1f1ee","🇰🇲":"1f1f0-1f1f2","🇰🇳":"1f1f0-1f1f3","🇰🇵":"1f1f0-1f1f5","🇰🇷":"1f1f0-1f1f7","🇰🇼":"1f1f0-1f1fc","🇰🇾":"1f1f0-1f1fe","🇰🇿":"1f1f0-1f1ff","🇱🇦":"1f1f1-1f1e6","🇱🇧":"1f1f1-1f1e7","🇱🇨":"1f1f1-1f1e8","🇱🇮":"1f1f1-1f1ee","🇱🇰":"1f1f1-1f1f0","🇱🇷":"1f1f1-1f1f7","🇱🇸":"1f1f1-1f1f8","🇱🇹":"1f1f1-1f1f9","🇱🇺":"1f1f1-1f1fa","🇱🇻":"1f1f1-1f1fb","🇱🇾":"1f1f1-1f1fe","🇲🇦":"1f1f2-1f1e6","🇲🇨":"1f1f2-1f1e8","🇲🇩":"1f1f2-1f1e9","🇲🇪":"1f1f2-1f1ea","🇲🇫":"1f1f2-1f1eb","🇲🇬":"1f1f2-1f1ec","🇲🇭":"1f1f2-1f1ed","🇲🇰":"1f1f2-1f1f0","🇲🇱":"1f1f2-1f1f1","🇲🇲":"1f1f2-1f1f2","🇲🇳":"1f1f2-1f1f3","🇲🇴":"1f1f2-1f1f4","🇲🇵":"1f1f2-1f1f5","🇲🇶":"1f1f2-1f1f6","🇲🇷":"1f1f2-1f1f7","🇲🇸":"1f1f2-1f1f8","🇲🇹":"1f1f2-1f1f9","🇲🇺":"1f1f2-1f1fa","🇲🇻":"1f1f2-1f1fb","🇲🇼":"1f1f2-1f1fc","🇲🇽":"1f1f2-1f1fd","🇲🇾":"1f1f2-1f1fe","🇲🇿":"1f1f2-1f1ff","🇳🇦":"1f1f3-1f1e6","🇳🇨":"1f1f3-1f1e8","🇳🇪":"1f1f3-1f1ea","🇳🇫":"1f1f3-1f1eb","🇳🇬":"1f1f3-1f1ec","🇳🇮":"1f1f3-1f1ee","🇳🇱":"1f1f3-1f1f1","🇳🇴":"1f1f3-1f1f4","🇳🇵":"1f1f3-1f1f5","🇳🇷":"1f1f3-1f1f7","🇳🇺":"1f1f3-1f1fa","🇳🇿":"1f1f3-1f1ff","🇴🇲":"1f1f4-1f1f2","🇵🇦":"1f1f5-1f1e6","🇵🇪":"1f1f5-1f1ea","🇵🇫":"1f1f5-1f1eb","🇵🇬":"1f1f5-1f1ec","🇵🇭":"1f1f5-1f1ed","🇵🇰":"1f1f5-1f1f0","🇵🇱":"1f1f5-1f1f1","🇵🇲":"1f1f5-1f1f2","🇵🇳":"1f1f5-1f1f3","🇵🇷":"1f1f5-1f1f7","🇵🇸":"1f1f5-1f1f8","🇵🇹":"1f1f5-1f1f9","🇵🇼":"1f1f5-1f1fc","🇵🇾":"1f1f5-1f1fe","🇶🇦":"1f1f6-1f1e6","🇷🇪":"1f1f7-1f1ea","🇷🇴":"1f1f7-1f1f4","🇷🇸":"1f1f7-1f1f8","🇷🇺":"1f1f7-1f1fa","🇷🇼":"1f1f7-1f1fc","🇸🇦":"1f1f8-1f1e6","🇸🇧":"1f1f8-1f1e7","🇸🇨":"1f1f8-1f1e8","🇸🇩":"1f1f8-1f1e9","🇸🇪":"1f1f8-1f1ea","🇸🇬":"1f1f8-1f1ec","🇸🇭":"1f1f8-1f1ed","🇸🇮":"1f1f8-1f1ee","🇸🇯":"1f1f8-1f1ef","🇸🇰":"1f1f8-1f1f0","🇸🇱":"1f1f8-1f1f1","🇸🇲":"1f1f8-1f1f2","🇸🇳":"1f1f8-1f1f3","🇸🇴":"1f1f8-1f1f4","🇸🇷":"1f1f8-1f1f7","🇸🇸":"1f1f8-1f1f8","🇸🇹":"1f1f8-1f1f9","🇸🇻":"1f1f8-1f1fb","🇸🇽":"1f1f8-1f1fd","🇸🇾":"1f1f8-1f1fe","🇸🇿":"1f1f8-1f1ff","🇹🇦":"1f1f9-1f1e6","🇹🇨":"1f1f9-1f1e8","🇹🇩":"1f1f9-1f1e9","🇹🇫":"1f1f9-1f1eb","🇹🇬":"1f1f9-1f1ec","🇹🇭":"1f1f9-1f1ed","🇹🇯":"1f1f9-1f1ef","🇹🇰":"1f1f9-1f1f0","🇹🇱":"1f1f9-1f1f1","🇹🇲":"1f1f9-1f1f2","🇹🇳":"1f1f9-1f1f3","🇹🇴":"1f1f9-1f1f4","🇹🇷":"1f1f9-1f1f7","🇹🇹":"1f1f9-1f1f9","🇹🇻":"1f1f9-1f1fb","🇹🇼":"1f1f9-1f1fc","🇹🇿":"1f1f9-1f1ff","🇺🇦":"1f1fa-1f1e6","🇺🇬":"1f1fa-1f1ec","🇺🇲":"1f1fa-1f1f2","🇺🇳":"1f1fa-1f1f3","🇺🇸":"1f1fa-1f1f8","🇺🇾":"1f1fa-1f1fe","🇺🇿":"1f1fa-1f1ff","🇻🇦":"1f1fb-1f1e6","🇻🇨":"1f1fb-1f1e8","🇻🇪":"1f1fb-1f1ea","🇻🇬":"1f1fb-1f1ec","🇻🇮":"1f1fb-1f1ee","🇻🇳":"1f1fb-1f1f3","🇻🇺":"1f1fb-1f1fa","🇼🇫":"1f1fc-1f1eb","🇼🇸":"1f1fc-1f1f8","🇽🇰":"1f1fd-1f1f0","🇾🇪":"1f1fe-1f1ea","🇾🇹":"1f1fe-1f1f9","🇿🇦":"1f1ff-1f1e6","🇿🇲":"1f1ff-1f1f2","🇿🇼":"1f1ff-1f1fc","😶‍🌫":"1f636-200d-1f32b-fe0f","😮‍💨":"1f62e-200d-1f4a8","😵‍💫":"1f635-200d-1f4ab","❤‍🔥":"2764-fe0f-200d-1f525","❤‍🩹":"2764-fe0f-200d-1fa79","👁‍🗨":"1f441-200d-1f5e8","🧔‍♂":"1f9d4-200d-2642-fe0f","🧔‍♀":"1f9d4-200d-2640-fe0f","👨‍🦰":"1f468-200d-1f9b0","👨‍🦱":"1f468-200d-1f9b1","👨‍🦳":"1f468-200d-1f9b3","👨‍🦲":"1f468-200d-1f9b2","👩‍🦰":"1f469-200d-1f9b0","🧑‍🦰":"1f9d1-200d-1f9b0","👩‍🦱":"1f469-200d-1f9b1","🧑‍🦱":"1f9d1-200d-1f9b1","👩‍🦳":"1f469-200d-1f9b3","🧑‍🦳":"1f9d1-200d-1f9b3","👩‍🦲":"1f469-200d-1f9b2","🧑‍🦲":"1f9d1-200d-1f9b2","👱‍♀":"1f471-200d-2640-fe0f","👱‍♂":"1f471-200d-2642-fe0f","🙍‍♂":"1f64d-200d-2642-fe0f","🙍‍♀":"1f64d-200d-2640-fe0f","🙎‍♂":"1f64e-200d-2642-fe0f","🙎‍♀":"1f64e-200d-2640-fe0f","🙅‍♂":"1f645-200d-2642-fe0f","🙅‍♀":"1f645-200d-2640-fe0f","🙆‍♂":"1f646-200d-2642-fe0f","🙆‍♀":"1f646-200d-2640-fe0f","💁‍♂":"1f481-200d-2642-fe0f","💁‍♀":"1f481-200d-2640-fe0f","🙋‍♂":"1f64b-200d-2642-fe0f","🙋‍♀":"1f64b-200d-2640-fe0f","🧏‍♂":"1f9cf-200d-2642-fe0f","🧏‍♀":"1f9cf-200d-2640-fe0f","🙇‍♂":"1f647-200d-2642-fe0f","🙇‍♀":"1f647-200d-2640-fe0f","🤦‍♂":"1f926-200d-2642-fe0f","🤦‍♀":"1f926-200d-2640-fe0f","🤷‍♂":"1f937-200d-2642-fe0f","🤷‍♀":"1f937-200d-2640-fe0f","🧑‍⚕":"1f9d1-200d-2695-fe0f","👨‍⚕":"1f468-200d-2695-fe0f","👩‍⚕":"1f469-200d-2695-fe0f","🧑‍🎓":"1f9d1-200d-1f393","👨‍🎓":"1f468-200d-1f393","👩‍🎓":"1f469-200d-1f393","🧑‍🏫":"1f9d1-200d-1f3eb","👨‍🏫":"1f468-200d-1f3eb","👩‍🏫":"1f469-200d-1f3eb","🧑‍⚖":"1f9d1-200d-2696-fe0f","👨‍⚖":"1f468-200d-2696-fe0f","👩‍⚖":"1f469-200d-2696-fe0f","🧑‍🌾":"1f9d1-200d-1f33e","👨‍🌾":"1f468-200d-1f33e","👩‍🌾":"1f469-200d-1f33e","🧑‍🍳":"1f9d1-200d-1f373","👨‍🍳":"1f468-200d-1f373","👩‍🍳":"1f469-200d-1f373","🧑‍🔧":"1f9d1-200d-1f527","👨‍🔧":"1f468-200d-1f527","👩‍🔧":"1f469-200d-1f527","🧑‍🏭":"1f9d1-200d-1f3ed","👨‍🏭":"1f468-200d-1f3ed","👩‍🏭":"1f469-200d-1f3ed","🧑‍💼":"1f9d1-200d-1f4bc","👨‍💼":"1f468-200d-1f4bc","👩‍💼":"1f469-200d-1f4bc","🧑‍🔬":"1f9d1-200d-1f52c","👨‍🔬":"1f468-200d-1f52c","👩‍🔬":"1f469-200d-1f52c","🧑‍💻":"1f9d1-200d-1f4bb","👨‍💻":"1f468-200d-1f4bb","👩‍💻":"1f469-200d-1f4bb","🧑‍🎤":"1f9d1-200d-1f3a4","👨‍🎤":"1f468-200d-1f3a4","👩‍🎤":"1f469-200d-1f3a4","🧑‍🎨":"1f9d1-200d-1f3a8","👨‍🎨":"1f468-200d-1f3a8","👩‍🎨":"1f469-200d-1f3a8","🧑‍✈":"1f9d1-200d-2708-fe0f","👨‍✈":"1f468-200d-2708-fe0f","👩‍✈":"1f469-200d-2708-fe0f","🧑‍🚀":"1f9d1-200d-1f680","👨‍🚀":"1f468-200d-1f680","👩‍🚀":"1f469-200d-1f680","🧑‍🚒":"1f9d1-200d-1f692","👨‍🚒":"1f468-200d-1f692","👩‍🚒":"1f469-200d-1f692","👮‍♂":"1f46e-200d-2642-fe0f","👮‍♀":"1f46e-200d-2640-fe0f","🕵‍♂":"1f575-fe0f-200d-2642-fe0f","🕵‍♀":"1f575-fe0f-200d-2640-fe0f","💂‍♂":"1f482-200d-2642-fe0f","💂‍♀":"1f482-200d-2640-fe0f","👷‍♂":"1f477-200d-2642-fe0f","👷‍♀":"1f477-200d-2640-fe0f","👳‍♂":"1f473-200d-2642-fe0f","👳‍♀":"1f473-200d-2640-fe0f","🤵‍♂":"1f935-200d-2642-fe0f","🤵‍♀":"1f935-200d-2640-fe0f","👰‍♂":"1f470-200d-2642-fe0f","👰‍♀":"1f470-200d-2640-fe0f","👩‍🍼":"1f469-200d-1f37c","👨‍🍼":"1f468-200d-1f37c","🧑‍🍼":"1f9d1-200d-1f37c","🧑‍🎄":"1f9d1-200d-1f384","🦸‍♂":"1f9b8-200d-2642-fe0f","🦸‍♀":"1f9b8-200d-2640-fe0f","🦹‍♂":"1f9b9-200d-2642-fe0f","🦹‍♀":"1f9b9-200d-2640-fe0f","🧙‍♂":"1f9d9-200d-2642-fe0f","🧙‍♀":"1f9d9-200d-2640-fe0f","🧚‍♂":"1f9da-200d-2642-fe0f","🧚‍♀":"1f9da-200d-2640-fe0f","🧛‍♂":"1f9db-200d-2642-fe0f","🧛‍♀":"1f9db-200d-2640-fe0f","🧜‍♂":"1f9dc-200d-2642-fe0f","🧜‍♀":"1f9dc-200d-2640-fe0f","🧝‍♂":"1f9dd-200d-2642-fe0f","🧝‍♀":"1f9dd-200d-2640-fe0f","🧞‍♂":"1f9de-200d-2642-fe0f","🧞‍♀":"1f9de-200d-2640-fe0f","🧟‍♂":"1f9df-200d-2642-fe0f","🧟‍♀":"1f9df-200d-2640-fe0f","💆‍♂":"1f486-200d-2642-fe0f","💆‍♀":"1f486-200d-2640-fe0f","💇‍♂":"1f487-200d-2642-fe0f","💇‍♀":"1f487-200d-2640-fe0f","🚶‍♂":"1f6b6-200d-2642-fe0f","🚶‍♀":"1f6b6-200d-2640-fe0f","🧍‍♂":"1f9cd-200d-2642-fe0f","🧍‍♀":"1f9cd-200d-2640-fe0f","🧎‍♂":"1f9ce-200d-2642-fe0f","🧎‍♀":"1f9ce-200d-2640-fe0f","🧑‍🦯":"1f9d1-200d-1f9af","👨‍🦯":"1f468-200d-1f9af","👩‍🦯":"1f469-200d-1f9af","🧑‍🦼":"1f9d1-200d-1f9bc","👨‍🦼":"1f468-200d-1f9bc","👩‍🦼":"1f469-200d-1f9bc","🧑‍🦽":"1f9d1-200d-1f9bd","👨‍🦽":"1f468-200d-1f9bd","👩‍🦽":"1f469-200d-1f9bd","🏃‍♂":"1f3c3-200d-2642-fe0f","🏃‍♀":"1f3c3-200d-2640-fe0f","👯‍♂":"1f46f-200d-2642-fe0f","👯‍♀":"1f46f-200d-2640-fe0f","🧖‍♂":"1f9d6-200d-2642-fe0f","🧖‍♀":"1f9d6-200d-2640-fe0f","🧗‍♂":"1f9d7-200d-2642-fe0f","🧗‍♀":"1f9d7-200d-2640-fe0f","🏌‍♂":"1f3cc-fe0f-200d-2642-fe0f","🏌‍♀":"1f3cc-fe0f-200d-2640-fe0f","🏄‍♂":"1f3c4-200d-2642-fe0f","🏄‍♀":"1f3c4-200d-2640-fe0f","🚣‍♂":"1f6a3-200d-2642-fe0f","🚣‍♀":"1f6a3-200d-2640-fe0f","🏊‍♂":"1f3ca-200d-2642-fe0f","🏊‍♀":"1f3ca-200d-2640-fe0f","⛹‍♂":"26f9-fe0f-200d-2642-fe0f","⛹‍♀":"26f9-fe0f-200d-2640-fe0f","🏋‍♂":"1f3cb-fe0f-200d-2642-fe0f","🏋‍♀":"1f3cb-fe0f-200d-2640-fe0f","🚴‍♂":"1f6b4-200d-2642-fe0f","🚴‍♀":"1f6b4-200d-2640-fe0f","🚵‍♂":"1f6b5-200d-2642-fe0f","🚵‍♀":"1f6b5-200d-2640-fe0f","🤸‍♂":"1f938-200d-2642-fe0f","🤸‍♀":"1f938-200d-2640-fe0f","🤼‍♂":"1f93c-200d-2642-fe0f","🤼‍♀":"1f93c-200d-2640-fe0f","🤽‍♂":"1f93d-200d-2642-fe0f","🤽‍♀":"1f93d-200d-2640-fe0f","🤾‍♂":"1f93e-200d-2642-fe0f","🤾‍♀":"1f93e-200d-2640-fe0f","🤹‍♂":"1f939-200d-2642-fe0f","🤹‍♀":"1f939-200d-2640-fe0f","🧘‍♂":"1f9d8-200d-2642-fe0f","🧘‍♀":"1f9d8-200d-2640-fe0f","👨‍👦":"1f468-200d-1f466","👨‍👧":"1f468-200d-1f467","👩‍👦":"1f469-200d-1f466","👩‍👧":"1f469-200d-1f467","🐕‍🦺":"1f415-200d-1f9ba","🐈‍⬛":"1f408-200d-2b1b","🐻‍❄":"1f43b-200d-2744-fe0f","#️⃣":"23-20e3","*️⃣":"2a-20e3","0️⃣":"30-20e3","1️⃣":"31-20e3","2️⃣":"32-20e3","3️⃣":"33-20e3","4️⃣":"34-20e3","5️⃣":"35-20e3","6️⃣":"36-20e3","7️⃣":"37-20e3","8️⃣":"38-20e3","9️⃣":"39-20e3","🏳‍🌈":"1f3f3-fe0f-200d-1f308","🏳‍⚧":"1f3f3-fe0f-200d-26a7-fe0f","🏴‍☠":"1f3f4-200d-2620-fe0f","😶‍🌫️":"1f636-200d-1f32b-fe0f","❤️‍🔥":"2764-fe0f-200d-1f525","❤️‍🩹":"2764-fe0f-200d-1fa79","👁‍🗨️":"1f441-200d-1f5e8","👁️‍🗨":"1f441-200d-1f5e8","🧔‍♂️":"1f9d4-200d-2642-fe0f","🧔🏻‍♂":"1f9d4-1f3fb-200d-2642-fe0f","🧔🏼‍♂":"1f9d4-1f3fc-200d-2642-fe0f","🧔🏽‍♂":"1f9d4-1f3fd-200d-2642-fe0f","🧔🏾‍♂":"1f9d4-1f3fe-200d-2642-fe0f","🧔🏿‍♂":"1f9d4-1f3ff-200d-2642-fe0f","🧔‍♀️":"1f9d4-200d-2640-fe0f","🧔🏻‍♀":"1f9d4-1f3fb-200d-2640-fe0f","🧔🏼‍♀":"1f9d4-1f3fc-200d-2640-fe0f","🧔🏽‍♀":"1f9d4-1f3fd-200d-2640-fe0f","🧔🏾‍♀":"1f9d4-1f3fe-200d-2640-fe0f","🧔🏿‍♀":"1f9d4-1f3ff-200d-2640-fe0f","👨🏻‍🦰":"1f468-1f3fb-200d-1f9b0","👨🏼‍🦰":"1f468-1f3fc-200d-1f9b0","👨🏽‍🦰":"1f468-1f3fd-200d-1f9b0","👨🏾‍🦰":"1f468-1f3fe-200d-1f9b0","👨🏿‍🦰":"1f468-1f3ff-200d-1f9b0","👨🏻‍🦱":"1f468-1f3fb-200d-1f9b1","👨🏼‍🦱":"1f468-1f3fc-200d-1f9b1","👨🏽‍🦱":"1f468-1f3fd-200d-1f9b1","👨🏾‍🦱":"1f468-1f3fe-200d-1f9b1","👨🏿‍🦱":"1f468-1f3ff-200d-1f9b1","👨🏻‍🦳":"1f468-1f3fb-200d-1f9b3","👨🏼‍🦳":"1f468-1f3fc-200d-1f9b3","👨🏽‍🦳":"1f468-1f3fd-200d-1f9b3","👨🏾‍🦳":"1f468-1f3fe-200d-1f9b3","👨🏿‍🦳":"1f468-1f3ff-200d-1f9b3","👨🏻‍🦲":"1f468-1f3fb-200d-1f9b2","👨🏼‍🦲":"1f468-1f3fc-200d-1f9b2","👨🏽‍🦲":"1f468-1f3fd-200d-1f9b2","👨🏾‍🦲":"1f468-1f3fe-200d-1f9b2","👨🏿‍🦲":"1f468-1f3ff-200d-1f9b2","👩🏻‍🦰":"1f469-1f3fb-200d-1f9b0","👩🏼‍🦰":"1f469-1f3fc-200d-1f9b0","👩🏽‍🦰":"1f469-1f3fd-200d-1f9b0","👩🏾‍🦰":"1f469-1f3fe-200d-1f9b0","👩🏿‍🦰":"1f469-1f3ff-200d-1f9b0","🧑🏻‍🦰":"1f9d1-1f3fb-200d-1f9b0","🧑🏼‍🦰":"1f9d1-1f3fc-200d-1f9b0","🧑🏽‍🦰":"1f9d1-1f3fd-200d-1f9b0","🧑🏾‍🦰":"1f9d1-1f3fe-200d-1f9b0","🧑🏿‍🦰":"1f9d1-1f3ff-200d-1f9b0","👩🏻‍🦱":"1f469-1f3fb-200d-1f9b1","👩🏼‍🦱":"1f469-1f3fc-200d-1f9b1","👩🏽‍🦱":"1f469-1f3fd-200d-1f9b1","👩🏾‍🦱":"1f469-1f3fe-200d-1f9b1","👩🏿‍🦱":"1f469-1f3ff-200d-1f9b1","🧑🏻‍🦱":"1f9d1-1f3fb-200d-1f9b1","🧑🏼‍🦱":"1f9d1-1f3fc-200d-1f9b1","🧑🏽‍🦱":"1f9d1-1f3fd-200d-1f9b1","🧑🏾‍🦱":"1f9d1-1f3fe-200d-1f9b1","🧑🏿‍🦱":"1f9d1-1f3ff-200d-1f9b1","👩🏻‍🦳":"1f469-1f3fb-200d-1f9b3","👩🏼‍🦳":"1f469-1f3fc-200d-1f9b3","👩🏽‍🦳":"1f469-1f3fd-200d-1f9b3","👩🏾‍🦳":"1f469-1f3fe-200d-1f9b3","👩🏿‍🦳":"1f469-1f3ff-200d-1f9b3","🧑🏻‍🦳":"1f9d1-1f3fb-200d-1f9b3","🧑🏼‍🦳":"1f9d1-1f3fc-200d-1f9b3","🧑🏽‍🦳":"1f9d1-1f3fd-200d-1f9b3","🧑🏾‍🦳":"1f9d1-1f3fe-200d-1f9b3","🧑🏿‍🦳":"1f9d1-1f3ff-200d-1f9b3","👩🏻‍🦲":"1f469-1f3fb-200d-1f9b2","👩🏼‍🦲":"1f469-1f3fc-200d-1f9b2","👩🏽‍🦲":"1f469-1f3fd-200d-1f9b2","👩🏾‍🦲":"1f469-1f3fe-200d-1f9b2","👩🏿‍🦲":"1f469-1f3ff-200d-1f9b2","🧑🏻‍🦲":"1f9d1-1f3fb-200d-1f9b2","🧑🏼‍🦲":"1f9d1-1f3fc-200d-1f9b2","🧑🏽‍🦲":"1f9d1-1f3fd-200d-1f9b2","🧑🏾‍🦲":"1f9d1-1f3fe-200d-1f9b2","🧑🏿‍🦲":"1f9d1-1f3ff-200d-1f9b2","👱‍♀️":"1f471-200d-2640-fe0f","👱🏻‍♀":"1f471-1f3fb-200d-2640-fe0f","👱🏼‍♀":"1f471-1f3fc-200d-2640-fe0f","👱🏽‍♀":"1f471-1f3fd-200d-2640-fe0f","👱🏾‍♀":"1f471-1f3fe-200d-2640-fe0f","👱🏿‍♀":"1f471-1f3ff-200d-2640-fe0f","👱‍♂️":"1f471-200d-2642-fe0f","👱🏻‍♂":"1f471-1f3fb-200d-2642-fe0f","👱🏼‍♂":"1f471-1f3fc-200d-2642-fe0f","👱🏽‍♂":"1f471-1f3fd-200d-2642-fe0f","👱🏾‍♂":"1f471-1f3fe-200d-2642-fe0f","👱🏿‍♂":"1f471-1f3ff-200d-2642-fe0f","🙍‍♂️":"1f64d-200d-2642-fe0f","🙍🏻‍♂":"1f64d-1f3fb-200d-2642-fe0f","🙍🏼‍♂":"1f64d-1f3fc-200d-2642-fe0f","🙍🏽‍♂":"1f64d-1f3fd-200d-2642-fe0f","🙍🏾‍♂":"1f64d-1f3fe-200d-2642-fe0f","🙍🏿‍♂":"1f64d-1f3ff-200d-2642-fe0f","🙍‍♀️":"1f64d-200d-2640-fe0f","🙍🏻‍♀":"1f64d-1f3fb-200d-2640-fe0f","🙍🏼‍♀":"1f64d-1f3fc-200d-2640-fe0f","🙍🏽‍♀":"1f64d-1f3fd-200d-2640-fe0f","🙍🏾‍♀":"1f64d-1f3fe-200d-2640-fe0f","🙍🏿‍♀":"1f64d-1f3ff-200d-2640-fe0f","🙎‍♂️":"1f64e-200d-2642-fe0f","🙎🏻‍♂":"1f64e-1f3fb-200d-2642-fe0f","🙎🏼‍♂":"1f64e-1f3fc-200d-2642-fe0f","🙎🏽‍♂":"1f64e-1f3fd-200d-2642-fe0f","🙎🏾‍♂":"1f64e-1f3fe-200d-2642-fe0f","🙎🏿‍♂":"1f64e-1f3ff-200d-2642-fe0f","🙎‍♀️":"1f64e-200d-2640-fe0f","🙎🏻‍♀":"1f64e-1f3fb-200d-2640-fe0f","🙎🏼‍♀":"1f64e-1f3fc-200d-2640-fe0f","🙎🏽‍♀":"1f64e-1f3fd-200d-2640-fe0f","🙎🏾‍♀":"1f64e-1f3fe-200d-2640-fe0f","🙎🏿‍♀":"1f64e-1f3ff-200d-2640-fe0f","🙅‍♂️":"1f645-200d-2642-fe0f","🙅🏻‍♂":"1f645-1f3fb-200d-2642-fe0f","🙅🏼‍♂":"1f645-1f3fc-200d-2642-fe0f","🙅🏽‍♂":"1f645-1f3fd-200d-2642-fe0f","🙅🏾‍♂":"1f645-1f3fe-200d-2642-fe0f","🙅🏿‍♂":"1f645-1f3ff-200d-2642-fe0f","🙅‍♀️":"1f645-200d-2640-fe0f","🙅🏻‍♀":"1f645-1f3fb-200d-2640-fe0f","🙅🏼‍♀":"1f645-1f3fc-200d-2640-fe0f","🙅🏽‍♀":"1f645-1f3fd-200d-2640-fe0f","🙅🏾‍♀":"1f645-1f3fe-200d-2640-fe0f","🙅🏿‍♀":"1f645-1f3ff-200d-2640-fe0f","🙆‍♂️":"1f646-200d-2642-fe0f","🙆🏻‍♂":"1f646-1f3fb-200d-2642-fe0f","🙆🏼‍♂":"1f646-1f3fc-200d-2642-fe0f","🙆🏽‍♂":"1f646-1f3fd-200d-2642-fe0f","🙆🏾‍♂":"1f646-1f3fe-200d-2642-fe0f","🙆🏿‍♂":"1f646-1f3ff-200d-2642-fe0f","🙆‍♀️":"1f646-200d-2640-fe0f","🙆🏻‍♀":"1f646-1f3fb-200d-2640-fe0f","🙆🏼‍♀":"1f646-1f3fc-200d-2640-fe0f","🙆🏽‍♀":"1f646-1f3fd-200d-2640-fe0f","🙆🏾‍♀":"1f646-1f3fe-200d-2640-fe0f","🙆🏿‍♀":"1f646-1f3ff-200d-2640-fe0f","💁‍♂️":"1f481-200d-2642-fe0f","💁🏻‍♂":"1f481-1f3fb-200d-2642-fe0f","💁🏼‍♂":"1f481-1f3fc-200d-2642-fe0f","💁🏽‍♂":"1f481-1f3fd-200d-2642-fe0f","💁🏾‍♂":"1f481-1f3fe-200d-2642-fe0f","💁🏿‍♂":"1f481-1f3ff-200d-2642-fe0f","💁‍♀️":"1f481-200d-2640-fe0f","💁🏻‍♀":"1f481-1f3fb-200d-2640-fe0f","💁🏼‍♀":"1f481-1f3fc-200d-2640-fe0f","💁🏽‍♀":"1f481-1f3fd-200d-2640-fe0f","💁🏾‍♀":"1f481-1f3fe-200d-2640-fe0f","💁🏿‍♀":"1f481-1f3ff-200d-2640-fe0f","🙋‍♂️":"1f64b-200d-2642-fe0f","🙋🏻‍♂":"1f64b-1f3fb-200d-2642-fe0f","🙋🏼‍♂":"1f64b-1f3fc-200d-2642-fe0f","🙋🏽‍♂":"1f64b-1f3fd-200d-2642-fe0f","🙋🏾‍♂":"1f64b-1f3fe-200d-2642-fe0f","🙋🏿‍♂":"1f64b-1f3ff-200d-2642-fe0f","🙋‍♀️":"1f64b-200d-2640-fe0f","🙋🏻‍♀":"1f64b-1f3fb-200d-2640-fe0f","🙋🏼‍♀":"1f64b-1f3fc-200d-2640-fe0f","🙋🏽‍♀":"1f64b-1f3fd-200d-2640-fe0f","🙋🏾‍♀":"1f64b-1f3fe-200d-2640-fe0f","🙋🏿‍♀":"1f64b-1f3ff-200d-2640-fe0f","🧏‍♂️":"1f9cf-200d-2642-fe0f","🧏🏻‍♂":"1f9cf-1f3fb-200d-2642-fe0f","🧏🏼‍♂":"1f9cf-1f3fc-200d-2642-fe0f","🧏🏽‍♂":"1f9cf-1f3fd-200d-2642-fe0f","🧏🏾‍♂":"1f9cf-1f3fe-200d-2642-fe0f","🧏🏿‍♂":"1f9cf-1f3ff-200d-2642-fe0f","🧏‍♀️":"1f9cf-200d-2640-fe0f","🧏🏻‍♀":"1f9cf-1f3fb-200d-2640-fe0f","🧏🏼‍♀":"1f9cf-1f3fc-200d-2640-fe0f","🧏🏽‍♀":"1f9cf-1f3fd-200d-2640-fe0f","🧏🏾‍♀":"1f9cf-1f3fe-200d-2640-fe0f","🧏🏿‍♀":"1f9cf-1f3ff-200d-2640-fe0f","🙇‍♂️":"1f647-200d-2642-fe0f","🙇🏻‍♂":"1f647-1f3fb-200d-2642-fe0f","🙇🏼‍♂":"1f647-1f3fc-200d-2642-fe0f","🙇🏽‍♂":"1f647-1f3fd-200d-2642-fe0f","🙇🏾‍♂":"1f647-1f3fe-200d-2642-fe0f","🙇🏿‍♂":"1f647-1f3ff-200d-2642-fe0f","🙇‍♀️":"1f647-200d-2640-fe0f","🙇🏻‍♀":"1f647-1f3fb-200d-2640-fe0f","🙇🏼‍♀":"1f647-1f3fc-200d-2640-fe0f","🙇🏽‍♀":"1f647-1f3fd-200d-2640-fe0f","🙇🏾‍♀":"1f647-1f3fe-200d-2640-fe0f","🙇🏿‍♀":"1f647-1f3ff-200d-2640-fe0f","🤦‍♂️":"1f926-200d-2642-fe0f","🤦🏻‍♂":"1f926-1f3fb-200d-2642-fe0f","🤦🏼‍♂":"1f926-1f3fc-200d-2642-fe0f","🤦🏽‍♂":"1f926-1f3fd-200d-2642-fe0f","🤦🏾‍♂":"1f926-1f3fe-200d-2642-fe0f","🤦🏿‍♂":"1f926-1f3ff-200d-2642-fe0f","🤦‍♀️":"1f926-200d-2640-fe0f","🤦🏻‍♀":"1f926-1f3fb-200d-2640-fe0f","🤦🏼‍♀":"1f926-1f3fc-200d-2640-fe0f","🤦🏽‍♀":"1f926-1f3fd-200d-2640-fe0f","🤦🏾‍♀":"1f926-1f3fe-200d-2640-fe0f","🤦🏿‍♀":"1f926-1f3ff-200d-2640-fe0f","🤷‍♂️":"1f937-200d-2642-fe0f","🤷🏻‍♂":"1f937-1f3fb-200d-2642-fe0f","🤷🏼‍♂":"1f937-1f3fc-200d-2642-fe0f","🤷🏽‍♂":"1f937-1f3fd-200d-2642-fe0f","🤷🏾‍♂":"1f937-1f3fe-200d-2642-fe0f","🤷🏿‍♂":"1f937-1f3ff-200d-2642-fe0f","🤷‍♀️":"1f937-200d-2640-fe0f","🤷🏻‍♀":"1f937-1f3fb-200d-2640-fe0f","🤷🏼‍♀":"1f937-1f3fc-200d-2640-fe0f","🤷🏽‍♀":"1f937-1f3fd-200d-2640-fe0f","🤷🏾‍♀":"1f937-1f3fe-200d-2640-fe0f","🤷🏿‍♀":"1f937-1f3ff-200d-2640-fe0f","🧑‍⚕️":"1f9d1-200d-2695-fe0f","🧑🏻‍⚕":"1f9d1-1f3fb-200d-2695-fe0f","🧑🏼‍⚕":"1f9d1-1f3fc-200d-2695-fe0f","🧑🏽‍⚕":"1f9d1-1f3fd-200d-2695-fe0f","🧑🏾‍⚕":"1f9d1-1f3fe-200d-2695-fe0f","🧑🏿‍⚕":"1f9d1-1f3ff-200d-2695-fe0f","👨‍⚕️":"1f468-200d-2695-fe0f","👨🏻‍⚕":"1f468-1f3fb-200d-2695-fe0f","👨🏼‍⚕":"1f468-1f3fc-200d-2695-fe0f","👨🏽‍⚕":"1f468-1f3fd-200d-2695-fe0f","👨🏾‍⚕":"1f468-1f3fe-200d-2695-fe0f","👨🏿‍⚕":"1f468-1f3ff-200d-2695-fe0f","👩‍⚕️":"1f469-200d-2695-fe0f","👩🏻‍⚕":"1f469-1f3fb-200d-2695-fe0f","👩🏼‍⚕":"1f469-1f3fc-200d-2695-fe0f","👩🏽‍⚕":"1f469-1f3fd-200d-2695-fe0f","👩🏾‍⚕":"1f469-1f3fe-200d-2695-fe0f","👩🏿‍⚕":"1f469-1f3ff-200d-2695-fe0f","🧑🏻‍🎓":"1f9d1-1f3fb-200d-1f393","🧑🏼‍🎓":"1f9d1-1f3fc-200d-1f393","🧑🏽‍🎓":"1f9d1-1f3fd-200d-1f393","🧑🏾‍🎓":"1f9d1-1f3fe-200d-1f393","🧑🏿‍🎓":"1f9d1-1f3ff-200d-1f393","👨🏻‍🎓":"1f468-1f3fb-200d-1f393","👨🏼‍🎓":"1f468-1f3fc-200d-1f393","👨🏽‍🎓":"1f468-1f3fd-200d-1f393","👨🏾‍🎓":"1f468-1f3fe-200d-1f393","👨🏿‍🎓":"1f468-1f3ff-200d-1f393","👩🏻‍🎓":"1f469-1f3fb-200d-1f393","👩🏼‍🎓":"1f469-1f3fc-200d-1f393","👩🏽‍🎓":"1f469-1f3fd-200d-1f393","👩🏾‍🎓":"1f469-1f3fe-200d-1f393","👩🏿‍🎓":"1f469-1f3ff-200d-1f393","🧑🏻‍🏫":"1f9d1-1f3fb-200d-1f3eb","🧑🏼‍🏫":"1f9d1-1f3fc-200d-1f3eb","🧑🏽‍🏫":"1f9d1-1f3fd-200d-1f3eb","🧑🏾‍🏫":"1f9d1-1f3fe-200d-1f3eb","🧑🏿‍🏫":"1f9d1-1f3ff-200d-1f3eb","👨🏻‍🏫":"1f468-1f3fb-200d-1f3eb","👨🏼‍🏫":"1f468-1f3fc-200d-1f3eb","👨🏽‍🏫":"1f468-1f3fd-200d-1f3eb","👨🏾‍🏫":"1f468-1f3fe-200d-1f3eb","👨🏿‍🏫":"1f468-1f3ff-200d-1f3eb","👩🏻‍🏫":"1f469-1f3fb-200d-1f3eb","👩🏼‍🏫":"1f469-1f3fc-200d-1f3eb","👩🏽‍🏫":"1f469-1f3fd-200d-1f3eb","👩🏾‍🏫":"1f469-1f3fe-200d-1f3eb","👩🏿‍🏫":"1f469-1f3ff-200d-1f3eb","🧑‍⚖️":"1f9d1-200d-2696-fe0f","🧑🏻‍⚖":"1f9d1-1f3fb-200d-2696-fe0f","🧑🏼‍⚖":"1f9d1-1f3fc-200d-2696-fe0f","🧑🏽‍⚖":"1f9d1-1f3fd-200d-2696-fe0f","🧑🏾‍⚖":"1f9d1-1f3fe-200d-2696-fe0f","🧑🏿‍⚖":"1f9d1-1f3ff-200d-2696-fe0f","👨‍⚖️":"1f468-200d-2696-fe0f","👨🏻‍⚖":"1f468-1f3fb-200d-2696-fe0f","👨🏼‍⚖":"1f468-1f3fc-200d-2696-fe0f","👨🏽‍⚖":"1f468-1f3fd-200d-2696-fe0f","👨🏾‍⚖":"1f468-1f3fe-200d-2696-fe0f","👨🏿‍⚖":"1f468-1f3ff-200d-2696-fe0f","👩‍⚖️":"1f469-200d-2696-fe0f","👩🏻‍⚖":"1f469-1f3fb-200d-2696-fe0f","👩🏼‍⚖":"1f469-1f3fc-200d-2696-fe0f","👩🏽‍⚖":"1f469-1f3fd-200d-2696-fe0f","👩🏾‍⚖":"1f469-1f3fe-200d-2696-fe0f","👩🏿‍⚖":"1f469-1f3ff-200d-2696-fe0f","🧑🏻‍🌾":"1f9d1-1f3fb-200d-1f33e","🧑🏼‍🌾":"1f9d1-1f3fc-200d-1f33e","🧑🏽‍🌾":"1f9d1-1f3fd-200d-1f33e","🧑🏾‍🌾":"1f9d1-1f3fe-200d-1f33e","🧑🏿‍🌾":"1f9d1-1f3ff-200d-1f33e","👨🏻‍🌾":"1f468-1f3fb-200d-1f33e","👨🏼‍🌾":"1f468-1f3fc-200d-1f33e","👨🏽‍🌾":"1f468-1f3fd-200d-1f33e","👨🏾‍🌾":"1f468-1f3fe-200d-1f33e","👨🏿‍🌾":"1f468-1f3ff-200d-1f33e","👩🏻‍🌾":"1f469-1f3fb-200d-1f33e","👩🏼‍🌾":"1f469-1f3fc-200d-1f33e","👩🏽‍🌾":"1f469-1f3fd-200d-1f33e","👩🏾‍🌾":"1f469-1f3fe-200d-1f33e","👩🏿‍🌾":"1f469-1f3ff-200d-1f33e","🧑🏻‍🍳":"1f9d1-1f3fb-200d-1f373","🧑🏼‍🍳":"1f9d1-1f3fc-200d-1f373","🧑🏽‍🍳":"1f9d1-1f3fd-200d-1f373","🧑🏾‍🍳":"1f9d1-1f3fe-200d-1f373","🧑🏿‍🍳":"1f9d1-1f3ff-200d-1f373","👨🏻‍🍳":"1f468-1f3fb-200d-1f373","👨🏼‍🍳":"1f468-1f3fc-200d-1f373","👨🏽‍🍳":"1f468-1f3fd-200d-1f373","👨🏾‍🍳":"1f468-1f3fe-200d-1f373","👨🏿‍🍳":"1f468-1f3ff-200d-1f373","👩🏻‍🍳":"1f469-1f3fb-200d-1f373","👩🏼‍🍳":"1f469-1f3fc-200d-1f373","👩🏽‍🍳":"1f469-1f3fd-200d-1f373","👩🏾‍🍳":"1f469-1f3fe-200d-1f373","👩🏿‍🍳":"1f469-1f3ff-200d-1f373","🧑🏻‍🔧":"1f9d1-1f3fb-200d-1f527","🧑🏼‍🔧":"1f9d1-1f3fc-200d-1f527","🧑🏽‍🔧":"1f9d1-1f3fd-200d-1f527","🧑🏾‍🔧":"1f9d1-1f3fe-200d-1f527","🧑🏿‍🔧":"1f9d1-1f3ff-200d-1f527","👨🏻‍🔧":"1f468-1f3fb-200d-1f527","👨🏼‍🔧":"1f468-1f3fc-200d-1f527","👨🏽‍🔧":"1f468-1f3fd-200d-1f527","👨🏾‍🔧":"1f468-1f3fe-200d-1f527","👨🏿‍🔧":"1f468-1f3ff-200d-1f527","👩🏻‍🔧":"1f469-1f3fb-200d-1f527","👩🏼‍🔧":"1f469-1f3fc-200d-1f527","👩🏽‍🔧":"1f469-1f3fd-200d-1f527","👩🏾‍🔧":"1f469-1f3fe-200d-1f527","👩🏿‍🔧":"1f469-1f3ff-200d-1f527","🧑🏻‍🏭":"1f9d1-1f3fb-200d-1f3ed","🧑🏼‍🏭":"1f9d1-1f3fc-200d-1f3ed","🧑🏽‍🏭":"1f9d1-1f3fd-200d-1f3ed","🧑🏾‍🏭":"1f9d1-1f3fe-200d-1f3ed","🧑🏿‍🏭":"1f9d1-1f3ff-200d-1f3ed","👨🏻‍🏭":"1f468-1f3fb-200d-1f3ed","👨🏼‍🏭":"1f468-1f3fc-200d-1f3ed","👨🏽‍🏭":"1f468-1f3fd-200d-1f3ed","👨🏾‍🏭":"1f468-1f3fe-200d-1f3ed","👨🏿‍🏭":"1f468-1f3ff-200d-1f3ed","👩🏻‍🏭":"1f469-1f3fb-200d-1f3ed","👩🏼‍🏭":"1f469-1f3fc-200d-1f3ed","👩🏽‍🏭":"1f469-1f3fd-200d-1f3ed","👩🏾‍🏭":"1f469-1f3fe-200d-1f3ed","👩🏿‍🏭":"1f469-1f3ff-200d-1f3ed","🧑🏻‍💼":"1f9d1-1f3fb-200d-1f4bc","🧑🏼‍💼":"1f9d1-1f3fc-200d-1f4bc","🧑🏽‍💼":"1f9d1-1f3fd-200d-1f4bc","🧑🏾‍💼":"1f9d1-1f3fe-200d-1f4bc","🧑🏿‍💼":"1f9d1-1f3ff-200d-1f4bc","👨🏻‍💼":"1f468-1f3fb-200d-1f4bc","👨🏼‍💼":"1f468-1f3fc-200d-1f4bc","👨🏽‍💼":"1f468-1f3fd-200d-1f4bc","👨🏾‍💼":"1f468-1f3fe-200d-1f4bc","👨🏿‍💼":"1f468-1f3ff-200d-1f4bc","👩🏻‍💼":"1f469-1f3fb-200d-1f4bc","👩🏼‍💼":"1f469-1f3fc-200d-1f4bc","👩🏽‍💼":"1f469-1f3fd-200d-1f4bc","👩🏾‍💼":"1f469-1f3fe-200d-1f4bc","👩🏿‍💼":"1f469-1f3ff-200d-1f4bc","🧑🏻‍🔬":"1f9d1-1f3fb-200d-1f52c","🧑🏼‍🔬":"1f9d1-1f3fc-200d-1f52c","🧑🏽‍🔬":"1f9d1-1f3fd-200d-1f52c","🧑🏾‍🔬":"1f9d1-1f3fe-200d-1f52c","🧑🏿‍🔬":"1f9d1-1f3ff-200d-1f52c","👨🏻‍🔬":"1f468-1f3fb-200d-1f52c","👨🏼‍🔬":"1f468-1f3fc-200d-1f52c","👨🏽‍🔬":"1f468-1f3fd-200d-1f52c","👨🏾‍🔬":"1f468-1f3fe-200d-1f52c","👨🏿‍🔬":"1f468-1f3ff-200d-1f52c","👩🏻‍🔬":"1f469-1f3fb-200d-1f52c","👩🏼‍🔬":"1f469-1f3fc-200d-1f52c","👩🏽‍🔬":"1f469-1f3fd-200d-1f52c","👩🏾‍🔬":"1f469-1f3fe-200d-1f52c","👩🏿‍🔬":"1f469-1f3ff-200d-1f52c","🧑🏻‍💻":"1f9d1-1f3fb-200d-1f4bb","🧑🏼‍💻":"1f9d1-1f3fc-200d-1f4bb","🧑🏽‍💻":"1f9d1-1f3fd-200d-1f4bb","🧑🏾‍💻":"1f9d1-1f3fe-200d-1f4bb","🧑🏿‍💻":"1f9d1-1f3ff-200d-1f4bb","👨🏻‍💻":"1f468-1f3fb-200d-1f4bb","👨🏼‍💻":"1f468-1f3fc-200d-1f4bb","👨🏽‍💻":"1f468-1f3fd-200d-1f4bb","👨🏾‍💻":"1f468-1f3fe-200d-1f4bb","👨🏿‍💻":"1f468-1f3ff-200d-1f4bb","👩🏻‍💻":"1f469-1f3fb-200d-1f4bb","👩🏼‍💻":"1f469-1f3fc-200d-1f4bb","👩🏽‍💻":"1f469-1f3fd-200d-1f4bb","👩🏾‍💻":"1f469-1f3fe-200d-1f4bb","👩🏿‍💻":"1f469-1f3ff-200d-1f4bb","🧑🏻‍🎤":"1f9d1-1f3fb-200d-1f3a4","🧑🏼‍🎤":"1f9d1-1f3fc-200d-1f3a4","🧑🏽‍🎤":"1f9d1-1f3fd-200d-1f3a4","🧑🏾‍🎤":"1f9d1-1f3fe-200d-1f3a4","🧑🏿‍🎤":"1f9d1-1f3ff-200d-1f3a4","👨🏻‍🎤":"1f468-1f3fb-200d-1f3a4","👨🏼‍🎤":"1f468-1f3fc-200d-1f3a4","👨🏽‍🎤":"1f468-1f3fd-200d-1f3a4","👨🏾‍🎤":"1f468-1f3fe-200d-1f3a4","👨🏿‍🎤":"1f468-1f3ff-200d-1f3a4","👩🏻‍🎤":"1f469-1f3fb-200d-1f3a4","👩🏼‍🎤":"1f469-1f3fc-200d-1f3a4","👩🏽‍🎤":"1f469-1f3fd-200d-1f3a4","👩🏾‍🎤":"1f469-1f3fe-200d-1f3a4","👩🏿‍🎤":"1f469-1f3ff-200d-1f3a4","🧑🏻‍🎨":"1f9d1-1f3fb-200d-1f3a8","🧑🏼‍🎨":"1f9d1-1f3fc-200d-1f3a8","🧑🏽‍🎨":"1f9d1-1f3fd-200d-1f3a8","🧑🏾‍🎨":"1f9d1-1f3fe-200d-1f3a8","🧑🏿‍🎨":"1f9d1-1f3ff-200d-1f3a8","👨🏻‍🎨":"1f468-1f3fb-200d-1f3a8","👨🏼‍🎨":"1f468-1f3fc-200d-1f3a8","👨🏽‍🎨":"1f468-1f3fd-200d-1f3a8","👨🏾‍🎨":"1f468-1f3fe-200d-1f3a8","👨🏿‍🎨":"1f468-1f3ff-200d-1f3a8","👩🏻‍🎨":"1f469-1f3fb-200d-1f3a8","👩🏼‍🎨":"1f469-1f3fc-200d-1f3a8","👩🏽‍🎨":"1f469-1f3fd-200d-1f3a8","👩🏾‍🎨":"1f469-1f3fe-200d-1f3a8","👩🏿‍🎨":"1f469-1f3ff-200d-1f3a8","🧑‍✈️":"1f9d1-200d-2708-fe0f","🧑🏻‍✈":"1f9d1-1f3fb-200d-2708-fe0f","🧑🏼‍✈":"1f9d1-1f3fc-200d-2708-fe0f","🧑🏽‍✈":"1f9d1-1f3fd-200d-2708-fe0f","🧑🏾‍✈":"1f9d1-1f3fe-200d-2708-fe0f","🧑🏿‍✈":"1f9d1-1f3ff-200d-2708-fe0f","👨‍✈️":"1f468-200d-2708-fe0f","👨🏻‍✈":"1f468-1f3fb-200d-2708-fe0f","👨🏼‍✈":"1f468-1f3fc-200d-2708-fe0f","👨🏽‍✈":"1f468-1f3fd-200d-2708-fe0f","👨🏾‍✈":"1f468-1f3fe-200d-2708-fe0f","👨🏿‍✈":"1f468-1f3ff-200d-2708-fe0f","👩‍✈️":"1f469-200d-2708-fe0f","👩🏻‍✈":"1f469-1f3fb-200d-2708-fe0f","👩🏼‍✈":"1f469-1f3fc-200d-2708-fe0f","👩🏽‍✈":"1f469-1f3fd-200d-2708-fe0f","👩🏾‍✈":"1f469-1f3fe-200d-2708-fe0f","👩🏿‍✈":"1f469-1f3ff-200d-2708-fe0f","🧑🏻‍🚀":"1f9d1-1f3fb-200d-1f680","🧑🏼‍🚀":"1f9d1-1f3fc-200d-1f680","🧑🏽‍🚀":"1f9d1-1f3fd-200d-1f680","🧑🏾‍🚀":"1f9d1-1f3fe-200d-1f680","🧑🏿‍🚀":"1f9d1-1f3ff-200d-1f680","👨🏻‍🚀":"1f468-1f3fb-200d-1f680","👨🏼‍🚀":"1f468-1f3fc-200d-1f680","👨🏽‍🚀":"1f468-1f3fd-200d-1f680","👨🏾‍🚀":"1f468-1f3fe-200d-1f680","👨🏿‍🚀":"1f468-1f3ff-200d-1f680","👩🏻‍🚀":"1f469-1f3fb-200d-1f680","👩🏼‍🚀":"1f469-1f3fc-200d-1f680","👩🏽‍🚀":"1f469-1f3fd-200d-1f680","👩🏾‍🚀":"1f469-1f3fe-200d-1f680","👩🏿‍🚀":"1f469-1f3ff-200d-1f680","🧑🏻‍🚒":"1f9d1-1f3fb-200d-1f692","🧑🏼‍🚒":"1f9d1-1f3fc-200d-1f692","🧑🏽‍🚒":"1f9d1-1f3fd-200d-1f692","🧑🏾‍🚒":"1f9d1-1f3fe-200d-1f692","🧑🏿‍🚒":"1f9d1-1f3ff-200d-1f692","👨🏻‍🚒":"1f468-1f3fb-200d-1f692","👨🏼‍🚒":"1f468-1f3fc-200d-1f692","👨🏽‍🚒":"1f468-1f3fd-200d-1f692","👨🏾‍🚒":"1f468-1f3fe-200d-1f692","👨🏿‍🚒":"1f468-1f3ff-200d-1f692","👩🏻‍🚒":"1f469-1f3fb-200d-1f692","👩🏼‍🚒":"1f469-1f3fc-200d-1f692","👩🏽‍🚒":"1f469-1f3fd-200d-1f692","👩🏾‍🚒":"1f469-1f3fe-200d-1f692","👩🏿‍🚒":"1f469-1f3ff-200d-1f692","👮‍♂️":"1f46e-200d-2642-fe0f","👮🏻‍♂":"1f46e-1f3fb-200d-2642-fe0f","👮🏼‍♂":"1f46e-1f3fc-200d-2642-fe0f","👮🏽‍♂":"1f46e-1f3fd-200d-2642-fe0f","👮🏾‍♂":"1f46e-1f3fe-200d-2642-fe0f","👮🏿‍♂":"1f46e-1f3ff-200d-2642-fe0f","👮‍♀️":"1f46e-200d-2640-fe0f","👮🏻‍♀":"1f46e-1f3fb-200d-2640-fe0f","👮🏼‍♀":"1f46e-1f3fc-200d-2640-fe0f","👮🏽‍♀":"1f46e-1f3fd-200d-2640-fe0f","👮🏾‍♀":"1f46e-1f3fe-200d-2640-fe0f","👮🏿‍♀":"1f46e-1f3ff-200d-2640-fe0f","🕵‍♂️":"1f575-fe0f-200d-2642-fe0f","🕵️‍♂":"1f575-fe0f-200d-2642-fe0f","🕵🏻‍♂":"1f575-1f3fb-200d-2642-fe0f","🕵🏼‍♂":"1f575-1f3fc-200d-2642-fe0f","🕵🏽‍♂":"1f575-1f3fd-200d-2642-fe0f","🕵🏾‍♂":"1f575-1f3fe-200d-2642-fe0f","🕵🏿‍♂":"1f575-1f3ff-200d-2642-fe0f","🕵‍♀️":"1f575-fe0f-200d-2640-fe0f","🕵️‍♀":"1f575-fe0f-200d-2640-fe0f","🕵🏻‍♀":"1f575-1f3fb-200d-2640-fe0f","🕵🏼‍♀":"1f575-1f3fc-200d-2640-fe0f","🕵🏽‍♀":"1f575-1f3fd-200d-2640-fe0f","🕵🏾‍♀":"1f575-1f3fe-200d-2640-fe0f","🕵🏿‍♀":"1f575-1f3ff-200d-2640-fe0f","💂‍♂️":"1f482-200d-2642-fe0f","💂🏻‍♂":"1f482-1f3fb-200d-2642-fe0f","💂🏼‍♂":"1f482-1f3fc-200d-2642-fe0f","💂🏽‍♂":"1f482-1f3fd-200d-2642-fe0f","💂🏾‍♂":"1f482-1f3fe-200d-2642-fe0f","💂🏿‍♂":"1f482-1f3ff-200d-2642-fe0f","💂‍♀️":"1f482-200d-2640-fe0f","💂🏻‍♀":"1f482-1f3fb-200d-2640-fe0f","💂🏼‍♀":"1f482-1f3fc-200d-2640-fe0f","💂🏽‍♀":"1f482-1f3fd-200d-2640-fe0f","💂🏾‍♀":"1f482-1f3fe-200d-2640-fe0f","💂🏿‍♀":"1f482-1f3ff-200d-2640-fe0f","👷‍♂️":"1f477-200d-2642-fe0f","👷🏻‍♂":"1f477-1f3fb-200d-2642-fe0f","👷🏼‍♂":"1f477-1f3fc-200d-2642-fe0f","👷🏽‍♂":"1f477-1f3fd-200d-2642-fe0f","👷🏾‍♂":"1f477-1f3fe-200d-2642-fe0f","👷🏿‍♂":"1f477-1f3ff-200d-2642-fe0f","👷‍♀️":"1f477-200d-2640-fe0f","👷🏻‍♀":"1f477-1f3fb-200d-2640-fe0f","👷🏼‍♀":"1f477-1f3fc-200d-2640-fe0f","👷🏽‍♀":"1f477-1f3fd-200d-2640-fe0f","👷🏾‍♀":"1f477-1f3fe-200d-2640-fe0f","👷🏿‍♀":"1f477-1f3ff-200d-2640-fe0f","👳‍♂️":"1f473-200d-2642-fe0f","👳🏻‍♂":"1f473-1f3fb-200d-2642-fe0f","👳🏼‍♂":"1f473-1f3fc-200d-2642-fe0f","👳🏽‍♂":"1f473-1f3fd-200d-2642-fe0f","👳🏾‍♂":"1f473-1f3fe-200d-2642-fe0f","👳🏿‍♂":"1f473-1f3ff-200d-2642-fe0f","👳‍♀️":"1f473-200d-2640-fe0f","👳🏻‍♀":"1f473-1f3fb-200d-2640-fe0f","👳🏼‍♀":"1f473-1f3fc-200d-2640-fe0f","👳🏽‍♀":"1f473-1f3fd-200d-2640-fe0f","👳🏾‍♀":"1f473-1f3fe-200d-2640-fe0f","👳🏿‍♀":"1f473-1f3ff-200d-2640-fe0f","🤵‍♂️":"1f935-200d-2642-fe0f","🤵🏻‍♂":"1f935-1f3fb-200d-2642-fe0f","🤵🏼‍♂":"1f935-1f3fc-200d-2642-fe0f","🤵🏽‍♂":"1f935-1f3fd-200d-2642-fe0f","🤵🏾‍♂":"1f935-1f3fe-200d-2642-fe0f","🤵🏿‍♂":"1f935-1f3ff-200d-2642-fe0f","🤵‍♀️":"1f935-200d-2640-fe0f","🤵🏻‍♀":"1f935-1f3fb-200d-2640-fe0f","🤵🏼‍♀":"1f935-1f3fc-200d-2640-fe0f","🤵🏽‍♀":"1f935-1f3fd-200d-2640-fe0f","🤵🏾‍♀":"1f935-1f3fe-200d-2640-fe0f","🤵🏿‍♀":"1f935-1f3ff-200d-2640-fe0f","👰‍♂️":"1f470-200d-2642-fe0f","👰🏻‍♂":"1f470-1f3fb-200d-2642-fe0f","👰🏼‍♂":"1f470-1f3fc-200d-2642-fe0f","👰🏽‍♂":"1f470-1f3fd-200d-2642-fe0f","👰🏾‍♂":"1f470-1f3fe-200d-2642-fe0f","👰🏿‍♂":"1f470-1f3ff-200d-2642-fe0f","👰‍♀️":"1f470-200d-2640-fe0f","👰🏻‍♀":"1f470-1f3fb-200d-2640-fe0f","👰🏼‍♀":"1f470-1f3fc-200d-2640-fe0f","👰🏽‍♀":"1f470-1f3fd-200d-2640-fe0f","👰🏾‍♀":"1f470-1f3fe-200d-2640-fe0f","👰🏿‍♀":"1f470-1f3ff-200d-2640-fe0f","👩🏻‍🍼":"1f469-1f3fb-200d-1f37c","👩🏼‍🍼":"1f469-1f3fc-200d-1f37c","👩🏽‍🍼":"1f469-1f3fd-200d-1f37c","👩🏾‍🍼":"1f469-1f3fe-200d-1f37c","👩🏿‍🍼":"1f469-1f3ff-200d-1f37c","👨🏻‍🍼":"1f468-1f3fb-200d-1f37c","👨🏼‍🍼":"1f468-1f3fc-200d-1f37c","👨🏽‍🍼":"1f468-1f3fd-200d-1f37c","👨🏾‍🍼":"1f468-1f3fe-200d-1f37c","👨🏿‍🍼":"1f468-1f3ff-200d-1f37c","🧑🏻‍🍼":"1f9d1-1f3fb-200d-1f37c","🧑🏼‍🍼":"1f9d1-1f3fc-200d-1f37c","🧑🏽‍🍼":"1f9d1-1f3fd-200d-1f37c","🧑🏾‍🍼":"1f9d1-1f3fe-200d-1f37c","🧑🏿‍🍼":"1f9d1-1f3ff-200d-1f37c","🧑🏻‍🎄":"1f9d1-1f3fb-200d-1f384","🧑🏼‍🎄":"1f9d1-1f3fc-200d-1f384","🧑🏽‍🎄":"1f9d1-1f3fd-200d-1f384","🧑🏾‍🎄":"1f9d1-1f3fe-200d-1f384","🧑🏿‍🎄":"1f9d1-1f3ff-200d-1f384","🦸‍♂️":"1f9b8-200d-2642-fe0f","🦸🏻‍♂":"1f9b8-1f3fb-200d-2642-fe0f","🦸🏼‍♂":"1f9b8-1f3fc-200d-2642-fe0f","🦸🏽‍♂":"1f9b8-1f3fd-200d-2642-fe0f","🦸🏾‍♂":"1f9b8-1f3fe-200d-2642-fe0f","🦸🏿‍♂":"1f9b8-1f3ff-200d-2642-fe0f","🦸‍♀️":"1f9b8-200d-2640-fe0f","🦸🏻‍♀":"1f9b8-1f3fb-200d-2640-fe0f","🦸🏼‍♀":"1f9b8-1f3fc-200d-2640-fe0f","🦸🏽‍♀":"1f9b8-1f3fd-200d-2640-fe0f","🦸🏾‍♀":"1f9b8-1f3fe-200d-2640-fe0f","🦸🏿‍♀":"1f9b8-1f3ff-200d-2640-fe0f","🦹‍♂️":"1f9b9-200d-2642-fe0f","🦹🏻‍♂":"1f9b9-1f3fb-200d-2642-fe0f","🦹🏼‍♂":"1f9b9-1f3fc-200d-2642-fe0f","🦹🏽‍♂":"1f9b9-1f3fd-200d-2642-fe0f","🦹🏾‍♂":"1f9b9-1f3fe-200d-2642-fe0f","🦹🏿‍♂":"1f9b9-1f3ff-200d-2642-fe0f","🦹‍♀️":"1f9b9-200d-2640-fe0f","🦹🏻‍♀":"1f9b9-1f3fb-200d-2640-fe0f","🦹🏼‍♀":"1f9b9-1f3fc-200d-2640-fe0f","🦹🏽‍♀":"1f9b9-1f3fd-200d-2640-fe0f","🦹🏾‍♀":"1f9b9-1f3fe-200d-2640-fe0f","🦹🏿‍♀":"1f9b9-1f3ff-200d-2640-fe0f","🧙‍♂️":"1f9d9-200d-2642-fe0f","🧙🏻‍♂":"1f9d9-1f3fb-200d-2642-fe0f","🧙🏼‍♂":"1f9d9-1f3fc-200d-2642-fe0f","🧙🏽‍♂":"1f9d9-1f3fd-200d-2642-fe0f","🧙🏾‍♂":"1f9d9-1f3fe-200d-2642-fe0f","🧙🏿‍♂":"1f9d9-1f3ff-200d-2642-fe0f","🧙‍♀️":"1f9d9-200d-2640-fe0f","🧙🏻‍♀":"1f9d9-1f3fb-200d-2640-fe0f","🧙🏼‍♀":"1f9d9-1f3fc-200d-2640-fe0f","🧙🏽‍♀":"1f9d9-1f3fd-200d-2640-fe0f","🧙🏾‍♀":"1f9d9-1f3fe-200d-2640-fe0f","🧙🏿‍♀":"1f9d9-1f3ff-200d-2640-fe0f","🧚‍♂️":"1f9da-200d-2642-fe0f","🧚🏻‍♂":"1f9da-1f3fb-200d-2642-fe0f","🧚🏼‍♂":"1f9da-1f3fc-200d-2642-fe0f","🧚🏽‍♂":"1f9da-1f3fd-200d-2642-fe0f","🧚🏾‍♂":"1f9da-1f3fe-200d-2642-fe0f","🧚🏿‍♂":"1f9da-1f3ff-200d-2642-fe0f","🧚‍♀️":"1f9da-200d-2640-fe0f","🧚🏻‍♀":"1f9da-1f3fb-200d-2640-fe0f","🧚🏼‍♀":"1f9da-1f3fc-200d-2640-fe0f","🧚🏽‍♀":"1f9da-1f3fd-200d-2640-fe0f","🧚🏾‍♀":"1f9da-1f3fe-200d-2640-fe0f","🧚🏿‍♀":"1f9da-1f3ff-200d-2640-fe0f","🧛‍♂️":"1f9db-200d-2642-fe0f","🧛🏻‍♂":"1f9db-1f3fb-200d-2642-fe0f","🧛🏼‍♂":"1f9db-1f3fc-200d-2642-fe0f","🧛🏽‍♂":"1f9db-1f3fd-200d-2642-fe0f","🧛🏾‍♂":"1f9db-1f3fe-200d-2642-fe0f","🧛🏿‍♂":"1f9db-1f3ff-200d-2642-fe0f","🧛‍♀️":"1f9db-200d-2640-fe0f","🧛🏻‍♀":"1f9db-1f3fb-200d-2640-fe0f","🧛🏼‍♀":"1f9db-1f3fc-200d-2640-fe0f","🧛🏽‍♀":"1f9db-1f3fd-200d-2640-fe0f","🧛🏾‍♀":"1f9db-1f3fe-200d-2640-fe0f","🧛🏿‍♀":"1f9db-1f3ff-200d-2640-fe0f","🧜‍♂️":"1f9dc-200d-2642-fe0f","🧜🏻‍♂":"1f9dc-1f3fb-200d-2642-fe0f","🧜🏼‍♂":"1f9dc-1f3fc-200d-2642-fe0f","🧜🏽‍♂":"1f9dc-1f3fd-200d-2642-fe0f","🧜🏾‍♂":"1f9dc-1f3fe-200d-2642-fe0f","🧜🏿‍♂":"1f9dc-1f3ff-200d-2642-fe0f","🧜‍♀️":"1f9dc-200d-2640-fe0f","🧜🏻‍♀":"1f9dc-1f3fb-200d-2640-fe0f","🧜🏼‍♀":"1f9dc-1f3fc-200d-2640-fe0f","🧜🏽‍♀":"1f9dc-1f3fd-200d-2640-fe0f","🧜🏾‍♀":"1f9dc-1f3fe-200d-2640-fe0f","🧜🏿‍♀":"1f9dc-1f3ff-200d-2640-fe0f","🧝‍♂️":"1f9dd-200d-2642-fe0f","🧝🏻‍♂":"1f9dd-1f3fb-200d-2642-fe0f","🧝🏼‍♂":"1f9dd-1f3fc-200d-2642-fe0f","🧝🏽‍♂":"1f9dd-1f3fd-200d-2642-fe0f","🧝🏾‍♂":"1f9dd-1f3fe-200d-2642-fe0f","🧝🏿‍♂":"1f9dd-1f3ff-200d-2642-fe0f","🧝‍♀️":"1f9dd-200d-2640-fe0f","🧝🏻‍♀":"1f9dd-1f3fb-200d-2640-fe0f","🧝🏼‍♀":"1f9dd-1f3fc-200d-2640-fe0f","🧝🏽‍♀":"1f9dd-1f3fd-200d-2640-fe0f","🧝🏾‍♀":"1f9dd-1f3fe-200d-2640-fe0f","🧝🏿‍♀":"1f9dd-1f3ff-200d-2640-fe0f","🧞‍♂️":"1f9de-200d-2642-fe0f","🧞‍♀️":"1f9de-200d-2640-fe0f","🧟‍♂️":"1f9df-200d-2642-fe0f","🧟‍♀️":"1f9df-200d-2640-fe0f","💆‍♂️":"1f486-200d-2642-fe0f","💆🏻‍♂":"1f486-1f3fb-200d-2642-fe0f","💆🏼‍♂":"1f486-1f3fc-200d-2642-fe0f","💆🏽‍♂":"1f486-1f3fd-200d-2642-fe0f","💆🏾‍♂":"1f486-1f3fe-200d-2642-fe0f","💆🏿‍♂":"1f486-1f3ff-200d-2642-fe0f","💆‍♀️":"1f486-200d-2640-fe0f","💆🏻‍♀":"1f486-1f3fb-200d-2640-fe0f","💆🏼‍♀":"1f486-1f3fc-200d-2640-fe0f","💆🏽‍♀":"1f486-1f3fd-200d-2640-fe0f","💆🏾‍♀":"1f486-1f3fe-200d-2640-fe0f","💆🏿‍♀":"1f486-1f3ff-200d-2640-fe0f","💇‍♂️":"1f487-200d-2642-fe0f","💇🏻‍♂":"1f487-1f3fb-200d-2642-fe0f","💇🏼‍♂":"1f487-1f3fc-200d-2642-fe0f","💇🏽‍♂":"1f487-1f3fd-200d-2642-fe0f","💇🏾‍♂":"1f487-1f3fe-200d-2642-fe0f","💇🏿‍♂":"1f487-1f3ff-200d-2642-fe0f","💇‍♀️":"1f487-200d-2640-fe0f","💇🏻‍♀":"1f487-1f3fb-200d-2640-fe0f","💇🏼‍♀":"1f487-1f3fc-200d-2640-fe0f","💇🏽‍♀":"1f487-1f3fd-200d-2640-fe0f","💇🏾‍♀":"1f487-1f3fe-200d-2640-fe0f","💇🏿‍♀":"1f487-1f3ff-200d-2640-fe0f","🚶‍♂️":"1f6b6-200d-2642-fe0f","🚶🏻‍♂":"1f6b6-1f3fb-200d-2642-fe0f","🚶🏼‍♂":"1f6b6-1f3fc-200d-2642-fe0f","🚶🏽‍♂":"1f6b6-1f3fd-200d-2642-fe0f","🚶🏾‍♂":"1f6b6-1f3fe-200d-2642-fe0f","🚶🏿‍♂":"1f6b6-1f3ff-200d-2642-fe0f","🚶‍♀️":"1f6b6-200d-2640-fe0f","🚶🏻‍♀":"1f6b6-1f3fb-200d-2640-fe0f","🚶🏼‍♀":"1f6b6-1f3fc-200d-2640-fe0f","🚶🏽‍♀":"1f6b6-1f3fd-200d-2640-fe0f","🚶🏾‍♀":"1f6b6-1f3fe-200d-2640-fe0f","🚶🏿‍♀":"1f6b6-1f3ff-200d-2640-fe0f","🧍‍♂️":"1f9cd-200d-2642-fe0f","🧍🏻‍♂":"1f9cd-1f3fb-200d-2642-fe0f","🧍🏼‍♂":"1f9cd-1f3fc-200d-2642-fe0f","🧍🏽‍♂":"1f9cd-1f3fd-200d-2642-fe0f","🧍🏾‍♂":"1f9cd-1f3fe-200d-2642-fe0f","🧍🏿‍♂":"1f9cd-1f3ff-200d-2642-fe0f","🧍‍♀️":"1f9cd-200d-2640-fe0f","🧍🏻‍♀":"1f9cd-1f3fb-200d-2640-fe0f","🧍🏼‍♀":"1f9cd-1f3fc-200d-2640-fe0f","🧍🏽‍♀":"1f9cd-1f3fd-200d-2640-fe0f","🧍🏾‍♀":"1f9cd-1f3fe-200d-2640-fe0f","🧍🏿‍♀":"1f9cd-1f3ff-200d-2640-fe0f","🧎‍♂️":"1f9ce-200d-2642-fe0f","🧎🏻‍♂":"1f9ce-1f3fb-200d-2642-fe0f","🧎🏼‍♂":"1f9ce-1f3fc-200d-2642-fe0f","🧎🏽‍♂":"1f9ce-1f3fd-200d-2642-fe0f","🧎🏾‍♂":"1f9ce-1f3fe-200d-2642-fe0f","🧎🏿‍♂":"1f9ce-1f3ff-200d-2642-fe0f","🧎‍♀️":"1f9ce-200d-2640-fe0f","🧎🏻‍♀":"1f9ce-1f3fb-200d-2640-fe0f","🧎🏼‍♀":"1f9ce-1f3fc-200d-2640-fe0f","🧎🏽‍♀":"1f9ce-1f3fd-200d-2640-fe0f","🧎🏾‍♀":"1f9ce-1f3fe-200d-2640-fe0f","🧎🏿‍♀":"1f9ce-1f3ff-200d-2640-fe0f","🧑🏻‍🦯":"1f9d1-1f3fb-200d-1f9af","🧑🏼‍🦯":"1f9d1-1f3fc-200d-1f9af","🧑🏽‍🦯":"1f9d1-1f3fd-200d-1f9af","🧑🏾‍🦯":"1f9d1-1f3fe-200d-1f9af","🧑🏿‍🦯":"1f9d1-1f3ff-200d-1f9af","👨🏻‍🦯":"1f468-1f3fb-200d-1f9af","👨🏼‍🦯":"1f468-1f3fc-200d-1f9af","👨🏽‍🦯":"1f468-1f3fd-200d-1f9af","👨🏾‍🦯":"1f468-1f3fe-200d-1f9af","👨🏿‍🦯":"1f468-1f3ff-200d-1f9af","👩🏻‍🦯":"1f469-1f3fb-200d-1f9af","👩🏼‍🦯":"1f469-1f3fc-200d-1f9af","👩🏽‍🦯":"1f469-1f3fd-200d-1f9af","👩🏾‍🦯":"1f469-1f3fe-200d-1f9af","👩🏿‍🦯":"1f469-1f3ff-200d-1f9af","🧑🏻‍🦼":"1f9d1-1f3fb-200d-1f9bc","🧑🏼‍🦼":"1f9d1-1f3fc-200d-1f9bc","🧑🏽‍🦼":"1f9d1-1f3fd-200d-1f9bc","🧑🏾‍🦼":"1f9d1-1f3fe-200d-1f9bc","🧑🏿‍🦼":"1f9d1-1f3ff-200d-1f9bc","👨🏻‍🦼":"1f468-1f3fb-200d-1f9bc","👨🏼‍🦼":"1f468-1f3fc-200d-1f9bc","👨🏽‍🦼":"1f468-1f3fd-200d-1f9bc","👨🏾‍🦼":"1f468-1f3fe-200d-1f9bc","👨🏿‍🦼":"1f468-1f3ff-200d-1f9bc","👩🏻‍🦼":"1f469-1f3fb-200d-1f9bc","👩🏼‍🦼":"1f469-1f3fc-200d-1f9bc","👩🏽‍🦼":"1f469-1f3fd-200d-1f9bc","👩🏾‍🦼":"1f469-1f3fe-200d-1f9bc","👩🏿‍🦼":"1f469-1f3ff-200d-1f9bc","🧑🏻‍🦽":"1f9d1-1f3fb-200d-1f9bd","🧑🏼‍🦽":"1f9d1-1f3fc-200d-1f9bd","🧑🏽‍🦽":"1f9d1-1f3fd-200d-1f9bd","🧑🏾‍🦽":"1f9d1-1f3fe-200d-1f9bd","🧑🏿‍🦽":"1f9d1-1f3ff-200d-1f9bd","👨🏻‍🦽":"1f468-1f3fb-200d-1f9bd","👨🏼‍🦽":"1f468-1f3fc-200d-1f9bd","👨🏽‍🦽":"1f468-1f3fd-200d-1f9bd","👨🏾‍🦽":"1f468-1f3fe-200d-1f9bd","👨🏿‍🦽":"1f468-1f3ff-200d-1f9bd","👩🏻‍🦽":"1f469-1f3fb-200d-1f9bd","👩🏼‍🦽":"1f469-1f3fc-200d-1f9bd","👩🏽‍🦽":"1f469-1f3fd-200d-1f9bd","👩🏾‍🦽":"1f469-1f3fe-200d-1f9bd","👩🏿‍🦽":"1f469-1f3ff-200d-1f9bd","🏃‍♂️":"1f3c3-200d-2642-fe0f","🏃🏻‍♂":"1f3c3-1f3fb-200d-2642-fe0f","🏃🏼‍♂":"1f3c3-1f3fc-200d-2642-fe0f","🏃🏽‍♂":"1f3c3-1f3fd-200d-2642-fe0f","🏃🏾‍♂":"1f3c3-1f3fe-200d-2642-fe0f","🏃🏿‍♂":"1f3c3-1f3ff-200d-2642-fe0f","🏃‍♀️":"1f3c3-200d-2640-fe0f","🏃🏻‍♀":"1f3c3-1f3fb-200d-2640-fe0f","🏃🏼‍♀":"1f3c3-1f3fc-200d-2640-fe0f","🏃🏽‍♀":"1f3c3-1f3fd-200d-2640-fe0f","🏃🏾‍♀":"1f3c3-1f3fe-200d-2640-fe0f","🏃🏿‍♀":"1f3c3-1f3ff-200d-2640-fe0f","👯‍♂️":"1f46f-200d-2642-fe0f","👯‍♀️":"1f46f-200d-2640-fe0f","🧖‍♂️":"1f9d6-200d-2642-fe0f","🧖🏻‍♂":"1f9d6-1f3fb-200d-2642-fe0f","🧖🏼‍♂":"1f9d6-1f3fc-200d-2642-fe0f","🧖🏽‍♂":"1f9d6-1f3fd-200d-2642-fe0f","🧖🏾‍♂":"1f9d6-1f3fe-200d-2642-fe0f","🧖🏿‍♂":"1f9d6-1f3ff-200d-2642-fe0f","🧖‍♀️":"1f9d6-200d-2640-fe0f","🧖🏻‍♀":"1f9d6-1f3fb-200d-2640-fe0f","🧖🏼‍♀":"1f9d6-1f3fc-200d-2640-fe0f","🧖🏽‍♀":"1f9d6-1f3fd-200d-2640-fe0f","🧖🏾‍♀":"1f9d6-1f3fe-200d-2640-fe0f","🧖🏿‍♀":"1f9d6-1f3ff-200d-2640-fe0f","🧗‍♂️":"1f9d7-200d-2642-fe0f","🧗🏻‍♂":"1f9d7-1f3fb-200d-2642-fe0f","🧗🏼‍♂":"1f9d7-1f3fc-200d-2642-fe0f","🧗🏽‍♂":"1f9d7-1f3fd-200d-2642-fe0f","🧗🏾‍♂":"1f9d7-1f3fe-200d-2642-fe0f","🧗🏿‍♂":"1f9d7-1f3ff-200d-2642-fe0f","🧗‍♀️":"1f9d7-200d-2640-fe0f","🧗🏻‍♀":"1f9d7-1f3fb-200d-2640-fe0f","🧗🏼‍♀":"1f9d7-1f3fc-200d-2640-fe0f","🧗🏽‍♀":"1f9d7-1f3fd-200d-2640-fe0f","🧗🏾‍♀":"1f9d7-1f3fe-200d-2640-fe0f","🧗🏿‍♀":"1f9d7-1f3ff-200d-2640-fe0f","🏌‍♂️":"1f3cc-fe0f-200d-2642-fe0f","🏌️‍♂":"1f3cc-fe0f-200d-2642-fe0f","🏌🏻‍♂":"1f3cc-1f3fb-200d-2642-fe0f","🏌🏼‍♂":"1f3cc-1f3fc-200d-2642-fe0f","🏌🏽‍♂":"1f3cc-1f3fd-200d-2642-fe0f","🏌🏾‍♂":"1f3cc-1f3fe-200d-2642-fe0f","🏌🏿‍♂":"1f3cc-1f3ff-200d-2642-fe0f","🏌‍♀️":"1f3cc-fe0f-200d-2640-fe0f","🏌️‍♀":"1f3cc-fe0f-200d-2640-fe0f","🏌🏻‍♀":"1f3cc-1f3fb-200d-2640-fe0f","🏌🏼‍♀":"1f3cc-1f3fc-200d-2640-fe0f","🏌🏽‍♀":"1f3cc-1f3fd-200d-2640-fe0f","🏌🏾‍♀":"1f3cc-1f3fe-200d-2640-fe0f","🏌🏿‍♀":"1f3cc-1f3ff-200d-2640-fe0f","🏄‍♂️":"1f3c4-200d-2642-fe0f","🏄🏻‍♂":"1f3c4-1f3fb-200d-2642-fe0f","🏄🏼‍♂":"1f3c4-1f3fc-200d-2642-fe0f","🏄🏽‍♂":"1f3c4-1f3fd-200d-2642-fe0f","🏄🏾‍♂":"1f3c4-1f3fe-200d-2642-fe0f","🏄🏿‍♂":"1f3c4-1f3ff-200d-2642-fe0f","🏄‍♀️":"1f3c4-200d-2640-fe0f","🏄🏻‍♀":"1f3c4-1f3fb-200d-2640-fe0f","🏄🏼‍♀":"1f3c4-1f3fc-200d-2640-fe0f","🏄🏽‍♀":"1f3c4-1f3fd-200d-2640-fe0f","🏄🏾‍♀":"1f3c4-1f3fe-200d-2640-fe0f","🏄🏿‍♀":"1f3c4-1f3ff-200d-2640-fe0f","🚣‍♂️":"1f6a3-200d-2642-fe0f","🚣🏻‍♂":"1f6a3-1f3fb-200d-2642-fe0f","🚣🏼‍♂":"1f6a3-1f3fc-200d-2642-fe0f","🚣🏽‍♂":"1f6a3-1f3fd-200d-2642-fe0f","🚣🏾‍♂":"1f6a3-1f3fe-200d-2642-fe0f","🚣🏿‍♂":"1f6a3-1f3ff-200d-2642-fe0f","🚣‍♀️":"1f6a3-200d-2640-fe0f","🚣🏻‍♀":"1f6a3-1f3fb-200d-2640-fe0f","🚣🏼‍♀":"1f6a3-1f3fc-200d-2640-fe0f","🚣🏽‍♀":"1f6a3-1f3fd-200d-2640-fe0f","🚣🏾‍♀":"1f6a3-1f3fe-200d-2640-fe0f","🚣🏿‍♀":"1f6a3-1f3ff-200d-2640-fe0f","🏊‍♂️":"1f3ca-200d-2642-fe0f","🏊🏻‍♂":"1f3ca-1f3fb-200d-2642-fe0f","🏊🏼‍♂":"1f3ca-1f3fc-200d-2642-fe0f","🏊🏽‍♂":"1f3ca-1f3fd-200d-2642-fe0f","🏊🏾‍♂":"1f3ca-1f3fe-200d-2642-fe0f","🏊🏿‍♂":"1f3ca-1f3ff-200d-2642-fe0f","🏊‍♀️":"1f3ca-200d-2640-fe0f","🏊🏻‍♀":"1f3ca-1f3fb-200d-2640-fe0f","🏊🏼‍♀":"1f3ca-1f3fc-200d-2640-fe0f","🏊🏽‍♀":"1f3ca-1f3fd-200d-2640-fe0f","🏊🏾‍♀":"1f3ca-1f3fe-200d-2640-fe0f","🏊🏿‍♀":"1f3ca-1f3ff-200d-2640-fe0f","⛹‍♂️":"26f9-fe0f-200d-2642-fe0f","⛹️‍♂":"26f9-fe0f-200d-2642-fe0f","⛹🏻‍♂":"26f9-1f3fb-200d-2642-fe0f","⛹🏼‍♂":"26f9-1f3fc-200d-2642-fe0f","⛹🏽‍♂":"26f9-1f3fd-200d-2642-fe0f","⛹🏾‍♂":"26f9-1f3fe-200d-2642-fe0f","⛹🏿‍♂":"26f9-1f3ff-200d-2642-fe0f","⛹‍♀️":"26f9-fe0f-200d-2640-fe0f","⛹️‍♀":"26f9-fe0f-200d-2640-fe0f","⛹🏻‍♀":"26f9-1f3fb-200d-2640-fe0f","⛹🏼‍♀":"26f9-1f3fc-200d-2640-fe0f","⛹🏽‍♀":"26f9-1f3fd-200d-2640-fe0f","⛹🏾‍♀":"26f9-1f3fe-200d-2640-fe0f","⛹🏿‍♀":"26f9-1f3ff-200d-2640-fe0f","🏋‍♂️":"1f3cb-fe0f-200d-2642-fe0f","🏋️‍♂":"1f3cb-fe0f-200d-2642-fe0f","🏋🏻‍♂":"1f3cb-1f3fb-200d-2642-fe0f","🏋🏼‍♂":"1f3cb-1f3fc-200d-2642-fe0f","🏋🏽‍♂":"1f3cb-1f3fd-200d-2642-fe0f","🏋🏾‍♂":"1f3cb-1f3fe-200d-2642-fe0f","🏋🏿‍♂":"1f3cb-1f3ff-200d-2642-fe0f","🏋‍♀️":"1f3cb-fe0f-200d-2640-fe0f","🏋️‍♀":"1f3cb-fe0f-200d-2640-fe0f","🏋🏻‍♀":"1f3cb-1f3fb-200d-2640-fe0f","🏋🏼‍♀":"1f3cb-1f3fc-200d-2640-fe0f","🏋🏽‍♀":"1f3cb-1f3fd-200d-2640-fe0f","🏋🏾‍♀":"1f3cb-1f3fe-200d-2640-fe0f","🏋🏿‍♀":"1f3cb-1f3ff-200d-2640-fe0f","🚴‍♂️":"1f6b4-200d-2642-fe0f","🚴🏻‍♂":"1f6b4-1f3fb-200d-2642-fe0f","🚴🏼‍♂":"1f6b4-1f3fc-200d-2642-fe0f","🚴🏽‍♂":"1f6b4-1f3fd-200d-2642-fe0f","🚴🏾‍♂":"1f6b4-1f3fe-200d-2642-fe0f","🚴🏿‍♂":"1f6b4-1f3ff-200d-2642-fe0f","🚴‍♀️":"1f6b4-200d-2640-fe0f","🚴🏻‍♀":"1f6b4-1f3fb-200d-2640-fe0f","🚴🏼‍♀":"1f6b4-1f3fc-200d-2640-fe0f","🚴🏽‍♀":"1f6b4-1f3fd-200d-2640-fe0f","🚴🏾‍♀":"1f6b4-1f3fe-200d-2640-fe0f","🚴🏿‍♀":"1f6b4-1f3ff-200d-2640-fe0f","🚵‍♂️":"1f6b5-200d-2642-fe0f","🚵🏻‍♂":"1f6b5-1f3fb-200d-2642-fe0f","🚵🏼‍♂":"1f6b5-1f3fc-200d-2642-fe0f","🚵🏽‍♂":"1f6b5-1f3fd-200d-2642-fe0f","🚵🏾‍♂":"1f6b5-1f3fe-200d-2642-fe0f","🚵🏿‍♂":"1f6b5-1f3ff-200d-2642-fe0f","🚵‍♀️":"1f6b5-200d-2640-fe0f","🚵🏻‍♀":"1f6b5-1f3fb-200d-2640-fe0f","🚵🏼‍♀":"1f6b5-1f3fc-200d-2640-fe0f","🚵🏽‍♀":"1f6b5-1f3fd-200d-2640-fe0f","🚵🏾‍♀":"1f6b5-1f3fe-200d-2640-fe0f","🚵🏿‍♀":"1f6b5-1f3ff-200d-2640-fe0f","🤸‍♂️":"1f938-200d-2642-fe0f","🤸🏻‍♂":"1f938-1f3fb-200d-2642-fe0f","🤸🏼‍♂":"1f938-1f3fc-200d-2642-fe0f","🤸🏽‍♂":"1f938-1f3fd-200d-2642-fe0f","🤸🏾‍♂":"1f938-1f3fe-200d-2642-fe0f","🤸🏿‍♂":"1f938-1f3ff-200d-2642-fe0f","🤸‍♀️":"1f938-200d-2640-fe0f","🤸🏻‍♀":"1f938-1f3fb-200d-2640-fe0f","🤸🏼‍♀":"1f938-1f3fc-200d-2640-fe0f","🤸🏽‍♀":"1f938-1f3fd-200d-2640-fe0f","🤸🏾‍♀":"1f938-1f3fe-200d-2640-fe0f","🤸🏿‍♀":"1f938-1f3ff-200d-2640-fe0f","🤼‍♂️":"1f93c-200d-2642-fe0f","🤼‍♀️":"1f93c-200d-2640-fe0f","🤽‍♂️":"1f93d-200d-2642-fe0f","🤽🏻‍♂":"1f93d-1f3fb-200d-2642-fe0f","🤽🏼‍♂":"1f93d-1f3fc-200d-2642-fe0f","🤽🏽‍♂":"1f93d-1f3fd-200d-2642-fe0f","🤽🏾‍♂":"1f93d-1f3fe-200d-2642-fe0f","🤽🏿‍♂":"1f93d-1f3ff-200d-2642-fe0f","🤽‍♀️":"1f93d-200d-2640-fe0f","🤽🏻‍♀":"1f93d-1f3fb-200d-2640-fe0f","🤽🏼‍♀":"1f93d-1f3fc-200d-2640-fe0f","🤽🏽‍♀":"1f93d-1f3fd-200d-2640-fe0f","🤽🏾‍♀":"1f93d-1f3fe-200d-2640-fe0f","🤽🏿‍♀":"1f93d-1f3ff-200d-2640-fe0f","🤾‍♂️":"1f93e-200d-2642-fe0f","🤾🏻‍♂":"1f93e-1f3fb-200d-2642-fe0f","🤾🏼‍♂":"1f93e-1f3fc-200d-2642-fe0f","🤾🏽‍♂":"1f93e-1f3fd-200d-2642-fe0f","🤾🏾‍♂":"1f93e-1f3fe-200d-2642-fe0f","🤾🏿‍♂":"1f93e-1f3ff-200d-2642-fe0f","🤾‍♀️":"1f93e-200d-2640-fe0f","🤾🏻‍♀":"1f93e-1f3fb-200d-2640-fe0f","🤾🏼‍♀":"1f93e-1f3fc-200d-2640-fe0f","🤾🏽‍♀":"1f93e-1f3fd-200d-2640-fe0f","🤾🏾‍♀":"1f93e-1f3fe-200d-2640-fe0f","🤾🏿‍♀":"1f93e-1f3ff-200d-2640-fe0f","🤹‍♂️":"1f939-200d-2642-fe0f","🤹🏻‍♂":"1f939-1f3fb-200d-2642-fe0f","🤹🏼‍♂":"1f939-1f3fc-200d-2642-fe0f","🤹🏽‍♂":"1f939-1f3fd-200d-2642-fe0f","🤹🏾‍♂":"1f939-1f3fe-200d-2642-fe0f","🤹🏿‍♂":"1f939-1f3ff-200d-2642-fe0f","🤹‍♀️":"1f939-200d-2640-fe0f","🤹🏻‍♀":"1f939-1f3fb-200d-2640-fe0f","🤹🏼‍♀":"1f939-1f3fc-200d-2640-fe0f","🤹🏽‍♀":"1f939-1f3fd-200d-2640-fe0f","🤹🏾‍♀":"1f939-1f3fe-200d-2640-fe0f","🤹🏿‍♀":"1f939-1f3ff-200d-2640-fe0f","🧘‍♂️":"1f9d8-200d-2642-fe0f","🧘🏻‍♂":"1f9d8-1f3fb-200d-2642-fe0f","🧘🏼‍♂":"1f9d8-1f3fc-200d-2642-fe0f","🧘🏽‍♂":"1f9d8-1f3fd-200d-2642-fe0f","🧘🏾‍♂":"1f9d8-1f3fe-200d-2642-fe0f","🧘🏿‍♂":"1f9d8-1f3ff-200d-2642-fe0f","🧘‍♀️":"1f9d8-200d-2640-fe0f","🧘🏻‍♀":"1f9d8-1f3fb-200d-2640-fe0f","🧘🏼‍♀":"1f9d8-1f3fc-200d-2640-fe0f","🧘🏽‍♀":"1f9d8-1f3fd-200d-2640-fe0f","🧘🏾‍♀":"1f9d8-1f3fe-200d-2640-fe0f","🧘🏿‍♀":"1f9d8-1f3ff-200d-2640-fe0f","🐻‍❄️":"1f43b-200d-2744-fe0f","🏳️‍🌈":"1f3f3-fe0f-200d-1f308","🏳‍⚧️":"1f3f3-fe0f-200d-26a7-fe0f","🏳️‍⚧":"1f3f3-fe0f-200d-26a7-fe0f","🏴‍☠️":"1f3f4-200d-2620-fe0f","👁️‍🗨️":"1f441-200d-1f5e8","🧔🏻‍♂️":"1f9d4-1f3fb-200d-2642-fe0f","🧔🏼‍♂️":"1f9d4-1f3fc-200d-2642-fe0f","🧔🏽‍♂️":"1f9d4-1f3fd-200d-2642-fe0f","🧔🏾‍♂️":"1f9d4-1f3fe-200d-2642-fe0f","🧔🏿‍♂️":"1f9d4-1f3ff-200d-2642-fe0f","🧔🏻‍♀️":"1f9d4-1f3fb-200d-2640-fe0f","🧔🏼‍♀️":"1f9d4-1f3fc-200d-2640-fe0f","🧔🏽‍♀️":"1f9d4-1f3fd-200d-2640-fe0f","🧔🏾‍♀️":"1f9d4-1f3fe-200d-2640-fe0f","🧔🏿‍♀️":"1f9d4-1f3ff-200d-2640-fe0f","👱🏻‍♀️":"1f471-1f3fb-200d-2640-fe0f","👱🏼‍♀️":"1f471-1f3fc-200d-2640-fe0f","👱🏽‍♀️":"1f471-1f3fd-200d-2640-fe0f","👱🏾‍♀️":"1f471-1f3fe-200d-2640-fe0f","👱🏿‍♀️":"1f471-1f3ff-200d-2640-fe0f","👱🏻‍♂️":"1f471-1f3fb-200d-2642-fe0f","👱🏼‍♂️":"1f471-1f3fc-200d-2642-fe0f","👱🏽‍♂️":"1f471-1f3fd-200d-2642-fe0f","👱🏾‍♂️":"1f471-1f3fe-200d-2642-fe0f","👱🏿‍♂️":"1f471-1f3ff-200d-2642-fe0f","🙍🏻‍♂️":"1f64d-1f3fb-200d-2642-fe0f","🙍🏼‍♂️":"1f64d-1f3fc-200d-2642-fe0f","🙍🏽‍♂️":"1f64d-1f3fd-200d-2642-fe0f","🙍🏾‍♂️":"1f64d-1f3fe-200d-2642-fe0f","🙍🏿‍♂️":"1f64d-1f3ff-200d-2642-fe0f","🙍🏻‍♀️":"1f64d-1f3fb-200d-2640-fe0f","🙍🏼‍♀️":"1f64d-1f3fc-200d-2640-fe0f","🙍🏽‍♀️":"1f64d-1f3fd-200d-2640-fe0f","🙍🏾‍♀️":"1f64d-1f3fe-200d-2640-fe0f","🙍🏿‍♀️":"1f64d-1f3ff-200d-2640-fe0f","🙎🏻‍♂️":"1f64e-1f3fb-200d-2642-fe0f","🙎🏼‍♂️":"1f64e-1f3fc-200d-2642-fe0f","🙎🏽‍♂️":"1f64e-1f3fd-200d-2642-fe0f","🙎🏾‍♂️":"1f64e-1f3fe-200d-2642-fe0f","🙎🏿‍♂️":"1f64e-1f3ff-200d-2642-fe0f","🙎🏻‍♀️":"1f64e-1f3fb-200d-2640-fe0f","🙎🏼‍♀️":"1f64e-1f3fc-200d-2640-fe0f","🙎🏽‍♀️":"1f64e-1f3fd-200d-2640-fe0f","🙎🏾‍♀️":"1f64e-1f3fe-200d-2640-fe0f","🙎🏿‍♀️":"1f64e-1f3ff-200d-2640-fe0f","🙅🏻‍♂️":"1f645-1f3fb-200d-2642-fe0f","🙅🏼‍♂️":"1f645-1f3fc-200d-2642-fe0f","🙅🏽‍♂️":"1f645-1f3fd-200d-2642-fe0f","🙅🏾‍♂️":"1f645-1f3fe-200d-2642-fe0f","🙅🏿‍♂️":"1f645-1f3ff-200d-2642-fe0f","🙅🏻‍♀️":"1f645-1f3fb-200d-2640-fe0f","🙅🏼‍♀️":"1f645-1f3fc-200d-2640-fe0f","🙅🏽‍♀️":"1f645-1f3fd-200d-2640-fe0f","🙅🏾‍♀️":"1f645-1f3fe-200d-2640-fe0f","🙅🏿‍♀️":"1f645-1f3ff-200d-2640-fe0f","🙆🏻‍♂️":"1f646-1f3fb-200d-2642-fe0f","🙆🏼‍♂️":"1f646-1f3fc-200d-2642-fe0f","🙆🏽‍♂️":"1f646-1f3fd-200d-2642-fe0f","🙆🏾‍♂️":"1f646-1f3fe-200d-2642-fe0f","🙆🏿‍♂️":"1f646-1f3ff-200d-2642-fe0f","🙆🏻‍♀️":"1f646-1f3fb-200d-2640-fe0f","🙆🏼‍♀️":"1f646-1f3fc-200d-2640-fe0f","🙆🏽‍♀️":"1f646-1f3fd-200d-2640-fe0f","🙆🏾‍♀️":"1f646-1f3fe-200d-2640-fe0f","🙆🏿‍♀️":"1f646-1f3ff-200d-2640-fe0f","💁🏻‍♂️":"1f481-1f3fb-200d-2642-fe0f","💁🏼‍♂️":"1f481-1f3fc-200d-2642-fe0f","💁🏽‍♂️":"1f481-1f3fd-200d-2642-fe0f","💁🏾‍♂️":"1f481-1f3fe-200d-2642-fe0f","💁🏿‍♂️":"1f481-1f3ff-200d-2642-fe0f","💁🏻‍♀️":"1f481-1f3fb-200d-2640-fe0f","💁🏼‍♀️":"1f481-1f3fc-200d-2640-fe0f","💁🏽‍♀️":"1f481-1f3fd-200d-2640-fe0f","💁🏾‍♀️":"1f481-1f3fe-200d-2640-fe0f","💁🏿‍♀️":"1f481-1f3ff-200d-2640-fe0f","🙋🏻‍♂️":"1f64b-1f3fb-200d-2642-fe0f","🙋🏼‍♂️":"1f64b-1f3fc-200d-2642-fe0f","🙋🏽‍♂️":"1f64b-1f3fd-200d-2642-fe0f","🙋🏾‍♂️":"1f64b-1f3fe-200d-2642-fe0f","🙋🏿‍♂️":"1f64b-1f3ff-200d-2642-fe0f","🙋🏻‍♀️":"1f64b-1f3fb-200d-2640-fe0f","🙋🏼‍♀️":"1f64b-1f3fc-200d-2640-fe0f","🙋🏽‍♀️":"1f64b-1f3fd-200d-2640-fe0f","🙋🏾‍♀️":"1f64b-1f3fe-200d-2640-fe0f","🙋🏿‍♀️":"1f64b-1f3ff-200d-2640-fe0f","🧏🏻‍♂️":"1f9cf-1f3fb-200d-2642-fe0f","🧏🏼‍♂️":"1f9cf-1f3fc-200d-2642-fe0f","🧏🏽‍♂️":"1f9cf-1f3fd-200d-2642-fe0f","🧏🏾‍♂️":"1f9cf-1f3fe-200d-2642-fe0f","🧏🏿‍♂️":"1f9cf-1f3ff-200d-2642-fe0f","🧏🏻‍♀️":"1f9cf-1f3fb-200d-2640-fe0f","🧏🏼‍♀️":"1f9cf-1f3fc-200d-2640-fe0f","🧏🏽‍♀️":"1f9cf-1f3fd-200d-2640-fe0f","🧏🏾‍♀️":"1f9cf-1f3fe-200d-2640-fe0f","🧏🏿‍♀️":"1f9cf-1f3ff-200d-2640-fe0f","🙇🏻‍♂️":"1f647-1f3fb-200d-2642-fe0f","🙇🏼‍♂️":"1f647-1f3fc-200d-2642-fe0f","🙇🏽‍♂️":"1f647-1f3fd-200d-2642-fe0f","🙇🏾‍♂️":"1f647-1f3fe-200d-2642-fe0f","🙇🏿‍♂️":"1f647-1f3ff-200d-2642-fe0f","🙇🏻‍♀️":"1f647-1f3fb-200d-2640-fe0f","🙇🏼‍♀️":"1f647-1f3fc-200d-2640-fe0f","🙇🏽‍♀️":"1f647-1f3fd-200d-2640-fe0f","🙇🏾‍♀️":"1f647-1f3fe-200d-2640-fe0f","🙇🏿‍♀️":"1f647-1f3ff-200d-2640-fe0f","🤦🏻‍♂️":"1f926-1f3fb-200d-2642-fe0f","🤦🏼‍♂️":"1f926-1f3fc-200d-2642-fe0f","🤦🏽‍♂️":"1f926-1f3fd-200d-2642-fe0f","🤦🏾‍♂️":"1f926-1f3fe-200d-2642-fe0f","🤦🏿‍♂️":"1f926-1f3ff-200d-2642-fe0f","🤦🏻‍♀️":"1f926-1f3fb-200d-2640-fe0f","🤦🏼‍♀️":"1f926-1f3fc-200d-2640-fe0f","🤦🏽‍♀️":"1f926-1f3fd-200d-2640-fe0f","🤦🏾‍♀️":"1f926-1f3fe-200d-2640-fe0f","🤦🏿‍♀️":"1f926-1f3ff-200d-2640-fe0f","🤷🏻‍♂️":"1f937-1f3fb-200d-2642-fe0f","🤷🏼‍♂️":"1f937-1f3fc-200d-2642-fe0f","🤷🏽‍♂️":"1f937-1f3fd-200d-2642-fe0f","🤷🏾‍♂️":"1f937-1f3fe-200d-2642-fe0f","🤷🏿‍♂️":"1f937-1f3ff-200d-2642-fe0f","🤷🏻‍♀️":"1f937-1f3fb-200d-2640-fe0f","🤷🏼‍♀️":"1f937-1f3fc-200d-2640-fe0f","🤷🏽‍♀️":"1f937-1f3fd-200d-2640-fe0f","🤷🏾‍♀️":"1f937-1f3fe-200d-2640-fe0f","🤷🏿‍♀️":"1f937-1f3ff-200d-2640-fe0f","🧑🏻‍⚕️":"1f9d1-1f3fb-200d-2695-fe0f","🧑🏼‍⚕️":"1f9d1-1f3fc-200d-2695-fe0f","🧑🏽‍⚕️":"1f9d1-1f3fd-200d-2695-fe0f","🧑🏾‍⚕️":"1f9d1-1f3fe-200d-2695-fe0f","🧑🏿‍⚕️":"1f9d1-1f3ff-200d-2695-fe0f","👨🏻‍⚕️":"1f468-1f3fb-200d-2695-fe0f","👨🏼‍⚕️":"1f468-1f3fc-200d-2695-fe0f","👨🏽‍⚕️":"1f468-1f3fd-200d-2695-fe0f","👨🏾‍⚕️":"1f468-1f3fe-200d-2695-fe0f","👨🏿‍⚕️":"1f468-1f3ff-200d-2695-fe0f","👩🏻‍⚕️":"1f469-1f3fb-200d-2695-fe0f","👩🏼‍⚕️":"1f469-1f3fc-200d-2695-fe0f","👩🏽‍⚕️":"1f469-1f3fd-200d-2695-fe0f","👩🏾‍⚕️":"1f469-1f3fe-200d-2695-fe0f","👩🏿‍⚕️":"1f469-1f3ff-200d-2695-fe0f","🧑🏻‍⚖️":"1f9d1-1f3fb-200d-2696-fe0f","🧑🏼‍⚖️":"1f9d1-1f3fc-200d-2696-fe0f","🧑🏽‍⚖️":"1f9d1-1f3fd-200d-2696-fe0f","🧑🏾‍⚖️":"1f9d1-1f3fe-200d-2696-fe0f","🧑🏿‍⚖️":"1f9d1-1f3ff-200d-2696-fe0f","👨🏻‍⚖️":"1f468-1f3fb-200d-2696-fe0f","👨🏼‍⚖️":"1f468-1f3fc-200d-2696-fe0f","👨🏽‍⚖️":"1f468-1f3fd-200d-2696-fe0f","👨🏾‍⚖️":"1f468-1f3fe-200d-2696-fe0f","👨🏿‍⚖️":"1f468-1f3ff-200d-2696-fe0f","👩🏻‍⚖️":"1f469-1f3fb-200d-2696-fe0f","👩🏼‍⚖️":"1f469-1f3fc-200d-2696-fe0f","👩🏽‍⚖️":"1f469-1f3fd-200d-2696-fe0f","👩🏾‍⚖️":"1f469-1f3fe-200d-2696-fe0f","👩🏿‍⚖️":"1f469-1f3ff-200d-2696-fe0f","🧑🏻‍✈️":"1f9d1-1f3fb-200d-2708-fe0f","🧑🏼‍✈️":"1f9d1-1f3fc-200d-2708-fe0f","🧑🏽‍✈️":"1f9d1-1f3fd-200d-2708-fe0f","🧑🏾‍✈️":"1f9d1-1f3fe-200d-2708-fe0f","🧑🏿‍✈️":"1f9d1-1f3ff-200d-2708-fe0f","👨🏻‍✈️":"1f468-1f3fb-200d-2708-fe0f","👨🏼‍✈️":"1f468-1f3fc-200d-2708-fe0f","👨🏽‍✈️":"1f468-1f3fd-200d-2708-fe0f","👨🏾‍✈️":"1f468-1f3fe-200d-2708-fe0f","👨🏿‍✈️":"1f468-1f3ff-200d-2708-fe0f","👩🏻‍✈️":"1f469-1f3fb-200d-2708-fe0f","👩🏼‍✈️":"1f469-1f3fc-200d-2708-fe0f","👩🏽‍✈️":"1f469-1f3fd-200d-2708-fe0f","👩🏾‍✈️":"1f469-1f3fe-200d-2708-fe0f","👩🏿‍✈️":"1f469-1f3ff-200d-2708-fe0f","👮🏻‍♂️":"1f46e-1f3fb-200d-2642-fe0f","👮🏼‍♂️":"1f46e-1f3fc-200d-2642-fe0f","👮🏽‍♂️":"1f46e-1f3fd-200d-2642-fe0f","👮🏾‍♂️":"1f46e-1f3fe-200d-2642-fe0f","👮🏿‍♂️":"1f46e-1f3ff-200d-2642-fe0f","👮🏻‍♀️":"1f46e-1f3fb-200d-2640-fe0f","👮🏼‍♀️":"1f46e-1f3fc-200d-2640-fe0f","👮🏽‍♀️":"1f46e-1f3fd-200d-2640-fe0f","👮🏾‍♀️":"1f46e-1f3fe-200d-2640-fe0f","👮🏿‍♀️":"1f46e-1f3ff-200d-2640-fe0f","🕵️‍♂️":"1f575-fe0f-200d-2642-fe0f","🕵🏻‍♂️":"1f575-1f3fb-200d-2642-fe0f","🕵🏼‍♂️":"1f575-1f3fc-200d-2642-fe0f","🕵🏽‍♂️":"1f575-1f3fd-200d-2642-fe0f","🕵🏾‍♂️":"1f575-1f3fe-200d-2642-fe0f","🕵🏿‍♂️":"1f575-1f3ff-200d-2642-fe0f","🕵️‍♀️":"1f575-fe0f-200d-2640-fe0f","🕵🏻‍♀️":"1f575-1f3fb-200d-2640-fe0f","🕵🏼‍♀️":"1f575-1f3fc-200d-2640-fe0f","🕵🏽‍♀️":"1f575-1f3fd-200d-2640-fe0f","🕵🏾‍♀️":"1f575-1f3fe-200d-2640-fe0f","🕵🏿‍♀️":"1f575-1f3ff-200d-2640-fe0f","💂🏻‍♂️":"1f482-1f3fb-200d-2642-fe0f","💂🏼‍♂️":"1f482-1f3fc-200d-2642-fe0f","💂🏽‍♂️":"1f482-1f3fd-200d-2642-fe0f","💂🏾‍♂️":"1f482-1f3fe-200d-2642-fe0f","💂🏿‍♂️":"1f482-1f3ff-200d-2642-fe0f","💂🏻‍♀️":"1f482-1f3fb-200d-2640-fe0f","💂🏼‍♀️":"1f482-1f3fc-200d-2640-fe0f","💂🏽‍♀️":"1f482-1f3fd-200d-2640-fe0f","💂🏾‍♀️":"1f482-1f3fe-200d-2640-fe0f","💂🏿‍♀️":"1f482-1f3ff-200d-2640-fe0f","👷🏻‍♂️":"1f477-1f3fb-200d-2642-fe0f","👷🏼‍♂️":"1f477-1f3fc-200d-2642-fe0f","👷🏽‍♂️":"1f477-1f3fd-200d-2642-fe0f","👷🏾‍♂️":"1f477-1f3fe-200d-2642-fe0f","👷🏿‍♂️":"1f477-1f3ff-200d-2642-fe0f","👷🏻‍♀️":"1f477-1f3fb-200d-2640-fe0f","👷🏼‍♀️":"1f477-1f3fc-200d-2640-fe0f","👷🏽‍♀️":"1f477-1f3fd-200d-2640-fe0f","👷🏾‍♀️":"1f477-1f3fe-200d-2640-fe0f","👷🏿‍♀️":"1f477-1f3ff-200d-2640-fe0f","👳🏻‍♂️":"1f473-1f3fb-200d-2642-fe0f","👳🏼‍♂️":"1f473-1f3fc-200d-2642-fe0f","👳🏽‍♂️":"1f473-1f3fd-200d-2642-fe0f","👳🏾‍♂️":"1f473-1f3fe-200d-2642-fe0f","👳🏿‍♂️":"1f473-1f3ff-200d-2642-fe0f","👳🏻‍♀️":"1f473-1f3fb-200d-2640-fe0f","👳🏼‍♀️":"1f473-1f3fc-200d-2640-fe0f","👳🏽‍♀️":"1f473-1f3fd-200d-2640-fe0f","👳🏾‍♀️":"1f473-1f3fe-200d-2640-fe0f","👳🏿‍♀️":"1f473-1f3ff-200d-2640-fe0f","🤵🏻‍♂️":"1f935-1f3fb-200d-2642-fe0f","🤵🏼‍♂️":"1f935-1f3fc-200d-2642-fe0f","🤵🏽‍♂️":"1f935-1f3fd-200d-2642-fe0f","🤵🏾‍♂️":"1f935-1f3fe-200d-2642-fe0f","🤵🏿‍♂️":"1f935-1f3ff-200d-2642-fe0f","🤵🏻‍♀️":"1f935-1f3fb-200d-2640-fe0f","🤵🏼‍♀️":"1f935-1f3fc-200d-2640-fe0f","🤵🏽‍♀️":"1f935-1f3fd-200d-2640-fe0f","🤵🏾‍♀️":"1f935-1f3fe-200d-2640-fe0f","🤵🏿‍♀️":"1f935-1f3ff-200d-2640-fe0f","👰🏻‍♂️":"1f470-1f3fb-200d-2642-fe0f","👰🏼‍♂️":"1f470-1f3fc-200d-2642-fe0f","👰🏽‍♂️":"1f470-1f3fd-200d-2642-fe0f","👰🏾‍♂️":"1f470-1f3fe-200d-2642-fe0f","👰🏿‍♂️":"1f470-1f3ff-200d-2642-fe0f","👰🏻‍♀️":"1f470-1f3fb-200d-2640-fe0f","👰🏼‍♀️":"1f470-1f3fc-200d-2640-fe0f","👰🏽‍♀️":"1f470-1f3fd-200d-2640-fe0f","👰🏾‍♀️":"1f470-1f3fe-200d-2640-fe0f","👰🏿‍♀️":"1f470-1f3ff-200d-2640-fe0f","🦸🏻‍♂️":"1f9b8-1f3fb-200d-2642-fe0f","🦸🏼‍♂️":"1f9b8-1f3fc-200d-2642-fe0f","🦸🏽‍♂️":"1f9b8-1f3fd-200d-2642-fe0f","🦸🏾‍♂️":"1f9b8-1f3fe-200d-2642-fe0f","🦸🏿‍♂️":"1f9b8-1f3ff-200d-2642-fe0f","🦸🏻‍♀️":"1f9b8-1f3fb-200d-2640-fe0f","🦸🏼‍♀️":"1f9b8-1f3fc-200d-2640-fe0f","🦸🏽‍♀️":"1f9b8-1f3fd-200d-2640-fe0f","🦸🏾‍♀️":"1f9b8-1f3fe-200d-2640-fe0f","🦸🏿‍♀️":"1f9b8-1f3ff-200d-2640-fe0f","🦹🏻‍♂️":"1f9b9-1f3fb-200d-2642-fe0f","🦹🏼‍♂️":"1f9b9-1f3fc-200d-2642-fe0f","🦹🏽‍♂️":"1f9b9-1f3fd-200d-2642-fe0f","🦹🏾‍♂️":"1f9b9-1f3fe-200d-2642-fe0f","🦹🏿‍♂️":"1f9b9-1f3ff-200d-2642-fe0f","🦹🏻‍♀️":"1f9b9-1f3fb-200d-2640-fe0f","🦹🏼‍♀️":"1f9b9-1f3fc-200d-2640-fe0f","🦹🏽‍♀️":"1f9b9-1f3fd-200d-2640-fe0f","🦹🏾‍♀️":"1f9b9-1f3fe-200d-2640-fe0f","🦹🏿‍♀️":"1f9b9-1f3ff-200d-2640-fe0f","🧙🏻‍♂️":"1f9d9-1f3fb-200d-2642-fe0f","🧙🏼‍♂️":"1f9d9-1f3fc-200d-2642-fe0f","🧙🏽‍♂️":"1f9d9-1f3fd-200d-2642-fe0f","🧙🏾‍♂️":"1f9d9-1f3fe-200d-2642-fe0f","🧙🏿‍♂️":"1f9d9-1f3ff-200d-2642-fe0f","🧙🏻‍♀️":"1f9d9-1f3fb-200d-2640-fe0f","🧙🏼‍♀️":"1f9d9-1f3fc-200d-2640-fe0f","🧙🏽‍♀️":"1f9d9-1f3fd-200d-2640-fe0f","🧙🏾‍♀️":"1f9d9-1f3fe-200d-2640-fe0f","🧙🏿‍♀️":"1f9d9-1f3ff-200d-2640-fe0f","🧚🏻‍♂️":"1f9da-1f3fb-200d-2642-fe0f","🧚🏼‍♂️":"1f9da-1f3fc-200d-2642-fe0f","🧚🏽‍♂️":"1f9da-1f3fd-200d-2642-fe0f","🧚🏾‍♂️":"1f9da-1f3fe-200d-2642-fe0f","🧚🏿‍♂️":"1f9da-1f3ff-200d-2642-fe0f","🧚🏻‍♀️":"1f9da-1f3fb-200d-2640-fe0f","🧚🏼‍♀️":"1f9da-1f3fc-200d-2640-fe0f","🧚🏽‍♀️":"1f9da-1f3fd-200d-2640-fe0f","🧚🏾‍♀️":"1f9da-1f3fe-200d-2640-fe0f","🧚🏿‍♀️":"1f9da-1f3ff-200d-2640-fe0f","🧛🏻‍♂️":"1f9db-1f3fb-200d-2642-fe0f","🧛🏼‍♂️":"1f9db-1f3fc-200d-2642-fe0f","🧛🏽‍♂️":"1f9db-1f3fd-200d-2642-fe0f","🧛🏾‍♂️":"1f9db-1f3fe-200d-2642-fe0f","🧛🏿‍♂️":"1f9db-1f3ff-200d-2642-fe0f","🧛🏻‍♀️":"1f9db-1f3fb-200d-2640-fe0f","🧛🏼‍♀️":"1f9db-1f3fc-200d-2640-fe0f","🧛🏽‍♀️":"1f9db-1f3fd-200d-2640-fe0f","🧛🏾‍♀️":"1f9db-1f3fe-200d-2640-fe0f","🧛🏿‍♀️":"1f9db-1f3ff-200d-2640-fe0f","🧜🏻‍♂️":"1f9dc-1f3fb-200d-2642-fe0f","🧜🏼‍♂️":"1f9dc-1f3fc-200d-2642-fe0f","🧜🏽‍♂️":"1f9dc-1f3fd-200d-2642-fe0f","🧜🏾‍♂️":"1f9dc-1f3fe-200d-2642-fe0f","🧜🏿‍♂️":"1f9dc-1f3ff-200d-2642-fe0f","🧜🏻‍♀️":"1f9dc-1f3fb-200d-2640-fe0f","🧜🏼‍♀️":"1f9dc-1f3fc-200d-2640-fe0f","🧜🏽‍♀️":"1f9dc-1f3fd-200d-2640-fe0f","🧜🏾‍♀️":"1f9dc-1f3fe-200d-2640-fe0f","🧜🏿‍♀️":"1f9dc-1f3ff-200d-2640-fe0f","🧝🏻‍♂️":"1f9dd-1f3fb-200d-2642-fe0f","🧝🏼‍♂️":"1f9dd-1f3fc-200d-2642-fe0f","🧝🏽‍♂️":"1f9dd-1f3fd-200d-2642-fe0f","🧝🏾‍♂️":"1f9dd-1f3fe-200d-2642-fe0f","🧝🏿‍♂️":"1f9dd-1f3ff-200d-2642-fe0f","🧝🏻‍♀️":"1f9dd-1f3fb-200d-2640-fe0f","🧝🏼‍♀️":"1f9dd-1f3fc-200d-2640-fe0f","🧝🏽‍♀️":"1f9dd-1f3fd-200d-2640-fe0f","🧝🏾‍♀️":"1f9dd-1f3fe-200d-2640-fe0f","🧝🏿‍♀️":"1f9dd-1f3ff-200d-2640-fe0f","💆🏻‍♂️":"1f486-1f3fb-200d-2642-fe0f","💆🏼‍♂️":"1f486-1f3fc-200d-2642-fe0f","💆🏽‍♂️":"1f486-1f3fd-200d-2642-fe0f","💆🏾‍♂️":"1f486-1f3fe-200d-2642-fe0f","💆🏿‍♂️":"1f486-1f3ff-200d-2642-fe0f","💆🏻‍♀️":"1f486-1f3fb-200d-2640-fe0f","💆🏼‍♀️":"1f486-1f3fc-200d-2640-fe0f","💆🏽‍♀️":"1f486-1f3fd-200d-2640-fe0f","💆🏾‍♀️":"1f486-1f3fe-200d-2640-fe0f","💆🏿‍♀️":"1f486-1f3ff-200d-2640-fe0f","💇🏻‍♂️":"1f487-1f3fb-200d-2642-fe0f","💇🏼‍♂️":"1f487-1f3fc-200d-2642-fe0f","💇🏽‍♂️":"1f487-1f3fd-200d-2642-fe0f","💇🏾‍♂️":"1f487-1f3fe-200d-2642-fe0f","💇🏿‍♂️":"1f487-1f3ff-200d-2642-fe0f","💇🏻‍♀️":"1f487-1f3fb-200d-2640-fe0f","💇🏼‍♀️":"1f487-1f3fc-200d-2640-fe0f","💇🏽‍♀️":"1f487-1f3fd-200d-2640-fe0f","💇🏾‍♀️":"1f487-1f3fe-200d-2640-fe0f","💇🏿‍♀️":"1f487-1f3ff-200d-2640-fe0f","🚶🏻‍♂️":"1f6b6-1f3fb-200d-2642-fe0f","🚶🏼‍♂️":"1f6b6-1f3fc-200d-2642-fe0f","🚶🏽‍♂️":"1f6b6-1f3fd-200d-2642-fe0f","🚶🏾‍♂️":"1f6b6-1f3fe-200d-2642-fe0f","🚶🏿‍♂️":"1f6b6-1f3ff-200d-2642-fe0f","🚶🏻‍♀️":"1f6b6-1f3fb-200d-2640-fe0f","🚶🏼‍♀️":"1f6b6-1f3fc-200d-2640-fe0f","🚶🏽‍♀️":"1f6b6-1f3fd-200d-2640-fe0f","🚶🏾‍♀️":"1f6b6-1f3fe-200d-2640-fe0f","🚶🏿‍♀️":"1f6b6-1f3ff-200d-2640-fe0f","🧍🏻‍♂️":"1f9cd-1f3fb-200d-2642-fe0f","🧍🏼‍♂️":"1f9cd-1f3fc-200d-2642-fe0f","🧍🏽‍♂️":"1f9cd-1f3fd-200d-2642-fe0f","🧍🏾‍♂️":"1f9cd-1f3fe-200d-2642-fe0f","🧍🏿‍♂️":"1f9cd-1f3ff-200d-2642-fe0f","🧍🏻‍♀️":"1f9cd-1f3fb-200d-2640-fe0f","🧍🏼‍♀️":"1f9cd-1f3fc-200d-2640-fe0f","🧍🏽‍♀️":"1f9cd-1f3fd-200d-2640-fe0f","🧍🏾‍♀️":"1f9cd-1f3fe-200d-2640-fe0f","🧍🏿‍♀️":"1f9cd-1f3ff-200d-2640-fe0f","🧎🏻‍♂️":"1f9ce-1f3fb-200d-2642-fe0f","🧎🏼‍♂️":"1f9ce-1f3fc-200d-2642-fe0f","🧎🏽‍♂️":"1f9ce-1f3fd-200d-2642-fe0f","🧎🏾‍♂️":"1f9ce-1f3fe-200d-2642-fe0f","🧎🏿‍♂️":"1f9ce-1f3ff-200d-2642-fe0f","🧎🏻‍♀️":"1f9ce-1f3fb-200d-2640-fe0f","🧎🏼‍♀️":"1f9ce-1f3fc-200d-2640-fe0f","🧎🏽‍♀️":"1f9ce-1f3fd-200d-2640-fe0f","🧎🏾‍♀️":"1f9ce-1f3fe-200d-2640-fe0f","🧎🏿‍♀️":"1f9ce-1f3ff-200d-2640-fe0f","🏃🏻‍♂️":"1f3c3-1f3fb-200d-2642-fe0f","🏃🏼‍♂️":"1f3c3-1f3fc-200d-2642-fe0f","🏃🏽‍♂️":"1f3c3-1f3fd-200d-2642-fe0f","🏃🏾‍♂️":"1f3c3-1f3fe-200d-2642-fe0f","🏃🏿‍♂️":"1f3c3-1f3ff-200d-2642-fe0f","🏃🏻‍♀️":"1f3c3-1f3fb-200d-2640-fe0f","🏃🏼‍♀️":"1f3c3-1f3fc-200d-2640-fe0f","🏃🏽‍♀️":"1f3c3-1f3fd-200d-2640-fe0f","🏃🏾‍♀️":"1f3c3-1f3fe-200d-2640-fe0f","🏃🏿‍♀️":"1f3c3-1f3ff-200d-2640-fe0f","🧖🏻‍♂️":"1f9d6-1f3fb-200d-2642-fe0f","🧖🏼‍♂️":"1f9d6-1f3fc-200d-2642-fe0f","🧖🏽‍♂️":"1f9d6-1f3fd-200d-2642-fe0f","🧖🏾‍♂️":"1f9d6-1f3fe-200d-2642-fe0f","🧖🏿‍♂️":"1f9d6-1f3ff-200d-2642-fe0f","🧖🏻‍♀️":"1f9d6-1f3fb-200d-2640-fe0f","🧖🏼‍♀️":"1f9d6-1f3fc-200d-2640-fe0f","🧖🏽‍♀️":"1f9d6-1f3fd-200d-2640-fe0f","🧖🏾‍♀️":"1f9d6-1f3fe-200d-2640-fe0f","🧖🏿‍♀️":"1f9d6-1f3ff-200d-2640-fe0f","🧗🏻‍♂️":"1f9d7-1f3fb-200d-2642-fe0f","🧗🏼‍♂️":"1f9d7-1f3fc-200d-2642-fe0f","🧗🏽‍♂️":"1f9d7-1f3fd-200d-2642-fe0f","🧗🏾‍♂️":"1f9d7-1f3fe-200d-2642-fe0f","🧗🏿‍♂️":"1f9d7-1f3ff-200d-2642-fe0f","🧗🏻‍♀️":"1f9d7-1f3fb-200d-2640-fe0f","🧗🏼‍♀️":"1f9d7-1f3fc-200d-2640-fe0f","🧗🏽‍♀️":"1f9d7-1f3fd-200d-2640-fe0f","🧗🏾‍♀️":"1f9d7-1f3fe-200d-2640-fe0f","🧗🏿‍♀️":"1f9d7-1f3ff-200d-2640-fe0f","🏌️‍♂️":"1f3cc-fe0f-200d-2642-fe0f","🏌🏻‍♂️":"1f3cc-1f3fb-200d-2642-fe0f","🏌🏼‍♂️":"1f3cc-1f3fc-200d-2642-fe0f","🏌🏽‍♂️":"1f3cc-1f3fd-200d-2642-fe0f","🏌🏾‍♂️":"1f3cc-1f3fe-200d-2642-fe0f","🏌🏿‍♂️":"1f3cc-1f3ff-200d-2642-fe0f","🏌️‍♀️":"1f3cc-fe0f-200d-2640-fe0f","🏌🏻‍♀️":"1f3cc-1f3fb-200d-2640-fe0f","🏌🏼‍♀️":"1f3cc-1f3fc-200d-2640-fe0f","🏌🏽‍♀️":"1f3cc-1f3fd-200d-2640-fe0f","🏌🏾‍♀️":"1f3cc-1f3fe-200d-2640-fe0f","🏌🏿‍♀️":"1f3cc-1f3ff-200d-2640-fe0f","🏄🏻‍♂️":"1f3c4-1f3fb-200d-2642-fe0f","🏄🏼‍♂️":"1f3c4-1f3fc-200d-2642-fe0f","🏄🏽‍♂️":"1f3c4-1f3fd-200d-2642-fe0f","🏄🏾‍♂️":"1f3c4-1f3fe-200d-2642-fe0f","🏄🏿‍♂️":"1f3c4-1f3ff-200d-2642-fe0f","🏄🏻‍♀️":"1f3c4-1f3fb-200d-2640-fe0f","🏄🏼‍♀️":"1f3c4-1f3fc-200d-2640-fe0f","🏄🏽‍♀️":"1f3c4-1f3fd-200d-2640-fe0f","🏄🏾‍♀️":"1f3c4-1f3fe-200d-2640-fe0f","🏄🏿‍♀️":"1f3c4-1f3ff-200d-2640-fe0f","🚣🏻‍♂️":"1f6a3-1f3fb-200d-2642-fe0f","🚣🏼‍♂️":"1f6a3-1f3fc-200d-2642-fe0f","🚣🏽‍♂️":"1f6a3-1f3fd-200d-2642-fe0f","🚣🏾‍♂️":"1f6a3-1f3fe-200d-2642-fe0f","🚣🏿‍♂️":"1f6a3-1f3ff-200d-2642-fe0f","🚣🏻‍♀️":"1f6a3-1f3fb-200d-2640-fe0f","🚣🏼‍♀️":"1f6a3-1f3fc-200d-2640-fe0f","🚣🏽‍♀️":"1f6a3-1f3fd-200d-2640-fe0f","🚣🏾‍♀️":"1f6a3-1f3fe-200d-2640-fe0f","🚣🏿‍♀️":"1f6a3-1f3ff-200d-2640-fe0f","🏊🏻‍♂️":"1f3ca-1f3fb-200d-2642-fe0f","🏊🏼‍♂️":"1f3ca-1f3fc-200d-2642-fe0f","🏊🏽‍♂️":"1f3ca-1f3fd-200d-2642-fe0f","🏊🏾‍♂️":"1f3ca-1f3fe-200d-2642-fe0f","🏊🏿‍♂️":"1f3ca-1f3ff-200d-2642-fe0f","🏊🏻‍♀️":"1f3ca-1f3fb-200d-2640-fe0f","🏊🏼‍♀️":"1f3ca-1f3fc-200d-2640-fe0f","🏊🏽‍♀️":"1f3ca-1f3fd-200d-2640-fe0f","🏊🏾‍♀️":"1f3ca-1f3fe-200d-2640-fe0f","🏊🏿‍♀️":"1f3ca-1f3ff-200d-2640-fe0f","⛹️‍♂️":"26f9-fe0f-200d-2642-fe0f","⛹🏻‍♂️":"26f9-1f3fb-200d-2642-fe0f","⛹🏼‍♂️":"26f9-1f3fc-200d-2642-fe0f","⛹🏽‍♂️":"26f9-1f3fd-200d-2642-fe0f","⛹🏾‍♂️":"26f9-1f3fe-200d-2642-fe0f","⛹🏿‍♂️":"26f9-1f3ff-200d-2642-fe0f","⛹️‍♀️":"26f9-fe0f-200d-2640-fe0f","⛹🏻‍♀️":"26f9-1f3fb-200d-2640-fe0f","⛹🏼‍♀️":"26f9-1f3fc-200d-2640-fe0f","⛹🏽‍♀️":"26f9-1f3fd-200d-2640-fe0f","⛹🏾‍♀️":"26f9-1f3fe-200d-2640-fe0f","⛹🏿‍♀️":"26f9-1f3ff-200d-2640-fe0f","🏋️‍♂️":"1f3cb-fe0f-200d-2642-fe0f","🏋🏻‍♂️":"1f3cb-1f3fb-200d-2642-fe0f","🏋🏼‍♂️":"1f3cb-1f3fc-200d-2642-fe0f","🏋🏽‍♂️":"1f3cb-1f3fd-200d-2642-fe0f","🏋🏾‍♂️":"1f3cb-1f3fe-200d-2642-fe0f","🏋🏿‍♂️":"1f3cb-1f3ff-200d-2642-fe0f","🏋️‍♀️":"1f3cb-fe0f-200d-2640-fe0f","🏋🏻‍♀️":"1f3cb-1f3fb-200d-2640-fe0f","🏋🏼‍♀️":"1f3cb-1f3fc-200d-2640-fe0f","🏋🏽‍♀️":"1f3cb-1f3fd-200d-2640-fe0f","🏋🏾‍♀️":"1f3cb-1f3fe-200d-2640-fe0f","🏋🏿‍♀️":"1f3cb-1f3ff-200d-2640-fe0f","🚴🏻‍♂️":"1f6b4-1f3fb-200d-2642-fe0f","🚴🏼‍♂️":"1f6b4-1f3fc-200d-2642-fe0f","🚴🏽‍♂️":"1f6b4-1f3fd-200d-2642-fe0f","🚴🏾‍♂️":"1f6b4-1f3fe-200d-2642-fe0f","🚴🏿‍♂️":"1f6b4-1f3ff-200d-2642-fe0f","🚴🏻‍♀️":"1f6b4-1f3fb-200d-2640-fe0f","🚴🏼‍♀️":"1f6b4-1f3fc-200d-2640-fe0f","🚴🏽‍♀️":"1f6b4-1f3fd-200d-2640-fe0f","🚴🏾‍♀️":"1f6b4-1f3fe-200d-2640-fe0f","🚴🏿‍♀️":"1f6b4-1f3ff-200d-2640-fe0f","🚵🏻‍♂️":"1f6b5-1f3fb-200d-2642-fe0f","🚵🏼‍♂️":"1f6b5-1f3fc-200d-2642-fe0f","🚵🏽‍♂️":"1f6b5-1f3fd-200d-2642-fe0f","🚵🏾‍♂️":"1f6b5-1f3fe-200d-2642-fe0f","🚵🏿‍♂️":"1f6b5-1f3ff-200d-2642-fe0f","🚵🏻‍♀️":"1f6b5-1f3fb-200d-2640-fe0f","🚵🏼‍♀️":"1f6b5-1f3fc-200d-2640-fe0f","🚵🏽‍♀️":"1f6b5-1f3fd-200d-2640-fe0f","🚵🏾‍♀️":"1f6b5-1f3fe-200d-2640-fe0f","🚵🏿‍♀️":"1f6b5-1f3ff-200d-2640-fe0f","🤸🏻‍♂️":"1f938-1f3fb-200d-2642-fe0f","🤸🏼‍♂️":"1f938-1f3fc-200d-2642-fe0f","🤸🏽‍♂️":"1f938-1f3fd-200d-2642-fe0f","🤸🏾‍♂️":"1f938-1f3fe-200d-2642-fe0f","🤸🏿‍♂️":"1f938-1f3ff-200d-2642-fe0f","🤸🏻‍♀️":"1f938-1f3fb-200d-2640-fe0f","🤸🏼‍♀️":"1f938-1f3fc-200d-2640-fe0f","🤸🏽‍♀️":"1f938-1f3fd-200d-2640-fe0f","🤸🏾‍♀️":"1f938-1f3fe-200d-2640-fe0f","🤸🏿‍♀️":"1f938-1f3ff-200d-2640-fe0f","🤽🏻‍♂️":"1f93d-1f3fb-200d-2642-fe0f","🤽🏼‍♂️":"1f93d-1f3fc-200d-2642-fe0f","🤽🏽‍♂️":"1f93d-1f3fd-200d-2642-fe0f","🤽🏾‍♂️":"1f93d-1f3fe-200d-2642-fe0f","🤽🏿‍♂️":"1f93d-1f3ff-200d-2642-fe0f","🤽🏻‍♀️":"1f93d-1f3fb-200d-2640-fe0f","🤽🏼‍♀️":"1f93d-1f3fc-200d-2640-fe0f","🤽🏽‍♀️":"1f93d-1f3fd-200d-2640-fe0f","🤽🏾‍♀️":"1f93d-1f3fe-200d-2640-fe0f","🤽🏿‍♀️":"1f93d-1f3ff-200d-2640-fe0f","🤾🏻‍♂️":"1f93e-1f3fb-200d-2642-fe0f","🤾🏼‍♂️":"1f93e-1f3fc-200d-2642-fe0f","🤾🏽‍♂️":"1f93e-1f3fd-200d-2642-fe0f","🤾🏾‍♂️":"1f93e-1f3fe-200d-2642-fe0f","🤾🏿‍♂️":"1f93e-1f3ff-200d-2642-fe0f","🤾🏻‍♀️":"1f93e-1f3fb-200d-2640-fe0f","🤾🏼‍♀️":"1f93e-1f3fc-200d-2640-fe0f","🤾🏽‍♀️":"1f93e-1f3fd-200d-2640-fe0f","🤾🏾‍♀️":"1f93e-1f3fe-200d-2640-fe0f","🤾🏿‍♀️":"1f93e-1f3ff-200d-2640-fe0f","🤹🏻‍♂️":"1f939-1f3fb-200d-2642-fe0f","🤹🏼‍♂️":"1f939-1f3fc-200d-2642-fe0f","🤹🏽‍♂️":"1f939-1f3fd-200d-2642-fe0f","🤹🏾‍♂️":"1f939-1f3fe-200d-2642-fe0f","🤹🏿‍♂️":"1f939-1f3ff-200d-2642-fe0f","🤹🏻‍♀️":"1f939-1f3fb-200d-2640-fe0f","🤹🏼‍♀️":"1f939-1f3fc-200d-2640-fe0f","🤹🏽‍♀️":"1f939-1f3fd-200d-2640-fe0f","🤹🏾‍♀️":"1f939-1f3fe-200d-2640-fe0f","🤹🏿‍♀️":"1f939-1f3ff-200d-2640-fe0f","🧘🏻‍♂️":"1f9d8-1f3fb-200d-2642-fe0f","🧘🏼‍♂️":"1f9d8-1f3fc-200d-2642-fe0f","🧘🏽‍♂️":"1f9d8-1f3fd-200d-2642-fe0f","🧘🏾‍♂️":"1f9d8-1f3fe-200d-2642-fe0f","🧘🏿‍♂️":"1f9d8-1f3ff-200d-2642-fe0f","🧘🏻‍♀️":"1f9d8-1f3fb-200d-2640-fe0f","🧘🏼‍♀️":"1f9d8-1f3fc-200d-2640-fe0f","🧘🏽‍♀️":"1f9d8-1f3fd-200d-2640-fe0f","🧘🏾‍♀️":"1f9d8-1f3fe-200d-2640-fe0f","🧘🏿‍♀️":"1f9d8-1f3ff-200d-2640-fe0f","🧑‍🤝‍🧑":"1f9d1-200d-1f91d-200d-1f9d1","👩‍❤‍👨":"1f469-200d-2764-fe0f-200d-1f468","👨‍❤‍👨":"1f468-200d-2764-fe0f-200d-1f468","👩‍❤‍👩":"1f469-200d-2764-fe0f-200d-1f469","👨‍👩‍👦":"1f468-200d-1f469-200d-1f466","👨‍👩‍👧":"1f468-200d-1f469-200d-1f467","👨‍👨‍👦":"1f468-200d-1f468-200d-1f466","👨‍👨‍👧":"1f468-200d-1f468-200d-1f467","👩‍👩‍👦":"1f469-200d-1f469-200d-1f466","👩‍👩‍👧":"1f469-200d-1f469-200d-1f467","👨‍👦‍👦":"1f468-200d-1f466-200d-1f466","👨‍👧‍👦":"1f468-200d-1f467-200d-1f466","👨‍👧‍👧":"1f468-200d-1f467-200d-1f467","👩‍👦‍👦":"1f469-200d-1f466-200d-1f466","👩‍👧‍👦":"1f469-200d-1f467-200d-1f466","👩‍👧‍👧":"1f469-200d-1f467-200d-1f467","🏳️‍⚧️":"1f3f3-fe0f-200d-26a7-fe0f","👩‍❤️‍👨":"1f469-200d-2764-fe0f-200d-1f468","👨‍❤️‍👨":"1f468-200d-2764-fe0f-200d-1f468","👩‍❤️‍👩":"1f469-200d-2764-fe0f-200d-1f469","🧑🏻‍🤝‍🧑🏻":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb","🧑🏻‍🤝‍🧑🏼":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc","🧑🏻‍🤝‍🧑🏽":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd","🧑🏻‍🤝‍🧑🏾":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe","🧑🏻‍🤝‍🧑🏿":"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff","🧑🏼‍🤝‍🧑🏻":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb","🧑🏼‍🤝‍🧑🏼":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc","🧑🏼‍🤝‍🧑🏽":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd","🧑🏼‍🤝‍🧑🏾":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe","🧑🏼‍🤝‍🧑🏿":"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff","🧑🏽‍🤝‍🧑🏻":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb","🧑🏽‍🤝‍🧑🏼":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc","🧑🏽‍🤝‍🧑🏽":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd","🧑🏽‍🤝‍🧑🏾":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe","🧑🏽‍🤝‍🧑🏿":"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff","🧑🏾‍🤝‍🧑🏻":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb","🧑🏾‍🤝‍🧑🏼":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc","🧑🏾‍🤝‍🧑🏽":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd","🧑🏾‍🤝‍🧑🏾":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe","🧑🏾‍🤝‍🧑🏿":"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff","🧑🏿‍🤝‍🧑🏻":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb","🧑🏿‍🤝‍🧑🏼":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc","🧑🏿‍🤝‍🧑🏽":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd","🧑🏿‍🤝‍🧑🏾":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe","🧑🏿‍🤝‍🧑🏿":"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff","👩🏻‍🤝‍👩🏼":"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc","👩🏻‍🤝‍👩🏽":"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd","👩🏻‍🤝‍👩🏾":"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe","👩🏻‍🤝‍👩🏿":"1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff","👩🏼‍🤝‍👩🏻":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb","👩🏼‍🤝‍👩🏽":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd","👩🏼‍🤝‍👩🏾":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe","👩🏼‍🤝‍👩🏿":"1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff","👩🏽‍🤝‍👩🏻":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb","👩🏽‍🤝‍👩🏼":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc","👩🏽‍🤝‍👩🏾":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe","👩🏽‍🤝‍👩🏿":"1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff","👩🏾‍🤝‍👩🏻":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb","👩🏾‍🤝‍👩🏼":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc","👩🏾‍🤝‍👩🏽":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd","👩🏾‍🤝‍👩🏿":"1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff","👩🏿‍🤝‍👩🏻":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb","👩🏿‍🤝‍👩🏼":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc","👩🏿‍🤝‍👩🏽":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd","👩🏿‍🤝‍👩🏾":"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe","👩🏻‍🤝‍👨🏼":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc","👩🏻‍🤝‍👨🏽":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd","👩🏻‍🤝‍👨🏾":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe","👩🏻‍🤝‍👨🏿":"1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff","👩🏼‍🤝‍👨🏻":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb","👩🏼‍🤝‍👨🏽":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd","👩🏼‍🤝‍👨🏾":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe","👩🏼‍🤝‍👨🏿":"1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff","👩🏽‍🤝‍👨🏻":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb","👩🏽‍🤝‍👨🏼":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc","👩🏽‍🤝‍👨🏾":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe","👩🏽‍🤝‍👨🏿":"1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff","👩🏾‍🤝‍👨🏻":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb","👩🏾‍🤝‍👨🏼":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc","👩🏾‍🤝‍👨🏽":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd","👩🏾‍🤝‍👨🏿":"1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff","👩🏿‍🤝‍👨🏻":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb","👩🏿‍🤝‍👨🏼":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc","👩🏿‍🤝‍👨🏽":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd","👩🏿‍🤝‍👨🏾":"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe","👨🏻‍🤝‍👨🏼":"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc","👨🏻‍🤝‍👨🏽":"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd","👨🏻‍🤝‍👨🏾":"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe","👨🏻‍🤝‍👨🏿":"1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff","👨🏼‍🤝‍👨🏻":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb","👨🏼‍🤝‍👨🏽":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd","👨🏼‍🤝‍👨🏾":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe","👨🏼‍🤝‍👨🏿":"1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff","👨🏽‍🤝‍👨🏻":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb","👨🏽‍🤝‍👨🏼":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc","👨🏽‍🤝‍👨🏾":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe","👨🏽‍🤝‍👨🏿":"1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff","👨🏾‍🤝‍👨🏻":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb","👨🏾‍🤝‍👨🏼":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc","👨🏾‍🤝‍👨🏽":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd","👨🏾‍🤝‍👨🏿":"1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff","👨🏿‍🤝‍👨🏻":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb","👨🏿‍🤝‍👨🏼":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc","👨🏿‍🤝‍👨🏽":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd","👨🏿‍🤝‍👨🏾":"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe","👩‍❤‍💋‍👨":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f468","👨‍❤‍💋‍👨":"1f468-200d-2764-fe0f-200d-1f48b-200d-1f468","👩‍❤‍💋‍👩":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f469","🧑🏻‍❤‍🧑🏼":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑🏻‍❤‍🧑🏽":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑🏻‍❤‍🧑🏾":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑🏻‍❤‍🧑🏿":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑🏼‍❤‍🧑🏻":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑🏼‍❤‍🧑🏽":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑🏼‍❤‍🧑🏾":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑🏼‍❤‍🧑🏿":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑🏽‍❤‍🧑🏻":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑🏽‍❤‍🧑🏼":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑🏽‍❤‍🧑🏾":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑🏽‍❤‍🧑🏿":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑🏾‍❤‍🧑🏻":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑🏾‍❤‍🧑🏼":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑🏾‍❤‍🧑🏽":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑🏾‍❤‍🧑🏿":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑🏿‍❤‍🧑🏻":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑🏿‍❤‍🧑🏼":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑🏿‍❤‍🧑🏽":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑🏿‍❤‍🧑🏾":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fe","👩🏻‍❤‍👨🏻":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb","👩🏻‍❤‍👨🏼":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc","👩🏻‍❤‍👨🏽":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd","👩🏻‍❤‍👨🏾":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe","👩🏻‍❤‍👨🏿":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff","👩🏼‍❤‍👨🏻":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb","👩🏼‍❤‍👨🏼":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc","👩🏼‍❤‍👨🏽":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd","👩🏼‍❤‍👨🏾":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe","👩🏼‍❤‍👨🏿":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff","👩🏽‍❤‍👨🏻":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb","👩🏽‍❤‍👨🏼":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc","👩🏽‍❤‍👨🏽":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd","👩🏽‍❤‍👨🏾":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe","👩🏽‍❤‍👨🏿":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff","👩🏾‍❤‍👨🏻":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb","👩🏾‍❤‍👨🏼":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc","👩🏾‍❤‍👨🏽":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd","👩🏾‍❤‍👨🏾":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe","👩🏾‍❤‍👨🏿":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff","👩🏿‍❤‍👨🏻":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb","👩🏿‍❤‍👨🏼":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc","👩🏿‍❤‍👨🏽":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd","👩🏿‍❤‍👨🏾":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe","👩🏿‍❤‍👨🏿":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff","👨🏻‍❤‍👨🏻":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb","👨🏻‍❤‍👨🏼":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc","👨🏻‍❤‍👨🏽":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd","👨🏻‍❤‍👨🏾":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe","👨🏻‍❤‍👨🏿":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff","👨🏼‍❤‍👨🏻":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb","👨🏼‍❤‍👨🏼":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc","👨🏼‍❤‍👨🏽":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd","👨🏼‍❤‍👨🏾":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe","👨🏼‍❤‍👨🏿":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff","👨🏽‍❤‍👨🏻":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb","👨🏽‍❤‍👨🏼":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc","👨🏽‍❤‍👨🏽":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd","👨🏽‍❤‍👨🏾":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe","👨🏽‍❤‍👨🏿":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff","👨🏾‍❤‍👨🏻":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb","👨🏾‍❤‍👨🏼":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc","👨🏾‍❤‍👨🏽":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd","👨🏾‍❤‍👨🏾":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe","👨🏾‍❤‍👨🏿":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff","👨🏿‍❤‍👨🏻":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb","👨🏿‍❤‍👨🏼":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc","👨🏿‍❤‍👨🏽":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd","👨🏿‍❤‍👨🏾":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe","👨🏿‍❤‍👨🏿":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff","👩🏻‍❤‍👩🏻":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fb","👩🏻‍❤‍👩🏼":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fc","👩🏻‍❤‍👩🏽":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fd","👩🏻‍❤‍👩🏾":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fe","👩🏻‍❤‍👩🏿":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3ff","👩🏼‍❤‍👩🏻":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fb","👩🏼‍❤‍👩🏼":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fc","👩🏼‍❤‍👩🏽":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fd","👩🏼‍❤‍👩🏾":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fe","👩🏼‍❤‍👩🏿":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3ff","👩🏽‍❤‍👩🏻":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fb","👩🏽‍❤‍👩🏼":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fc","👩🏽‍❤‍👩🏽":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fd","👩🏽‍❤‍👩🏾":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fe","👩🏽‍❤‍👩🏿":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3ff","👩🏾‍❤‍👩🏻":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fb","👩🏾‍❤‍👩🏼":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fc","👩🏾‍❤‍👩🏽":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fd","👩🏾‍❤‍👩🏾":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fe","👩🏾‍❤‍👩🏿":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3ff","👩🏿‍❤‍👩🏻":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fb","👩🏿‍❤‍👩🏼":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fc","👩🏿‍❤‍👩🏽":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fd","👩🏿‍❤‍👩🏾":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fe","👩🏿‍❤‍👩🏿":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3ff","👨‍👩‍👧‍👦":"1f468-200d-1f469-200d-1f467-200d-1f466","👨‍👩‍👦‍👦":"1f468-200d-1f469-200d-1f466-200d-1f466","👨‍👩‍👧‍👧":"1f468-200d-1f469-200d-1f467-200d-1f467","👨‍👨‍👧‍👦":"1f468-200d-1f468-200d-1f467-200d-1f466","👨‍👨‍👦‍👦":"1f468-200d-1f468-200d-1f466-200d-1f466","👨‍👨‍👧‍👧":"1f468-200d-1f468-200d-1f467-200d-1f467","👩‍👩‍👧‍👦":"1f469-200d-1f469-200d-1f467-200d-1f466","👩‍👩‍👦‍👦":"1f469-200d-1f469-200d-1f466-200d-1f466","👩‍👩‍👧‍👧":"1f469-200d-1f469-200d-1f467-200d-1f467","🏴󠁧󠁢󠁥󠁮󠁧󠁿":"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f","🏴󠁧󠁢󠁳󠁣󠁴󠁿":"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f","🏴󠁧󠁢󠁷󠁬󠁳󠁿":"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f","👩‍❤️‍💋‍👨":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f468","👨‍❤️‍💋‍👨":"1f468-200d-2764-fe0f-200d-1f48b-200d-1f468","👩‍❤️‍💋‍👩":"1f469-200d-2764-fe0f-200d-1f48b-200d-1f469","🧑🏻‍❤️‍🧑🏼":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑🏻‍❤️‍🧑🏽":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑🏻‍❤️‍🧑🏾":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑🏻‍❤️‍🧑🏿":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑🏼‍❤️‍🧑🏻":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑🏼‍❤️‍🧑🏽":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑🏼‍❤️‍🧑🏾":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑🏼‍❤️‍🧑🏿":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑🏽‍❤️‍🧑🏻":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑🏽‍❤️‍🧑🏼":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑🏽‍❤️‍🧑🏾":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fe","🧑🏽‍❤️‍🧑🏿":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑🏾‍❤️‍🧑🏻":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑🏾‍❤️‍🧑🏼":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑🏾‍❤️‍🧑🏽":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑🏾‍❤️‍🧑🏿":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3ff","🧑🏿‍❤️‍🧑🏻":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fb","🧑🏿‍❤️‍🧑🏼":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fc","🧑🏿‍❤️‍🧑🏽":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fd","🧑🏿‍❤️‍🧑🏾":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fe","👩🏻‍❤️‍👨🏻":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb","👩🏻‍❤️‍👨🏼":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc","👩🏻‍❤️‍👨🏽":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd","👩🏻‍❤️‍👨🏾":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe","👩🏻‍❤️‍👨🏿":"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff","👩🏼‍❤️‍👨🏻":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb","👩🏼‍❤️‍👨🏼":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc","👩🏼‍❤️‍👨🏽":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd","👩🏼‍❤️‍👨🏾":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe","👩🏼‍❤️‍👨🏿":"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff","👩🏽‍❤️‍👨🏻":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb","👩🏽‍❤️‍👨🏼":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc","👩🏽‍❤️‍👨🏽":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd","👩🏽‍❤️‍👨🏾":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe","👩🏽‍❤️‍👨🏿":"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff","👩🏾‍❤️‍👨🏻":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb","👩🏾‍❤️‍👨🏼":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc","👩🏾‍❤️‍👨🏽":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd","👩🏾‍❤️‍👨🏾":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe","👩🏾‍❤️‍👨🏿":"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff","👩🏿‍❤️‍👨🏻":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb","👩🏿‍❤️‍👨🏼":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc","👩🏿‍❤️‍👨🏽":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd","👩🏿‍❤️‍👨🏾":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe","👩🏿‍❤️‍👨🏿":"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff","👨🏻‍❤️‍👨🏻":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb","👨🏻‍❤️‍👨🏼":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc","👨🏻‍❤️‍👨🏽":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd","👨🏻‍❤️‍👨🏾":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe","👨🏻‍❤️‍👨🏿":"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff","👨🏼‍❤️‍👨🏻":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb","👨🏼‍❤️‍👨🏼":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc","👨🏼‍❤️‍👨🏽":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd","👨🏼‍❤️‍👨🏾":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe","👨🏼‍❤️‍👨🏿":"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff","👨🏽‍❤️‍👨🏻":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb","👨🏽‍❤️‍👨🏼":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc","👨🏽‍❤️‍👨🏽":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd","👨🏽‍❤️‍👨🏾":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe","👨🏽‍❤️‍👨🏿":"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff","👨🏾‍❤️‍👨🏻":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb","👨🏾‍❤️‍👨🏼":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc","👨🏾‍❤️‍👨🏽":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd","👨🏾‍❤️‍👨🏾":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe","👨🏾‍❤️‍👨🏿":"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff","👨🏿‍❤️‍👨🏻":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb","👨🏿‍❤️‍👨🏼":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc","👨🏿‍❤️‍👨🏽":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd","👨🏿‍❤️‍👨🏾":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe","👨🏿‍❤️‍👨🏿":"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff","👩🏻‍❤️‍👩🏻":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fb","👩🏻‍❤️‍👩🏼":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fc","👩🏻‍❤️‍👩🏽":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fd","👩🏻‍❤️‍👩🏾":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fe","👩🏻‍❤️‍👩🏿":"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3ff","👩🏼‍❤️‍👩🏻":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fb","👩🏼‍❤️‍👩🏼":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fc","👩🏼‍❤️‍👩🏽":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fd","👩🏼‍❤️‍👩🏾":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fe","👩🏼‍❤️‍👩🏿":"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3ff","👩🏽‍❤️‍👩🏻":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fb","👩🏽‍❤️‍👩🏼":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fc","👩🏽‍❤️‍👩🏽":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fd","👩🏽‍❤️‍👩🏾":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fe","👩🏽‍❤️‍👩🏿":"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3ff","👩🏾‍❤️‍👩🏻":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fb","👩🏾‍❤️‍👩🏼":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fc","👩🏾‍❤️‍👩🏽":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fd","👩🏾‍❤️‍👩🏾":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fe","👩🏾‍❤️‍👩🏿":"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3ff","👩🏿‍❤️‍👩🏻":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fb","👩🏿‍❤️‍👩🏼":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fc","👩🏿‍❤️‍👩🏽":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fd","👩🏿‍❤️‍👩🏾":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fe","👩🏿‍❤️‍👩🏿":"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3ff","🧑🏻‍❤‍💋‍🧑🏼":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑🏻‍❤‍💋‍🧑🏽":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑🏻‍❤‍💋‍🧑🏾":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑🏻‍❤‍💋‍🧑🏿":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑🏼‍❤‍💋‍🧑🏻":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑🏼‍❤‍💋‍🧑🏽":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑🏼‍❤‍💋‍🧑🏾":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑🏼‍❤‍💋‍🧑🏿":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑🏽‍❤‍💋‍🧑🏻":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑🏽‍❤‍💋‍🧑🏼":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑🏽‍❤‍💋‍🧑🏾":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑🏽‍❤‍💋‍🧑🏿":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑🏾‍❤‍💋‍🧑🏻":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑🏾‍❤‍💋‍🧑🏼":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑🏾‍❤‍💋‍🧑🏽":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑🏾‍❤‍💋‍🧑🏿":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑🏿‍❤‍💋‍🧑🏻":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑🏿‍❤‍💋‍🧑🏼":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑🏿‍❤‍💋‍🧑🏽":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑🏿‍❤‍💋‍🧑🏾":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","👩🏻‍❤‍💋‍👨🏻":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩🏻‍❤‍💋‍👨🏼":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩🏻‍❤‍💋‍👨🏽":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩🏻‍❤‍💋‍👨🏾":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩🏻‍❤‍💋‍👨🏿":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩🏼‍❤‍💋‍👨🏻":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩🏼‍❤‍💋‍👨🏼":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩🏼‍❤‍💋‍👨🏽":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩🏼‍❤‍💋‍👨🏾":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩🏼‍❤‍💋‍👨🏿":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩🏽‍❤‍💋‍👨🏻":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩🏽‍❤‍💋‍👨🏼":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩🏽‍❤‍💋‍👨🏽":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩🏽‍❤‍💋‍👨🏾":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩🏽‍❤‍💋‍👨🏿":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩🏾‍❤‍💋‍👨🏻":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩🏾‍❤‍💋‍👨🏼":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩🏾‍❤‍💋‍👨🏽":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩🏾‍❤‍💋‍👨🏾":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩🏾‍❤‍💋‍👨🏿":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩🏿‍❤‍💋‍👨🏻":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩🏿‍❤‍💋‍👨🏼":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩🏿‍❤‍💋‍👨🏽":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩🏿‍❤‍💋‍👨🏾":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩🏿‍❤‍💋‍👨🏿":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨🏻‍❤‍💋‍👨🏻":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨🏻‍❤‍💋‍👨🏼":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨🏻‍❤‍💋‍👨🏽":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨🏻‍❤‍💋‍👨🏾":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨🏻‍❤‍💋‍👨🏿":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨🏼‍❤‍💋‍👨🏻":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨🏼‍❤‍💋‍👨🏼":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨🏼‍❤‍💋‍👨🏽":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨🏼‍❤‍💋‍👨🏾":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨🏼‍❤‍💋‍👨🏿":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨🏽‍❤‍💋‍👨🏻":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨🏽‍❤‍💋‍👨🏼":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨🏽‍❤‍💋‍👨🏽":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨🏽‍❤‍💋‍👨🏾":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨🏽‍❤‍💋‍👨🏿":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨🏾‍❤‍💋‍👨🏻":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨🏾‍❤‍💋‍👨🏼":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨🏾‍❤‍💋‍👨🏽":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨🏾‍❤‍💋‍👨🏾":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨🏾‍❤‍💋‍👨🏿":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨🏿‍❤‍💋‍👨🏻":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨🏿‍❤‍💋‍👨🏼":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨🏿‍❤‍💋‍👨🏽":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨🏿‍❤‍💋‍👨🏾":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨🏿‍❤‍💋‍👨🏿":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩🏻‍❤‍💋‍👩🏻":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩🏻‍❤‍💋‍👩🏼":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩🏻‍❤‍💋‍👩🏽":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩🏻‍❤‍💋‍👩🏾":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩🏻‍❤‍💋‍👩🏿":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩🏼‍❤‍💋‍👩🏻":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩🏼‍❤‍💋‍👩🏼":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩🏼‍❤‍💋‍👩🏽":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩🏼‍❤‍💋‍👩🏾":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩🏼‍❤‍💋‍👩🏿":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩🏽‍❤‍💋‍👩🏻":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩🏽‍❤‍💋‍👩🏼":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩🏽‍❤‍💋‍👩🏽":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩🏽‍❤‍💋‍👩🏾":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩🏽‍❤‍💋‍👩🏿":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩🏾‍❤‍💋‍👩🏻":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩🏾‍❤‍💋‍👩🏼":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩🏾‍❤‍💋‍👩🏽":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩🏾‍❤‍💋‍👩🏾":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩🏾‍❤‍💋‍👩🏿":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩🏿‍❤‍💋‍👩🏻":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩🏿‍❤‍💋‍👩🏼":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩🏿‍❤‍💋‍👩🏽":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩🏿‍❤‍💋‍👩🏾":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩🏿‍❤‍💋‍👩🏿":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","🧑🏻‍❤️‍💋‍🧑🏼":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑🏻‍❤️‍💋‍🧑🏽":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑🏻‍❤️‍💋‍🧑🏾":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑🏻‍❤️‍💋‍🧑🏿":"1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑🏼‍❤️‍💋‍🧑🏻":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑🏼‍❤️‍💋‍🧑🏽":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑🏼‍❤️‍💋‍🧑🏾":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑🏼‍❤️‍💋‍🧑🏿":"1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑🏽‍❤️‍💋‍🧑🏻":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑🏽‍❤️‍💋‍🧑🏼":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑🏽‍❤️‍💋‍🧑🏾":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","🧑🏽‍❤️‍💋‍🧑🏿":"1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑🏾‍❤️‍💋‍🧑🏻":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑🏾‍❤️‍💋‍🧑🏼":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑🏾‍❤️‍💋‍🧑🏽":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑🏾‍❤️‍💋‍🧑🏿":"1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff","🧑🏿‍❤️‍💋‍🧑🏻":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb","🧑🏿‍❤️‍💋‍🧑🏼":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc","🧑🏿‍❤️‍💋‍🧑🏽":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd","🧑🏿‍❤️‍💋‍🧑🏾":"1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe","👩🏻‍❤️‍💋‍👨🏻":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩🏻‍❤️‍💋‍👨🏼":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩🏻‍❤️‍💋‍👨🏽":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩🏻‍❤️‍💋‍👨🏾":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩🏻‍❤️‍💋‍👨🏿":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩🏼‍❤️‍💋‍👨🏻":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩🏼‍❤️‍💋‍👨🏼":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩🏼‍❤️‍💋‍👨🏽":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩🏼‍❤️‍💋‍👨🏾":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩🏼‍❤️‍💋‍👨🏿":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩🏽‍❤️‍💋‍👨🏻":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩🏽‍❤️‍💋‍👨🏼":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩🏽‍❤️‍💋‍👨🏽":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩🏽‍❤️‍💋‍👨🏾":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩🏽‍❤️‍💋‍👨🏿":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩🏾‍❤️‍💋‍👨🏻":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩🏾‍❤️‍💋‍👨🏼":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩🏾‍❤️‍💋‍👨🏽":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩🏾‍❤️‍💋‍👨🏾":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩🏾‍❤️‍💋‍👨🏿":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩🏿‍❤️‍💋‍👨🏻":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👩🏿‍❤️‍💋‍👨🏼":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👩🏿‍❤️‍💋‍👨🏽":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👩🏿‍❤️‍💋‍👨🏾":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👩🏿‍❤️‍💋‍👨🏿":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨🏻‍❤️‍💋‍👨🏻":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨🏻‍❤️‍💋‍👨🏼":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨🏻‍❤️‍💋‍👨🏽":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨🏻‍❤️‍💋‍👨🏾":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨🏻‍❤️‍💋‍👨🏿":"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨🏼‍❤️‍💋‍👨🏻":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨🏼‍❤️‍💋‍👨🏼":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨🏼‍❤️‍💋‍👨🏽":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨🏼‍❤️‍💋‍👨🏾":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨🏼‍❤️‍💋‍👨🏿":"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨🏽‍❤️‍💋‍👨🏻":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨🏽‍❤️‍💋‍👨🏼":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨🏽‍❤️‍💋‍👨🏽":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨🏽‍❤️‍💋‍👨🏾":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨🏽‍❤️‍💋‍👨🏿":"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨🏾‍❤️‍💋‍👨🏻":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨🏾‍❤️‍💋‍👨🏼":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨🏾‍❤️‍💋‍👨🏽":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨🏾‍❤️‍💋‍👨🏾":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨🏾‍❤️‍💋‍👨🏿":"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👨🏿‍❤️‍💋‍👨🏻":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb","👨🏿‍❤️‍💋‍👨🏼":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc","👨🏿‍❤️‍💋‍👨🏽":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd","👨🏿‍❤️‍💋‍👨🏾":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe","👨🏿‍❤️‍💋‍👨🏿":"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff","👩🏻‍❤️‍💋‍👩🏻":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩🏻‍❤️‍💋‍👩🏼":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩🏻‍❤️‍💋‍👩🏽":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩🏻‍❤️‍💋‍👩🏾":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩🏻‍❤️‍💋‍👩🏿":"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩🏼‍❤️‍💋‍👩🏻":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩🏼‍❤️‍💋‍👩🏼":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩🏼‍❤️‍💋‍👩🏽":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩🏼‍❤️‍💋‍👩🏾":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩🏼‍❤️‍💋‍👩🏿":"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩🏽‍❤️‍💋‍👩🏻":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩🏽‍❤️‍💋‍👩🏼":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩🏽‍❤️‍💋‍👩🏽":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩🏽‍❤️‍💋‍👩🏾":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩🏽‍❤️‍💋‍👩🏿":"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩🏾‍❤️‍💋‍👩🏻":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩🏾‍❤️‍💋‍👩🏼":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩🏾‍❤️‍💋‍👩🏽":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩🏾‍❤️‍💋‍👩🏾":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩🏾‍❤️‍💋‍👩🏿":"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff","👩🏿‍❤️‍💋‍👩🏻":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb","👩🏿‍❤️‍💋‍👩🏼":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc","👩🏿‍❤️‍💋‍👩🏽":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd","👩🏿‍❤️‍💋‍👩🏾":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe","👩🏿‍❤️‍💋‍👩🏿":"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff"} \ No newline at end of file diff --git a/app/javascript/mastodon/features/favourited_statuses/index.js b/app/javascript/mastodon/features/favourited_statuses/index.js index db8a3f815..9606a144c 100644 --- a/app/javascript/mastodon/features/favourited_statuses/index.js +++ b/app/javascript/mastodon/features/favourited_statuses/index.js @@ -27,7 +27,6 @@ class Favourites extends ImmutablePureComponent { static propTypes = { dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, statusIds: ImmutablePropTypes.list.isRequired, intl: PropTypes.object.isRequired, columnId: PropTypes.string, @@ -68,7 +67,7 @@ class Favourites extends ImmutablePureComponent { }, 300, { leading: true }) render () { - const { intl, shouldUpdateScroll, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props; + const { intl, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props; const pinned = !!columnId; const emptyMessage = ; @@ -93,7 +92,6 @@ class Favourites extends ImmutablePureComponent { hasMore={hasMore} isLoading={isLoading} onLoadMore={this.handleLoadMore} - shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} bindToDocument={!multiColumn} /> diff --git a/app/javascript/mastodon/features/favourites/index.js b/app/javascript/mastodon/features/favourites/index.js index 75cb00c0e..ac94ae18a 100644 --- a/app/javascript/mastodon/features/favourites/index.js +++ b/app/javascript/mastodon/features/favourites/index.js @@ -27,7 +27,6 @@ class Favourites extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, accountIds: ImmutablePropTypes.list, multiColumn: PropTypes.bool, intl: PropTypes.object.isRequired, @@ -50,7 +49,7 @@ class Favourites extends ImmutablePureComponent { } render () { - const { intl, shouldUpdateScroll, accountIds, multiColumn } = this.props; + const { intl, accountIds, multiColumn } = this.props; if (!accountIds) { return ( @@ -74,7 +73,6 @@ class Favourites extends ImmutablePureComponent { diff --git a/app/javascript/mastodon/features/follow_recommendations/components/account.js b/app/javascript/mastodon/features/follow_recommendations/components/account.js index bd855aab0..ffc0ab00c 100644 --- a/app/javascript/mastodon/features/follow_recommendations/components/account.js +++ b/app/javascript/mastodon/features/follow_recommendations/components/account.js @@ -66,7 +66,7 @@ class Account extends ImmutablePureComponent { return (
    - +
    diff --git a/app/javascript/mastodon/features/follow_recommendations/index.js b/app/javascript/mastodon/features/follow_recommendations/index.js index 26c8b2471..b5a71aef5 100644 --- a/app/javascript/mastodon/features/follow_recommendations/index.js +++ b/app/javascript/mastodon/features/follow_recommendations/index.js @@ -68,7 +68,7 @@ class FollowRecommendations extends ImmutablePureComponent { } })); - router.history.push('/timelines/home'); + router.history.push('/home'); } render () { diff --git a/app/javascript/mastodon/features/follow_requests/components/account_authorize.js b/app/javascript/mastodon/features/follow_requests/components/account_authorize.js index 12fd34d28..a2c2df199 100644 --- a/app/javascript/mastodon/features/follow_requests/components/account_authorize.js +++ b/app/javascript/mastodon/features/follow_requests/components/account_authorize.js @@ -31,15 +31,8 @@ class AccountAuthorize extends ImmutablePureComponent { return (
    - -
    + +
    diff --git a/app/javascript/mastodon/features/follow_requests/index.js b/app/javascript/mastodon/features/follow_requests/index.js index 18df9d25c..1f9b635bb 100644 --- a/app/javascript/mastodon/features/follow_requests/index.js +++ b/app/javascript/mastodon/features/follow_requests/index.js @@ -32,7 +32,6 @@ class FollowRequests extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, hasMore: PropTypes.bool, isLoading: PropTypes.bool, accountIds: ImmutablePropTypes.list, @@ -51,7 +50,7 @@ class FollowRequests extends ImmutablePureComponent { }, 300, { leading: true }); render () { - const { intl, shouldUpdateScroll, accountIds, hasMore, multiColumn, locked, domain, isLoading } = this.props; + const { intl, accountIds, hasMore, multiColumn, locked, domain, isLoading } = this.props; if (!accountIds) { return ( @@ -80,7 +79,6 @@ class FollowRequests extends ImmutablePureComponent { onLoadMore={this.handleLoadMore} hasMore={hasMore} isLoading={isLoading} - shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} bindToDocument={!multiColumn} prepend={unlockedPrependMessage} diff --git a/app/javascript/mastodon/features/followers/index.js b/app/javascript/mastodon/features/followers/index.js index ae00d13d3..224e74b3d 100644 --- a/app/javascript/mastodon/features/followers/index.js +++ b/app/javascript/mastodon/features/followers/index.js @@ -6,6 +6,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { debounce } from 'lodash'; import LoadingIndicator from '../../components/loading_indicator'; import { + lookupAccount, fetchAccount, fetchFollowers, expandFollowers, @@ -19,15 +20,26 @@ import ScrollableList from '../../components/scrollable_list'; import MissingIndicator from 'mastodon/components/missing_indicator'; import TimelineHint from 'mastodon/components/timeline_hint'; -const mapStateToProps = (state, props) => ({ - remote: !!(state.getIn(['accounts', props.params.accountId, 'acct']) !== state.getIn(['accounts', props.params.accountId, 'username'])), - remoteUrl: state.getIn(['accounts', props.params.accountId, 'url']), - isAccount: !!state.getIn(['accounts', props.params.accountId]), - accountIds: state.getIn(['user_lists', 'followers', props.params.accountId, 'items']), - hasMore: !!state.getIn(['user_lists', 'followers', props.params.accountId, 'next']), - isLoading: state.getIn(['user_lists', 'followers', props.params.accountId, 'isLoading'], true), - blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false), -}); +const mapStateToProps = (state, { params: { acct, id } }) => { + const accountId = id || state.getIn(['accounts_map', acct]); + + if (!accountId) { + return { + isLoading: true, + }; + } + + return { + accountId, + remote: !!(state.getIn(['accounts', accountId, 'acct']) !== state.getIn(['accounts', accountId, 'username'])), + remoteUrl: state.getIn(['accounts', accountId, 'url']), + isAccount: !!state.getIn(['accounts', accountId]), + accountIds: state.getIn(['user_lists', 'followers', accountId, 'items']), + hasMore: !!state.getIn(['user_lists', 'followers', accountId, 'next']), + isLoading: state.getIn(['user_lists', 'followers', accountId, 'isLoading'], true), + blockedBy: state.getIn(['relationships', accountId, 'blocked_by'], false), + }; +}; const RemoteHint = ({ url }) => ( } /> @@ -41,9 +53,12 @@ export default @connect(mapStateToProps) class Followers extends ImmutablePureComponent { static propTypes = { - params: PropTypes.object.isRequired, + params: PropTypes.shape({ + acct: PropTypes.string, + id: PropTypes.string, + }).isRequired, + accountId: PropTypes.string, dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, accountIds: ImmutablePropTypes.list, hasMore: PropTypes.bool, isLoading: PropTypes.bool, @@ -54,26 +69,39 @@ class Followers extends ImmutablePureComponent { multiColumn: PropTypes.bool, }; - componentWillMount () { - if (!this.props.accountIds) { - this.props.dispatch(fetchAccount(this.props.params.accountId)); - this.props.dispatch(fetchFollowers(this.props.params.accountId)); + _load () { + const { accountId, isAccount, dispatch } = this.props; + + if (!isAccount) dispatch(fetchAccount(accountId)); + dispatch(fetchFollowers(accountId)); + } + + componentDidMount () { + const { params: { acct }, accountId, dispatch } = this.props; + + if (accountId) { + this._load(); + } else { + dispatch(lookupAccount(acct)); } } - componentWillReceiveProps (nextProps) { - if (nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) { - this.props.dispatch(fetchAccount(nextProps.params.accountId)); - this.props.dispatch(fetchFollowers(nextProps.params.accountId)); + componentDidUpdate (prevProps) { + const { params: { acct }, accountId, dispatch } = this.props; + + if (prevProps.accountId !== accountId && accountId) { + this._load(); + } else if (prevProps.params.acct !== acct) { + dispatch(lookupAccount(acct)); } } handleLoadMore = debounce(() => { - this.props.dispatch(expandFollowers(this.props.params.accountId)); + this.props.dispatch(expandFollowers(this.props.accountId)); }, 300, { leading: true }); render () { - const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount, multiColumn, isLoading, remote, remoteUrl } = this.props; + const { accountIds, hasMore, blockedBy, isAccount, multiColumn, isLoading, remote, remoteUrl } = this.props; if (!isAccount) { return ( @@ -112,8 +140,7 @@ class Followers extends ImmutablePureComponent { hasMore={hasMore} isLoading={isLoading} onLoadMore={this.handleLoadMore} - shouldUpdateScroll={shouldUpdateScroll} - prepend={} + prepend={} alwaysPrepend append={remoteMessage} emptyMessage={emptyMessage} diff --git a/app/javascript/mastodon/features/following/index.js b/app/javascript/mastodon/features/following/index.js index 666ec7a7f..aadce1644 100644 --- a/app/javascript/mastodon/features/following/index.js +++ b/app/javascript/mastodon/features/following/index.js @@ -6,6 +6,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { debounce } from 'lodash'; import LoadingIndicator from '../../components/loading_indicator'; import { + lookupAccount, fetchAccount, fetchFollowing, expandFollowing, @@ -19,15 +20,26 @@ import ScrollableList from '../../components/scrollable_list'; import MissingIndicator from 'mastodon/components/missing_indicator'; import TimelineHint from 'mastodon/components/timeline_hint'; -const mapStateToProps = (state, props) => ({ - remote: !!(state.getIn(['accounts', props.params.accountId, 'acct']) !== state.getIn(['accounts', props.params.accountId, 'username'])), - remoteUrl: state.getIn(['accounts', props.params.accountId, 'url']), - isAccount: !!state.getIn(['accounts', props.params.accountId]), - accountIds: state.getIn(['user_lists', 'following', props.params.accountId, 'items']), - hasMore: !!state.getIn(['user_lists', 'following', props.params.accountId, 'next']), - isLoading: state.getIn(['user_lists', 'following', props.params.accountId, 'isLoading'], true), - blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false), -}); +const mapStateToProps = (state, { params: { acct, id } }) => { + const accountId = id || state.getIn(['accounts_map', acct]); + + if (!accountId) { + return { + isLoading: true, + }; + } + + return { + accountId, + remote: !!(state.getIn(['accounts', accountId, 'acct']) !== state.getIn(['accounts', accountId, 'username'])), + remoteUrl: state.getIn(['accounts', accountId, 'url']), + isAccount: !!state.getIn(['accounts', accountId]), + accountIds: state.getIn(['user_lists', 'following', accountId, 'items']), + hasMore: !!state.getIn(['user_lists', 'following', accountId, 'next']), + isLoading: state.getIn(['user_lists', 'following', accountId, 'isLoading'], true), + blockedBy: state.getIn(['relationships', accountId, 'blocked_by'], false), + }; +}; const RemoteHint = ({ url }) => ( } /> @@ -41,9 +53,12 @@ export default @connect(mapStateToProps) class Following extends ImmutablePureComponent { static propTypes = { - params: PropTypes.object.isRequired, + params: PropTypes.shape({ + acct: PropTypes.string, + id: PropTypes.string, + }).isRequired, + accountId: PropTypes.string, dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, accountIds: ImmutablePropTypes.list, hasMore: PropTypes.bool, isLoading: PropTypes.bool, @@ -54,26 +69,39 @@ class Following extends ImmutablePureComponent { multiColumn: PropTypes.bool, }; - componentWillMount () { - if (!this.props.accountIds) { - this.props.dispatch(fetchAccount(this.props.params.accountId)); - this.props.dispatch(fetchFollowing(this.props.params.accountId)); + _load () { + const { accountId, isAccount, dispatch } = this.props; + + if (!isAccount) dispatch(fetchAccount(accountId)); + dispatch(fetchFollowing(accountId)); + } + + componentDidMount () { + const { params: { acct }, accountId, dispatch } = this.props; + + if (accountId) { + this._load(); + } else { + dispatch(lookupAccount(acct)); } } - componentWillReceiveProps (nextProps) { - if (nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) { - this.props.dispatch(fetchAccount(nextProps.params.accountId)); - this.props.dispatch(fetchFollowing(nextProps.params.accountId)); + componentDidUpdate (prevProps) { + const { params: { acct }, accountId, dispatch } = this.props; + + if (prevProps.accountId !== accountId && accountId) { + this._load(); + } else if (prevProps.params.acct !== acct) { + dispatch(lookupAccount(acct)); } } handleLoadMore = debounce(() => { - this.props.dispatch(expandFollowing(this.props.params.accountId)); + this.props.dispatch(expandFollowing(this.props.accountId)); }, 300, { leading: true }); render () { - const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount, multiColumn, isLoading, remote, remoteUrl } = this.props; + const { accountIds, hasMore, blockedBy, isAccount, multiColumn, isLoading, remote, remoteUrl } = this.props; if (!isAccount) { return ( @@ -112,8 +140,7 @@ class Following extends ImmutablePureComponent { hasMore={hasMore} isLoading={isLoading} onLoadMore={this.handleLoadMore} - shouldUpdateScroll={shouldUpdateScroll} - prepend={} + prepend={} alwaysPrepend append={remoteMessage} emptyMessage={emptyMessage} diff --git a/app/javascript/mastodon/features/getting_started/components/announcements.js b/app/javascript/mastodon/features/getting_started/components/announcements.js index ff1566e05..24db8cede 100644 --- a/app/javascript/mastodon/features/getting_started/components/announcements.js +++ b/app/javascript/mastodon/features/getting_started/components/announcements.js @@ -87,7 +87,7 @@ class Content extends ImmutablePureComponent { onMentionClick = (mention, e) => { if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) { e.preventDefault(); - this.context.router.history.push(`/accounts/${mention.get('id')}`); + this.context.router.history.push(`/@${mention.get('acct')}`); } } @@ -96,14 +96,14 @@ class Content extends ImmutablePureComponent { if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) { e.preventDefault(); - this.context.router.history.push(`/timelines/tag/${hashtag}`); + this.context.router.history.push(`/tags/${hashtag}`); } } onStatusClick = (status, e) => { if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) { e.preventDefault(); - this.context.router.history.push(`/statuses/${status.get('id')}`); + this.context.router.history.push(`/@${status.getIn(['account', 'acct'])}/${status.get('id')}`); } } diff --git a/app/javascript/mastodon/features/getting_started/components/trends.js b/app/javascript/mastodon/features/getting_started/components/trends.js index 3b9a3075f..71c7c458d 100644 --- a/app/javascript/mastodon/features/getting_started/components/trends.js +++ b/app/javascript/mastodon/features/getting_started/components/trends.js @@ -2,7 +2,7 @@ import React from 'react'; import ImmutablePureComponent from 'react-immutable-pure-component'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; -import Hashtag from 'mastodon/components/hashtag'; +import { ImmutableHashtag as Hashtag } from 'mastodon/components/hashtag'; import { FormattedMessage } from 'react-intl'; export default class Trends extends ImmutablePureComponent { diff --git a/app/javascript/mastodon/features/getting_started/index.js b/app/javascript/mastodon/features/getting_started/index.js index 1b9994612..5508adb80 100644 --- a/app/javascript/mastodon/features/getting_started/index.js +++ b/app/javascript/mastodon/features/getting_started/index.js @@ -82,7 +82,7 @@ class GettingStarted extends ImmutablePureComponent { const { fetchFollowRequests, multiColumn } = this.props; if (!multiColumn && window.innerWidth >= NAVIGATION_PANEL_BREAKPOINT) { - this.context.router.history.replace('/timelines/home'); + this.context.router.history.replace('/home'); return; } @@ -98,8 +98,8 @@ class GettingStarted extends ImmutablePureComponent { if (multiColumn) { navItems.push( , - , - , + , + , ); height += 34 + 48*2; @@ -127,13 +127,13 @@ class GettingStarted extends ImmutablePureComponent { if (multiColumn && !columns.find(item => item.get('id') === 'HOME')) { navItems.push( - , + , ); height += 48; } navItems.push( - , + , , , , diff --git a/app/javascript/mastodon/features/hashtag_timeline/index.js b/app/javascript/mastodon/features/hashtag_timeline/index.js index 5ccd9f8ea..6a808eb30 100644 --- a/app/javascript/mastodon/features/hashtag_timeline/index.js +++ b/app/javascript/mastodon/features/hashtag_timeline/index.js @@ -24,7 +24,6 @@ class HashtagTimeline extends React.PureComponent { params: PropTypes.object.isRequired, columnId: PropTypes.string, dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, hasUnread: PropTypes.bool, multiColumn: PropTypes.bool, }; @@ -130,7 +129,7 @@ class HashtagTimeline extends React.PureComponent { } render () { - const { shouldUpdateScroll, hasUnread, columnId, multiColumn } = this.props; + const { hasUnread, columnId, multiColumn } = this.props; const { id, local } = this.props.params; const pinned = !!columnId; @@ -156,7 +155,6 @@ class HashtagTimeline extends React.PureComponent { timelineId={`hashtag:${id}${local ? ':local' : ''}`} onLoadMore={this.handleLoadMore} emptyMessage={} - shouldUpdateScroll={shouldUpdateScroll} bindToDocument={!multiColumn} /> diff --git a/app/javascript/mastodon/features/home_timeline/index.js b/app/javascript/mastodon/features/home_timeline/index.js index 33ab0d7d9..6ba48cf93 100644 --- a/app/javascript/mastodon/features/home_timeline/index.js +++ b/app/javascript/mastodon/features/home_timeline/index.js @@ -34,7 +34,6 @@ class HomeTimeline extends React.PureComponent { static propTypes = { dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, intl: PropTypes.object.isRequired, hasUnread: PropTypes.bool, isPartial: PropTypes.bool, @@ -112,7 +111,7 @@ class HomeTimeline extends React.PureComponent { }; render () { - const { intl, shouldUpdateScroll, hasUnread, columnId, multiColumn, hasAnnouncements, unreadAnnouncements, showAnnouncements } = this.props; + const { intl, hasUnread, columnId, multiColumn, hasAnnouncements, unreadAnnouncements, showAnnouncements } = this.props; const pinned = !!columnId; let announcementsButton = null; @@ -154,7 +153,6 @@ class HomeTimeline extends React.PureComponent { onLoadMore={this.handleLoadMore} timelineId='home' emptyMessage={ }} />} - shouldUpdateScroll={shouldUpdateScroll} bindToDocument={!multiColumn} /> diff --git a/app/javascript/mastodon/features/list_timeline/index.js b/app/javascript/mastodon/features/list_timeline/index.js index 3596bd90c..2fb87f14f 100644 --- a/app/javascript/mastodon/features/list_timeline/index.js +++ b/app/javascript/mastodon/features/list_timeline/index.js @@ -41,7 +41,6 @@ class ListTimeline extends React.PureComponent { static propTypes = { params: PropTypes.object.isRequired, dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, columnId: PropTypes.string, hasUnread: PropTypes.bool, multiColumn: PropTypes.bool, @@ -142,7 +141,7 @@ class ListTimeline extends React.PureComponent { } render () { - const { shouldUpdateScroll, hasUnread, columnId, multiColumn, list, intl } = this.props; + const { hasUnread, columnId, multiColumn, list, intl } = this.props; const { id } = this.props.params; const pinned = !!columnId; const title = list ? list.get('title') : id; @@ -214,7 +213,6 @@ class ListTimeline extends React.PureComponent { timelineId={`list:${id}`} onLoadMore={this.handleLoadMore} emptyMessage={} - shouldUpdateScroll={shouldUpdateScroll} bindToDocument={!multiColumn} /> diff --git a/app/javascript/mastodon/features/lists/index.js b/app/javascript/mastodon/features/lists/index.js index ca1fa1f5e..809d79d99 100644 --- a/app/javascript/mastodon/features/lists/index.js +++ b/app/javascript/mastodon/features/lists/index.js @@ -48,7 +48,7 @@ class Lists extends ImmutablePureComponent { } render () { - const { intl, shouldUpdateScroll, lists, multiColumn } = this.props; + const { intl, lists, multiColumn } = this.props; if (!lists) { return ( @@ -68,13 +68,12 @@ class Lists extends ImmutablePureComponent { } bindToDocument={!multiColumn} > {lists.map(list => - , + , )} diff --git a/app/javascript/mastodon/features/mutes/index.js b/app/javascript/mastodon/features/mutes/index.js index 17ff5c762..c1d50d194 100644 --- a/app/javascript/mastodon/features/mutes/index.js +++ b/app/javascript/mastodon/features/mutes/index.js @@ -29,7 +29,6 @@ class Mutes extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, hasMore: PropTypes.bool, isLoading: PropTypes.bool, accountIds: ImmutablePropTypes.list, @@ -46,7 +45,7 @@ class Mutes extends ImmutablePureComponent { }, 300, { leading: true }); render () { - const { intl, shouldUpdateScroll, hasMore, accountIds, multiColumn, isLoading } = this.props; + const { intl, hasMore, accountIds, multiColumn, isLoading } = this.props; if (!accountIds) { return ( @@ -66,7 +65,6 @@ class Mutes extends ImmutablePureComponent { onLoadMore={this.handleLoadMore} hasMore={hasMore} isLoading={isLoading} - shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} bindToDocument={!multiColumn} > diff --git a/app/javascript/mastodon/features/notifications/components/follow_request.js b/app/javascript/mastodon/features/notifications/components/follow_request.js index a80cfb2fa..9ef3fde7e 100644 --- a/app/javascript/mastodon/features/notifications/components/follow_request.js +++ b/app/javascript/mastodon/features/notifications/components/follow_request.js @@ -42,7 +42,7 @@ class FollowRequest extends ImmutablePureComponent { return (
    - +
    diff --git a/app/javascript/mastodon/features/notifications/components/notification.js b/app/javascript/mastodon/features/notifications/components/notification.js index 94fdbd6f4..f9f8a87f2 100644 --- a/app/javascript/mastodon/features/notifications/components/notification.js +++ b/app/javascript/mastodon/features/notifications/components/notification.js @@ -68,7 +68,7 @@ class Notification extends ImmutablePureComponent { const { notification } = this.props; if (notification.get('status')) { - this.context.router.history.push(`/statuses/${notification.get('status')}`); + this.context.router.history.push(`/@${notification.getIn(['status', 'account', 'acct'])}/${notification.get('status')}`); } else { this.handleOpenProfile(); } @@ -76,7 +76,7 @@ class Notification extends ImmutablePureComponent { handleOpenProfile = () => { const { notification } = this.props; - this.context.router.history.push(`/accounts/${notification.getIn(['account', 'id'])}`); + this.context.router.history.push(`/@${notification.getIn(['account', 'acct'])}`); } handleMention = e => { @@ -315,7 +315,7 @@ class Notification extends ImmutablePureComponent { const { notification } = this.props; const account = notification.get('account'); const displayNameHtml = { __html: account.get('display_name_html') }; - const link = ; + const link = ; switch(notification.get('type')) { case 'follow': diff --git a/app/javascript/mastodon/features/notifications/index.js b/app/javascript/mastodon/features/notifications/index.js index 1a621eca9..a6a277d7e 100644 --- a/app/javascript/mastodon/features/notifications/index.js +++ b/app/javascript/mastodon/features/notifications/index.js @@ -74,7 +74,6 @@ class Notifications extends React.PureComponent { notifications: ImmutablePropTypes.list.isRequired, showFilterBar: PropTypes.bool.isRequired, dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, intl: PropTypes.object.isRequired, isLoading: PropTypes.bool, isUnread: PropTypes.bool, @@ -176,7 +175,7 @@ class Notifications extends React.PureComponent { }; render () { - const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar, lastReadId, canMarkAsRead, needsNotificationPermission } = this.props; + const { intl, notifications, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar, lastReadId, canMarkAsRead, needsNotificationPermission } = this.props; const pinned = !!columnId; const emptyMessage = ; @@ -227,7 +226,6 @@ class Notifications extends React.PureComponent { onLoadPending={this.handleLoadPending} onScrollToTop={this.handleScrollToTop} onScroll={this.handleScroll} - shouldUpdateScroll={shouldUpdateScroll} bindToDocument={!multiColumn} > {scrollableContent} diff --git a/app/javascript/mastodon/features/picture_in_picture/components/footer.js b/app/javascript/mastodon/features/picture_in_picture/components/footer.js index 1ecb18bf8..0de562ee1 100644 --- a/app/javascript/mastodon/features/picture_in_picture/components/footer.js +++ b/app/javascript/mastodon/features/picture_in_picture/components/footer.js @@ -114,9 +114,13 @@ class Footer extends ImmutablePureComponent { return; } - const { status } = this.props; + const { status, onClose } = this.props; - router.history.push(`/statuses/${status.get('id')}`); + if (onClose) { + onClose(); + } + + router.history.push(`/@${status.getIn(['account', 'acct'])}/${status.get('id')}`); } render () { diff --git a/app/javascript/mastodon/features/picture_in_picture/components/header.js b/app/javascript/mastodon/features/picture_in_picture/components/header.js index 7dd199b75..e05d8c62e 100644 --- a/app/javascript/mastodon/features/picture_in_picture/components/header.js +++ b/app/javascript/mastodon/features/picture_in_picture/components/header.js @@ -34,7 +34,7 @@ class Header extends ImmutablePureComponent { return (
    - + diff --git a/app/javascript/mastodon/features/pinned_statuses/index.js b/app/javascript/mastodon/features/pinned_statuses/index.js index ad5c9cafc..f32bd6d23 100644 --- a/app/javascript/mastodon/features/pinned_statuses/index.js +++ b/app/javascript/mastodon/features/pinned_statuses/index.js @@ -24,7 +24,6 @@ class PinnedStatuses extends ImmutablePureComponent { static propTypes = { dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, statusIds: ImmutablePropTypes.list.isRequired, intl: PropTypes.object.isRequired, hasMore: PropTypes.bool.isRequired, @@ -44,7 +43,7 @@ class PinnedStatuses extends ImmutablePureComponent { } render () { - const { intl, shouldUpdateScroll, statusIds, hasMore, multiColumn } = this.props; + const { intl, statusIds, hasMore, multiColumn } = this.props; return ( @@ -53,7 +52,6 @@ class PinnedStatuses extends ImmutablePureComponent { statusIds={statusIds} scrollKey='pinned_statuses' hasMore={hasMore} - shouldUpdateScroll={shouldUpdateScroll} bindToDocument={!multiColumn} /> diff --git a/app/javascript/mastodon/features/public_timeline/index.js b/app/javascript/mastodon/features/public_timeline/index.js index 988b1b070..b1d5518af 100644 --- a/app/javascript/mastodon/features/public_timeline/index.js +++ b/app/javascript/mastodon/features/public_timeline/index.js @@ -43,7 +43,6 @@ class PublicTimeline extends React.PureComponent { static propTypes = { dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, intl: PropTypes.object.isRequired, columnId: PropTypes.string, multiColumn: PropTypes.bool, @@ -106,7 +105,7 @@ class PublicTimeline extends React.PureComponent { } render () { - const { intl, shouldUpdateScroll, columnId, hasUnread, multiColumn, onlyMedia, onlyRemote } = this.props; + const { intl, columnId, hasUnread, multiColumn, onlyMedia, onlyRemote } = this.props; const pinned = !!columnId; return ( @@ -130,7 +129,6 @@ class PublicTimeline extends React.PureComponent { trackScroll={!pinned} scrollKey={`public_timeline-${columnId}`} emptyMessage={} - shouldUpdateScroll={shouldUpdateScroll} bindToDocument={!multiColumn} /> diff --git a/app/javascript/mastodon/features/reblogs/index.js b/app/javascript/mastodon/features/reblogs/index.js index 4becb5fb7..0fbd09415 100644 --- a/app/javascript/mastodon/features/reblogs/index.js +++ b/app/javascript/mastodon/features/reblogs/index.js @@ -27,7 +27,6 @@ class Reblogs extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, dispatch: PropTypes.func.isRequired, - shouldUpdateScroll: PropTypes.func, accountIds: ImmutablePropTypes.list, multiColumn: PropTypes.bool, intl: PropTypes.object.isRequired, @@ -50,7 +49,7 @@ class Reblogs extends ImmutablePureComponent { } render () { - const { intl, shouldUpdateScroll, accountIds, multiColumn } = this.props; + const { intl, accountIds, multiColumn } = this.props; if (!accountIds) { return ( @@ -74,7 +73,6 @@ class Reblogs extends ImmutablePureComponent { diff --git a/app/javascript/mastodon/features/status/components/detailed_status.js b/app/javascript/mastodon/features/status/components/detailed_status.js index 85dada363..721645cf8 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.js +++ b/app/javascript/mastodon/features/status/components/detailed_status.js @@ -6,7 +6,7 @@ import DisplayName from '../../../components/display_name'; import StatusContent from '../../../components/status_content'; import MediaGallery from '../../../components/media_gallery'; import { Link } from 'react-router-dom'; -import { defineMessages, FormattedDate, injectIntl } from 'react-intl'; +import { injectIntl, defineMessages, FormattedDate } from 'react-intl'; import Card from './card'; import ImmutablePureComponent from 'react-immutable-pure-component'; import Video from '../../video'; @@ -55,7 +55,7 @@ class DetailedStatus extends ImmutablePureComponent { handleAccountClick = (e) => { if (e.button === 0 && !(e.ctrlKey || e.metaKey) && this.context.router) { e.preventDefault(); - this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`); + this.context.router.history.push(`/@${this.props.status.getIn(['account', 'acct'])}`); } e.stopPropagation(); @@ -208,12 +208,9 @@ class DetailedStatus extends ImmutablePureComponent { reblogLink = ''; } else if (this.context.router) { reblogLink = ( - - · - + + · + @@ -241,10 +238,7 @@ class DetailedStatus extends ImmutablePureComponent { if (this.context.router) { favouriteLink = ( - + diff --git a/app/javascript/mastodon/features/status/index.js b/app/javascript/mastodon/features/status/index.js index df8362a1b..055963d14 100644 --- a/app/javascript/mastodon/features/status/index.js +++ b/app/javascript/mastodon/features/status/index.js @@ -45,7 +45,7 @@ import { initBlockModal } from '../../actions/blocks'; import { initBoostModal } from '../../actions/boosts'; import { initReport } from '../../actions/reports'; import { makeGetStatus, makeGetPictureInPicture } from '../../selectors'; -import { ScrollContainer } from 'react-router-scroll-4'; +import ScrollContainer from 'mastodon/containers/scroll_container'; import ColumnBackButton from '../../components/column_back_button'; import ColumnHeader from '../../components/column_header'; import StatusContainer from '../../containers/status_container'; @@ -396,7 +396,7 @@ class Status extends ImmutablePureComponent { } handleHotkeyOpenProfile = () => { - this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`); + this.context.router.history.push(`/@${this.props.status.getIn(['account', 'acct'])}`); } handleHotkeyToggleHidden = () => { @@ -498,7 +498,7 @@ class Status extends ImmutablePureComponent { render () { let ancestors, descendants; - const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl, domain, multiColumn, pictureInPicture } = this.props; + const { status, ancestorsIds, descendantsIds, intl, domain, multiColumn, pictureInPicture } = this.props; const { fullscreen } = this.state; if (status === null) { @@ -541,7 +541,7 @@ class Status extends ImmutablePureComponent { )} /> - +
    {ancestors} diff --git a/app/javascript/mastodon/features/ui/components/audio_modal.js b/app/javascript/mastodon/features/ui/components/audio_modal.js index 0676bd9cf..c46fefce8 100644 --- a/app/javascript/mastodon/features/ui/components/audio_modal.js +++ b/app/javascript/mastodon/features/ui/components/audio_modal.js @@ -4,7 +4,6 @@ import PropTypes from 'prop-types'; import Audio from 'mastodon/features/audio'; import { connect } from 'react-redux'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { previewState } from './video_modal'; import Footer from 'mastodon/features/picture_in_picture/components/footer'; const mapStateToProps = (state, { statusId }) => ({ @@ -25,32 +24,6 @@ class AudioModal extends ImmutablePureComponent { onChangeBackgroundColor: PropTypes.func.isRequired, }; - static contextTypes = { - router: PropTypes.object, - }; - - componentDidMount () { - if (this.context.router) { - const history = this.context.router.history; - - history.push(history.location.pathname, previewState); - - this.unlistenHistory = history.listen(() => { - this.props.onClose(); - }); - } - } - - componentWillUnmount () { - if (this.context.router) { - this.unlistenHistory(); - - if (this.context.router.history.location.state === previewState) { - this.context.router.history.goBack(); - } - } - } - render () { const { media, accountStaticAvatar, statusId, onClose } = this.props; const options = this.props.options || {}; diff --git a/app/javascript/mastodon/features/ui/components/boost_modal.js b/app/javascript/mastodon/features/ui/components/boost_modal.js index 83229833b..f8a344690 100644 --- a/app/javascript/mastodon/features/ui/components/boost_modal.js +++ b/app/javascript/mastodon/features/ui/components/boost_modal.js @@ -68,7 +68,7 @@ class BoostModal extends ImmutablePureComponent { if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { e.preventDefault(); this.props.onClose(); - this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`); + this.context.router.history.push(`/@${this.props.status.getIn(['account', 'acct'])}`); } } diff --git a/app/javascript/mastodon/features/ui/components/columns_area.js b/app/javascript/mastodon/features/ui/components/columns_area.js index 039abe432..193637113 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area.js +++ b/app/javascript/mastodon/features/ui/components/columns_area.js @@ -53,7 +53,7 @@ const messages = defineMessages({ publish: { id: 'compose_form.publish', defaultMessage: 'Toot' }, }); -const shouldHideFAB = path => path.match(/^\/statuses\/|^\/search|^\/getting-started|^\/start/); +const shouldHideFAB = path => path.match(/^\/statuses\/|^\/@[^/]+\/\d+|^\/publish|^\/search|^\/getting-started|^\/start/); export default @(component => injectIntl(component, { withRef: true })) class ColumnsArea extends ImmutablePureComponent { @@ -216,7 +216,7 @@ class ColumnsArea extends ImmutablePureComponent { const columnIndex = getIndex(this.context.router.history.location.pathname); if (singleColumn) { - const floatingActionButton = shouldHideFAB(this.context.router.history.location.pathname) ? null : ; + const floatingActionButton = shouldHideFAB(this.context.router.history.location.pathname) ? null : ; const content = columnIndex !== -1 ? ( diff --git a/app/javascript/mastodon/features/ui/components/confirmation_modal.js b/app/javascript/mastodon/features/ui/components/confirmation_modal.js index 1227fa453..65d97ca16 100644 --- a/app/javascript/mastodon/features/ui/components/confirmation_modal.js +++ b/app/javascript/mastodon/features/ui/components/confirmation_modal.js @@ -13,15 +13,22 @@ class ConfirmationModal extends React.PureComponent { onConfirm: PropTypes.func.isRequired, secondary: PropTypes.string, onSecondary: PropTypes.func, + closeWhenConfirm: PropTypes.bool, intl: PropTypes.object.isRequired, }; + static defaultProps = { + closeWhenConfirm: true, + }; + componentDidMount() { this.button.focus(); } handleClick = () => { - this.props.onClose(); + if (this.props.closeWhenConfirm) { + this.props.onClose(); + } this.props.onConfirm(); } diff --git a/app/javascript/mastodon/features/ui/components/focal_point_modal.js b/app/javascript/mastodon/features/ui/components/focal_point_modal.js index bb74c4cf2..92ba66722 100644 --- a/app/javascript/mastodon/features/ui/components/focal_point_modal.js +++ b/app/javascript/mastodon/features/ui/components/focal_point_modal.js @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; import classNames from 'classnames'; -import { changeUploadCompose, uploadThumbnail } from '../../../actions/compose'; +import { changeUploadCompose, uploadThumbnail, onChangeMediaDescription, onChangeMediaFocus } from '../../../actions/compose'; import { getPointerPosition } from '../../video'; import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; import IconButton from 'mastodon/components/icon_button'; @@ -27,14 +27,22 @@ import { assetHost } from 'mastodon/utils/config'; const messages = defineMessages({ close: { id: 'lightbox.close', defaultMessage: 'Close' }, apply: { id: 'upload_modal.apply', defaultMessage: 'Apply' }, + applying: { id: 'upload_modal.applying', defaultMessage: 'Applying…' }, placeholder: { id: 'upload_modal.description_placeholder', defaultMessage: 'A quick brown fox jumps over the lazy dog' }, chooseImage: { id: 'upload_modal.choose_image', defaultMessage: 'Choose image' }, + discardMessage: { id: 'confirmations.discard_edit_media.message', defaultMessage: 'You have unsaved changes to the media description or preview, discard them anyway?' }, + discardConfirm: { id: 'confirmations.discard_edit_media.confirm', defaultMessage: 'Discard' }, }); const mapStateToProps = (state, { id }) => ({ media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id), account: state.getIn(['accounts', me]), isUploadingThumbnail: state.getIn(['compose', 'isUploadingThumbnail']), + description: state.getIn(['compose', 'media_modal', 'description']), + focusX: state.getIn(['compose', 'media_modal', 'focusX']), + focusY: state.getIn(['compose', 'media_modal', 'focusY']), + dirty: state.getIn(['compose', 'media_modal', 'dirty']), + is_changing_upload: state.getIn(['compose', 'is_changing_upload']), }); const mapDispatchToProps = (dispatch, { id }) => ({ @@ -43,6 +51,14 @@ const mapDispatchToProps = (dispatch, { id }) => ({ dispatch(changeUploadCompose(id, { description, focus: `${x.toFixed(2)},${y.toFixed(2)}` })); }, + onChangeDescription: (description) => { + dispatch(onChangeMediaDescription(description)); + }, + + onChangeFocus: (focusX, focusY) => { + dispatch(onChangeMediaFocus(focusX, focusY)); + }, + onSelectThumbnail: files => { dispatch(uploadThumbnail(id, files[0])); }, @@ -83,8 +99,8 @@ class ImageLoader extends React.PureComponent { } -export default @connect(mapStateToProps, mapDispatchToProps) -@injectIntl +export default @connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true }) +@(component => injectIntl(component, { withRef: true })) class FocalPointModal extends ImmutablePureComponent { static propTypes = { @@ -92,34 +108,21 @@ class FocalPointModal extends ImmutablePureComponent { account: ImmutablePropTypes.map.isRequired, isUploadingThumbnail: PropTypes.bool, onSave: PropTypes.func.isRequired, + onChangeDescription: PropTypes.func.isRequired, + onChangeFocus: PropTypes.func.isRequired, onSelectThumbnail: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, }; state = { - x: 0, - y: 0, - focusX: 0, - focusY: 0, dragging: false, - description: '', dirty: false, progress: 0, loading: true, ocrStatus: '', }; - componentWillMount () { - this.updatePositionFromMedia(this.props.media); - } - - componentWillReceiveProps (nextProps) { - if (this.props.media.get('id') !== nextProps.media.get('id')) { - this.updatePositionFromMedia(nextProps.media); - } - } - componentWillUnmount () { document.removeEventListener('mousemove', this.handleMouseMove); document.removeEventListener('mouseup', this.handleMouseUp); @@ -164,54 +167,37 @@ class FocalPointModal extends ImmutablePureComponent { const focusX = (x - .5) * 2; const focusY = (y - .5) * -2; - this.setState({ x, y, focusX, focusY, dirty: true }); - } - - updatePositionFromMedia = media => { - const focusX = media.getIn(['meta', 'focus', 'x']); - const focusY = media.getIn(['meta', 'focus', 'y']); - const description = media.get('description') || ''; - - if (focusX && focusY) { - const x = (focusX / 2) + .5; - const y = (focusY / -2) + .5; - - this.setState({ - x, - y, - focusX, - focusY, - description, - dirty: false, - }); - } else { - this.setState({ - x: 0.5, - y: 0.5, - focusX: 0, - focusY: 0, - description, - dirty: false, - }); - } + this.props.onChangeFocus(focusX, focusY); } handleChange = e => { - this.setState({ description: e.target.value, dirty: true }); + this.props.onChangeDescription(e.target.value); } handleKeyDown = (e) => { if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) { e.preventDefault(); e.stopPropagation(); - this.setState({ description: e.target.value, dirty: true }); + this.props.onChangeDescription(e.target.value); this.handleSubmit(); } } handleSubmit = () => { - this.props.onSave(this.state.description, this.state.focusX, this.state.focusY); - this.props.onClose(); + this.props.onSave(this.props.description, this.props.focusX, this.props.focusY); + } + + getCloseConfirmationMessage = () => { + const { intl, dirty } = this.props; + + if (dirty) { + return { + message: intl.formatMessage(messages.discardMessage), + confirm: intl.formatMessage(messages.discardConfirm), + }; + } else { + return null; + } } setRef = c => { @@ -219,6 +205,10 @@ class FocalPointModal extends ImmutablePureComponent { } handleTextDetection = () => { + this._detectText(); + } + + _detectText = (refreshCache = false) => { const { media } = this.props; this.setState({ detecting: true }); @@ -235,6 +225,7 @@ class FocalPointModal extends ImmutablePureComponent { this.setState({ ocrStatus: 'preparing', progress }); } }, + cacheMethod: refreshCache ? 'refresh' : 'write', }); let media_url = media.get('url'); @@ -247,14 +238,21 @@ class FocalPointModal extends ImmutablePureComponent { } } - (async () => { + return (async () => { await worker.load(); await worker.loadLanguage('eng'); await worker.initialize('eng'); const { data: { text } } = await worker.recognize(media_url); - this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false }); + this.setState({ detecting: false }); + this.props.onChangeDescription(removeExtraLineBreaks(text)); await worker.terminate(); - })(); + })().catch((e) => { + if (refreshCache) { + throw e; + } else { + this._detectText(true); + } + }); }).catch((e) => { console.error(e); this.setState({ detecting: false }); @@ -263,7 +261,6 @@ class FocalPointModal extends ImmutablePureComponent { handleThumbnailChange = e => { if (e.target.files.length > 0) { - this.setState({ dirty: true }); this.props.onSelectThumbnail(e.target.files); } } @@ -277,8 +274,10 @@ class FocalPointModal extends ImmutablePureComponent { } render () { - const { media, intl, account, onClose, isUploadingThumbnail } = this.props; - const { x, y, dragging, description, dirty, detecting, progress, ocrStatus } = this.state; + const { media, intl, account, onClose, isUploadingThumbnail, description, focusX, focusY, dirty, is_changing_upload } = this.props; + const { dragging, detecting, progress, ocrStatus } = this.state; + const x = (focusX / 2) + .5; + const y = (focusY / -2) + .5; const width = media.getIn(['meta', 'original', 'width']) || null; const height = media.getIn(['meta', 'original', 'height']) || null; @@ -333,7 +332,7 @@ class FocalPointModal extends ImmutablePureComponent { accept='image/png,image/jpeg' onChange={this.handleThumbnailChange} style={{ display: 'none' }} - disabled={isUploadingThumbnail} + disabled={isUploadingThumbnail || is_changing_upload} /> @@ -352,7 +351,7 @@ class FocalPointModal extends ImmutablePureComponent { value={detecting ? '…' : description} onChange={this.handleChange} onKeyDown={this.handleKeyDown} - disabled={detecting} + disabled={detecting || is_changing_upload} autoFocus /> @@ -362,11 +361,11 @@ class FocalPointModal extends ImmutablePureComponent {
    - +
    -
    diff --git a/app/javascript/mastodon/features/ui/components/link_footer.js b/app/javascript/mastodon/features/ui/components/link_footer.js index b9947509a..cbf07d907 100644 --- a/app/javascript/mastodon/features/ui/components/link_footer.js +++ b/app/javascript/mastodon/features/ui/components/link_footer.js @@ -1,9 +1,9 @@ import { connect } from 'react-redux'; import React from 'react'; import PropTypes from 'prop-types'; -import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; -import { Link, NavLink } from 'react-router-dom'; -import { invitesEnabled, repository, source_url, version } from 'mastodon/initial_state'; +import { FormattedMessage, defineMessages, injectIntl } from 'react-intl'; +import { Link , NavLink } from 'react-router-dom'; +import { invitesEnabled, limitedFederationMode, version, repository, source_url } from 'mastodon/initial_state'; import { logOut } from 'mastodon/utils/log_out'; import { openModal } from 'mastodon/actions/modal'; import { isStaff } from '../../../initial_state'; @@ -16,8 +16,9 @@ const messages = defineMessages({ const mapDispatchToProps = (dispatch, { intl }) => ({ onLogout() { dispatch(openModal('CONFIRM', { - message : intl.formatMessage(messages.logoutMessage), - confirm : intl.formatMessage(messages.logoutConfirm), + message: intl.formatMessage(messages.logoutMessage), + confirm: intl.formatMessage(messages.logoutConfirm), + closeWhenConfirm: false, onConfirm: () => logOut(), })); }, @@ -134,9 +135,8 @@ class LinkFooter extends React.PureComponent { }); return ( - -
    - + - - + {/*regular links */} -
    +
      + {invitesEnabled &&
    • ·
    • } + {withHotkeys &&
    • ·
    • } +
    • ·
    • + {!limitedFederationMode &&
    • ·
    • } +
    • ·
    • +
    • ·
    • +
    • ·
    • +
    • ·
    • +
    • +
    + +

    + {repository} (v{version}) }} + /> +

    +
    ); } diff --git a/app/javascript/mastodon/features/ui/components/list_panel.js b/app/javascript/mastodon/features/ui/components/list_panel.js index 1f7ec683a..411f62508 100644 --- a/app/javascript/mastodon/features/ui/components/list_panel.js +++ b/app/javascript/mastodon/features/ui/components/list_panel.js @@ -46,7 +46,7 @@ class ListPanel extends ImmutablePureComponent {
    {lists.map(list => ( - {list.get('title')} + {list.get('title')} ))}
    ); diff --git a/app/javascript/mastodon/features/ui/components/media_modal.js b/app/javascript/mastodon/features/ui/components/media_modal.js index b51179fd5..b7f96bec7 100644 --- a/app/javascript/mastodon/features/ui/components/media_modal.js +++ b/app/javascript/mastodon/features/ui/components/media_modal.js @@ -20,8 +20,6 @@ const messages = defineMessages({ next: { id: 'lightbox.next', defaultMessage: 'Next' }, }); -export const previewState = 'previewMediaModal'; - export default @injectIntl class MediaModal extends ImmutablePureComponent { @@ -37,10 +35,6 @@ class MediaModal extends ImmutablePureComponent { volume : PropTypes.number, }; - static contextTypes = { - router: PropTypes.object, - }; - state = { index: null, navigationHidden: false, @@ -98,16 +92,6 @@ class MediaModal extends ImmutablePureComponent { componentDidMount () { window.addEventListener('keydown', this.handleKeyDown, false); - if (this.context.router) { - const history = this.context.router.history; - - history.push(history.location.pathname, previewState); - - this.unlistenHistory = history.listen(() => { - this.props.onClose(); - }); - } - this._sendBackgroundColor(); } @@ -131,14 +115,6 @@ class MediaModal extends ImmutablePureComponent { componentWillUnmount () { window.removeEventListener('keydown', this.handleKeyDown); - if (this.context.router) { - this.unlistenHistory(); - - if (this.context.router.history.location.state === previewState) { - this.context.router.history.goBack(); - } - } - this.props.onChangeBackgroundColor(null); } @@ -152,13 +128,6 @@ class MediaModal extends ImmutablePureComponent { })); }; - handleStatusClick = e => { - if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { - e.preventDefault(); - this.context.router.history.push(`/statuses/${this.props.statusId}`); - } - } - render () { const { media, statusId, intl, onClose } = this.props; const { navigationHidden } = this.state; diff --git a/app/javascript/mastodon/features/ui/components/modal_root.js b/app/javascript/mastodon/features/ui/components/modal_root.js index 3403830e4..377cccda5 100644 --- a/app/javascript/mastodon/features/ui/components/modal_root.js +++ b/app/javascript/mastodon/features/ui/components/modal_root.js @@ -77,16 +77,33 @@ export default class ModalRoot extends React.PureComponent { return ; } + handleClose = () => { + const { onClose } = this.props; + let message = null; + try { + message = this._modal?.getWrappedInstance?.().getCloseConfirmationMessage?.(); + } catch (_) { + // injectIntl defines `getWrappedInstance` but errors out if `withRef` + // isn't set. + // This would be much smoother with react-intl 3+ and `forwardRef`. + } + onClose(message); + } + + setModalRef = (c) => { + this._modal = c; + } + render () { - const { type, props, onClose } = this.props; + const { type, props } = this.props; const { backgroundColor } = this.state; const visible = !!type; return ( - + {visible && ( - {(SpecificComponent) => } + {(SpecificComponent) => } )} diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.js b/app/javascript/mastodon/features/ui/components/navigation_panel.js index ed4396af1..901dbdfcb 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.js +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.js @@ -10,154 +10,27 @@ import TrendsContainer from 'mastodon/features/getting_started/containers/trends const NavigationPanel = () => (
    -
    - - - - - -
    -
    - - + + - -
    - - - - - {profile_directory && - } + + + + + + + {profile_directory && }
    - - + + {showTrends &&
    } {showTrends && } - -
    +
    ); export default withRouter(NavigationPanel); diff --git a/app/javascript/mastodon/features/ui/components/tabs_bar.js b/app/javascript/mastodon/features/ui/components/tabs_bar.js index 248fa936c..2d37c5e3b 100644 --- a/app/javascript/mastodon/features/ui/components/tabs_bar.js +++ b/app/javascript/mastodon/features/ui/components/tabs_bar.js @@ -8,74 +8,12 @@ import Icon from 'mastodon/components/icon'; import NotificationsCounterIcon from './notifications_counter_icon'; export const links = [ - , - , - , - , - , - , + , + , + , + , + , + , ]; export function getIndex(path) { diff --git a/app/javascript/mastodon/features/ui/components/video_modal.js b/app/javascript/mastodon/features/ui/components/video_modal.js index 2f13a175a..f3ee89dfd 100644 --- a/app/javascript/mastodon/features/ui/components/video_modal.js +++ b/app/javascript/mastodon/features/ui/components/video_modal.js @@ -6,8 +6,6 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import Footer from 'mastodon/features/picture_in_picture/components/footer'; import { getAverageFromBlurhash } from 'mastodon/blurhash'; -export const previewState = 'previewVideoModal'; - export default class VideoModal extends ImmutablePureComponent { static propTypes = { @@ -22,18 +20,8 @@ export default class VideoModal extends ImmutablePureComponent { onChangeBackgroundColor: PropTypes.func.isRequired, }; - static contextTypes = { - router: PropTypes.object, - }; - componentDidMount () { - const { router } = this.context; - const { media, onChangeBackgroundColor, onClose } = this.props; - - if (router) { - router.history.push(router.history.location.pathname, previewState); - this.unlistenHistory = router.history.listen(() => onClose()); - } + const { media, onChangeBackgroundColor } = this.props; const backgroundColor = getAverageFromBlurhash(media.get('blurhash')); @@ -42,18 +30,6 @@ export default class VideoModal extends ImmutablePureComponent { } } - componentWillUnmount () { - const { router } = this.context; - - if (router) { - this.unlistenHistory(); - - if (router.history.location.state === previewState) { - router.history.goBack(); - } - } - } - render () { const { media, statusId, onClose } = this.props; const options = this.props.options || {}; diff --git a/app/javascript/mastodon/features/ui/containers/modal_container.js b/app/javascript/mastodon/features/ui/containers/modal_container.js index 2d27180f7..34fec8206 100644 --- a/app/javascript/mastodon/features/ui/containers/modal_container.js +++ b/app/javascript/mastodon/features/ui/containers/modal_container.js @@ -1,15 +1,25 @@ import { connect } from 'react-redux'; -import { closeModal } from '../../../actions/modal'; +import { openModal, closeModal } from '../../../actions/modal'; import ModalRoot from '../components/modal_root'; const mapStateToProps = state => ({ - type: state.get('modal').modalType, - props: state.get('modal').modalProps, + type: state.getIn(['modal', 0, 'modalType'], null), + props: state.getIn(['modal', 0, 'modalProps'], {}), }); const mapDispatchToProps = dispatch => ({ - onClose () { - dispatch(closeModal()); + onClose (confirmationMessage) { + if (confirmationMessage) { + dispatch( + openModal('CONFIRM', { + message: confirmationMessage.message, + confirm: confirmationMessage.confirm, + onConfirm: () => dispatch(closeModal()), + }), + ); + } else { + dispatch(closeModal()); + } }, }); diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js index c1c6ac739..3feffa656 100644 --- a/app/javascript/mastodon/features/ui/index.js +++ b/app/javascript/mastodon/features/ui/index.js @@ -54,8 +54,6 @@ import { FollowRecommendations, } from './util/async-components'; import { me } from '../../initial_state'; -import { previewState as previewMediaState } from './components/media_modal'; -import { previewState as previewVideoState } from './components/video_modal'; import { closeOnboarding, INTRODUCTION_VERSION } from 'mastodon/actions/onboarding'; // Dummy import, to make sure that ends up in the application bundle. @@ -74,6 +72,7 @@ const mapStateToProps = state => ({ canUploadMore: !state.getIn(['compose', 'media_attachments']).some(x => ['audio', 'video'].includes(x.get('type'))) && state.getIn(['compose', 'media_attachments']).size < 4, dropdownMenuIsOpen: state.getIn(['dropdown_menu', 'openId']) !== null, firstLaunch: state.getIn(['settings', 'introductionVersion'], 0) < INTRODUCTION_VERSION, + username: state.getIn(['accounts', me, 'username']), }); const keyMap = { @@ -138,10 +137,6 @@ class SwitchingColumnsArea extends React.PureComponent { } } - shouldUpdateScroll (_, { location }) { - return location.state !== previewMediaState && location.state !== previewVideoState; - } - setRef = c => { if (c) { this.node = c.getWrappedInstance(); @@ -150,7 +145,7 @@ class SwitchingColumnsArea extends React.PureComponent { render () { const { children, mobile } = this.props; - const redirect = mobile ? : ; + const redirect = mobile ? : ; return ( @@ -158,38 +153,45 @@ class SwitchingColumnsArea extends React.PureComponent { {redirect} - - - - - - - - + + + + + + + + + - + - + + - - - - + + + + + + + + - - - - - + {/* Legacy routes, cannot be easily factored with other routes because they share a param name */} + + + + + - - - - - + + + + + @@ -220,6 +222,7 @@ class UI extends React.PureComponent { dropdownMenuIsOpen: PropTypes.bool, layout: PropTypes.string.isRequired, firstLaunch: PropTypes.bool, + username: PropTypes.string, }; state = { @@ -457,7 +460,7 @@ class UI extends React.PureComponent { } handleHotkeyGoToHome = () => { - this.context.router.history.push('/timelines/home'); + this.context.router.history.push('/home'); } handleHotkeyGoToNotifications = () => { @@ -465,15 +468,15 @@ class UI extends React.PureComponent { } handleHotkeyGoToLocal = () => { - this.context.router.history.push('/timelines/public/local'); + this.context.router.history.push('/public/local'); } handleHotkeyGoToFederated = () => { - this.context.router.history.push('/timelines/public'); + this.context.router.history.push('/public'); } handleHotkeyGoToDirect = () => { - this.context.router.history.push('/timelines/direct'); + this.context.router.history.push('/conversations'); } handleHotkeyGoToStart = () => { @@ -489,7 +492,7 @@ class UI extends React.PureComponent { } handleHotkeyGoToProfile = () => { - this.context.router.history.push(`/accounts/${me}`); + this.context.router.history.push(`/@${this.props.username}`); } handleHotkeyGoToBlocked = () => { diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js index 80d43907d..1389a3c3d 100644 --- a/app/javascript/mastodon/initial_state.js +++ b/app/javascript/mastodon/initial_state.js @@ -13,6 +13,7 @@ export const deleteModal = getMeta('delete_modal'); export const me = getMeta('me'); export const searchEnabled = getMeta('search_enabled'); export const invitesEnabled = getMeta('invites_enabled'); +export const limitedFederationMode = getMeta('limited_federation_mode'); export const repository = getMeta('repository'); export const source_url = getMeta('source_url'); export const version = getMeta('version'); diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json index c1eadb5a3..eca4765c4 100644 --- a/app/javascript/mastodon/locales/af.json +++ b/app/javascript/mastodon/locales/af.json @@ -47,11 +47,16 @@ "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "Log out", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 63cb17dd3..0992394a2 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -8,7 +8,7 @@ "account.blocked": "محظور", "account.browse_more_on_origin_server": "تصفح المزيد في الملف الشخصي الأصلي", "account.cancel_follow_request": "إلغاء طلب المتابَعة", - "account.direct": "مراسلة @{name} بشكلة مباشر", + "account.direct": "مراسلة @{name} بشكل مباشر", "account.disable_notifications": "توقف عن إشعاري عندما ينشر @{name}", "account.domain_blocked": "اسم النِّطاق محظور", "account.edit_profile": "تحرير الملف الشخصي", @@ -22,7 +22,7 @@ "account.follows.empty": "لا يُتابع هذا المُستخدمُ أيَّ أحدٍ حتى الآن.", "account.follows_you": "يُتابِعُك", "account.hide_reblogs": "إخفاء تعزيزات @{name}", - "account.joined": "Joined {date}", + "account.joined": "انضم في {date}", "account.last_status": "آخر نشاط", "account.link_verified_on": "تمَّ التَّحقق مِن مِلْكيّة هذا الرابط بتاريخ {date}", "account.locked_info": "تمَّ تعيين حالة خصوصية هذا الحساب إلى مُقفَل. يُراجع المالك يدويًا من يمكنه متابعته.", @@ -47,11 +47,16 @@ "account.unmute": "إلغاء الكَتم عن @{name}", "account.unmute_notifications": "إلغاء كَتم الإشعارات عن @{name}", "account_note.placeholder": "اِنقُر لإضافة مُلاحظة", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "يُرجى إعادة المحاولة بعد {retry_time, time, medium}.", "alert.rate_limited.title": "المُعَدَّل مَحدود", "alert.unexpected.message": "لقد طرأ خطأ غير متوقّع.", "alert.unexpected.title": "المعذرة!", "announcement.announcement": "إعلان", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} في الأسبوع", "boost_modal.combo": "يُمكنك الضّغط على {combo} لتخطي هذا في المرة المُقبِلَة", "bundle_column_error.body": "لقد حدث خطأ ما أثناء تحميل هذا العنصر.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "هل أنتَ مُتأكدٌ أنك تُريدُ حَذفَ هذا المنشور؟", "confirmations.delete_list.confirm": "حذف", "confirmations.delete_list.message": "هل أنتَ مُتأكدٌ أنكَ تُريدُ حَذفَ هذِهِ القائمةَ بشكلٍ دائم؟", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "حظر اِسم النِّطاق بشكلٍ كامل", "confirmations.domain_block.message": "متأكد من أنك تود حظر اسم النطاق {domain} بالكامل ؟ في غالب الأحيان يُستَحسَن كتم أو حظر بعض الحسابات بدلا من حظر نطاق بالكامل.\nلن تتمكن مِن رؤية محتوى هذا النطاق لا على خيوطك العمومية و لا في إشعاراتك. سوف يتم كذلك إزالة كافة متابعيك المنتمين إلى هذا النطاق.", "confirmations.logout.confirm": "خروج", @@ -160,11 +167,11 @@ "empty_column.domain_blocks": "ليس هناك نطاقات مخفية بعد.", "empty_column.favourited_statuses": "ليس لديك أية تبويقات مفضلة بعد. عندما ستقوم بالإعجاب بواحد، سيظهر هنا.", "empty_column.favourites": "لم يقم أي أحد بالإعجاب بهذا التبويق بعد. عندما يقوم أحدهم بذلك سوف يظهر هنا.", - "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.follow_recommendations": "يبدو أنه لا يمكن إنشاء أي اقتراحات لك. يمكنك البحث عن أشخاص قد تعرفهم أو استكشاف الوسوم الرائجة.", "empty_column.follow_requests": "ليس عندك أي طلب للمتابعة بعد. سوف تظهر طلباتك هنا إن قمت بتلقي البعض منها.", "empty_column.hashtag": "ليس هناك بعدُ أي محتوى ذو علاقة بهذا الوسم.", "empty_column.home": "إنّ الخيط الزمني لصفحتك الرئيسية فارغ. قم بزيارة {public} أو استخدم حقل البحث لكي تكتشف مستخدمين آخرين.", - "empty_column.home.suggestions": "See some suggestions", + "empty_column.home.suggestions": "شاهد بعض الاقتراحات", "empty_column.list": "هذه القائمة فارغة مؤقتا و لكن سوف تمتلئ تدريجيا عندما يبدأ الأعضاء المُنتَمين إليها بنشر تبويقات.", "empty_column.lists": "ليس عندك أية قائمة بعد. سوف تظهر قائمتك هنا إن قمت بإنشاء واحدة.", "empty_column.mutes": "لم تقم بكتم أي مستخدم بعد.", @@ -176,9 +183,9 @@ "error.unexpected_crash.next_steps_addons": "حاول تعطيلهم وإنعاش الصفحة. إن لم ينجح ذلك، يمكنك دائمًا استخدام ماستدون عبر متصفح آخر أو تطبيق أصلي.", "errors.unexpected_crash.copy_stacktrace": "انسخ تتبع الارتباطات إلى الحافظة", "errors.unexpected_crash.report_issue": "الإبلاغ عن خلل", - "follow_recommendations.done": "Done", - "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", - "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", + "follow_recommendations.done": "تم", + "follow_recommendations.heading": "تابع الأشخاص الذين ترغب في رؤية منشوراتهم! إليك بعض الاقتراحات.", + "follow_recommendations.lead": "ستظهر المنشورات من الأشخاص الذين تُتابعتهم بترتيب تسلسلي زمني على صفحتك الرئيسية. لا تخف إذا ارتكبت أي أخطاء، تستطيع إلغاء متابعة أي شخص في أي وقت تريد!", "follow_request.authorize": "ترخيص", "follow_request.reject": "رفض", "follow_requests.unlocked_explanation": "على الرغم من أن حسابك غير مقفل، فإن موظفين الـ{domain} ظنوا أنك قد ترغب في مراجعة طلبات المتابعة من هذه الحسابات يدوياً.", @@ -315,7 +322,7 @@ "notifications.column_settings.show": "اعرِضها في عمود", "notifications.column_settings.sound": "أصدر صوتا", "notifications.column_settings.status": "تبويقات جديدة:", - "notifications.column_settings.unread_markers.category": "Unread notification markers", + "notifications.column_settings.unread_markers.category": "علامات إشعار غير مقروءة", "notifications.filter.all": "الكل", "notifications.filter.boosts": "الترقيات", "notifications.filter.favourites": "المفضلة", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# صوت} other {# أصوات}}", "poll.vote": "صَوّت", "poll.voted": "لقد صوّتت على هذه الإجابة", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "إضافة استطلاع للرأي", "poll_button.remove_poll": "إزالة استطلاع الرأي", "privacy.change": "اضبط خصوصية المنشور", @@ -454,6 +462,7 @@ "upload_form.video_description": "وصف للمعاقين بصريا أو لِذي قِصر السمع", "upload_modal.analyzing_picture": "جارٍ فحص الصورة…", "upload_modal.apply": "طبّق", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "اختر صورة", "upload_modal.description_placeholder": "نصٌّ حكيمٌ لهُ سِرٌّ قاطِعٌ وَذُو شَأنٍ عَظيمٍ مكتوبٌ على ثوبٍ أخضرَ ومُغلفٌ بجلدٍ أزرق", "upload_modal.detect_text": "اكتشف النص مِن الصورة", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 9d3c16d78..89a13246c 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -47,11 +47,16 @@ "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "Asocedió un fallu inesperáu.", "alert.unexpected.title": "¡Meca!", "announcement.announcement": "Anunciu", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per selmana", "boost_modal.combo": "Pues primir {combo} pa saltar esto la próxima vegada", "bundle_column_error.body": "Asocedió daqué malo mentanto se cargaba esti componente.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "¿De xuru que quies desaniciar esti estáu?", "confirmations.delete_list.confirm": "Desaniciar", "confirmations.delete_list.message": "¿De xuru que quies desaniciar dafechu esta llista?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Anubrir tol dominiu", "confirmations.domain_block.message": "¿De xuru xurísimu que quies bloquiar el dominiu {domain} enteru? Na mayoría de casos bloquiar o silenciar dalguna cuenta ye abondo y preferible. Nun vas ver el conteníu d'esi dominiu en nenguna llinia temporal pública o nos avisos, y van desanciase los tos siguidores d'esi dominiu.", "confirmations.logout.confirm": "Zarrar sesión", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# votu} other {# votos}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Amestar una encuesta", "poll_button.remove_poll": "Desaniciar la encuesta", "privacy.change": "Adjust status privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Descripción pa persones con perda auditiva o discapacidá visual", "upload_modal.analyzing_picture": "Analizando la semeya…", "upload_modal.apply": "Aplicar", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Deteutar el testu de la semeya", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index d5f66eeb4..8e3848f54 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -47,11 +47,16 @@ "account.unmute": "Раззаглушаване на @{name}", "account.unmute_notifications": "Раззаглушаване на известия от @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Моля, опитайте отново след {retry_time, time, medium}.", "alert.rate_limited.title": "Скоростта е ограничена", "alert.unexpected.message": "Възникна неочаквана грешка.", "alert.unexpected.title": "Опаа!", "announcement.announcement": "Оповестяване", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} на седмица", "boost_modal.combo": "Можете да натиснете {combo}, за да пропуснете това следващия път", "bundle_column_error.body": "Нещо се обърка при зареждането на този компонент.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Изтриване", "confirmations.delete_list.message": "Сигурни ли сте, че искате да изтриете окончателно този списък?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", "confirmations.logout.confirm": "Излизане", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# глас} other {# гласа}}", "poll.vote": "Гласуване", "poll.voted": "Вие гласувахте за този отговор", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Добавяне на анкета", "poll_button.remove_poll": "Премахване на анкета", "privacy.change": "Adjust status privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Опишете за хора със загуба на слуха или зрително увреждане", "upload_modal.analyzing_picture": "Анализ на снимка…", "upload_modal.apply": "Прилагане", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Избор на изображение", "upload_modal.description_placeholder": "Ах, чудна българска земьо, полюшвай цъфтящи жита", "upload_modal.detect_text": "Откриване на текст от картина", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index dc8984be3..f28e8b110 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -1,26 +1,26 @@ { - "account.account_note_header": "নোট", - "account.add_or_remove_from_list": "তালিকাতে যুক্ত বা অপসারণ করুন", + "account.account_note_header": "বিজ্ঞপ্তি", + "account.add_or_remove_from_list": "তালিকাতে যোগ বা অপসারণ করো", "account.badges.bot": "বট", - "account.badges.group": "গ্রুপ", - "account.block": "@{name} কে ব্লক করুন", - "account.block_domain": "{domain} থেকে সব আড়াল করুন", + "account.badges.group": "দল", + "account.block": "@{name} কে ব্লক করো", + "account.block_domain": "{domain} থেকে সব লুকাও", "account.blocked": "অবরুদ্ধ", "account.browse_more_on_origin_server": "মূল প্রোফাইলটিতে আরও ব্রাউজ করুন", - "account.cancel_follow_request": "অনুসরণ অনুরোধ বাতিল করুন", + "account.cancel_follow_request": "অনুসরণ অনুরোধ বাতিল করো", "account.direct": "@{name} কে সরাসরি বার্তা", "account.disable_notifications": "Stop notifying me when @{name} posts", "account.domain_blocked": "ডোমেন গোপন করুন", "account.edit_profile": "প্রোফাইল পরিবর্তন করুন", "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "নিজের পাতায় দেখান", - "account.follow": "অনুসরণ করুন", + "account.follow": "অনুসরণ", "account.followers": "অনুসরণকারী", - "account.followers.empty": "এই সদস্যকে এখনো কেউ অনুসরণ করে না।.", + "account.followers.empty": "এই ব্যক্তিকে এখনো কেউ অনুসরণ করে না।", "account.followers_counter": "{count, plural,one {{counter} জন অনুসরণকারী } other {{counter} জন অনুসরণকারী}}", "account.following_counter": "{count, plural,one {{counter} জনকে অনুসরণ} other {{counter} জনকে অনুসরণ}}", "account.follows.empty": "এই সদস্য কাওকে এখনো অনুসরণ করেন না.", - "account.follows_you": "আপনাকে অনুসরণ করে", + "account.follows_you": "তোমাকে অনুসরণ করে", "account.hide_reblogs": "@{name}'র সমর্থনগুলি লুকিয়ে ফেলুন", "account.joined": "Joined {date}", "account.last_status": "শেষ সক্রিয় ছিল", @@ -43,15 +43,20 @@ "account.unblock": "@{name} র কার্যকলাপ দেখুন", "account.unblock_domain": "{domain} কে আবার দেখুন", "account.unendorse": "আপনার নিজের পাতায় এটা দেখবেন না", - "account.unfollow": "অনুসরণ না করতে", + "account.unfollow": "অনুসরণ করো না", "account.unmute": "@{name} র কার্যকলাপ আবার দেখুন", "account.unmute_notifications": "@{name} র প্রজ্ঞাপন দেখুন", "account_note.placeholder": "নোট যোগ করতে ক্লিক করুন", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "{retry_time, time, medium} -এর পরে আবার প্রচেষ্টা করুন।", "alert.rate_limited.title": "হার সীমিত", "alert.unexpected.message": "সমস্যা অপ্রত্যাশিত.", "alert.unexpected.title": "ওহো!", "announcement.announcement": "ঘোষণা", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "প্রতি সপ্তাহে {count}", "boost_modal.combo": "পরেরবার আপনি {combo} টিপলে এটি আর আসবে না", "bundle_column_error.body": "এই অংশটি দেখতে যেয়ে কোনো সমস্যা হয়েছে।.", @@ -67,7 +72,7 @@ "column.directory": "প্রোফাইল ব্রাউজ করুন", "column.domain_blocks": "লুকোনো ডোমেনগুলি", "column.favourites": "পছন্দের গুলো", - "column.follow_requests": "অনুসরণের অনুমতি চেয়েছে যারা", + "column.follow_requests": "অনুসরণের অনুমতি অনুরোধকারী", "column.home": "বাড়ি", "column.lists": "তালিকাগুলো", "column.mutes": "যাদের কার্যক্রম দেখা বন্ধ আছে", @@ -113,6 +118,8 @@ "confirmations.delete.message": "আপনি কি নিশ্চিত যে এই লেখাটি মুছে ফেলতে চান ?", "confirmations.delete_list.confirm": "মুছে ফেলুন", "confirmations.delete_list.message": "আপনি কি নিশ্চিত যে আপনি এই তালিকাটি স্থায়িভাবে মুছে ফেলতে চান ?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "এই ডোমেন থেকে সব লুকান", "confirmations.domain_block.message": "আপনি কি সত্যিই সত্যই নিশ্চিত যে আপনি পুরো {domain}'টি ব্লক করতে চান? বেশিরভাগ ক্ষেত্রে কয়েকটি লক্ষ্যযুক্ত ব্লক বা নীরবতা যথেষ্ট এবং পছন্দসই। আপনি কোনও পাবলিক টাইমলাইন বা আপনার বিজ্ঞপ্তিগুলিতে সেই ডোমেন থেকে সামগ্রী দেখতে পাবেন না। সেই ডোমেন থেকে আপনার অনুসরণকারীদের সরানো হবে।", "confirmations.logout.confirm": "প্রস্থান", @@ -124,8 +131,8 @@ "confirmations.redraft.message": "আপনি কি নিশ্চিত এটি মুছে ফেলে এবং আবার সম্পাদন করতে চান ? এটাতে যা পছন্দিত, সমর্থন বা মতামত আছে সেগুলো নতুন লেখার সাথে যুক্ত থাকবে না।", "confirmations.reply.confirm": "মতামত", "confirmations.reply.message": "এখন মতামত লিখতে গেলে আপনার এখন যেটা লিখছেন সেটা মুছে যাবে। আপনি নি নিশ্চিত এটা করতে চান ?", - "confirmations.unfollow.confirm": "অনুসরণ করা বাতিল করতে", - "confirmations.unfollow.message": "আপনি কি নিশ্চিত {name} কে আর অনুসরণ করতে চান না ?", + "confirmations.unfollow.confirm": "অনুসরণ বন্ধ করো", + "confirmations.unfollow.message": "তুমি কি নিশ্চিত {name} কে আর অনুসরণ করতে চাও না?", "conversation.delete": "কথোপকথন মুছে ফেলুন", "conversation.mark_as_read": "পঠিত হিসেবে চিহ্নিত করুন", "conversation.open": "কথপোকথন দেখান", @@ -161,7 +168,7 @@ "empty_column.favourited_statuses": "আপনার পছন্দের কোনো টুট এখনো নেই। আপনি কোনো লেখা পছন্দের হিসেবে চিহ্নিত করলে এখানে পাওয়া যাবে।", "empty_column.favourites": "কেও এখনো এটাকে পছন্দের টুট হিসেবে চিহ্নিত করেনি। যদি করে, তখন তাদের এখানে পাওয়া যাবে।", "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", - "empty_column.follow_requests": "আপনার এখনো কোনো অনুসরণের আবেদন পাঠানো নেই। যদি পাঠায়, এখানে পাওয়া যাবে।", + "empty_column.follow_requests": "তোমার এখনো কোনো অনুসরণের আবেদন পাওনি। যদি কেউ পাঠায়, এখানে পাওয়া যাবে।", "empty_column.hashtag": "এই হেসটাগে এখনো কিছু নেই।", "empty_column.home": "আপনার বাড়ির সময়রেখা এখনো খালি! {public} এ ঘুরে আসুন অথবা অনুসন্ধান বেবহার করে শুরু করতে পারেন এবং অন্য ব্যবহারকারীদের সাথে সাক্ষাৎ করতে পারেন।", "empty_column.home.suggestions": "See some suggestions", @@ -176,7 +183,7 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "স্টেকট্রেস ক্লিপবোর্ডে কপি করুন", "errors.unexpected_crash.report_issue": "সমস্যার প্রতিবেদন করুন", - "follow_recommendations.done": "Done", + "follow_recommendations.done": "সম্পন্ন", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "অনুমতি দিন", @@ -256,7 +263,7 @@ "lists.new.title_placeholder": "তালিকার নতুন শিরোনাম দিতে", "lists.replies_policy.followed": "Any followed user", "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.none": "কেউ না", "lists.replies_policy.title": "Show replies to:", "lists.search": "যাদের অনুসরণ করেন তাদের ভেতরে খুঁজুন", "lists.subheading": "আপনার তালিকা", @@ -265,7 +272,7 @@ "media_gallery.toggle_visible": "দৃশ্যতার অবস্থা বদলান", "missing_indicator.label": "খুঁজে পাওয়া যায়নি", "missing_indicator.sublabel": "জিনিসটা খুঁজে পাওয়া যায়নি", - "mute_modal.duration": "Duration", + "mute_modal.duration": "সময়কাল", "mute_modal.hide_notifications": "এই ব্যবহারকারীর প্রজ্ঞাপন বন্ধ করবেন ?", "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "মোবাইলের আপ্প", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# ভোট} other {# ভোট}}", "poll.vote": "ভোট", "poll.voted": "আপনি এই উত্তরের পক্ষে ভোট দিয়েছেন", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "একটা নির্বাচন যোগ করতে", "poll_button.remove_poll": "নির্বাচন বাদ দিতে", "privacy.change": "লেখার গোপনীয়তা অবস্থা ঠিক করতে", @@ -454,6 +462,7 @@ "upload_form.video_description": "শ্রবণশক্তি হ্রাস বা চাক্ষুষ প্রতিবন্ধী ব্যক্তিদের জন্য বর্ণনা করুন", "upload_modal.analyzing_picture": "চিত্র বিশ্লেষণ করা হচ্ছে…", "upload_modal.apply": "প্রয়োগ করুন", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "ছবি নির্বাচন করুন", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "ছবি থেকে পাঠ্য সনাক্ত করুন", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index b6a2a9292..06fc32095 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -9,10 +9,10 @@ "account.browse_more_on_origin_server": "Browse more on the original profile", "account.cancel_follow_request": "Nullañ ar bedadenn heuliañ", "account.direct": "Kas ur gemennadenn da @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Paouez d'am c'hemenn pa vez toudet gant @{name}", "account.domain_blocked": "Domani berzet", "account.edit_profile": "Aozañ ar profil", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Ma c'hemenn pa vez toudet gant @{name}", "account.endorse": "Lakaat war-wel war ar profil", "account.follow": "Heuliañ", "account.followers": "Heulier·ezed·ien", @@ -22,7 +22,7 @@ "account.follows.empty": "An implijer·ez-mañ na heul den ebet.", "account.follows_you": "Ho heul", "account.hide_reblogs": "Kuzh toudoù rannet gant @{name}", - "account.joined": "Joined {date}", + "account.joined": "Amañ abaoe {date}", "account.last_status": "Oberiantiz zivezhañ", "account.link_verified_on": "Gwiriet eo bet perc'hennidigezh al liamm d'an deiziad-mañ : {date}", "account.locked_info": "Prennet eo ar gon-mañ. Dibab a ra ar perc'henn ar re a c'hall heuliañ anezhi pe anezhañ.", @@ -47,11 +47,16 @@ "account.unmute": "Diguzhat @{name}", "account.unmute_notifications": "Diguzhat kemennoù a @{name}", "account_note.placeholder": "Klikit evit ouzhpenniñ un notenn", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Klaskit en-dro a-benn {retry_time, time, medium}.", "alert.rate_limited.title": "Feur bevennet", "alert.unexpected.message": "Ur fazi dic'hortozet zo degouezhet.", "alert.unexpected.title": "Hopala!", "announcement.announcement": "Kemenn", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} bep sizhun", "boost_modal.combo": "Ar wezh kentañ e c'halliot gwaskañ war {combo} evit tremen hebiou", "bundle_column_error.body": "Degouezhet ez eus bet ur fazi en ur gargañ an elfenn-mañ.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Ha sur oc'h e fell deoc'h dilemel an toud-mañ ?", "confirmations.delete_list.confirm": "Dilemel", "confirmations.delete_list.message": "Ha sur eo hoc'h eus c'hoant da zilemel ar roll-mañ da vat ?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Berzañ an domani a-bezh", "confirmations.domain_block.message": "Ha sur oc'h e fell deoc'h berzañ an {domain} a-bezh? Peurvuiañ eo trawalc'h berzañ pe mudañ un nebeud implijer·ezed·ien. Ne welot danvez ebet o tont eus an domani-mañ. Dilamet e vo ar c'houmanantoù war an domani-mañ.", "confirmations.logout.confirm": "Digevreañ", @@ -176,7 +183,7 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Eilañ ar roudoù diveugañ er golver", "errors.unexpected_crash.report_issue": "Danevellañ ur fazi", - "follow_recommendations.done": "Done", + "follow_recommendations.done": "Graet", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Aotren", @@ -255,18 +262,18 @@ "lists.new.create": "Ouzhpennañ ul listenn", "lists.new.title_placeholder": "Titl nevez al listenn", "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", - "lists.replies_policy.title": "Show replies to:", - "lists.search": "Search among people you follow", + "lists.replies_policy.list": "Izili ar roll", + "lists.replies_policy.none": "Den ebet", + "lists.replies_policy.title": "Diskouez ar respontoù:", + "lists.search": "Klask e-touez tud heuliet ganeoc'h", "lists.subheading": "Ho listennoù", "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "O kargañ...", "media_gallery.toggle_visible": "Toggle visibility", "missing_indicator.label": "Digavet", "missing_indicator.sublabel": "This resource could not be found", - "mute_modal.duration": "Duration", - "mute_modal.hide_notifications": "Hide notifications from this user?", + "mute_modal.duration": "Padelezh", + "mute_modal.hide_notifications": "Kuzhat kemenadennoù eus an implijer-se ?", "mute_modal.indefinite": "Indefinite", "navigation_bar.apps": "Arloadoù pellgomz", "navigation_bar.blocks": "Implijer·ezed·ien berzet", @@ -294,9 +301,9 @@ "notification.favourite": "{name} favourited your status", "notification.follow": "heuliañ a ra {name} ac'hanoc'h", "notification.follow_request": "{name} has requested to follow you", - "notification.mention": "{name} mentioned you", - "notification.own_poll": "Your poll has ended", - "notification.poll": "A poll you have voted in has ended", + "notification.mention": "{name} en/he deus meneget ac'hanoc'h", + "notification.own_poll": "Echu eo ho sontadeg", + "notification.poll": "Ur sontadeg ho deus mouezhet warnañ a zo echuet", "notification.reblog": "{name} boosted your status", "notification.status": "{name} just posted", "notifications.clear": "Skarzhañ ar c'hemennoù", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Mouezhiañ", "poll.voted": "Mouezhiet ho peus evit ar respont-mañ", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Ouzhpennañ ur sontadeg", "poll_button.remove_poll": "Dilemel ar sontadeg", "privacy.change": "Kemmañ gwelidigezh ar statud", @@ -415,30 +423,30 @@ "status.show_less": "Diskouez nebeutoc'h", "status.show_less_all": "Show less for all", "status.show_more": "Diskouez muioc'h", - "status.show_more_all": "Show more for all", + "status.show_more_all": "Diskouez miuoc'h evit an holl", "status.show_thread": "Diskouez ar gaozeadenn", "status.uncached_media_warning": "Dihegerz", "status.unmute_conversation": "Diguzhat ar gaozeadenn", "status.unpin": "Dispilhennañ eus ar profil", "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.header": "Marteze e vefec'h dedenet gant…", "tabs_bar.federated_timeline": "Kevredet", "tabs_bar.home": "Degemer", "tabs_bar.local_timeline": "Lec'hel", "tabs_bar.notifications": "Kemennoù", "tabs_bar.search": "Klask", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.days": "{number, plural,one {# devezh} other {# a zevezhioù}} a chom", + "time_remaining.hours": "{number, plural, one {# eurvezh} other{# eurvezh}} a chom", + "time_remaining.minutes": "{number, plural, one {# munut} other{# a vunutoù}} a chom", "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "time_remaining.seconds": "{number, plural, one {# eilenn} other{# eilenn}} a chom", + "timeline_hint.remote_resource_not_displayed": "{resource} eus servijerien all n'int ket diskouezet.", "timeline_hint.resources.followers": "Heulier·ezed·ien", "timeline_hint.resources.follows": "Heuliañ", "timeline_hint.resources.statuses": "Toudoù koshoc'h", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} den} other {{counter} a zud}} a zo o komz", "trends.trending_now": "Luskad ar mare", - "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "ui.beforeunload": "Kollet e vo ho prell ma kuitit Mastodon.", "units.short.billion": "{count}B", "units.short.million": "{count}M", "units.short.thousand": "{count}K", @@ -446,14 +454,15 @@ "upload_button.label": "Ouzhpennañ ur media", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", - "upload_form.audio_description": "Describe for people with hearing loss", - "upload_form.description": "Describe for the visually impaired", + "upload_form.audio_description": "Diskrivañ evit tud a zo kollet o c'hlev", + "upload_form.description": "Diskrivañ evit tud a zo kollet o gweled", "upload_form.edit": "Aozañ", "upload_form.thumbnail": "Kemmañ ar velvenn", "upload_form.undo": "Dilemel", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_form.video_description": "Diskrivañ evit tud a zo kollet o gweled pe o c'hlev", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Arloañ", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Dibab ur skeudenn", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Dinoiñ testenn diouzh ar skeudenn", @@ -468,8 +477,8 @@ "video.expand": "Expand video", "video.fullscreen": "Skramm a-bezh", "video.hide": "Kuzhat ar video", - "video.mute": "Mute sound", + "video.mute": "Paouez gant ar son", "video.pause": "Pause", - "video.play": "Play", - "video.unmute": "Unmute sound" + "video.play": "Lenn", + "video.unmute": "Lakaat ar son en-dro" } diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 7aac7caef..9434dbcc3 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -46,12 +46,17 @@ "account.unfollow": "Deixa de seguir", "account.unmute": "Treure silenci de @{name}", "account.unmute_notifications": "Activar notificacions de @{name}", - "account_note.placeholder": "Sense comentaris", + "account_note.placeholder": "Fes clic per afegir una nota", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Si us plau torna-ho a provar després de {retry_time, time, medium}.", "alert.rate_limited.title": "Límit de freqüència", "alert.unexpected.message": "S'ha produït un error inesperat.", "alert.unexpected.title": "Vaja!", "announcement.announcement": "Anunci", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per setmana", "boost_modal.combo": "Pots prémer {combo} per saltar-te això el proper cop", "bundle_column_error.body": "S'ha produït un error en carregar aquest component.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Estàs segur que vols suprimir aquest tut?", "confirmations.delete_list.confirm": "Suprimeix", "confirmations.delete_list.message": "Estàs segur que vols suprimir permanentment aquesta llista?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Amaga tot el domini", "confirmations.domain_block.message": "Estàs segur, realment segur que vols bloquejar totalment {domain}? En la majoria dels casos bloquejar o silenciar uns pocs objectius és suficient i preferible. No veuràs contingut d’aquest domini en cap de les línies de temps ni en les notificacions. Els teus seguidors d’aquest domini seran eliminats.", "confirmations.logout.confirm": "Tancar sessió", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vot} other {# vots}}", "poll.vote": "Vota", "poll.voted": "Vas votar per aquesta resposta", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Afegeix una enquesta", "poll_button.remove_poll": "Elimina l'enquesta", "privacy.change": "Ajusta l'estat de privacitat", @@ -454,6 +462,7 @@ "upload_form.video_description": "Descriu per a les persones amb pèrdua auditiva o deficiència visual", "upload_modal.analyzing_picture": "Analitzant imatge…", "upload_modal.apply": "Aplica", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Tria imatge", "upload_modal.description_placeholder": "Jove xef, porti whisky amb quinze glaçons d’hidrogen, coi!", "upload_modal.detect_text": "Detecta el text de l'imatge", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 03df085ca..b8ac9281d 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -47,11 +47,16 @@ "account.unmute": "Ùn piattà più @{name}", "account.unmute_notifications": "Ùn piattà più nutificazione da @{name}", "account_note.placeholder": "Senza cummentariu", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Pruvate ancu dop'à {retry_time, time, medium}.", "alert.rate_limited.title": "Ghjettu limitatu", "alert.unexpected.message": "Un prublemu inaspettatu hè accadutu.", "alert.unexpected.title": "Uups!", "announcement.announcement": "Annunziu", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per settimana", "boost_modal.combo": "Pudete appughjà nant'à {combo} per saltà quessa a prussima volta", "bundle_column_error.body": "C'hè statu un prublemu caricandu st'elementu.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Site sicuru·a che vulete sguassà stu statutu?", "confirmations.delete_list.confirm": "Toglie", "confirmations.delete_list.message": "Site sicuru·a che vulete toglie sta lista?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Piattà tuttu u duminiu", "confirmations.domain_block.message": "Site veramente sicuru·a che vulete piattà tuttu à {domain}? Saria forse abbastanza di bluccà ò piattà alcuni conti da quallà. Ùn viderete più nunda da quallà indè e linee pubbliche o e nutificazione. I vostri abbunati da stu duminiu saranu tolti.", "confirmations.logout.confirm": "Scunnettassi", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# votu} other {# voti}}", "poll.vote": "Vutà", "poll.voted": "Avete vutatu per sta risposta", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Aghjunghje", "poll_button.remove_poll": "Toglie u scandagliu", "privacy.change": "Mudificà a cunfidenzialità di u statutu", @@ -454,6 +462,7 @@ "upload_form.video_description": "Discrizzione per i ciochi o cechi", "upload_modal.analyzing_picture": "Analisi di u ritrattu…", "upload_modal.apply": "Affettà", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Cambià ritrattu", "upload_modal.description_placeholder": "Chì tempi brevi ziu, quandu solfeghji", "upload_modal.detect_text": "Ditettà testu da u ritrattu", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index ca0a34b33..636fbd4ea 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -17,7 +17,7 @@ "account.follow": "Sledovat", "account.followers": "Sledující", "account.followers.empty": "Tohoto uživatele ještě nikdo nesleduje.", - "account.followers_counter": "{count, plural, one {{counter} sledující} few {{counter} sledující} many {{counter} sledujících} other {{counter} sledujících}}", + "account.followers_counter": "{count, plural, one {{counter} Sledující} few {{counter} Sledující} many {{counter} Sledujících} other {{counter} Sledujících}}", "account.following_counter": "{count, plural, one {{counter} Sledovaný} few {{counter} Sledovaní} many {{counter} Sledovaných} other {{counter} Sledovaných}}", "account.follows.empty": "Tento uživatel ještě nikoho nesleduje.", "account.follows_you": "Sleduje vás", @@ -47,11 +47,16 @@ "account.unmute": "Zrušit skrytí @{name}", "account.unmute_notifications": "Zrušit skrytí oznámení od @{name}", "account_note.placeholder": "Klikněte pro přidání poznámky", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Zkuste to prosím znovu za {retry_time, time, medium}.", - "alert.rate_limited.title": "Rychlost omezena", + "alert.rate_limited.title": "Spojení omezena", "alert.unexpected.message": "Objevila se neočekávaná chyba.", "alert.unexpected.title": "Jejda!", "announcement.announcement": "Oznámení", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} za týden", "boost_modal.combo": "Příště můžete pro přeskočení stisknout {combo}", "bundle_column_error.body": "Při načítání této komponenty se něco pokazilo.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Opravdu chcete smazat tento příspěvek?", "confirmations.delete_list.confirm": "Smazat", "confirmations.delete_list.message": "Opravdu chcete tento seznam navždy smazat?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Blokovat celou doménu", "confirmations.domain_block.message": "Opravdu chcete blokovat celou doménu {domain}? Ve většině případů stačí zablokovat nebo skrýt pár konkrétních uživatelů, což také doporučujeme. Z této domény neuvidíte obsah v žádné veřejné časové ose ani v oznámeních. Vaši sledující z této domény budou odstraněni.", "confirmations.logout.confirm": "Odhlásit", @@ -142,7 +149,7 @@ "emoji_button.food": "Jídla a nápoje", "emoji_button.label": "Vložit emoji", "emoji_button.nature": "Příroda", - "emoji_button.not_found": "Žádné emoji! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "Nenalezeny žádné odpovídající emoji", "emoji_button.objects": "Předměty", "emoji_button.people": "Lidé", "emoji_button.recent": "Často používané", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# hlas} few {# hlasy} many {# hlasů} other {# hlasů}}", "poll.vote": "Hlasovat", "poll.voted": "Pro tuto odpověď jste hlasovali", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Přidat anketu", "poll_button.remove_poll": "Odstranit anketu", "privacy.change": "Změnit soukromí příspěvku", @@ -454,6 +462,7 @@ "upload_form.video_description": "Popis pro sluchově či zrakově postižené", "upload_modal.analyzing_picture": "Analyzuji obrázek…", "upload_modal.apply": "Použít", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Vybrat obrázek", "upload_modal.description_placeholder": "Příliš žluťoučký kůň úpěl ďábelské ódy", "upload_modal.detect_text": "Detekovat text z obrázku", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 45820b132..2f8c09014 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -47,11 +47,16 @@ "account.unmute": "Dad-dawelu @{name}", "account.unmute_notifications": "Dad-dawelu hysbysiadau o @{name}", "account_note.placeholder": "Clicio i ychwanegu nodyn", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Ceisiwch eto ar ôl {retry_time, time, medium}.", "alert.rate_limited.title": "Cyfradd gyfyngedig", "alert.unexpected.message": "Digwyddodd gwall annisgwyl.", "alert.unexpected.title": "Wps!", "announcement.announcement": "Cyhoeddiad", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} yr wythnos", "boost_modal.combo": "Mae modd gwasgu {combo} er mwyn sgipio hyn tro nesa", "bundle_column_error.body": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Ydych chi'n sicr eich bod eisiau dileu y tŵt hwn?", "confirmations.delete_list.confirm": "Dileu", "confirmations.delete_list.message": "Ydych chi'n sicr eich bod eisiau dileu y rhestr hwn am byth?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Cuddio parth cyfan", "confirmations.domain_block.message": "A ydych yn hollol, hollol sicr eich bod am flocio y {domain} cyfan? Yn y nifer helaeth o achosion mae blocio neu tawelu ambell gyfrif yn ddigonol ac yn well. Ni fyddwch yn gweld cynnwys o'r parth hwnnw mewn unrhyw ffrydiau cyhoeddus na chwaith yn eich hysbysiadau. Bydd hyn yn cael gwared o'ch dilynwyr o'r parth hwnnw.", "confirmations.logout.confirm": "Allgofnodi", @@ -256,7 +263,7 @@ "lists.new.title_placeholder": "Teitl rhestr newydd", "lists.replies_policy.followed": "Any followed user", "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.none": "Neb", "lists.replies_policy.title": "Show replies to:", "lists.search": "Chwilio ymysg pobl yr ydych yn ei ddilyn", "lists.subheading": "Eich rhestrau", @@ -265,9 +272,9 @@ "media_gallery.toggle_visible": "Toglo gwelededd", "missing_indicator.label": "Heb ei ganfod", "missing_indicator.sublabel": "Ni ellid canfod yr adnodd hwn", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Hyd", "mute_modal.hide_notifications": "Cuddio hysbysiadau rhag y defnyddiwr hwn?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Amhenodol", "navigation_bar.apps": "Apiau symudol", "navigation_bar.blocks": "Defnyddwyr wedi eu blocio", "navigation_bar.bookmarks": "Tudalnodau", @@ -329,7 +336,7 @@ "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.enable": "Galluogi hysbysiadau bwrdd gwaith", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", "picture_in_picture.restore": "Put it back", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# bleidlais} other {# o bleidleisiau}}", "poll.vote": "Pleidleisio", "poll.voted": "Pleidleisioch chi am yr ateb hon", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Ychwanegu pleidlais", "poll_button.remove_poll": "Tynnu pleidlais", "privacy.change": "Addasu preifatrwdd y tŵt", @@ -454,6 +462,7 @@ "upload_form.video_description": "Disgrifio ar gyfer pobl sydd â cholled clyw neu amhariad golwg", "upload_modal.analyzing_picture": "Dadansoddi llun…", "upload_modal.apply": "Gweithredu", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Dewis delwedd", "upload_modal.description_placeholder": "Mae ei phen bach llawn jocs, 'run peth a fy nghot golff, rhai dyddiau", "upload_modal.detect_text": "Canfod testun o'r llun", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 6042840e2..9db5da3eb 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -47,11 +47,16 @@ "account.unmute": "Fjern tavsgjort for @{name}", "account.unmute_notifications": "Fjern tavsgjort for notifikationer fra @{name}", "account_note.placeholder": "Klik for at tilføje notat", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Forsøg igen efter {retry_time, time, medium}.", "alert.rate_limited.title": "Gradsbegrænset", "alert.unexpected.message": "En uventet fejl opstod.", "alert.unexpected.title": "Ups!", "announcement.announcement": "Bekendtgørelse", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} pr. uge", "boost_modal.combo": "Du kan trykke på {combo} for at overspringe dette næste gang", "bundle_column_error.body": "Noget gik galt under indlæsningen af denne komponent.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Sikker på, at du vil slette dette trut?", "confirmations.delete_list.confirm": "Slet", "confirmations.delete_list.message": "Sikker på, at du vil slette denne liste permanent?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Skjul hele domænet", "confirmations.domain_block.message": "Helt sikker på, at du vil blokere hele {domain}-domænet? Oftest vil få, specifikke blokeringer eller tavsgørelser være nok og at fortrække. Du vil ikke se indhold fra domænet på offentlige tidslinjer eller i dine notifikationer. Dine følgere fra domænet fjernes.", "confirmations.logout.confirm": "Log ud", @@ -246,7 +253,7 @@ "lightbox.compress": "Komprimér billedvisningsfelt", "lightbox.expand": "Udvid billedevisningsfelt", "lightbox.next": "Næste", - "lightbox.previous": "Foregående", + "lightbox.previous": "Forrige", "lists.account.add": "Føj til liste", "lists.account.remove": "Fjern fra liste", "lists.delete": "Slet liste", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# stemme} other {# stemmer}}", "poll.vote": "Stem", "poll.voted": "Du stemte for dette svar", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Tilføj en afstemning", "poll_button.remove_poll": "Fjern afstemning", "privacy.change": "Justér trutfortrolighed", @@ -454,6 +462,7 @@ "upload_form.video_description": "Beskrivelse for hørehæmmede eller synshandicappede personer", "upload_modal.analyzing_picture": "Analyserer billede…", "upload_modal.apply": "Anvend", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Vælg billede", "upload_modal.description_placeholder": "En hurtig brun ræv hopper over den dovne hund", "upload_modal.detect_text": "Detektér tekst i billede", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index eabfdd001..edc456992 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -15,7 +15,7 @@ "account.enable_notifications": "Benachrichtige mich wenn @{name} etwas postet", "account.endorse": "Auf Profil hervorheben", "account.follow": "Folgen", - "account.followers": "Folgende", + "account.followers": "Follower", "account.followers.empty": "Diesem Profil folgt noch niemand.", "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Follower}}", "account.following_counter": "{count, plural, one {{counter} Folgender} other {{counter} Folgende}}", @@ -30,7 +30,7 @@ "account.mention": "@{name} erwähnen", "account.moved_to": "{name} ist umgezogen auf:", "account.mute": "@{name} stummschalten", - "account.mute_notifications": "Benachrichtigungen von @{name} verbergen", + "account.mute_notifications": "Benachrichtigungen von @{name} stummschalten", "account.muted": "Stummgeschaltet", "account.never_active": "Nie", "account.posts": "Beiträge", @@ -47,11 +47,16 @@ "account.unmute": "@{name} nicht mehr stummschalten", "account.unmute_notifications": "Benachrichtigungen von @{name} einschalten", "account_note.placeholder": "Notiz durch Klicken hinzufügen", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Bitte versuche es nach {retry_time, time, medium}.", "alert.rate_limited.title": "Anfragelimit überschritten", "alert.unexpected.message": "Ein unerwarteter Fehler ist aufgetreten.", "alert.unexpected.title": "Hoppla!", "announcement.announcement": "Ankündigung", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} pro Woche", "boost_modal.combo": "Drücke {combo}, um dieses Fenster zu überspringen", "bundle_column_error.body": "Etwas ist beim Laden schiefgelaufen.", @@ -113,7 +118,9 @@ "confirmations.delete.message": "Bist du dir sicher, dass du diesen Beitrag löschen möchtest?", "confirmations.delete_list.confirm": "Löschen", "confirmations.delete_list.message": "Bist du dir sicher, dass du diese Liste permanent löschen möchtest?", - "confirmations.domain_block.confirm": "Die ganze Domain verbergen", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", + "confirmations.domain_block.confirm": "Die ganze Domain blockieren", "confirmations.domain_block.message": "Bist du dir wirklich sicher, dass du die ganze Domain {domain} blockieren willst? In den meisten Fällen reichen ein paar gezielte Blockierungen oder Stummschaltungen aus. Du wirst den Inhalt von dieser Domain nicht in irgendwelchen öffentlichen Timelines oder den Benachrichtigungen finden. Deine Folgenden von dieser Domain werden entfernt.", "confirmations.logout.confirm": "Abmelden", "confirmations.logout.message": "Bist du sicher, dass du dich abmelden möchtest?", @@ -339,12 +346,13 @@ "poll.total_votes": "{count, plural, one {# Stimme} other {# Stimmen}}", "poll.vote": "Abstimmen", "poll.voted": "Du hast dafür gestimmt", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Eine Umfrage erstellen", "poll_button.remove_poll": "Umfrage entfernen", "privacy.change": "Sichtbarkeit des Beitrags anpassen", "privacy.direct.long": "Wird an erwähnte Profile gesendet", "privacy.direct.short": "Direktnachricht", - "privacy.private.long": "Beitrag nur an Folgende", + "privacy.private.long": "Nur für Folgende sichtbar", "privacy.private.short": "Nur für Folgende", "privacy.public.long": "Wird in öffentlichen Zeitleisten erscheinen", "privacy.public.short": "Öffentlich", @@ -435,7 +443,7 @@ "timeline_hint.remote_resource_not_displayed": "{resource} von anderen Servern werden nicht angezeigt.", "timeline_hint.resources.followers": "Follower", "timeline_hint.resources.follows": "Folgt", - "timeline_hint.resources.statuses": "Ältere Toots", + "timeline_hint.resources.statuses": "Ältere Beiträge", "trends.counter_by_accounts": "{count, plural, one {{counter} Person redet darüber} other {{counter} Personen reden darüber}}", "trends.trending_now": "In den Trends", "ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.", @@ -454,6 +462,7 @@ "upload_form.video_description": "Beschreibe das Video für Menschen mit einer Hör- oder Sehbehinderung", "upload_modal.analyzing_picture": "Analysiere Bild…", "upload_modal.apply": "Übernehmen", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Bild auswählen", "upload_modal.description_placeholder": "Die heiße Zypernsonne quälte Max und Victoria ja böse auf dem Weg bis zur Küste", "upload_modal.detect_text": "Text aus Bild erkennen", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index 801d5d2dd..0ff7d92aa 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -79,6 +79,49 @@ ], "path": "app/javascript/mastodon/components/account.json" }, + { + "descriptors": [ + { + "defaultMessage": "Loading...", + "id": "loading_indicator.label" + }, + { + "defaultMessage": "Sign-up month", + "id": "admin.dashboard.retention.cohort" + }, + { + "defaultMessage": "New users", + "id": "admin.dashboard.retention.cohort_size" + }, + { + "defaultMessage": "Average", + "id": "admin.dashboard.retention.average" + }, + { + "defaultMessage": "Retention", + "id": "admin.dashboard.retention" + } + ], + "path": "app/javascript/mastodon/components/admin/Retention.json" + }, + { + "descriptors": [ + { + "defaultMessage": "Trending now", + "id": "trends.trending_now" + } + ], + "path": "app/javascript/mastodon/components/admin/Trends.json" + }, + { + "descriptors": [ + { + "defaultMessage": "(unprocessed)", + "id": "attachments_list.unprocessed" + } + ], + "path": "app/javascript/mastodon/components/attachment_list.json" + }, { "descriptors": [ { @@ -290,9 +333,12 @@ }, { "defaultMessage": "You voted for this answer", - "description": "Tooltip of the \"voted\" checkmark in polls", "id": "poll.voted" }, + { + "defaultMessage": "{votes, plural, one {# vote} other {# votes}}", + "id": "poll.votes" + }, { "defaultMessage": "{count, plural, one {# person} other {# people}}", "id": "poll.total_people" @@ -2895,6 +2941,10 @@ "defaultMessage": "Apply", "id": "upload_modal.apply" }, + { + "defaultMessage": "Applying…", + "id": "upload_modal.applying" + }, { "defaultMessage": "A quick brown fox jumps over the lazy dog", "id": "upload_modal.description_placeholder" @@ -2903,6 +2953,14 @@ "defaultMessage": "Choose image", "id": "upload_modal.choose_image" }, + { + "defaultMessage": "You have unsaved changes to the media description or preview, discard them anyway?", + "id": "confirmations.discard_edit_media.message" + }, + { + "defaultMessage": "Discard", + "id": "confirmations.discard_edit_media.confirm" + }, { "defaultMessage": "Describe for people with hearing loss", "id": "upload_form.audio_description" diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 7e6fc095a..10e08cf97 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -47,11 +47,16 @@ "account.unmute": "Διακοπή αποσιώπησης @{name}", "account.unmute_notifications": "Διακοπή αποσιώπησης ειδοποιήσεων του/της @{name}", "account_note.placeholder": "Κλικ για να βάλεις σημείωση", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Παρακαλούμε δοκίμασε ξανά αφού περάσει η {retry_time, time, medium}.", "alert.rate_limited.title": "Περιορισμός συχνότητας", "alert.unexpected.message": "Προέκυψε απροσδόκητο σφάλμα.", "alert.unexpected.title": "Εεπ!", "announcement.announcement": "Ανακοίνωση", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} ανα εβδομάδα", "boost_modal.combo": "Μπορείς να πατήσεις {combo} για να το προσπεράσεις αυτό την επόμενη φορά", "bundle_column_error.body": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Σίγουρα θες να διαγράψεις αυτή τη δημοσίευση;", "confirmations.delete_list.confirm": "Διέγραψε", "confirmations.delete_list.message": "Σίγουρα θες να διαγράψεις οριστικά αυτή τη λίστα;", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Απόκρυψη ολόκληρου του τομέα", "confirmations.domain_block.message": "Σίγουρα θες να μπλοκάρεις ολόκληρο το {domain}; Συνήθως μερικά εστιασμένα μπλοκ ή αποσιωπήσεις επαρκούν και προτιμούνται. Δεν θα βλέπεις περιεχόμενο από αυτό τον κόμβο σε καμία δημόσια ροή, ούτε στις ειδοποιήσεις σου. Όσους ακόλουθους έχεις αυτό αυτό τον κόμβο θα αφαιρεθούν.", "confirmations.logout.confirm": "Αποσύνδεση", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# ψήφος} other {# ψήφοι}}", "poll.vote": "Ψήφισε", "poll.voted": "Ψηφίσατε αυτήν την απάντηση", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Προσθήκη δημοσκόπησης", "poll_button.remove_poll": "Αφαίρεση δημοσκόπησης", "privacy.change": "Προσαρμογή ιδιωτικότητας δημοσίευσης", @@ -454,6 +462,7 @@ "upload_form.video_description": "Περιγραφή για άτομα με προβλήματα ακοής ή όρασης", "upload_modal.analyzing_picture": "Ανάλυση εικόνας…", "upload_modal.apply": "Εφαρμογή", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Επιλογή εικόνας", "upload_modal.description_placeholder": "Λύκος μαύρος και ισχνός του πατέρα του καημός", "upload_modal.detect_text": "Αναγνώριση κειμένου από την εικόνα", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 0c3ce2f62..ebbad2b18 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -47,11 +47,16 @@ "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "Click to add note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Are you sure you want to delete this post?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Block entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "Log out", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Change post privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 2d7af6627..ac1f195b4 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -22,11 +22,11 @@ "account.follows.empty": "Tiu uzanto ankoraŭ ne sekvas iun.", "account.follows_you": "Sekvas vin", "account.hide_reblogs": "Kaŝi diskonigojn de @{name}", - "account.joined": "Joined {date}", + "account.joined": "Kuniĝis {date}", "account.last_status": "Laste aktiva", "account.link_verified_on": "La posedanto de tiu ligilo estis kontrolita je {date}", "account.locked_info": "La privateco de tiu konto estas elektita kiel fermita. La posedanto povas mane akcepti tiun, kiu povas sekvi rin.", - "account.media": "Aŭdovidaĵoj", + "account.media": "Amaskomunikiloj", "account.mention": "Mencii @{name}", "account.moved_to": "{name} moviĝis al:", "account.mute": "Silentigi @{name}", @@ -47,11 +47,16 @@ "account.unmute": "Malsilentigi @{name}", "account.unmute_notifications": "Malsilentigi sciigojn de @{name}", "account_note.placeholder": "Alklaku por aldoni noton", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Bonvolu reprovi post {retry_time, time, medium}.", "alert.rate_limited.title": "Mesaĝkvante limigita", "alert.unexpected.message": "Neatendita eraro okazis.", "alert.unexpected.title": "Ups!", "announcement.announcement": "Anonco", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} semajne", "boost_modal.combo": "Vi povas premi {combo} por preterpasi sekvafoje", "bundle_column_error.body": "Io misfunkciis en la ŝargado de ĉi tiu elemento.", @@ -62,7 +67,7 @@ "bundle_modal_error.retry": "Bonvolu reprovi", "column.blocks": "Blokitaj uzantoj", "column.bookmarks": "Legosignoj", - "column.community": "Loka tempolinio", + "column.community": "Loka templinio", "column.direct": "Rektaj mesaĝoj", "column.directory": "Trarigardi profilojn", "column.domain_blocks": "Blokitaj domajnoj", @@ -73,7 +78,7 @@ "column.mutes": "Silentigitaj uzantoj", "column.notifications": "Sciigoj", "column.pins": "Alpinglitaj mesaĝoj", - "column.public": "Fratara tempolinio", + "column.public": "Fratara templinio", "column_back_button.label": "Reveni", "column_header.hide_settings": "Kaŝi agordojn", "column_header.moveLeft_settings": "Movi kolumnon maldekstren", @@ -113,8 +118,10 @@ "confirmations.delete.message": "Ĉu vi certas, ke vi volas forigi ĉi tiun mesaĝon?", "confirmations.delete_list.confirm": "Forigi", "confirmations.delete_list.message": "Ĉu vi certas, ke vi volas porĉiame forigi ĉi tiun liston?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Bloki la tutan domajnon", - "confirmations.domain_block.message": "Ĉu vi vere, vere certas, ke vi volas tute bloki {domain}? Plej ofte, trafa blokado kaj silentigado sufiĉas kaj preferindas. Vi ne vidos enhavon de tiu domajno en publika tempolinio aŭ en viaj sciigoj. Viaj sekvantoj de tiu domajno estos forigitaj.", + "confirmations.domain_block.message": "Ĉu vi vere, vere certas, ke vi volas tute bloki {domain}? Plej ofte, trafa blokado kaj silentigado sufiĉas kaj preferindas. Vi ne vidos enhavon de tiu domajno en publika templinio aŭ en viaj sciigoj. Viaj sekvantoj de tiu domajno estos forigitaj.", "confirmations.logout.confirm": "Elsaluti", "confirmations.logout.message": "Ĉu vi certas ke vi volas elsaluti?", "confirmations.mute.confirm": "Silentigi", @@ -155,7 +162,7 @@ "empty_column.account_unavailable": "Profilo ne disponebla", "empty_column.blocks": "Vi ankoraŭ ne blokis uzanton.", "empty_column.bookmarked_statuses": "Vi ankoraŭ ne aldonis mesaĝon al viaj legosignoj. Kiam vi aldonos iun, tiu aperos ĉi tie.", - "empty_column.community": "La loka tempolinio estas malplena. Skribu ion por plenigi ĝin!", + "empty_column.community": "La loka templinio estas malplena. Skribu ion por plenigi ĝin!", "empty_column.direct": "Vi ankoraŭ ne havas rektan mesaĝon. Kiam vi sendos aŭ ricevos iun, ĝi aperos ĉi tie.", "empty_column.domain_blocks": "Ankoraŭ neniu domajno estas blokita.", "empty_column.favourited_statuses": "Vi ankoraŭ ne stelumis mesaĝon. Kiam vi stelumos iun, tiu aperos ĉi tie.", @@ -219,12 +226,12 @@ "keyboard_shortcuts.enter": "malfermi mesaĝon", "keyboard_shortcuts.favourite": "stelumi", "keyboard_shortcuts.favourites": "malfermi la liston de stelumoj", - "keyboard_shortcuts.federated": "malfermi la frataran tempolinion", + "keyboard_shortcuts.federated": "Malfermi la frataran templinion", "keyboard_shortcuts.heading": "Klavaraj mallongigoj", - "keyboard_shortcuts.home": "malfermi la hejman tempolinion", + "keyboard_shortcuts.home": "Malfermi la hejman templinion", "keyboard_shortcuts.hotkey": "Rapidklavo", "keyboard_shortcuts.legend": "montri ĉi tiun noton", - "keyboard_shortcuts.local": "malfermi la lokan tempolinion", + "keyboard_shortcuts.local": "Malfermi la lokan templinion", "keyboard_shortcuts.mention": "mencii la aŭtoron", "keyboard_shortcuts.muted": "malfermi la liston de silentigitaj uzantoj", "keyboard_shortcuts.my_profile": "malfermi vian profilon", @@ -271,7 +278,7 @@ "navigation_bar.apps": "Telefonaj aplikaĵoj", "navigation_bar.blocks": "Blokitaj uzantoj", "navigation_bar.bookmarks": "Legosignoj", - "navigation_bar.community_timeline": "Loka tempolinio", + "navigation_bar.community_timeline": "Loka templinio", "navigation_bar.compose": "Skribi novan mesaĝon", "navigation_bar.direct": "Rektaj mesaĝoj", "navigation_bar.discover": "Esplori", @@ -289,7 +296,7 @@ "navigation_bar.personal": "Persone", "navigation_bar.pins": "Alpinglitaj mesaĝoj", "navigation_bar.preferences": "Preferoj", - "navigation_bar.public_timeline": "Fratara tempolinio", + "navigation_bar.public_timeline": "Fratara templinio", "navigation_bar.security": "Sekureco", "notification.favourite": "{name} stelumis vian mesaĝon", "notification.follow": "{name} eksekvis vin", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# voĉdono} other {# voĉdonoj}}", "poll.vote": "Voĉdoni", "poll.voted": "Vi elektis por ĉi tiu respondo", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Aldoni balotenketon", "poll_button.remove_poll": "Forigi balotenketon", "privacy.change": "Agordi mesaĝan privatecon", @@ -346,9 +354,9 @@ "privacy.direct.short": "Rekta", "privacy.private.long": "Videbla nur al viaj sekvantoj", "privacy.private.short": "Nur al sekvantoj", - "privacy.public.long": "Videbla al ĉiuj, afiŝita en publikaj tempolinioj", + "privacy.public.long": "Videbla al ĉiuj, afiŝita en publikaj templinioj", "privacy.public.short": "Publika", - "privacy.unlisted.long": "Videbla al ĉiuj, sed ne en publikaj tempolinioj", + "privacy.unlisted.long": "Videbla al ĉiuj, sed ne en publikaj templinioj", "privacy.unlisted.short": "Nelistigita", "refresh": "Refreŝigu", "regeneration_indicator.label": "Ŝargado…", @@ -422,9 +430,9 @@ "status.unpin": "Depingli de profilo", "suggestions.dismiss": "Forigi la proponon", "suggestions.header": "Vi povus interesiĝi pri…", - "tabs_bar.federated_timeline": "Fratara tempolinio", + "tabs_bar.federated_timeline": "Fratara templinio", "tabs_bar.home": "Hejmo", - "tabs_bar.local_timeline": "Loka tempolinio", + "tabs_bar.local_timeline": "Loka templinio", "tabs_bar.notifications": "Sciigoj", "tabs_bar.search": "Serĉi", "time_remaining.days": "{number, plural, one {# tago} other {# tagoj}} restas", @@ -454,6 +462,7 @@ "upload_form.video_description": "Priskribi por homoj kiuj malfacile aŭdi aŭ vidi", "upload_modal.analyzing_picture": "Bilda analizado…", "upload_modal.apply": "Apliki", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Elekti bildon", "upload_modal.description_placeholder": "Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj", "upload_modal.detect_text": "Detekti tekston de la bildo", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 71ada86ac..08e9564da 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -47,11 +47,16 @@ "account.unmute": "Dejar de silenciar a @{name}", "account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}", "account_note.placeholder": "Hacé clic par agregar una nota", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Por favor, reintentá después de las {retry_time, time, medium}.", "alert.rate_limited.title": "Acción limitada", "alert.unexpected.message": "Ocurrió un error.", "alert.unexpected.title": "¡Epa!", "announcement.announcement": "Anuncio", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Podés hacer clic en {combo} para saltar esto la próxima vez", "bundle_column_error.body": "Algo salió mal al cargar este componente.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "¿Estás seguro que querés eliminar este mensaje?", "confirmations.delete_list.confirm": "Eliminar", "confirmations.delete_list.message": "¿Estás seguro que querés eliminar permanentemente esta lista?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Bloquear dominio entero", "confirmations.domain_block.message": "¿Estás completamente seguro que querés bloquear el {domain} entero? En la mayoría de los casos, unos cuantos bloqueos y silenciados puntuales son suficientes y preferibles. No vas a ver contenido de ese dominio en ninguna de tus líneas temporales o en tus notificaciones. Tus seguidores de ese dominio serán quitados.", "confirmations.logout.confirm": "Cerrar sesión", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# voto} other {# votos}}", "poll.vote": "Votar", "poll.voted": "Votaste esta opción", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Agregar encuesta", "poll_button.remove_poll": "Quitar encuesta", "privacy.change": "Configurar privacidad del mensaje", @@ -454,6 +462,7 @@ "upload_form.video_description": "Agregá una descripción para personas con dificultades auditivas o visuales", "upload_modal.analyzing_picture": "Analizando imagen…", "upload_modal.apply": "Aplicar", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Elegir imagen", "upload_modal.description_placeholder": "El veloz murciélago hindú comía feliz cardillo y kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja.", "upload_modal.detect_text": "Detectar texto de la imagen", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index f0fbee142..ffd159c02 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -47,11 +47,16 @@ "account.unmute": "Dejar de silenciar a @{name}", "account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}", "account_note.placeholder": "Clic para añadir nota", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Por favor reintente después de {retry_time, time, medium}.", "alert.rate_limited.title": "Tarifa limitada", "alert.unexpected.message": "Hubo un error inesperado.", "alert.unexpected.title": "¡Ups!", "announcement.announcement": "Anuncio", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez", "bundle_column_error.body": "Algo salió mal al cargar este componente.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "¿Estás seguro de que quieres borrar este toot?", "confirmations.delete_list.confirm": "Eliminar", "confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Ocultar dominio entero", "confirmations.domain_block.message": "¿Seguro de que quieres bloquear al dominio {domain} entero? En general unos cuantos bloqueos y silenciados concretos es suficiente y preferible.", "confirmations.logout.confirm": "Cerrar sesión", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# voto} other {# votos}}", "poll.vote": "Votar", "poll.voted": "Has votado a favor de esta respuesta", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Añadir una encuesta", "poll_button.remove_poll": "Eliminar encuesta", "privacy.change": "Ajustar privacidad", @@ -424,7 +432,7 @@ "suggestions.header": "Es posible que te interese…", "tabs_bar.federated_timeline": "Federado", "tabs_bar.home": "Inicio", - "tabs_bar.local_timeline": "Local", + "tabs_bar.local_timeline": "Reciente", "tabs_bar.notifications": "Notificaciones", "tabs_bar.search": "Buscar", "time_remaining.days": "{number, plural, one {# día restante} other {# días restantes}}", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describir para personas con problemas auditivos o visuales", "upload_modal.analyzing_picture": "Analizando imagen…", "upload_modal.apply": "Aplicar", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Elegir imagen", "upload_modal.description_placeholder": "Un rápido zorro marrón salta sobre el perro perezoso", "upload_modal.detect_text": "Detectar texto de la imagen", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index fa0838a31..058d6f977 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -47,11 +47,16 @@ "account.unmute": "Dejar de silenciar a @{name}", "account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}", "account_note.placeholder": "Clic para añadir nota", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Por favor reintente después de {retry_time, time, medium}.", "alert.rate_limited.title": "Tarifa limitada", "alert.unexpected.message": "Hubo un error inesperado.", "alert.unexpected.title": "¡Ups!", "announcement.announcement": "Anuncio", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez", "bundle_column_error.body": "Algo salió mal al cargar este componente.", @@ -86,7 +91,7 @@ "community.column_settings.media_only": "Solo media", "community.column_settings.remote_only": "Solo remoto", "compose_form.direct_message_warning": "Esta nueva publicación solo será enviada a los usuarios mencionados.", - "compose_form.direct_message_warning_learn_more": "Aprender mas", + "compose_form.direct_message_warning_learn_more": "Aprender más", "compose_form.hashtag_warning": "Esta publicación no se mostrará bajo ningún hashtag porque no está listada. Sólo las publicaciones públicas se pueden buscar por hashtag.", "compose_form.lock_disclaimer": "Tu cuenta no está {locked}. Todos pueden seguirte para ver tus publicaciones solo para seguidores.", "compose_form.lock_disclaimer.lock": "bloqueado", @@ -98,10 +103,10 @@ "compose_form.poll.switch_to_multiple": "Modificar encuesta para permitir múltiples opciones", "compose_form.poll.switch_to_single": "Modificar encuesta para permitir una única opción", "compose_form.publish": "Tootear", - "compose_form.publish_loud": "¡{publish}!", - "compose_form.sensitive.hide": "Marcar multimedia como sensible", - "compose_form.sensitive.marked": "Material marcado como sensible", - "compose_form.sensitive.unmarked": "Material no marcado como sensible", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "{count, plural, one {Marcar material como sensible} other {Marcar material como sensible}}", + "compose_form.sensitive.marked": "{count, plural, one {Material marcado como sensible} other {Material marcado como sensible}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Material no marcado como sensible} other {Material no marcado como sensible}}", "compose_form.spoiler.marked": "Texto oculto tras la advertencia", "compose_form.spoiler.unmarked": "Texto no oculto", "compose_form.spoiler_placeholder": "Advertencia de contenido", @@ -113,6 +118,8 @@ "confirmations.delete.message": "¿Estás seguro de que quieres borrar esta publicación?", "confirmations.delete_list.confirm": "Eliminar", "confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Ocultar dominio entero", "confirmations.domain_block.message": "¿Seguro de que quieres bloquear al dominio {domain} entero? En general unos cuantos bloqueos y silenciados concretos es suficiente y preferible.", "confirmations.logout.confirm": "Cerrar sesión", @@ -146,7 +153,7 @@ "emoji_button.objects": "Objetos", "emoji_button.people": "Gente", "emoji_button.recent": "Usados frecuentemente", - "emoji_button.search": "Buscar…", + "emoji_button.search": "Buscar...", "emoji_button.search_results": "Resultados de búsqueda", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viajes y lugares", @@ -163,7 +170,7 @@ "empty_column.follow_recommendations": "Parece que no se ha podido generar ninguna sugerencia para ti. Puedes probar a buscar a gente que quizá conozcas o explorar los hashtags que están en tendencia.", "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.", "empty_column.hashtag": "No hay nada en este hashtag aún.", - "empty_column.home": "No estás siguiendo a nadie aún. Visita {public} o haz búsquedas para empezar y conocer gente nueva.", + "empty_column.home": "¡Tu línea temporal está vacía! Sigue a más personas para rellenarla. {suggestions}", "empty_column.home.suggestions": "Ver algunas sugerencias", "empty_column.list": "No hay nada en esta lista aún. Cuando miembros de esta lista publiquen nuevos estatus, estos aparecerán qui.", "empty_column.lists": "No tienes ninguna lista. cuando crees una, se mostrará aquí.", @@ -210,7 +217,7 @@ "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", "keyboard_shortcuts.back": "volver atrás", "keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados", - "keyboard_shortcuts.boost": "retootear", + "keyboard_shortcuts.boost": "Retootear", "keyboard_shortcuts.column": "enfocar un estado en una de las columnas", "keyboard_shortcuts.compose": "enfocar el área de texto de redacción", "keyboard_shortcuts.description": "Descripción", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# voto} other {# votos}}", "poll.vote": "Votar", "poll.voted": "Has votado a favor de esta respuesta", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Añadir una encuesta", "poll_button.remove_poll": "Eliminar encuesta", "privacy.change": "Ajustar privacidad", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describir para personas con problemas auditivos o visuales", "upload_modal.analyzing_picture": "Analizando imagen…", "upload_modal.apply": "Aplicar", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Elegir imagen", "upload_modal.description_placeholder": "Un rápido zorro marrón salta sobre el perro perezoso", "upload_modal.detect_text": "Detectar texto de la imagen", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index dba0e3b20..e71e56dee 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -47,11 +47,16 @@ "account.unmute": "Ära vaigista @{name}", "account.unmute_notifications": "Ära vaigista teateid kasutajalt @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Palun proovi uuesti pärast {retry_time, time, medium}.", "alert.rate_limited.title": "Piiratud", "alert.unexpected.message": "Tekkis ootamatu viga.", "alert.unexpected.title": "Oih!", "announcement.announcement": "Teadaanne", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} nädalas", "boost_modal.combo": "Võite vajutada {combo}, et see järgmine kord vahele jätta", "bundle_column_error.body": "Midagi läks valesti selle komponendi laadimisel.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Olete kindel, et soovite selle staatuse kustutada?", "confirmations.delete_list.confirm": "Kustuta", "confirmations.delete_list.message": "Olete kindel, et soovite selle nimekirja püsivalt kustutada?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Peida terve domeen", "confirmations.domain_block.message": "Olete ikka päris kindel, et soovite blokeerida terve {domain}? Enamikul juhtudel piisab mõnest sihitud blokist või vaigistusest, mis on eelistatav. Te ei näe selle domeeni sisu üheski avalikus ajajoones või teadetes. Teie jälgijad sellest domeenist eemaldatakse.", "confirmations.logout.confirm": "Välju", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# hääl} other {# hääli}}", "poll.vote": "Hääleta", "poll.voted": "Teie hääletasite selle poolt", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Lisa küsitlus", "poll_button.remove_poll": "Eemalda küsitlus", "privacy.change": "Muuda staatuse privaatsust", @@ -454,6 +462,7 @@ "upload_form.video_description": "Kirjelda kuulmis- või nägemispuudega inimeste jaoks", "upload_modal.analyzing_picture": "Analüüsime pilti…", "upload_modal.apply": "Rakenda", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "Kiire pruun rebane hüppab üle laisa koera", "upload_modal.detect_text": "Tuvasta teksti pildilt", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 8970c7940..b457b7d45 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -47,11 +47,16 @@ "account.unmute": "Desmututu @{name}", "account.unmute_notifications": "Desmututu @{name}(r)en jakinarazpenak", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Saiatu {retry_time, time, medium} barru.", "alert.rate_limited.title": "Abiadura mugatua", "alert.unexpected.message": "Ustekabeko errore bat gertatu da.", "alert.unexpected.title": "Ene!", "announcement.announcement": "Iragarpena", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} asteko", "boost_modal.combo": "{combo} sakatu dezakezu hurrengoan hau saltatzeko", "bundle_column_error.body": "Zerbait okerra gertatu da osagai hau kargatzean.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Ziur bidalketa hau ezabatu nahi duzula?", "confirmations.delete_list.confirm": "Ezabatu", "confirmations.delete_list.message": "Ziur behin betiko ezabatu nahi duzula zerrenda hau?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Ezkutatu domeinu osoa", "confirmations.domain_block.message": "Ziur, erabat ziur, {domain} domeinu osoa blokeatu nahi duzula? Gehienetan gutxi batzuk blokeatu edo mututzearekin nahikoa da. Ez duzu domeinu horretako edukirik ikusiko denbora lerroetan edo jakinarazpenetan. Domeinu horretako zure jarraitzaileak kenduko dira ere.", "confirmations.logout.confirm": "Amaitu saioa", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {boto #} other {# boto}}", "poll.vote": "Bozkatu", "poll.voted": "Erantzun honi eman diozu botoa", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Gehitu inkesta bat", "poll_button.remove_poll": "Kendu inkesta", "privacy.change": "Aldatu bidalketaren pribatutasuna", @@ -454,6 +462,7 @@ "upload_form.video_description": "Deskribatu entzumen galera edo ikusmen urritasuna duten pertsonentzat", "upload_modal.analyzing_picture": "Irudia aztertzen…", "upload_modal.apply": "Aplikatu", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Aukeratu irudia", "upload_modal.description_placeholder": "Vaudeville itxurako filmean yogi ñaño bat jipoitzen dute Quebec-en whiski truk", "upload_modal.detect_text": "Antzeman testua iruditik", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 59b512591..c0582da74 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -3,93 +3,98 @@ "account.add_or_remove_from_list": "افزودن یا برداشتن از فهرست‌ها", "account.badges.bot": "ربات", "account.badges.group": "گروه", - "account.block": "مسدودسازی @{name}", - "account.block_domain": "بستن دامنه {domain}", - "account.blocked": "مسدود", + "account.block": "مسدود کردن @{name}", + "account.block_domain": "مسدود کردن دامنهٔ {domain}", + "account.blocked": "مسدود شده", "account.browse_more_on_origin_server": "مرور بیش‌تر روی نمایهٔ اصلی", - "account.cancel_follow_request": "لغو درخواست پیگیری", - "account.direct": "پیام خصوصی به @{name}", + "account.cancel_follow_request": "لغو درخواست پی‌گیری", + "account.direct": "پیام مستقیم به @{name}", "account.disable_notifications": "آگاهی به من هنگام فرستادن‌های @{name} پایان یابد", - "account.domain_blocked": "دامنه بسته شد", + "account.domain_blocked": "دامنه مسدود شد", "account.edit_profile": "ویرایش نمایه", - "account.enable_notifications": "آگاهی هنگام ارسال‌های @{name}", + "account.enable_notifications": "هنگام فرسته‌های @{name} مرا آگاه کن", "account.endorse": "معرّفی در نمایه", - "account.follow": "پی بگیرید", - "account.followers": "پی‌گیران", - "account.followers.empty": "هنوز کسی پیگیر این کاربر نیست.", - "account.followers_counter": "{count, plural, one {{counter} پی‌گیر} other {{counter} پی‌گیر}}", - "account.following_counter": "{count, plural, other {{counter} پی می‌گیرد}}", - "account.follows.empty": "این کاربر هنوز پیگیر کسی نیست.", - "account.follows_you": "پیگیر شماست", - "account.hide_reblogs": "نهفتن بازبوق‌های @{name}", + "account.follow": "پی‌گیری", + "account.followers": "پی‌گیرندگان", + "account.followers.empty": "هنوز کسی این کاربر را پی‌گیری نمی‌کند.", + "account.followers_counter": "{count, plural, one {{counter} پی‌گیرنده} other {{counter} پی‌گیرنده}}", + "account.following_counter": "{count, plural, one {{counter} پی‌گرفته} other {{counter} پی‌گرفته}}", + "account.follows.empty": "این کاربر هنوز پی‌گیر کسی نیست.", + "account.follows_you": "پی‌گیر شماست", + "account.hide_reblogs": "نهفتن تقویت‌های @{name}", "account.joined": "پیوسته از {date}", - "account.last_status": "آخرین فعالیت", + "account.last_status": "آخرین فعّالیت", "account.link_verified_on": "مالکیت این پیوند در {date} بررسی شد", - "account.locked_info": "این حساب خصوصی است. صاحبش تصمیم می‌گیرد که چه کسی بتواند پیگیرش باشد.", + "account.locked_info": "این حساب خصوصی است. صاحبش تصمیم می‌گیرد که چه کسی پی‌گیرش باشد.", "account.media": "رسانه", "account.mention": "نام‌بردن از @{name}", "account.moved_to": "{name} منتقل شده به:", "account.mute": "خموشاندن @{name}", - "account.mute_notifications": "خموشاندن اعلان‌ها از @{name}", + "account.mute_notifications": "خموشاندن آگاهی‌ها از @{name}", "account.muted": "خموش", "account.never_active": "هرگز", - "account.posts": "بوق", - "account.posts_with_replies": "نوشته‌ها و پاسخ‌ها", + "account.posts": "فرسته", + "account.posts_with_replies": "فرسته‌ها و پاسخ‌ها", "account.report": "گزارش @{name}", - "account.requested": "منتظر پذیرش. برای لغو درخواست پی‌گیری کلیک کنید", + "account.requested": "منتظر پذیرش است. برای لغو درخواست پی‌گیری کلیک کنید", "account.share": "هم‌رسانی نمایهٔ @{name}", - "account.show_reblogs": "نمایش بازبوق‌های @{name}", - "account.statuses_counter": "{count, plural, one {{counter} بوق} other {{counter} بوق}}", - "account.unblock": "رفع انسداد @{name}", - "account.unblock_domain": "گشودن دامنه {domain}", + "account.show_reblogs": "نمایش تقویت‌های @{name}", + "account.statuses_counter": "{count, plural, one {{counter} فرسته} other {{counter} فرسته}}", + "account.unblock": "رفع مسدودیت @{name}", + "account.unblock_domain": "رفع مسدودیت دامنهٔ {domain}", "account.unendorse": "معرّفی نکردن در نمایه", - "account.unfollow": "پایان پیگیری", - "account.unmute": "رفع خموشی @{name}", - "account.unmute_notifications": "رفع خموشی اعلان‌ها از @{name}", - "account_note.placeholder": "نظری فراهم نشده", + "account.unfollow": "ناپی‌گیری", + "account.unmute": "ناخموشی @{name}", + "account.unmute_notifications": "ناخموشی آگاهی‌ها از @{name}", + "account_note.placeholder": "برای افزودن یادداشت کلیک کنید", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "لطفاً پس از {retry_time, time, medium} دوباره بیازمایید.", "alert.rate_limited.title": "محدودیت تعداد", "alert.unexpected.message": "خطایی غیرمنتظره رخ داد.", "alert.unexpected.title": "ای وای!", "announcement.announcement": "اعلامیه", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} در هفته", "boost_modal.combo": "دکمهٔ {combo} را بزنید تا دیگر این را نبینید", - "bundle_column_error.body": "هنگام بازکردن این بخش خطایی رخ داد.", + "bundle_column_error.body": "هنگام بارگزاری این بخش خطایی رخ داد.", "bundle_column_error.retry": "تلاش دوباره", "bundle_column_error.title": "خطای شبکه", "bundle_modal_error.close": "بستن", - "bundle_modal_error.message": "هنگام بازکردن این بخش خطایی رخ داد.", + "bundle_modal_error.message": "هنگام بارگزاری این بخش خطایی رخ داد.", "bundle_modal_error.retry": "تلاش دوباره", - "column.blocks": "کاربران مسدود", + "column.blocks": "کاربران مسدود شده", "column.bookmarks": "نشانک‌ها", - "column.community": "نوشته‌های محلی", - "column.direct": "پیام‌های خصوصی", + "column.community": "خط زمانی محلّی", + "column.direct": "پیام‌های مستقیم", "column.directory": "مرور نمایه‌ها", - "column.domain_blocks": "دامنه‌های بسته", + "column.domain_blocks": "دامنه‌های مسدود شده", "column.favourites": "پسندیده‌ها", - "column.follow_requests": "درخواست‌های پیگیری", + "column.follow_requests": "درخواست‌های پی‌گیری", "column.home": "خانه", "column.lists": "فهرست‌ها", "column.mutes": "کاربران خموش", - "column.notifications": "آگهداد", - "column.pins": "بوق‌های ثابت", - "column.public": "نوشته‌های همه‌جا", + "column.notifications": "آگاهی‌ها", + "column.pins": "فرسته‌های سنجاق‌شده", + "column.public": "خط زمانی همگانی", "column_back_button.label": "بازگشت", "column_header.hide_settings": "نهفتن تنظیمات", - "column_header.moveLeft_settings": "انتقال ستون به راست", - "column_header.moveRight_settings": "انتقال ستون به چپ", - "column_header.pin": "ثابت‌کردن", + "column_header.moveLeft_settings": "جابه‌جایی ستون به چپ", + "column_header.moveRight_settings": "جابه‌جایی ستون به راست", + "column_header.pin": "سنجاق‌کردن", "column_header.show_settings": "نمایش تنظیمات", - "column_header.unpin": "رهاکردن", + "column_header.unpin": "برداشتن سنجاق", "column_subheading.settings": "تنظیمات", "community.column_settings.local_only": "فقط محلّی", "community.column_settings.media_only": "فقط رسانه", "community.column_settings.remote_only": "تنها دوردست", - "compose_form.direct_message_warning": "این بوق تنها به کاربرانی که از آن‌ها نام برده شده فرستاده خواهد شد.", + "compose_form.direct_message_warning": "این فرسته تنها به کاربرانی که از آن‌ها نام برده شده فرستاده خواهد شد.", "compose_form.direct_message_warning_learn_more": "بیشتر بدانید", - "compose_form.hashtag_warning": "از آن‌جا که این بوق فهرست‌نشده است، در نتایج جست‌وجوی هشتگ‌ها پیدا نخواهد شد. تنها بوق‌های عمومی را می‌توان با جست‌وجوی هشتگ یافت.", - "compose_form.lock_disclaimer": "حسابتان {locked} نیست. هر کسی می‌تواند پیگیرتان شده و فرسته‌های ویژهٔ پیگیرانتان را ببیند.", - "compose_form.lock_disclaimer.lock": "قفل", + "compose_form.hashtag_warning": "از آن‌جا که این فرسته فهرست‌نشده است، در نتایج جست‌وجوی برچسب‌ها پیدا نخواهد شد. تنها فرسته‌های عمومی را می‌توان با جست‌وجوی برچسب یافت.", + "compose_form.lock_disclaimer": "حسابتان {locked} نیست. هر کسی می‌تواند پی‌گیرتان شده و فرسته‌های ویژهٔ پی‌گیرانتان را ببیند.", + "compose_form.lock_disclaimer.lock": "قفل‌شده", "compose_form.placeholder": "تازه چه خبر؟", "compose_form.poll.add_option": "افزودن گزینه", "compose_form.poll.duration": "مدت نظرسنجی", @@ -99,33 +104,35 @@ "compose_form.poll.switch_to_single": "تبدیل به نظرسنجی تک‌گزینه‌ای", "compose_form.publish": "بوق", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "علامت‌گذاری رسانه به عنوان حساس", - "compose_form.sensitive.marked": "رسانه به عنوان حساس علامت‌گذاری شده", - "compose_form.sensitive.unmarked": "رسانه به عنوان حساس علامت‌گذاری نشده", - "compose_form.spoiler.marked": "نوشته پشت هشدار پنهان است", - "compose_form.spoiler.unmarked": "نوشته پنهان نیست", + "compose_form.sensitive.hide": "{count, plural, one {علامت‌گذاری رسانه به عنوان حساس} other {علامت‌گذاری رسانه‌ها به عنوان حساس}}", + "compose_form.sensitive.marked": "{count, plural, one {رسانه به عنوان حساس علامت‌گذاری شد} other {رسانه‌ها به عنوان حساس علامت‌گذاری شدند}}", + "compose_form.sensitive.unmarked": "{count, plural, one {رسانه به عنوان حساس علامت‌گذاری نشد} other {رسانه‌ها به عنوان حساس علامت‌گذاری نشدند}}", + "compose_form.spoiler.marked": "برداشتن هشدار محتوا", + "compose_form.spoiler.unmarked": "افزودن هشدار محتوا", "compose_form.spoiler_placeholder": "هشدارتان را این‌جا بنویسید", - "confirmation_modal.cancel": "بی‌خیال", - "confirmations.block.block_and_report": "مسدودسازی و گزارش", - "confirmations.block.confirm": "مسدود کن", + "confirmation_modal.cancel": "لغو", + "confirmations.block.block_and_report": "مسدود کردن و گزارش", + "confirmations.block.confirm": "مسدود کردن", "confirmations.block.message": "مطمئنید که می‌خواهید {name} را مسدود کنید؟", - "confirmations.delete.confirm": "پاک کن", - "confirmations.delete.message": "آیا مطمئنید که می‌خواهید این بوق را پاک کنید؟", - "confirmations.delete_list.confirm": "پاک کن", - "confirmations.delete_list.message": "مطمئنید می‌خواهید این فهرست را برای همیشه پاک کنید؟", - "confirmations.domain_block.confirm": "نهفتن تمام دامنه", - "confirmations.domain_block.message": "آیا جدی جدی می‌خواهید تمام دامنهٔ {domain} را مسدود کنید؟ در بیشتر موارد مسدودسازی یا خموشاندن چند حساب خاص کافی است و توصیه می‌شود. پس از این کار شما هیچ نوشته‌ای را از این دامنه در فهرست نوشته‌های عمومی یا اعلان‌هایتان نخواهید دید. پیگیرانتان از این دامنه هم حذف خواهند شد.", + "confirmations.delete.confirm": "حذف", + "confirmations.delete.message": "آیا مطمئنید که می‌خواهید این فرسته را حذف کنید؟", + "confirmations.delete_list.confirm": "حذف", + "confirmations.delete_list.message": "مطمئنید می‌خواهید این فهرست را برای همیشه حذف کنید؟", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", + "confirmations.domain_block.confirm": "مسدود کردن تمام دامنه", + "confirmations.domain_block.message": "آیا جدی جدی می‌خواهید تمام دامنهٔ {domain} را مسدود کنید؟ در بیشتر موارد مسدود کردن یا خموشاندن چند حساب خاص کافی است و توصیه می‌شود. پس از این کار شما هیچ محتوایی را از این دامنه در خط زمانی عمومی یا آگاهی‌هایتان نخواهید دید. پی‌گیرانتان از این دامنه هم برداشته خواهند شد.", "confirmations.logout.confirm": "خروج از حساب", "confirmations.logout.message": "مطمئنید می‌خواهید خارج شوید؟", - "confirmations.mute.confirm": "خموشاندن", - "confirmations.mute.explanation": "این کار فرسته‌های آن‌ها و فرسته‌هایی را که از آن‌ها نام برده پنهان می‌کند، ولی آن‌ها همچنان اجازه دارند فرسته‌های شما را ببینند و شما را پی بگیرند.", + "confirmations.mute.confirm": "خموش", + "confirmations.mute.explanation": "این کار فرسته‌های آن‌ها و فرسته‌هایی را که از آن‌ها نام برده پنهان می‌کند، ولی آن‌ها همچنان اجازه دارند فرسته‌های شما را ببینند و شما را پی‌گیری کنند.", "confirmations.mute.message": "مطمئنید می‌خواهید {name} را بخموشانید؟", - "confirmations.redraft.confirm": "پاک‌کردن و بازنویسی", - "confirmations.redraft.message": "مطمئنید که می‌خواهید این بوق را پاک کنید و از نو بنویسید؟ با این کار بازبوق‌ها و پسندهای آن از دست می‌رود و پاسخ‌ها به آن بی‌مرجع می‌شود.", + "confirmations.redraft.confirm": "حذف و بازنویسی", + "confirmations.redraft.message": "مطمئنید که می‌خواهید این فرسته را حذف کنید و از نو بنویسید؟ با این کار تقویت‌ها و پسندهای آن از دست می‌رود و پاسخ‌ها به آن بی‌مرجع می‌شود.", "confirmations.reply.confirm": "پاسخ", "confirmations.reply.message": "اگر الان پاسخ دهید، چیزی که در حال نوشتنش بودید پاک خواهد شد. می‌خواهید ادامه دهید؟", - "confirmations.unfollow.confirm": "پایان پیگیری", - "confirmations.unfollow.message": "مطمئنید که می‌خواهید به پیگیری از {name} پایان دهید؟", + "confirmations.unfollow.confirm": "ناپی‌گیری", + "confirmations.unfollow.message": "مطمئنید که می‌خواهید به پی‌گیری از {name} پایان دهید؟", "conversation.delete": "حذف گفتگو", "conversation.mark_as_read": "علامت‌گذاری به عنوان خوانده شده", "conversation.open": "دیدن گفتگو", @@ -134,7 +141,7 @@ "directory.local": "تنها از {domain}", "directory.new_arrivals": "تازه‌واردان", "directory.recently_active": "کاربران فعال اخیر", - "embed.instructions": "برای جاگذاری این بوق در سایت خودتان، کد زیر را کپی کنید.", + "embed.instructions": "برای جاگذاری این فرسته در سایت خودتان، کد زیر را کپی کنید.", "embed.preview": "این گونه دیده خواهد شد:", "emoji_button.activity": "فعالیت", "emoji_button.custom": "سفارشی", @@ -142,34 +149,34 @@ "emoji_button.food": "غذا و نوشیدنی", "emoji_button.label": "افزودن شکلک", "emoji_button.nature": "طبیعت", - "emoji_button.not_found": "این‌جا شکلکی نیست!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "شکلک منطبقی یافت نشد", "emoji_button.objects": "اشیا", "emoji_button.people": "مردم", "emoji_button.recent": "پراستفاده", - "emoji_button.search": "جستجو...", - "emoji_button.search_results": "نتایج جستجو", + "emoji_button.search": "جست‌وجو...", + "emoji_button.search_results": "نتایج جست‌وجو", "emoji_button.symbols": "نمادها", "emoji_button.travel": "سفر و مکان", "empty_column.account_suspended": "حساب معلق شد", - "empty_column.account_timeline": "هیچ بوقی این‌جا نیست!", + "empty_column.account_timeline": "هیچ فرسته‌ای این‌جا نیست!", "empty_column.account_unavailable": "نمایهٔ موجود نیست", "empty_column.blocks": "هنوز کسی را مسدود نکرده‌اید.", - "empty_column.bookmarked_statuses": "هنوز هیچ بوق نشان‌شده‌ای ندارید. وقتی بوقی را نشان‌کنید، این‌جا دیده خواهد شد.", - "empty_column.community": "فهرست نوشته‌های محلی خالی است. چیزی بنویسید تا چرخش بچرخد!", - "empty_column.direct": "هنوز هیچ پیام مستقیمی ندارید. هروقت چنین پیامی بگیرید یا بفرستید این‌جا نمایش خواهد یافت.", - "empty_column.domain_blocks": "هنوز هیچ دامنه‌ای پنهان نشده است.", - "empty_column.favourited_statuses": "شما هنوز هیچ بوقی را نپسندیده‌اید. وقتی بوقی را بپسندید، این‌جا نمایش خواهد یافت.", - "empty_column.favourites": "هنوز هیچ کسی این بوق را نپسندیده است. وقتی کسی آن را بپسندد، نامش این‌جا نمایش خواهد یافت.", - "empty_column.follow_recommendations": "ظاهرا هیچ پیشنهادی برای شما نمی‌توانیم تولید کنیم. می‌توانید از امکان جستجو برای یافتن افرادی که ممکن است بشناسید و یا کاوش میان هشتگ‌های داغ استفاده کنید.", - "empty_column.follow_requests": "شما هنوز هیچ درخواست پیگیری‌ای ندارید. وقتی چنین درخواستی بگیرید، این‌جا نمایش خواهد یافت.", + "empty_column.bookmarked_statuses": "هنوز هیچ فرستهٔ نشان‌شده‌ای ندارید. هنگامی که فرسته‌ای را نشان‌کنید، این‌جا نشان داده خواهد شد.", + "empty_column.community": "خط زمانی محلّی خالی است. چیزی بنویسید تا چرخش بچرخد!", + "empty_column.direct": "هنوز هیچ پیام مستقیمی ندارید. هنگامی که چنین پیامی بگیرید یا بفرستید این‌جا نشان داده خواهد شد.", + "empty_column.domain_blocks": "هنوز هیچ دامنه‌ای مسدود نشده است.", + "empty_column.favourited_statuses": "شما هنوز هیچ فرسته‌ای را نپسندیده‌اید. هنگامی که فرسته‌ای را بپسندید، این‌جا نشان داده خواهد شد.", + "empty_column.favourites": "هنوز هیچ کسی این فرسته را نپسندیده است. هنگامی که کسی آن را بپسندد، این‌جا نشان داده خواهد شد.", + "empty_column.follow_recommendations": "ظاهرا هیچ پیشنهادی برای شما نمی‌توانیم تولید کنیم. می‌توانید از امکان جست‌وجو برای یافتن افرادی که ممکن است بشناسید و یا کاوش میان برچسب‌های داغ استفاده کنید.", + "empty_column.follow_requests": "شما هنوز هیچ درخواست پی‌گیری‌ای ندارید. هنگامی که چنین درخواستی بگیرید، این‌جا نشان داده خواهد شد.", "empty_column.hashtag": "هنوز هیچ چیزی در این برچسب نیست.", - "empty_column.home": "فهرست خانگی شما خالی است! {public} را ببینید یا چیزی را جستجو کنید تا کاربران دیگر را ببینید.", + "empty_column.home": "خط زمانی خانگی شما خالی است! افراد بیشتری را پی‌گیری کنید تا پُر شود. {suggestions}", "empty_column.home.suggestions": "چند پیشنهاد را ببینید", - "empty_column.list": "در این فهرست هنوز چیزی نیست. وقتی اعضای این فهرست چیزی بفرستند، این‌جا ظاهر خواهد شد.", - "empty_column.lists": "هنوز هیچ فهرستی ندارید. هنگامی که فهرستی بسازید، این‌جا دیده خواهد شد.", + "empty_column.list": "در این فهرست هنوز چیزی نیست. هنگامی که اعضای این فهرست چیزی بفرستند، این‌جا ظاهر خواهد شد.", + "empty_column.lists": "هنوز هیچ فهرستی ندارید. هنگامی که فهرستی بسازید، این‌جا نشان داده خواهد شد.", "empty_column.mutes": "هنوز هیچ کاربری را خموش نکرده‌اید.", "empty_column.notifications": "هنوز هیچ اعلانی ندارید. به دیگران واکنش نشان دهید تا گفتگو آغاز شود.", - "empty_column.public": "این‌جا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران کارسازهای دیگر را پی بگیرید تا این‌جا پر شود", + "empty_column.public": "این‌جا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران کارسازهای دیگر را پی‌گیری کنید تا این‌جا پُر شود", "error.unexpected_crash.explanation": "به خاطر اشکالی در کدهای ما یا ناسازگاری با مرورگر شما، این صفحه به درستی نمایش نیافت.", "error.unexpected_crash.explanation_addons": "این صفحه نمی‌تواند درست نشان داده شود. احتمالاً این خطا ناشی از یک افزونهٔ مرورگر یا ابزار ترجمهٔ خودکار است.", "error.unexpected_crash.next_steps": "لطفاً صفحه را دوباره باز کنید. اگر کمکی نکرد، شاید همچنان بتوانید با ماستودون از راه یک مرورگر دیگر یا با یکی از اپ‌های آن کار کنید.", @@ -177,14 +184,14 @@ "errors.unexpected_crash.copy_stacktrace": "رونوشت از جزئیات اشکال", "errors.unexpected_crash.report_issue": "گزارش مشکل", "follow_recommendations.done": "انجام شد", - "follow_recommendations.heading": "افرادی را که می‌خواهید فرسته‌هایشان را ببینید دنبال کنید! این‌ها تعدادی پیشنهاد هستند.", + "follow_recommendations.heading": "افرادی را که می‌خواهید فرسته‌هایشان را ببینید پی‌گیری کنید! این‌ها تعدادی پیشنهاد هستند.", "follow_recommendations.lead": "فرسته‌های افرادی که دنبال می‌کنید به ترتیب زمانی در خوراک خانه‌تان نشان داده خواهد شد. از اشتباه کردن نترسید. می‌توانید به همین سادگی در هر زمانی از دنبال کردن افراد دست بکشید!", "follow_request.authorize": "اجازه دهید", "follow_request.reject": "رد کنید", "follow_requests.unlocked_explanation": "با این که حسابتان قفل نیست، کارکنان {domain} فکر کردند که ممکن است بخواهید درخواست‌ها از این حساب‌ها را به صورت دستی بازبینی کنید.", "generic.saved": "ذخیره شده", "getting_started.developers": "توسعه‌دهندگان", - "getting_started.directory": "فهرست نمایه", + "getting_started.directory": "شاخهٔ نمایه", "getting_started.documentation": "مستندات", "getting_started.heading": "آغاز کنید", "getting_started.invite": "دعوت از دیگران", @@ -195,56 +202,56 @@ "hashtag.column_header.tag_mode.any": "یا {additional}", "hashtag.column_header.tag_mode.none": "بدون {additional}", "hashtag.column_settings.select.no_options_message": "هیچ پیشنهادی پیدا نشد", - "hashtag.column_settings.select.placeholder": "هشتگ‌ها را وارد کنید…", - "hashtag.column_settings.tag_mode.all": "همۀ اینـها", + "hashtag.column_settings.select.placeholder": "برچسب‌ها را وارد کنید…", + "hashtag.column_settings.tag_mode.all": "همۀ این‌ها", "hashtag.column_settings.tag_mode.any": "هرکدام از این‌ها", "hashtag.column_settings.tag_mode.none": "هیچ‌کدام از این‌ها", "hashtag.column_settings.tag_toggle": "افزودن برچسب‌هایی بیشتر به این ستون", "home.column_settings.basic": "پایه‌ای", - "home.column_settings.show_reblogs": "نمایش بازبوق‌ها", + "home.column_settings.show_reblogs": "نمایش تقویت‌ها", "home.column_settings.show_replies": "نمایش پاسخ‌ها", "home.hide_announcements": "نهفتن اعلامیه‌ها", "home.show_announcements": "نمایش اعلامیه‌ها", "intervals.full.days": "{number, plural, one {# روز} other {# روز}}", "intervals.full.hours": "{number, plural, one {# ساعت} other {# ساعت}}", "intervals.full.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}}", - "keyboard_shortcuts.back": "برای بازگشت", - "keyboard_shortcuts.blocked": "برای گشودن فهرست کاربران خموش", - "keyboard_shortcuts.boost": "برای بازبوقیدن", - "keyboard_shortcuts.column": "برای تمرکز روی یک بوق در یکی از ستون‌ها", - "keyboard_shortcuts.compose": "برای تمرکز روی محیط نوشتن", + "keyboard_shortcuts.back": "بازگشت", + "keyboard_shortcuts.blocked": "گشودن فهرست کاربران مسدود شده", + "keyboard_shortcuts.boost": "تقویت فرسته", + "keyboard_shortcuts.column": "برای تمرکز روی یک فرسته در یکی از ستون‌ها", + "keyboard_shortcuts.compose": "تمرکز روی محیط نوشتن", "keyboard_shortcuts.description": "توضیح", - "keyboard_shortcuts.direct": "برای گشودن ستون پیغام‌های مستقیم", - "keyboard_shortcuts.down": "برای پایین رفتن در فهرست", - "keyboard_shortcuts.enter": "برای گشودن وضعیت", - "keyboard_shortcuts.favourite": "برای پسندیدن", - "keyboard_shortcuts.favourites": "برای گشودن فهرست پسندیده‌ها", - "keyboard_shortcuts.federated": "برای گشودن فهرست نوشته‌های همه‌جا", + "keyboard_shortcuts.direct": "گشودن ستون پیام‌های مستقیم", + "keyboard_shortcuts.down": "پایین رفتن در فهرست", + "keyboard_shortcuts.enter": "گشودن فرسته", + "keyboard_shortcuts.favourite": "پسندیدن فرسته", + "keyboard_shortcuts.favourites": "گشودن فهرست پسندیده‌ها", + "keyboard_shortcuts.federated": "گشودن خط زمانی همگانی", "keyboard_shortcuts.heading": "میان‌برهای صفحه‌کلید", - "keyboard_shortcuts.home": "برای گشودن ستون اصلی پیگیری‌ها", + "keyboard_shortcuts.home": "گشودن خط زمانی خانگی", "keyboard_shortcuts.hotkey": "میان‌بر", - "keyboard_shortcuts.legend": "برای نمایش این نشانه", - "keyboard_shortcuts.local": "برای گشودن فهرست نوشته‌های محلی", - "keyboard_shortcuts.mention": "برای نام‌بردن از نویسنده", - "keyboard_shortcuts.muted": "برای گشودن فهرست کاربران خموش", - "keyboard_shortcuts.my_profile": "برای گشودن نمایه‌تان", - "keyboard_shortcuts.notifications": "برای گشودن ستون اعلان‌ها", - "keyboard_shortcuts.open_media": "برای باز کردن رسانه", - "keyboard_shortcuts.pinned": "برای گشودن فهرست بوق‌های ثابت", - "keyboard_shortcuts.profile": "برای گشودن نمایهٔ نویسنده", - "keyboard_shortcuts.reply": "برای پاسخ", - "keyboard_shortcuts.requests": "برای گشودن فهرست درخواست‌های پیگیری", - "keyboard_shortcuts.search": "برای تمرکز روی جستجو", + "keyboard_shortcuts.legend": "نمایش این نشانه", + "keyboard_shortcuts.local": "گشودن خط زمانی محلّی", + "keyboard_shortcuts.mention": "نام‌بردن نویسنده", + "keyboard_shortcuts.muted": "گشودن فهرست کاربران خموش", + "keyboard_shortcuts.my_profile": "گشودن نمایه‌تان", + "keyboard_shortcuts.notifications": "گشودن ستون آگاهی‌ها", + "keyboard_shortcuts.open_media": "گشودن رسانه", + "keyboard_shortcuts.pinned": "گشودن فهرست فرسته‌های سنجاق‌شده", + "keyboard_shortcuts.profile": "گشودن نمایهٔ نویسنده", + "keyboard_shortcuts.reply": "پاسخ به فرسته", + "keyboard_shortcuts.requests": "گشودن فهرست درخواست‌های پی‌گیری", + "keyboard_shortcuts.search": "تمرکز روی جست‌وجو", "keyboard_shortcuts.spoilers": "نمایش/نهفتن زمینهٔ هشدار محتوا", - "keyboard_shortcuts.start": "برای گشودن ستون «آغاز کنید»", - "keyboard_shortcuts.toggle_hidden": "برای نمایش/نهفتن نوشتهٔ پشت هشدار محتوا", - "keyboard_shortcuts.toggle_sensitivity": "برای نمایش/نهفتن رسانه", - "keyboard_shortcuts.toot": "برای آغاز یک بوق تازه", - "keyboard_shortcuts.unfocus": "برای برداشتن تمرکز از نوشتن/جستجو", - "keyboard_shortcuts.up": "برای بالا رفتن در فهرست", + "keyboard_shortcuts.start": "گشودن ستون «آغاز کنید»", + "keyboard_shortcuts.toggle_hidden": "نمایش/نهفتن نوشتهٔ پشت هشدار محتوا", + "keyboard_shortcuts.toggle_sensitivity": "نمایش/نهفتن رسانه", + "keyboard_shortcuts.toot": "شروع یک فرستهٔ جدید", + "keyboard_shortcuts.unfocus": "برداشتن تمرکز از نوشتن/جست‌وجو", + "keyboard_shortcuts.up": "بالا رفتن در فهرست", "lightbox.close": "بستن", - "lightbox.compress": "فشرده‌سازی جعبه نمایش تصویر", - "lightbox.expand": "گسترش جعبه نمایش تصویر", + "lightbox.compress": "فشرده‌سازی جعبهٔ نمایش تصویر", + "lightbox.expand": "گسترش جعبهٔ نمایش تصویر", "lightbox.next": "بعدی", "lightbox.previous": "قبلی", "lists.account.add": "افزودن به فهرست", @@ -253,79 +260,79 @@ "lists.edit": "ویرایش فهرست", "lists.edit.submit": "تغییر عنوان", "lists.new.create": "افزودن فهرست", - "lists.new.title_placeholder": "عنوان فهرست تازه", - "lists.replies_policy.followed": "هر کاربر پیگرفته", + "lists.new.title_placeholder": "عنوان فهرست جدید", + "lists.replies_policy.followed": "هر کاربر پی‌گرفته", "lists.replies_policy.list": "اعضای فهرست", "lists.replies_policy.none": "هیچ کدام", "lists.replies_policy.title": "نمایش پاسخ‌ها به:", - "lists.search": "بین کسانی که پی می‌گیرید بگردید", + "lists.search": "جست‌وجو بین کسانی که پی‌گرفته‌اید", "lists.subheading": "فهرست‌های شما", - "load_pending": "{count, plural, one {# مورد تازه} other {# مورد تازه}}", - "loading_indicator.label": "بارگیری...", - "media_gallery.toggle_visible": "تغییر وضعیت نمایانی", + "load_pending": "{count, plural, one {# مورد جدید} other {# مورد جدید}}", + "loading_indicator.label": "بارگزاری...", + "media_gallery.toggle_visible": "{number, plural, one {نهفتن تصویر} other {نهفتن تصاویر}}", "missing_indicator.label": "پیدا نشد", "missing_indicator.sublabel": "این منبع پیدا نشد", "mute_modal.duration": "مدت زمان", "mute_modal.hide_notifications": "اعلان‌های این کاربر پنهان شود؟", "mute_modal.indefinite": "نامعلوم", - "navigation_bar.apps": "اپ‌های موبایل", - "navigation_bar.blocks": "کاربران مسدودشده", + "navigation_bar.apps": "برنامه‌های تلفن همراه", + "navigation_bar.blocks": "کاربران مسدود شده", "navigation_bar.bookmarks": "نشانک‌ها", - "navigation_bar.community_timeline": "نوشته‌های محلی", - "navigation_bar.compose": "نوشتن بوق تازه", + "navigation_bar.community_timeline": "خط زمانی محلّی", + "navigation_bar.compose": "نوشتن فرستهٔ تازه", "navigation_bar.direct": "پیام‌های مستقیم", "navigation_bar.discover": "گشت و گذار", - "navigation_bar.domain_blocks": "دامنه‌های بسته", + "navigation_bar.domain_blocks": "دامنه‌های مسدود شده", "navigation_bar.edit_profile": "ویرایش نمایه", "navigation_bar.favourites": "پسندیده‌ها", - "navigation_bar.filters": "واژگان خموش", - "navigation_bar.follow_requests": "درخواست‌های پیگیری", - "navigation_bar.follows_and_followers": "پیگیری‌ها و پیگیران", + "navigation_bar.filters": "واژه‌های خموش", + "navigation_bar.follow_requests": "درخواست‌های پی‌گیری", + "navigation_bar.follows_and_followers": "پی‌گرفتگان و پی‌گیرندگان", "navigation_bar.info": "دربارهٔ این کارساز", "navigation_bar.keyboard_shortcuts": "میان‌برها", "navigation_bar.lists": "فهرست‌ها", "navigation_bar.logout": "خروج", "navigation_bar.mutes": "کاربران خموشانده", "navigation_bar.personal": "شخصی", - "navigation_bar.pins": "بوق‌های ثابت", + "navigation_bar.pins": "فرسته‌های سنجاق‌شده", "navigation_bar.preferences": "ترجیحات", - "navigation_bar.public_timeline": "نوشته‌های همه‌جا", + "navigation_bar.public_timeline": "خط زمانی همگانی", "navigation_bar.security": "امنیت", - "notification.favourite": "‫{name}‬ وضعیتتان را برگزید", - "notification.follow": "‫{name}‬ پیگیرتان شد", - "notification.follow_request": "{name} می‌خواهد پیگیر شما باشد", + "notification.favourite": "‫{name}‬ فرسته‌تان را پسندید", + "notification.follow": "‫{name}‬ پی‌گیرتان شد", + "notification.follow_request": "{name} می‌خواهد پی‌گیر شما باشد", "notification.mention": "‫{name}‬ از شما نام برد", "notification.own_poll": "نظرسنجی شما به پایان رسید", "notification.poll": "نظرسنجی‌ای که در آن رأی دادید به پایان رسیده است", - "notification.reblog": "‫{name}‬ وضعیتتان را تقویت کرد", + "notification.reblog": "‫{name}‬ فرسته‌تان را تقویت کرد", "notification.status": "{name} چیزی فرستاد", - "notifications.clear": "پاک‌کردن اعلان‌ها", - "notifications.clear_confirmation": "مطمئنید می‌خواهید همهٔ اعلان‌هایتان را برای همیشه پاک کنید؟", - "notifications.column_settings.alert": "اعلان‌های میزکار", + "notifications.clear": "پاک‌کردن آگاهی‌ها", + "notifications.clear_confirmation": "مطمئنید می‌خواهید همهٔ آگاهی‌هایتان را برای همیشه پاک کنید؟", + "notifications.column_settings.alert": "آگاهی‌های میزکار", "notifications.column_settings.favourite": "پسندیده‌ها:", "notifications.column_settings.filter_bar.advanced": "نمایش همۀ دسته‌ها", "notifications.column_settings.filter_bar.category": "نوار پالایش سریع", "notifications.column_settings.filter_bar.show": "نمایش", - "notifications.column_settings.follow": "پیگیران تازه:", + "notifications.column_settings.follow": "پی‌گیرندگان جدید:", "notifications.column_settings.follow_request": "درخواست‌های جدید پی‌گیری:", "notifications.column_settings.mention": "نام‌بردن‌ها:", "notifications.column_settings.poll": "نتایج نظرسنجی:", "notifications.column_settings.push": "اعلان‌ها از سمت سرور", - "notifications.column_settings.reblog": "بازبوق‌ها:", + "notifications.column_settings.reblog": "تقویت‌ها:", "notifications.column_settings.show": "نمایش در ستون", "notifications.column_settings.sound": "پخش صدا", - "notifications.column_settings.status": "بوق‌های جدید:", + "notifications.column_settings.status": "فرسته‌های جدید:", "notifications.column_settings.unread_markers.category": "نشانه‌گذارهای آگاهی‌های خوانده‌نشده", "notifications.filter.all": "همه", - "notifications.filter.boosts": "بازبوق‌ها", + "notifications.filter.boosts": "تقویت‌ها", "notifications.filter.favourites": "پسندها", - "notifications.filter.follows": "پیگیری‌ها", + "notifications.filter.follows": "پی‌گرفتگان", "notifications.filter.mentions": "نام‌بردن‌ها", "notifications.filter.polls": "نتایج نظرسنجی", "notifications.filter.statuses": "به‌روز رسانی‌ها از کسانی که پی‌گیرشانید", "notifications.grant_permission": "اعطای مجوز.", - "notifications.group": "{count} اعلان", - "notifications.mark_as_read": "نشانه‌گذاری همۀ آگهدادها با فرنام خوانده شده", + "notifications.group": "{count} آگاهی", + "notifications.mark_as_read": "نشانه‌گذاری تمام آگاهی‌ها به خوانده‌شده", "notifications.permission_denied": "آگاهی‌های میزکار به دلیل رد کردن درخواست اجازهٔ پیشین مرورگر، در دسترس نیستند", "notifications.permission_denied_alert": "از آن‌جا که پیش از این اجازهٔ مرورگر رد شده است، آگاهی‌های میزکار نمی‌توانند به کار بیفتند", "notifications.permission_required": "اعلان‌های میزکار در دسترس نیستند زیرا نیازمند مجوزی هستند که اعطا نشده است.", @@ -334,28 +341,29 @@ "notifications_permission_banner.title": "هرگز چیزی را از دست ندهید", "picture_in_picture.restore": "برگرداندن", "poll.closed": "پایان‌یافته", - "poll.refresh": "به‌روزرسانی", + "poll.refresh": "نوسازی", "poll.total_people": "{count, plural, one {# نفر} other {# نفر}}", "poll.total_votes": "{count, plural, one {# رأی} other {# رأی}}", "poll.vote": "رأی", - "poll.voted": "شما به این گزینه رأی دادید", + "poll.voted": "شما به این جواب رأی دادید", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "افزودن نظرسنجی", - "poll_button.remove_poll": "حذف نظرسنجی", - "privacy.change": "تنظیم محرمانگی نوشته", - "privacy.direct.long": "ارسال فقط به کاربران اشاره‌شده", - "privacy.direct.short": "خصوصی", - "privacy.private.long": "ارسال فقط به پی‌گیران", - "privacy.private.short": "خصوصی", - "privacy.public.long": "ارسال به خط‌زمانی عمومی", - "privacy.public.short": "همگانی", - "privacy.unlisted.long": "ارسال نکردن به خط‌زمانی عمومی", + "poll_button.remove_poll": "برداشتن نظرسنجی", + "privacy.change": "تغییر محرمانگی فرسته", + "privacy.direct.long": "فقط برای کاربران نام‌برده نمایان است", + "privacy.direct.short": "مستقیم", + "privacy.private.long": "نمایان فقط برای پی‌گیرندگان", + "privacy.private.short": "فقط پی‌گیرندگان", + "privacy.public.long": "نمایان برای همه، در خط‌های زمانی همگانی نمایش داده خواهد شد", + "privacy.public.short": "عمومی", + "privacy.unlisted.long": "نمایان برای همه، ولی در خط‌های زمانی همگانی نمایش داده نخواهد شد", "privacy.unlisted.short": "فهرست‌نشده", - "refresh": "به‌روزرسانی", - "regeneration_indicator.label": "در حال باز شدن…", + "refresh": "نوسازی", + "regeneration_indicator.label": "در حال بار شدن…", "regeneration_indicator.sublabel": "این فهرست دارد آماده می‌شود!", "relative_time.days": "{number} روز", "relative_time.hours": "{number} ساعت", - "relative_time.just_now": "الان", + "relative_time.just_now": "حالا", "relative_time.minutes": "{number} دقیقه", "relative_time.seconds": "{number} ثانیه", "relative_time.today": "امروز", @@ -363,79 +371,79 @@ "report.forward": "فرستادن به {target}", "report.forward_hint": "این حساب در کارساز دیگری ثبت شده. آیا می‌خواهید رونوشتی ناشناس از این گزارش به آن‌جا هم فرستاده شود؟", "report.hint": "این گزارش به مدیران کارسازتان فرستاده خواهد شد. می‌توانید دلیل گزارش این حساب را در ادامه بنویسید:", - "report.placeholder": "توضیح اضافه", - "report.submit": "بفرست", + "report.placeholder": "توضیحات اضافه", + "report.submit": "فرستادن", "report.target": "در حال گزارش {target}", - "search.placeholder": "جستجو", - "search_popout.search_format": "راهنمای جستجوی پیشرفته", - "search_popout.tips.full_text": "جست‌وجوی متنی ساده وضعیت‌هایی که که نوشته، برگزیده، تقویت‌کرده یا در آن‌ها اشاره‌شده‌اید را به اضافهٔ نام‌های کاربری، نام‌های نمایشی و برچسب‌های مطابق برمی‌گرداند.", - "search_popout.tips.hashtag": "هشتگ", - "search_popout.tips.status": "بوق", - "search_popout.tips.text": "جستجوی متنی ساده برای نام‌ها، نام‌های کاربری، و برچسب‌ها", + "search.placeholder": "جست‌وجو", + "search_popout.search_format": "راهنمای جست‌وجوی پیشرفته", + "search_popout.tips.full_text": "جست‌وجوی متنی ساده فرسته‌هایی که نوشته، پسندیده، تقویت‌کرده یا در آن‌ها نام‌برده شده‌اید را به علاوهٔ نام‌های کاربری، نام‌های نمایشی و برچسب‌ها برمی‌گرداند.", + "search_popout.tips.hashtag": "برچسب", + "search_popout.tips.status": "فرسته", + "search_popout.tips.text": "جست‌وجوی متنی ساده برای نام‌ها، نام‌های کاربری، و برچسب‌ها", "search_popout.tips.user": "کاربر", "search_results.accounts": "افراد", - "search_results.hashtags": "هشتگ‌ها", - "search_results.statuses": "بوق‌ها", - "search_results.statuses_fts_disabled": "جستجوی محتوای بوق‌ها در این کارساز ماستودون فعال نشده است.", + "search_results.hashtags": "برچسب‌ها", + "search_results.statuses": "فرسته‌ها", + "search_results.statuses_fts_disabled": "جست‌وجوی محتوای فرسته‌ها در این کارساز ماستودون فعال نشده است.", "search_results.total": "{count, number} {count, plural, one {نتیجه} other {نتیجه}}", "status.admin_account": "گشودن واسط مدیریت برای @{name}", - "status.admin_status": "گشودن این بوق در واسط مدیریت", - "status.block": "مسدودسازی @{name}", + "status.admin_status": "گشودن این فرسته در واسط مدیریت", + "status.block": "مسدود کردن @{name}", "status.bookmark": "نشانک", - "status.cancel_reblog_private": "حذف بازبوق", - "status.cannot_reblog": "این نوشته را نمی‌شود بازبوقید", - "status.copy": "رونوشت‌برداری از نشانی بوق", - "status.delete": "پاک‌کردن", + "status.cancel_reblog_private": "لغو تقویت", + "status.cannot_reblog": "این فرسته قابل تقویت نیست", + "status.copy": "رونویسی از نشانی فرسته", + "status.delete": "حذف", "status.detailed_status": "نمایش کامل گفتگو", - "status.direct": "پیغام مستقیم به @{name}", + "status.direct": "پیام مستقیم به @{name}", "status.embed": "جاگذاری", "status.favourite": "پسندیدن", - "status.filtered": "پالوده", - "status.load_more": "بیشتر نشان بده", + "status.filtered": "پالایش‌شده", + "status.load_more": "بارگزاری بیشتر", "status.media_hidden": "رسانهٔ نهفته", "status.mention": "نام‌بردن از @{name}", "status.more": "بیشتر", "status.mute": "خموشاندن @{name}", - "status.mute_conversation": "خموشاندن گفتگو", - "status.open": "گشودن این بوق", - "status.pin": "ثابت کردن در نمایه", - "status.pinned": "بوق ثابت", + "status.mute_conversation": "خموشاندن گفت‌وگو", + "status.open": "گسترش این فرسته", + "status.pin": "سنجاق‌کردن در نمایه", + "status.pinned": "فرستهٔ سنجاق‌شده", "status.read_more": "بیشتر بخوانید", - "status.reblog": "بازبوقیدن", + "status.reblog": "تقویت", "status.reblog_private": "تقویت برای مخاطبان نخستین", - "status.reblogged_by": "‫{name}‬ بازبوقید", - "status.reblogs.empty": "هنوز هیچ کسی این بوق را بازنبوقیده است. وقتی کسی چنین کاری کند، این‌جا نمایش خواهد یافت.", - "status.redraft": "پاک‌کردن و بازنویسی", + "status.reblogged_by": "‫{name}‬ تقویت کرد", + "status.reblogs.empty": "هنوز هیچ کسی این فرسته را تقویت نکرده است. وقتی کسی چنین کاری کند، این‌جا نمایش داده خواهد شد.", + "status.redraft": "حذف و بازنویسی", "status.remove_bookmark": "برداشتن نشانک", "status.reply": "پاسخ", "status.replyAll": "پاسخ به رشته", "status.report": "گزارش @{name}", "status.sensitive_warning": "محتوای حساس", - "status.share": "همرسانی", + "status.share": "هم‌رسانی", "status.show_less": "نمایش کمتر", "status.show_less_all": "نمایش کمتر همه", "status.show_more": "نمایش بیشتر", "status.show_more_all": "نمایش بیشتر همه", "status.show_thread": "نمایش رشته", "status.uncached_media_warning": "ناموجود", - "status.unmute_conversation": "رفع خموشی گفتگو", - "status.unpin": "برداشتن نوشتهٔ ثابت نمایه", + "status.unmute_conversation": "رفع خموشی گفت‌وگو", + "status.unpin": "برداشتن سنجاق از نمایه", "suggestions.dismiss": "نادیده گرفتن پیشنهاد", "suggestions.header": "شاید این هم برایتان جالب باشد…", "tabs_bar.federated_timeline": "همگانی", "tabs_bar.home": "خانه", - "tabs_bar.local_timeline": "بومی", - "tabs_bar.notifications": "اعلان‌ها", - "tabs_bar.search": "جستجو", + "tabs_bar.local_timeline": "محلّی", + "tabs_bar.notifications": "آگاهی‌ها", + "tabs_bar.search": "جست‌وجو", "time_remaining.days": "{number, plural, one {# روز} other {# روز}} باقی مانده", "time_remaining.hours": "{number, plural, one {# ساعت} other {# ساعت}} باقی مانده", "time_remaining.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}} باقی مانده", "time_remaining.moments": "زمان باقی‌مانده", "time_remaining.seconds": "{number, plural, one {# ثانیه} other {# ثانیه}} باقی مانده", "timeline_hint.remote_resource_not_displayed": "{resource} از دیگر کارسازها نمایش داده نمی‌شوند.", - "timeline_hint.resources.followers": "پی‌گیر", - "timeline_hint.resources.follows": "پی می‌گیرد", - "timeline_hint.resources.statuses": "بوق‌های قدیمی‌تر", + "timeline_hint.resources.followers": "پیگیرندگان", + "timeline_hint.resources.follows": "پی‌گرفتگان", + "timeline_hint.resources.statuses": "فرسته‌های قدیمی‌تر", "trends.counter_by_accounts": "{count, plural, one {{counter} نفر} other {{counter} نفر}} صحبت می‌کنند", "trends.trending_now": "پرطرفدار", "ui.beforeunload": "اگر از ماستودون خارج شوید پیش‌نویس شما از دست خواهد رفت.", @@ -443,8 +451,8 @@ "units.short.million": "{count}میلیون", "units.short.thousand": "{count}هزار", "upload_area.title": "برای بارگذاری به این‌جا بکشید", - "upload_button.label": "افزودن رسانه", - "upload_error.limit": "از حد مجاز باگذاری پرونده فراتر رفتید.", + "upload_button.label": "افزودن تصاویر، ویدیو یا یک پروندهٔ صوتی", + "upload_error.limit": "از حد مجاز بارگذاری پرونده فراتر رفتید.", "upload_error.poll": "بارگذاری پرونده در نظرسنجی‌ها مجاز نیست.", "upload_form.audio_description": "برای ناشنوایان توصیفش کنید", "upload_form.description": "برای کم‌بینایان توصیفش کنید", @@ -454,6 +462,7 @@ "upload_form.video_description": "برای کم‌بینایان یا ناشنوایان توصیفش کنید", "upload_modal.analyzing_picture": "در حال پردازش تصویر…", "upload_modal.apply": "اعمال", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "گزینش تصویر", "upload_modal.description_placeholder": "الا یا ایّها الساقی، ادر کأساً و ناولها", "upload_modal.detect_text": "تشخیص متن درون عکس", @@ -465,11 +474,11 @@ "video.close": "بستن ویدیو", "video.download": "بارگیری پرونده", "video.exit_fullscreen": "خروج از حالت تمام‌صفحه", - "video.expand": "بزرگ‌کردن ویدیو", + "video.expand": "گسترش ویدیو", "video.fullscreen": "تمام‌صفحه", "video.hide": "نهفتن ویدیو", - "video.mute": "قطع صدا", + "video.mute": "خموشی صدا", "video.pause": "مکث", "video.play": "پخش", - "video.unmute": "پخش صدا" + "video.unmute": "لغو خموشی صدا" } diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 202579e6f..a5c2d2da3 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -8,33 +8,33 @@ "account.blocked": "Estetty", "account.browse_more_on_origin_server": "Selaile lisää alkuperäisellä palvelimella", "account.cancel_follow_request": "Peruuta seurauspyyntö", - "account.direct": "Viesti käyttäjälle @{name}", + "account.direct": "Pikaviesti käyttäjälle @{name}", "account.disable_notifications": "Lopeta ilmoittamasta minulle, kun @{name} viestii", "account.domain_blocked": "Verkko-osoite piilotettu", "account.edit_profile": "Muokkaa profiilia", "account.enable_notifications": "Ilmoita minulle, kun @{name} viestii", "account.endorse": "Suosittele profiilissasi", "account.follow": "Seuraa", - "account.followers": "Seuraajaa", - "account.followers.empty": "Tällä käyttäjällä ei ole vielä seuraajia.", + "account.followers": "Seuraajat", + "account.followers.empty": "Kukaan ei seuraa tätä käyttäjää vielä.", "account.followers_counter": "{count, plural, one {{counter} seuraaja} other {{counter} seuraajat}}", "account.following_counter": "{count, plural, one {{counter} seuraa} other {{counter} seuraa}}", "account.follows.empty": "Tämä käyttäjä ei vielä seuraa ketään.", "account.follows_you": "Seuraa sinua", "account.hide_reblogs": "Piilota buustaukset käyttäjältä @{name}", - "account.joined": "Joined {date}", + "account.joined": "Liittynyt {date}", "account.last_status": "Aktiivinen viimeksi", "account.link_verified_on": "Tämän linkin omistaja tarkistettiin {date}", - "account.locked_info": "Tämän tili on yksityinen. Käyttäjä vahvistaa itse kuka voi seurata häntä.", + "account.locked_info": "Tämän tilin yksityisyyden tila on asetettu lukituksi. Omistaja arvioi manuaalisesti, kuka voi seurata niitä.", "account.media": "Media", "account.mention": "Mainitse @{name}", - "account.moved_to": "{name} on muuttanut instanssiin:", + "account.moved_to": "{name} on muuttanut:", "account.mute": "Mykistä @{name}", "account.mute_notifications": "Mykistä ilmoitukset käyttäjältä @{name}", "account.muted": "Mykistetty", "account.never_active": "Ei koskaan", - "account.posts": "Tuuttaukset", - "account.posts_with_replies": "Tuuttaukset ja vastaukset", + "account.posts": "Viestit", + "account.posts_with_replies": "Viestit ja vastaukset", "account.report": "Raportoi @{name}", "account.requested": "Odottaa hyväksyntää. Peruuta seuraamispyyntö klikkaamalla", "account.share": "Jaa käyttäjän @{name} profiili", @@ -47,11 +47,16 @@ "account.unmute": "Poista käyttäjän @{name} mykistys", "account.unmute_notifications": "Poista mykistys käyttäjän @{name} ilmoituksilta", "account_note.placeholder": "Lisää muistiinpano napsauttamalla", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Yritä uudestaan {retry_time, time, medium} jälkeen.", "alert.rate_limited.title": "Määrää rajoitettu", "alert.unexpected.message": "Tapahtui odottamaton virhe.", "alert.unexpected.title": "Hups!", "announcement.announcement": "Ilmoitus", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} viikossa", "boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}", "bundle_column_error.body": "Jokin meni vikaan komponenttia ladattaessa.", @@ -59,11 +64,11 @@ "bundle_column_error.title": "Verkkovirhe", "bundle_modal_error.close": "Sulje", "bundle_modal_error.message": "Jokin meni vikaan komponenttia ladattaessa.", - "bundle_modal_error.retry": "Yritä uudestaan", + "bundle_modal_error.retry": "Yritä uudelleen", "column.blocks": "Estetyt käyttäjät", "column.bookmarks": "Kirjanmerkit", "column.community": "Paikallinen aikajana", - "column.direct": "Viestit", + "column.direct": "Pikaviestit", "column.directory": "Selaa profiileja", "column.domain_blocks": "Piilotetut verkkotunnukset", "column.favourites": "Suosikit", @@ -85,26 +90,26 @@ "community.column_settings.local_only": "Vain paikalliset", "community.column_settings.media_only": "Vain media", "community.column_settings.remote_only": "Vain etäkäyttö", - "compose_form.direct_message_warning": "Tämä tuuttaus näkyy vain mainituille käyttäjille.", + "compose_form.direct_message_warning": "Tämä viesti näkyy vain mainituille käyttäjille.", "compose_form.direct_message_warning_learn_more": "Lisätietoja", "compose_form.hashtag_warning": "Tämä tuuttaus ei näy hashtag-hauissa, koska se on listaamaton. Hashtagien avulla voi hakea vain julkisia tuuttauksia.", "compose_form.lock_disclaimer": "Tilisi ei ole {locked}. Kuka tahansa voi seurata tiliäsi ja nähdä vain seuraajille rajaamasi julkaisut.", "compose_form.lock_disclaimer.lock": "lukittu", - "compose_form.placeholder": "Mitä mietit?", + "compose_form.placeholder": "Mitä sinulla on mielessäsi?", "compose_form.poll.add_option": "Lisää valinta", "compose_form.poll.duration": "Äänestyksen kesto", - "compose_form.poll.option_placeholder": "Valinta numero", + "compose_form.poll.option_placeholder": "Valinta {number}", "compose_form.poll.remove_option": "Poista tämä valinta", "compose_form.poll.switch_to_multiple": "Muuta kysely monivalinnaksi", "compose_form.poll.switch_to_single": "Muuta kysely sallimaan vain yksi valinta", - "compose_form.publish": "Tuuttaa", - "compose_form.publish_loud": "Julkista!", - "compose_form.sensitive.hide": "Valitse tämä arkaluontoisena", - "compose_form.sensitive.marked": "Media on merkitty arkaluontoiseksi", - "compose_form.sensitive.unmarked": "Mediaa ei ole merkitty arkaluontoiseksi", - "compose_form.spoiler.marked": "Teksti on piilotettu varoituksen taakse", - "compose_form.spoiler.unmarked": "Teksti ei ole piilotettu", - "compose_form.spoiler_placeholder": "Sisältövaroitus", + "compose_form.publish": "Lähetä viesti", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "{count, plural, one {Merkitse media arkaluontoiseksi} other {Merkitse media arkaluontoiseksi}}", + "compose_form.sensitive.marked": "{count, plural, one {Media on merkitty arkaluontoiseksi} other {Media on merkitty arkaluontoiseksi}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Mediaa ei ole merkitty arkaluontoiseksi} other {Mediaa ei ole merkitty arkaluontoiseksi}}", + "compose_form.spoiler.marked": "Poista sisältövaroitus", + "compose_form.spoiler.unmarked": "Lisää sisältövaroitus", + "compose_form.spoiler_placeholder": "Kirjoita varoituksesi tähän", "confirmation_modal.cancel": "Peruuta", "confirmations.block.block_and_report": "Estä ja raportoi", "confirmations.block.confirm": "Estä", @@ -113,8 +118,10 @@ "confirmations.delete.message": "Haluatko varmasti poistaa tämän tilapäivityksen?", "confirmations.delete_list.confirm": "Poista", "confirmations.delete_list.message": "Haluatko varmasti poistaa tämän listan kokonaan?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Piilota koko verkko-osoite", - "confirmations.domain_block.message": "Haluatko aivan varmasti estää koko verkko-osoitteen {domain}? Useimmiten jokunen kohdistettu esto ja mykistys riittää, ja se on suositeltavampi tapa toimia.", + "confirmations.domain_block.message": "Oletko todella varma, että haluat estää koko {domain}? Useimmissa tapauksissa muutama kohdennettu lohko tai mykistys on riittävä ja parempi. Et näe kyseisen verkkotunnuksen sisältöä missään julkisessa aikajanassa tai ilmoituksissa. Seuraajasi tältä verkkotunnukselta poistetaan.", "confirmations.logout.confirm": "Kirjaudu ulos", "confirmations.logout.message": "Oletko varma, että haluat kirjautua ulos?", "confirmations.mute.confirm": "Mykistä", @@ -142,106 +149,106 @@ "emoji_button.food": "Ruoka ja juoma", "emoji_button.label": "Lisää emoji", "emoji_button.nature": "Luonto", - "emoji_button.not_found": "Ei emojeja!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "Vastaavia emojeja ei löytynyt", "emoji_button.objects": "Esineet", "emoji_button.people": "Ihmiset", "emoji_button.recent": "Usein käytetyt", "emoji_button.search": "Etsi...", "emoji_button.search_results": "Hakutulokset", "emoji_button.symbols": "Symbolit", - "emoji_button.travel": "Matkailu", + "emoji_button.travel": "Matkailu ja paikat", "empty_column.account_suspended": "Tilin käyttäminen keskeytetty", - "empty_column.account_timeline": "Ei ole 'toots' täällä!", + "empty_column.account_timeline": "Täällä ei viestejä!", "empty_column.account_unavailable": "Profiilia ei löydy", "empty_column.blocks": "Et ole vielä estänyt yhtään käyttäjää.", - "empty_column.bookmarked_statuses": "Et ole vielä lisännyt tuuttauksia kirjanmerkkeihisi. Kun teet niin, tuuttaus näkyy tässä.", - "empty_column.community": "Paikallinen aikajana on tyhjä. Homma lähtee käyntiin, kun kirjoitat jotain julkista!", + "empty_column.bookmarked_statuses": "Et ole vielä lisännyt viestejä kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.", + "empty_column.community": "Paikallinen aikajana on tyhjä. Kirjoita jotain julkista, niin homma lähtee käyntiin!", "empty_column.direct": "Sinulla ei ole vielä yhtään viestiä yksittäiselle käyttäjälle. Kun lähetät tai vastaanotat sellaisen, se näkyy täällä.", - "empty_column.domain_blocks": "Yhtään verkko-osoitetta ei ole vielä piilotettu.", - "empty_column.favourited_statuses": "Et ole vielä lisännyt tuuttauksia suosikkeihisi. Kun teet niin, tuuttaus näkyy tässä.", - "empty_column.favourites": "Kukaan ei ole vielä lisännyt tätä tuuttausta suosikkeihinsa. Kun joku tekee niin, näkyy kyseinen henkilö tässä.", - "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.domain_blocks": "Yhtään verkko-osoitetta ei ole vielä estetty.", + "empty_column.favourited_statuses": "Et ole vielä lisännyt viestejä kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.", + "empty_column.favourites": "Kukaan ei ole vielä lisännyt tätä viestiä suosikkeihinsa. Kun joku tekee niin, näkyy kyseinen henkilö tässä.", + "empty_column.follow_recommendations": "Näyttää siltä, että sinulle ei voi luoda ehdotuksia. Voit yrittää etsiä ihmisiä, jotka saatat tuntea tai tutkia trendaavia aihesanoja.", "empty_column.follow_requests": "Sinulla ei ole vielä seurauspyyntöjä. Kun saat sellaisen, näkyy se tässä.", "empty_column.hashtag": "Tällä hashtagilla ei ole vielä mitään.", - "empty_column.home": "Kotiaikajanasi on tyhjä! {public} ja hakutoiminto auttavat alkuun ja kohtaamaan muita käyttäjiä.", + "empty_column.home": "Kotisi aikajana on tyhjä! Seuraa lisää ihmisiä täyttääksesi sen. {suggestions}", "empty_column.home.suggestions": "Katso joitakin ehdotuksia", - "empty_column.list": "Lista on vielä tyhjä. Listan jäsenten julkaisemat tilapäivitykset tulevat tähän näkyviin.", + "empty_column.list": "Tässä luettelossa ei ole vielä mitään. Kun tämän luettelon jäsenet julkaisevat uusia viestejä, ne näkyvät täällä.", "empty_column.lists": "Sinulla ei ole vielä yhtään listaa. Kun luot sellaisen, näkyy se tässä.", "empty_column.mutes": "Et ole mykistänyt vielä yhtään käyttäjää.", - "empty_column.notifications": "Sinulle ei ole vielä ilmoituksia. Aloita keskustelu juttelemalla muille.", - "empty_column.public": "Täällä ei ole mitään! Saat sisältöä, kun kirjoitat jotain julkisesti tai käyt seuraamassa muiden instanssien käyttäjiä", + "empty_column.notifications": "Sinulla ei ole vielä ilmoituksia. Kun muut ihmiset ovat vuorovaikutuksessa kanssasi, näet sen täällä.", + "empty_column.public": "Täällä ei ole mitään! Kirjoita jotain julkisesti tai manuaalisesti seuraa muiden palvelimien käyttäjiä niin saat sisältöä", "error.unexpected_crash.explanation": "Sivua ei voi näyttää oikein, johtuen bugista tai ongelmasta selaimen yhteensopivuudessa.", "error.unexpected_crash.explanation_addons": "Sivua ei voitu näyttää oikein. Tämä virhe johtuu todennäköisesti selaimen lisäosasta tai automaattisista käännöstyökaluista.", "error.unexpected_crash.next_steps": "Kokeile päivittää sivu. Jos tämä ei auta, saatat yhä pystyä käyttämään Mastodonia toisen selaimen tai sovelluksen kautta.", "error.unexpected_crash.next_steps_addons": "Yritä poistaa ne käytöstä ja päivittää sivu. Jos se ei auta, voit silti käyttää Mastodonia eri selaimen tai sovelluksen kautta.", - "errors.unexpected_crash.copy_stacktrace": "Kopioi stacktrace leikepöydälle", + "errors.unexpected_crash.copy_stacktrace": "Kopioi pinon jäljitys leikepöydälle", "errors.unexpected_crash.report_issue": "Ilmoita ongelmasta", "follow_recommendations.done": "Valmis", "follow_recommendations.heading": "Seuraa ihmisiä, joilta haluaisit nähdä viestejä! Tässä on muutamia ehdotuksia.", "follow_recommendations.lead": "Viestit seuraamiltasi henkilöiltä näkyvät aikajärjestyksessä kotinäytön syötteessä. Älä pelkää seurata vahingossa, voit lopettaa seuraaminen yhtä helposti milloin tahansa!", "follow_request.authorize": "Valtuuta", "follow_request.reject": "Hylkää", - "follow_requests.unlocked_explanation": "Vaikka tilisi ei ole lukittu, {domain} ylläpitäjien mielestä haluat tarkistaa näiden tilien seurauspyynnöt manuaalisesti.", + "follow_requests.unlocked_explanation": "Vaikka tiliäsi ei ole lukittu, {domain}:n ylläpitäjien mielestä saatat haluta tarkistaa nämä seurauspyynnöt manuaalisesti.", "generic.saved": "Tallennettu", - "getting_started.developers": "Kehittäjille", + "getting_started.developers": "Kehittäjät", "getting_started.directory": "Profiilihakemisto", - "getting_started.documentation": "Documentaatio", - "getting_started.heading": "Aloitus", + "getting_started.documentation": "Käyttöohjeet", + "getting_started.heading": "Näin pääset alkuun", "getting_started.invite": "Kutsu ihmisiä", "getting_started.open_source_notice": "Mastodon on avoimen lähdekoodin ohjelma. Voit avustaa tai raportoida ongelmia GitHubissa: {github}.", - "getting_started.security": "Tunnukset", + "getting_started.security": "Tiliasetukset", "getting_started.terms": "Käyttöehdot", "hashtag.column_header.tag_mode.all": "ja {additional}", "hashtag.column_header.tag_mode.any": "tai {additional}", "hashtag.column_header.tag_mode.none": "ilman {additional}", - "hashtag.column_settings.select.no_options_message": "Ehdostuta ei löydetty", - "hashtag.column_settings.select.placeholder": "Laita häshtägejä…", - "hashtag.column_settings.tag_mode.all": "Kaikki", - "hashtag.column_settings.tag_mode.any": "Kaikki", - "hashtag.column_settings.tag_mode.none": "Ei mikään", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.column_settings.select.no_options_message": "Ehdotuksia ei löytynyt", + "hashtag.column_settings.select.placeholder": "Syötä aihetunnisteet…", + "hashtag.column_settings.tag_mode.all": "Kaikki nämä", + "hashtag.column_settings.tag_mode.any": "Mikä tahansa näistä", + "hashtag.column_settings.tag_mode.none": "Ei mitään näistä", + "hashtag.column_settings.tag_toggle": "Sisällytä lisätunnisteet tähän sarakkeeseen", "home.column_settings.basic": "Perusasetukset", "home.column_settings.show_reblogs": "Näytä buustaukset", "home.column_settings.show_replies": "Näytä vastaukset", "home.hide_announcements": "Piilota ilmoitukset", "home.show_announcements": "Näytä ilmoitukset", - "intervals.full.days": "Päivä päiviä", - "intervals.full.hours": "Tunti tunteja", - "intervals.full.minutes": "Minuuti minuuteja", - "keyboard_shortcuts.back": "liiku taaksepäin", - "keyboard_shortcuts.blocked": "avaa lista estetyistä käyttäjistä", - "keyboard_shortcuts.boost": "buustaa", - "keyboard_shortcuts.column": "siirrä fokus tietyn sarakkeen tilapäivitykseen", + "intervals.full.days": "{number, plural, one {# päivä} other {# päivää}}", + "intervals.full.hours": "{number, plural, one {# tunti} other {# tuntia}}", + "intervals.full.minutes": "{number, plural, one {# minuutti} other {# minuuttia}}", + "keyboard_shortcuts.back": "Siirry takaisin", + "keyboard_shortcuts.blocked": "Avaa estettyjen käyttäjien luettelo", + "keyboard_shortcuts.boost": "Buustaa viestiä", + "keyboard_shortcuts.column": "Kohdista sarakkeeseen", "keyboard_shortcuts.compose": "siirry tekstinsyöttöön", "keyboard_shortcuts.description": "Kuvaus", - "keyboard_shortcuts.direct": "avaa pikaviestisarake", - "keyboard_shortcuts.down": "siirry listassa alaspäin", - "keyboard_shortcuts.enter": "avaa tilapäivitys", - "keyboard_shortcuts.favourite": "lisää suosikkeihin", - "keyboard_shortcuts.favourites": "avaa lista suosikeista", - "keyboard_shortcuts.federated": "avaa yleinen aikajana", + "keyboard_shortcuts.direct": "Avaa pikaviestisarake", + "keyboard_shortcuts.down": "Siirry listassa alaspäin", + "keyboard_shortcuts.enter": "Avaa viesti", + "keyboard_shortcuts.favourite": "Lisää suosikkeihin", + "keyboard_shortcuts.favourites": "Avaa lista suosikeista", + "keyboard_shortcuts.federated": "Avaa yleinen aikajana", "keyboard_shortcuts.heading": "Näppäinkomennot", - "keyboard_shortcuts.home": "avaa kotiaikajana", + "keyboard_shortcuts.home": "Avaa kotiaikajana", "keyboard_shortcuts.hotkey": "Pikanäppäin", - "keyboard_shortcuts.legend": "näytä tämä selite", - "keyboard_shortcuts.local": "avaa paikallinen aikajana", - "keyboard_shortcuts.mention": "mainitse julkaisija", - "keyboard_shortcuts.muted": "avaa lista mykistetyistä käyttäjistä", - "keyboard_shortcuts.my_profile": "avaa profiilisi", - "keyboard_shortcuts.notifications": "avaa ilmoitukset-sarake", - "keyboard_shortcuts.open_media": "median avaus", - "keyboard_shortcuts.pinned": "avaa lista kiinnitetyistä tuuttauksista", - "keyboard_shortcuts.profile": "avaa kirjoittajan profiili", - "keyboard_shortcuts.reply": "vastaa", - "keyboard_shortcuts.requests": "avaa lista seurauspyynnöistä", + "keyboard_shortcuts.legend": "Näytä tämä selite", + "keyboard_shortcuts.local": "Avaa paikallinen aikajana", + "keyboard_shortcuts.mention": "Mainitse julkaisija", + "keyboard_shortcuts.muted": "Avaa lista mykistetyistä käyttäjistä", + "keyboard_shortcuts.my_profile": "Avaa profiilisi", + "keyboard_shortcuts.notifications": "Avaa ilmoitukset-sarake", + "keyboard_shortcuts.open_media": "Avaa media", + "keyboard_shortcuts.pinned": "Avaa lista kiinnitetyistä viesteistä", + "keyboard_shortcuts.profile": "Avaa kirjoittajan profiili", + "keyboard_shortcuts.reply": "Vastaa viestiin", + "keyboard_shortcuts.requests": "Avaa lista seurauspyynnöistä", "keyboard_shortcuts.search": "siirry hakukenttään", "keyboard_shortcuts.spoilers": "näyttääksesi/piilottaaksesi CW kentän", "keyboard_shortcuts.start": "avaa \"Aloitus\" -sarake", "keyboard_shortcuts.toggle_hidden": "näytä/piilota sisältövaroituksella merkitty teksti", "keyboard_shortcuts.toggle_sensitivity": "näytä/piilota media", - "keyboard_shortcuts.toot": "ala kirjoittaa uutta tuuttausta", - "keyboard_shortcuts.unfocus": "siirry pois tekstikentästä tai hakukentästä", - "keyboard_shortcuts.up": "siirry listassa ylöspäin", + "keyboard_shortcuts.toot": "Aloita uusi viesti", + "keyboard_shortcuts.unfocus": "Poistu teksti-/hakukentästä", + "keyboard_shortcuts.up": "Siirry listassa ylöspäin", "lightbox.close": "Sulje", "lightbox.compress": "Pakkaa kuvan näkymälaatikko", "lightbox.expand": "Laajenna kuvan näkymälaatikko", @@ -259,10 +266,10 @@ "lists.replies_policy.none": "Ei kukaan", "lists.replies_policy.title": "Näytä vastaukset:", "lists.search": "Etsi seuraamistasi henkilöistä", - "lists.subheading": "Omat listat", + "lists.subheading": "Omat listasi", "load_pending": "{count, plural, one {# uusi kappale} other {# uutta kappaletta}}", "loading_indicator.label": "Ladataan...", - "media_gallery.toggle_visible": "Säädä näkyvyyttä", + "media_gallery.toggle_visible": "{number, plural, one {Piilota kuva} other {Piilota kuvat}}", "missing_indicator.label": "Ei löytynyt", "missing_indicator.sublabel": "Tätä resurssia ei löytynyt", "mute_modal.duration": "Kesto", @@ -272,10 +279,10 @@ "navigation_bar.blocks": "Estetyt käyttäjät", "navigation_bar.bookmarks": "Kirjanmerkit", "navigation_bar.community_timeline": "Paikallinen aikajana", - "navigation_bar.compose": "Kirjoita uusi tuuttaus", - "navigation_bar.direct": "Viestit", + "navigation_bar.compose": "Luo uusi viesti", + "navigation_bar.direct": "Pikaviestit", "navigation_bar.discover": "Löydä uutta", - "navigation_bar.domain_blocks": "Piilotetut verkkotunnukset", + "navigation_bar.domain_blocks": "Estetyt verkkotunnukset", "navigation_bar.edit_profile": "Muokkaa profiilia", "navigation_bar.favourites": "Suosikit", "navigation_bar.filters": "Mykistetyt sanat", @@ -286,12 +293,12 @@ "navigation_bar.lists": "Listat", "navigation_bar.logout": "Kirjaudu ulos", "navigation_bar.mutes": "Mykistetyt käyttäjät", - "navigation_bar.personal": "Henkilökohtaiset", - "navigation_bar.pins": "Kiinnitetyt tuuttaukset", + "navigation_bar.personal": "Henkilökohtainen", + "navigation_bar.pins": "Kiinnitetyt viestit", "navigation_bar.preferences": "Asetukset", "navigation_bar.public_timeline": "Yleinen aikajana", - "navigation_bar.security": "Tunnukset", - "notification.favourite": "{name} tykkäsi tilastasi", + "navigation_bar.security": "Turvallisuus", + "notification.favourite": "{name} tykkäsi viestistäsi", "notification.follow": "{name} seurasi sinua", "notification.follow_request": "{name} haluaa seurata sinua", "notification.mention": "{name} mainitsi sinut", @@ -330,7 +337,7 @@ "notifications.permission_denied_alert": "Työpöytäilmoituksia ei voi ottaa käyttöön, koska selaimen käyttöoikeus on aiemmin estetty", "notifications.permission_required": "Työpöytäilmoitukset eivät ole käytettävissä, koska siihen tarvittavaa lupaa ei ole myönnetty.", "notifications_permission_banner.enable": "Ota työpöytäilmoitukset käyttöön", - "notifications_permission_banner.how_to_control": "Saadaksesi ilmoituksia, kun Mastodon ei ole auki, ota työpöytäilmoitukset käyttöön. Voit hallita tarkasti, mistä saat työpöytäilmoituksia kun ilmoitukset on otettu käyttöön yllä olevan {icon} -painikkeen kautta.", + "notifications_permission_banner.how_to_control": "Saadaksesi ilmoituksia, kun Mastodon ei ole auki, ota työpöytäilmoitukset käyttöön. Voit hallita tarkasti, mistä saat työpöytäilmoituksia kun ilmoitukset on otettu käyttöön yllä olevan {icon}-painikkeen kautta.", "notifications_permission_banner.title": "Älä anna minkään mennä ohi", "picture_in_picture.restore": "Laita se takaisin", "poll.closed": "Suljettu", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# ääni} other {# ääntä}}", "poll.vote": "Äänestä", "poll.voted": "Äänestit tätä vastausta", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Lisää kysely", "poll_button.remove_poll": "Poista kysely", "privacy.change": "Säädä tuuttauksen näkyvyyttä", @@ -354,40 +362,40 @@ "regeneration_indicator.label": "Ladataan…", "regeneration_indicator.sublabel": "Kotinäkymääsi valmistellaan!", "relative_time.days": "{number} pv", - "relative_time.hours": "{number} h", + "relative_time.hours": "{number} tuntia", "relative_time.just_now": "nyt", - "relative_time.minutes": "{number} m", - "relative_time.seconds": "{number} s", + "relative_time.minutes": "{number} min", + "relative_time.seconds": "{number} sek", "relative_time.today": "tänään", "reply_indicator.cancel": "Peruuta", "report.forward": "Välitä kohteeseen {target}", "report.forward_hint": "Tämä tili on toisella palvelimella. Haluatko lähettää nimettömän raportin myös sinne?", - "report.hint": "Raportti lähetetään oman instanssisi moderaattoreille. Seuraavassa voit kertoa, miksi raportoit tästä tilistä:", + "report.hint": "Raportti lähetetään oman palvelimesi moderaattoreille. Voit kertoa alla, miksi raportoit tästä tilistä:", "report.placeholder": "Lisäkommentit", "report.submit": "Lähetä", "report.target": "Raportoidaan {target}", "search.placeholder": "Hae", "search_popout.search_format": "Tarkennettu haku", - "search_popout.tips.full_text": "Tekstihaku palauttaa tilapäivitykset, jotka olet kirjoittanut, lisännyt suosikkeihisi, boostannut tai joissa sinut mainitaan, sekä tekstin sisältävät käyttäjänimet, nimimerkit ja hastagit.", - "search_popout.tips.hashtag": "hashtagit", + "search_popout.tips.full_text": "Tekstihaku listaa tilapäivitykset, jotka olet kirjoittanut, lisännyt suosikkeihisi, boostannut tai joissa sinut mainitaan, sekä tekstin sisältävät käyttäjänimet, nimimerkit ja hastagit.", + "search_popout.tips.hashtag": "aihetunnisteet", "search_popout.tips.status": "tila", - "search_popout.tips.text": "Tekstihaku palauttaa hakua vastaavat nimimerkit, käyttäjänimet ja hastagit", + "search_popout.tips.text": "Tekstihaku listaa hakua vastaavat nimimerkit, käyttäjänimet ja hastagit", "search_popout.tips.user": "käyttäjä", "search_results.accounts": "Ihmiset", - "search_results.hashtags": "Hashtagit", - "search_results.statuses": "Tuuttaukset", - "search_results.statuses_fts_disabled": "Tuuttausten haku sisällön perusteella ei ole käytössä tällä Mastodon-serverillä.", - "search_results.total": "{count, number} {count, plural, one {tulos} other {tulosta}}", + "search_results.hashtags": "Aihetunnisteet", + "search_results.statuses": "Viestit", + "search_results.statuses_fts_disabled": "Viestien haku sisällön perusteella ei ole käytössä tällä Mastodon-palvelimella.", + "search_results.total": "{count, number} {count, plural, one {tulos} other {tulokset}}", "status.admin_account": "Avaa moderaattorinäkymä tilistä @{name}", - "status.admin_status": "Avaa tilapäivitys moderaattorinäkymässä", + "status.admin_status": "Avaa tämä viesti moderointinäkymässä", "status.block": "Estä @{name}", "status.bookmark": "Tallenna kirjanmerkki", "status.cancel_reblog_private": "Peru buustaus", - "status.cannot_reblog": "Tätä julkaisua ei voi buustata", + "status.cannot_reblog": "Tätä viestiä ei voi buustata", "status.copy": "Kopioi linkki tilapäivitykseen", "status.delete": "Poista", "status.detailed_status": "Yksityiskohtainen keskustelunäkymä", - "status.direct": "Viesti käyttäjälle @{name}", + "status.direct": "Pikaviesti käyttäjälle @{name}", "status.embed": "Upota", "status.favourite": "Tykkää", "status.filtered": "Suodatettu", @@ -397,15 +405,15 @@ "status.more": "Lisää", "status.mute": "Mykistä @{name}", "status.mute_conversation": "Mykistä keskustelu", - "status.open": "Laajenna tilapäivitys", + "status.open": "Laajenna viestit", "status.pin": "Kiinnitä profiiliin", - "status.pinned": "Kiinnitetty tuuttaus", + "status.pinned": "Kiinnitetty viesti", "status.read_more": "Näytä enemmän", "status.reblog": "Buustaa", "status.reblog_private": "Buustaa alkuperäiselle yleisölle", "status.reblogged_by": "{name} buustasi", - "status.reblogs.empty": "Kukaan ei ole vielä buustannut tätä tuuttausta. Kun joku tekee niin, näkyy kyseinen henkilö tässä.", - "status.redraft": "Poista & palauta muokattavaksi", + "status.reblogs.empty": "Kukaan ei ole vielä buustannut tätä viestiä. Kun joku tekee niin, näkyy kyseinen henkilö tässä.", + "status.redraft": "Poista ja palauta muokattavaksi", "status.remove_bookmark": "Poista kirjanmerkki", "status.reply": "Vastaa", "status.replyAll": "Vastaa ketjuun", @@ -436,12 +444,12 @@ "timeline_hint.resources.followers": "Seuraajat", "timeline_hint.resources.follows": "Seuraa", "timeline_hint.resources.statuses": "Vanhemmat tuuttaukset", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} puhuu", "trends.trending_now": "Suosittua nyt", "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.", - "units.short.billion": "{count}B", - "units.short.million": "{count}m", - "units.short.thousand": "{count}k", + "units.short.billion": "{count} miljardia", + "units.short.million": "{count} miljoonaa", + "units.short.thousand": "{count} tuhatta", "upload_area.title": "Lataa raahaamalla ja pudottamalla tähän", "upload_button.label": "Lisää mediaa", "upload_error.limit": "Tiedostolatauksien raja ylitetty.", @@ -454,8 +462,9 @@ "upload_form.video_description": "Kuvaile kuulo- tai näkövammaisille", "upload_modal.analyzing_picture": "Analysoidaan kuvaa…", "upload_modal.apply": "Käytä", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Valitse kuva", - "upload_modal.description_placeholder": "Eräänä jäätävänä ja pimeänä yönä gorilla ratkaisi sudokun kahdessa minuutissa", + "upload_modal.description_placeholder": "Nopea ruskea kettu hyppää laiskan koiran yli", "upload_modal.detect_text": "Tunnista teksti kuvasta", "upload_modal.edit_media": "Muokkaa mediaa", "upload_modal.hint": "Klikkaa tai vedä ympyrä esikatselussa valitaksesi keskipiste, joka näkyy aina pienoiskuvissa.", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index a1746644c..5b6d337a1 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -5,7 +5,7 @@ "account.badges.group": "Groupe", "account.block": "Bloquer @{name}", "account.block_domain": "Bloquer le domaine {domain}", - "account.blocked": "Bloqué·e", + "account.blocked": "Bloqué", "account.browse_more_on_origin_server": "Parcourir davantage sur le profil original", "account.cancel_follow_request": "Annuler la demande de suivi", "account.direct": "Envoyer un message direct à @{name}", @@ -15,17 +15,17 @@ "account.enable_notifications": "Me notifier quand @{name} publie", "account.endorse": "Recommander sur le profil", "account.follow": "Suivre", - "account.followers": "Abonné·e·s", - "account.followers.empty": "Personne ne suit cet·te utilisateur·rice pour l’instant.", - "account.followers_counter": "{count, plural, one {{counter} Abonné·e} other {{counter} Abonné·e·s}}", + "account.followers": "Abonnés", + "account.followers.empty": "Personne ne suit cet utilisateur pour l’instant.", + "account.followers_counter": "{count, plural, one {{counter} Abonné} other {{counter} Abonnés}}", "account.following_counter": "{count, plural, other {{counter} Abonnements}}", - "account.follows.empty": "Cet·te utilisateur·rice ne suit personne pour l’instant.", + "account.follows.empty": "Cet utilisateur ne suit personne pour l’instant.", "account.follows_you": "Vous suit", "account.hide_reblogs": "Masquer les partages de @{name}", "account.joined": "Ici depuis {date}", "account.last_status": "Dernière activité", "account.link_verified_on": "La propriété de ce lien a été vérifiée le {date}", - "account.locked_info": "Ce compte est privé. Son ou sa propriétaire approuve manuellement qui peut le suivre.", + "account.locked_info": "Ce compte est privé. Son propriétaire approuve manuellement qui peut le suivre.", "account.media": "Médias", "account.mention": "Mentionner @{name}", "account.moved_to": "{name} a déménagé vers :", @@ -47,11 +47,16 @@ "account.unmute": "Ne plus masquer @{name}", "account.unmute_notifications": "Ne plus masquer les notifications de @{name}", "account_note.placeholder": "Cliquez pour ajouter une note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Veuillez réessayer après {retry_time, time, medium}.", "alert.rate_limited.title": "Débit limité", "alert.unexpected.message": "Une erreur inattendue s’est produite.", "alert.unexpected.title": "Oups !", "announcement.announcement": "Annonce", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} par semaine", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour passer ceci la prochaine fois", "bundle_column_error.body": "Une erreur s’est produite lors du chargement de ce composant.", @@ -113,15 +118,17 @@ "confirmations.delete.message": "Voulez-vous vraiment supprimer ce message ?", "confirmations.delete_list.confirm": "Supprimer", "confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste ?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Bloquer tout le domaine", - "confirmations.domain_block.message": "Voulez-vous vraiment, vraiment bloquer {domain} en entier ? Dans la plupart des cas, quelques blocages ou masquages ciblés sont suffisants et préférables. Vous ne verrez plus de contenu provenant de ce domaine, ni dans fils publics, ni dans vos notifications. Vos abonné·e·s utilisant ce domaine seront retiré·e·s.", + "confirmations.domain_block.message": "Voulez-vous vraiment, vraiment bloquer {domain} en entier ? Dans la plupart des cas, quelques blocages ou masquages ciblés sont suffisants et préférables. Vous ne verrez plus de contenu provenant de ce domaine, ni dans fils publics, ni dans vos notifications. Vos abonnés utilisant ce domaine seront retirés.", "confirmations.logout.confirm": "Se déconnecter", "confirmations.logout.message": "Voulez-vous vraiment vous déconnecter ?", "confirmations.mute.confirm": "Masquer", "confirmations.mute.explanation": "Cela masquera ses messages et les messages le ou la mentionnant, mais cela lui permettra quand même de voir vos messages et de vous suivre.", "confirmations.mute.message": "Voulez-vous vraiment masquer {name} ?", "confirmations.redraft.confirm": "Supprimer et ré-écrire", - "confirmations.redraft.message": "Êtes-vous sûr·e de vouloir effacer ce statut pour le ré-écrire ? Ses partages ainsi que ses mises en favori seront perdu·e·s et ses réponses seront orphelines.", + "confirmations.redraft.message": "Êtes-vous sûr de vouloir effacer ce statut pour le récrire ? Ses partages ainsi que ses mises en favori seront perdus et ses réponses seront orphelines.", "confirmations.reply.confirm": "Répondre", "confirmations.reply.message": "Répondre maintenant écrasera le message que vous rédigez actuellement. Voulez-vous vraiment continuer ?", "confirmations.unfollow.confirm": "Ne plus suivre", @@ -142,7 +149,7 @@ "emoji_button.food": "Nourriture & Boisson", "emoji_button.label": "Insérer un émoji", "emoji_button.nature": "Nature", - "emoji_button.not_found": "Pas d’émoji !! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "Aucune correspondance d'émoji trouvée", "emoji_button.objects": "Objets", "emoji_button.people": "Personnes", "emoji_button.recent": "Fréquemment utilisés", @@ -153,7 +160,7 @@ "empty_column.account_suspended": "Compte suspendu", "empty_column.account_timeline": "Aucun message ici !", "empty_column.account_unavailable": "Profil non disponible", - "empty_column.blocks": "Vous n’avez bloqué aucun·e utilisateur·rice pour le moment.", + "empty_column.blocks": "Vous n’avez bloqué aucun utilisateur pour le moment.", "empty_column.bookmarked_statuses": "Vous n'avez pas de message en marque-page. Lorsque vous en ajouterez un, il apparaîtra ici.", "empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !", "empty_column.direct": "Vous n’avez pas encore de messages directs. Lorsque vous en enverrez ou recevrez un, il s’affichera ici.", @@ -165,9 +172,9 @@ "empty_column.hashtag": "Il n’y a encore aucun contenu associé à ce hashtag.", "empty_column.home": "Vous ne suivez personne. Visitez {public} ou utilisez la recherche pour trouver d’autres personnes à suivre.", "empty_column.home.suggestions": "Voir quelques suggestions", - "empty_column.list": "Il n’y a rien dans cette liste pour l’instant. Quand des membres de cette liste publieront de nouveaux messages, iels apparaîtront ici.", + "empty_column.list": "Il n’y a rien dans cette liste pour l’instant. Quand des membres de cette liste publieront de nouveaux messages, ils apparaîtront ici.", "empty_column.lists": "Vous n’avez pas encore de liste. Lorsque vous en créerez une, elle apparaîtra ici.", - "empty_column.mutes": "Vous n’avez masqué aucun·e utilisateur·rice pour le moment.", + "empty_column.mutes": "Vous n’avez masqué aucun utilisateur pour le moment.", "empty_column.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres personnes pour débuter la conversation.", "empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres serveurs pour remplir le fil public", "error.unexpected_crash.explanation": "En raison d’un bug dans notre code ou d’un problème de compatibilité avec votre navigateur, cette page n’a pas pu être affichée correctement.", @@ -225,13 +232,13 @@ "keyboard_shortcuts.hotkey": "Raccourci clavier", "keyboard_shortcuts.legend": "Afficher cet aide-mémoire", "keyboard_shortcuts.local": "Ouvrir le fil public local", - "keyboard_shortcuts.mention": "mentionner l’auteur·rice", + "keyboard_shortcuts.mention": "Mentionner l’auteur", "keyboard_shortcuts.muted": "Ouvrir la liste des comptes masqués", "keyboard_shortcuts.my_profile": "Ouvrir votre profil", "keyboard_shortcuts.notifications": "Ouvrir la colonne de notifications", "keyboard_shortcuts.open_media": "ouvrir le média", "keyboard_shortcuts.pinned": "Ouvrir la liste des messages épinglés", - "keyboard_shortcuts.profile": "ouvrir le profil de l’auteur·rice", + "keyboard_shortcuts.profile": "Ouvrir le profil de l’auteur", "keyboard_shortcuts.reply": "Répondre au message", "keyboard_shortcuts.requests": "Ouvrir la liste de demandes d’abonnement", "keyboard_shortcuts.search": "Se placer dans le champ de recherche", @@ -254,7 +261,7 @@ "lists.edit.submit": "Modifier le titre", "lists.new.create": "Ajouter une liste", "lists.new.title_placeholder": "Titre de la nouvelle liste", - "lists.replies_policy.followed": "Comptes que vous suivez", + "lists.replies_policy.followed": "N'importe quel utilisateur suivi", "lists.replies_policy.list": "Membres de la liste", "lists.replies_policy.none": "Personne", "lists.replies_policy.title": "Afficher les réponses à :", @@ -294,7 +301,7 @@ "notification.favourite": "{name} a ajouté le message à ses favoris", "notification.follow": "{name} vous suit", "notification.follow_request": "{name} a demandé à vous suivre", - "notification.mention": "{name} vous a mentionné·e :", + "notification.mention": "{name} vous a mentionné·", "notification.own_poll": "Votre sondage est terminé", "notification.poll": "Un sondage auquel vous avez participé vient de se terminer", "notification.reblog": "{name} a partagé votre message", @@ -306,7 +313,7 @@ "notifications.column_settings.filter_bar.advanced": "Afficher toutes les catégories", "notifications.column_settings.filter_bar.category": "Barre de filtrage rapide", "notifications.column_settings.filter_bar.show": "Afficher", - "notifications.column_settings.follow": "Nouveaux·elles abonné·e·s :", + "notifications.column_settings.follow": "Nouveaux abonnés :", "notifications.column_settings.follow_request": "Nouvelles demandes d’abonnement :", "notifications.column_settings.mention": "Mentions :", "notifications.column_settings.poll": "Résultats des sondage :", @@ -339,16 +346,17 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Voter", "poll.voted": "Vous avez voté pour cette réponse", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Ajouter un sondage", "poll_button.remove_poll": "Supprimer le sondage", "privacy.change": "Ajuster la confidentialité du message", "privacy.direct.long": "Visible uniquement par les comptes mentionnés", "privacy.direct.short": "Direct", "privacy.private.long": "Visible uniquement par vos abonné·e·s", - "privacy.private.short": "Abonné·e·s uniquement", - "privacy.public.long": "Visible par tou·te·s, affiché dans les fils publics", + "privacy.private.short": "Abonnés uniquement", + "privacy.public.long": "Visible par tous, affiché dans les fils publics", "privacy.public.short": "Public", - "privacy.unlisted.long": "Visible par tou·te·s, mais pas dans les fils publics", + "privacy.unlisted.long": "Visible par tous, mais pas dans les fils publics", "privacy.unlisted.short": "Non listé", "refresh": "Actualiser", "regeneration_indicator.label": "Chargement…", @@ -362,7 +370,7 @@ "reply_indicator.cancel": "Annuler", "report.forward": "Transférer à {target}", "report.forward_hint": "Le compte provient d’un autre serveur. Envoyer également une copie anonyme du rapport ?", - "report.hint": "Le rapport sera envoyé aux modérateur·rice·s de votre instance. Vous pouvez expliquer pourquoi vous signalez le compte ci-dessous :", + "report.hint": "Le rapport sera envoyé aux modérateurs de votre instance. Vous pouvez expliquer pourquoi vous signalez le compte ci-dessous :", "report.placeholder": "Commentaires additionnels", "report.submit": "Envoyer", "report.target": "Signalement de {target}", @@ -405,7 +413,7 @@ "status.reblog_private": "Partager à l’audience originale", "status.reblogged_by": "{name} a partagé", "status.reblogs.empty": "Personne n’a encore partagé ce message. Lorsque quelqu’un le fera, il apparaîtra ici.", - "status.redraft": "Supprimer et ré-écrire", + "status.redraft": "Supprimer et récrire", "status.remove_bookmark": "Retirer des marque-pages", "status.reply": "Répondre", "status.replyAll": "Répondre au fil", @@ -421,17 +429,17 @@ "status.unmute_conversation": "Ne plus masquer la conversation", "status.unpin": "Retirer du profil", "suggestions.dismiss": "Rejeter la suggestion", - "suggestions.header": "Vous pourriez être intéressé·e par…", + "suggestions.header": "Vous pourriez être intéressé par…", "tabs_bar.federated_timeline": "Fil public global", "tabs_bar.home": "Accueil", "tabs_bar.local_timeline": "Fil public local", "tabs_bar.notifications": "Notifications", "tabs_bar.search": "Chercher", - "time_remaining.days": "{number, plural, one {# jour} other {# jours}} restant·s", - "time_remaining.hours": "{number, plural, one {# heure} other {# heures}} restantes", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} restantes", + "time_remaining.days": "{number, plural, one {# jour restant} other {# jours restants}}", + "time_remaining.hours": "{number, plural, one {# heure restante} other {# heures restantes}}", + "time_remaining.minutes": "{number, plural, one {# minute restante} other {# minutes restantes}}", "time_remaining.moments": "Encore quelques instants", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} restantes", + "time_remaining.seconds": "{number, plural, one {# seconde restante} other {# secondes restantes}}", "timeline_hint.remote_resource_not_displayed": "{resource} des autres serveurs ne sont pas affichés.", "timeline_hint.resources.followers": "Les abonnés", "timeline_hint.resources.follows": "Les abonnements", @@ -447,13 +455,14 @@ "upload_error.limit": "Taille maximale d'envoi de fichier dépassée.", "upload_error.poll": "L’envoi de fichiers n’est pas autorisé avec les sondages.", "upload_form.audio_description": "Décrire pour les personnes ayant des difficultés d’audition", - "upload_form.description": "Décrire pour les malvoyant·e·s", + "upload_form.description": "Décrire pour les malvoyants", "upload_form.edit": "Modifier", "upload_form.thumbnail": "Changer la vignette", "upload_form.undo": "Supprimer", "upload_form.video_description": "Décrire pour les personnes ayant des problèmes d’audition ou de vision", "upload_modal.analyzing_picture": "Analyse de l’image en cours…", "upload_modal.apply": "Appliquer", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choisir une image", "upload_modal.description_placeholder": "Buvez de ce whisky que le patron juge fameux", "upload_modal.detect_text": "Détecter le texte de l’image", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 7c2dfc17b..9c94c61aa 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -47,11 +47,16 @@ "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "No comment provided", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "Log out", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 5a0f378c1..023ee3ecb 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -47,11 +47,16 @@ "account.unmute": "Dì-mhùch @{name}", "account.unmute_notifications": "Dì-mhùch na brathan o @{name}", "account_note.placeholder": "Briog airson nòta a chur ris", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Feuch ris a-rithist às dèidh {retry_time, time, medium}.", "alert.rate_limited.title": "Cuingeachadh ùine", "alert.unexpected.message": "Thachair mearachd ris nach robh dùil.", "alert.unexpected.title": "Oich!", "announcement.announcement": "Brath-fios", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} gach seachdain", "boost_modal.combo": "Brùth air {combo} nam b’ fheàrr leat leum a ghearradh thar seo an ath-thuras", "bundle_column_error.body": "Chaidh rudeigin cearr nuair a dh’fheuch sinn ris a’ cho-phàirt seo a luchdadh.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "A bheil thu cinnteach gu bheil thu airson am post seo a sguabadh às?", "confirmations.delete_list.confirm": "Sguab às", "confirmations.delete_list.message": "A bheil thu cinnteach gu bheil thu airson an liosta seo a sguabadh às gu buan?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Bac an àrainn uile gu lèir", "confirmations.domain_block.message": "A bheil thu cinnteach dha-rìribh gu bheil thu airson an àrainn {domain} a bhacadh uile gu lèir? Mar as trice, foghnaidh gun dèan thu bacadh no mùchadh no dhà gu sònraichte agus bhiod sin na b’ fheàrr. Chan fhaic thu susbaint on àrainn ud air loidhne-ama phoblach sam bith no am measg nam brathan agad. Thèid an luchd-leantainn agad on àrainn ud a thoirt air falbh.", "confirmations.logout.confirm": "Clàraich a-mach", @@ -133,7 +140,7 @@ "directory.federated": "On cho-shaoghal aithnichte", "directory.local": "O {domain} a-mhàin", "directory.new_arrivals": "Feadhainn ùra", - "directory.recently_active": "Gnìomhach o chionn ghoirid", + "directory.recently_active": "Gnìomhach o chionn goirid", "embed.instructions": "Leabaich am post seo san làrach-lìn agad is tu a’ dèanamh lethbhreac dhen chòd gu h-ìosal.", "embed.preview": "Seo an coltas a bhios air:", "emoji_button.activity": "Gnìomhachd", @@ -145,7 +152,7 @@ "emoji_button.not_found": "Cha deach Emoji iomchaidh a lorg", "emoji_button.objects": "Nithean", "emoji_button.people": "Daoine", - "emoji_button.recent": "Air a chleachdadh o chionn ghoirid", + "emoji_button.recent": "Air a chleachdadh o chionn goirid", "emoji_button.search": "Lorg…", "emoji_button.search_results": "Toraidhean an luirg", "emoji_button.symbols": "Samhlaidhean", @@ -168,7 +175,7 @@ "empty_column.list": "Chan eil dad air an liosta seo fhathast. Nuair a phostaicheas buill a tha air an liosta seo postaichean ùra, nochdaidh iad an-seo.", "empty_column.lists": "Chan eil liosta agad fhathast. Nuair chruthaicheas tu tè, nochdaidh i an-seo.", "empty_column.mutes": "Cha do mhùch thu cleachdaiche sam bith fhathast.", - "empty_column.notifications": "Cha d’ fhuair thu brath sam bith fhathast. Nuair a ghabhas càch eadar-ghnìomh leat, chì thu an-seo e.", + "empty_column.notifications": "Cha d’ fhuair thu brath sam bith fhathast. Nuair a nì càch conaltradh leat, chì thu an-seo e.", "empty_column.public": "Chan eil dad an-seo! Sgrìobh rudeigin gu poblach no lean air càch o fhrithealaichean eile a làimh airson seo a lìonadh", "error.unexpected_crash.explanation": "Air sàilleibh buga sa chòd againn no duilgheadas co-chòrdalachd leis a’ bhrabhsair, chan urrainn dhuinn an duilleag seo a shealltainn mar bu chòir.", "error.unexpected_crash.explanation_addons": "Cha b’ urrainn dhuinn an duilleag seo a shealltainn mar bu chòir. Tha sinn an dùil gu do dh’adhbharaich tuilleadan a’ bhrabhsair no inneal eadar-theangachaidh fèin-obrachail a’ mhearachd.", @@ -330,7 +337,7 @@ "notifications.permission_denied_alert": "Cha ghabh brathan deasga a chur an comas on a chaidh iarrtas ceadan a’ bhrabhsair a dhiùltadh cheana", "notifications.permission_required": "Chan eil brathan deasga ri fhaighinn on nach deach an cead riatanach a thoirt seachad.", "notifications_permission_banner.enable": "Cuir brathan deasga an comas", - "notifications_permission_banner.how_to_control": "Airson brathan fhaighinn nuair nach eil Mastodon fosgailte, cuir na brathan deasga an comas. Tha an smachd agad fhèin air dè na seòrsaichean de dh’eadar-ghnìomhan a ghineas brathan deasga leis a’ phutan {icon} gu h-àrd nuair a bhios iad air an cur an comas.", + "notifications_permission_banner.how_to_control": "Airson brathan fhaighinn nuair nach eil Mastodon fosgailte, cuir na brathan deasga an comas. Tha an smachd agad fhèin air dè na seòrsaichean de chonaltradh a ghineas brathan deasga leis a’ phutan {icon} gu h-àrd nuair a bhios iad air an cur an comas.", "notifications_permission_banner.title": "Na caill dad gu bràth tuilleadh", "picture_in_picture.restore": "Thoir air ais e", "poll.closed": "Dùinte", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# bhòt} two {# bhòt} few {# bhòtaichean} other {# bhòt}}", "poll.vote": "Bhòt", "poll.voted": "Bhòt thu dhan fhreagairt seo", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Cuir cunntas-bheachd ris", "poll_button.remove_poll": "Thoir air falbh an cunntas-bheachd", "privacy.change": "Cuir gleus air prìobhaideachd a’ phuist", @@ -432,7 +440,7 @@ "time_remaining.minutes": "{number, plural, one {# mhionaid} two {# mhionaid} few {# mionaidean} other {# mionaid}} air fhàgail", "time_remaining.moments": "Cha doir e ach greiseag", "time_remaining.seconds": "{number, plural, one {# diog} two {# dhiog} few {# diogan} other {# diog}} air fhàgail", - "timeline_hint.remote_resource_not_displayed": "Cha dèid {stòrasan} o fhrithealaichean eile a shealltainn.", + "timeline_hint.remote_resource_not_displayed": "Cha dèid {resource} o fhrithealaichean eile a shealltainn.", "timeline_hint.resources.followers": "Luchd-leantainn", "timeline_hint.resources.follows": "A’ leantainn air", "timeline_hint.resources.statuses": "Postaichean nas sine", @@ -454,6 +462,7 @@ "upload_form.video_description": "Mìnich e dhan fheadhainn le èisteachd bheag no cion-lèirsinne", "upload_modal.analyzing_picture": "A’ sgrùdadh an deilbh…", "upload_modal.apply": "Cuir an sàs", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Tagh dealbh", "upload_modal.description_placeholder": "Lorg Sìm fiù bò, cè ⁊ neup ’ad àth", "upload_modal.detect_text": "Mothaich dhan teacsa on dealbh", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 087472b86..d85fd97bf 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -47,11 +47,16 @@ "account.unmute": "Deixar de silenciar a @{name}", "account.unmute_notifications": "Deixar de silenciar as notificacións de @{name}", "account_note.placeholder": "Preme para engadir nota", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Téntao novamente após {retry_time, time, medium}.", "alert.rate_limited.title": "Límite de intentos", "alert.unexpected.message": "Aconteceu un fallo non agardado.", "alert.unexpected.title": "Vaites!", "announcement.announcement": "Anuncio", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Preme {combo} para ignorar isto na seguinte vez", "bundle_column_error.body": "Ocorreu un erro ó cargar este compoñente.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Tes a certeza de querer eliminar esta publicación?", "confirmations.delete_list.confirm": "Eliminar", "confirmations.delete_list.message": "Tes a certeza de querer eliminar de xeito permanente esta listaxe?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Agochar dominio enteiro", "confirmations.domain_block.message": "Tes a certeza de querer bloquear todo de {domain}? Na meirande parte dos casos uns bloqueos ou silenciados específicos son suficientes. Non verás máis o contido deste dominio en ningunha cronoloxía pública ou nas túas notificacións. As túas seguidoras deste dominio serán eliminadas.", "confirmations.logout.confirm": "Pechar sesión", @@ -142,7 +149,7 @@ "emoji_button.food": "Comida e Bebida", "emoji_button.label": "Inserir emoticona", "emoji_button.nature": "Natureza", - "emoji_button.not_found": "Non hai emoticonas!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "Non se atoparon emojis", "emoji_button.objects": "Obxectos", "emoji_button.people": "Persoas", "emoji_button.recent": "Empregadas acotío", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# voto} other {# votos}}", "poll.vote": "Votar", "poll.voted": "Votaches por esta opción", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Engadir unha enquisa", "poll_button.remove_poll": "Eliminar enquisa", "privacy.change": "Axustar privacidade", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describir para persoas con problemas visuais ou auditivos", "upload_modal.analyzing_picture": "Estase a analizar a imaxe…", "upload_modal.apply": "Aplicar", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Elixir imaxe", "upload_modal.description_placeholder": "Un raposo veloz brinca sobre o can preguiceiro", "upload_modal.detect_text": "Detectar texto na imaxe", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index ecc1b9eb1..311323d21 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -9,20 +9,20 @@ "account.browse_more_on_origin_server": "המשך לגלוש בפרופיל המקורי", "account.cancel_follow_request": "בטל בקשת מעקב", "account.direct": "Direct Message @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "הפסק לשלוח לי התראות כש@{name} מפרסמים", "account.domain_blocked": "הדומיין חסוי", "account.edit_profile": "עריכת פרופיל", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "שלח לי התראות כש@{name} מפרסמים", "account.endorse": "הצג בפרופיל", "account.follow": "מעקב", "account.followers": "עוקבים", "account.followers.empty": "אף אחד לא עוקב אחר המשתמש הזה עדיין.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural,one {עוקב אחד} other {{counter} עוקבים}}", + "account.following_counter": "{count, plural,one {עוקב אחרי {counter}}other {עוקב אחרי {counter}}}", "account.follows.empty": "משתמש זה לא עוקב אחר אף אחד עדיין.", "account.follows_you": "במעקב אחריך", "account.hide_reblogs": "להסתיר הידהודים מאת @{name}", - "account.joined": "Joined {date}", + "account.joined": "הצטרפו ב{date}", "account.last_status": "פעילות אחרונה", "account.link_verified_on": "בעלות על הקישור הזה נבדקה לאחרונה ב{date}", "account.locked_info": "מצב הפרטיות של החשבון הנוכחי הוגדר כנעול. בעל החשבון קובע באופן פרטני מי יכול לעקוב אחריו.", @@ -47,11 +47,16 @@ "account.unmute": "הפסקת השתקת @{name}", "account.unmute_notifications": "להפסיק הסתרת הודעות מעם @{name}", "account_note.placeholder": "ללא הערה", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "נא לנסות אחרי {retry_time, time, medium}.", "alert.rate_limited.title": "מגבלות מיכסה", "alert.unexpected.message": "אירעה שגיאה בלתי צפויה.", "alert.unexpected.title": "אופס!", "announcement.announcement": "הודעה", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} לשבוע", "boost_modal.combo": "ניתן להקיש {combo} כדי לדלג בפעם הבאה", "bundle_column_error.body": "משהו השתבש בעת הצגת הרכיב הזה.", @@ -91,12 +96,12 @@ "compose_form.lock_disclaimer": "חשבונך אינו {locked}. כל אחד יוכל לעקוב אחריך כדי לקרוא את הודעותיך המיועדות לעוקבים בלבד.", "compose_form.lock_disclaimer.lock": "נעול", "compose_form.placeholder": "מה עובר לך בראש?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.poll.add_option": "הוסיפו בחירה", + "compose_form.poll.duration": "משך הסקר", + "compose_form.poll.option_placeholder": "אפשרות מספר {number}", + "compose_form.poll.remove_option": "הסר בחירה זו", + "compose_form.poll.switch_to_multiple": "אפשרו בחירה מרובה בסקר", + "compose_form.poll.switch_to_single": "אפשרו בחירה בודדת בסקר", "compose_form.publish": "ללחוש", "compose_form.publish_loud": "לחצרץ!", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", @@ -106,17 +111,19 @@ "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "אזהרת תוכן", "confirmation_modal.cancel": "ביטול", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "לחסום ולדווח", "confirmations.block.confirm": "לחסום", "confirmations.block.message": "לחסום את {name}?", "confirmations.delete.confirm": "למחוק", "confirmations.delete.message": "למחוק את ההודעה?", - "confirmations.delete_list.confirm": "Delete", - "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.delete_list.confirm": "למחוק", + "confirmations.delete_list.message": "האם אתם בטוחים שאתם רוצים למחוק את הרשימה לצמיתות?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "הסתר קהילה שלמה", "confirmations.domain_block.message": "באמת באמת לחסום את כל קהילת {domain}? ברב המקרים השתקות נבחרות של מספר משתמשים מסויימים צריכה להספיק.", - "confirmations.logout.confirm": "Log out", - "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.logout.confirm": "להתנתק", + "confirmations.logout.message": "האם אתם בטוחים שאתם רוצים להתנתק?", "confirmations.mute.confirm": "להשתיק", "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "להשתיק את {name}?", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "שינוי פרטיות ההודעה", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 0b987d38d..0bcf2a68b 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -47,11 +47,16 @@ "account.unmute": "अनम्यूट @{name}", "account.unmute_notifications": "@{name} के नोटिफिकेशन अनम्यूट करे", "account_note.placeholder": "नोट्स जोड़ने के लिए क्लिक करें", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "कृप्या {retry_time, time, medium} के बाद दुबारा कोशिश करें", "alert.rate_limited.title": "सीमित दर", "alert.unexpected.message": "एक अप्रत्याशित त्रुटि हुई है!", "alert.unexpected.title": "उफ़!", "announcement.announcement": "घोषणा", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} हर सप्ताह", "boost_modal.combo": "अगली बार स्किप करने के लिए आप {combo} दबा सकते है", "bundle_column_error.body": "इस कॉम्पोनेन्ट को लोड करते वक्त कुछ गलत हो गया", @@ -113,6 +118,8 @@ "confirmations.delete.message": "क्या आप वाकई इस स्टेटस को हटाना चाहते हैं?", "confirmations.delete_list.confirm": "मिटाए", "confirmations.delete_list.message": "क्या आप वाकई इस लिस्ट को हमेशा के लिये मिटाना चाहते हैं?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "संपूर्ण डोमेन छिपाएं", "confirmations.domain_block.message": "क्या आप वास्तव में, वास्तव में आप पूरे {domain} को ब्लॉक करना चाहते हैं? ज्यादातर मामलों में कुछ लक्षित ब्लॉक या म्यूट पर्याप्त और बेहतर हैं। आप किसी भी सार्वजनिक समय-सीमा या अपनी सूचनाओं में उस डोमेन की सामग्री नहीं देखेंगे। उस डोमेन से आपके फॉलोवर्स को हटा दिया जाएगा।", "confirmations.logout.confirm": "लॉग आउट करें", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "वोट", "poll.voted": "आपने इसी उत्तर का चुनाव किया है।", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "लागू करें", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 77da48c90..d11c73860 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -47,11 +47,16 @@ "account.unmute": "Poništi utišavanje @{name}", "account.unmute_notifications": "Ne utišavaj obavijesti od @{name}", "account_note.placeholder": "Kliknite za dodavanje bilješke", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Molimo pokušajte nakon {retry_time, time, medium}.", "alert.rate_limited.title": "Ograničenje učestalosti", "alert.unexpected.message": "Dogodila se neočekivana greška.", "alert.unexpected.title": "Ups!", "announcement.announcement": "Najava", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} tjedno", "boost_modal.combo": "Možete pritisnuti {combo} kako biste preskočili ovo sljedeći put", "bundle_column_error.body": "Nešto je pošlo po zlu tijekom učitavanja ove komponente.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Stvarno želite obrisati ovaj toot?", "confirmations.delete_list.confirm": "Obriši", "confirmations.delete_list.message": "Jeste li sigurni da želite trajno obrisati ovu listu?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Blokiraj cijelu domenu", "confirmations.domain_block.message": "Jeste li zaista, zaista sigurni da želite blokirati cijelu domenu {domain}? U većini slučajeva dovoljno je i preferirano nekoliko ciljanih blokiranja ili utišavanja. Nećete vidjeti sadržaj s te domene ni u kojim javnim vremenskim crtama ili Vašim obavijestima. Vaši pratitelji s te domene bit će uklonjeni.", "confirmations.logout.confirm": "Odjavi se", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# glas} few {# glasa} other {# glasova}}", "poll.vote": "Glasaj", "poll.voted": "Vi ste glasali za ovaj odgovor", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Dodaj anketu", "poll_button.remove_poll": "Ukloni anketu", "privacy.change": "Podesi privatnost toota", @@ -454,6 +462,7 @@ "upload_form.video_description": "Opišite za ljude sa slabim sluhom ili vidom", "upload_modal.analyzing_picture": "Analiza slike…", "upload_modal.apply": "Primijeni", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Odaberite sliku", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detektiraj tekst sa slike", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 07f8b5f10..db08bfc75 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -1,23 +1,23 @@ { - "account.account_note_header": "Feljegyzés", - "account.add_or_remove_from_list": "Hozzáadás vagy eltávolítás a listáról", + "account.account_note_header": "Jegyzet", + "account.add_or_remove_from_list": "Hozzáadás vagy eltávolítás a listákról", "account.badges.bot": "Bot", "account.badges.group": "Csoport", "account.block": "@{name} letiltása", "account.block_domain": "Domain blokkolása: {domain}", "account.blocked": "Letiltva", - "account.browse_more_on_origin_server": "További böngészés az eredeti profilon", - "account.cancel_follow_request": "Követési kérelem törlése", + "account.browse_more_on_origin_server": "Böngéssz tovább az eredeti profilon", + "account.cancel_follow_request": "Követési kérelem visszavonása", "account.direct": "Közvetlen üzenet @{name} számára", "account.disable_notifications": "Ne figyelmeztessen, ha @{name} bejegyzést tesz közzé", - "account.domain_blocked": "Rejtett domain", + "account.domain_blocked": "Letiltott domain", "account.edit_profile": "Profil szerkesztése", "account.enable_notifications": "Figyelmeztessen, ha @{name} bejegyzést tesz közzé", "account.endorse": "Kiemelés a profilodon", "account.follow": "Követés", "account.followers": "Követő", "account.followers.empty": "Ezt a felhasználót még senki sem követi.", - "account.followers_counter": "{count, plural, one {{counter} Követő} other {{counter} Követő}}", + "account.followers_counter": "{count, plural, one {{counter} követő} other {{counter} követő}}", "account.following_counter": "{count, plural, other {{counter} Követett}}", "account.follows.empty": "Ez a felhasználó még senkit sem követ.", "account.follows_you": "Követ téged", @@ -47,11 +47,16 @@ "account.unmute": "@{name} némítás feloldása", "account.unmute_notifications": "@{name} némított értesítéseinek feloldása", "account_note.placeholder": "Klikk a feljegyzéshez", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Próbáld újra {retry_time, time, medium} után.", "alert.rate_limited.title": "Forgalomkorlátozás", "alert.unexpected.message": "Váratlan hiba történt.", "alert.unexpected.title": "Hoppá!", "announcement.announcement": "Közlemény", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} hetente", "boost_modal.combo": "Hogy átugord ezt következő alkalommal, használd {combo}", "bundle_column_error.body": "Valami hiba történt a komponens betöltése közben.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Biztos, hogy törölni szeretnéd ezt a bejegyzést?", "confirmations.delete_list.confirm": "Törlés", "confirmations.delete_list.message": "Biztos, hogy véglegesen törölni szeretnéd ezt a listát?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Teljes domain elrejtése", "confirmations.domain_block.message": "Biztos, hogy le szeretnéd tiltani a teljes {domain} domaint? A legtöbb esetben néhány célzott tiltás vagy némítás elegendő, és kívánatosabb megoldás. Semmilyen tartalmat nem fogsz látni ebből a domainből se az idővonalakon, se az értesítésekben. Az ebben a domainben lévő követőidet is eltávolítjuk.", "confirmations.logout.confirm": "Kijelentkezés", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# szavazat} other {# szavazat}}", "poll.vote": "Szavazás", "poll.voted": "Erre a válaszra szavaztál", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Új szavazás", "poll_button.remove_poll": "Szavazás törlése", "privacy.change": "Bejegyzés láthatóságának módosítása", @@ -454,6 +462,7 @@ "upload_form.video_description": "Írja le a hallás- vagy látássérültek számára", "upload_modal.analyzing_picture": "Kép elemzése…", "upload_modal.apply": "Alkalmaz", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Kép kiválasztása", "upload_modal.description_placeholder": "A gyors, barna róka átugrik a lusta kutya fölött", "upload_modal.detect_text": "Szöveg felismerése a képről", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index a3fd51347..e412917f0 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "Գրառում", + "account.account_note_header": "Նշում", "account.add_or_remove_from_list": "Աւելացնել կամ հեռացնել ցանկերից", "account.badges.bot": "Բոտ", "account.badges.group": "Խումբ", @@ -17,13 +17,13 @@ "account.follow": "Հետեւել", "account.followers": "Հետեւողներ", "account.followers.empty": "Այս օգտատիրոջը դեռ ոչ մէկ չի հետեւում։", - "account.followers_counter": "{count, plural, one {{counter} Հետեւորդ} other {{counter} Հետեւորդներ}}", - "account.following_counter": "{count, plural, other {{counter} Հետեւում են}}", + "account.followers_counter": "{count, plural, one {{counter} Հետեւորդ} other {{counter} Հետեւորդ}}", + "account.following_counter": "{count, plural, one {{counter} հետեւած} other {{counter} հետեւած}}", "account.follows.empty": "Այս օգտատէրը դեռ ոչ մէկի չի հետեւում։", "account.follows_you": "Հետեւում է քեզ", "account.hide_reblogs": "Թաքցնել @{name}֊ի տարածածները", - "account.joined": "Joined {date}", - "account.last_status": "Վերջին թութը", + "account.joined": "Միացել է {date}-ից", + "account.last_status": "Վերջին այցը", "account.link_verified_on": "Սոյն յղման տիրապետումը ստուգուած է՝ {date}֊ին", "account.locked_info": "Սոյն հաշուի գաղտնիութեան մակարդակը նշուած է որպէս՝ փակ։ Հաշուի տէրն ընտրում է, թէ ով կարող է հետեւել իրեն։", "account.media": "Մեդիա", @@ -33,13 +33,13 @@ "account.mute_notifications": "Անջատել ծանուցումները @{name}֊ից", "account.muted": "Լռեցուած", "account.never_active": "Երբեք", - "account.posts": "Թութ", - "account.posts_with_replies": "Թթեր եւ պատասխաններ", + "account.posts": "Գրառումներ", + "account.posts_with_replies": "Գրառումներ եւ պատասխաններ", "account.report": "Բողոքել @{name}֊ի մասին", "account.requested": "Հաստատման կարիք ունի։ Սեղմիր՝ հետեւելու հայցը չեղարկելու համար։", "account.share": "Կիսուել @{name}֊ի էջով", "account.show_reblogs": "Ցուցադրել @{name}֊ի տարածածները", - "account.statuses_counter": "{count, plural, one {{counter} Թութ} other {{counter} Թութեր}}", + "account.statuses_counter": "{count, plural, one {{counter} Գրառում} other {{counter} Գրառումներ}}", "account.unblock": "Ապաարգելափակել @{name}֊ին", "account.unblock_domain": "Ցուցադրել {domain} թաքցուած տիրոյթի գրառումները", "account.unendorse": "Չցուցադրել անձնական էջում", @@ -47,11 +47,16 @@ "account.unmute": "Ապալռեցնել @{name}֊ին", "account.unmute_notifications": "Միացնել ծանուցումները @{name}֊ից", "account_note.placeholder": "Սեղմէ՛ք գրառելու համար\n", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Փորձէք որոշ ժամանակ անց՝ {retry_time, time, medium}։", "alert.rate_limited.title": "Գործողութիւնների յաճախութիւնը գերազանցում է թոյլատրելին", "alert.unexpected.message": "Անսպասելի սխալ տեղի ունեցաւ։", "alert.unexpected.title": "Վա՜յ", "announcement.announcement": "Յայտարարութիւններ", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "շաբաթը՝ {count}", "boost_modal.combo": "Կարող ես սեղմել {combo}՝ սա յաջորդ անգամ բաց թողնելու համար", "bundle_column_error.body": "Այս բաղադրիչը բեռնելու ընթացքում ինչ֊որ բան խափանուեց։", @@ -72,7 +77,7 @@ "column.lists": "Ցանկեր", "column.mutes": "Լռեցրած օգտատէրեր", "column.notifications": "Ծանուցումներ", - "column.pins": "Ամրացուած թթեր", + "column.pins": "Ամրացուած գրառում", "column.public": "Դաշնային հոսք", "column_back_button.label": "Ետ", "column_header.hide_settings": "Թաքցնել կարգաւորումները", @@ -85,9 +90,9 @@ "community.column_settings.local_only": "Միայն տեղական", "community.column_settings.media_only": "Միայն մեդիա", "community.column_settings.remote_only": "Միայն հեռակայ", - "compose_form.direct_message_warning": "Այս թութը տեսանելի կը լինի միայն նշուած օգտատէրերին։", + "compose_form.direct_message_warning": "Այս գրառումը տեսանելի կը լինի միայն նշուած օգտատէրերին։", "compose_form.direct_message_warning_learn_more": "Իմանալ աւելին", - "compose_form.hashtag_warning": "Այս թութը չի հաշուառուի որեւէ պիտակի տակ, քանզի այն ծածուկ է։ Միայն հրապարակային թթերը հնարաւոր է որոնել պիտակներով։", + "compose_form.hashtag_warning": "Այս գրառումը չի հաշուառուի որեւէ պիտակի տակ, քանզի այն ծածուկ է։ Միայն հրապարակային թթերը հնարաւոր է որոնել պիտակներով։", "compose_form.lock_disclaimer": "Քո հաշիւը {locked} չէ։ Իւրաքանչիւրութիւն ոք կարող է հետեւել քեզ եւ տեսնել միայն հետեւողների համար նախատեսուած գրառումները։", "compose_form.lock_disclaimer.lock": "փակ", "compose_form.placeholder": "Ի՞նչ կայ մտքիդ", @@ -97,8 +102,8 @@ "compose_form.poll.remove_option": "Հեռացնել այս տարբերակը", "compose_form.poll.switch_to_multiple": "Հարցումը դարձնել բազմակի ընտրութեամբ", "compose_form.poll.switch_to_single": "Հարցումը դարձնել եզակի ընտրութեամբ", - "compose_form.publish": "Թթել", - "compose_form.publish_loud": "Թթե՜լ", + "compose_form.publish": "Հրապարակել", + "compose_form.publish_loud": "Հրապարակե՜լ", "compose_form.sensitive.hide": "Նշել մեդիան որպէս դիւրազգաց", "compose_form.sensitive.marked": "Մեդիան նշուած է որպէս դիւրազգաց", "compose_form.sensitive.unmarked": "Մեդիան նշուած չէ որպէս դիւրազգաց", @@ -110,9 +115,11 @@ "confirmations.block.confirm": "Արգելափակել", "confirmations.block.message": "Վստա՞հ ես, որ ուզում ես արգելափակել {name}֊ին։", "confirmations.delete.confirm": "Ջնջել", - "confirmations.delete.message": "Վստա՞հ ես, որ ուզում ես ջնջել այս թութը։", + "confirmations.delete.message": "Վստա՞հ ես, որ ուզում ես ջնջել այս գրառումը։", "confirmations.delete_list.confirm": "Ջնջել", "confirmations.delete_list.message": "Վստա՞հ ես, որ ուզում ես մշտապէս ջնջել այս ցանկը։", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Թաքցնել ամբողջ տիրույթը", "confirmations.domain_block.message": "Հաստատ֊հաստա՞տ վստահ ես, որ ուզում ես արգելափակել ամբողջ {domain} տիրոյթը։ Սովորաբար մի երկու թիրախաւորուած արգելափակում կամ լռեցում բաւական է ու նախընտրելի։", "confirmations.logout.confirm": "Ելք", @@ -121,7 +128,7 @@ "confirmations.mute.explanation": "Սա թաքցնելու ա իրենց գրառումներն, ինչպէս նաեւ իրենց նշող գրառումներն, բայց իրենք միեւնոյն է կը կարողանան հետեւել ձեզ եւ տեսնել ձեր գրառումները։", "confirmations.mute.message": "Վստա՞հ ես, որ ուզում ես {name}֊ին լռեցնել։", "confirmations.redraft.confirm": "Ջնջել եւ խմբագրել նորից", - "confirmations.redraft.message": "Վստահ ե՞ս, որ ցանկանում ես ջնջել եւ վերախմբագրել այս թութը։ Դու կը կորցնես այս գրառման բոլոր պատասխանները, տարածումները եւ հաւանումները։", + "confirmations.redraft.message": "Վստահ ե՞ս, որ ցանկանում ես ջնջել եւ վերախմբագրել այս գրառումը։ Դու կը կորցնես այս գրառման բոլոր պատասխանները, տարածումները եւ հաւանումները։", "confirmations.reply.confirm": "Պատասխանել", "confirmations.reply.message": "Այս պահին պատասխանելը կը չեղարկի ձեր՝ այս պահին անաւարտ հաղորդագրութիւնը։ Համոզուա՞ծ էք։", "confirmations.unfollow.confirm": "Ապահետեւել", @@ -134,8 +141,8 @@ "directory.local": "{domain} տիրոյթից միայն", "directory.new_arrivals": "Նորեկներ", "directory.recently_active": "Վերջերս ակտիւ", - "embed.instructions": "Այս թութը քո կայքում ներդնելու համար կարող ես պատճէնել ներքինանալ կոդը։", - "embed.preview": "Ահայ, թէ ինչ տեսք կը ունենայ այն՝", + "embed.instructions": "Այս գրառումը քո կայքում ներդնելու համար կարող ես պատճէնել ներքեւի կոդը։", + "embed.preview": "Ահա, թէ ինչ տեսք կը ունենայ այն՝", "emoji_button.activity": "Զբաղմունքներ", "emoji_button.custom": "Յատուկ", "emoji_button.flags": "Դրօշներ", @@ -151,21 +158,21 @@ "emoji_button.symbols": "Նշաններ", "emoji_button.travel": "Ուղեւորութիւն եւ տեղանքներ", "empty_column.account_suspended": "Հաշիւը արգելափակուած է", - "empty_column.account_timeline": "Այստեղ թթեր չկա՛ն։", + "empty_column.account_timeline": "Այստեղ գրառումներ չկա՛ն։", "empty_column.account_unavailable": "Անձնական էջը հասանելի չի", "empty_column.blocks": "Դու դեռ ոչ մէկի չես արգելափակել։", - "empty_column.bookmarked_statuses": "Դու դեռ չունես որեւէ էջանշւած թութ։ Երբ էջանշես, դրանք կը երեւան այստեղ։", + "empty_column.bookmarked_statuses": "Դու դեռ չունես որեւէ էջանշուած գրառում։ Երբ էջանշես, դրանք կը երեւան այստեղ։", "empty_column.community": "Տեղական հոսքը դատարկ է։ Հրապարակային մի բան գրի՛ր շարժիչը գործարկելու համար։", "empty_column.direct": "Դու դեռ չունես ոչ մի հասցէագրուած հաղորդագրութիւն։ Երբ ուղարկես կամ ստանաս որեւէ անձնական նամակ, այն այստեղ կերեւայ։", "empty_column.domain_blocks": "Թաքցուած տիրոյթներ դեռ չկան։", - "empty_column.favourited_statuses": "Դու դեռ չունես որեւէ հաւանած թութ։ Երբ հաւանես, դրանք կերեւան այստեղ։", - "empty_column.favourites": "Այս թութը ոչ մէկ դեռ չի հաւանել։ Հաւանողները կերեւան այստեղ, երբ նշեն թութը հաւանած։", - "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.favourited_statuses": "Դու դեռ չունես որեւէ հաւանած գրառում։ Երբ հաւանես, դրանք կերեւան այստեղ։", + "empty_column.favourites": "Այս գրառումը ոչ մէկ դեռ չի հաւանել։ Հաւանողները կերեւան այստեղ, երբ հաւանեն։", + "empty_column.follow_recommendations": "Կարծես քեզ համար ոչ մի առաջարկ չի գեներացուել։ Օգտագործիր որոնման դաշտը մարդկանց փնտրելու համար կամ բացայայտիր յայտնի պիտակներով։", "empty_column.follow_requests": "Դու դեռ չունես որեւէ հետեւելու յայտ։ Բոլոր նման յայտերը կը յայտնուեն այստեղ։", "empty_column.hashtag": "Այս պիտակով դեռ ոչինչ չկայ։", "empty_column.home": "Քո հիմնական հոսքը դատարկ է։ Այցելի՛ր {public}ը կամ օգտուիր որոնումից՝ այլ մարդկանց հանդիպելու համար։", - "empty_column.home.suggestions": "See some suggestions", - "empty_column.list": "Այս ցանկում դեռ ոչինչ չկայ։ Երբ ցանկի անդամներից որեւէ մեկը նոր թութ գրի, այն կը յայտնուի այստեղ։", + "empty_column.home.suggestions": "Տեսնել որոշ առաջարկներ", + "empty_column.list": "Այս ցանկում դեռ ոչինչ չկայ։ Երբ ցանկի անդամներից որեւէ մէկը նոր գրառում անի, այն կը յայտնուի այստեղ։", "empty_column.lists": "Դուք դեռ չունէք ստեղծած ցանկ։ Ցանկ ստեղծելուն պէս այն կը յայտնուի այստեղ։", "empty_column.mutes": "Առայժմ ոչ ոքի չէք լռեցրել։", "empty_column.notifications": "Ոչ մի ծանուցում դեռ չունես։ Բզիր միւսներին՝ խօսակցութիւնը սկսելու համար։", @@ -176,9 +183,9 @@ "error.unexpected_crash.next_steps_addons": "Փորձիր անջատել յաւելուածները եւ թարմացնել էջը։ Եթե դա չօգնի, կարող ես օգտուել Մաստադոնից այլ դիտարկիչով կամ յաւելուածով։", "errors.unexpected_crash.copy_stacktrace": "Պատճենել սթաքթրեյսը սեղմատախտակին", "errors.unexpected_crash.report_issue": "Զեկուցել խնդրի մասին", - "follow_recommendations.done": "Done", - "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", - "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", + "follow_recommendations.done": "Աւարտուած է", + "follow_recommendations.heading": "Հետեւիր այն մարդկանց, որոնց գրառումները կը ցանկանաս տեսնել։ Ահա մի քանի առաջարկ։", + "follow_recommendations.lead": "Քո հոսքում, ժամանակագրական դասաւորութեամբ կը տեսնես այն մարդկանց գրառումները, որոնց հետեւում ես։ Մի վախեցիր սխալուել, դու միշտ կարող ես հեշտութեամբ ապահետեւել մարդկանց։", "follow_request.authorize": "Վաւերացնել", "follow_request.reject": "Մերժել", "follow_requests.unlocked_explanation": "Այս հարցումը ուղարկուած է հաշուից, որի համար {domain}-ի անձնակազմը միացրել է ձեռքով ստուգում։", @@ -216,7 +223,7 @@ "keyboard_shortcuts.description": "Նկարագրութիւն", "keyboard_shortcuts.direct": "հասցէագրուած գրուածքների հոսքը բացելու համար", "keyboard_shortcuts.down": "ցանկով ներքեւ շարժուելու համար", - "keyboard_shortcuts.enter": "թութը բացելու համար", + "keyboard_shortcuts.enter": "Գրառումը բացելու համար", "keyboard_shortcuts.favourite": "հաւանելու համար", "keyboard_shortcuts.favourites": "էջանիշերի ցուցակը բացելու համար", "keyboard_shortcuts.federated": "դաշնային հոսքին անցնելու համար", @@ -230,7 +237,7 @@ "keyboard_shortcuts.my_profile": "սեփական էջին անցնելու համար", "keyboard_shortcuts.notifications": "ծանուցումների սիւնակը բացելու համար", "keyboard_shortcuts.open_media": "ցուցադրել մեդիան", - "keyboard_shortcuts.pinned": "ամրացուած թթերի ցանկը բացելու համար", + "keyboard_shortcuts.pinned": "Բացել ամրացուած գրառումների ցանկը", "keyboard_shortcuts.profile": "հեղինակի անձնական էջը բացելու համար", "keyboard_shortcuts.reply": "պատասխանելու համար", "keyboard_shortcuts.requests": "հետեւելու հայցերի ցանկը դիտելու համար", @@ -239,7 +246,7 @@ "keyboard_shortcuts.start": "«սկսել» սիւնակը բացելու համար", "keyboard_shortcuts.toggle_hidden": "CW֊ի ետեւի տեքստը ցուցադրել֊թաքցնելու համար", "keyboard_shortcuts.toggle_sensitivity": "մեդիան ցուցադրել֊թաքցնելու համար", - "keyboard_shortcuts.toot": "թարմ թութ սկսելու համար", + "keyboard_shortcuts.toot": "Նոր գրառում անելու համար", "keyboard_shortcuts.unfocus": "տեքստի/որոնման տիրոյթից ապասեւեռուելու համար", "keyboard_shortcuts.up": "ցանկով վերեւ շարժուելու համար", "lightbox.close": "Փակել", @@ -266,13 +273,13 @@ "missing_indicator.label": "Չգտնուեց", "missing_indicator.sublabel": "Պաշարը չի գտնւում", "mute_modal.duration": "Տեւողութիւն", - "mute_modal.hide_notifications": "Թաքցնե՞լ ցանուցումներն այս օգտատիրոջից։", + "mute_modal.hide_notifications": "Թաքցնե՞լ ծանուցումներն այս օգտատիրոջից։", "mute_modal.indefinite": "Անժամկէտ", "navigation_bar.apps": "Դիւրակիր յաւելուածներ", "navigation_bar.blocks": "Արգելափակուած օգտատէրեր", "navigation_bar.bookmarks": "Էջանիշեր", "navigation_bar.community_timeline": "Տեղական հոսք", - "navigation_bar.compose": "Գրել նոր թութ", + "navigation_bar.compose": "Ստեղծել նոր գրառում", "navigation_bar.direct": "Հասցէագրուած", "navigation_bar.discover": "Բացայայտել", "navigation_bar.domain_blocks": "Թաքցուած տիրոյթներ", @@ -287,18 +294,18 @@ "navigation_bar.logout": "Դուրս գալ", "navigation_bar.mutes": "Լռեցրած օգտատէրեր", "navigation_bar.personal": "Անձնական", - "navigation_bar.pins": "Ամրացուած թթեր", + "navigation_bar.pins": "Ամրացուած գրառումներ", "navigation_bar.preferences": "Նախապատուութիւններ", "navigation_bar.public_timeline": "Դաշնային հոսք", "navigation_bar.security": "Անվտանգութիւն", - "notification.favourite": "{name} հաւանեց թութդ", + "notification.favourite": "{name} հաւանեց գրառումդ", "notification.follow": "{name} սկսեց հետեւել քեզ", "notification.follow_request": "{name} քեզ հետեւելու հայց է ուղարկել", "notification.mention": "{name} նշեց քեզ", "notification.own_poll": "Հարցումդ աւարտուեց", "notification.poll": "Հարցումը, ուր դու քուէարկել ես, աւարտուեց։", - "notification.reblog": "{name} տարածեց թութդ", - "notification.status": "{name} հենց նոր թթեց", + "notification.reblog": "{name} տարածեց գրառումդ", + "notification.status": "{name} հենց նոր գրառում արեց", "notifications.clear": "Մաքրել ծանուցումները", "notifications.clear_confirmation": "Վստա՞հ ես, որ ուզում ես մշտապէս մաքրել քո բոլոր ծանուցումները։", "notifications.column_settings.alert": "Աշխատատիրոյթի ծանուցումներ", @@ -314,8 +321,8 @@ "notifications.column_settings.reblog": "Տարածածներից՝", "notifications.column_settings.show": "Ցուցադրել սիւնում", "notifications.column_settings.sound": "Ձայն հանել", - "notifications.column_settings.status": "Նոր թթեր։", - "notifications.column_settings.unread_markers.category": "Unread notification markers", + "notifications.column_settings.status": "Նոր գրառումներ։", + "notifications.column_settings.unread_markers.category": "Չկարդացուած ծանուցումների նշաններ", "notifications.filter.all": "Բոլորը", "notifications.filter.boosts": "Տարածածները", "notifications.filter.favourites": "Հաւանածները", @@ -339,16 +346,17 @@ "poll.total_votes": "{count, plural, one {# ձայն} other {# ձայն}}", "poll.vote": "Քուէարկել", "poll.voted": "Դու քուէարկել ես այս տարբերակի համար", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Աւելացնել հարցում", "poll_button.remove_poll": "Հեռացնել հարցումը", - "privacy.change": "Կարգաւորել թթի գաղտնիութիւնը", - "privacy.direct.long": "Թթել միայն նշուած օգտատէրերի համար", + "privacy.change": "Կարգաւորել գրառման գաղտնիութիւնը", + "privacy.direct.long": "Կը տեսնեն միայն նշուած օգտատէրերը", "privacy.direct.short": "Հասցէագրուած", - "privacy.private.long": "Թթել միայն հետեւողների համար", + "privacy.private.long": "Կը տեսնեն միայն հետեւորդները", "privacy.private.short": "Միայն հետեւողներին", - "privacy.public.long": "Թթել հրապարակային հոսքերում", + "privacy.public.long": "Կը տեսնեն բոլոր, հրապարակային հոսքում", "privacy.public.short": "Հրապարակային", - "privacy.unlisted.long": "Չթթել հրապարակային հոսքերում", + "privacy.unlisted.long": "Կը տեսնեն բոլոր, բայց ոչ հրապարակային հոսքում", "privacy.unlisted.short": "Ծածուկ", "refresh": "Թարմացնել", "regeneration_indicator.label": "Բեռնւում է…", @@ -370,20 +378,20 @@ "search_popout.search_format": "Փնտրելու առաջադէմ ձեւ", "search_popout.tips.full_text": "Պարզ տեքստը վերադարձնում է գրառումներդ, հաւանածներդ, տարածածներդ, որտեղ ես նշուած եղել, ինչպէս նաեւ նման օգտանուններ, անուններ եւ պիտակներ։", "search_popout.tips.hashtag": "պիտակ", - "search_popout.tips.status": "թութ", + "search_popout.tips.status": "գրառում", "search_popout.tips.text": "Հասարակ տեքստը կը վերադարձնի համընկնող անուններ, օգտանուններ ու պիտակներ", "search_popout.tips.user": "օգտատէր", "search_results.accounts": "Մարդիկ", "search_results.hashtags": "Պիտակներ", - "search_results.statuses": "Թթեր", - "search_results.statuses_fts_disabled": "Այս հանգոյցում միացուած չէ ըստ բովանդակութեան թթեր փնտրելու հնարաւորութիւնը։", + "search_results.statuses": "Գրառումներ", + "search_results.statuses_fts_disabled": "Այս հանգոյցում միացուած չէ ըստ բովանդակութեան գրառում փնտրելու հնարաւորութիւնը։", "search_results.total": "{count, number} {count, plural, one {արդիւնք} other {արդիւնք}}", "status.admin_account": "Բացել @{name} օգտատիրոջ մոդերացիայի դիմերէսը։", "status.admin_status": "Բացել այս գրառումը մոդերատորի դիմերէսի մէջ", "status.block": "Արգելափակել @{name}֊ին", "status.bookmark": "Էջանիշ", "status.cancel_reblog_private": "Ապատարածել", - "status.cannot_reblog": "Այս թութը չի կարող տարածուել", + "status.cannot_reblog": "Այս գրառումը չի կարող տարածուել", "status.copy": "Պատճէնել գրառման յղումը", "status.delete": "Ջնջել", "status.detailed_status": "Շղթայի ընդլայնուած դիտում", @@ -397,14 +405,14 @@ "status.more": "Աւելին", "status.mute": "Լռեցնել @{name}֊ին", "status.mute_conversation": "Լռեցնել խօսակցութիւնը", - "status.open": "Ընդարձակել այս թութը", + "status.open": "Ընդարձակել այս գրառումը", "status.pin": "Ամրացնել անձնական էջում", - "status.pinned": "Ամրացուած թութ", + "status.pinned": "Ամրացուած գրառում", "status.read_more": "Կարդալ աւելին", "status.reblog": "Տարածել", "status.reblog_private": "Տարածել սեփական լսարանին", "status.reblogged_by": "{name} տարածել է", - "status.reblogs.empty": "Այս թութը ոչ մէկ դեռ չի տարածել։ Տարածողները կերեւան այստեղ, երբ որեւէ մէկը տարածի։", + "status.reblogs.empty": "Այս գրառումը ոչ մէկ դեռ չի տարածել։ Տարածողները կերեւան այստեղ, երբ տարածեն։", "status.redraft": "Ջնջել եւ վերակազմել", "status.remove_bookmark": "Հեռացնել էջանիշերից", "status.reply": "Պատասխանել", @@ -435,7 +443,7 @@ "timeline_hint.remote_resource_not_displayed": "{resource} այլ սպասարկիչներից չեն ցուցադրվել:", "timeline_hint.resources.followers": "Հետևորդներ", "timeline_hint.resources.follows": "Հետեւել", - "timeline_hint.resources.statuses": "Հին թութեր", + "timeline_hint.resources.statuses": "Հին գրառումներ", "trends.counter_by_accounts": "{count, plural, one {{counter} մարդ} other {{counter} մարդիկ}} խօսում են", "trends.trending_now": "Այժմ արդիական", "ui.beforeunload": "Քո սեւագիրը կը կորի, եթէ լքես Մաստոդոնը։", @@ -454,6 +462,7 @@ "upload_form.video_description": "Նկարագրիր տեսանիւթը լսողական կամ տեսողական խնդիրներով անձանց համար", "upload_modal.analyzing_picture": "Լուսանկարի վերլուծում…", "upload_modal.apply": "Կիրառել", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Ընտրել նկար", "upload_modal.description_placeholder": "Բել դղեակի ձախ ժամն օֆ ազգութեանը ցպահանջ չճշտած վնաս էր եւ փառք։", "upload_modal.detect_text": "Յայտնաբերել տեքստը նկարից", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index ef76f295b..a664aff56 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -4,19 +4,19 @@ "account.badges.bot": "Bot", "account.badges.group": "Grup", "account.block": "Blokir @{name}", - "account.block_domain": "Sembunyikan segalanya dari {domain}", + "account.block_domain": "Blokir domain {domain}", "account.blocked": "Terblokir", "account.browse_more_on_origin_server": "Lihat lebih lanjut diprofil asli", "account.cancel_follow_request": "Batalkan permintaan ikuti", - "account.direct": "Direct Message @{name}", + "account.direct": "Pesan Langsung @{name}", "account.disable_notifications": "Berhenti memberitahu saya ketika @{name} memposting", - "account.domain_blocked": "Domain disembunyikan", + "account.domain_blocked": "Domain diblokir", "account.edit_profile": "Ubah profil", "account.enable_notifications": "Beritahu saya saat @{name} memposting", "account.endorse": "Tampilkan di profil", "account.follow": "Ikuti", "account.followers": "Pengikut", - "account.followers.empty": "Tidak ada satupun yang mengkuti pengguna ini saat ini.", + "account.followers.empty": "Pengguna ini belum ada pengikut.", "account.followers_counter": "{count, plural, other {{counter} Pengikut}}", "account.following_counter": "{count, plural, other {{counter} Mengikuti}}", "account.follows.empty": "Pengguna ini belum mengikuti siapapun.", @@ -25,15 +25,15 @@ "account.joined": "Bergabung {date}", "account.last_status": "Terakhir aktif", "account.link_verified_on": "Kepemilikan tautan ini telah dicek pada {date}", - "account.locked_info": "Status privasi akun ini disetel untuk dikunci. Pemilik secara manual meninjau siapa yang dapat mengikuti mereka.", + "account.locked_info": "Status privasi akun ini disetel untuk dikunci. Pemilik secara manual meninjau siapa yang dapat mengikutinya.", "account.media": "Media", "account.mention": "Balasan @{name}", "account.moved_to": "{name} telah pindah ke:", "account.mute": "Bisukan @{name}", - "account.mute_notifications": "Sembunyikan notifikasi dari @{name}", + "account.mute_notifications": "Bisukan pemberitahuan dari @{name}", "account.muted": "Dibisukan", "account.never_active": "Tak pernah", - "account.posts": "Toot", + "account.posts": "Kiriman", "account.posts_with_replies": "Postingan dengan balasan", "account.report": "Laporkan @{name}", "account.requested": "Menunggu persetujuan. Klik untuk membatalkan permintaan", @@ -45,13 +45,18 @@ "account.unendorse": "Jangan tampilkan di profil", "account.unfollow": "Berhenti mengikuti", "account.unmute": "Berhenti membisukan @{name}", - "account.unmute_notifications": "Munculkan notifikasi dari @{name}", + "account.unmute_notifications": "Berhenti bisukan pemberitahuan dari @{name}", "account_note.placeholder": "Klik untuk menambah catatan", - "alert.rate_limited.message": "Tolong ulangi setelah {retry_time, time, medium}.", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", + "alert.rate_limited.message": "Mohon ulangi setelah {retry_time, time, medium}.", "alert.rate_limited.title": "Batasan tingkat", "alert.unexpected.message": "Terjadi kesalahan yang tidak terduga.", "alert.unexpected.title": "Ups!", "announcement.announcement": "Pengumuman", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per minggu", "boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini", "bundle_column_error.body": "Kesalahan terjadi saat memuat komponen ini.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Apa anda yakin untuk menghapus status ini?", "confirmations.delete_list.confirm": "Hapus", "confirmations.delete_list.message": "Apakah anda yakin untuk menghapus daftar ini secara permanen?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Sembunyikan keseluruhan domain", "confirmations.domain_block.message": "Apakah anda benar benar yakin untuk memblokir keseluruhan {domain}? Dalam kasus tertentu beberapa pemblokiran atau penyembunyian lebih baik.", "confirmations.logout.confirm": "Keluar", @@ -282,7 +289,7 @@ "navigation_bar.follow_requests": "Permintaan mengikuti", "navigation_bar.follows_and_followers": "Ikuti dan pengikut", "navigation_bar.info": "Informasi selengkapnya", - "navigation_bar.keyboard_shortcuts": "Keyboard shortcuts", + "navigation_bar.keyboard_shortcuts": "Pintasan keyboard", "navigation_bar.lists": "Daftar", "navigation_bar.logout": "Keluar", "navigation_bar.mutes": "Pengguna dibisukan", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, other {# suara}}", "poll.vote": "Memilih", "poll.voted": "Anda memilih jawaban ini", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Tambah japat", "poll_button.remove_poll": "Hapus japat", "privacy.change": "Tentukan privasi status", @@ -454,6 +462,7 @@ "upload_form.video_description": "Penjelasan untuk orang dengan gangguan pendengaran atau penglihatan", "upload_modal.analyzing_picture": "Analisis gambar…", "upload_modal.apply": "Terapkan", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Pilih gambar", "upload_modal.description_placeholder": "Muharjo seorang xenofobia universal yang takut pada warga jazirah, contohnya Qatar", "upload_modal.detect_text": "Deteksi teks pada gambar", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index dd034dbdc..a0c7c4912 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -47,11 +47,16 @@ "account.unmute": "Ne plus celar @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Tu povas presar sur {combo} por omisar co en la venonta foyo", "bundle_column_error.body": "Something went wrong while loading this component.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", "confirmations.logout.confirm": "Log out", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Aranjar privateso di mesaji", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 427c75d18..9aeca30ac 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -1,15 +1,15 @@ { "account.account_note_header": "Minnispunktur", - "account.add_or_remove_from_list": "Bæta á eða fjarlægja af listum", - "account.badges.bot": "Róbót", + "account.add_or_remove_from_list": "Bæta við eða fjarlægja af listum", + "account.badges.bot": "Þjarkur", "account.badges.group": "Hópur", - "account.block": "Útiloka @{name}", + "account.block": "Loka á @{name}", "account.block_domain": "Fela allt frá {domain}", - "account.blocked": "Útilokaður", + "account.blocked": "Lokað á", "account.browse_more_on_origin_server": "Skoða nánari upplýsingar á notandasniðinu", - "account.cancel_follow_request": "Hætta við beiðni um að fylgjast með", + "account.cancel_follow_request": "Hætta við beiðni um að fylgjas", "account.direct": "Bein skilaboð til @{name}", - "account.disable_notifications": "Hætta að láta mig vita þegar @{name} sendir inn", + "account.disable_notifications": "Hættu að láta mig vita þegar @{name} þýtur", "account.domain_blocked": "Lén falið", "account.edit_profile": "Breyta notandasniði", "account.enable_notifications": "Láta mig vita þegar @{name} sendir inn", @@ -33,8 +33,8 @@ "account.mute_notifications": "Þagga tilkynningar frá @{name}", "account.muted": "Þaggað", "account.never_active": "Aldrei", - "account.posts": "Tíst", - "account.posts_with_replies": "Tíst og svör", + "account.posts": "Þyt", + "account.posts_with_replies": "Þyt og svör", "account.report": "Kæra @{name}", "account.requested": "Bíður eftir samþykki. Smelltu til að hætta við beiðni um að fylgjast með", "account.share": "Deila notandasniði fyrir @{name}", @@ -47,11 +47,16 @@ "account.unmute": "Hætta að þagga niður í @{name}", "account.unmute_notifications": "Hætta að þagga tilkynningar frá @{name}", "account_note.placeholder": "Engin athugasemd gefin", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Prófaðu aftur eftir {retry_time, time, medium}.", "alert.rate_limited.title": "Með takmörkum", "alert.unexpected.message": "Upp kom óvænt villa.", "alert.unexpected.title": "Úbbs!", "announcement.announcement": "Auglýsing", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} á viku", "boost_modal.combo": "Þú getur ýtt á {combo} til að sleppa þessu næst", "bundle_column_error.body": "Eitthvað fór úrskeiðis við að hlaða inn þessari einingu.", @@ -66,7 +71,7 @@ "column.direct": "Bein skilaboð", "column.directory": "Skoða notandasnið", "column.domain_blocks": "Falin lén", - "column.favourites": "Eftirlæti", + "column.favourites": "Fílanir", "column.follow_requests": "Fylgja beiðnum", "column.home": "Heim", "column.lists": "Listar", @@ -97,7 +102,7 @@ "compose_form.poll.remove_option": "Fjarlægja þennan valkost", "compose_form.poll.switch_to_multiple": "Breyta könnun svo hægt sé að hafa marga valkosti", "compose_form.poll.switch_to_single": "Breyta könnun svo hægt sé að hafa einn stakan valkost", - "compose_form.publish": "Tíst", + "compose_form.publish": "Þyt", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "Merkja myndir sem viðkvæmar", "compose_form.sensitive.marked": "Mynd er merkt sem viðkvæm", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Ertu viss um að þú viljir eyða þessari stöðufærslu?", "confirmations.delete_list.confirm": "Eyða", "confirmations.delete_list.message": "Ertu viss um að þú viljir eyða þessum lista endanlega?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Fela allt lénið", "confirmations.domain_block.message": "Ertu alveg algjörlega viss um að þú viljir loka á allt {domain}? Í flestum tilfellum er vænlegra að nota færri en markvissari útilokanir eða að þagga niður tiltekna aðila. Þú munt ekki sjá efni frá þessu léni í neinum opinberum tímalínum eða í tilkynningunum þínum. Fylgjendur þínir frá þessu léni verða fjarlægðir.", "confirmations.logout.confirm": "Skrá út", @@ -121,7 +128,7 @@ "confirmations.mute.explanation": "Þetta mun fela færslur frá þeim og þær færslur þar sem minnst er á þau, en það mun samt sem áður gera þeim kleift að sjá færslurnar þínar og að fylgjast með þér.", "confirmations.mute.message": "Ertu viss um að þú viljir þagga niður í {name}?", "confirmations.redraft.confirm": "Eyða og enduvinna drög", - "confirmations.redraft.message": "Ertu viss um að þú viljir eyða þessari stöðufærslu og enduvinna drögin? Eftirlæti og endurbirtingar munu tapast og svör við upprunalegu fæerslunni munu verða munaðarlaus.", + "confirmations.redraft.message": "Ertu viss um að þú viljir eyða þessari stöðufærslu og enduvinna drögin? Fílanir og endurbirtingar munu glatast og svör við upprunalegu fæerslunni munu verða munaðarlaus.", "confirmations.reply.confirm": "Svara", "confirmations.reply.message": "Ef þú svarar núna verður skrifað yfir skilaboðin sem þú ert að semja núna. Ertu viss um að þú viljir halda áfram?", "confirmations.unfollow.confirm": "Hætta að fylgja", @@ -151,15 +158,15 @@ "emoji_button.symbols": "Tákn", "emoji_button.travel": "Ferðalög og staðir", "empty_column.account_suspended": "Notandaaðgangur í bið", - "empty_column.account_timeline": "Engin tíst hér!", + "empty_column.account_timeline": "Engin þyt hér!", "empty_column.account_unavailable": "Notandasnið ekki tiltækt", "empty_column.blocks": "Þú hefur ekki ennþá útilokað neina notendur.", - "empty_column.bookmarked_statuses": "Þú ert ekki ennþá með nein bókamerkt tíst. Þegar þú gefur tísti bókamerki, munu það birtast hér.", + "empty_column.bookmarked_statuses": "Þú ert ekki ennþá með nein bókamerkt þyt. Þegar þú gefur þyti bókamerki, mun það birtast hér.", "empty_column.community": "Staðværa tímalínan er tóm. Skrifaðu eitthvað opinberlega til að láta boltann fara að rúlla!", "empty_column.direct": "Þú átt ennþá engin bein skilaboð. Þegar þú sendir eða tekur á móti slíkum skilaboðum, munu þau birtast hér.", "empty_column.domain_blocks": "Það eru engin falin lén ennþá.", - "empty_column.favourited_statuses": "Þú átt ennþá engin eftirlætistíst. Þegar þú setur tíst í eftirlæti, munu þau birtast hér.", - "empty_column.favourites": "Enginn hefur ennþá set þetta tíst í eftirlæti. Þegar einhverjir gera það, munu þeir birtast hér.", + "empty_column.favourited_statuses": "Þú hefur ekki fílað nein þyt. Þegar að þú fílar þyt, þá mun það birtast hér.", + "empty_column.favourites": "Enginn hefu fílað þetta þyt ennþá. Þegar einhver gerir það, mun sá birtast hér.", "empty_column.follow_recommendations": "Það lítur út fyrir að ekki hafi verið hægt að útbúa neinar tillögur fyrir þig. Þú getur reynt að leita að fólki sem þú gætir þekkt eða skoðað myllumerki sem eru í umræðunni.", "empty_column.follow_requests": "Þú átt ennþá engar beiðnir um að fylgja þér. Þegar þú færð slíkar beiðnir, munu þær birtast hér.", "empty_column.hashtag": "Það er ekkert ennþá undir þessu myllumerki.", @@ -217,8 +224,8 @@ "keyboard_shortcuts.direct": "að opna dálk með beinum skilaboðum", "keyboard_shortcuts.down": "að fara neðar í listanum", "keyboard_shortcuts.enter": "að opna stöðufærslu", - "keyboard_shortcuts.favourite": "að setja í eftirlæti", - "keyboard_shortcuts.favourites": "að opna eftirlætislista", + "keyboard_shortcuts.favourite": "Fíla þyt", + "keyboard_shortcuts.favourites": "Opna fílanir", "keyboard_shortcuts.federated": "að opna sameiginlega tímalínu", "keyboard_shortcuts.heading": "Flýtileiðir á lyklaborði", "keyboard_shortcuts.home": "að opna heimatímalínu", @@ -230,7 +237,7 @@ "keyboard_shortcuts.my_profile": "að opna notandasniðið þitt", "keyboard_shortcuts.notifications": "að opna tilkynningadálk", "keyboard_shortcuts.open_media": "til að opna margmiðlunargögn", - "keyboard_shortcuts.pinned": "að opna lista yfir föst tíst", + "keyboard_shortcuts.pinned": "Opna lista yfir föst þyt", "keyboard_shortcuts.profile": "að opna notandasnið höfundar", "keyboard_shortcuts.reply": "að svara", "keyboard_shortcuts.requests": "að opna lista yfir fylgjendabeiðnir", @@ -239,7 +246,7 @@ "keyboard_shortcuts.start": "að opna \"komast í gang\" dálk", "keyboard_shortcuts.toggle_hidden": "að birta/fela texta á bak við aðvörun vegna efnis", "keyboard_shortcuts.toggle_sensitivity": "að birta/fela myndir", - "keyboard_shortcuts.toot": "að byrja glænýtt tíst", + "keyboard_shortcuts.toot": "Hefja glænýtt þyt", "keyboard_shortcuts.unfocus": "að taka virkni úr textainnsetningarreit eða leit", "keyboard_shortcuts.up": "að fara ofar í listanum", "lightbox.close": "Loka", @@ -272,12 +279,12 @@ "navigation_bar.blocks": "Útilokaðir notendur", "navigation_bar.bookmarks": "Bókamerki", "navigation_bar.community_timeline": "Staðvær tímalína", - "navigation_bar.compose": "Semja nýtt tíst", + "navigation_bar.compose": "Semja nýtt þyt", "navigation_bar.direct": "Bein skilaboð", "navigation_bar.discover": "Uppgötva", "navigation_bar.domain_blocks": "Falin lén", "navigation_bar.edit_profile": "Breyta notandasniði", - "navigation_bar.favourites": "Eftirlæti", + "navigation_bar.favourites": "Fílanir", "navigation_bar.filters": "Þögguð orð", "navigation_bar.follow_requests": "Beiðnir um að fylgjast með", "navigation_bar.follows_and_followers": "Fylgist með og fylgjendur", @@ -287,11 +294,11 @@ "navigation_bar.logout": "Útskráning", "navigation_bar.mutes": "Þaggaðir notendur", "navigation_bar.personal": "Einka", - "navigation_bar.pins": "Föst tíst", + "navigation_bar.pins": "Föst þyt", "navigation_bar.preferences": "Kjörstillingar", "navigation_bar.public_timeline": "Sameiginleg tímalína", "navigation_bar.security": "Öryggi", - "notification.favourite": "{name} setti stöðufærslu þína í eftirlæti", + "notification.favourite": "{name} filaði stöðufærslu þína", "notification.follow": "{name} fylgist með þér", "notification.follow_request": "{name} hefur beðið um að fylgjast með þér", "notification.mention": "{name} minntist á þig", @@ -302,7 +309,7 @@ "notifications.clear": "Hreinsa tilkynningar", "notifications.clear_confirmation": "Ertu viss um að þú viljir endanlega eyða öllum tilkynningunum þínum?", "notifications.column_settings.alert": "Tilkynningar á skjáborði", - "notifications.column_settings.favourite": "Eftirlæti:", + "notifications.column_settings.favourite": "Fílanir:", "notifications.column_settings.filter_bar.advanced": "Birta alla flokka", "notifications.column_settings.filter_bar.category": "Skyndisíustika", "notifications.column_settings.filter_bar.show": "Sýna", @@ -314,11 +321,11 @@ "notifications.column_settings.reblog": "Endurbirtingar:", "notifications.column_settings.show": "Sýna í dálki", "notifications.column_settings.sound": "Spila hljóð", - "notifications.column_settings.status": "Ný tíst:", + "notifications.column_settings.status": "Ný þyt:", "notifications.column_settings.unread_markers.category": "Merki fyrir ólesnar tilkynningar", "notifications.filter.all": "Allt", "notifications.filter.boosts": "Endurbirtingar", - "notifications.filter.favourites": "Eftirlæti", + "notifications.filter.favourites": "Fílanir", "notifications.filter.follows": "Fylgist með", "notifications.filter.mentions": "Tilvísanir", "notifications.filter.polls": "Niðurstöður könnunar", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# atkvæði} other {# atkvæði}}", "poll.vote": "Greiða atkvæði", "poll.voted": "Þú kaust þetta svar", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Bæta við könnun", "poll_button.remove_poll": "Fjarlægja könnun", "privacy.change": "Aðlaga gagnaleynd stöðufærslu", @@ -368,15 +376,15 @@ "report.target": "Kæri {target}", "search.placeholder": "Leita", "search_popout.search_format": "Snið ítarlegrar leitar", - "search_popout.tips.full_text": "Einfaldur texti skilar stöðufærslum sem þú hefur skrifað, sett í eftirlæti, endurbirt eða verið minnst á þig í, ásamt samsvarandi birtingarnöfnum, notendanöfnum og myllumerkjum.", + "search_popout.tips.full_text": "Einfaldur texti skilar stöðufærslum sem þú hefur skrifað, fílað, endurbirt eða sem á þig hefur verið minnst í, ásamt samsvarandi birtingarnöfnum, notendanöfnum og myllumerkjum.", "search_popout.tips.hashtag": "myllumerki", "search_popout.tips.status": "stöðufærsla", "search_popout.tips.text": "Einfaldur texti skilar samsvarandi birtingarnöfnum, notendanöfnum og myllumerkjum", "search_popout.tips.user": "notandi", "search_results.accounts": "Fólk", "search_results.hashtags": "Myllumerki", - "search_results.statuses": "Tíst", - "search_results.statuses_fts_disabled": "Að leita í efni tísta er ekki virk á þessum Mastodon-þjóni.", + "search_results.statuses": "Þyt", + "search_results.statuses_fts_disabled": "Að leita í efni þyta er ekki virk á þessum Mastodon-þjóni.", "search_results.total": "{count, number} {count, plural, one {niðurstaða} other {niðurstöður}}", "status.admin_account": "Opna umsjónarviðmót fyrir @{name}", "status.admin_status": "Opna þessa stöðufærslu í umsjónarviðmótinu", @@ -389,7 +397,7 @@ "status.detailed_status": "Nákvæm spjallþráðasýn", "status.direct": "Bein skilaboð @{name}", "status.embed": "Ívefja", - "status.favourite": "Eftirlæti", + "status.favourite": "Fílanir", "status.filtered": "Síað", "status.load_more": "Hlaða inn meiru", "status.media_hidden": "Mynd er falin", @@ -399,12 +407,12 @@ "status.mute_conversation": "Þagga niður í samtali", "status.open": "Útliða þessa stöðu", "status.pin": "Festa á notandasnið", - "status.pinned": "Fast tíst", + "status.pinned": "Fast þyt", "status.read_more": "Lesa meira", "status.reblog": "Endurbirting", "status.reblog_private": "Endurbirta til upphaflegra lesenda", "status.reblogged_by": "{name} endurbirti", - "status.reblogs.empty": "Enginn hefur ennþá endurbirt þetta tíst. Þegar einhverjir gera það, munu þeir birtast hér.", + "status.reblogs.empty": "Enginn hefur ennþá endurbirt þetta þyt. Þegar einhver gerir það, mun sá birtast hér.", "status.redraft": "Eyða og enduvinna drög", "status.remove_bookmark": "Fjarlægja bókamerki", "status.reply": "Svara", @@ -435,7 +443,7 @@ "timeline_hint.remote_resource_not_displayed": "{resource} frá öðrum netþjónum er ekki birt.", "timeline_hint.resources.followers": "Fylgjendur", "timeline_hint.resources.follows": "Fylgist með", - "timeline_hint.resources.statuses": "Eldri tíst", + "timeline_hint.resources.statuses": "Eldri þyt", "trends.counter_by_accounts": "{count, plural, one {{counter} aðili} other {{counter} aðilar}} tala", "trends.trending_now": "Í umræðunni núna", "ui.beforeunload": "Drögin tapast ef þú ferð út úr Mastodon.", @@ -454,6 +462,7 @@ "upload_form.video_description": "Lýstu þessu fyrir fólk sem heyrir illa eða er með skerta sjón", "upload_modal.analyzing_picture": "Greini mynd…", "upload_modal.apply": "Virkja", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Veldu mynd", "upload_modal.description_placeholder": "Öllum dýrunum í skóginum þætti bezt að vera vinir", "upload_modal.detect_text": "Skynja texta úr mynd", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 23b7c0d86..d2c9e1179 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -22,7 +22,7 @@ "account.follows.empty": "Questo utente non segue ancora nessuno.", "account.follows_you": "Ti segue", "account.hide_reblogs": "Nascondi condivisioni da @{name}", - "account.joined": "Registrato dal {date}", + "account.joined": "Su questa istanza dal {date}", "account.last_status": "Ultima attività", "account.link_verified_on": "La proprietà di questo link è stata controllata il {date}", "account.locked_info": "Questo è un account privato. Il proprietario approva manualmente chi può seguirlo.", @@ -47,11 +47,16 @@ "account.unmute": "Riattiva @{name}", "account.unmute_notifications": "Riattiva le notifiche da @{name}", "account_note.placeholder": "Clicca per aggiungere una nota", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Sei pregato di riprovare tra {retry_time, time, medium}.", "alert.rate_limited.title": "Limitazione per eccesso di richieste", "alert.unexpected.message": "Si è verificato un errore imprevisto.", "alert.unexpected.title": "Oops!", "announcement.announcement": "Annuncio", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per settimana", "boost_modal.combo": "Puoi premere {combo} per saltare questo passaggio la prossima volta", "bundle_column_error.body": "E' avvenuto un errore durante il caricamento di questo componente.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Sei sicuro di voler cancellare questo toot?", "confirmations.delete_list.confirm": "Cancella", "confirmations.delete_list.message": "Sei sicuro di voler cancellare definitivamente questa lista?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Blocca l'intero dominio", "confirmations.domain_block.message": "Sei davvero, davvero sicur@ di voler bloccare {domain} completamente? Nella maggioranza dei casi, è preferibile e sufficiente bloccare o silenziare pochi account in modo mirato. Non vedrai più il contenuto da quel dominio né nelle timeline pubbliche né nelle tue notifiche. Anzi, verranno rimossi dai follower gli account di questo dominio.", "confirmations.logout.confirm": "Disconnettiti", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# voto} other {# voti}}", "poll.vote": "Vota", "poll.voted": "Hai votato per questa risposta", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Aggiungi un sondaggio", "poll_button.remove_poll": "Rimuovi sondaggio", "privacy.change": "Modifica privacy del post", @@ -454,6 +462,7 @@ "upload_form.video_description": "Descrizione per persone con difetti uditivi o visivi", "upload_modal.analyzing_picture": "Analisi immagine…", "upload_modal.apply": "Applica", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Scegli immagine", "upload_modal.description_placeholder": "Ma la volpe col suo balzo ha raggiunto il quieto Fido", "upload_modal.detect_text": "Rileva testo dall'immagine", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index ae0e0f5da..43f01924c 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -47,11 +47,16 @@ "account.unmute": "@{name}さんのミュートを解除", "account.unmute_notifications": "@{name}さんからの通知を受け取るようにする", "account_note.placeholder": "クリックしてメモを追加", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "{retry_time, time, medium} 以降に再度実行してください。", "alert.rate_limited.title": "制限に達しました", "alert.unexpected.message": "不明なエラーが発生しました。", "alert.unexpected.title": "エラー!", "announcement.announcement": "お知らせ", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} 回 / 週", "boost_modal.combo": "次からは{combo}を押せばスキップできます", "bundle_column_error.body": "コンポーネントの読み込み中に問題が発生しました。", @@ -113,6 +118,8 @@ "confirmations.delete.message": "本当に削除しますか?", "confirmations.delete_list.confirm": "削除", "confirmations.delete_list.message": "本当にこのリストを完全に削除しますか?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "ドメイン全体をブロック", "confirmations.domain_block.message": "本当に{domain}全体を非表示にしますか? 多くの場合は個別にブロックやミュートするだけで充分であり、また好ましいです。公開タイムラインにそのドメインのコンテンツが表示されなくなり、通知も届かなくなります。そのドメインのフォロワーはアンフォローされます。", "confirmations.logout.confirm": "ログアウト", @@ -339,6 +346,7 @@ "poll.total_votes": "{count}票", "poll.vote": "投票", "poll.voted": "この項目に投票しました", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "アンケートを追加", "poll_button.remove_poll": "アンケートを削除", "privacy.change": "公開範囲を変更", @@ -454,6 +462,7 @@ "upload_form.video_description": "視聴が難しいユーザーへの説明", "upload_modal.analyzing_picture": "画像を解析中…", "upload_modal.apply": "適用", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "画像を選択", "upload_modal.description_placeholder": "あのイーハトーヴォのすきとおった風", "upload_modal.detect_text": "画像からテキストを検出", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index 714ec2e49..2b1221d6f 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -47,11 +47,16 @@ "account.unmute": "ნუღარ აჩუმებ @{name}-ს", "account.unmute_notifications": "ნუღარ აჩუმებ შეტყობინებებს @{name}-სგან", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "წარმოიშვა მოულოდნელი შეცდომა.", "alert.unexpected.title": "უპს!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "კვირაში {count}", "boost_modal.combo": "შეგიძლიათ დააჭიროთ {combo}-ს რათა შემდეგ ჯერზე გამოტოვოთ ეს", "bundle_column_error.body": "ამ კომპონენტის ჩატვირთვისას რაღაც აირია.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "დარწმუნებული ხართ, გსურთ გააუქმოთ ეს სტატუსი?", "confirmations.delete_list.confirm": "გაუქმება", "confirmations.delete_list.message": "დარწმუნებული ხართ, გსურთ სამუდამოდ გააუქმოთ ეს სია?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "მთელი დომენის დამალვა", "confirmations.domain_block.message": "ნაღდად, ნაღდად, დარწმუნებული ხართ, გსურთ დაბლოკოთ მთელი {domain}? უმეტეს შემთხვევაში რამდენიმე გამიზნული ბლოკი ან გაჩუმება საკმარისი და უკეთესია. კონტენტს ამ დომენიდან ვერ იხილავთ ვერც ერთ ღია თაიმლაინზე ან თქვენს შეტყობინებებში. ამ დომენიდან არსებული მიმდევრები ამოიშლება.", "confirmations.logout.confirm": "Log out", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "სტატუსის კონფიდენციალურობის მითითება", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 175a509ff..632054786 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -22,7 +22,7 @@ "account.follows.empty": "Ar tura, amseqdac-agi ur yeṭṭafaṛ yiwen.", "account.follows_you": "Yeṭṭafaṛ-ik", "account.hide_reblogs": "Ffer ayen i ibeṭṭu @{name}", - "account.joined": "Joined {date}", + "account.joined": "Yerna-d {date}", "account.last_status": "Armud aneggaru", "account.link_verified_on": "Taɣara n useɣwen-a tettwasenqed ass n {date}", "account.locked_info": "Amiḍan-agi uslig isekweṛ. D bab-is kan i izemren ad yeǧǧ, s ufus-is, win ara t-iḍefṛen.", @@ -47,11 +47,16 @@ "account.unmute": "Kkes asgugem ɣef @{name}", "account.unmute_notifications": "Serreḥ ilɣa sɣur @{name}", "account_note.placeholder": "Ulac iwenniten", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Ma ulac aɣilif ɛreḍ tikelt-nniḍen akka {retry_time, time, medium}.", "alert.rate_limited.title": "Aktum s talast", "alert.unexpected.message": "Yeḍra-d unezri ur netturaǧu ara.", "alert.unexpected.title": "Ayhuh!", "announcement.announcement": "Ulɣu", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} i yimalas", "boost_modal.combo": "Tzemreḍ ad tetekkiḍ ɣef {combo} akken ad tessurfeḍ aya tikelt-nniḍen", "bundle_column_error.body": "Tella-d kra n tuccḍa mi d-yettali ugbur-agi.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Tebɣiḍ s tidet ad tekkseḍ tasuffeɣt-agi?", "confirmations.delete_list.confirm": "Kkes", "confirmations.delete_list.message": "Tebɣiḍ s tidet ad tekkseḍ umuɣ-agi i lebda?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Ffer taɣult meṛṛa", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "Ffeɣ", @@ -150,7 +157,7 @@ "emoji_button.search_results": "Igemmaḍ n unadi", "emoji_button.symbols": "Izamulen", "emoji_button.travel": "Imeḍqan d Yinigen", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Amiḍan yettwaḥebsen", "empty_column.account_timeline": "Ulac tijewwaqin dagi!", "empty_column.account_unavailable": "Ur nufi ara amaɣnu-ayi", "empty_column.blocks": "Ur tesḥebseḍ ula yiwen n umseqdac ar tura.", @@ -164,7 +171,7 @@ "empty_column.follow_requests": "Ulac ɣur-k ula yiwen n usuter n teḍfeṛt. Ticki teṭṭfeḍ-d yiwen ad d-yettwasken da.", "empty_column.hashtag": "Ar tura ulac kra n ugbur yesɛan assaɣ ɣer uhacṭag-agi.", "empty_column.home": "Tasuddemt tagejdant n yisallen d tilemt! Ẓer {public} neɣ nadi ad tafeḍ imseqdacen-nniḍen ad ten-ḍefṛeḍ.", - "empty_column.home.suggestions": "See some suggestions", + "empty_column.home.suggestions": "Ẓer kra n yisumar", "empty_column.list": "Ar tura ur yelli kra deg umuɣ-a. Ad d-yettwasken da ticki iɛeggalen n wumuɣ-a suffɣen-d kra.", "empty_column.lists": "Ulac ɣur-k kra n wumuɣ yakan. Ad d-tettwasken da ticki tesluleḍ-d yiwet.", "empty_column.mutes": "Ulac ɣur-k imseqdacen i yettwasgugmen.", @@ -176,7 +183,7 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Nɣel stacktrace ɣef wafus", "errors.unexpected_crash.report_issue": "Mmel ugur", - "follow_recommendations.done": "Done", + "follow_recommendations.done": "Immed", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "Ssireg", @@ -254,8 +261,8 @@ "lists.edit.submit": "Beddel azwel", "lists.new.create": "Rnu tabdart", "lists.new.title_placeholder": "Azwel amaynut n tebdart", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.followed": "Kra n useqdac i yettwaḍefren", + "lists.replies_policy.list": "Iɛeggalen n tebdart", "lists.replies_policy.none": "Ula yiwen·t", "lists.replies_policy.title": "Ssken-d tiririyin i:", "lists.search": "Nadi gar yemdanen i teṭṭafaṛeḍ", @@ -267,7 +274,7 @@ "missing_indicator.sublabel": "Ur nufi ara aɣbalu-a", "mute_modal.duration": "Tanzagt", "mute_modal.hide_notifications": "Tebɣiḍ ad teffreḍ talɣutin n umseqdac-a?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Ur yettwasbadu ara", "navigation_bar.apps": "Isnasen izirazen", "navigation_bar.blocks": "Imseqdacen yettusḥebsen", "navigation_bar.bookmarks": "Ticraḍ", @@ -296,9 +303,9 @@ "notification.follow_request": "{name} yessuter-d ad k-yeḍfeṛ", "notification.mention": "{name} yebder-ik-id", "notification.own_poll": "Tafrant-ik·im tfuk", - "notification.poll": "A poll you have voted in has ended", + "notification.poll": "Tfukk tefrant ideg tettekkaḍ", "notification.reblog": "{name} yebḍa tajewwiqt-ik i tikelt-nniḍen", - "notification.status": "{name} just posted", + "notification.status": "{name} akken i d-yessufeɣ", "notifications.clear": "Sfeḍ tilɣa", "notifications.clear_confirmation": "Tebɣiḍ s tidet ad tekkseḍ akk tilɣa-inek·em i lebda?", "notifications.column_settings.alert": "Tilɣa n tnarit", @@ -322,23 +329,24 @@ "notifications.filter.follows": "Yeṭafaṛ", "notifications.filter.mentions": "Abdar", "notifications.filter.polls": "Igemmaḍ n usenqed", - "notifications.filter.statuses": "Updates from people you follow", - "notifications.grant_permission": "Grant permission.", + "notifications.filter.statuses": "Ileqman n yimdanen i teṭṭafareḍ", + "notifications.grant_permission": "Mudd tasiregt.", "notifications.group": "{count} n tilɣa", - "notifications.mark_as_read": "Mark every notification as read", + "notifications.mark_as_read": "Creḍ meṛṛa iilɣa am wakken ttwaɣran", "notifications.permission_denied": "D awezɣi ad yili wermad n yilɣa n tnarit axateṛ turagt tettwagdel.", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications_permission_banner.enable": "Rmed talɣutin n tnarit", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications_permission_banner.title": "Ur zeggel acemma", + "picture_in_picture.restore": "Err-it amkan-is", "poll.closed": "Ifukk", "poll.refresh": "Smiren", "poll.total_people": "{count, plural, one {# n wemdan} other {# n yemdanen}}", "poll.total_votes": "{count, plural, one {# n udɣaṛ} other {# n yedɣaṛen}}", "poll.vote": "Dɣeṛ", "poll.voted": "Tdeɣṛeḍ ɣef tririt-ayi", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Rnu asenqed", "poll_button.remove_poll": "Kkes asenqed", "privacy.change": "Seggem tabaḍnit n yizen", @@ -454,6 +462,7 @@ "upload_form.video_description": "Glem-d i yemdanen i yesɛan ugur deg tmesliwt neɣ deg yiẓri", "upload_modal.analyzing_picture": "Tasleḍt n tugna tetteddu…", "upload_modal.apply": "Snes", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Fren tugna", "upload_modal.description_placeholder": "Aberraɣ arurad ineggez nnig n uqjun amuṭṭis", "upload_modal.detect_text": "Sefru-d aḍris seg tugna", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 95abf9381..1407a0991 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -47,11 +47,16 @@ "account.unmute": "@{name} ескертпелерін қосу", "account.unmute_notifications": "@{name} ескертпелерін көрсету", "account_note.placeholder": "Жазба қалдыру үшін бас", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Қайтадан көріңіз {retry_time, time, medium} кейін.", "alert.rate_limited.title": "Бағалау шектеулі", "alert.unexpected.message": "Бір нәрсе дұрыс болмады.", "alert.unexpected.title": "Өй!", "announcement.announcement": "Хабарландыру", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} аптасына", "boost_modal.combo": "Келесіде өткізіп жіберу үшін басыңыз {combo}", "bundle_column_error.body": "Бұл компонентті жүктеген кезде бір қате пайда болды.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Бұл жазбаны өшіресіз бе?", "confirmations.delete_list.confirm": "Өшіру", "confirmations.delete_list.message": "Бұл тізімді жоясыз ба шынымен?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Бұл доменді бұғатта", "confirmations.domain_block.message": "Бұл домендегі {domain} жазбаларды шынымен бұғаттайсыз ба? Кейде үнсіз қылып тастау да жеткілікті.", "confirmations.logout.confirm": "Шығу", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# дауыс} other {# дауыс}}", "poll.vote": "Дауыс беру", "poll.voted": "Бұл сұраққа жауап бердіңіз", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Сауалнама қосу", "poll_button.remove_poll": "Сауалнаманы өшіру", "privacy.change": "Құпиялылықты реттеу", @@ -454,6 +462,7 @@ "upload_form.video_description": "Есту немесе көру қабілеті нашар адамдарға сипаттама беріңіз", "upload_modal.analyzing_picture": "Суретті анализ жасау…", "upload_modal.apply": "Қолдану", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Сурет таңдау", "upload_modal.description_placeholder": "Щучинск съезіндегі өрт пе? Вагон-үй, аэромобиль һәм ұшақ фюзеляжы цехінен ғой", "upload_modal.detect_text": "Суреттен мәтін анықтау", diff --git a/app/javascript/mastodon/locales/kmr.json b/app/javascript/mastodon/locales/kmr.json new file mode 100644 index 000000000..8f862606d --- /dev/null +++ b/app/javascript/mastodon/locales/kmr.json @@ -0,0 +1,484 @@ +{ + "account.account_note_header": "Nîşe", + "account.add_or_remove_from_list": "Tevlî bike an rake ji rêzokê", + "account.badges.bot": "Bot", + "account.badges.group": "Kom", + "account.block": "@{name} asteng bike", + "account.block_domain": "{domain} navpar asteng bike", + "account.blocked": "Astengkirî", + "account.browse_more_on_origin_server": "Li pelên resen bêhtir bigere", + "account.cancel_follow_request": "Daxwaza şopandinê rake", + "account.direct": "Peyamekê bişîne @{name}", + "account.disable_notifications": "Êdî min agahdar neke gava @{name} diweşîne", + "account.domain_blocked": "Navper hate astengkirin", + "account.edit_profile": "Profîl serrast bike", + "account.enable_notifications": "Min agahdar bike gava @{name} diweşîne", + "account.endorse": "Taybetiyên li ser profîl", + "account.follow": "Bişopîne", + "account.followers": "Şopîner", + "account.followers.empty": "Kesekî hin ev bikarhêner neşopandiye.", + "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.following_counter": "{count, plural, one {{counter} Dişopîne} other {{counter} Dişopîne}}", + "account.follows.empty": "Ev bikarhêner hin kesekî heya niha neşopandiye.", + "account.follows_you": "Te dişopîne", + "account.hide_reblogs": "Boost ên ji @{name} veşêre", + "account.joined": "Tevlîbû di {date} de", + "account.last_status": "Çalakiya dawî", + "account.link_verified_on": "Xwedaniya li vê girêdanê di {date} de hatiye kontrolkirin", + "account.locked_info": "Rewşa vê ajimêrê wek kilît kirî hatiye saz kirin. Xwedî yê ajimêrê, kesên vê bişopîne bi dest vekolin dike.", + "account.media": "Medya", + "account.mention": "Qal @{name} bike", + "account.moved_to": "{name} hate livandin bo:", + "account.mute": "@{name} Bêdeng bike", + "account.mute_notifications": "Agahdariyan ji @{name} bêdeng bike", + "account.muted": "Bêdengkirî", + "account.never_active": "Tu car", + "account.posts": "Şandî", + "account.posts_with_replies": "Toot û bersiv", + "account.report": "@{name} Ragihîne", + "account.requested": "Li benda erêkirinê ye. Ji bo betal kirina daxwazê pêl bikin", + "account.share": "Profîla @{name} parve bike", + "account.show_reblogs": "Boostên @{name} nîşan bike", + "account.statuses_counter": "{count, plural,one {{counter} şandî}other {{counter} şandî}}", + "account.unblock": "Astengê li ser @{name} rake", + "account.unblock_domain": "Astengê li ser navperê {domain} rake", + "account.unendorse": "Li ser profîl nîşan neke", + "account.unfollow": "Neşopîne", + "account.unmute": "@{name} Bêdeng bike", + "account.unmute_notifications": "Agahdariyan ji @{name} bêdeng bike", + "account_note.placeholder": "Bitikîne bo nîşeyekê tevlî bikî", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", + "alert.rate_limited.message": "Jkx dîsa biceribîne piştî {retry_time, time, medium}.\n \n", + "alert.rate_limited.title": "Rêje sînorkirî ye", + "alert.unexpected.message": "Çewtiyeke bêhêvî çê bû.", + "alert.unexpected.title": "Wey li min!", + "announcement.announcement": "Daxuyanî", + "attachments_list.unprocessed": "(unprocessed)", + "autosuggest_hashtag.per_week": "Her hefte {count}", + "boost_modal.combo": "Ji bo derbas bî carekî din de pêlê {combo} bike", + "bundle_column_error.body": "Di dema barkirina vê hêmanê de tiştek çewt çê bû.", + "bundle_column_error.retry": "Dîsa biceribîne", + "bundle_column_error.title": "Çewtiya torê", + "bundle_modal_error.close": "Bigire", + "bundle_modal_error.message": "Di dema barkirina vê hêmanê de tiştek çewt çê bû.", + "bundle_modal_error.retry": "Dîsa bicerbîne", + "column.blocks": "Bikarhênerên astengkirî", + "column.bookmarks": "Şûnpel", + "column.community": "Demnameya herêmî", + "column.direct": "Peyamên taybet", + "column.directory": "Li profîlan bigere", + "column.domain_blocks": "Navperên astengkirî", + "column.favourites": "Bijarte", + "column.follow_requests": "Daxwazên şopandinê", + "column.home": "Serrûpel", + "column.lists": "Rêzok", + "column.mutes": "Bikarhênerên bêdengkirî", + "column.notifications": "Agahdarî", + "column.pins": "Toot a derzîkirî", + "column.public": "Demnameyê federalîkirî", + "column_back_button.label": "Veger", + "column_header.hide_settings": "Sazkariyan veşêre", + "column_header.moveLeft_settings": "Stûnê bilivîne bo çepê", + "column_header.moveRight_settings": "Stûnê bilivîne bo rastê", + "column_header.pin": "Bi derzî bike", + "column_header.show_settings": "Sazkariyan nîşan bide", + "column_header.unpin": "Bi derzî neke", + "column_subheading.settings": "Sazkarî", + "community.column_settings.local_only": "Tenê herêmî", + "community.column_settings.media_only": "Tenê media", + "community.column_settings.remote_only": "Tenê ji dûr ve", + "compose_form.direct_message_warning": "Ev toot tenê ji bikarhênerên behskirî re were şandin.", + "compose_form.direct_message_warning_learn_more": "Bêtir fêr bibe", + "compose_form.hashtag_warning": "Ev şandî ji ber ku nehatiye tomarkirin dê di binê hashtagê de neyê tomar kirin. Tenê peyamên gelemperî dikarin bi hashtagê werin lêgerîn.", + "compose_form.lock_disclaimer": "Ajimêrê te {locked} nîne. Herkes dikare te bişopîne da ku şandiyên te yên tenê şopînerên te ra xûya dibin bibînin.", + "compose_form.lock_disclaimer.lock": "girtî ye", + "compose_form.placeholder": "Çi di hişê te derbas dibe?", + "compose_form.poll.add_option": "Hilbijarekî tevlî bike", + "compose_form.poll.duration": "Dema rapirsî yê", + "compose_form.poll.option_placeholder": "{number} Hilbijêre", + "compose_form.poll.remove_option": "Vê hilbijarê rake", + "compose_form.poll.switch_to_multiple": "Rapirsî yê biguherînin da ku destûr bidin vebijarkên pirjimar", + "compose_form.poll.switch_to_single": "Rapirsîyê biguherîne da ku mafê bidî tenê vebijêrkek", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "{count, plural, one {Medya wekî hestiyar nîşan bide} other {Medya wekî hestiyar nîşan bide}}", + "compose_form.sensitive.marked": "{count, plural, one {Medya wekî hestiyar hate nîşan} other {Medya wekî hestiyar nîşan}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Medya wekî hestiyar nehatiye nîşan} other {Medya wekî hestiyar nehatiye nîşan}}", + "compose_form.spoiler.marked": "Hişyariya naverokê rake", + "compose_form.spoiler.unmarked": "Hişyariya naverokê tevlî bike", + "compose_form.spoiler_placeholder": "Li vir hişyariya xwe binivîse", + "confirmation_modal.cancel": "Dev jê berde", + "confirmations.block.block_and_report": "Asteng bike & ragihîne", + "confirmations.block.confirm": "Asteng bike", + "confirmations.block.message": "Ma tu dixwazî ku {name} asteng bikî?", + "confirmations.delete.confirm": "Jê bibe", + "confirmations.delete.message": "Ma tu dixwazî vê şandiyê jê bibî?", + "confirmations.delete_list.confirm": "Jê bibe", + "confirmations.delete_list.message": "Ma tu dixwazî bi awayekî herdemî vê rêzokê jê bibî?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", + "confirmations.domain_block.confirm": "Hemî navperê asteng bike", + "confirmations.domain_block.message": "Tu ji xwe bawerî, bi rastî tu dixwazî hemû {domain} asteng bikî? Di gelek rewşan de asteng kirin an jî bêdeng kirin têrê dike û tê tercîh kirin. Tu nikarî naveroka vê navperê di demnameyê an jî agahdariyên xwe de bibînî. Şopînerên te yê di vê navperê were jêbirin.", + "confirmations.logout.confirm": "Derkeve", + "confirmations.logout.message": "Ma tu dixwazî ku derkevî?", + "confirmations.mute.confirm": "Bêdeng bike", + "confirmations.mute.explanation": "Ev ê şandinên ji wan tê û şandinên ku behsa wan dike veşêre, lê hê jî maf dide ku ew şandinên te bibînin û te bişopînin.", + "confirmations.mute.message": "Bi rastî tu dixwazî {name} bêdeng bikî?", + "confirmations.redraft.confirm": "Jê bibe & ji nû ve serrast bike", + "confirmations.redraft.message": "Bi rastî tu dixwazî şandî ye jê bibî û nûve reşnivîsek çê bikî? Bijare û şandîyên wenda bibin û bersivên ji bo şandiye orîjînal sêwî bimînin.", + "confirmations.reply.confirm": "Bersivê bide", + "confirmations.reply.message": "Bersiva niha li ser peyama ku tu niha berhev dikî dê binivsîne. Ma pê bawer î ku tu dixwazî bidomînî?", + "confirmations.unfollow.confirm": "Neşopîne", + "confirmations.unfollow.message": "Ma tu dixwazî ku dev ji şopa {name} berdî?", + "conversation.delete": "Axaftinê jê bibe", + "conversation.mark_as_read": "Wekî xwendî nîşan bide", + "conversation.open": "Axaftinê nîşan bide", + "conversation.with": "Bi {names} re", + "directory.federated": "Ji fediversên naskirî", + "directory.local": "Tenê ji {domain}", + "directory.new_arrivals": "Kesên ku nû hatine", + "directory.recently_active": "Di demên dawî de çalak", + "embed.instructions": "Bi jêgirtina koda jêrîn vê şandiyê li ser malpera xwe bicîh bikin.", + "embed.preview": "Wa ye wê wusa xuya bike:", + "emoji_button.activity": "Çalakî", + "emoji_button.custom": "Kesanekirî", + "emoji_button.flags": "Nîşankirî", + "emoji_button.food": "Xwarin û vexwarin", + "emoji_button.label": "Emoji têxe", + "emoji_button.nature": "Sirûştî", + "emoji_button.not_found": "Hestokên lihevhatî nehate dîtin", + "emoji_button.objects": "Tişt", + "emoji_button.people": "Mirov", + "emoji_button.recent": "Pir caran tê bikaranîn", + "emoji_button.search": "Bigere...", + "emoji_button.search_results": "Encamên lêgerînê", + "emoji_button.symbols": "Sembol", + "emoji_button.travel": "Geşt û şûn", + "empty_column.account_suspended": "Ajimêr hatiye rawestandin", + "empty_column.account_timeline": "Li vir şandî tune!", + "empty_column.account_unavailable": "Profîl nayê peydakirin", + "empty_column.blocks": "Te tu bikarhêner asteng nekiriye.", + "empty_column.bookmarked_statuses": "Hîn tu peyamên şûnpelkirî tuneye. Gava ku hûn yek şûnpel bikin, ew ê li vir xûya bike.", + "empty_column.community": "Demnameya herêmî vala ye. Tiştek ji raya giştî re binivsînin da ku rûpel biherike!", + "empty_column.direct": "Hêj peyameke te yê rasterast tuneye. Gava ku tu yekî bişeynî an jî bigirî, ew ê li vir xûya bike.", + "empty_column.domain_blocks": "Hê jî navperên hatine asteng kirin tune ne.", + "empty_column.favourited_statuses": "Hîn tu peyamên te yên bijare tunene. Gava ku te yekî bijart, ew ê li vir xûya bike.", + "empty_column.favourites": "Hîn tu kes vê peyamê nebijartiye. Gava ku hin kes bijartin, ew ê li vir xûya bikin.", + "empty_column.follow_recommendations": "Wusa dixuye ku ji bo we tu pêşniyar nehatine çêkirin. Hûn dikarin lêgerînê bikarbînin da ku li kesên ku hûn nas dikin bigerin an hashtagên trendî bigerin.", + "empty_column.follow_requests": "Hê jî daxwaza şopandinê tunne ye. Dema daxwazek hat, yê li vir were nîşan kirin.", + "empty_column.hashtag": "Di vê hashtagê de hêj tiştekî tune.", + "empty_column.home": "Demnameya mala we vala ye! Ji bona tijîkirinê bêtir mirovan bişopînin. {suggestions}", + "empty_column.home.suggestions": "Hinek pêşniyaran bibîne", + "empty_column.list": "Di vê rêzokê de hîn tiştek tune ye. Gava ku endamên vê rêzokê peyamên nû biweşînin, ew ê li vir xuya bibin.", + "empty_column.lists": "Hêj qet rêzokê te tunne ye. Dema yek peyda bû, yê li vir were nîşan kirin.", + "empty_column.mutes": "Te tu bikarhêner bêdeng nekiriye.", + "empty_column.notifications": "Hêj hişyariyên te tunene. Dema ku mirovên din bi we re têkilî danîn, hûn ê wê li vir bibînin.", + "empty_column.public": "Li vir tiştekî tuneye! Ji raya giştî re tiştekî binivîsîne, an ji bo tijîkirinê ji rajekerên din bikarhêneran bi destan bişopînin", + "error.unexpected_crash.explanation": "Ji ber xeletîyeke di koda me da an jî ji ber mijara lihevhatina gerokan, ev rûpel rast nehat nîşandan.", + "error.unexpected_crash.explanation_addons": "Ev rûpel bi awayekî rast nehat nîşandan. Ev çewtî mimkûn e ji ber lêzêdekirina gerokan an jî amûrên wergera xweberî pêk tê.", + "error.unexpected_crash.next_steps": "Nûkirina rûpelê biceribîne. Heke ev bi kêr neyê, dibe ku te hîn jî bi rêya gerokeke cuda an jî sepana xwecîhê Mastodonê bi kar bîne.", + "error.unexpected_crash.next_steps_addons": "Ne çalak kirin û nûkirina rûpelê biceribîne. Heke ev bi kêr neyê, dibe ku te hîn jî bi rêya gerokeke cuda an jî sepana xwecîhê Mastodonê bi kar bîne.", + "errors.unexpected_crash.copy_stacktrace": "Şopa gemara (stacktrace) tûrikê ra jê bigire", + "errors.unexpected_crash.report_issue": "Pirsgirêkekê ragihîne", + "follow_recommendations.done": "Qediya", + "follow_recommendations.heading": "Mirovên ku tu dixwazî ji wan peyaman bibînî bişopîne! Hin pêşnîyar li vir in.", + "follow_recommendations.lead": "Li gorî rêza kronolojîkî peyamên mirovên ku tu dişopînî dê demnameya te de xûya bike. Ji xeletiyan netirse, bi awayekî hêsan her wextî tu dikarî dev ji şopandinê berdî!", + "follow_request.authorize": "Mafê bide", + "follow_request.reject": "Nepejir", + "follow_requests.unlocked_explanation": "Tevlî ku ajimêra te ne kilît kiriye, karmendên {domain} digotin qey tu dixwazî ku pêşdîtina daxwazên şopandinê bi destan bike.", + "generic.saved": "Tomarkirî", + "getting_started.developers": "Pêşdebir", + "getting_started.directory": "Rêgeha profîlê", + "getting_started.documentation": "Pelbend", + "getting_started.heading": "Destpêkirin", + "getting_started.invite": "Mirovan Vexwîne", + "getting_started.open_source_notice": "Mastodon nermalava çavkaniya vekirî ye. Tu dikarî pirsgirêkan li ser GitHub-ê ragihînî di {github} de an jî dikarî tevkariyê bikî.", + "getting_started.security": "Sazkariyên ajimêr", + "getting_started.terms": "Mercên karûberan", + "hashtag.column_header.tag_mode.all": "û {additional}", + "hashtag.column_header.tag_mode.any": "an {additional}", + "hashtag.column_header.tag_mode.none": "bêyî {additional}", + "hashtag.column_settings.select.no_options_message": "Ti pêşniyar nehatin dîtin", + "hashtag.column_settings.select.placeholder": "Têkeve hashtagê…", + "hashtag.column_settings.tag_mode.all": "Van hemûyan", + "hashtag.column_settings.tag_mode.any": "Yek ji van", + "hashtag.column_settings.tag_mode.none": "Ne yek ji van", + "hashtag.column_settings.tag_toggle": "Ji bo vê stûnê hin pêvekan tevlî bike", + "home.column_settings.basic": "Bingehîn", + "home.column_settings.show_reblogs": "Boost'an nîşan bike", + "home.column_settings.show_replies": "Bersivan nîşan bide", + "home.hide_announcements": "Reklaman veşêre", + "home.show_announcements": "Reklaman nîşan bide", + "intervals.full.days": "{number, plural, one {# roj} other {# roj}}", + "intervals.full.hours": "{number, plural, one {# demjimêr} other {# demjimêr}}\n \n", + "intervals.full.minutes": "{number, plural, one {# xulek} other {# xulek}}", + "keyboard_shortcuts.back": "Vegere paşê", + "keyboard_shortcuts.blocked": "Rêzoka bikarhênerên astengkirî veke", + "keyboard_shortcuts.boost": "Şandiya parve (boost) bike", + "keyboard_shortcuts.column": "Stûna balkişandinê", + "keyboard_shortcuts.compose": "Bal bikşîne cîhê nivîsê/textarea", + "keyboard_shortcuts.description": "Danasîn", + "keyboard_shortcuts.direct": "Ji stûnê peyamên rasterast veke", + "keyboard_shortcuts.down": "Di rêzokê de dakêşe jêr", + "keyboard_shortcuts.enter": "Şandiyê veke", + "keyboard_shortcuts.favourite": "Şandiya bijarte", + "keyboard_shortcuts.favourites": "Rêzokên bijarte veke", + "keyboard_shortcuts.federated": "Demnameyê federalîkirî veke", + "keyboard_shortcuts.heading": "Kurterêyên klavyeyê", + "keyboard_shortcuts.home": "Demnameyê veke", + "keyboard_shortcuts.hotkey": "Bişkoka kurterê", + "keyboard_shortcuts.legend": "Vê çîrokê nîşan bike", + "keyboard_shortcuts.local": "Demnameya herêmî veke", + "keyboard_shortcuts.mention": "Qala nivîskarî/ê bike", + "keyboard_shortcuts.muted": "Rêzoka bikarhênerên bêdeng kirî veke", + "keyboard_shortcuts.my_profile": "Profîla xwe veke", + "keyboard_shortcuts.notifications": "Stûnê agahdariyan veke", + "keyboard_shortcuts.open_media": "Medya veke", + "keyboard_shortcuts.pinned": "Şandiyên derzîkirî veke", + "keyboard_shortcuts.profile": "Profîla nivîskaran veke", + "keyboard_shortcuts.reply": "Bersivê bide şandiyê", + "keyboard_shortcuts.requests": "Rêzoka daxwazên şopandinê veke", + "keyboard_shortcuts.search": "Bal bide şivika lêgerînê", + "keyboard_shortcuts.spoilers": "Zeviya hişyariya naverokê nîşan bide/veşêre", + "keyboard_shortcuts.start": "Stûna \"destpêkê\" veke", + "keyboard_shortcuts.toggle_hidden": "Nivîsa paş hişyariya naverokê nîşan bide/veşêre", + "keyboard_shortcuts.toggle_sensitivity": "Medyayê nîşan bide/veşêre", + "keyboard_shortcuts.toot": "Dest bi şandiyeke nû bike", + "keyboard_shortcuts.unfocus": "Bal nede cîhê nivîsê /lêgerînê", + "keyboard_shortcuts.up": "Di rêzokê de rake jor", + "lightbox.close": "Bigire", + "lightbox.compress": "Qutîya wêneya nîşan dike bitepisîne", + "lightbox.expand": "Qutîya wêneya nîşan dike fireh bike", + "lightbox.next": "Pêş", + "lightbox.previous": "Paş", + "lists.account.add": "Tevlî rêzokê bike", + "lists.account.remove": "Ji rêzokê rake", + "lists.delete": "Rêzokê jê bibe", + "lists.edit": "Rêzokê serrast bike", + "lists.edit.submit": "Sernavê biguherîne", + "lists.new.create": "Rêzokê tevlî bike", + "lists.new.title_placeholder": "Sernavê rêzoka nû", + "lists.replies_policy.followed": "Bikarhênereke şopandî", + "lists.replies_policy.list": "Endamên rêzokê", + "lists.replies_policy.none": "Ne yek", + "lists.replies_policy.title": "Bersivan nîşan bide:", + "lists.search": "Di navbera kesên ku te dişopînin bigere", + "lists.subheading": "Rêzokên te", + "load_pending": "{count, plural, one {# hêmaneke nû} other {#hêmaneke nû}}", + "loading_indicator.label": "Tê barkirin...", + "media_gallery.toggle_visible": "{number, plural, one {Wêneyê veşêre} other {Wêneyan veşêre}}", + "missing_indicator.label": "Nehate dîtin", + "missing_indicator.sublabel": "Ev çavkanî nehat dîtin", + "mute_modal.duration": "Dem", + "mute_modal.hide_notifications": "Agahdariyan ji ev bikarhêner veşêre?", + "mute_modal.indefinite": "Nediyar", + "navigation_bar.apps": "Sepana mobîl", + "navigation_bar.blocks": "Bikarhênerên astengkirî", + "navigation_bar.bookmarks": "Şûnpel", + "navigation_bar.community_timeline": "Demnameya herêmî", + "navigation_bar.compose": "Şandiyeke nû binivsîne", + "navigation_bar.direct": "Peyamên rasterast", + "navigation_bar.discover": "Vekolê", + "navigation_bar.domain_blocks": "Navparên astengkirî", + "navigation_bar.edit_profile": "Profîl serrast bike", + "navigation_bar.favourites": "Bijarte", + "navigation_bar.filters": "Peyvên bêdengkirî", + "navigation_bar.follow_requests": "Daxwazên şopandinê", + "navigation_bar.follows_and_followers": "Yên tê şopandin û şopîner", + "navigation_bar.info": "Derbarê vî rajekarî", + "navigation_bar.keyboard_shortcuts": "Bişkoka kurterê", + "navigation_bar.lists": "Rêzok", + "navigation_bar.logout": "Derkeve", + "navigation_bar.mutes": "Bikarhênerên bêdengkirî", + "navigation_bar.personal": "Kesanî", + "navigation_bar.pins": "Toot a derzîkirî", + "navigation_bar.preferences": "Hilbijarte", + "navigation_bar.public_timeline": "Demnameyê federalîkirî", + "navigation_bar.security": "Ewlehî", + "notification.favourite": "{name} şandiya te hez kir", + "notification.follow": "{name} te şopand", + "notification.follow_request": "{name} dixwazê te bişopîne", + "notification.mention": "{name} qale te kir", + "notification.own_poll": "Rapirsîya te qediya", + "notification.poll": "Rapirsiyeke ku te deng daye qediya", + "notification.reblog": "{name} şandiya te belav kir/ boost kir", + "notification.status": "{name} niha şand", + "notifications.clear": "Agahdariyan pak bike", + "notifications.clear_confirmation": "Bi rastî tu dixwazî bi awayekî dawî hemû agahdariyên xwe pak bikî?", + "notifications.column_settings.alert": "Agahdariyên sermaseyê", + "notifications.column_settings.favourite": "Bijarte:", + "notifications.column_settings.filter_bar.advanced": "Hemû beşan nîşan bide", + "notifications.column_settings.filter_bar.category": "Şivika parzûna bilêz", + "notifications.column_settings.filter_bar.show": "Nîşan bike", + "notifications.column_settings.follow": "Şopînerên nû:", + "notifications.column_settings.follow_request": "Daxwazên şopandinê nû:", + "notifications.column_settings.mention": "Qalkirin:", + "notifications.column_settings.poll": "Encamên rapirsiyê:", + "notifications.column_settings.push": "Agahdarîyên yekser", + "notifications.column_settings.reblog": "Bilindkirî:", + "notifications.column_settings.show": "Di nav stûnê de nîşan bike", + "notifications.column_settings.sound": "Deng lêxe", + "notifications.column_settings.status": "Şandiyên nû:", + "notifications.column_settings.unread_markers.category": "Nîşankerê agahdariyên nexwendî", + "notifications.filter.all": "Hemû", + "notifications.filter.boosts": "Bilindkirî", + "notifications.filter.favourites": "Bijarte", + "notifications.filter.follows": "Şopîner", + "notifications.filter.mentions": "Qalkirin", + "notifications.filter.polls": "Encamên rapirsiyê", + "notifications.filter.statuses": "Ji kesên tu dişopînî re rojanekirin", + "notifications.grant_permission": "Destûrê bide.", + "notifications.group": "{count} agahdarî", + "notifications.mark_as_read": "Hemî agahdarîya wek xwendî nîşan bike", + "notifications.permission_denied": "Agahdarîyên sermaseyê naxebite ji ber ku berê de daxwazî ya destûr dayîna gerokê hati bû red kirin", + "notifications.permission_denied_alert": "Agahdarîyên sermaseyê nay çalak kirin, ji ber ku destûr kirina gerokê pêşî de hati bû red kirin", + "notifications.permission_required": "Agahdarîyên sermaseyê naxebite çunkî mafê pêwîst dike nehatiye dayîn.", + "notifications_permission_banner.enable": "Agahdarîyên sermaseyê çalak bike", + "notifications_permission_banner.how_to_control": "Da ku agahdariyên mastodon bistînî gava ne vekirî be. Agahdariyên sermaseyê çalak bike\n Tu dikarî agahdariyên sermaseyê bi rê ve bibî ku bi hemû cureyên çalakiyên ên ku agahdariyan rû didin ku bi riya tikandînê li ser bişkoka {icon} çalak dibe.", + "notifications_permission_banner.title": "Tu tiştî bîr neke", + "picture_in_picture.restore": "Vegerîne paş", + "poll.closed": "Girtî", + "poll.refresh": "Nû bike", + "poll.total_people": "{count, plural, one {# kes} other {# kes}}", + "poll.total_votes": "{count, plural, one {# deng} other {# deng}}", + "poll.vote": "Deng bide", + "poll.voted": "Te dengê xwe da vê bersivê", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", + "poll_button.add_poll": "Rapirsîyek zêde bike", + "poll_button.remove_poll": "Rapirsî yê rake", + "privacy.change": "Nepênîtiya şandiyan biguherîne", + "privacy.direct.long": "Tenê ji bo bikarhênerên qalkirî tê dîtin", + "privacy.direct.short": "Taybet", + "privacy.private.long": "Tenê bo şopîneran xuyabar e", + "privacy.private.short": "Tenê şopîneran", + "privacy.public.long": "Ji bo herkesî li berçav e, di demnameyên gelemperî de dê xûyakirin", + "privacy.public.short": "Gelemperî", + "privacy.unlisted.long": "Ji herkesî ra tê xûya, lê demnameyê gelemperî ra nay xûyakirin", + "privacy.unlisted.short": "Nerêzok", + "refresh": "Nû bike", + "regeneration_indicator.label": "Tê barkirin…", + "regeneration_indicator.sublabel": "Mala te da tê amedekirin!", + "relative_time.days": "{number}r", + "relative_time.hours": "{number}d", + "relative_time.just_now": "niha", + "relative_time.minutes": "{number}x", + "relative_time.seconds": "{number}ç", + "relative_time.today": "îro", + "reply_indicator.cancel": "Dev jê berde", + "report.forward": "Biçe bo {target}", + "report.forward_hint": "Ajimêr ji rajekarek din da ne. Tu kopîyeka anonîm ya raporê bişînî li wur?", + "report.hint": "Ev rapor yê rajekarê lihevkarên te ra were şandin. Tu dikarî şiroveyekê pêşkêş bikî bê ka tu çima vê ajimêrê jor radigîhînî:", + "report.placeholder": "Şiroveyên zêde", + "report.submit": "Bişîne", + "report.target": "Ragihandin {target}", + "search.placeholder": "Bigere", + "search_popout.search_format": "Dirûva lêgerîna pêşketî", + "search_popout.tips.full_text": "Nivîsên hêsan, şandiyên ku te nivîsandiye, bijare kiriye, bilind kiriye an jî yên behsa te kirine û her wiha navê bikarhêneran, navên xûya dike û hashtagan vedigerîne.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "şandî", + "search_popout.tips.text": "Nivîsên hêsan, navên xûya ên ku li hev hatî, bikarhêner û hashtagan vedigerîne", + "search_popout.tips.user": "bikarhêner", + "search_results.accounts": "Mirov", + "search_results.hashtags": "Hashtag", + "search_results.statuses": "Şandî", + "search_results.statuses_fts_disabled": "Di vê rajekara Mastodonê da lêgerîna şandîyên li gorî naveroka wan ne çalak e.", + "search_results.total": "{count, number} {count, plural, one {encam} other {encam}}", + "status.admin_account": "Ji bo @{name} navrûya venihêrtinê veke", + "status.admin_status": "Vê şandîyê di navrûya venihêrtinê de veke", + "status.block": "@{name} asteng bike", + "status.bookmark": "Şûnpel", + "status.cancel_reblog_private": "Bilind neke", + "status.cannot_reblog": "Ev şandî nayê bilindkirin", + "status.copy": "Girêdanê jê bigire bo weşankirinê", + "status.delete": "Jê bibe", + "status.detailed_status": "Dîtina axaftina berfireh", + "status.direct": "Peyama rasterast @{name}", + "status.embed": "Hedimandî", + "status.favourite": "Bijarte", + "status.filtered": "Parzûnkirî", + "status.load_more": "Bêtir bar bike", + "status.media_hidden": "Medya veşartî ye", + "status.mention": "Qal @{name} bike", + "status.more": "Bêtir", + "status.mute": "@{name} Bêdeng bike", + "status.mute_conversation": "Axaftinê bêdeng bike", + "status.open": "Vê şandiyê berferh bike", + "status.pin": "Li ser profîlê derzî bike", + "status.pinned": "Şandiya derzîkirî", + "status.read_more": "Bêtir bixwîne", + "status.reblog": "Bilindkirî", + "status.reblog_private": "Bi dîtina resen bilind bike", + "status.reblogged_by": "{name} bilind kir", + "status.reblogs.empty": "Kesekî hin ev şandî bilind nekiriye. Gava kesek bilind bike, ew ên li vir werin xuyakirin.", + "status.redraft": "Jê bibe & ji nû ve reşnivîs bike", + "status.remove_bookmark": "Şûnpêlê jê rake", + "status.reply": "Bersivê bide", + "status.replyAll": "Mijarê bibersivîne", + "status.report": "{name} gilî bike", + "status.sensitive_warning": "Naveroka hestiyarî", + "status.share": "Parve bike", + "status.show_less": "Kêmtir nîşan bide", + "status.show_less_all": "Ji bo hemîyan kêmtir nîşan bide", + "status.show_more": "Hêj zehftir nîşan bide", + "status.show_more_all": "Bêtir nîşan bide bo hemûyan", + "status.show_thread": "Mijarê nîşan bide", + "status.uncached_media_warning": "Tune ye", + "status.unmute_conversation": "Axaftinê bêdeng neke", + "status.unpin": "Şandiya derzîkirî ji profîlê rake", + "suggestions.dismiss": "Pêşniyarê paşguh bike", + "suggestions.header": "Dibe ku bala te bikşîne…", + "tabs_bar.federated_timeline": "Giştî", + "tabs_bar.home": "Serrûpel", + "tabs_bar.local_timeline": "Herêmî", + "tabs_bar.notifications": "Agahdarî", + "tabs_bar.search": "Bigere", + "time_remaining.days": "{number, plural, one {# roj} other {# roj}} mayî", + "time_remaining.hours": "{number, plural, one {# demjimêr} other {# demjimêr}} mayî", + "time_remaining.minutes": "{number, plural, one {# xulek} other {# xulek}} mayî", + "time_remaining.moments": "Demên mayî", + "time_remaining.seconds": "{number, plural, one {# çirke} other {# çirke}} maye", + "timeline_hint.remote_resource_not_displayed": "{resource} Ji rajekerên din nayê dîtin.", + "timeline_hint.resources.followers": "Şopîner", + "timeline_hint.resources.follows": "Şopîner", + "timeline_hint.resources.statuses": "Şandiyên kevn", + "trends.counter_by_accounts": "{count, plural, one {{counter} kes} other {{counter} kes}} diaxivin", + "trends.trending_now": "Rojev", + "ui.beforeunload": "Ger ji Mastodonê veketi wê reşnivîsa te jî winda bibe.", + "units.short.billion": "{count}B", + "units.short.million": "{count}M", + "units.short.thousand": "{count}H", + "upload_area.title": "Ji bo barkirinê kaş bike û deyne", + "upload_button.label": "Wêne, vîdeoyek an jî pelê dengî tevlî bike", + "upload_error.limit": "Sînora barkirina pelan derbas bû.", + "upload_error.poll": "Di rapirsîyan de mafê barkirina pelan nayê dayîn.", + "upload_form.audio_description": "Ji bona kesên kêm dibihîsin re pênase bike", + "upload_form.description": "Ji bona astengdarên dîtinê re vebêje", + "upload_form.edit": "Serrast bike", + "upload_form.thumbnail": "Wêneyê biçûk biguherîne", + "upload_form.undo": "Jê bibe", + "upload_form.video_description": "Ji bo kesên kerr û lalan pênase bike", + "upload_modal.analyzing_picture": "Wêne tê analîzkirin…", + "upload_modal.apply": "Bisepîne", + "upload_modal.applying": "Applying…", + "upload_modal.choose_image": "Wêneyê hilbijêre", + "upload_modal.description_placeholder": "Rovîyek qehweyî û bilez li ser kûçikê tîral banz dide", + "upload_modal.detect_text": "Ji nivîsa wêneyê re serwext be", + "upload_modal.edit_media": "Medyayê sererast bike", + "upload_modal.hint": "Ji bo hilbijartina xala navendê her tim dîmenê piçûk de pêşdîtina çerxê bitikîne an jî kaş bike.", + "upload_modal.preparing_ocr": "OCR dihê amadekirin…", + "upload_modal.preview_label": "Pêşdîtin ({ratio})", + "upload_progress.label": "Tê barkirin...", + "video.close": "Vîdyoyê bigire", + "video.download": "Pelê daxe", + "video.exit_fullscreen": "Ji dîmendera tijî derkeve", + "video.expand": "Vîdyoyê berferh bike", + "video.fullscreen": "Dimendera tijî", + "video.hide": "Vîdyo veşêre", + "video.mute": "Dengê qut bike", + "video.pause": "Rawestîne", + "video.play": "Vêxe", + "video.unmute": "Dengê qut neke" +} diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index 2f0dd9fd0..72b8f7f0a 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -47,11 +47,16 @@ "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "ಅಯ್ಯೋ!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "Log out", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 32e5d60f6..4252141e7 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -13,7 +13,7 @@ "account.domain_blocked": "도메인 차단됨", "account.edit_profile": "프로필 편집", "account.enable_notifications": "@{name} 의 게시물 알림 켜기", - "account.endorse": "프로필에 보이기", + "account.endorse": "프로필에 추천하기", "account.follow": "팔로우", "account.followers": "팔로워", "account.followers.empty": "아직 아무도 이 유저를 팔로우하고 있지 않습니다.", @@ -39,45 +39,50 @@ "account.requested": "승인 대기 중. 클릭해서 취소하기", "account.share": "@{name}의 프로필 공유", "account.show_reblogs": "@{name}의 부스트 보기", - "account.statuses_counter": "{counter} 툿", + "account.statuses_counter": "{counter} 게시물", "account.unblock": "차단 해제", - "account.unblock_domain": "{domain} 차단 해제", - "account.unendorse": "프로필에 나타내지 않기", + "account.unblock_domain": "도메인 {domain} 차단 해제", + "account.unendorse": "프로필에 추천하지 않기", "account.unfollow": "팔로우 해제", - "account.unmute": "뮤트 해제", + "account.unmute": "@{name} 뮤트 해제", "account.unmute_notifications": "@{name}의 알림 뮤트 해제", "account_note.placeholder": "클릭해서 노트 추가", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "{retry_time, time, medium}에 다시 시도해 주세요.", - "alert.rate_limited.title": "빈도 제한", + "alert.rate_limited.title": "빈도 제한됨", "alert.unexpected.message": "예측하지 못한 에러가 발생했습니다.", "alert.unexpected.title": "앗!", "announcement.announcement": "공지사항", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "주간 {count}회", - "boost_modal.combo": "{combo}를 누르면 다음부터 이 과정을 건너뛸 수 있습니다", + "boost_modal.combo": "다음엔 {combo}를 눌러서 이 과정을 건너뛸 수 있습니다", "bundle_column_error.body": "컴포넌트를 불러오는 과정에서 문제가 발생했습니다.", "bundle_column_error.retry": "다시 시도", "bundle_column_error.title": "네트워크 에러", "bundle_modal_error.close": "닫기", "bundle_modal_error.message": "컴포넌트를 불러오는 과정에서 문제가 발생했습니다.", "bundle_modal_error.retry": "다시 시도", - "column.blocks": "차단 중인 사용자", + "column.blocks": "차단된 사용자", "column.bookmarks": "보관함", "column.community": "로컬 타임라인", "column.direct": "다이렉트 메시지", "column.directory": "프로필 둘러보기", - "column.domain_blocks": "숨겨진 도메인", + "column.domain_blocks": "차단된 도메인", "column.favourites": "즐겨찾기", "column.follow_requests": "팔로우 요청", "column.home": "홈", "column.lists": "리스트", - "column.mutes": "뮤트 중인 사용자", + "column.mutes": "뮤트된 사용자", "column.notifications": "알림", - "column.pins": "고정된 툿", + "column.pins": "고정된 게시물", "column.public": "연합 타임라인", "column_back_button.label": "돌아가기", "column_header.hide_settings": "설정 숨기기", - "column_header.moveLeft_settings": "왼쪽으로 이동", - "column_header.moveRight_settings": "오른쪽으로 이동", + "column_header.moveLeft_settings": "컬럼을 왼쪽으로 이동", + "column_header.moveRight_settings": "컬럼을 오른쪽으로 이동", "column_header.pin": "고정하기", "column_header.show_settings": "설정 보이기", "column_header.unpin": "고정 해제", @@ -102,19 +107,21 @@ "compose_form.sensitive.hide": "미디어를 민감함으로 설정하기", "compose_form.sensitive.marked": "미디어가 열람주의로 설정되어 있습니다", "compose_form.sensitive.unmarked": "미디어가 열람주의로 설정 되어 있지 않습니다", - "compose_form.spoiler.marked": "열람주의가 설정되어 있습니다", - "compose_form.spoiler.unmarked": "열람주의가 설정 되어 있지 않습니다", - "compose_form.spoiler_placeholder": "경고", + "compose_form.spoiler.marked": "열람 주의 제거", + "compose_form.spoiler.unmarked": "열람 주의가 설정 되어 있지 않습니다", + "compose_form.spoiler_placeholder": "경고 문구를 여기에 작성하세요", "confirmation_modal.cancel": "취소", "confirmations.block.block_and_report": "차단하고 신고하기", "confirmations.block.confirm": "차단", "confirmations.block.message": "정말로 {name}를 차단하시겠습니까?", "confirmations.delete.confirm": "삭제", - "confirmations.delete.message": "정말로 삭제하시겠습니까?", + "confirmations.delete.message": "정말로 이 게시물을 삭제하시겠습니까?", "confirmations.delete_list.confirm": "삭제", "confirmations.delete_list.message": "정말로 이 리스트를 영구적으로 삭제하시겠습니까?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "도메인 전체를 차단", - "confirmations.domain_block.message": "정말로 {domain} 전체를 차단하시겠습니까? 대부분의 경우 개별 차단이나 뮤트로 충분합니다. 모든 공개 타임라인과 알림에서 해당 도메인에서 작성된 컨텐츠를 보지 못합니다. 해당 도메인 팔로워와의 관계가 사라집니다.", + "confirmations.domain_block.message": "정말로 {domain} 전체를 차단하시겠습니까? 대부분의 경우 개별 차단이나 뮤트로 충분합니다. 모든 공개 타임라인과 알림에서 해당 도메인에서 작성된 컨텐츠를 보지 못합니다. 해당 도메인에 속한 팔로워와의 관계가 사라집니다.", "confirmations.logout.confirm": "로그아웃", "confirmations.logout.message": "정말로 로그아웃 하시겠습니까?", "confirmations.mute.confirm": "뮤트", @@ -138,28 +145,28 @@ "embed.preview": "다음과 같이 표시됩니다:", "emoji_button.activity": "활동", "emoji_button.custom": "커스텀", - "emoji_button.flags": "국기", - "emoji_button.food": "음식", + "emoji_button.flags": "깃발", + "emoji_button.food": "음식과 마실것", "emoji_button.label": "에모지를 추가", "emoji_button.nature": "자연", - "emoji_button.not_found": "없어!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "맞는 에모지가 없습니다", "emoji_button.objects": "물건", "emoji_button.people": "사람들", - "emoji_button.recent": "자주 사용 됨", + "emoji_button.recent": "자주 사용됨", "emoji_button.search": "검색...", "emoji_button.search_results": "검색 결과", "emoji_button.symbols": "기호", "emoji_button.travel": "여행과 장소", "empty_column.account_suspended": "계정 정지됨", - "empty_column.account_timeline": "여긴 툿이 없어요!", + "empty_column.account_timeline": "여긴 게시물이 없어요!", "empty_column.account_unavailable": "프로필 사용 불가", "empty_column.blocks": "아직 아무도 차단하지 않았습니다.", - "empty_column.bookmarked_statuses": "아직 보관한 툿이 없습니다. 툿을 보관하면 여기에 나타납니다.", + "empty_column.bookmarked_statuses": "아직 보관한 게시물이 없습니다. 게시물을 보관하면 여기에 나타납니다.", "empty_column.community": "로컬 타임라인에 아무 것도 없습니다. 아무거나 적어 보세요!", "empty_column.direct": "아직 다이렉트 메시지가 없습니다. 다이렉트 메시지를 보내거나 받은 경우, 여기에 표시 됩니다.", - "empty_column.domain_blocks": "아직 숨겨진 도메인이 없습니다.", - "empty_column.favourited_statuses": "아직 즐겨찾기 한 툿이 없습니다. 툿을 즐겨찾기 하면 여기에 나타납니다.", - "empty_column.favourites": "아직 아무도 이 툿을 즐겨찾기 하지 않았습니다. 누군가 즐겨찾기를 하면 여기에 그들이 나타납니다.", + "empty_column.domain_blocks": "아직 차단된 도메인이 없습니다.", + "empty_column.favourited_statuses": "아직 즐겨찾기 한 게시물이 없습니다. 게시물을 즐겨찾기 하면 여기에 나타납니다.", + "empty_column.favourites": "아직 아무도 이 게시물을 즐겨찾기 하지 않았습니다. 누군가 즐겨찾기를 하면 여기에 나타납니다.", "empty_column.follow_recommendations": "당신을 위한 제안이 생성될 수 없는 것 같습니다. 알 수도 있는 사람을 검색하거나 유행하는 해시태그를 둘러볼 수 있습니다.", "empty_column.follow_requests": "아직 팔로우 요청이 없습니다. 요청을 받았을 때 여기에 나타납니다.", "empty_column.hashtag": "이 해시태그는 아직 사용되지 않았습니다.", @@ -189,18 +196,18 @@ "getting_started.heading": "시작", "getting_started.invite": "초대", "getting_started.open_source_notice": "Mastodon은 오픈 소스 소프트웨어입니다. 누구나 GitHub({github})에서 개발에 참여하거나, 문제를 보고할 수 있습니다.", - "getting_started.security": "보안", + "getting_started.security": "계정 설정", "getting_started.terms": "이용 약관", "hashtag.column_header.tag_mode.all": "그리고 {additional}", "hashtag.column_header.tag_mode.any": "또는 {additional}", - "hashtag.column_header.tag_mode.none": "({additional}를 제외)", - "hashtag.column_settings.select.no_options_message": "추천 할 내용이 없습니다", + "hashtag.column_header.tag_mode.none": "{additional}를 제외하고", + "hashtag.column_settings.select.no_options_message": "추천할 내용이 없습니다", "hashtag.column_settings.select.placeholder": "해시태그를 입력하세요…", "hashtag.column_settings.tag_mode.all": "모두", "hashtag.column_settings.tag_mode.any": "아무것이든", "hashtag.column_settings.tag_mode.none": "이것들을 제외하고", "hashtag.column_settings.tag_toggle": "추가 해시태그를 이 컬럼에 추가합니다", - "home.column_settings.basic": "기본 설정", + "home.column_settings.basic": "기본", "home.column_settings.show_reblogs": "부스트 표시", "home.column_settings.show_replies": "답글 표시", "home.hide_announcements": "공지사항 숨기기", @@ -218,7 +225,7 @@ "keyboard_shortcuts.down": "리스트에서 아래로 이동", "keyboard_shortcuts.enter": "게시물 열기", "keyboard_shortcuts.favourite": "관심글 지정", - "keyboard_shortcuts.favourites": "즐겨찾기 리스트 열기", + "keyboard_shortcuts.favourites": "즐겨찾기 목록 열기", "keyboard_shortcuts.federated": "연합 타임라인 열기", "keyboard_shortcuts.heading": "키보드 단축키", "keyboard_shortcuts.home": "홈 타임라인 열기", @@ -272,10 +279,10 @@ "navigation_bar.blocks": "차단한 사용자", "navigation_bar.bookmarks": "보관함", "navigation_bar.community_timeline": "로컬 타임라인", - "navigation_bar.compose": "새 툿 작성", + "navigation_bar.compose": "새 게시물 작성", "navigation_bar.direct": "다이렉트 메시지", "navigation_bar.discover": "발견하기", - "navigation_bar.domain_blocks": "숨겨진 도메인", + "navigation_bar.domain_blocks": "차단된 도메인", "navigation_bar.edit_profile": "프로필 편집", "navigation_bar.favourites": "즐겨찾기", "navigation_bar.filters": "뮤트된 단어", @@ -287,7 +294,7 @@ "navigation_bar.logout": "로그아웃", "navigation_bar.mutes": "뮤트 중인 사용자", "navigation_bar.personal": "개인용", - "navigation_bar.pins": "고정된 툿", + "navigation_bar.pins": "고정된 게시물", "navigation_bar.preferences": "사용자 설정", "navigation_bar.public_timeline": "연합 타임라인", "navigation_bar.security": "보안", @@ -314,7 +321,7 @@ "notifications.column_settings.reblog": "부스트:", "notifications.column_settings.show": "컬럼에 표시", "notifications.column_settings.sound": "효과음 재생", - "notifications.column_settings.status": "새 툿:", + "notifications.column_settings.status": "새 게시물:", "notifications.column_settings.unread_markers.category": "읽지 않음 알림 마커", "notifications.filter.all": "모두", "notifications.filter.boosts": "부스트", @@ -339,6 +346,7 @@ "poll.total_votes": "{count} 표", "poll.vote": "투표", "poll.voted": "이 답변에 투표했습니다", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "투표 추가", "poll_button.remove_poll": "투표 삭제", "privacy.change": "포스트의 프라이버시 설정을 변경", @@ -399,14 +407,14 @@ "status.mute_conversation": "이 대화를 뮤트", "status.open": "상세 정보 표시", "status.pin": "고정", - "status.pinned": "고정 된 게시물", + "status.pinned": "고정된 게시물", "status.read_more": "더 보기", "status.reblog": "부스트", "status.reblog_private": "원래의 수신자들에게 부스트", "status.reblogged_by": "{name} 님이 부스트 했습니다", "status.reblogs.empty": "아직 아무도 이 게시물을 부스트하지 않았습니다. 부스트 한 사람들이 여기에 표시 됩니다.", "status.redraft": "지우고 다시 쓰기", - "status.remove_bookmark": "보관한 툿 삭제", + "status.remove_bookmark": "보관한 게시물 삭제", "status.reply": "답장", "status.replyAll": "전원에게 답장", "status.report": "신고", @@ -454,6 +462,7 @@ "upload_form.video_description": "청각, 시각 장애인을 위한 설명", "upload_modal.analyzing_picture": "이미지 분석 중…", "upload_modal.apply": "적용", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "이미지 선택", "upload_modal.description_placeholder": "다람쥐 헌 쳇바퀴 타고파", "upload_modal.detect_text": "이미지에서 텍스트 추출", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index fadc6b3a6..2f0c4e511 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -47,11 +47,16 @@ "account.unmute": "بێدەنگکردنی @{name}", "account.unmute_notifications": "بێدەنگکردنی هۆشیارییەکان لە @{name}", "account_note.placeholder": "کرتەبکە بۆ زیادکردنی تێبینی", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "تکایە هەوڵبدەرەوە دوای {retry_time, time, medium}.", "alert.rate_limited.title": "ڕێژەی سنووردار", "alert.unexpected.message": "هەڵەیەکی چاوەڕوان نەکراو ڕوویدا.", "alert.unexpected.title": "تەححح!", "announcement.announcement": "بانگەواز", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} هەرهەفتە", "boost_modal.combo": "دەتوانیت دەست بنێی بە سەر {combo} بۆ بازدان لە جاری داهاتوو", "bundle_column_error.body": "هەڵەیەک ڕوویدا لەکاتی بارکردنی ئەم پێکهاتەیە.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "ئایا دڵنیایت لەوەی دەتەوێت ئەم توتە بسڕیتەوە?", "confirmations.delete_list.confirm": "سڕینەوە", "confirmations.delete_list.message": "ئایا دڵنیایت لەوەی دەتەوێت بە هەمیشەیی ئەم لیستە بسڕیتەوە?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "بلۆککردنی هەموو دۆمەینەکە", "confirmations.domain_block.message": "ئایا بەڕاستی، بەڕاستی تۆ دەتەوێت هەموو {domain} بلۆک بکەیت؟ لە زۆربەی حاڵەتەکاندا چەند بلۆکێکی ئامانجدار یان بێدەنگەکان پێویست و پەسەندن. تۆ ناوەڕۆک ێک نابینیت لە دۆمەینەکە لە هیچ هێڵی کاتی گشتی یان ئاگانامەکانت. شوێنکەوتوانی تۆ لەو دۆمەینەوە لادەبرێن.", "confirmations.logout.confirm": "چوونە دەرەوە", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# دەنگ} other {# دەنگ}}\n", "poll.vote": "دەنگ", "poll.voted": "تۆ دەنگت بەو وەڵامە دا", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "ڕاپرسییەک زیاد بکە", "poll_button.remove_poll": "ده‌نگدان بسڕه‌وه‌‌", "privacy.change": "ڕێکخستنی تایبەتمەندی توت", @@ -454,6 +462,7 @@ "upload_form.video_description": "بۆ کەم بینایان و کەم بیستان وەسفی بکە", "upload_modal.analyzing_picture": "شیکردنەوەی وێنە…", "upload_modal.apply": "جێبەجێ کردن", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "وێنە هەڵبژێرە", "upload_modal.description_placeholder": "بە دڵ کەین با بە نەشئەی مەی غوباری میحنەتی دونیا", "upload_modal.detect_text": "دەقی وێنەکە بدۆزیەوە", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json index 812215cc7..14dcd9618 100644 --- a/app/javascript/mastodon/locales/kw.json +++ b/app/javascript/mastodon/locales/kw.json @@ -47,11 +47,16 @@ "account.unmute": "Antawhe @{name}", "account.unmute_notifications": "Antawhe gwarnyansow a @{name}", "account_note.placeholder": "Klyckya dhe geworra noten", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Assayewgh arta mar pleg wosa {retry_time, time, medium}.", "alert.rate_limited.title": "Kevradh finwethys", "alert.unexpected.message": "Gwall anwaytyadow re dharva.", "alert.unexpected.title": "Oups!", "announcement.announcement": "Deklaryans", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} an seythen", "boost_modal.combo": "Hwi a yll gwaska {combo} dhe woheles hemma an nessa tro", "bundle_column_error.body": "Neppyth eth yn kamm ow karga'n elven ma.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Owgh hwi sur a vynnes dilea'n post ma?", "confirmations.delete_list.confirm": "Dilea", "confirmations.delete_list.message": "Owgh hwi sur a vynnes dilea'n rol ma yn fast?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Lettya gorfarth dhien", "confirmations.domain_block.message": "Owgh hwi wir, wir sur a vynnes lettya'n {domain} dhien? Y'n brassa rann a gasow, boghes lettyansow medrys po tawheansow yw lowr ha gwell. Ny wrewgh hwi gweles dalgh a'n worfarth na yn py amserlin boblek pynag po yn agas gwarnyansow. Agas holyoryon an worfarth na a vydh diles.", "confirmations.logout.confirm": "Digelmi", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# raglev} other {# raglev}}", "poll.vote": "Ragleva", "poll.voted": "Hwi a wrug ragleva'n gorthyp ma", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Keworra sondyans", "poll_button.remove_poll": "Dilea sondyans", "privacy.change": "Chanjya privetter an post", @@ -454,6 +462,7 @@ "upload_form.video_description": "Deskrifa rag tus vodharek po dallek", "upload_modal.analyzing_picture": "Ow tytratya skeusen…", "upload_modal.apply": "Gweytha", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Dewis aven", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Kilela tekst a skeusen", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 22fa09706..0c1a46de3 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -47,11 +47,16 @@ "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oi!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "Log out", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 0b56c6f13..4d65daa83 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -4,54 +4,59 @@ "account.badges.bot": "Bots", "account.badges.group": "Grupa", "account.block": "Bloķēt @{name}", - "account.block_domain": "Slēpt visu no {domain}", + "account.block_domain": "Bloķēt domēnu {domain}", "account.blocked": "Bloķēts", "account.browse_more_on_origin_server": "Pārlūkot vairāk sākotnējā profilā", - "account.cancel_follow_request": "Atcelt pieprasījumu", - "account.direct": "Privātā ziņa @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", - "account.domain_blocked": "Domēns ir paslēpts", - "account.edit_profile": "Labot profilu", + "account.cancel_follow_request": "Atcelt sekošanas pieprasījumu", + "account.direct": "Privāta ziņa @{name}", + "account.disable_notifications": "Pārtraukt man paziņot, kad @{name} publicē ierakstu", + "account.domain_blocked": "Domēns ir bloķēts", + "account.edit_profile": "Rediģēt profilu", "account.enable_notifications": "Man paziņot, kad @{name} publicē ierakstu", "account.endorse": "Izcelts profilā", "account.follow": "Sekot", "account.followers": "Sekotāji", - "account.followers.empty": "Šim lietotājam nav sekotāju.", - "account.followers_counter": "{count, plural, zero {{counter} sekotāju} one {{counter} sekotājs} other {{counter} sekotāji}}", - "account.following_counter": "{count, plural, zero {Seko {counter} kontiem} one {Seko {counter} kontam} other {Seko {counter} kontiem}}", + "account.followers.empty": "Šim lietotājam patreiz nav sekotāju.", + "account.followers_counter": "{count, plural, one {{counter} Sekotājs} other {{counter} Sekotāji}}", + "account.following_counter": "{count, plural, one {{counter} Sekojošs} other {{counter} Sekojoši}}", "account.follows.empty": "Šis lietotājs pagaidām nevienam neseko.", "account.follows_you": "Seko tev", "account.hide_reblogs": "Paslēpt paceltos ierakstus no lietotāja @{name}", - "account.joined": "Joined {date}", + "account.joined": "Pievienojās {date}", "account.last_status": "Pēdējā aktivitāte", "account.link_verified_on": "Šīs saites piederība ir pārbaudīta {date}", - "account.locked_info": "Šī konta privātuma status ir iestatīts slēgts. Īpašnieks izskatīs un izvēlēsies kas viņam drīkst sekot.", - "account.media": "Mēdiji", + "account.locked_info": "Šī konta privātuma statuss ir slēgts. Īpašnieks izskatīs, kurš viņam drīkst sekot.", + "account.media": "Mediji", "account.mention": "Piemin @{name}", - "account.moved_to": "{name} ir pārvācies uz:", + "account.moved_to": "{name} ir pārcelts uz:", "account.mute": "Apklusināt @{name}", "account.mute_notifications": "Nerādīt paziņojumus no @{name}", "account.muted": "Apklusināts", "account.never_active": "Nekad", - "account.posts": "Ieraksti", - "account.posts_with_replies": "Ieraksti un atbildes", + "account.posts": "Ziņas", + "account.posts_with_replies": "Ziņas un atbildes", "account.report": "Ziņot par lietotāju @{name}", "account.requested": "Gaidām apstiprinājumu. Nospied lai atceltu sekošanas pieparasījumu", - "account.share": "Dalīties ar lietotāja @{name}'s profilu", - "account.show_reblogs": "Parādīt lietotāja @{name} paceltos ierakstus", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.share": "Dalīties ar @{name} profilu", + "account.show_reblogs": "Parādīt @{name} paaugstinātās ziņas", + "account.statuses_counter": "{count, plural, one {{counter} ziņa} other {{counter} ziņas}}", "account.unblock": "Atbloķēt lietotāju @{name}", "account.unblock_domain": "Atbloķēt domēnu {domain}", - "account.unendorse": "Neizcelt profilā", - "account.unfollow": "Nesekot", - "account.unmute": "Noņemt apklusinājumu no lietotāja @{name}", + "account.unendorse": "Neattēlot profilā", + "account.unfollow": "Pārstāt sekot", + "account.unmute": "Noņemt apklusinājumu @{name}", "account.unmute_notifications": "Rādīt paziņojumus no lietotāja @{name}", "account_note.placeholder": "Noklikšķiniet, lai pievienotu piezīmi", - "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", - "alert.rate_limited.title": "Rate limited", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", + "alert.rate_limited.message": "Lūdzu, mēģini vēlreiz pāc {retry_time, time, medium}.", + "alert.rate_limited.title": "Biežums ierobežots", "alert.unexpected.message": "Negaidīta kļūda.", "alert.unexpected.title": "Ups!", "announcement.announcement": "Paziņojums", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} nedēļā", "boost_modal.combo": "Nospied {combo} lai izlaistu šo nākamreiz", "bundle_column_error.body": "Kaut kas nogāja greizi ielādējot šo komponenti.", @@ -62,18 +67,18 @@ "bundle_modal_error.retry": "Mēģini vēlreiz", "column.blocks": "Bloķētie lietotāji", "column.bookmarks": "Grāmatzīmes", - "column.community": "Lokālā laika līnija", + "column.community": "Vietējā ziņu līnija", "column.direct": "Privātās ziņas", "column.directory": "Pārlūkot profilus", - "column.domain_blocks": "Paslēptie domēni", - "column.favourites": "Favorīti", - "column.follow_requests": "Sekotāju pieprasījumi", + "column.domain_blocks": "Bloķētie domēni", + "column.favourites": "Izlase", + "column.follow_requests": "Sekošanas pieprasījumi", "column.home": "Sākums", "column.lists": "Saraksti", "column.mutes": "Apklusinātie lietotāji", "column.notifications": "Paziņojumi", "column.pins": "Piespraustie ziņojumi", - "column.public": "Federatīvā laika līnija", + "column.public": "Apvienotā ziņu lenta", "column_back_button.label": "Atpakaļ", "column_header.hide_settings": "Paslēpt iestatījumus", "column_header.moveLeft_settings": "Pārvietot kolonu pa kreisi", @@ -83,66 +88,68 @@ "column_header.unpin": "Atspraust", "column_subheading.settings": "Iestatījumi", "community.column_settings.local_only": "Tikai vietējie", - "community.column_settings.media_only": "Tikai mēdiji", - "community.column_settings.remote_only": "Tikai tālvadības", + "community.column_settings.media_only": "Tikai mediji", + "community.column_settings.remote_only": "Tikai attālinātie", "compose_form.direct_message_warning": "Šis ziņojums tiks nosūtīts tikai pieminētajiem lietotājiem.", - "compose_form.direct_message_warning_learn_more": "Papildus informācija", + "compose_form.direct_message_warning_learn_more": "Uzzināt vairāk", "compose_form.hashtag_warning": "Ziņojumu nebūs iespējams atrast zem haštagiem jo tas nav publisks. Tikai publiskos ziņojumus ir iespējams meklēt pēc tiem.", "compose_form.lock_disclaimer": "Tavs konts nav {locked}. Ikviens var Tev sekot lai apskatītu tikai sekotājiem paredzētos ziņojumus.", "compose_form.lock_disclaimer.lock": "slēgts", - "compose_form.placeholder": "Ko vēlies publicēt?", + "compose_form.placeholder": "Kas tev padomā?", "compose_form.poll.add_option": "Pievienot izvēli", "compose_form.poll.duration": "Aptaujas ilgums", "compose_form.poll.option_placeholder": "Izvēle Nr. {number}", "compose_form.poll.remove_option": "Noņemt šo izvēli", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", - "compose_form.publish": "Publicēt", + "compose_form.poll.switch_to_multiple": "Maini aptaujas veidu, lai atļautu vairākas izvēles", + "compose_form.poll.switch_to_single": "Maini aptaujas veidu, lai atļautu vienu izvēli", + "compose_form.publish": "Taurēt", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", - "compose_form.sensitive.marked": "Mēdijs ir atzīmēts kā sensitīvs", - "compose_form.sensitive.unmarked": "Mēdijs nav atzīmēts kā sensitīvs", - "compose_form.spoiler.marked": "Teksts ir paslēpts aiz brīdinājuma", - "compose_form.spoiler.unmarked": "Teksts nav paslēpts", - "compose_form.spoiler_placeholder": "Ieraksti Savu brīdinājuma tekstu šeit", + "compose_form.sensitive.hide": "{count, plural, one {Atzīmēt mediju kā sensitīvu} other {Atzīmēt medijus kā sensitīvus}}", + "compose_form.sensitive.marked": "{count, plural, one {Medijs ir atzīmēts kā sensitīvs} other {Mediji ir atzīmēti kā sensitīvi}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Medijs nav atzīmēts kā sensitīvs} other {Mediji nav atzīmēti kā sensitīvi}}", + "compose_form.spoiler.marked": "Noņemt satura brīdinājumu", + "compose_form.spoiler.unmarked": "Pievienot satura brīdinājumu", + "compose_form.spoiler_placeholder": "Ieraksti savu brīdinājumu šeit", "confirmation_modal.cancel": "Atcelt", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Bloķēt un ziņot", "confirmations.block.confirm": "Bloķēt", "confirmations.block.message": "Vai tiešām vēlies bloķēt lietotāju {name}?", "confirmations.delete.confirm": "Dzēst", - "confirmations.delete.message": "Vai tiešām vēlies dzēst šo ierakstu?", + "confirmations.delete.message": "Vai tiešām vēlaties dzēst šo ziņu?", "confirmations.delete_list.confirm": "Dzēst", "confirmations.delete_list.message": "Vai tiešam vēlies neatgriezeniski dzēst šo sarakstu?", - "confirmations.domain_block.confirm": "Paslēpt visu domēnu", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", + "confirmations.domain_block.confirm": "Bloķēt visu domēnu", "confirmations.domain_block.message": "Vai tu tiešām, tiešam vēlies bloķēt visu domēnu {domain}? Lielākajā daļā gadījumu pietiek ja nobloķē vai apklusini kādu. Tu neredzēsi saturu vai paziņojumus no šī domēna nevienā laika līnijā. Tavi sekotāji no šī domēna tiks noņemti.", - "confirmations.logout.confirm": "Log out", - "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.logout.confirm": "Iziet", + "confirmations.logout.message": "Vai tiešām vēlies izrakstīties?", "confirmations.mute.confirm": "Apklusināt", - "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.explanation": "Šādi no viņiem tiks slēptas ziņas un ziņas, kurās viņi tiek pieminēti, taču viņi joprojām varēs redzēt tavas ziņas un sekot tev.", "confirmations.mute.message": "Vai Tu tiešām velies apklusināt {name}?", "confirmations.redraft.confirm": "Dzēst un pārrakstīt", "confirmations.redraft.message": "Vai tiešām vēlies dzēst un pārrakstīt šo ierakstu? Favorīti un paceltie ieraksti tiks dzēsti, kā arī atbildes tiks atsaistītas no šī ieraksta.", "confirmations.reply.confirm": "Atbildēt", "confirmations.reply.message": "Atbildot tagad tava ziņa ko šobrīd raksti tiks pārrakstīta. Vai tiešām vēlies turpināt?", - "confirmations.unfollow.confirm": "Nesekot", + "confirmations.unfollow.confirm": "Pārstāt sekot", "confirmations.unfollow.message": "Vai tiešam vairs nevēlies sekot lietotājam {name}?", - "conversation.delete": "Delete conversation", - "conversation.mark_as_read": "Mark as read", - "conversation.open": "View conversation", - "conversation.with": "With {names}", - "directory.federated": "From known fediverse", - "directory.local": "From {domain} only", - "directory.new_arrivals": "New arrivals", - "directory.recently_active": "Recently active", - "embed.instructions": "Iegul šo ziņojumu savā mājaslapā kopējot kodu zemāk.", + "conversation.delete": "Dzēst sarunu", + "conversation.mark_as_read": "Atzīmēt kā izlasītu", + "conversation.open": "Skatīt sarunu", + "conversation.with": "Ar {names}", + "directory.federated": "No pazīstamas federācijas", + "directory.local": "Tikai no {domain}", + "directory.new_arrivals": "Jaunpienācēji", + "directory.recently_active": "Nesen aktīvs", + "embed.instructions": "Iestrādā šo ziņu savā mājaslapā, kopējot zemāk redzmo kodu.", "embed.preview": "Tas izskatīsies šādi:", "emoji_button.activity": "Aktivitāte", "emoji_button.custom": "Pielāgots", "emoji_button.flags": "Karogi", "emoji_button.food": "Ēdieni un dzērieni", - "emoji_button.label": "Ielikt emoji smaidiņu", + "emoji_button.label": "Ievietot emocijzīmi", "emoji_button.nature": "Daba", - "emoji_button.not_found": "Nekādu emodžīšu!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "Neviena atbilstoša emocijzīme netika atrasta", "emoji_button.objects": "Objekti", "emoji_button.people": "Cilvēki", "emoji_button.recent": "Biežāk lietotie", @@ -150,326 +157,328 @@ "emoji_button.search_results": "Meklēšanas rezultāti", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Ceļošana & Vietas", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Konta darbība ir apturēta", "empty_column.account_timeline": "Šeit ziņojumu nav!", - "empty_column.account_unavailable": "Profile unavailable", - "empty_column.blocks": "Tu neesi vēl nevienu bloķējis.", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", - "empty_column.community": "Lokālā laika līnija ir tukša. :/ Ieraksti kaut ko lai sākas rosība!", - "empty_column.direct": "Tev nav privāto ziņu. Tiklīdz saņemsi tās šeit parādīsies.", - "empty_column.domain_blocks": "Slēpto domēnu vēl nav.", - "empty_column.favourited_statuses": "Tev vēl nav iemīļoto ziņojumu. Kad Tev tādu būs tie šeit parādīsies.", - "empty_column.favourites": "Neviens šo ziņojumu nav pievienojis favorītiem. Kad tādu būs tie šeit parādīsies.", - "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.account_unavailable": "Profils nav pieejams", + "empty_column.blocks": "Patreiz tu neesi nevienu bloķējis.", + "empty_column.bookmarked_statuses": "Patreiz tev nav neviena grāmatzīmēm pievienota ieraksta. Kad tādu pievienosi, tas parādīsies šeit.", + "empty_column.community": "Vietējā ziņu lenta ir tukša. Uzraksti kaut ko publiski, lai viss notiktu!", + "empty_column.direct": "Patrez tev nav privātu ziņu. Tiklīdz tādu nosūtīsi vai saņemsi, tās parādīsies šeit.", + "empty_column.domain_blocks": "Vēl nav neviena bloķēta domēna.", + "empty_column.favourited_statuses": "Patreiz tev nav neviena izceltā ieraksta. Kad kādu izcelsi, tas parādīsies šeit.", + "empty_column.favourites": "Neviens šo ziņojumu vel nav izcēlis. Kad būs, tie parādīsies šeit.", + "empty_column.follow_recommendations": "Šķiet, ka tev nevarēja ģenerēt ieteikumus. Vari mēģināt izmantot meklēšanu, lai meklētu cilvēkus, kurus tu varētu pazīt, vai izpētīt populārākās atsauces.", "empty_column.follow_requests": "Šobrīd neviens nav pieteicies tev sekot. Kad kāds pieteiksies tas parādīsies šeit.", - "empty_column.hashtag": "Ar šo haštagu nekas nav atrodams.", - "empty_column.home": "Tava laika līnija ir tukša! Apmeklē federatīvo laika līniju vai uzmeklē kādu meklētājā lai satiktu citus.", - "empty_column.home.suggestions": "See some suggestions", - "empty_column.list": "Šis saraksts ir tukšs. Kad šī saraksta dalībnieki atjaunos statusu tas parādīsies šeit.", - "empty_column.lists": "Tev nav neviena saraksta. Kad tādu būs tie parādīsies šeit.", - "empty_column.mutes": "Tu neesi nevienu apklusinājis.", - "empty_column.notifications": "Tev nav paziņojumu. Iesaisties sarunās ar citiem.", - "empty_column.public": "Šeit nekā nav, tukšums! Ieraksti kaut ko publiski, vai uzmeklē un seko kādam no citas instances", - "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", - "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", - "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", - "errors.unexpected_crash.report_issue": "Report issue", - "follow_recommendations.done": "Done", - "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", - "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", + "empty_column.hashtag": "Ar šo tēmturi nekas nav atrodams.", + "empty_column.home": "Tava vietējā ziņu lenta ir tukša! Lai to aizpildītu, piesekojies vairāk cilvēkiem. {suggestions}", + "empty_column.home.suggestions": "Apskatīt dažus ieteikumus", + "empty_column.list": "Šis saraksts patreiz ir tukšs. Kad šī saraksta dalībnieki publicēs jaunas ziņas, tās parādīsies šeit.", + "empty_column.lists": "Patreiz tev nav neviena saraksta. Kad tādu izveidosi, tas parādīsies šeit.", + "empty_column.mutes": "Neviens lietotājs vēl nav apklusināts.", + "empty_column.notifications": "Tev vēl nav paziņojumu. Kad citi cilvēki ar tevi mijiedarbosies, tu to redzēsi šeit.", + "empty_column.public": "Šeit vēl nekā nav! Ieraksti ko publiski vai sāc sekot lietotājiem no citiem serveriem, lai veidotu saturu", + "error.unexpected_crash.explanation": "Koda kļūdas vai pārlūkprogrammas saderības problēmas dēļ šo lapu nevarēja parādīt pareizi.", + "error.unexpected_crash.explanation_addons": "Šo lapu nevarēja parādīt pareizi. Šo kļūdu, iespējams, izraisīja pārlūkprogrammas papildinājums vai automātiskās tulkošanas rīki.", + "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai vietējo lietotni.", + "error.unexpected_crash.next_steps_addons": "Mēģini tos atspējot un atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai vietējo lietotni.", + "errors.unexpected_crash.copy_stacktrace": "Iekopēt starpliktuvē", + "errors.unexpected_crash.report_issue": "Ziņot par problēmu", + "follow_recommendations.done": "Izpildīts", + "follow_recommendations.heading": "Seko cilvēkiem, no kuriem vēlies redzēt ziņas! Šeit ir daži ieteikumi.", + "follow_recommendations.lead": "Ziņas no cilvēkiem, kuriem seko, mājas plūsmā tiks parādītas hronoloģiskā secībā. Nebaidies kļūdīties, tu tikpat viegli vari pārtraukt sekot cilvēkiem jebkurā laikā!", "follow_request.authorize": "Autorizēt", "follow_request.reject": "Noraidīt", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", - "getting_started.developers": "Developers", - "getting_started.directory": "Profile directory", - "getting_started.documentation": "Documentation", - "getting_started.heading": "Getting started", - "getting_started.invite": "Invite people", - "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", - "getting_started.security": "Security", - "getting_started.terms": "Terms of service", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.basic": "Basic", - "home.column_settings.show_reblogs": "Show boosts", - "home.column_settings.show_replies": "Show replies", - "home.hide_announcements": "Hide announcements", - "home.show_announcements": "Show announcements", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", - "keyboard_shortcuts.column": "to focus a status in one of the columns", - "keyboard_shortcuts.compose": "to focus the compose textarea", - "keyboard_shortcuts.description": "Description", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "to move down in the list", - "keyboard_shortcuts.enter": "to open status", - "keyboard_shortcuts.favourite": "to favourite", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "to open home timeline", - "keyboard_shortcuts.hotkey": "Hotkey", - "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.open_media": "to open media", - "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", - "keyboard_shortcuts.spoilers": "to show/hide CW field", - "keyboard_shortcuts.start": "to open \"get started\" column", - "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new toot", - "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", - "keyboard_shortcuts.up": "to move up in the list", - "lightbox.close": "Close", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", - "lightbox.next": "Next", - "lightbox.previous": "Previous", - "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", - "lists.edit": "Edit list", - "lists.edit.submit": "Change title", - "lists.new.create": "Add list", - "lists.new.title_placeholder": "New list title", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", - "lists.replies_policy.title": "Show replies to:", - "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", - "load_pending": "{count, plural, one {# new item} other {# new items}}", - "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", - "missing_indicator.label": "Not found", - "missing_indicator.sublabel": "This resource could not be found", - "mute_modal.duration": "Duration", - "mute_modal.hide_notifications": "Hide notifications from this user?", - "mute_modal.indefinite": "Indefinite", - "navigation_bar.apps": "Mobile apps", - "navigation_bar.blocks": "Blocked users", - "navigation_bar.bookmarks": "Bookmarks", - "navigation_bar.community_timeline": "Local timeline", - "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", - "navigation_bar.edit_profile": "Edit profile", - "navigation_bar.favourites": "Favourites", - "navigation_bar.filters": "Muted words", - "navigation_bar.follow_requests": "Follow requests", - "navigation_bar.follows_and_followers": "Follows and followers", - "navigation_bar.info": "About this instance", - "navigation_bar.keyboard_shortcuts": "Hotkeys", - "navigation_bar.lists": "Lists", - "navigation_bar.logout": "Logout", - "navigation_bar.mutes": "Muted users", - "navigation_bar.personal": "Personal", - "navigation_bar.pins": "Pinned toots", - "navigation_bar.preferences": "Preferences", - "navigation_bar.public_timeline": "Federated timeline", - "navigation_bar.security": "Security", - "notification.favourite": "{name} favourited your status", - "notification.follow": "{name} followed you", - "notification.follow_request": "{name} has requested to follow you", - "notification.mention": "{name} mentioned you", - "notification.own_poll": "Your poll has ended", - "notification.poll": "A poll you have voted in has ended", - "notification.reblog": "{name} boosted your status", - "notification.status": "{name} just posted", - "notifications.clear": "Clear notifications", - "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", - "notifications.column_settings.alert": "Desktop notifications", - "notifications.column_settings.favourite": "Favourites:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", - "notifications.column_settings.follow": "New followers:", - "notifications.column_settings.follow_request": "New follow requests:", - "notifications.column_settings.mention": "Mentions:", - "notifications.column_settings.poll": "Poll results:", - "notifications.column_settings.push": "Push notifications", - "notifications.column_settings.reblog": "Boosts:", - "notifications.column_settings.show": "Show in column", - "notifications.column_settings.sound": "Play sound", - "notifications.column_settings.status": "New toots:", - "notifications.column_settings.unread_markers.category": "Unread notification markers", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", - "notifications.filter.statuses": "Updates from people you follow", - "notifications.grant_permission": "Grant permission.", - "notifications.group": "{count} notifications", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", - "poll.closed": "Closed", - "poll.refresh": "Refresh", - "poll.total_people": "{count, plural, one {# person} other {# people}}", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll.voted": "You voted for this answer", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", - "privacy.change": "Adjust status privacy", - "privacy.direct.long": "Post to mentioned users only", - "privacy.direct.short": "Direct", - "privacy.private.long": "Post to followers only", - "privacy.private.short": "Followers-only", - "privacy.public.long": "Post to public timelines", - "privacy.public.short": "Public", - "privacy.unlisted.long": "Do not show in public timelines", - "privacy.unlisted.short": "Unlisted", - "refresh": "Refresh", - "regeneration_indicator.label": "Loading…", - "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "follow_requests.unlocked_explanation": "Lai gan tavs konts nav bloķēts, {domain} darbinieki iedomājās, ka, iespējams, vēlēsies pārskatīt pieprasījumus no šiem kontiem.", + "generic.saved": "Saglabāts", + "getting_started.developers": "Izstrādātāji", + "getting_started.directory": "Profila direktorija", + "getting_started.documentation": "Dokumentācija", + "getting_started.heading": "Darba sākšana", + "getting_started.invite": "Uzaiciniet cilvēkus", + "getting_started.open_source_notice": "Mastodon ir atvērtā koda programmatūra. Tu vari dot savu ieguldījumu vai arī ziņot par problēmām {github}.", + "getting_started.security": "Konta iestatījumi", + "getting_started.terms": "Pakalpojuma noteikumi", + "hashtag.column_header.tag_mode.all": "un {additional}", + "hashtag.column_header.tag_mode.any": "vai {additional}", + "hashtag.column_header.tag_mode.none": "bez {additional}", + "hashtag.column_settings.select.no_options_message": "Ieteikumi netika atrasti", + "hashtag.column_settings.select.placeholder": "Ievadīt mirkļbirkas…", + "hashtag.column_settings.tag_mode.all": "Visi no šiem", + "hashtag.column_settings.tag_mode.any": "Kāds no šiem", + "hashtag.column_settings.tag_mode.none": "Neviens no šiem", + "hashtag.column_settings.tag_toggle": "Iekļaut šai kolonnai papildu tagus", + "home.column_settings.basic": "Pamata", + "home.column_settings.show_reblogs": "Rādīt palielinājumus", + "home.column_settings.show_replies": "Rādīt atbildes", + "home.hide_announcements": "Slēpt paziņojumus", + "home.show_announcements": "Rādīt paziņojumus", + "intervals.full.days": "{number, plural, one {# diena} other {# dienas}}", + "intervals.full.hours": "{number, plural, one {# stunda} other {# stundas}}", + "intervals.full.minutes": "{number, plural, one {# minūte} other {# minūtes}}", + "keyboard_shortcuts.back": "Pāriet atpakaļ", + "keyboard_shortcuts.blocked": "Atvērt bloķēto lietotāju sarakstu", + "keyboard_shortcuts.boost": "Palielināt ziņu", + "keyboard_shortcuts.column": "Fokusēt kolonnu", + "keyboard_shortcuts.compose": "Fokusēt veidojamā teksta lauku", + "keyboard_shortcuts.description": "Apraksts", + "keyboard_shortcuts.direct": "Atvērt privāto ziņojumu kolonnu", + "keyboard_shortcuts.down": "Pārvietot sarakstā uz leju", + "keyboard_shortcuts.enter": "Atvērt ziņu", + "keyboard_shortcuts.favourite": "Pievienot izlasei", + "keyboard_shortcuts.favourites": "Atvērt izlašu sarakstu", + "keyboard_shortcuts.federated": "Atvērt apvienoto ziņu lenti", + "keyboard_shortcuts.heading": "Klaviatūras saīsnes", + "keyboard_shortcuts.home": "Atvērt vietējo ziņu lenti", + "keyboard_shortcuts.hotkey": "Ātrais taustiņš", + "keyboard_shortcuts.legend": "Parādīt šo leģendu", + "keyboard_shortcuts.local": "Atvērt vietējo ziņu lenti", + "keyboard_shortcuts.mention": "Minējuma autors", + "keyboard_shortcuts.muted": "Atvērt apklusināto lietotāju sarakstu", + "keyboard_shortcuts.my_profile": "Atvērt manu profilu", + "keyboard_shortcuts.notifications": "Atvērt paziņojumu kolonnu", + "keyboard_shortcuts.open_media": "Atvērt mediju", + "keyboard_shortcuts.pinned": "Atvērt piesprausto ziņu sarakstu", + "keyboard_shortcuts.profile": "Atvērt autora profilu", + "keyboard_shortcuts.reply": "Atbildēt", + "keyboard_shortcuts.requests": "Atvērt sekošanas pieprasījumu sarakstu", + "keyboard_shortcuts.search": "Fokusēt meklēšanas joslu", + "keyboard_shortcuts.spoilers": "Rādīt/slēpt CW lauku", + "keyboard_shortcuts.start": "Atvērt kolonnu “Darba sākšana”", + "keyboard_shortcuts.toggle_hidden": "Rādīt/slēpt tekstu aiz CW", + "keyboard_shortcuts.toggle_sensitivity": "Rādīt/slēpt mediju", + "keyboard_shortcuts.toot": "Sākt jaunu ziņu", + "keyboard_shortcuts.unfocus": "Atfokusēt teksta veidošanu/meklēšanu", + "keyboard_shortcuts.up": "Pārvietot sarakstā uz augšu", + "lightbox.close": "Aizvērt", + "lightbox.compress": "Saspiest attēla ietvaru", + "lightbox.expand": "Paplašināt attēla ietvaru", + "lightbox.next": "Tālāk", + "lightbox.previous": "Iepriekš", + "lists.account.add": "Pievienot sarakstam", + "lists.account.remove": "Noņemt no saraksta", + "lists.delete": "Dzēst sarakstu", + "lists.edit": "Rediģēt sarakstu", + "lists.edit.submit": "Mainīt virsrakstu", + "lists.new.create": "Pievienot sarakstu", + "lists.new.title_placeholder": "Jaunais saraksta nosaukums", + "lists.replies_policy.followed": "Jebkuram lietotājam, kuram seko", + "lists.replies_policy.list": "Saraksta dalībnieki", + "lists.replies_policy.none": "Nevienam", + "lists.replies_policy.title": "Rādīt atbildes:", + "lists.search": "Meklēt starp cilvēkiem, kuriem tu seko", + "lists.subheading": "Tavi saraksti", + "load_pending": "{count, plural, one {# jauna lieta} other {# jaunas lietas}}", + "loading_indicator.label": "Ielādē...", + "media_gallery.toggle_visible": "{number, plural, one {Slēpt # attēlu} other {Slēpt # attēlus}}", + "missing_indicator.label": "Nav atrasts", + "missing_indicator.sublabel": "Šo resursu nevarēja atrast", + "mute_modal.duration": "Ilgums", + "mute_modal.hide_notifications": "Slēpt paziņojumus no šī lietotāja?", + "mute_modal.indefinite": "Nenoteikts", + "navigation_bar.apps": "Mobilās lietotnes", + "navigation_bar.blocks": "Bloķētie lietotāji", + "navigation_bar.bookmarks": "Grāmatzīmes", + "navigation_bar.community_timeline": "Vietējā ziņu lenta", + "navigation_bar.compose": "Veidot jaunu ziņu", + "navigation_bar.direct": "Privātās ziņas", + "navigation_bar.discover": "Atklāt", + "navigation_bar.domain_blocks": "Bloķētie domēni", + "navigation_bar.edit_profile": "Rediģēt profilu", + "navigation_bar.favourites": "Izlases", + "navigation_bar.filters": "Klusināti vārdi", + "navigation_bar.follow_requests": "Sekošanas pieprasījumi", + "navigation_bar.follows_and_followers": "Man seko un sekotāji", + "navigation_bar.info": "Par šo serveri", + "navigation_bar.keyboard_shortcuts": "Ātrie taustiņi", + "navigation_bar.lists": "Saraksti", + "navigation_bar.logout": "Iziet", + "navigation_bar.mutes": "Apklusinātie lietotāji", + "navigation_bar.personal": "Personīgi", + "navigation_bar.pins": "Piespraustās ziņas", + "navigation_bar.preferences": "Iestatījumi", + "navigation_bar.public_timeline": "Apvienotā ziņu lenta", + "navigation_bar.security": "Drošība", + "notification.favourite": "{name} izcēla tavu ziņu", + "notification.follow": "{name} uzsāka tev sekot", + "notification.follow_request": "{name} vēlas tev sekot", + "notification.mention": "{name} pieminēja tevi", + "notification.own_poll": "Tava aptauja ir pabeigta", + "notification.poll": "Aprauja, kurā tu piedalījies, ir pabeigta", + "notification.reblog": "{name} paaugstināja tavu ziņu", + "notification.status": "{name} tikko publicēja", + "notifications.clear": "Notīrīt paziņojumus", + "notifications.clear_confirmation": "Vai tiešām vēlies neatgriezeniski notīrīt visus savus paziņojumus?", + "notifications.column_settings.alert": "Darbvirsmas paziņojumi", + "notifications.column_settings.favourite": "Izlases:", + "notifications.column_settings.filter_bar.advanced": "Rādīt visas kategorijas", + "notifications.column_settings.filter_bar.category": "Ātro filtru josla", + "notifications.column_settings.filter_bar.show": "Parādīt", + "notifications.column_settings.follow": "Jauni sekotāji:", + "notifications.column_settings.follow_request": "Jauni sekotāju pieprasījumi:", + "notifications.column_settings.mention": "Pieminējumi:", + "notifications.column_settings.poll": "Aptaujas rezultāti:", + "notifications.column_settings.push": "Uznirstošie paziņojumi", + "notifications.column_settings.reblog": "Palielinājumi:", + "notifications.column_settings.show": "Rādīt kolonnā", + "notifications.column_settings.sound": "Atskaņot skaņu", + "notifications.column_settings.status": "Jaunas ziņas:", + "notifications.column_settings.unread_markers.category": "Nelasīto paziņojumu marķieri", + "notifications.filter.all": "Visi", + "notifications.filter.boosts": "Palielinājumi", + "notifications.filter.favourites": "Izlases", + "notifications.filter.follows": "Seko", + "notifications.filter.mentions": "Pieminējumi", + "notifications.filter.polls": "Aptaujas rezultāti", + "notifications.filter.statuses": "Jaunumi no cilvēkiem, kuriem tu seko", + "notifications.grant_permission": "Piešķirt atļauju.", + "notifications.group": "{count} paziņojumi", + "notifications.mark_as_read": "Atzīmēt katru paziņojumu kā izlasītu", + "notifications.permission_denied": "Darbvirsmas paziņojumi nav pieejami, jo iepriekš tika noraidīts pārlūka atļauju pieprasījums", + "notifications.permission_denied_alert": "Darbvirsmas paziņojumus nevar iespējot, jo pārlūkprogrammai atļauja tika iepriekš atteikta", + "notifications.permission_required": "Darbvirsmas paziņojumi nav pieejami, jo nav piešķirta nepieciešamā atļauja.", + "notifications_permission_banner.enable": "Iespējot darbvirsmas paziņojumus", + "notifications_permission_banner.how_to_control": "Lai saņemtu paziņojumus, kad Mastodon nav atvērts, iespējo darbvirsmas paziņojumus. Vari precīzi kontrolēt, kāda veida mijiedarbības ģenerē darbvirsmas paziņojumus, izmantojot iepriekš redzamo pogu {icon}, ja tie ir iespējoti.", + "notifications_permission_banner.title": "Nekad nepalaid neko garām", + "picture_in_picture.restore": "Novietot apakšā", + "poll.closed": "Pabeigta", + "poll.refresh": "Atsvaidzināt", + "poll.total_people": "{count, plural, one {# persona} other {# cilvēki}}", + "poll.total_votes": "{count, plural, one {# balsojums} other {# balsojumi}}", + "poll.vote": "Balsot", + "poll.voted": "Tu balsoji par šo atbildi", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", + "poll_button.add_poll": "Pievienot aptauju", + "poll_button.remove_poll": "Noņemt aptauju", + "privacy.change": "Mainīt ziņas privātumu", + "privacy.direct.long": "Redzams tikai pieminētajiem lietotājiem", + "privacy.direct.short": "Tiešs", + "privacy.private.long": "Redzams tikai sekotājiem", + "privacy.private.short": "Tikai sekotājiem", + "privacy.public.long": "Redzams visiem, rāda publiskajās ziņu lentās", + "privacy.public.short": "Publisks", + "privacy.unlisted.long": "Redzams visiem, bet ne publiskajās ziņu lentās", + "privacy.unlisted.short": "Neminētie", + "refresh": "Atsvaidzināt", + "regeneration_indicator.label": "Ielādē…", + "regeneration_indicator.sublabel": "Tiek gatavota tava plūsma!", "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", - "relative_time.just_now": "now", + "relative_time.hours": "{number}st", + "relative_time.just_now": "tagad", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", - "relative_time.today": "today", - "reply_indicator.cancel": "Cancel", - "report.forward": "Forward to {target}", - "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", - "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", - "report.placeholder": "Additional comments", - "report.submit": "Submit", - "report.target": "Report {target}", - "search.placeholder": "Search", - "search_popout.search_format": "Advanced search format", - "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", - "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", - "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", - "search_popout.tips.user": "user", - "search_results.accounts": "People", - "search_results.hashtags": "Hashtags", - "search_results.statuses": "Toots", - "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", - "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", - "status.block": "Block @{name}", - "status.bookmark": "Bookmark", - "status.cancel_reblog_private": "Unboost", - "status.cannot_reblog": "This post cannot be boosted", - "status.copy": "Copy link to status", - "status.delete": "Delete", - "status.detailed_status": "Detailed conversation view", - "status.direct": "Direct message @{name}", - "status.embed": "Embed", - "status.favourite": "Favourite", - "status.filtered": "Filtered", - "status.load_more": "Load more", - "status.media_hidden": "Media hidden", - "status.mention": "Mention @{name}", - "status.more": "More", - "status.mute": "Mute @{name}", - "status.mute_conversation": "Mute conversation", - "status.open": "Expand this status", - "status.pin": "Pin on profile", - "status.pinned": "Pinned toot", - "status.read_more": "Read more", - "status.reblog": "Boost", - "status.reblog_private": "Boost with original visibility", - "status.reblogged_by": "{name} boosted", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", - "status.remove_bookmark": "Remove bookmark", - "status.reply": "Reply", - "status.replyAll": "Reply to thread", - "status.report": "Report @{name}", - "status.sensitive_warning": "Sensitive content", - "status.share": "Share", - "status.show_less": "Show less", - "status.show_less_all": "Show less for all", - "status.show_more": "Show more", - "status.show_more_all": "Show more for all", - "status.show_thread": "Show thread", - "status.uncached_media_warning": "Not available", - "status.unmute_conversation": "Unmute conversation", - "status.unpin": "Unpin from profile", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", - "tabs_bar.federated_timeline": "Federated", - "tabs_bar.home": "Home", - "tabs_bar.local_timeline": "Local", - "tabs_bar.notifications": "Notifications", - "tabs_bar.search": "Search", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", - "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", - "trends.trending_now": "Trending now", - "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", - "units.short.billion": "{count}B", + "relative_time.today": "šodien", + "reply_indicator.cancel": "Atcelt", + "report.forward": "Pārsūtīt {target}", + "report.forward_hint": "Konts ir no cita servera. Vai nosūtīt anonimizētu ziņojuma kopiju arī tam?", + "report.hint": "Pārskats tiks nosūtīts tava servera moderatoriem. Tu vari pievienot paskaidrojumu, kādēļ tu ziņo par kontu:", + "report.placeholder": "Papildu komentāri", + "report.submit": "Iesniegt", + "report.target": "Ziņošana par: {target}", + "search.placeholder": "Meklēšana", + "search_popout.search_format": "Paplašināts meklēšanas formāts", + "search_popout.tips.full_text": "Vienkāršs teksts atgriež ziņas, kuras esi rakstījis, iecienījis, paaugstinājis vai pieminējis, kā arī atbilstošie lietotājvārdi, parādāmie vārdi un tēmturi.", + "search_popout.tips.hashtag": "mirkļbirka", + "search_popout.tips.status": "ziņa", + "search_popout.tips.text": "Vienkāršs teksts atgriež atbilstošus parādāmos vārdus, lietotājvārdus un mirkļbirkas", + "search_popout.tips.user": "lietotājs", + "search_results.accounts": "Cilvēki", + "search_results.hashtags": "Mirkļbirkas", + "search_results.statuses": "Ziņas", + "search_results.statuses_fts_disabled": "Šajā Mastodon serverī nav iespējota ziņu meklēšana pēc to satura.", + "search_results.total": "{count, number} {count, plural, one {rezultāts} other {rezultāti}}", + "status.admin_account": "Atvērt @{name} moderēšanas saskarni", + "status.admin_status": "Atvērt šo ziņu moderācijas saskarnē", + "status.block": "Bloķēt @{name}", + "status.bookmark": "Grāmatzīme", + "status.cancel_reblog_private": "Nepaaugstināt", + "status.cannot_reblog": "Nevar paaugstināt ziņu", + "status.copy": "Kopēt saiti uz ziņu", + "status.delete": "Dzēst", + "status.detailed_status": "Detalizēts sarunas skats", + "status.direct": "Privāta ziņa @{name}", + "status.embed": "Iestrādāt", + "status.favourite": "Iecienītā", + "status.filtered": "Filtrēts", + "status.load_more": "Ielādēt vairāk", + "status.media_hidden": "Medijs ir paslēpts", + "status.mention": "Pieminēt @{name}", + "status.more": "Vairāk", + "status.mute": "Apklusināt @{name}", + "status.mute_conversation": "Apklusināt sarunu", + "status.open": "Paplašināt šo ziņu", + "status.pin": "Piespraust profilam", + "status.pinned": "Piespraustā ziņa", + "status.read_more": "Lasīt vairāk", + "status.reblog": "Paaugstināt", + "status.reblog_private": "Paaugstināt ar sākotnējo izskatu", + "status.reblogged_by": "{name} paaugstināts", + "status.reblogs.empty": "Neviens šo ziņojumu vel nav paaugstinājis. Kad būs, tie parādīsies šeit.", + "status.redraft": "Dzēst un pārrakstīt", + "status.remove_bookmark": "Noņemt grāmatzīmi", + "status.reply": "Atbildēt", + "status.replyAll": "Atbildēt uz tematu", + "status.report": "Atskaite @{name}", + "status.sensitive_warning": "Sensitīvs saturs", + "status.share": "Kopīgot", + "status.show_less": "Rādīt mazāk", + "status.show_less_all": "Rādīt mazāk visiem", + "status.show_more": "Rādīt vairāk", + "status.show_more_all": "Rādīt vairāk visiem", + "status.show_thread": "Rādīt tematu", + "status.uncached_media_warning": "Nav pieejams", + "status.unmute_conversation": "Atvērt sarunu", + "status.unpin": "Noņemt no profila", + "suggestions.dismiss": "Noraidīt ieteikumu", + "suggestions.header": "Jūs varētu interesēt arī…", + "tabs_bar.federated_timeline": "Apvienotā", + "tabs_bar.home": "Sākums", + "tabs_bar.local_timeline": "Vietējā", + "tabs_bar.notifications": "Paziņojumi", + "tabs_bar.search": "Meklēt", + "time_remaining.days": "Atlikušas {number, plural, one {# diena} other {# dienas}}", + "time_remaining.hours": "Atlikušas {number, plural, one {# stunda} other {# stundas}}", + "time_remaining.minutes": "Atlikušas {number, plural, one {# minūte} other {# minūtes}}", + "time_remaining.moments": "Atlikuši daži mirkļi", + "time_remaining.seconds": "Atlikušas {number, plural, one {# sekunde} other {# sekundes}}", + "timeline_hint.remote_resource_not_displayed": "{resource} no citiem serveriem nav parādīti.", + "timeline_hint.resources.followers": "Sekotāji", + "timeline_hint.resources.follows": "Seko", + "timeline_hint.resources.statuses": "Vecākas ziņas", + "trends.counter_by_accounts": "Sarunājas {count, plural, one {{counter} persona} other {{counter} cilvēki}}", + "trends.trending_now": "Šobrīd tendences", + "ui.beforeunload": "Ja pametīsit Mastodonu, jūsu melnraksts tiks zaudēts.", + "units.short.billion": "{count}M", "units.short.million": "{count}M", - "units.short.thousand": "{count}K", - "upload_area.title": "Drag & drop to upload", - "upload_button.label": "Add images, a video or an audio file", - "upload_error.limit": "File upload limit exceeded.", - "upload_error.poll": "File upload not allowed with polls.", - "upload_form.audio_description": "Describe for people with hearing loss", - "upload_form.description": "Describe for the visually impaired", - "upload_form.edit": "Edit", - "upload_form.thumbnail": "Change thumbnail", - "upload_form.undo": "Delete", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", - "upload_modal.analyzing_picture": "Analyzing picture…", - "upload_modal.apply": "Apply", - "upload_modal.choose_image": "Choose image", - "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", - "upload_modal.detect_text": "Detect text from picture", - "upload_modal.edit_media": "Edit media", - "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", - "upload_modal.preparing_ocr": "Preparing OCR…", - "upload_modal.preview_label": "Preview ({ratio})", - "upload_progress.label": "Uploading…", - "video.close": "Close video", - "video.download": "Download file", - "video.exit_fullscreen": "Exit full screen", - "video.expand": "Expand video", - "video.fullscreen": "Full screen", - "video.hide": "Hide video", - "video.mute": "Mute sound", - "video.pause": "Pause", - "video.play": "Play", - "video.unmute": "Unmute sound" + "units.short.thousand": "{count}Tk", + "upload_area.title": "Velc un nomet, lai augšupielādētu", + "upload_button.label": "Pievienot bildi, video vai audio datni", + "upload_error.limit": "Sasniegts datņu augšupielādes ierobežojums.", + "upload_error.poll": "Datņu augšupielādes aptaujās nav atļautas.", + "upload_form.audio_description": "Aprakstiet cilvēkiem ar dzirdes zudumu", + "upload_form.description": "Aprakstiet vājredzīgajiem", + "upload_form.edit": "Rediģēt", + "upload_form.thumbnail": "Nomainīt sīktēlu", + "upload_form.undo": "Dzēst", + "upload_form.video_description": "Aprakstiet cilvēkiem ar dzirdes vai redzes traucējumiem", + "upload_modal.analyzing_picture": "Analizē attēlu…", + "upload_modal.apply": "Apstiprināt", + "upload_modal.applying": "Applying…", + "upload_modal.choose_image": "Izvēlēties attēlu", + "upload_modal.description_placeholder": "Raibais runcis rīgā ratu rumbā rūc", + "upload_modal.detect_text": "Noteikt tekstu no attēla", + "upload_modal.edit_media": "Rediģēt mediju", + "upload_modal.hint": "Noklikšķiniet vai velciet apli priekšskatījumā, lai izvēlētos fokusa punktu, kas vienmēr būs redzams visos sīktēlos.", + "upload_modal.preparing_ocr": "Sagatavo OCR…", + "upload_modal.preview_label": "Priekšskatīt ({ratio})", + "upload_progress.label": "Augšupielādē...", + "video.close": "Aizvērt video", + "video.download": "Lejupielādēt datni", + "video.exit_fullscreen": "Iziet no pilnekrāna", + "video.expand": "Paplašināt video", + "video.fullscreen": "Pilnekrāns", + "video.hide": "Slēpt video", + "video.mute": "Izslēgt skaņu", + "video.pause": "Pauze", + "video.play": "Atskaņot", + "video.unmute": "Ieslēgt skaņu" } diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index 2e1497f6a..36ea33bb8 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -47,11 +47,16 @@ "account.unmute": "Зачути го @{name}", "account.unmute_notifications": "Исклучи известувања од @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Обидете се повторно после {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "Неочекувана грешка.", "alert.unexpected.title": "Упс!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} неделно", "boost_modal.combo": "Кликни {combo} за да го прескокниш ова нареден пат", "bundle_column_error.body": "Се случи проблем при вчитувањето.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Сигурни сте дека го бришите статусот?", "confirmations.delete_list.confirm": "Избриши", "confirmations.delete_list.message": "Дали сте сигурни дека сакате да го избришете списоков?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Сокриј цел домеин", "confirmations.domain_block.message": "Дали скроз сте сигурни дека ќе блокирате сѐ од {domain}? Во повеќето случаеви неколку таргетирани блокирања или заќутувања се доволни и предложени. Нема да ја видите содржината од тој домеин во никој јавен времеплов или вашите нотификации. Вашите следбеници од тој домеин ќе бидат остранети.", "confirmations.logout.confirm": "Одјави се", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# глас} other {# гласа}}", "poll.vote": "Гласај", "poll.voted": "Вие гласавте за овој одговор", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Додадете нова анкета", "poll_button.remove_poll": "Избришете анкета", "privacy.change": "Штеловај статус на приватност", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 488484290..cb320a661 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -47,11 +47,16 @@ "account.unmute": "നിശ്ശബ്ദമാക്കുന്നത് നിർത്തുക @{name}", "account.unmute_notifications": "@{name} യിൽ നിന്നുള്ള അറിയിപ്പുകൾ പ്രസിദ്ധപ്പെടുത്തുക", "account_note.placeholder": "കുറിപ്പ് ചേർക്കാൻ ക്ലിക്കുചെയ്യുക", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "{retry_time, time, medium} നു ശേഷം വീണ്ടും ശ്രമിക്കുക.", "alert.rate_limited.title": "തോത് പരിമിതപ്പെടുത്തിയിരിക്കുന്നു", "alert.unexpected.message": "അപ്രതീക്ഷിതമായി എന്തോ സംഭവിച്ചു.", "alert.unexpected.title": "ശ്ശോ!", "announcement.announcement": "അറിയിപ്പ്", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "ആഴ്ച തോറും {count}", "boost_modal.combo": "അടുത്ത തവണ ഇത് ഒഴിവാക്കുവാൻ {combo} ഞെക്കാവുന്നതാണ്", "bundle_column_error.body": "ഈ ഘടകം പ്രദശിപ്പിക്കുമ്പോൾ എന്തോ കുഴപ്പം സംഭവിച്ചു.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "ഈ ടൂട്ട് ഇല്ലാതാക്കണം എന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", "confirmations.delete_list.confirm": "മായ്ക്കുക", "confirmations.delete_list.message": "ഈ പട്ടിക എന്നെന്നേക്കുമായി നീക്കം ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "മുഴുവൻ ഡൊമെയ്‌നും തടയുക", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "പുറത്തുകടക്കുക", @@ -176,7 +183,7 @@ "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "പ്രശ്നം അറിയിക്കുക", - "follow_recommendations.done": "Done", + "follow_recommendations.done": "പൂര്‍ത്തിയായീ", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "ചുമതലപ്പെടുത്തുക", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "വോട്ട് ചെയ്യുക", "poll.voted": "ഈ ഉത്തരത്തിനായി നിങ്ങൾ വോട്ട് ചെയ്തു", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "ഒരു പോൾ ചേർക്കുക", "poll_button.remove_poll": "പോൾ നീക്കംചെയ്യുക", "privacy.change": "ടൂട്ട് സ്വകാര്യത ക്രമീകരിക്കുക", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "ചിത്രം വിശകലനം ചെയ്യുന്നു…", "upload_modal.apply": "പ്രയോഗിക്കുക", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "ചിത്രം തിരഞ്ഞെടുക്കുക", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "ചിത്രത്തിൽ നിന്ന് വാചകം കണ്ടെത്തുക", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 7fc59119d..979f910ee 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -47,11 +47,16 @@ "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "अरेरे!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} प्रतिसप्ताह", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "हा घटक लोड करतांना काहीतरी चुकले आहे.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "हे स्टेटस तुम्हाला नक्की हटवायचंय?", "confirmations.delete_list.confirm": "हटवा", "confirmations.delete_list.message": "ही यादी तुम्हाला नक्की कायमची हटवायचीय?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "संपूर्ण डोमेन लपवा", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "Log out", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 56cf7ab10..50526f74c 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -4,15 +4,15 @@ "account.badges.bot": "Bot", "account.badges.group": "Kumpulan", "account.block": "Sekat @{name}", - "account.block_domain": "Hide everything from {domain}", + "account.block_domain": "Sekat domain {domain}", "account.blocked": "Disekat", - "account.browse_more_on_origin_server": "Layari selebihnya di profil original", - "account.cancel_follow_request": "Batalkan permintaan mengikuti", - "account.direct": "Mesej langsung @{name}", - "account.disable_notifications": "Berhenti memaklumi saya apabila @{name} mengirim", - "account.domain_blocked": "Domain hidden", + "account.browse_more_on_origin_server": "Layari selebihnya di profil asal", + "account.cancel_follow_request": "Batalkan permintaan ikutan", + "account.direct": "Mesej terus @{name}", + "account.disable_notifications": "Berhenti memaklumi saya apabila @{name} mengirim hantaran", + "account.domain_blocked": "Domain disekat", "account.edit_profile": "Sunting profil", - "account.enable_notifications": "Maklumi saya apabila @{name} mengirim", + "account.enable_notifications": "Maklumi saya apabila @{name} mengirim hantaran", "account.endorse": "Tampilkan di profil", "account.follow": "Ikuti", "account.followers": "Pengikut", @@ -22,7 +22,7 @@ "account.follows.empty": "Pengguna ini belum mengikuti sesiapa.", "account.follows_you": "Mengikuti anda", "account.hide_reblogs": "Sembunyikan galakan daripada @{name}", - "account.joined": "Joined {date}", + "account.joined": "Sertai pada {date}", "account.last_status": "Terakhir aktif", "account.link_verified_on": "Pemilikan pautan ini telah disemak pada {date}", "account.locked_info": "Status privasi akaun ini dikunci. Pemiliknya menyaring sendiri siapa yang boleh mengikutinya.", @@ -33,64 +33,69 @@ "account.mute_notifications": "Bisukan pemberitahuan daripada @{name}", "account.muted": "Dibisukan", "account.never_active": "Jangan sesekali", - "account.posts": "Toots", - "account.posts_with_replies": "Toots and replies", + "account.posts": "Hantaran", + "account.posts_with_replies": "Hantaran dan balasan", "account.report": "Laporkan @{name}", - "account.requested": "Awaiting approval", + "account.requested": "Menunggu kelulusan. Klik untuk batalkan permintaan ikutan", "account.share": "Kongsi profil @{name}", "account.show_reblogs": "Tunjukkan galakan daripada @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} Hantaran} other {{counter} Hantaran}}", "account.unblock": "Nyahsekat @{name}", - "account.unblock_domain": "Unhide {domain}", + "account.unblock_domain": "Nyahsekat domain {domain}", "account.unendorse": "Jangan tampilkan di profil", "account.unfollow": "Nyahikut", "account.unmute": "Nyahbisukan @{name}", "account.unmute_notifications": "Nyahbisukan pemberitahuan daripada @{name}", - "account_note.placeholder": "Click to add a note", + "account_note.placeholder": "Klik untuk tambah catatan", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Sila cuba semula selepas {retry_time, time, medium}.", "alert.rate_limited.title": "Kadar terhad", "alert.unexpected.message": "Berlaku ralat di luar jangkaan.", "alert.unexpected.title": "Alamak!", "announcement.announcement": "Pengumuman", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} seminggu", - "boost_modal.combo": "Anda boleh mengetik {combo} untuk melangkauinya lain kali", + "boost_modal.combo": "Anda boleh tekan {combo} untuk melangkauinya pada waktu lain", "bundle_column_error.body": "Terdapat kesilapan ketika memuatkan komponen ini.", "bundle_column_error.retry": "Cuba lagi", - "bundle_column_error.title": "Masalah rangkaian", + "bundle_column_error.title": "Ralat rangkaian", "bundle_modal_error.close": "Tutup", "bundle_modal_error.message": "Ada yang tidak kena semasa memuatkan komponen ini.", "bundle_modal_error.retry": "Cuba lagi", "column.blocks": "Pengguna yang disekat", - "column.bookmarks": "Penanda buku", + "column.bookmarks": "Tanda buku", "column.community": "Garis masa tempatan", - "column.direct": "Mesej langsung", - "column.directory": "Buka profil", - "column.domain_blocks": "Hidden domains", + "column.direct": "Mesej terus", + "column.directory": "Layari profil", + "column.domain_blocks": "Domain disekat", "column.favourites": "Kegemaran", "column.follow_requests": "Permintaan ikutan", "column.home": "Laman Utama", "column.lists": "Senarai", "column.mutes": "Pengguna yang dibisukan", "column.notifications": "Pemberitahuan", - "column.pins": "Pinned toot", + "column.pins": "Hantaran disemat", "column.public": "Garis masa bersekutu", "column_back_button.label": "Kembali", "column_header.hide_settings": "Sembunyikan tetapan", - "column_header.moveLeft_settings": "Alih lajur ke kiri", - "column_header.moveRight_settings": "Alih lajur ke kanan", + "column_header.moveLeft_settings": "Pindah lajur ke kiri", + "column_header.moveRight_settings": "Pindah lajur ke kanan", "column_header.pin": "Sematkan", "column_header.show_settings": "Tunjukkan tetapan", "column_header.unpin": "Nyahsemat", "column_subheading.settings": "Tetapan", "community.column_settings.local_only": "Tempatan sahaja", - "community.column_settings.media_only": "Media only", + "community.column_settings.media_only": "Media sahaja", "community.column_settings.remote_only": "Jauh sahaja", - "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning": "Hantaran ini hanya akan dihantar kepada pengguna yang disebut.", "compose_form.direct_message_warning_learn_more": "Ketahui lebih lanjut", - "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", - "compose_form.lock_disclaimer": "Akaun anda tidak {locked}. Sesiapapun boleh mengikuti anda untuk melihat kiriman pengikut-sahaja anda.", + "compose_form.hashtag_warning": "Hantaran ini tidak akan disenaraikan di bawah mana-mana tanda pagar kerana ia tidak tersenarai. Hanya hantaran awam sahaja boleh dicari menggunakan tanda pagar.", + "compose_form.lock_disclaimer": "Akaun anda tidak {locked}. Sesiapa pun boleh mengikuti anda untuk melihat hantaran pengikut-sahaja anda.", "compose_form.lock_disclaimer.lock": "dikunci", - "compose_form.placeholder": "What is on your mind?", + "compose_form.placeholder": "Apakah yang sedang anda fikirkan?", "compose_form.poll.add_option": "Tambah pilihan", "compose_form.poll.duration": "Tempoh undian", "compose_form.poll.option_placeholder": "Pilihan {number}", @@ -102,30 +107,32 @@ "compose_form.sensitive.hide": "{count, plural, one {Tandakan media sbg sensitif} other {Tandakan media sbg sensitif}}", "compose_form.sensitive.marked": "{count, plural, one {Media telah ditanda sbg sensitif} other {Media telah ditanda sbg sensitif}}", "compose_form.sensitive.unmarked": "{count, plural, one {Media tidak ditanda sbg sensitif} other {Media tidak ditanda sbg sensitif}}", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler.marked": "Buang amaran kandungan", + "compose_form.spoiler.unmarked": "Tambah amaran kandungan", "compose_form.spoiler_placeholder": "Tulis amaran anda di sini", "confirmation_modal.cancel": "Batal", "confirmations.block.block_and_report": "Sekat & Lapor", "confirmations.block.confirm": "Sekat", - "confirmations.block.message": "Anda pasti mahu menyekat {name}?", + "confirmations.block.message": "Adakah anda pasti anda ingin menyekat {name}?", "confirmations.delete.confirm": "Padam", - "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete.message": "Adakah anda pasti anda ingin memadam hantaran ini?", "confirmations.delete_list.confirm": "Padam", - "confirmations.delete_list.message": "Anda pasti mahu memadam senarai ini selama-lamanya?", - "confirmations.domain_block.confirm": "Hide entire domain", - "confirmations.domain_block.message": "Anda betul-betul, sungguh-sungguh pasti mahu menyekat keseluruhan {domain}? Biasanya sekatan dan bisuan tersasar sudah memadai dan baik. Anda tidak akan dapat melihat kandungan dari 'domain' di sebarang garis masa awam mahupun pemberitahuan anda. Pengikut anda dari 'domain' itu juga akan dikeluarkan.", + "confirmations.delete_list.message": "Adakah anda pasti anda ingin memadam senarai ini secara kekal?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", + "confirmations.domain_block.confirm": "Sekat keseluruhan domain", + "confirmations.domain_block.message": "Adakah anda betul-betul, sungguh-sungguh pasti anda ingin menyekat keseluruhan {domain}? Selalunya, beberapa sekatan atau pembisuan tersasar sudah memadai dan lebih diutamakan. Anda tidak akan nampak kandungan daripada domain tersebut di mana-mana garis masa awam mahupun pemberitahuan anda. Pengikut anda daripada domain tersebut juga akan dibuang.", "confirmations.logout.confirm": "Log keluar", - "confirmations.logout.message": "Anda pasti mahu log keluar?", + "confirmations.logout.message": "Adakah anda pasti anda ingin log keluar?", "confirmations.mute.confirm": "Bisukan", - "confirmations.mute.explanation": "Ini akan menyembunyikan kiriman-kiriman daripada mereka, juga kiriman yang menyebut mereka, tapi masih membenarkan mereka melihat kiriman-kiriman anda dan mengikuti anda.", - "confirmations.mute.message": "Anda pasti mahu membisukan {name}?", + "confirmations.mute.explanation": "Ini akan menyembunyikan hantaran daripada mereka dan juga hantaran yang menyebut mereka, tetapi ia masih membenarkan mereka melihat hantaran anda dan mengikuti anda.", + "confirmations.mute.message": "Adakah anda pasti anda ingin membisukan {name}?", "confirmations.redraft.confirm": "Padam & rangka semula", - "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.redraft.message": "Adakah anda pasti anda ingin memadam hantaran ini dan merangkanya semula? Kegemaran dan galakan akan hilang, dan balasan ke hantaran asal akan menjadi yatim.", "confirmations.reply.confirm": "Balas", - "confirmations.reply.message": "Membalas sekarang akan menghapuskan mesej yang anda sedang karang. Anda pasti mahu teruskan?", + "confirmations.reply.message": "Membalas sekarang akan menulis ganti mesej yang anda sedang karang. Adakah anda pasti anda ingin teruskan?", "confirmations.unfollow.confirm": "Nyahikut", - "confirmations.unfollow.message": "Anda pasti mahu nyahikuti {name}?", + "confirmations.unfollow.message": "Adakah anda pasti anda ingin nyahikuti {name}?", "conversation.delete": "Padam perbualan", "conversation.mark_as_read": "Tanda sudah dibaca", "conversation.open": "Lihat perbualan", @@ -134,15 +141,15 @@ "directory.local": "Dari {domain} sahaja", "directory.new_arrivals": "Ketibaan baharu", "directory.recently_active": "Aktif baru-baru ini", - "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.instructions": "Benam hantaran ini di laman sesawang anda dengan menyalin kod berikut.", "embed.preview": "Begini rupanya nanti:", "emoji_button.activity": "Aktiviti", - "emoji_button.custom": "Tersendiri", + "emoji_button.custom": "Tersuai", "emoji_button.flags": "Bendera", "emoji_button.food": "Makanan & Minuman", "emoji_button.label": "Masukkan emoji", - "emoji_button.nature": "Alam Semulajadi", - "emoji_button.not_found": "Tiada emojo!! (╯°□°)╯︵ ┻━┻", + "emoji_button.nature": "Alam Semula Jadi", + "emoji_button.not_found": "Tiada emoji sepadan dijumpai", "emoji_button.objects": "Objek", "emoji_button.people": "Orang", "emoji_button.recent": "Kerap digunakan", @@ -151,78 +158,78 @@ "emoji_button.symbols": "Simbol", "emoji_button.travel": "Kembara & Tempat", "empty_column.account_suspended": "Akaun digantung", - "empty_column.account_timeline": "No toots here!", + "empty_column.account_timeline": "Tiada hantaran di sini!", "empty_column.account_unavailable": "Profil tidak tersedia", "empty_column.blocks": "Anda belum menyekat sesiapa.", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.bookmarked_statuses": "Anda belum ada hantaran yang ditanda buku. Apabila anda menanda buku sesuatu, ia akan muncul di sini.", "empty_column.community": "Garis masa tempatan kosong. Tulislah secara awam untuk memulakan sesuatu!", - "empty_column.direct": "Anda belum mempunyai mesej langsung. Ia akan terpapar di sini apabila anda menghantar atau menerimanya.", - "empty_column.domain_blocks": "There are no hidden domains yet.", - "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", - "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", - "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.direct": "Anda tidak mempunyai mesej terus. Apabila anda menghantar atau menerimanya, ia akan muncul di sini.", + "empty_column.domain_blocks": "Belum ada domain yang disekat.", + "empty_column.favourited_statuses": "Anda belum ada hantaran yang digemari. Apabila anda menggemari sesuatu, ia akan muncul di sini.", + "empty_column.favourites": "Tiada sesiapa yang menggemari hantaran ini. Apabila ada yang menggemari, ia akan muncul di sini.", + "empty_column.follow_recommendations": "Nampaknya tiada cadangan yang boleh dijana untuk anda. Anda boleh cuba gunakan gelintar untuk mencari orang yang anda mungkin kenal atau jelajahi tanda pagar sohor kini.", "empty_column.follow_requests": "Anda belum mempunyai permintaan ikutan. Ia akan terpapar di sini apabila ada nanti.", - "empty_column.hashtag": "Belum ada apa-apa dengan hashtag ini.", - "empty_column.home": "Garis masa halaman utama anda kosong! Lawati {public} atau lakukan carian untuk bermula dan berjumpa para pengguna lain.", - "empty_column.home.suggestions": "See some suggestions", - "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", - "empty_column.lists": "Anda belum mempunyai sebarang senarai. Ia akan terpapar di sini apabila anda merekanya.", + "empty_column.hashtag": "Belum ada apa-apa dengan tanda pagar ini.", + "empty_column.home": "Garis masa laman utama anda kosong! Ikuti lebih ramai orang untuk mengisinya. {suggestions}", + "empty_column.home.suggestions": "Lihat cadangan", + "empty_column.list": "Tiada apa-apa di senarai ini lagi. Apabila ahli senarai ini menerbitkan hantaran baharu, ia akan dipaparkan di sini.", + "empty_column.lists": "Anda belum ada sebarang senarai. Apabila anda menciptanya, ia akan muncul di sini.", "empty_column.mutes": "Anda belum membisukan sesiapa.", - "empty_column.notifications": "Anda belum ada sebarang pemberitahuan. Berhubunglah dengan yang lain untuk memulakan perbualan.", - "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", - "error.unexpected_crash.explanation": "Disebabkan 'bug' pada kod kami ataupun isu kesesuaian penyemak imbas, halaman ini tidak dapat dipaparkan dengan tepat.", - "error.unexpected_crash.explanation_addons": "Laman ini tidak dapat dipaparkan dengan tepat. Kesilapan ini mungkin berpunca daripada add-on ataupun peralatan terjemahan automatik penyemak imbas.", - "error.unexpected_crash.next_steps": "Cuba segarkan semula halaman. Jika tidak jadi juga, anda boleh menggunakan Mastodon dengan penyemak imbas lain ataupun aplikasi jatinya.", - "error.unexpected_crash.next_steps_addons": "Cuba menyahdayakannya dan segarkan semula halaman. Jika tidak jadi juga, anda boleh menggunakan Mastodon dengan penyemak imbas lain ataupun aplikasi jatinya.", - "errors.unexpected_crash.copy_stacktrace": "Salin 'stacktrace' ke papan klip", + "empty_column.notifications": "Anda belum ada sebarang pemberitahuan. Apabila orang lain berinteraksi dengan anda, ia akan muncul di sini.", + "empty_column.public": "Tiada apa-apa di sini! Tulis sesuatu secara awam, atau ikuti pengguna daripada pelayan lain secara manual untuk mengisinya", + "error.unexpected_crash.explanation": "Disebabkan pepijat dalam kod kami atau masalah keserasian pelayar, halaman ini tidak dapat dipaparkan dengan betulnya.", + "error.unexpected_crash.explanation_addons": "Halaman ini tidak dapat dipaparkan dengan betulnya. Ralat ini mungkin disebabkan oleh pemalam pelayar atau alatan penterjemahan automatik.", + "error.unexpected_crash.next_steps": "Cuba segarkan semula halaman. Jika itu tidak membantu, anda masih boleh menggunakan Mastodon dengan pelayar yang berlainan atau aplikasi natif.", + "error.unexpected_crash.next_steps_addons": "Cuba nyahdaya pemalam dan segarkan semula halaman. Jika itu tidak membantu, anda masih boleh menggunakan Mastodon dengan pelayar yang berlainan atau aplikasi natif.", + "errors.unexpected_crash.copy_stacktrace": "Salin surih tindanan ke papan keratan", "errors.unexpected_crash.report_issue": "Laporkan masalah", "follow_recommendations.done": "Selesai", - "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", - "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", - "follow_request.authorize": "Authorize", - "follow_request.reject": "Reject", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", - "getting_started.developers": "Developers", - "getting_started.directory": "Profile directory", - "getting_started.documentation": "Documentation", - "getting_started.heading": "Getting started", - "getting_started.invite": "Invite people", - "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", - "getting_started.security": "Security", - "getting_started.terms": "Terms of service", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.basic": "Basic", - "home.column_settings.show_reblogs": "Show boosts", - "home.column_settings.show_replies": "Show replies", - "home.hide_announcements": "Hide announcements", - "home.show_announcements": "Show announcements", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "follow_recommendations.heading": "Ikuti orang yang anda ingin lihat hantarannya! Di sini ada beberapa cadangan.", + "follow_recommendations.lead": "Hantaran daripada orang yang anda ikuti akan muncul dalam susunan kronologi di suapan rumah anda. Jangan takut melakukan kesilapan, anda boleh nyahikuti orang dengan mudah pada bila-bila masa!", + "follow_request.authorize": "Benarkan", + "follow_request.reject": "Tolak", + "follow_requests.unlocked_explanation": "Walaupun akaun anda tidak dikunci, kakitangan {domain} merasakan anda mungkin ingin menyemak permintaan ikutan daripada akaun ini secara manual.", + "generic.saved": "Disimpan", + "getting_started.developers": "Pembangun", + "getting_started.directory": "Direktori profil", + "getting_started.documentation": "Pendokumenan", + "getting_started.heading": "Mari bermula", + "getting_started.invite": "Undang orang", + "getting_started.open_source_notice": "Mastodon itu perisian bersumber terbuka. Anda boleh menyumbang atau melaporkan masalah di GitHub menerusi {github}.", + "getting_started.security": "Tetapan akaun", + "getting_started.terms": "Terma perkhidmatan", + "hashtag.column_header.tag_mode.all": "dan {additional}", + "hashtag.column_header.tag_mode.any": "atau {additional}", + "hashtag.column_header.tag_mode.none": "tanpa {additional}", + "hashtag.column_settings.select.no_options_message": "Tiada cadangan dijumpai", + "hashtag.column_settings.select.placeholder": "Masukkan tanda pagar…", + "hashtag.column_settings.tag_mode.all": "Kesemua ini", + "hashtag.column_settings.tag_mode.any": "Mana-mana daripada yang ini", + "hashtag.column_settings.tag_mode.none": "Tiada apa pun daripada yang ini", + "hashtag.column_settings.tag_toggle": "Sertakan tag tambahan untuk lajur ini", + "home.column_settings.basic": "Asas", + "home.column_settings.show_reblogs": "Tunjukkan galakan", + "home.column_settings.show_replies": "Tunjukkan balasan", + "home.hide_announcements": "Sembunyikan pengumuman", + "home.show_announcements": "Tunjukkan pengumuman", + "intervals.full.days": "{number, plural, other {# hari}}", + "intervals.full.hours": "{number, plural, other {# jam}}", + "intervals.full.minutes": "{number, plural, other {# minit}}", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", - "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.column": "Tumpu pada lajur", "keyboard_shortcuts.compose": "to focus the compose textarea", - "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.description": "Keterangan", "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "to move down in the list", - "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.enter": "Buka hantaran", "keyboard_shortcuts.favourite": "to favourite", "keyboard_shortcuts.favourites": "to open favourites list", "keyboard_shortcuts.federated": "to open federated timeline", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.heading": "Pintasan papan kekunci", "keyboard_shortcuts.home": "to open home timeline", - "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.hotkey": "Kekunci pantas", "keyboard_shortcuts.legend": "to display this legend", "keyboard_shortcuts.local": "to open local timeline", "keyboard_shortcuts.mention": "to mention author", @@ -230,25 +237,25 @@ "keyboard_shortcuts.my_profile": "to open your profile", "keyboard_shortcuts.notifications": "to open notifications column", "keyboard_shortcuts.open_media": "to open media", - "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.pinned": "Buka senarai hantaran tersemat", "keyboard_shortcuts.profile": "to open author's profile", "keyboard_shortcuts.reply": "to reply", - "keyboard_shortcuts.requests": "untuk membuka senarai permintaan ikutan", - "keyboard_shortcuts.search": "untuk carian bertumpu", - "keyboard_shortcuts.spoilers": "untuk memapar/menyembunyikan bidang CW", - "keyboard_shortcuts.start": "untuk membuka lajur \"bermula\"", - "keyboard_shortcuts.toggle_hidden": "untuk memapar/menyembunyikan teks di belakang CW", - "keyboard_shortcuts.toggle_sensitivity": "untuk memapar/menyembunyikan media", - "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.requests": "Buka senarai permintaan ikutan", + "keyboard_shortcuts.search": "Tumpu pada bar gelintar", + "keyboard_shortcuts.spoilers": "Tunjuk/sembunyi medan CW", + "keyboard_shortcuts.start": "Buka lajur “mari bermula”", + "keyboard_shortcuts.toggle_hidden": "Tunjuk/sembunyi teks di sebalik CW", + "keyboard_shortcuts.toggle_sensitivity": "Tunjuk/sembunyi media", + "keyboard_shortcuts.toot": "Mula hantaran baharu", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", - "keyboard_shortcuts.up": "untuk ke atas dalam senarai", + "keyboard_shortcuts.up": "Pindah ke atas dalam senarai", "lightbox.close": "Tutup", - "lightbox.compress": "Kecilkan kotak tengok gambar", - "lightbox.expand": "Besarkan kotak tengok gambar", + "lightbox.compress": "Kecilkan kotak paparan imej", + "lightbox.expand": "Besarkan kotak paparan imej", "lightbox.next": "Seterusnya", "lightbox.previous": "Sebelumnya", "lists.account.add": "Tambah ke senarai", - "lists.account.remove": "Keluarkan dari senarai", + "lists.account.remove": "Buang daripada senarai", "lists.delete": "Padam senarai", "lists.edit": "Sunting senarai", "lists.edit.submit": "Ubah tajuk", @@ -262,59 +269,59 @@ "lists.subheading": "Senarai anda", "load_pending": "{count, plural, one {# item baharu} other {# item baharu}}", "loading_indicator.label": "Memuatkan...", - "media_gallery.toggle_visible": "Sembunyikan {number, plural, one {gambar} other {gambar}}", + "media_gallery.toggle_visible": "{number, plural, other {Sembunyikan imej}}", "missing_indicator.label": "Tidak dijumpai", - "missing_indicator.sublabel": "Sumber ini gagal ditemukan", + "missing_indicator.sublabel": "Sumber ini tidak dijumpai", "mute_modal.duration": "Tempoh", "mute_modal.hide_notifications": "Sembunyikan pemberitahuan daripada pengguna ini?", - "mute_modal.indefinite": "Tak tentu", + "mute_modal.indefinite": "Tidak tentu", "navigation_bar.apps": "Aplikasi mudah alih", "navigation_bar.blocks": "Pengguna yang disekat", - "navigation_bar.bookmarks": "Penanda buku", + "navigation_bar.bookmarks": "Tanda buku", "navigation_bar.community_timeline": "Garis masa tempatan", - "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Mesej langsung", + "navigation_bar.compose": "Karang hantaran baharu", + "navigation_bar.direct": "Mesej terus", "navigation_bar.discover": "Teroka", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Domain disekat", "navigation_bar.edit_profile": "Sunting profil", "navigation_bar.favourites": "Kegemaran", "navigation_bar.filters": "Perkataan yang dibisukan", "navigation_bar.follow_requests": "Permintaan ikutan", "navigation_bar.follows_and_followers": "Ikutan dan pengikut", - "navigation_bar.info": "About this instance", - "navigation_bar.keyboard_shortcuts": "Kekunci Pantas", + "navigation_bar.info": "Perihal pelayan ini", + "navigation_bar.keyboard_shortcuts": "Kekunci pantas", "navigation_bar.lists": "Senarai", - "navigation_bar.logout": "Log Keluar", + "navigation_bar.logout": "Log keluar", "navigation_bar.mutes": "Pengguna yang dibisukan", "navigation_bar.personal": "Peribadi", - "navigation_bar.pins": "Pinned toots", - "navigation_bar.preferences": "Aturan", + "navigation_bar.pins": "Hantaran disemat", + "navigation_bar.preferences": "Keutamaan", "navigation_bar.public_timeline": "Garis masa bersekutu", "navigation_bar.security": "Keselamatan", - "notification.favourite": "{name} favourited your status", + "notification.favourite": "{name} menggemari hantaran anda", "notification.follow": "{name} mengikuti anda", "notification.follow_request": "{name} meminta untuk mengikuti anda", "notification.mention": "{name} menyebut anda", "notification.own_poll": "Undian anda telah tamat", "notification.poll": "Sebuah undian yang anda undi telah tamat", - "notification.reblog": "{name} boosted your status", - "notification.status": "{name} baru sahaja membuat kiriman", - "notifications.clear": "Bersihkan pemberitahuan", - "notifications.clear_confirmation": "Anda pasti mahu membuang semua pemberitahuan anda selama-lamanya?", - "notifications.column_settings.alert": "Pemberitahuan desktop", + "notification.reblog": "{name} menggalak hantaran anda", + "notification.status": "{name} baru sahaja mengirim hantaran", + "notifications.clear": "Buang pemberitahuan", + "notifications.clear_confirmation": "Adakah anda pasti anda ingin membuang semua pemberitahuan anda secara kekal?", + "notifications.column_settings.alert": "Pemberitahuan atas meja", "notifications.column_settings.favourite": "Kegemaran:", "notifications.column_settings.filter_bar.advanced": "Papar semua kategori", "notifications.column_settings.filter_bar.category": "Bar penapis pantas", - "notifications.column_settings.filter_bar.show": "Papar", + "notifications.column_settings.filter_bar.show": "Tunjuk", "notifications.column_settings.follow": "Pengikut baharu:", "notifications.column_settings.follow_request": "Permintaan ikutan baharu:", "notifications.column_settings.mention": "Sebutan:", "notifications.column_settings.poll": "Keputusan undian:", "notifications.column_settings.push": "Pemberitahuan tolak", "notifications.column_settings.reblog": "Galakan:", - "notifications.column_settings.show": "Papar dalam lajur", + "notifications.column_settings.show": "Tunjukkan dalam lajur", "notifications.column_settings.sound": "Mainkan bunyi", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "Hantaran baharu:", "notifications.column_settings.unread_markers.category": "Penanda pemberitahuan belum dibaca", "notifications.filter.all": "Semua", "notifications.filter.boosts": "Galakan", @@ -326,97 +333,98 @@ "notifications.grant_permission": "Beri kebenaran.", "notifications.group": "{count} pemberitahuan", "notifications.mark_as_read": "Tandakan semua pemberitahuan sebagai sudah dibaca", - "notifications.permission_denied": "Pemberitahuan desktop tidak tersedia kerana permintaan kebenaran penyemak imbas sebelum ini ditolak", - "notifications.permission_denied_alert": "Pemberitahuan desktop tidak boleh didayakan kerana kebenaran penyemak imbas ditolak sebelum ini", - "notifications.permission_required": "Pemberitahuan desktop tidak tersedia kerana keizinan yang diperlukan tidak diberi.", - "notifications_permission_banner.enable": "Dayakan pemberitahuan desktop", - "notifications_permission_banner.how_to_control": "Untuk mendapat pemberitahuan ketika Mastodon tidak dibuka, dayakan pemberitahuan desktop. Anda boleh mengawal jenis interaksi mana yang menjana pemberitahuan desktop melalui butang {icon} di atas sesudah didayakan.", - "notifications_permission_banner.title": "Takkan terlepas apa-apa", + "notifications.permission_denied": "Pemberitahuan atas meja tidak tersedia kerana permintaan kebenaran pelayar sebelum ini ditolak", + "notifications.permission_denied_alert": "Pemberitahuan atas meja tidak boleh didayakan, kerana permintaan kebenaran pelayar sebelum ini ditolak", + "notifications.permission_required": "Pemberitahuan atas meja tidak tersedia kerana permintaan kebenaran masih belum diberikan.", + "notifications_permission_banner.enable": "Dayakan pemberitahuan atas meja", + "notifications_permission_banner.how_to_control": "Untuk mendapat pemberitahuan ketika Mastodon tidak dibuka, dayakan pemberitahuan atas meja. Anda boleh mengawal jenis interaksi mana yang menjana pemberitahuan atas meja melalui butang {icon} di atas setelah ia didayakan.", + "notifications_permission_banner.title": "Jangan terlepas apa-apa", "picture_in_picture.restore": "Letak semula", "poll.closed": "Ditutup", - "poll.refresh": "Muat Semula", - "poll.total_people": "{count, plural, one {# orang} other {# orang}}", - "poll.total_votes": "{count, plural, one {# undian} other {# undian}}", + "poll.refresh": "Muat semula", + "poll.total_people": "{count, plural, other {# orang}}", + "poll.total_votes": "{count, plural, other {# undian}}", "poll.vote": "Undi", "poll.voted": "Anda mengundi jawapan ini", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Tambah undian", "poll_button.remove_poll": "Buang undian", - "privacy.change": "Adjust status privacy", - "privacy.direct.long": "Post to mentioned users only", - "privacy.direct.short": "Langsung", - "privacy.private.long": "Post to followers only", + "privacy.change": "Ubah privasi hantaran", + "privacy.direct.long": "Hanya boleh dilihat oleh pengguna disebut", + "privacy.direct.short": "Terus", + "privacy.private.long": "Hanya boleh dilihat oleh pengikut", "privacy.private.short": "Pengikut sahaja", - "privacy.public.long": "Post to public timelines", + "privacy.public.long": "Boleh dilihat oleh semua orang, ditunjukkan di garis masa awam", "privacy.public.short": "Awam", - "privacy.unlisted.long": "Do not show in public timelines", + "privacy.unlisted.long": "Boleh dilihat oleh semua orang, tapi jangan tunjukkan di garis masa awam", "privacy.unlisted.short": "Tidak tersenarai", - "refresh": "Muat Semula", + "refresh": "Muat semula", "regeneration_indicator.label": "Memuatkan…", - "regeneration_indicator.sublabel": "Your home feed is being prepared!", - "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", - "relative_time.just_now": "now", + "regeneration_indicator.sublabel": "Suapan rumah anda sedang disediakan!", + "relative_time.days": "{number}h", + "relative_time.hours": "{number}j", + "relative_time.just_now": "sekarang", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", - "relative_time.today": "today", - "reply_indicator.cancel": "Cancel", - "report.forward": "Forward to {target}", - "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", - "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", - "report.placeholder": "Additional comments", - "report.submit": "Submit", - "report.target": "Report {target}", - "search.placeholder": "Search", - "search_popout.search_format": "Advanced search format", - "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", - "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", - "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", - "search_popout.tips.user": "user", - "search_results.accounts": "People", - "search_results.hashtags": "Hashtags", - "search_results.statuses": "Toots", - "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", - "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", - "status.block": "Block @{name}", - "status.bookmark": "Bookmark", - "status.cancel_reblog_private": "Unboost", - "status.cannot_reblog": "This post cannot be boosted", - "status.copy": "Copy link to status", - "status.delete": "Delete", - "status.detailed_status": "Detailed conversation view", - "status.direct": "Direct message @{name}", - "status.embed": "Embed", - "status.favourite": "Favourite", - "status.filtered": "Filtered", - "status.load_more": "Load more", - "status.media_hidden": "Media hidden", - "status.mention": "Mention @{name}", - "status.more": "More", - "status.mute": "Mute @{name}", - "status.mute_conversation": "Mute conversation", - "status.open": "Expand this status", - "status.pin": "Pin on profile", - "status.pinned": "Pinned toot", - "status.read_more": "Read more", - "status.reblog": "Boost", - "status.reblog_private": "Boost with original visibility", - "status.reblogged_by": "{name} boosted", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", - "status.remove_bookmark": "Remove bookmark", - "status.reply": "Reply", - "status.replyAll": "Reply to thread", - "status.report": "Report @{name}", - "status.sensitive_warning": "Sensitive content", - "status.share": "Share", - "status.show_less": "Papar sedikit", - "status.show_less_all": "Papar sedikit untuk semua", - "status.show_more": "Papar lagi", - "status.show_more_all": "Papar lebih untuk semua", - "status.show_thread": "Tunjukkan perbincangan", + "relative_time.today": "hari ini", + "reply_indicator.cancel": "Batal", + "report.forward": "Panjangkan ke {target}", + "report.forward_hint": "Akaun ini daripada pelayan lain. Hantar salinan laporan yang ditanpanamakan ke sana juga?", + "report.hint": "Laporan akan dihantar ke penyederhana pelayan anda. Anda boleh sertakan penerangan kenapa anda laporkan akaun ini di bawah:", + "report.placeholder": "Ulasan tambahan", + "report.submit": "Serah", + "report.target": "Melaporkan {target}", + "search.placeholder": "Cari", + "search_popout.search_format": "Format gelintar lanjutan", + "search_popout.tips.full_text": "Teks ringkas mengembalikan hantaran yang anda telah tulis, menggemari, menggalak, atau telah disebutkan, dan juga nama pengguna, nama paparan, dan tanda pagar yang dipadankan.", + "search_popout.tips.hashtag": "tanda pagar", + "search_popout.tips.status": "hantaran", + "search_popout.tips.text": "Teks ringkas mengembalikan nama paparan, nama pengguna dan tanda pagar yang sepadan", + "search_popout.tips.user": "pengguna", + "search_results.accounts": "Orang", + "search_results.hashtags": "Tanda pagar", + "search_results.statuses": "Hantaran", + "search_results.statuses_fts_disabled": "Menggelintar hantaran menggunakan kandungannya tidak didayakan di pelayan Mastodon ini.", + "search_results.total": "{count, number} {count, plural, other {hasil}}", + "status.admin_account": "Buka antara muka penyederhanaan untuk @{name}", + "status.admin_status": "Buka hantaran ini dalam antara muka penyederhanaan", + "status.block": "Sekat @{name}", + "status.bookmark": "Tanda buku", + "status.cancel_reblog_private": "Nyahgalak", + "status.cannot_reblog": "Hantaran ini tidak boleh digalakkan", + "status.copy": "Salin pautan ke hantaran", + "status.delete": "Padam", + "status.detailed_status": "Paparan perbualan terperinci", + "status.direct": "Mesej terus @{name}", + "status.embed": "Benaman", + "status.favourite": "Kegemaran", + "status.filtered": "Ditapis", + "status.load_more": "Muatkan lagi", + "status.media_hidden": "Media disembunyikan", + "status.mention": "Sebut @{name}", + "status.more": "Lagi", + "status.mute": "Bisukan @{name}", + "status.mute_conversation": "Bisukan perbualan", + "status.open": "Kembangkan hantaran ini", + "status.pin": "Semat di profil", + "status.pinned": "Hantaran disemat", + "status.read_more": "Baca lagi", + "status.reblog": "Galakkan", + "status.reblog_private": "Galakkan dengan kebolehlihatan asal", + "status.reblogged_by": "{name} telah menggalakkan", + "status.reblogs.empty": "Tiada sesiapa yang menggalak hantaran ini. Apabila ada yang menggalak, ia akan muncul di sini.", + "status.redraft": "Padam & rangka semula", + "status.remove_bookmark": "Buang tanda buku", + "status.reply": "Balas", + "status.replyAll": "Balas ke bebenang", + "status.report": "Laporkan @{name}", + "status.sensitive_warning": "Kandungan sensitif", + "status.share": "Kongsi", + "status.show_less": "Tunjukkan kurang", + "status.show_less_all": "Tunjukkan kurang untuk semua", + "status.show_more": "Tunjukkan lebih", + "status.show_more_all": "Tunjukkan lebih untuk semua", + "status.show_thread": "Tunjuk bebenang", "status.uncached_media_warning": "Tidak tersedia", "status.unmute_conversation": "Nyahbisukan perbualan", "status.unpin": "Nyahsemat daripada profil", @@ -427,49 +435,50 @@ "tabs_bar.local_timeline": "Tempatan", "tabs_bar.notifications": "Pemberitahuan", "tabs_bar.search": "Cari", - "time_remaining.days": "tinggal {number, plural, one {# hari} other {# hari}}", - "time_remaining.hours": "tinggal {number, plural, one {# jam} other {# jam}}", - "time_remaining.minutes": "tinggal {number, plural, one {# minit} other {# minit}}", - "time_remaining.moments": "Masa yang tinggal", - "time_remaining.seconds": "tinggal {number, plural, one {# saat} other {# saat}}", + "time_remaining.days": "Tinggal {number, plural, other {# hari}}", + "time_remaining.hours": "Tinggal {number, plural, other {# jam}}", + "time_remaining.minutes": "Tinggal {number, plural, other {# minit}}", + "time_remaining.moments": "Tinggal beberapa saat", + "time_remaining.seconds": "Tinggal {number, plural, other {# saat}}", "timeline_hint.remote_resource_not_displayed": "{resource} dari pelayan lain tidak dipaparkan.", "timeline_hint.resources.followers": "Pengikut", "timeline_hint.resources.follows": "Ikutan", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} orang}other {{counter} orang}} bercakap", - "trends.trending_now": "Trending kini", - "ui.beforeunload": "Draf anda akan terhapus jika anda meninggalkan Mastodon.", + "timeline_hint.resources.statuses": "Hantaran lebih lama", + "trends.counter_by_accounts": "{count, plural, other {{counter} orang}} bercakap", + "trends.trending_now": "Sohor kini", + "ui.beforeunload": "Rangka anda akan terhapus jika anda meninggalkan Mastodon.", "units.short.billion": "{count}B", "units.short.million": "{count}J", "units.short.thousand": "{count}R", "upload_area.title": "Seret & letak untuk muat naik", - "upload_button.label": "Tambah fail gambar, video atau audio", + "upload_button.label": "Tambah fail imej, video atau audio", "upload_error.limit": "Sudah melebihi had muat naik.", "upload_error.poll": "Tidak boleh memuat naik fail bersama undian.", - "upload_form.audio_description": "Menjelaskan untuk orang yang ada masalah pendengaran", - "upload_form.description": "Menjelaskan untuk orang yang ada masalah penglihatan", + "upload_form.audio_description": "Jelaskan untuk orang yang ada masalah pendengaran", + "upload_form.description": "Jelaskan untuk orang yang ada masalah penglihatan", "upload_form.edit": "Sunting", "upload_form.thumbnail": "Ubah gambar kecil", "upload_form.undo": "Padam", - "upload_form.video_description": "Menjelaskan untuk orang yang ada masalah pendengaran atau penglihatan", - "upload_modal.analyzing_picture": "Meneliti gambar…", + "upload_form.video_description": "Jelaskan untuk orang yang ada masalah pendengaran atau penglihatan", + "upload_modal.analyzing_picture": "Menganalisis gambar…", "upload_modal.apply": "Guna", - "upload_modal.choose_image": "Pilih gambar", - "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", - "upload_modal.detect_text": "Cam perkataan daripada gambar", + "upload_modal.applying": "Applying…", + "upload_modal.choose_image": "Pilih imej", + "upload_modal.description_placeholder": "Seekor rubah perang pantas melompat merentasi anjing yang pemalas", + "upload_modal.detect_text": "Kesan teks daripada gambar", "upload_modal.edit_media": "Sunting media", - "upload_modal.hint": "Ketik atau seret ke bulatan pada pratonton untuk memilih titik tumpu yang akan kelihatan pada semua gambar kecil.", + "upload_modal.hint": "Klik atau seret bulatan di pratonton untuk memilih titik tumpu yang akan kelihatan pada semua gambar kecil.", "upload_modal.preparing_ocr": "Mempersiapkan OCR…", "upload_modal.preview_label": "Pratonton ({ratio})", - "upload_progress.label": "Uploading…", + "upload_progress.label": "Memuat naik...", "video.close": "Tutup video", "video.download": "Muat turun fail", - "video.exit_fullscreen": "Exit full screen", - "video.expand": "Expand video", - "video.fullscreen": "Full screen", - "video.hide": "Hide video", - "video.mute": "Mute sound", - "video.pause": "Pause", - "video.play": "Play", - "video.unmute": "Unmute sound" + "video.exit_fullscreen": "Keluar skrin penuh", + "video.expand": "Besarkan video", + "video.fullscreen": "Skrin penuh", + "video.hide": "Sembunyikan video", + "video.mute": "Bisukan bunyi", + "video.pause": "Jeda", + "video.play": "Main", + "video.unmute": "Nyahbisukan bunyi" } diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 56a42ca05..c73e5ac0e 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -47,11 +47,16 @@ "account.unmute": "@{name} niet langer negeren", "account.unmute_notifications": "Meldingen van @{name} niet langer negeren", "account_note.placeholder": "Klik om een opmerking toe te voegen", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Probeer het nog een keer na {retry_time, time, medium}.", "alert.rate_limited.title": "Beperkt te gebruiken", "alert.unexpected.message": "Er deed zich een onverwachte fout voor", "alert.unexpected.title": "Oeps!", "announcement.announcement": "Mededeling", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Je kunt {combo} klikken om dit de volgende keer over te slaan", "bundle_column_error.body": "Tijdens het laden van dit onderdeel is er iets fout gegaan.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Weet je het zeker dat je deze toot wilt verwijderen?", "confirmations.delete_list.confirm": "Verwijderen", "confirmations.delete_list.message": "Weet je zeker dat je deze lijst definitief wilt verwijderen?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Verberg alles van deze server", "confirmations.domain_block.message": "Weet je het echt heel erg zeker dat je alles van {domain} wilt negeren? In de meeste gevallen is het blokkeren of negeren van een paar specifieke personen voldoende en beter. Je zult geen toots van deze server op openbare tijdlijnen zien of in jouw meldingen. Jouw volgers van deze server worden verwijderd.", "confirmations.logout.confirm": "Uitloggen", @@ -142,7 +149,7 @@ "emoji_button.food": "Eten en drinken", "emoji_button.label": "Emoji toevoegen", "emoji_button.nature": "Natuur", - "emoji_button.not_found": "Geen emoji’s!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "Geen overeenkomende emojis gevonden", "emoji_button.objects": "Voorwerpen", "emoji_button.people": "Mensen", "emoji_button.recent": "Vaak gebruikt", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# stem} other {# stemmen}}", "poll.vote": "Stemmen", "poll.voted": "Je hebt hier op gestemd", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Poll toevoegen", "poll_button.remove_poll": "Poll verwijderen", "privacy.change": "Zichtbaarheid van toot aanpassen", @@ -454,6 +462,7 @@ "upload_form.video_description": "Omschrijf dit voor mensen met een auditieve of visuele beperking", "upload_modal.analyzing_picture": "Afbeelding analyseren…", "upload_modal.apply": "Toepassen", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Kies een afbeelding", "upload_modal.description_placeholder": "Pa's wijze lynx bezag vroom het fikse aquaduct", "upload_modal.detect_text": "Tekst in een afbeelding detecteren", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 234b2175c..cfd9aaca9 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -22,7 +22,7 @@ "account.follows.empty": "Denne brukaren fylgjer ikkje nokon enno.", "account.follows_you": "Fylgjer deg", "account.hide_reblogs": "Gøym fremhevingar frå @{name}", - "account.joined": "Joined {date}", + "account.joined": "Ble med den {date}", "account.last_status": "Sist aktiv", "account.link_verified_on": "Eigarskap for denne lenkja vart sist sjekka {date}", "account.locked_info": "Denne kontoen er privat. Eigaren kan sjølv velja kven som kan fylgja han.", @@ -47,11 +47,16 @@ "account.unmute": "Av-demp @{name}", "account.unmute_notifications": "Vis varsel frå @{name}", "account_note.placeholder": "Klikk for å leggja til merknad", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Ver venleg å prøva igjen etter {retry_time, time, medium}.", "alert.rate_limited.title": "Begrensa rate", "alert.unexpected.message": "Eit uventa problem oppstod.", "alert.unexpected.title": "Oi sann!", "announcement.announcement": "Kunngjering", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per veke", "boost_modal.combo": "Du kan trykkja {combo} for å hoppa over dette neste gong", "bundle_column_error.body": "Noko gjekk gale mens denne komponenten vart lasta ned.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Er du sikker på at du vil sletta denne statusen?", "confirmations.delete_list.confirm": "Slett", "confirmations.delete_list.message": "Er du sikker på at du vil sletta denne lista for alltid?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Gøym heile domenet", "confirmations.domain_block.message": "Er du heilt, heilt sikker på at du vil blokkera heile {domain}? I dei fleste tilfelle er det godt nok og føretrekt med nokre få målretta blokkeringar eller målbindingar. Du kjem ikkje til å sjå innhald frå det domenet i nokon fødererte tidsliner eller i varsla dine. Fylgjarane dine frå det domenet vert fjerna.", "confirmations.logout.confirm": "Logg ut", @@ -150,7 +157,7 @@ "emoji_button.search_results": "Søkeresultat", "emoji_button.symbols": "Symbol", "emoji_button.travel": "Reise & stader", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Kontoen er suspendert", "empty_column.account_timeline": "Ingen tut her!", "empty_column.account_unavailable": "Profil ikkje tilgjengelig", "empty_column.blocks": "Du har ikkje blokkert nokon brukarar enno.", @@ -160,11 +167,11 @@ "empty_column.domain_blocks": "Det er ingen gøymde domene ennå.", "empty_column.favourited_statuses": "Du har ingen favoritt-tut ennå. Når du merkjer ein som favoritt, så dukkar det opp her.", "empty_column.favourites": "Ingen har merkt dette tutet som favoritt enno. Når nokon gjer det, så dukkar det opp her.", - "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.follow_recommendations": "Ser ut som at det ikke finnes noen forslag for deg. Du kan prøve å bruke søk for å se etter folk du kan vite eller utforske trendende hashtags.", "empty_column.follow_requests": "Du har ingen følgjeførespurnadar ennå. Når du får ein, så vil den dukke opp her.", "empty_column.hashtag": "Det er ingenting i denne emneknaggen ennå.", "empty_column.home": "Heime-tidslinja di er tom! Besøk {public} eller søk for å starte og å møte andre brukarar.", - "empty_column.home.suggestions": "See some suggestions", + "empty_column.home.suggestions": "Se noen forslag", "empty_column.list": "Det er ingenting i denne lista enno. Når medlemer av denne lista legg ut nye statusar, så dukkar dei opp her.", "empty_column.lists": "Du har ingen lister enno. Når du lagar ei, så dukkar ho opp her.", "empty_column.mutes": "Du har ikkje målbunde nokon brukarar enno.", @@ -173,12 +180,12 @@ "error.unexpected_crash.explanation": "På grunn av ein feil i vår kode eller eit nettlesarkompatibilitetsproblem, kunne ikkje denne sida verte vist korrekt.", "error.unexpected_crash.explanation_addons": "Denne siden kunne ikke vises riktig. Denne feilen er sannsynligvis forårsaket av en nettleserutvidelse eller automatiske oversettelsesverktøy.", "error.unexpected_crash.next_steps": "Prøv å lasta inn sida på nytt. Om det ikkje hjelper så kan du framleis nytta Mastodon i ein annan nettlesar eller app.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Prøv å deaktivere dem og laste siden på nytt. Hvis det ikke hjelper, kan du fremdeles bruke Mastodon via en annen nettleser eller en annen app.", "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace til utklippstavla", "errors.unexpected_crash.report_issue": "Rapporter problem", - "follow_recommendations.done": "Done", - "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", - "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", + "follow_recommendations.done": "Utført", + "follow_recommendations.heading": "Følg folk du ønsker å se innlegg fra! Her er noen forslag.", + "follow_recommendations.lead": "Innlegg fra mennesker du følger vil vises i kronologisk rekkefølge på hjemmefeed. Ikke vær redd for å gjøre feil, du kan slutte å følge folk like enkelt som alt!", "follow_request.authorize": "Autoriser", "follow_request.reject": "Avvis", "follow_requests.unlocked_explanation": "Sjølv om kontoen din ikkje er låst tenkte {domain} tilsette at du ville gå gjennom førespurnadar frå desse kontoane manuelt.", @@ -243,8 +250,8 @@ "keyboard_shortcuts.unfocus": "for å fokusere vekk skrive-/søkefeltet", "keyboard_shortcuts.up": "for å flytta seg opp på lista", "lightbox.close": "Lukk att", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Komprimer bildevisningsboks", + "lightbox.expand": "Ekspander bildevisning boks", "lightbox.next": "Neste", "lightbox.previous": "Førre", "lists.account.add": "Legg til i liste", @@ -254,9 +261,9 @@ "lists.edit.submit": "Endre tittel", "lists.new.create": "Legg til liste", "lists.new.title_placeholder": "Ny listetittel", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Enhver fulgt bruker", + "lists.replies_policy.list": "Medlemmer i listen", + "lists.replies_policy.none": "Ingen", "lists.replies_policy.title": "Vis svar på:", "lists.search": "Søk gjennom folk du følgjer", "lists.subheading": "Dine lister", @@ -315,7 +322,7 @@ "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Spel av lyd", "notifications.column_settings.status": "Nye tuter:", - "notifications.column_settings.unread_markers.category": "Unread notification markers", + "notifications.column_settings.unread_markers.category": "Ulest meldingsmarkører", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Framhevingar", "notifications.filter.favourites": "Favorittar", @@ -323,14 +330,14 @@ "notifications.filter.mentions": "Nemningar", "notifications.filter.polls": "Røysteresultat", "notifications.filter.statuses": "Oppdateringer fra folk du følger", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Gi tillatelse.", "notifications.group": "{count} varsel", "notifications.mark_as_read": "Merk alle varsler som lest", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_denied": "Skrivebordsvarsler er ikke tilgjengelige på grunn av tidligere nektet nettlesertillatelser", + "notifications.permission_denied_alert": "Skrivebordsvarsler kan ikke aktiveres, ettersom lesertillatelse har blitt nektet før", + "notifications.permission_required": "Skrivebordsvarsler er utilgjengelige fordi nødvendige rettigheter ikke er gitt.", "notifications_permission_banner.enable": "Skru på skrivebordsvarsler", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.how_to_control": "For å motta varsler når Mastodon ikke er åpne, aktiver desktop varsler. Du kan kontrollere nøyaktig hvilke typer interaksjoner genererer skrivebordsvarsler gjennom {icon} -knappen ovenfor når de er aktivert.", "notifications_permission_banner.title": "Aldri gå glipp av noe", "picture_in_picture.restore": "Legg den tilbake", "poll.closed": "Lukka", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# røyst} other {# røyster}}", "poll.vote": "Røyst", "poll.voted": "Du røysta på dette svaret", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Start ei meiningsmåling", "poll_button.remove_poll": "Fjern røyst", "privacy.change": "Juster status-synlegheit", @@ -454,12 +462,13 @@ "upload_form.video_description": "Greit ut for folk med nedsett høyrsel eller syn", "upload_modal.analyzing_picture": "Analyserer bilete…", "upload_modal.apply": "Bruk", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Vel bilete", "upload_modal.description_placeholder": "Ein rask brun rev hoppar over den late hunden", "upload_modal.detect_text": "Gjenkjenn tekst i biletet", "upload_modal.edit_media": "Rediger medium", "upload_modal.hint": "Klikk og dra sirkelen på førehandsvisninga for å velge fokuspunktet som alltid vil vere synleg på alle miniatyrbileta.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Forbereder OCR…", "upload_modal.preview_label": "Førehandsvis ({ratio})", "upload_progress.label": "Lastar opp...", "video.close": "Lukk video", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 08205aed2..179bbd1bd 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -22,7 +22,7 @@ "account.follows.empty": "Denne brukeren følger ikke noen enda.", "account.follows_you": "Følger deg", "account.hide_reblogs": "Skjul fremhevinger fra @{name}", - "account.joined": "Joined {date}", + "account.joined": "Ble med den {date}", "account.last_status": "Sist aktiv", "account.link_verified_on": "Eierskap av denne lenken ble sjekket {date}", "account.locked_info": "Denne kontoens personvernstatus er satt til låst. Eieren vurderer manuelt hvem som kan følge dem.", @@ -47,11 +47,16 @@ "account.unmute": "Avdemp @{name}", "account.unmute_notifications": "Vis varsler fra @{name}", "account_note.placeholder": "Klikk for å legge til et notat", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Vennligst prøv igjen etter kl. {retry_time, time, medium}.", "alert.rate_limited.title": "Hastighetsbegrenset", "alert.unexpected.message": "En uventet feil oppstod.", - "alert.unexpected.title": "Oops!", + "alert.unexpected.title": "Oi!", "announcement.announcement": "Kunngjøring", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per uke", "boost_modal.combo": "You kan trykke {combo} for å hoppe over dette neste gang", "bundle_column_error.body": "Noe gikk galt mens denne komponenten lastet.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Er du sikker på at du vil slette denne statusen?", "confirmations.delete_list.confirm": "Slett", "confirmations.delete_list.message": "Er du sikker på at du vil slette denne listen permanent?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Skjul alt fra domenet", "confirmations.domain_block.message": "Er du sikker på at du vil skjule hele domenet {domain}? I de fleste tilfeller er det bedre med målrettet blokkering eller demping.", "confirmations.logout.confirm": "Logg ut", @@ -150,7 +157,7 @@ "emoji_button.search_results": "Søkeresultat", "emoji_button.symbols": "Symboler", "emoji_button.travel": "Reise & steder", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Kontoen er suspendert", "empty_column.account_timeline": "Ingen tuter er her!", "empty_column.account_unavailable": "Profilen er utilgjengelig", "empty_column.blocks": "Du har ikke blokkert noen brukere enda.", @@ -160,11 +167,11 @@ "empty_column.domain_blocks": "Det er ingen skjulte domener enda.", "empty_column.favourited_statuses": "Du har ikke likt noen tuter enda. Når du liker en, vil den dukke opp her.", "empty_column.favourites": "Ingen har likt denne tuten enda. Når noen gjør det, vil de dukke opp her.", - "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.follow_recommendations": "Ser ut som at det ikke finnes noen forslag for deg. Du kan prøve å bruke søk for å se etter folk du kan vite eller utforske trendende hashtags.", "empty_column.follow_requests": "Du har ingen følgeforespørsler enda. Når du mottar en, vil den dukke opp her.", "empty_column.hashtag": "Det er ingenting i denne hashtagen ennå.", "empty_column.home": "Du har ikke fulgt noen ennå. Besøk {publlic} eller bruk søk for å komme i gang og møte andre brukere.", - "empty_column.home.suggestions": "See some suggestions", + "empty_column.home.suggestions": "Se noen forslag", "empty_column.list": "Det er ingenting i denne listen ennå. Når medlemmene av denne listen legger ut nye statuser vil de dukke opp her.", "empty_column.lists": "Du har ingen lister enda. Når du lager en, vil den dukke opp her.", "empty_column.mutes": "Du har ikke dempet noen brukere enda.", @@ -173,12 +180,12 @@ "error.unexpected_crash.explanation": "På grunn av en bug i koden vår eller et nettleserkompatibilitetsproblem, kunne denne siden ikke vises riktig.", "error.unexpected_crash.explanation_addons": "Denne siden kunne ikke vises riktig. Denne feilen er sannsynligvis forårsaket av en nettleserutvidelse eller automatiske oversettelsesverktøy.", "error.unexpected_crash.next_steps": "Prøv å oppfriske siden. Dersom det ikke hjelper, vil du kanskje fortsatt kunne bruke Mastodon gjennom en annen nettleser eller app.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Prøv å deaktivere dem og laste siden på nytt. Hvis det ikke hjelper, kan du fremdeles bruke Mastodon via en annen nettleser eller en annen app.", "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace-en til utklippstavlen", "errors.unexpected_crash.report_issue": "Rapporter en feil", - "follow_recommendations.done": "Done", - "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", - "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", + "follow_recommendations.done": "Utført", + "follow_recommendations.heading": "Følg folk du ønsker å se innlegg fra! Her er noen forslag.", + "follow_recommendations.lead": "Innlegg fra mennesker du følger vil vises i kronologisk rekkefølge på hjemmefeed. Ikke vær redd for å gjøre feil, du kan slutte å følge folk like enkelt som alt!", "follow_request.authorize": "Autorisér", "follow_request.reject": "Avvis", "follow_requests.unlocked_explanation": "Selv om kontoen din ikke er låst, tror {domain} ansatte at du kanskje vil gjennomgå forespørsler fra disse kontoene manuelt.", @@ -239,12 +246,12 @@ "keyboard_shortcuts.start": "åpne «Sett i gang»-kolonnen", "keyboard_shortcuts.toggle_hidden": "å vise/skjule tekst bak en innholdsadvarsel", "keyboard_shortcuts.toggle_sensitivity": "å vise/skjule media", - "keyboard_shortcuts.toot": "å starte en helt ny tut", + "keyboard_shortcuts.toot": "Start et nytt innlegg", "keyboard_shortcuts.unfocus": "å ufokusere komponerings-/søkefeltet", "keyboard_shortcuts.up": "å flytte opp i listen", "lightbox.close": "Lukk", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Komprimer bildevisningsboks", + "lightbox.expand": "Ekspander bildevisning boks", "lightbox.next": "Neste", "lightbox.previous": "Forrige", "lists.account.add": "Legg til i listen", @@ -254,9 +261,9 @@ "lists.edit.submit": "Endre tittel", "lists.new.create": "Ligg til liste", "lists.new.title_placeholder": "Ny listetittel", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.followed": "Enhver fulgt bruker", + "lists.replies_policy.list": "Medlemmer i listen", + "lists.replies_policy.none": "Ingen", "lists.replies_policy.title": "Vis svar på:", "lists.search": "Søk blant personer du følger", "lists.subheading": "Dine lister", @@ -315,7 +322,7 @@ "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Spill lyd", "notifications.column_settings.status": "Nye tuter:", - "notifications.column_settings.unread_markers.category": "Unread notification markers", + "notifications.column_settings.unread_markers.category": "Ulest meldingsmarkører", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Fremhevinger", "notifications.filter.favourites": "Favoritter", @@ -323,14 +330,14 @@ "notifications.filter.mentions": "Nevnelser", "notifications.filter.polls": "Avstemningsresultater", "notifications.filter.statuses": "Oppdateringer fra folk du følger", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Gi tillatelse.", "notifications.group": "{count} varslinger", "notifications.mark_as_read": "Merk alle varsler som lest", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.permission_denied": "Skrivebordsvarsler er ikke tilgjengelige på grunn av tidligere nektet nettlesertillatelser", + "notifications.permission_denied_alert": "Skrivebordsvarsler kan ikke aktiveres, ettersom lesertillatelse har blitt nektet før", + "notifications.permission_required": "Skrivebordsvarsler er utilgjengelige fordi nødvendige rettigheter ikke er gitt.", "notifications_permission_banner.enable": "Skru på skrivebordsvarsler", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.how_to_control": "For å motta varsler når Mastodon ikke er åpne, aktiver desktop varsler. Du kan kontrollere nøyaktig hvilke typer interaksjoner genererer skrivebordsvarsler gjennom {icon} -knappen ovenfor når de er aktivert.", "notifications_permission_banner.title": "Aldri gå glipp av noe", "picture_in_picture.restore": "Legg den tilbake", "poll.closed": "Lukket", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# stemme} other {# stemmer}}", "poll.vote": "Stem", "poll.voted": "Du stemte på dette svaret", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Legg til en avstemning", "poll_button.remove_poll": "Fjern avstemningen", "privacy.change": "Justér synlighet", @@ -432,7 +440,7 @@ "time_remaining.minutes": "{number, plural, one {# minutt} other {# minutter}} igjen", "time_remaining.moments": "Gjenværende øyeblikk", "time_remaining.seconds": "{number, plural, one {# sekund} other {# sekunder}} igjen", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "timeline_hint.remote_resource_not_displayed": "{resource} fra andre servere vises ikke.", "timeline_hint.resources.followers": "Følgere", "timeline_hint.resources.follows": "Følger", "timeline_hint.resources.statuses": "Eldre tuter", @@ -454,12 +462,13 @@ "upload_form.video_description": "Beskriv det for folk med hørselstap eller synshemminger", "upload_modal.analyzing_picture": "Analyserer bildet …", "upload_modal.apply": "Bruk", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Velg et bilde", "upload_modal.description_placeholder": "Når du en gang kommer, neste sommer, skal vi atter drikke vin", "upload_modal.detect_text": "Oppdag tekst i bildet", "upload_modal.edit_media": "Rediger media", "upload_modal.hint": "Klikk eller dra sirkelen i forhåndsvisningen for å velge hovedpunktet som alltid vil bli vist i alle miniatyrbilder.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Forbereder OCR…", "upload_modal.preview_label": "Forhåndsvisning ({ratio})", "upload_progress.label": "Laster opp...", "video.close": "Lukk video", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index d93fff97d..6f7bc9761 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -47,11 +47,16 @@ "account.unmute": "Quitar de rescondre @{name}", "account.unmute_notifications": "Mostrar las notificacions de @{name}", "account_note.placeholder": "Clicar per ajustar una nòta", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Mercés de tornar ensajar aprèp {retry_time, time, medium}.", "alert.rate_limited.title": "Taus limitat", "alert.unexpected.message": "Una error s’es producha.", "alert.unexpected.title": "Ops !", "announcement.announcement": "Anóncia", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per setmana", "boost_modal.combo": "Podètz botar {combo} per passar aquò lo còp que ven", "bundle_column_error.body": "Quicòm a fach mèuca pendent lo cargament d’aqueste compausant.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Volètz vertadièrament escafar l’estatut ?", "confirmations.delete_list.confirm": "Suprimir", "confirmations.delete_list.message": "Volètz vertadièrament suprimir aquesta lista per totjorn ?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Amagar tot lo domeni", "confirmations.domain_block.message": "Volètz vertadièrament blocar complètament {domain} ? De còps cal pas que blocar o rescondre unas personas solament.\nVeiretz pas cap de contengut d’aquel domeni dins cap de flux public o dins vòstras notificacions. Vòstres seguidors d’aquel domeni seràn levats.", "confirmations.logout.confirm": "Desconnexion", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vòte} other {# vòtes}}", "poll.vote": "Votar", "poll.voted": "Avètz votat per aquesta responsa", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Ajustar un sondatge", "poll_button.remove_poll": "Levar lo sondatge", "privacy.change": "Ajustar la confidencialitat del messatge", @@ -454,6 +462,7 @@ "upload_form.video_description": "Descriure per las personas amb pèrdas auditivas o mal vesent", "upload_modal.analyzing_picture": "Analisi de l’imatge…", "upload_modal.apply": "Aplicar", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Causir un imatge", "upload_modal.description_placeholder": "Lo dròlle bilingüe manja un yaourt de ròcs exagonals e kiwis verds farà un an mai", "upload_modal.detect_text": "Detectar lo tèxt de l’imatge", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index c1eadb5a3..eca4765c4 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -47,11 +47,16 @@ "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "Log out", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index c953371e1..1c8db1a1d 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -47,11 +47,16 @@ "account.unmute": "Cofnij wyciszenie @{name}", "account.unmute_notifications": "Cofnij wyciszenie powiadomień od @{name}", "account_note.placeholder": "Naciśnij aby dodać notatkę", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Spróbuj ponownie po {retry_time, time, medium}.", "alert.rate_limited.title": "Ograniczony czasowo", "alert.unexpected.message": "Wystąpił nieoczekiwany błąd.", "alert.unexpected.title": "O nie!", "announcement.announcement": "Ogłoszenie", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} co tydzień", "boost_modal.combo": "Naciśnij {combo}, aby pominąć to następnym razem", "bundle_column_error.body": "Coś poszło nie tak podczas ładowania tego składnika.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Czy na pewno chcesz usunąć ten wpis?", "confirmations.delete_list.confirm": "Usuń", "confirmations.delete_list.message": "Czy na pewno chcesz bezpowrotnie usunąć tą listę?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Ukryj wszystko z domeny", "confirmations.domain_block.message": "Czy na pewno chcesz zablokować całą domenę {domain}? Zwykle lepszym rozwiązaniem jest blokada lub wyciszenie kilku użytkowników.", "confirmations.logout.confirm": "Wyloguj", @@ -296,7 +303,7 @@ "notification.follow_request": "{name} poprosił(a) o możliwość śledzenia Cię", "notification.mention": "{name} wspomniał(a) o tobie", "notification.own_poll": "Twoje głosowanie zakończyło się", - "notification.poll": "Głosowanie w którym brałeś(-aś) udział zakończyła się", + "notification.poll": "Głosowanie w którym brałeś(-aś) udział zakończyło się", "notification.reblog": "{name} podbił(a) Twój wpis", "notification.status": "{name} właśnie utworzył(a) wpis", "notifications.clear": "Wyczyść powiadomienia", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# głos} few {# głosy} many {# głosów} other {# głosów}}", "poll.vote": "Zagłosuj", "poll.voted": "Zagłosowałeś_aś na tą odpowiedź", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Dodaj głosowanie", "poll_button.remove_poll": "Usuń głosowanie", "privacy.change": "Dostosuj widoczność wpisów", @@ -454,6 +462,7 @@ "upload_form.video_description": "Opisz dla osób niesłyszących, niedosłyszących, niewidomych i niedowidzących", "upload_modal.analyzing_picture": "Analizowanie obrazu…", "upload_modal.apply": "Zastosuj", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Wybierz obraz", "upload_modal.description_placeholder": "Pchnąć w tę łódź jeża lub ośm skrzyń fig", "upload_modal.detect_text": "Wykryj tekst z obrazu", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 1a45d9ca9..3fc47a212 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -1,31 +1,31 @@ { "account.account_note_header": "Nota", - "account.add_or_remove_from_list": "Adicionar ou Remover de listas", + "account.add_or_remove_from_list": "Adicionar ou remover de listas", "account.badges.bot": "Robô", "account.badges.group": "Grupo", "account.block": "Bloquear @{name}", "account.block_domain": "Bloquear domínio {domain}", "account.blocked": "Bloqueado", - "account.browse_more_on_origin_server": "Encontre mais no perfil original", - "account.cancel_follow_request": "Cancelar solicitação para seguir", + "account.browse_more_on_origin_server": "Veja mais no perfil original", + "account.cancel_follow_request": "Cancelar solicitação", "account.direct": "Enviar toot direto para @{name}", - "account.disable_notifications": "Parar de me notificar quando @{name} fizer publicações", + "account.disable_notifications": "Cancelar notificações de @{name}", "account.domain_blocked": "Domínio bloqueado", "account.edit_profile": "Editar perfil", - "account.enable_notifications": "Notificar-me quando @{name} fizer publicações", - "account.endorse": "Destacar no perfil", + "account.enable_notifications": "Notificar novos toots de @{name}", + "account.endorse": "Recomendar", "account.follow": "Seguir", "account.followers": "Seguidores", "account.followers.empty": "Nada aqui.", - "account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidores}}", - "account.following_counter": "{count, plural, other {{counter} Seguindo}}", + "account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} seguidores}}", + "account.following_counter": "{count, plural, one {segue {counter}} other {segue {counter}}}", "account.follows.empty": "Nada aqui.", - "account.follows_you": "Segue você", + "account.follows_you": "te segue", "account.hide_reblogs": "Ocultar boosts de @{name}", - "account.joined": "Joined {date}", + "account.joined": "Entrou em {date}", "account.last_status": "Ativo pela última vez", - "account.link_verified_on": "Posse deste link foi verificada em {date}", - "account.locked_info": "Esta conta está trancada. Sua solicitação para seguir requer aprovação manual do usuário.", + "account.link_verified_on": "link verificado em {date}", + "account.locked_info": "Trancado. Seguir requer aprovação manual do perfil.", "account.media": "Mídia", "account.mention": "Mencionar @{name}", "account.moved_to": "{name} se mudou para:", @@ -34,7 +34,7 @@ "account.muted": "Silenciado", "account.never_active": "Nunca", "account.posts": "Toots", - "account.posts_with_replies": "Toots e respostas", + "account.posts_with_replies": "Com respostas", "account.report": "Denunciar @{name}", "account.requested": "Aguardando aprovação. Clique para cancelar a solicitação", "account.share": "Compartilhar perfil de @{name}", @@ -42,28 +42,33 @@ "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", "account.unblock": "Desbloquear @{name}", "account.unblock_domain": "Desbloquear domínio {domain}", - "account.unendorse": "Não destacar no perfil", + "account.unendorse": "Remover", "account.unfollow": "Deixar de seguir", - "account.unmute": "Tirar @{name} do mudo", + "account.unmute": "Dessilenciar @{name}", "account.unmute_notifications": "Mostrar notificações de @{name}", - "account_note.placeholder": "Clique para adicionar nota", - "alert.rate_limited.message": "Por favor tente novamente após {retry_time, time, medium}.", - "alert.rate_limited.title": "Frequência limitada", + "account_note.placeholder": "Nota pessoal sobre este perfil aqui", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", + "alert.rate_limited.message": "Tente novamente após {retry_time, time, medium}.", + "alert.rate_limited.title": "Tentativas limitadas", "alert.unexpected.message": "Ocorreu um erro inesperado.", "alert.unexpected.title": "Eita!", - "announcement.announcement": "Anúncio", + "announcement.announcement": "Comunicados", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} por semana", - "boost_modal.combo": "Pode pressionar {combo} para pular isto na próxima vez", - "bundle_column_error.body": "Ocorreu um problema ao carregar este componente.", + "boost_modal.combo": "Pressione {combo} para pular isso na próxima vez", + "bundle_column_error.body": "Erro ao carregar este componente.", "bundle_column_error.retry": "Tente novamente", "bundle_column_error.title": "Erro de rede", "bundle_modal_error.close": "Fechar", - "bundle_modal_error.message": "Ocorreu um problema ao carregar este componente.", + "bundle_modal_error.message": "Erro ao carregar este componente.", "bundle_modal_error.retry": "Tente novamente", "column.blocks": "Usuários bloqueados", "column.bookmarks": "Salvos", - "column.community": "Local", - "column.direct": "Mensagens Diretas", + "column.community": "Linha local", + "column.direct": "Toots Diretos", "column.directory": "Explorar perfis", "column.domain_blocks": "Domínios bloqueados", "column.favourites": "Favoritos", @@ -73,7 +78,7 @@ "column.mutes": "Usuários silenciados", "column.notifications": "Notificações", "column.pins": "Toots fixados", - "column.public": "Global", + "column.public": "Linha global", "column_back_button.label": "Voltar", "column_header.hide_settings": "Ocultar configurações", "column_header.moveLeft_settings": "Mover coluna para a esquerda", @@ -82,26 +87,26 @@ "column_header.show_settings": "Mostrar configurações", "column_header.unpin": "Desafixar", "column_subheading.settings": "Configurações", - "community.column_settings.local_only": "Apenas local", - "community.column_settings.media_only": "Somente Mídia", - "community.column_settings.remote_only": "Apenas remoto", + "community.column_settings.local_only": "Somente local", + "community.column_settings.media_only": "Somente mídia", + "community.column_settings.remote_only": "Somente global", "compose_form.direct_message_warning": "Este toot só será enviado aos usuários mencionados.", "compose_form.direct_message_warning_learn_more": "Saiba mais", - "compose_form.hashtag_warning": "Este toot não vai estar listado em nenhuma hashtag porque está como não-listado. Somente toots públicos podem ser pesquisados por hashtag.", - "compose_form.lock_disclaimer": "Sua conta não está {locked}. Qualquer pessoa pode te seguir e ver seus toots privados.", - "compose_form.lock_disclaimer.lock": "trancada", + "compose_form.hashtag_warning": "Este toot não aparecerá em nenhuma hashtag porque está como não-listado. Somente toots públicos podem ser pesquisados por hashtag.", + "compose_form.lock_disclaimer": "Seu perfil não está {locked}. Qualquer um pode te seguir e ver os toots privados.", + "compose_form.lock_disclaimer.lock": "trancado", "compose_form.placeholder": "No que você está pensando?", - "compose_form.poll.add_option": "Adicionar uma escolha", + "compose_form.poll.add_option": "Adicionar opção", "compose_form.poll.duration": "Duração da enquete", - "compose_form.poll.option_placeholder": "Escolha {number}", - "compose_form.poll.remove_option": "Remover esta escolha", - "compose_form.poll.switch_to_multiple": "Alterar enquete para permitir múltiplas escolhas", - "compose_form.poll.switch_to_single": "Alterar enquete para permitir uma única escolha", + "compose_form.poll.option_placeholder": "Opção {number}", + "compose_form.poll.remove_option": "Remover opção", + "compose_form.poll.switch_to_multiple": "Permitir múltiplas escolhas", + "compose_form.poll.switch_to_single": "Opção única", "compose_form.publish": "TOOT", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Marcar mídia como sensível", - "compose_form.sensitive.marked": "Mídia está marcada como sensível", - "compose_form.sensitive.unmarked": "Mídia não está marcada como sensível", + "compose_form.sensitive.hide": "{count, plural, one {Marcar mídia como sensível} other {Marcar mídias como sensível}}", + "compose_form.sensitive.marked": "{count, plural, one {Mídia marcada como sensível} other {Mídias marcadas como sensível}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Mídia não está marcada como sensível} other {Mídias não estão marcadas como sensível}}", "compose_form.spoiler.marked": "Com Aviso de Conteúdo", "compose_form.spoiler.unmarked": "Sem Aviso de Conteúdo", "compose_form.spoiler_placeholder": "Aviso de Conteúdo aqui", @@ -110,15 +115,17 @@ "confirmations.block.confirm": "Bloquear", "confirmations.block.message": "Você tem certeza de que deseja bloquear {name}?", "confirmations.delete.confirm": "Excluir", - "confirmations.delete.message": "Tem certeza que quer excluir este status?", + "confirmations.delete.message": "Você tem certeza de que deseja excluir este toot?", "confirmations.delete_list.confirm": "Excluir", "confirmations.delete_list.message": "Você tem certeza de que deseja excluir esta lista?", - "confirmations.domain_block.confirm": "Bloquear domínio inteiro", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", + "confirmations.domain_block.confirm": "Bloquear instância", "confirmations.domain_block.message": "Você tem certeza de que deseja bloquear tudo de {domain}? Você não verá mais o conteúdo desta instância em nenhuma linha do tempo pública ou nas suas notificações. Seus seguidores desta instância serão removidos.", "confirmations.logout.confirm": "Sair", "confirmations.logout.message": "Você tem certeza de que deseja sair?", "confirmations.mute.confirm": "Silenciar", - "confirmations.mute.explanation": "Isso ocultará toots deles e toots mencionando-os, mas ainda permitirá que eles vejam seus toots e te sigam.", + "confirmations.mute.explanation": "Isso ocultará toots do usuário e toots que o mencionam, mas ainda permitirá que ele veja teus toots e te siga.", "confirmations.mute.message": "Você tem certeza de que deseja silenciar {name}?", "confirmations.redraft.confirm": "Excluir e rascunhar", "confirmations.redraft.message": "Você tem certeza de que deseja apagar o toot e usá-lo como rascunho? Boosts e favoritos serão perdidos e as respostas ao toot original ficarão desconectadas.", @@ -131,60 +138,60 @@ "conversation.open": "Ver conversa", "conversation.with": "Com {names}", "directory.federated": "Do fediverso conhecido", - "directory.local": "Apenas do {domain}", + "directory.local": "Somente de {domain}", "directory.new_arrivals": "Acabaram de chegar", "directory.recently_active": "Ativos recentemente", - "embed.instructions": "Incorpore este status em seu website ao copiar o código abaixo.", + "embed.instructions": "Incorpore este toot no seu site ao copiar o código abaixo.", "embed.preview": "Aqui está como vai ficar:", "emoji_button.activity": "Atividade", "emoji_button.custom": "Personalizados", "emoji_button.flags": "Bandeiras", - "emoji_button.food": "Comida & Bebida", - "emoji_button.label": "Inserir emoji", + "emoji_button.food": "Comida e Bebida", + "emoji_button.label": "Adicionar emoji", "emoji_button.nature": "Natureza", "emoji_button.not_found": "Sem emojis! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Objetos", "emoji_button.people": "Pessoas", - "emoji_button.recent": "Usados frequentemente", + "emoji_button.recent": "Mais usados", "emoji_button.search": "Pesquisar...", - "emoji_button.search_results": "Resultados da pesquisa", + "emoji_button.search_results": "Resultado da pesquisa", "emoji_button.symbols": "Símbolos", - "emoji_button.travel": "Viagem & Lugares", + "emoji_button.travel": "Viagem e Lugares", "empty_column.account_suspended": "Conta suspensa", - "empty_column.account_timeline": "Nada aqui!", + "empty_column.account_timeline": "Nada aqui.", "empty_column.account_unavailable": "Perfil indisponível", "empty_column.blocks": "Nada aqui.", "empty_column.bookmarked_statuses": "Nada aqui. Quando você salvar um toot, ele aparecerá aqui.", - "empty_column.community": "A linha do tempo local está vazia. Escreva algo publicamente para fazer a bola rolar!", + "empty_column.community": "A linha local está vazia. Publique algo para começar!", "empty_column.direct": "Nada aqui. Quando você enviar ou receber toots diretos, eles aparecerão aqui.", - "empty_column.domain_blocks": "Não há domínios bloqueados ainda.", + "empty_column.domain_blocks": "Nada aqui.", "empty_column.favourited_statuses": "Nada aqui. Quando você favoritar um toot, ele aparecerá aqui.", "empty_column.favourites": "Nada aqui. Quando alguém favoritar, o autor aparecerá aqui.", - "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.follow_recommendations": "Parece que não há sugestões para você. Tente usar a pesquisa para encontrar pessoas que você possa conhecer ou explorar hashtags.", "empty_column.follow_requests": "Nada aqui. Quando você tiver seguidores pendentes, eles aparecerão aqui.", "empty_column.hashtag": "Nada aqui.", - "empty_column.home": "Sua linha do tempo está vazia! Visite {public} ou use a pesquisa para começar e conhecer outros usuários.", - "empty_column.home.suggestions": "See some suggestions", - "empty_column.list": "Não há nada nesta lista ainda. Quando membros desta lista postarem novos statuses, eles vão aparecer aqui.", + "empty_column.home": "Sua página inicial está vazia! Siga mais pessoas para começar: {suggestions}", + "empty_column.home.suggestions": "Veja algumas sugestões", + "empty_column.list": "Nada aqui. Quando membros da lista tootarem, eles aparecerão aqui.", "empty_column.lists": "Nada aqui. Quando você criar listas, elas aparecerão aqui.", "empty_column.mutes": "Nada aqui.", - "empty_column.notifications": "Nada aqui. Interaja com outros usuários para começar a conversar.", - "empty_column.public": "Não há nada aqui! Escreva algo publicamente, ou siga manualmente usuários de outros servidores para enchê-la", - "error.unexpected_crash.explanation": "Devido a um bug em nosso código ou um problema de compatibilidade de navegador, esta página não pôde ser exibida corretamente.", - "error.unexpected_crash.explanation_addons": "Esta página não pôde ser exibida corretamente. Este erro provavelmente é causado por um complemento do navegador ou ferramentas de tradução automática.", - "error.unexpected_crash.next_steps": "Tente atualizar a página. Se não resolver, você ainda pode conseguir usar o Mastodon por meio de um navegador ou app nativo diferente.", - "error.unexpected_crash.next_steps_addons": "Tente desabilitá-los e atualizar a página. Se isso não ajudar, você ainda poderá usar o Mastodon por meio de um navegador diferente ou de um aplicativo nativo.", - "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace para área de transferência", - "errors.unexpected_crash.report_issue": "Denunciar problema", - "follow_recommendations.done": "Done", - "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", - "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", + "empty_column.notifications": "Interaja com outros usuários para começar a conversar.", + "empty_column.public": "Publique algo ou siga manualmente usuários de outros servidores", + "error.unexpected_crash.explanation": "Esta página não pôde ser mostrada corretamente. Este erro provavelmente é devido a um bug em nosso código ou um problema de compatibilidade de navegador.", + "error.unexpected_crash.explanation_addons": "Esta página não pôde ser mostrada corretamente. Este erro provavelmente é causado por um complemento do navegador ou ferramentas de tradução automática.", + "error.unexpected_crash.next_steps": "Tente atualizar a página. Se isso não ajudar, você ainda poderá usar o Mastodon por meio de um navegador diferente ou de um aplicativo nativo.", + "error.unexpected_crash.next_steps_addons": "Tente desativá-los e atualizar a página. Se isso não ajudar, você ainda poderá usar o Mastodon por meio de um navegador diferente ou de um aplicativo nativo.", + "errors.unexpected_crash.copy_stacktrace": "Copiar dados do erro para área de transferência", + "errors.unexpected_crash.report_issue": "Reportar problema", + "follow_recommendations.done": "Salvar", + "follow_recommendations.heading": "Siga pessoas que você gostaria de acompanhar! Aqui estão algumas sugestões.", + "follow_recommendations.lead": "Toots de pessoas que você segue aparecerão em ordem cronológica na página inicial. Não tenha medo de cometer erros, você pode facilmente deixar de seguir a qualquer momento!", "follow_request.authorize": "Aprovar", - "follow_request.reject": "Vetar", - "follow_requests.unlocked_explanation": "Embora sua conta não esteja trancada, o staff de {domain} achou que você podia querer revisar pedidos para te seguir destas contas manualmente.", + "follow_request.reject": "Recusar", + "follow_requests.unlocked_explanation": "Apesar de seu perfil não ser trancado, {domain} exige que você revise a solicitação para te seguir destes perfis manualmente.", "generic.saved": "Salvo", "getting_started.developers": "Desenvolvedores", - "getting_started.directory": "Diretório de perfis", + "getting_started.directory": "Centro de usuários", "getting_started.documentation": "Documentação", "getting_started.heading": "Primeiros passos", "getting_started.invite": "Convidar pessoas", @@ -194,93 +201,93 @@ "hashtag.column_header.tag_mode.all": "e {additional}", "hashtag.column_header.tag_mode.any": "ou {additional}", "hashtag.column_header.tag_mode.none": "sem {additional}", - "hashtag.column_settings.select.no_options_message": "Nenhuma sugestão encontrada", + "hashtag.column_settings.select.no_options_message": "Sem sugestões", "hashtag.column_settings.select.placeholder": "Insira hashtags…", - "hashtag.column_settings.tag_mode.all": "Todas estas", - "hashtag.column_settings.tag_mode.any": "Qualquer uma destas", - "hashtag.column_settings.tag_mode.none": "Nenhuma destas", - "hashtag.column_settings.tag_toggle": "Incluir tags adicionais para esta coluna", + "hashtag.column_settings.tag_mode.all": "Todas", + "hashtag.column_settings.tag_mode.any": "Qualquer uma", + "hashtag.column_settings.tag_mode.none": "Nenhuma", + "hashtag.column_settings.tag_toggle": "Adicionar mais hashtags aqui", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar boosts", "home.column_settings.show_replies": "Mostrar respostas", - "home.hide_announcements": "Esconder anúncios", - "home.show_announcements": "Mostrar anúncios", + "home.hide_announcements": "Ocultar comunicados", + "home.show_announcements": "Mostrar comunicados", "intervals.full.days": "{number, plural, one {# dia} other {# dias}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", "keyboard_shortcuts.back": "voltar", - "keyboard_shortcuts.blocked": "abrir lista de usuários bloqueados", + "keyboard_shortcuts.blocked": "abrir usuários bloqueados", "keyboard_shortcuts.boost": "dar boost", - "keyboard_shortcuts.column": "para focar um status de uma das colunas", - "keyboard_shortcuts.compose": "focar na composição", + "keyboard_shortcuts.column": "focar na coluna", + "keyboard_shortcuts.compose": "focar no compositor", "keyboard_shortcuts.description": "Descrição", - "keyboard_shortcuts.direct": "abrir Mensagens Diretas", - "keyboard_shortcuts.down": "para mover para baixo na lista", - "keyboard_shortcuts.enter": "para abrir status", - "keyboard_shortcuts.favourite": "favoritar", - "keyboard_shortcuts.favourites": "abrir os favoritos", - "keyboard_shortcuts.federated": "para abrir linha do tempo federada", + "keyboard_shortcuts.direct": "abrir toots diretos", + "keyboard_shortcuts.down": "mover para baixo", + "keyboard_shortcuts.enter": "abrir toot", + "keyboard_shortcuts.favourite": "favoritar toot", + "keyboard_shortcuts.favourites": "abrir favoritos", + "keyboard_shortcuts.federated": "abrir linha global", "keyboard_shortcuts.heading": "Atalhos de teclado", - "keyboard_shortcuts.home": "para abrir linha do tempo de início", + "keyboard_shortcuts.home": "abrir página inicial", "keyboard_shortcuts.hotkey": "Atalho", "keyboard_shortcuts.legend": "mostrar estes atalhos", - "keyboard_shortcuts.local": "para abrir linha do tempo local", - "keyboard_shortcuts.mention": "para mencionar autor", - "keyboard_shortcuts.muted": "abrir lista de usuários silenciados", - "keyboard_shortcuts.my_profile": "para abrir seu perfil", - "keyboard_shortcuts.notifications": "para abrir coluna de notificações", - "keyboard_shortcuts.open_media": "para abrir mídia", + "keyboard_shortcuts.local": "abrir linha local", + "keyboard_shortcuts.mention": "mencionar usuário", + "keyboard_shortcuts.muted": "abrir usuários silenciados", + "keyboard_shortcuts.my_profile": "abrir seu perfil", + "keyboard_shortcuts.notifications": "abrir notificações", + "keyboard_shortcuts.open_media": "abrir mídia", "keyboard_shortcuts.pinned": "abrir toots fixados", - "keyboard_shortcuts.profile": "para abrir perfil do autor", - "keyboard_shortcuts.reply": "para responder", - "keyboard_shortcuts.requests": "abrir lista de seguidores pendentes", - "keyboard_shortcuts.search": "para focar pesquisa", - "keyboard_shortcuts.spoilers": "para mostrar/ocultar o campo AC", - "keyboard_shortcuts.start": "para abrir coluna \"primeiros passos\"", - "keyboard_shortcuts.toggle_hidden": "mostrar/ocultar o toot com Aviso de Conteúdo", + "keyboard_shortcuts.profile": "abrir perfil do usuário", + "keyboard_shortcuts.reply": "responder toot", + "keyboard_shortcuts.requests": "abrir seguidores pendentes", + "keyboard_shortcuts.search": "focar na pesquisa", + "keyboard_shortcuts.spoilers": "ativar/desativar aviso de conteúdo", + "keyboard_shortcuts.start": "abrir primeiros passos", + "keyboard_shortcuts.toggle_hidden": "expandir/ocultar aviso de conteúdo", "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar mídia", - "keyboard_shortcuts.toot": "para começar um toot novo em folha", - "keyboard_shortcuts.unfocus": "para desfocar de área de texto de composição/pesquisa", - "keyboard_shortcuts.up": "para mover para cima na lista", + "keyboard_shortcuts.toot": "compor novo toot", + "keyboard_shortcuts.unfocus": "desfocar de tudo", + "keyboard_shortcuts.up": "mover para cima", "lightbox.close": "Fechar", - "lightbox.compress": "Compactar caixa de visualização de imagem", - "lightbox.expand": "Expandir caixa de visualização de imagem", + "lightbox.compress": "Fechar imagem", + "lightbox.expand": "Abrir imagem", "lightbox.next": "Próximo", "lightbox.previous": "Anterior", "lists.account.add": "Adicionar à lista", "lists.account.remove": "Remover da lista", "lists.delete": "Excluir lista", "lists.edit": "Editar lista", - "lists.edit.submit": "Renomear", + "lists.edit.submit": "Renomear lista", "lists.new.create": "Criar lista", "lists.new.title_placeholder": "Nome da lista", "lists.replies_policy.followed": "Qualquer usuário seguido", "lists.replies_policy.list": "Membros da lista", "lists.replies_policy.none": "Ninguém", "lists.replies_policy.title": "Mostrar respostas para:", - "lists.search": "Procurar entre as pessoas que você segue", + "lists.search": "Procurar entre as pessoas que segue", "lists.subheading": "Suas listas", "load_pending": "{count, plural, one {# novo item} other {# novos items}}", "loading_indicator.label": "Carregando...", - "media_gallery.toggle_visible": "Esconder mídia", + "media_gallery.toggle_visible": "{number, plural, one {Ocultar mídia} other {Ocultar mídias}}", "missing_indicator.label": "Não encontrado", - "missing_indicator.sublabel": "Esse recurso não pôde ser encontrado", + "missing_indicator.sublabel": "Recurso não encontrado", "mute_modal.duration": "Duração", "mute_modal.hide_notifications": "Ocultar notificações deste usuário?", - "mute_modal.indefinite": "Indefinida", + "mute_modal.indefinite": "Indefinido", "navigation_bar.apps": "Aplicativos", "navigation_bar.blocks": "Usuários bloqueados", "navigation_bar.bookmarks": "Salvos", "navigation_bar.community_timeline": "Linha do tempo local", "navigation_bar.compose": "Compor novo toot", - "navigation_bar.direct": "Mensagens diretas", + "navigation_bar.direct": "Toots diretos", "navigation_bar.discover": "Descobrir", "navigation_bar.domain_blocks": "Domínios bloqueados", "navigation_bar.edit_profile": "Editar perfil", "navigation_bar.favourites": "Favoritos", "navigation_bar.filters": "Palavras filtradas", "navigation_bar.follow_requests": "Seguidores pendentes", - "navigation_bar.follows_and_followers": "Seguindo e seguidores", + "navigation_bar.follows_and_followers": "Segue e seguidores", "navigation_bar.info": "Sobre este servidor", "navigation_bar.keyboard_shortcuts": "Atalhos de teclado", "navigation_bar.lists": "Listas", @@ -289,70 +296,71 @@ "navigation_bar.personal": "Pessoal", "navigation_bar.pins": "Toots fixados", "navigation_bar.preferences": "Preferências", - "navigation_bar.public_timeline": "Linha do tempo federada", + "navigation_bar.public_timeline": "Linha global", "navigation_bar.security": "Segurança", - "notification.favourite": "{name} favoritou seu status", + "notification.favourite": "{name} favoritou teu toot", "notification.follow": "{name} te seguiu", "notification.follow_request": "{name} quer te seguir", "notification.mention": "{name} te mencionou", "notification.own_poll": "Sua enquete terminou", "notification.poll": "Uma enquete que você votou terminou", - "notification.reblog": "{name} boostou seu status", - "notification.status": "{name} acabou de postar", + "notification.reblog": "{name} deu boost no teu toot", + "notification.status": "{name} acabou de tootar", "notifications.clear": "Limpar notificações", "notifications.clear_confirmation": "Você tem certeza de que deseja limpar todas as suas notificações?", "notifications.column_settings.alert": "Notificações no computador", "notifications.column_settings.favourite": "Favoritos:", "notifications.column_settings.filter_bar.advanced": "Mostrar todas as categorias", - "notifications.column_settings.filter_bar.category": "Barra de filtro rápido", + "notifications.column_settings.filter_bar.category": "Barra de filtro rápido das notificações", "notifications.column_settings.filter_bar.show": "Mostrar", "notifications.column_settings.follow": "Seguidores:", "notifications.column_settings.follow_request": "Seguidores pendentes:", "notifications.column_settings.mention": "Menções:", "notifications.column_settings.poll": "Enquetes:", - "notifications.column_settings.push": "Enviar notificações", - "notifications.column_settings.reblog": "Melhoramentos:", - "notifications.column_settings.show": "Mostrar nas colunas", + "notifications.column_settings.push": "Notificações push", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Mostrar na coluna", "notifications.column_settings.sound": "Tocar som", "notifications.column_settings.status": "Novos toots:", - "notifications.column_settings.unread_markers.category": "Unread notification markers", + "notifications.column_settings.unread_markers.category": "Marcar como não lidas", "notifications.filter.all": "Tudo", - "notifications.filter.boosts": "Melhoramentos", + "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favoritos", - "notifications.filter.follows": "Seguindo", + "notifications.filter.follows": "Seguidores", "notifications.filter.mentions": "Menções", - "notifications.filter.polls": "Resultados de enquete", - "notifications.filter.statuses": "Atualizações de pessoas que você segue", - "notifications.grant_permission": "Conceder permissão.", + "notifications.filter.polls": "Enquetes", + "notifications.filter.statuses": "Novos toots", + "notifications.grant_permission": "Permita notificações.", "notifications.group": "{count} notificações", - "notifications.mark_as_read": "Marcar todas as notificações como lidas", - "notifications.permission_denied": "Não é possível habilitar as notificações da área de trabalho pois a permissão foi negada.", - "notifications.permission_denied_alert": "As notificações da área de trabalho não podem ser habilitdas pois a permissão do navegador foi negada antes", - "notifications.permission_required": "Notificações da área de trabalho não estão disponíveis porque a permissão necessária não foi concedida.", - "notifications_permission_banner.enable": "Habilitar notificações da área de trabalho", - "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, habilite as notificações da área de trabalho. Você pode controlar precisamente quais tipos de interações geram notificações da área de trabalho através do botão {icon} acima uma vez habilitadas.", + "notifications.mark_as_read": "Marcar como lidas", + "notifications.permission_denied": "Navegador não tem permissão para ativar notificações no computador.", + "notifications.permission_denied_alert": "Verifique a permissão do navegador para ativar notificações no computador.", + "notifications.permission_required": "Ativar notificações no computador exige permissão do navegador.", + "notifications_permission_banner.enable": "Ativar notificações no computador", + "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, ative as notificações no computador. Você pode controlar precisamente quais tipos de interações geram notificações no computador através do botão {icon}.", "notifications_permission_banner.title": "Nunca perca nada", - "picture_in_picture.restore": "Colocar de volta", - "poll.closed": "Fechou", + "picture_in_picture.restore": "Por de volta", + "poll.closed": "Terminou", "poll.refresh": "Atualizar", "poll.total_people": "{count, plural, one {# pessoa} other {# pessoas}}", "poll.total_votes": "{count, plural, one {# voto} other {# votos}}", "poll.vote": "Votar", - "poll.voted": "Você votou nesta resposta", - "poll_button.add_poll": "Adicionar uma enquete", + "poll.voted": "Você votou nesta opção", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", + "poll_button.add_poll": "Adicionar enquete", "poll_button.remove_poll": "Remover enquete", - "privacy.change": "Ajustar privacidade de status", - "privacy.direct.long": "Visível somente para usuários mencionados", - "privacy.direct.short": "Direta", - "privacy.private.long": "Visível somente para seguidores", - "privacy.private.short": "Seguidores-somente", - "privacy.public.long": "Visível para todos, mostrado em linhas do tempo públicas", - "privacy.public.short": "Pública", - "privacy.unlisted.long": "Visível para todos, mas não em linhas do tempo públicas", - "privacy.unlisted.short": "Não-listada", + "privacy.change": "Alterar privacidade do toot", + "privacy.direct.long": "Postar só para usuários mencionados", + "privacy.direct.short": "Direto", + "privacy.private.long": "Postar só para seguidores", + "privacy.private.short": "Privado", + "privacy.public.long": "Postar em linhas públicas", + "privacy.public.short": "Público", + "privacy.unlisted.long": "Não postar em linhas públicas", + "privacy.unlisted.short": "Não-listado", "refresh": "Atualizar", "regeneration_indicator.label": "Carregando…", - "regeneration_indicator.sublabel": "Seu feed de início está sendo preparado!", + "regeneration_indicator.sublabel": "Sua página inicial está sendo preparada!", "relative_time.days": "{number}d", "relative_time.hours": "{number}h", "relative_time.just_now": "agora", @@ -361,16 +369,16 @@ "relative_time.today": "hoje", "reply_indicator.cancel": "Cancelar", "report.forward": "Encaminhar para {target}", - "report.forward_hint": "A conta é de outro servidor. Enviar uma cópia anonimizada da denúncia para lá também?", - "report.hint": "Sua denúncia vai ser enviada aos moderadores de seu servidor. Você pode prover uma explicação de por que está denunciando essa conta abaixo:", - "report.placeholder": "Comentários adicionais", + "report.forward_hint": "A conta está em outra instância. Enviar uma cópia anônima da denúncia para lá?", + "report.hint": "A denúncia será enviada aos moderadores da instância. Explique por que denunciou a conta:", + "report.placeholder": "Comentários adicionais aqui", "report.submit": "Enviar", "report.target": "Denunciando {target}", "search.placeholder": "Pesquisar", "search_popout.search_format": "Formato de pesquisa avançada", - "search_popout.tips.full_text": "Texto simples retorna statuses que você escreveu, favoritou, deu boost, ou em que foi mencionado, assim como nomes de usuário e de exibição, e hashtags correspondentes.", + "search_popout.tips.full_text": "Texto simples retorna toots que você escreveu, favoritou, deu boost, ou em que foi mencionado, assim como nomes de usuário e de exibição, e hashtags correspondentes.", "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", + "search_popout.tips.status": "toot", "search_popout.tips.text": "Texto simples retorna nomes de exibição e de usuário, e hashtags correspondentes", "search_popout.tips.user": "usuário", "search_results.accounts": "Pessoas", @@ -379,97 +387,98 @@ "search_results.statuses_fts_disabled": "Pesquisar toots por seu conteúdo não está ativado nesta instância Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", "status.admin_account": "Abrir interface de moderação para @{name}", - "status.admin_status": "Abrir este status na interface de moderação", + "status.admin_status": "Abrir este toot na interface de moderação", "status.block": "Bloquear @{name}", "status.bookmark": "Salvar", - "status.cancel_reblog_private": "Desboostar", - "status.cannot_reblog": "Este post não pode ser dado boost", - "status.copy": "Copiar link para status", + "status.cancel_reblog_private": "Desfazer boost", + "status.cannot_reblog": "Este toot não pode receber boost", + "status.copy": "Copiar link", "status.delete": "Excluir", "status.detailed_status": "Visão detalhada da conversa", - "status.direct": "Enviar mensagem direta para @{name}", + "status.direct": "Enviar toot direto para @{name}", "status.embed": "Incorporar", "status.favourite": "Favoritar", "status.filtered": "Filtrado", - "status.load_more": "Carregar mais", - "status.media_hidden": "Mídia escondida", + "status.load_more": "Ver mais", + "status.media_hidden": "Mídia sensível", "status.mention": "Mencionar @{name}", "status.more": "Mais", "status.mute": "Silenciar @{name}", "status.mute_conversation": "Silenciar conversa", - "status.open": "Expandir este status", - "status.pin": "Fixar no perfil", + "status.open": "Abrir toot", + "status.pin": "Fixar", "status.pinned": "Toot fixado", "status.read_more": "Ler mais", - "status.reblog": "Boostar", - "status.reblog_private": "Boostar para audiência original", - "status.reblogged_by": "{name} boostou", - "status.reblogs.empty": "Nada aqui. Quando alguém der boost, o autor aparecerá aqui.", + "status.reblog": "Dar boost", + "status.reblog_private": "Dar boost para o mesmo público", + "status.reblogged_by": "{name} deu boost", + "status.reblogs.empty": "Nada aqui. Quando alguém der boost, o usuário aparecerá aqui.", "status.redraft": "Excluir e rascunhar", - "status.remove_bookmark": "Remover marcador", + "status.remove_bookmark": "Remover do Salvos", "status.reply": "Responder", - "status.replyAll": "Responder a thread", + "status.replyAll": "Responder a conversa", "status.report": "Denunciar @{name}", - "status.sensitive_warning": "Conteúdo sensível", + "status.sensitive_warning": "Mídia sensível", "status.share": "Compartilhar", "status.show_less": "Mostrar menos", - "status.show_less_all": "Mostrar menos para todos os toots", + "status.show_less_all": "Mostrar menos em tudo", "status.show_more": "Mostrar mais", - "status.show_more_all": "Mostrar mais para todos os toots", + "status.show_more_all": "Mostrar mais em tudo", "status.show_thread": "Mostrar conversa", "status.uncached_media_warning": "Não disponível", - "status.unmute_conversation": "Tirar conversa do mudo", - "status.unpin": "Desafixar do perfil", + "status.unmute_conversation": "Dessilenciar conversa", + "status.unpin": "Desafixar", "suggestions.dismiss": "Ignorar sugestão", - "suggestions.header": "Você pode estar interessado em…", - "tabs_bar.federated_timeline": "Federada", - "tabs_bar.home": "Início", - "tabs_bar.local_timeline": "Local", + "suggestions.header": "Talvez seja do teu interesse…", + "tabs_bar.federated_timeline": "Linha global", + "tabs_bar.home": "Página inicial", + "tabs_bar.local_timeline": "Linha local", "tabs_bar.notifications": "Notificações", "tabs_bar.search": "Pesquisar", "time_remaining.days": "{number, plural, one {# dia restante} other {# dias restantes}}", "time_remaining.hours": "{number, plural, one {# hora restante} other {# horas restantes}}", "time_remaining.minutes": "{number, plural, one {# minuto restante} other {# minutos restantes}}", - "time_remaining.moments": "Momentos faltantes", + "time_remaining.moments": "Momentos restantes", "time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}", - "timeline_hint.remote_resource_not_displayed": "{resource} de outros servidores não são exibidos.", + "timeline_hint.remote_resource_not_displayed": "{resource} de outros servidores não são mostrados.", "timeline_hint.resources.followers": "Seguidores", - "timeline_hint.resources.follows": "Seguindo", - "timeline_hint.resources.statuses": "Toots mais antigos", + "timeline_hint.resources.follows": "Segue", + "timeline_hint.resources.statuses": "Toots anteriores", "trends.counter_by_accounts": "{count, plural, one {{counter} pessoa} other {{counter} pessoas}} falando", - "trends.trending_now": "Em alta no momento", - "ui.beforeunload": "Seu rascunho será perdido se você sair do Mastodon.", + "trends.trending_now": "Em alta agora", + "ui.beforeunload": "Seu rascunho será perdido se sair do Mastodon.", "units.short.billion": "{count} bi", "units.short.million": "{count} mi", "units.short.thousand": "{count} mil", - "upload_area.title": "Arraste & solte para fazer upload", + "upload_area.title": "Arraste e solte para enviar", "upload_button.label": "Adicionar mídia", - "upload_error.limit": "Limite de upload de arquivos excedido.", - "upload_error.poll": "Não é possível fazer upload de arquivos com enquetes.", - "upload_form.audio_description": "Descrever para pessoas com deficiência auditiva", - "upload_form.description": "Descreva para deficientes visuais", + "upload_error.limit": "Limite de anexação alcançado.", + "upload_error.poll": "Mídias não podem ser anexadas em toots com enquetes.", + "upload_form.audio_description": "Descrever para deficientes auditivos", + "upload_form.description": "Descrever para deficientes visuais", "upload_form.edit": "Editar", "upload_form.thumbnail": "Alterar miniatura", "upload_form.undo": "Excluir", - "upload_form.video_description": "Descreva para pessoas com deficiência auditiva ou visual", + "upload_form.video_description": "Descrever para deficientes auditivos ou visuais", "upload_modal.analyzing_picture": "Analisando imagem…", "upload_modal.apply": "Aplicar", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Escolher imagem", "upload_modal.description_placeholder": "Um pequeno jabuti xereta viu dez cegonhas felizes", - "upload_modal.detect_text": "Detectar texto da imagem", + "upload_modal.detect_text": "Transcrever imagem", "upload_modal.edit_media": "Editar mídia", - "upload_modal.hint": "Clique ou arraste o círculo na prévia para escolher o ponto focal que vai estar sempre visível em todas as thumbnails.", + "upload_modal.hint": "Clique ou arraste o círculo na prévia para escolher o foco que ficará visível na miniatura.", "upload_modal.preparing_ocr": "Preparando OCR…", "upload_modal.preview_label": "Prévia ({ratio})", - "upload_progress.label": "Fazendo upload...", + "upload_progress.label": "Enviando...", "video.close": "Fechar vídeo", - "video.download": "Fazer download de arquivo", + "video.download": "Baixar", "video.exit_fullscreen": "Sair da tela cheia", - "video.expand": "Expandir vídeo", + "video.expand": "Abrir vídeo", "video.fullscreen": "Tela cheia", - "video.hide": "Ocultar vídeo", - "video.mute": "Colocar no mudo", + "video.hide": "Ocultar mídia", + "video.mute": "Sem som", "video.pause": "Pausar", - "video.play": "Tocar", - "video.unmute": "Tirar do mudo" + "video.play": "Executar", + "video.unmute": "Com som" } diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 0d5da25f7..a5cb6a335 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -47,11 +47,16 @@ "account.unmute": "Não silenciar @{name}", "account.unmute_notifications": "Deixar de silenciar @{name}", "account_note.placeholder": "Clique para adicionar nota", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Volte a tentar depois das {retry_time, time, medium}.", "alert.rate_limited.title": "Limite de tentativas", "alert.unexpected.message": "Ocorreu um erro inesperado.", "alert.unexpected.title": "Bolas!", "announcement.announcement": "Anúncio", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Pode clicar {combo} para não voltar a ver", "bundle_column_error.body": "Algo de errado aconteceu enquanto este componente era carregado.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "De certeza que quer eliminar esta publicação?", "confirmations.delete_list.confirm": "Eliminar", "confirmations.delete_list.message": "Tens a certeza de que deseja eliminar permanentemente esta lista?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Esconder tudo deste domínio", "confirmations.domain_block.message": "De certeza que queres bloquear completamente o domínio {domain}? Na maioria dos casos, silenciar ou bloquear alguns utilizadores é suficiente e é o recomendado. Não irás ver conteúdo daquele domínio em cronologia alguma nem nas tuas notificações. Os teus seguidores daquele domínio serão removidos.", "confirmations.logout.confirm": "Terminar sessão", @@ -134,7 +141,7 @@ "directory.local": "Apenas de {domain}", "directory.new_arrivals": "Recém chegados", "directory.recently_active": "Com actividade recente", - "embed.instructions": "Incorpora esta publicação no teu site copiando o código abaixo.", + "embed.instructions": "Incorpore esta publicação no seu site copiando o código abaixo.", "embed.preview": "Podes ver aqui como irá ficar:", "emoji_button.activity": "Actividade", "emoji_button.custom": "Personalizar", @@ -339,6 +346,7 @@ "poll.total_votes": "{contar, plural, um {# vote} outro {# votes}}", "poll.vote": "Votar", "poll.voted": "Votaste nesta resposta", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Adicionar votação", "poll_button.remove_poll": "Remover votação", "privacy.change": "Ajustar a privacidade da publicação", @@ -454,6 +462,7 @@ "upload_form.video_description": "Descreva para pessoas com diminuição da acuidade auditiva ou visual", "upload_modal.analyzing_picture": "A analizar imagem…", "upload_modal.apply": "Aplicar", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Escolher imagem", "upload_modal.description_placeholder": "Grave e cabisbaixo, o filho justo zelava pela querida mãe doente", "upload_modal.detect_text": "Detectar texto na imagem", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index c1a6b9883..b6cb0a86c 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -1,37 +1,37 @@ { - "account.account_note_header": "Note", - "account.add_or_remove_from_list": "Adaugă sau Elimină din liste", + "account.account_note_header": "Notă", + "account.add_or_remove_from_list": "Adaugă sau elimină din liste", "account.badges.bot": "Robot", "account.badges.group": "Grup", - "account.block": "Blocați @{name}", - "account.block_domain": "Blocați domeniul {domain}", + "account.block": "Blochează pe @{name}", + "account.block_domain": "Blochează domeniul {domain}", "account.blocked": "Blocat", - "account.browse_more_on_origin_server": "Caută mai multe în profilul original", - "account.cancel_follow_request": "Anulați cererea de urmărire", - "account.direct": "Mesaj direct @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.browse_more_on_origin_server": "Vezi mai multe pe profilul original", + "account.cancel_follow_request": "Anulează cererea de abonare", + "account.direct": "Trimite-i un mesaj direct lui @{name}", + "account.disable_notifications": "Nu îmi mai trimite notificări când postează @{name}", "account.domain_blocked": "Domeniu blocat", - "account.edit_profile": "Editați profilul", - "account.enable_notifications": "Notify me when @{name} posts", - "account.endorse": "Promovați pe profil", - "account.follow": "Urmărește", - "account.followers": "Urmăritori", - "account.followers.empty": "Acest utilizator nu are încă urmăritori.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows.empty": "Acest utilizator nu urmărește pe nimeni încă.", - "account.follows_you": "Te urmărește", - "account.hide_reblogs": "Ascunde impulsurile de la @{name}", - "account.joined": "Joined {date}", + "account.edit_profile": "Modifică profilul", + "account.enable_notifications": "Trimite-mi o notificare când postează @{name}", + "account.endorse": "Promovează pe profil", + "account.follow": "Abonează-te", + "account.followers": "Abonați", + "account.followers.empty": "Acest utilizator încă nu are abonați.", + "account.followers_counter": "{count, plural, one {{counter} Abonat} few {{counter} Abonați} other {{counter} Abonați}}", + "account.following_counter": "{count, plural, one {{counter} Abonament} few {{counter} Abonamente} other {{counter} Abonamente}}", + "account.follows.empty": "Momentan acest utilizator nu are niciun abonament.", + "account.follows_you": "Este abonat la tine", + "account.hide_reblogs": "Ascunde distribuirile de la @{name}", + "account.joined": "S-a înscris în {date}", "account.last_status": "Ultima activitate", - "account.link_verified_on": "Deținerea acestui link a fost verificată la {date}", - "account.locked_info": "Acest profil este privat. Această persoană gestionează manual cine o urmărește.", + "account.link_verified_on": "Proprietatea acestui link a fost verificată pe {date}", + "account.locked_info": "Acest profil este privat. Această persoană aprobă manual conturile care se abonează la ea.", "account.media": "Media", "account.mention": "Menționează pe @{name}", "account.moved_to": "{name} a fost mutat la:", "account.mute": "Ignoră pe @{name}", "account.mute_notifications": "Ignoră notificările de la @{name}", - "account.muted": "Oprit", + "account.muted": "Ignorat", "account.never_active": "Niciodată", "account.posts": "Postări", "account.posts_with_replies": "Postări și răspunsuri", @@ -47,318 +47,326 @@ "account.unmute": "Nu mai ignora pe @{name}", "account.unmute_notifications": "Activează notificările de la @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Vă rugăm să reîncercați după {retry_time, time, medium}.", - "alert.rate_limited.title": "Rată limitată", + "alert.rate_limited.title": "Debit limitat", "alert.unexpected.message": "A apărut o eroare neașteptată.", - "alert.unexpected.title": "Hopa!", + "alert.unexpected.title": "Ups!", "announcement.announcement": "Anunț", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} pe săptămână", - "boost_modal.combo": "Poți apăsa {combo} pentru a omite asta data viitoare", - "bundle_column_error.body": "Ceva nu a funcționat la încărcarea acestui component.", + "boost_modal.combo": "Poți apăsa {combo} pentru a sări peste asta data viitoare", + "bundle_column_error.body": "A apărut o eroare la încărcarea acestui element.", "bundle_column_error.retry": "Încearcă din nou", "bundle_column_error.title": "Eroare de rețea", "bundle_modal_error.close": "Închide", - "bundle_modal_error.message": "Ceva nu a funcționat în timpul încărcării acestei componente.", + "bundle_modal_error.message": "A apărut o eroare la încărcarea acestui element.", "bundle_modal_error.retry": "Încearcă din nou", "column.blocks": "Utilizatori blocați", "column.bookmarks": "Marcaje", - "column.community": "Fluxul local", + "column.community": "Cronologie locală", "column.direct": "Mesaje directe", - "column.directory": "Răsfoiți profiluri", + "column.directory": "Explorează profiluri", "column.domain_blocks": "Domenii blocate", "column.favourites": "Favorite", - "column.follow_requests": "Cereri de urmărire", + "column.follow_requests": "Cereri de abonare", "column.home": "Acasă", "column.lists": "Liste", "column.mutes": "Utilizatori ignorați", "column.notifications": "Notificări", "column.pins": "Postări fixate", - "column.public": "Flux global", + "column.public": "Cronologie globală", "column_back_button.label": "Înapoi", "column_header.hide_settings": "Ascunde setările", "column_header.moveLeft_settings": "Mută coloana la stânga", "column_header.moveRight_settings": "Mută coloana la dreapta", "column_header.pin": "Fixează", - "column_header.show_settings": "Arată setările", - "column_header.unpin": "Eliberează", + "column_header.show_settings": "Afișare setări", + "column_header.unpin": "Anulează fixarea", "column_subheading.settings": "Setări", "community.column_settings.local_only": "Doar local", "community.column_settings.media_only": "Doar media", "community.column_settings.remote_only": "Doar la distanţă", "compose_form.direct_message_warning": "Această postare va fi trimisă doar utilizatorilor menționați.", "compose_form.direct_message_warning_learn_more": "Află mai multe", - "compose_form.hashtag_warning": "Această postare nu va fi listată sub niciun hashtag pentru că este nelistată. Doar postările publice pot fi găsite după un hashtag.", - "compose_form.lock_disclaimer": "Contul tău nu este {locked}. Oricine te poate urmări fără aprobarea ta și vedea toate postările tale.", + "compose_form.hashtag_warning": "Această postare nu va fi listată sub niciun hashtag deoarece este nelistată. Doar postările publice pot fi căutate cu un hashtag.", + "compose_form.lock_disclaimer": "Contul tău nu este {locked}. Oricine se poate abona la tine pentru a îți vedea postările numai pentru abonați.", "compose_form.lock_disclaimer.lock": "privat", "compose_form.placeholder": "La ce te gândești?", - "compose_form.poll.add_option": "Adăugați o opțiune", + "compose_form.poll.add_option": "Adaugă o opțiune", "compose_form.poll.duration": "Durata sondajului", "compose_form.poll.option_placeholder": "Opțiunea {number}", - "compose_form.poll.remove_option": "Îndepărtați acestă opțiune", - "compose_form.poll.switch_to_multiple": "Modificați sondajul pentru a permite multiple opțiuni", - "compose_form.poll.switch_to_single": "Modificați sondajul pentru a permite o singură opțiune", + "compose_form.poll.remove_option": "Elimină acestă opțiune", + "compose_form.poll.switch_to_multiple": "Modifică sondajul pentru a permite mai multe opțiuni", + "compose_form.poll.switch_to_single": "Modifică sondajul pentru a permite o singură opțiune", "compose_form.publish": "Postează", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Marcați conținutul media ca sensibil", - "compose_form.sensitive.marked": "Conținutul media este marcat ca sensibil", - "compose_form.sensitive.unmarked": "Conținutul media nu este marcat ca sensibil", - "compose_form.spoiler.marked": "Textul este ascuns sub o avertizare", - "compose_form.spoiler.unmarked": "Textul nu este ascuns", - "compose_form.spoiler_placeholder": "Scrie avertizarea aici", + "compose_form.sensitive.hide": "{count, plural, one {Marchează conținutul media ca fiind sensibil} few {Marchează conținuturile media ca fiind sensibile} other {Marchează conținuturile media ca fiind sensibile}}", + "compose_form.sensitive.marked": "{count, plural, one {Conținutul media este marcat ca fiind sensibil} other {Conținuturile media sunt marcate ca fiind sensibile}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Conținutul media nu este marcat ca fiind sensibil} other {Conținuturile media nu sunt marcate ca fiind sensibile}}", + "compose_form.spoiler.marked": "Elimină avertismentul privind conținutul", + "compose_form.spoiler.unmarked": "Adaugă un avertisment privind conținutul", + "compose_form.spoiler_placeholder": "Scrie avertismentul aici", "confirmation_modal.cancel": "Anulează", - "confirmations.block.block_and_report": "Blocați și Raportați", + "confirmations.block.block_and_report": "Blochează și raportează", "confirmations.block.confirm": "Blochează", "confirmations.block.message": "Ești sigur că vrei să blochezi pe {name}?", - "confirmations.delete.confirm": "Șterge", - "confirmations.delete.message": "Ești sigur că vrei să ștergi asta?", - "confirmations.delete_list.confirm": "Șterge", - "confirmations.delete_list.message": "Ești sigur că vrei să ștergi permanent această listă?", - "confirmations.domain_block.confirm": "Ascunde tot domeniul", - "confirmations.domain_block.message": "Ești absolut sigur că vrei să blochezi complet domeniul {domain}? În cele mai multe cazuri raportarea sau ignorarea anumitor lucruri este suficientă și de preferat. Nu vei mai vedea niciun conținut de la acest domeniu în nici un flux public sau în notificările tale. Urmăritorii tăi de la acele domenii vor fi eliminați.", + "confirmations.delete.confirm": "Elimină", + "confirmations.delete.message": "Ești sigur că vrei să elimini această postare?", + "confirmations.delete_list.confirm": "Elimină", + "confirmations.delete_list.message": "Ești sigur că vrei să elimini definitiv această listă?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", + "confirmations.domain_block.confirm": "Blochează întregul domeniu", + "confirmations.domain_block.message": "Ești absolut sigur că vrei să blochezi tot domeniul {domain}? În cele mai multe cazuri, raportarea sau blocarea anumitor lucruri este suficientă și de preferat. Nu vei mai vedea niciun conținut din acest domeniu în vreun flux public sau în vreo notificare. Abonații tăi din acest domeniu vor fi eliminați.", "confirmations.logout.confirm": "Deconectare", "confirmations.logout.message": "Ești sigur că vrei să te deconectezi?", "confirmations.mute.confirm": "Ignoră", - "confirmations.mute.explanation": "Acest lucru va ascunde postări față de ei și postări în care sunt menționați, dar le vor permite încă să vă vadă postările și să vă urmărească.", + "confirmations.mute.explanation": "Postările acestei persoane și postările în care este menționată vor fi ascunse, însă tot va putea să îți vadă postările și să se aboneze la tine.", "confirmations.mute.message": "Ești sigur că vrei să ignori pe {name}?", - "confirmations.redraft.confirm": "Șterge și salvează ca ciornă", - "confirmations.redraft.message": "Ești sigur că vrei să ștergi această stare și să o faci ciornă? Favoritele și impulsurile se vor pierde, iar răspunsurile către postarea originală vor rămâne orfane.", + "confirmations.redraft.confirm": "Șterge și scrie din nou", + "confirmations.redraft.message": "Ești sigur că vrei să ștergi această postare și să o rescrii? Favoritele și distribuirile se vor pierde, iar răspunsurile către postarea originală vor rămâne orfane.", "confirmations.reply.confirm": "Răspunde", - "confirmations.reply.message": "Răspunzând la asta acum, mesajul pe care îl compui în prezent se va șterge. Ești sigur că vrei să continui?", - "confirmations.unfollow.confirm": "Nu mai urmări", - "confirmations.unfollow.message": "Ești sigur că nu mai vrei să urmărești pe {name}?", - "conversation.delete": "Ștergeți conversația", - "conversation.mark_as_read": "Marcați ca citit", - "conversation.open": "Vizualizați conversația", + "confirmations.reply.message": "Dacă răspunzi acum, mesajul pe care îl scrii în acest moment va fi șters. Ești sigur că vrei să continui?", + "confirmations.unfollow.confirm": "Dezabonează-te", + "confirmations.unfollow.message": "Ești sigur că vrei să te dezabonezi de la {name}?", + "conversation.delete": "Șterge conversația", + "conversation.mark_as_read": "Marchează ca citit", + "conversation.open": "Vizualizează conversația", "conversation.with": "Cu {names}", - "directory.federated": "De la un cunoscut fedivers", - "directory.local": "Doar de la {domain}", - "directory.new_arrivals": "Noi sosiți", - "directory.recently_active": "Recent activi", - "embed.instructions": "Înglobează această postare pe site-ul tău adăugând codul de mai jos.", - "embed.preview": "Cam așa va arăta:", - "emoji_button.activity": "Activitate", - "emoji_button.custom": "Personalizat", - "emoji_button.flags": "Marcaje", - "emoji_button.food": "Mâncare și Băuturi", - "emoji_button.label": "Inserează un zâmbet", + "directory.federated": "Din fediversul cunoscut", + "directory.local": "Doar din {domain}", + "directory.new_arrivals": "Înscriși recent", + "directory.recently_active": "Activi recent", + "embed.instructions": "Integrează această postare în site-ul tău copiind codul de mai jos.", + "embed.preview": "Iată cum va arăta:", + "emoji_button.activity": "Activități", + "emoji_button.custom": "Personalizați", + "emoji_button.flags": "Steaguri", + "emoji_button.food": "Alimente și băuturi", + "emoji_button.label": "Inserează un emoji", "emoji_button.nature": "Natură", - "emoji_button.not_found": "Fără zâmbete (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "Nu au fost găsite emoji-uri", "emoji_button.objects": "Obiecte", "emoji_button.people": "Persoane", - "emoji_button.recent": "Utilizate frecvent", - "emoji_button.search": "Caută...", + "emoji_button.recent": "Utilizați frecvent", + "emoji_button.search": "Căutare...", "emoji_button.search_results": "Rezultatele căutării", "emoji_button.symbols": "Simboluri", - "emoji_button.travel": "Călătorii și Locuri", - "empty_column.account_suspended": "Account suspended", + "emoji_button.travel": "Călătorii și locuri", + "empty_column.account_suspended": "Cont suspendat", "empty_column.account_timeline": "Nicio postare aici!", "empty_column.account_unavailable": "Profil indisponibil", - "empty_column.blocks": "Nu ai blocat nici un utilizator încă.", - "empty_column.bookmarked_statuses": "Nu aveți nici o postare marcată încă. Atunci când veți marca una, va fi afișată aici.", - "empty_column.community": "Fluxul local este gol. Scrie ceva public pentru a sparge gheața!", - "empty_column.direct": "Nu ai nici un mesaj direct încă. Când trimiți sau primești unul, va fi afișat aici.", - "empty_column.domain_blocks": "Nu sunt domenii blocate încă.", - "empty_column.favourited_statuses": "Nu ai nici o postare favorită încă. Când vei favoriza una, va fi afișată aici.", - "empty_column.favourites": "Nimeni nu are această postare adăugată la favorite. Când cineva o va face va fi afișat aici.", - "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", - "empty_column.follow_requests": "Nu ai încă nici o cerere de urmărire. Când vei primi una, va fi afișată aici.", - "empty_column.hashtag": "Acest hashtag nu a fost folosit încă.", - "empty_column.home": "Fluxul tău este gol. Vizitează {public} sau fă o căutare pentru a începe să cunoști oameni noi.", - "empty_column.home.suggestions": "See some suggestions", - "empty_column.list": "Nu este nimic încă în această listă. Când membrii acestei liste vor începe să posteze, va apărea aici.", - "empty_column.lists": "Nu ai încă nici o listă. Când vei crea una, va apărea aici.", - "empty_column.mutes": "Nu ai ignorat nici un utilizator încă.", - "empty_column.notifications": "Nu ai nici o notificare încă. Interacționează cu alții pentru a începe o conversație.", - "empty_column.public": "Nu este nimic aici! Scrie ceva public, sau urmărește alți utilizatori din alte instanțe pentru a porni fluxul", + "empty_column.blocks": "Momentan nu ai blocat niciun utilizator.", + "empty_column.bookmarked_statuses": "Momentan nu ai nicio postare marcată. Când vei marca una, va apărea aici.", + "empty_column.community": "Nu există nimic în cronologia locală. Postează ceva public pentru a sparge gheața!", + "empty_column.direct": "Momentan nu ai niciun mesaj direct. Când trimiți sau primești un mesaj, va apărea aici.", + "empty_column.domain_blocks": "Momentan nu există domenii blocate.", + "empty_column.favourited_statuses": "Momentan nu ai nicio postare favorită. Când vei adăuga una, va apărea aici.", + "empty_column.favourites": "Momentan nimeni nu a adăugat această postare la favorite. Când cineva o va face, va apărea aici.", + "empty_column.follow_recommendations": "Se pare că nu am putut genera nicio sugestie pentru tine. Poți încerca funcția de căutare pentru a căuta persoane pe care le cunoști, sau poți explora tendințele.", + "empty_column.follow_requests": "Momentan nu ai nicio cerere de abonare. Când vei primi una, va apărea aici.", + "empty_column.hashtag": "Acest hashtag încă nu a fost folosit.", + "empty_column.home": "Nu există nimic în cronologia ta! Abonează-te la mai multe persoane pentru a o umple. {suggestions}", + "empty_column.home.suggestions": "Vezi sugestiile", + "empty_column.list": "Momentan nu există nimic în această listă. Când membrii ei vor posta ceva nou, vor apărea aici.", + "empty_column.lists": "Momentan nu ai nicio listă. Când vei crea una, va apărea aici.", + "empty_column.mutes": "Momentan nu ai ignorat niciun utilizator.", + "empty_column.notifications": "Momentan nu ai nicio notificare. Când alte persoane vor interacționa cu tine, îl vei vedea aici.", + "empty_column.public": "Nu există nimic aici! Postează ceva public, sau abonează-te manual la utilizatori din alte servere pentru a umple cronologia", "error.unexpected_crash.explanation": "Din cauza unei erori în codul nostru sau a unei probleme de compatibilitate cu navigatorul, această pagină nu a putut fi afișată corect.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", - "error.unexpected_crash.next_steps": "Încercați să reîmprospătați pagina. Dacă acest lucru nu ajută, este posibil să mai puteți folosi site-ul printr-un navigator diferit sau o aplicație nativă.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", - "errors.unexpected_crash.copy_stacktrace": "Copiați stiva în clipboard", - "errors.unexpected_crash.report_issue": "Raportați o problemă", - "follow_recommendations.done": "Done", - "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", - "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", - "follow_request.authorize": "Autorizează", + "error.unexpected_crash.explanation_addons": "Pagina nu a putut fi afișată corect. Această eroare este cel mai probabil cauzată de o extensie a navigatorului sau de instrumente de traducere automată.", + "error.unexpected_crash.next_steps": "Încearcă să reîmprospătezi pagina. Dacă tot nu funcționează, poți accesa Mastodon dintr-un alt navigator sau dintr-o aplicație nativă.", + "error.unexpected_crash.next_steps_addons": "Încearcă să le dezactivezi și să reîmprospătezi pagina. Dacă tot nu funcționează, poți accesa Mastodon dintr-un alt navigator sau dintr-o aplicație nativă.", + "errors.unexpected_crash.copy_stacktrace": "Copiere stacktrace în clipboard", + "errors.unexpected_crash.report_issue": "Raportează o problemă", + "follow_recommendations.done": "Terminat", + "follow_recommendations.heading": "Urmărește persoanele ale căror postări te-ar interesa! Iată câteva sugestii.", + "follow_recommendations.lead": "Postările de la persoanele la care te-ai abonat vor apărea în ordine cronologică în cronologia principală. Nu-ți fie teamă să faci greșeli, poți să te dezabonezi oricând de la ei la fel de ușor!", + "follow_request.authorize": "Acceptă", "follow_request.reject": "Respinge", - "follow_requests.unlocked_explanation": "Chiar dacă contul dvs nu este blocat, personalul {domain} a crezut că ați putea dori să revizuiți cererile de la aceste conturi în mod manual.", + "follow_requests.unlocked_explanation": "Chiar dacă contul tău nu este blocat, personalul {domain} a considerat că ai putea prefera să consulți manual cererile de abonare de la aceste conturi.", "generic.saved": "Salvat", "getting_started.developers": "Dezvoltatori", - "getting_started.directory": "Explorează", + "getting_started.directory": "Catalog de profiluri", "getting_started.documentation": "Documentație", - "getting_started.heading": "Începe", - "getting_started.invite": "Invită prieteni", - "getting_started.open_source_notice": "Mastodon este o rețea de socializare de tip open source. Puteți contribuii la dezvoltarea ei sau să semnalați erorile pe GitHub la {github}.", - "getting_started.security": "Securitate", - "getting_started.terms": "Termeni de Utilizare", + "getting_started.heading": "Primii pași", + "getting_started.invite": "Invită persoane", + "getting_started.open_source_notice": "Mastodon este un software cu sursă deschisă (open source). Poți contribui la dezvoltarea lui sau raporta probleme pe GitHub la {github}.", + "getting_started.security": "Setări cont", + "getting_started.terms": "Termeni și condiții", "hashtag.column_header.tag_mode.all": "și {additional}", "hashtag.column_header.tag_mode.any": "sau {additional}", "hashtag.column_header.tag_mode.none": "fără {additional}", "hashtag.column_settings.select.no_options_message": "Nu s-au găsit sugestii", - "hashtag.column_settings.select.placeholder": "Itroduceți hashtag-uri…", + "hashtag.column_settings.select.placeholder": "Introdu hashtag-uri…", "hashtag.column_settings.tag_mode.all": "Toate acestea", "hashtag.column_settings.tag_mode.any": "Oricare din acestea", - "hashtag.column_settings.tag_mode.none": "Niciuna din acestea", - "hashtag.column_settings.tag_toggle": "Adaugă etichete adiționale pentru această coloană", + "hashtag.column_settings.tag_mode.none": "Niciuna dintre acestea", + "hashtag.column_settings.tag_toggle": "Adaugă etichete suplimentare pentru această coloană", "home.column_settings.basic": "De bază", - "home.column_settings.show_reblogs": "Arată impulsurile", - "home.column_settings.show_replies": "Arată răspunsurile", - "home.hide_announcements": "Ascundeți anunțurile", - "home.show_announcements": "Afișați anunțurile", + "home.column_settings.show_reblogs": "Afișează distribuirile", + "home.column_settings.show_replies": "Afișează răspunsurile", + "home.hide_announcements": "Ascunde anunțurile", + "home.show_announcements": "Afișează anunțurile", "intervals.full.days": "{number, plural,one {# zi} other {# zile}}", "intervals.full.hours": "{number, plural, one {# oră} other {# ore}}", "intervals.full.minutes": "{number, plural, one {# minut} other {# minute}}", - "keyboard_shortcuts.back": "navighează înapoi", - "keyboard_shortcuts.blocked": "să deschidă lista utilizatorilor blocați", - "keyboard_shortcuts.boost": "să impulsioneze", - "keyboard_shortcuts.column": "să focalizeze o postare în una dintre coloane", - "keyboard_shortcuts.compose": "sa focalizeze zona de compunere", + "keyboard_shortcuts.back": "Navighează înapoi", + "keyboard_shortcuts.blocked": "Deschide lista utilizatorilor blocați", + "keyboard_shortcuts.boost": "Distribuie postarea", + "keyboard_shortcuts.column": "Focalizează pe coloană", + "keyboard_shortcuts.compose": "Focalizează pe zona de text", "keyboard_shortcuts.description": "Descriere", - "keyboard_shortcuts.direct": "să deschidă coloana de mesaje directe", - "keyboard_shortcuts.down": "să fie mutată jos în lista", - "keyboard_shortcuts.enter": "să deschidă o stare", - "keyboard_shortcuts.favourite": "să favorizeze", - "keyboard_shortcuts.favourites": "să deschidă lista cu favorite", - "keyboard_shortcuts.federated": "să deschidă fluxul global", - "keyboard_shortcuts.heading": "Comenzi rapide", - "keyboard_shortcuts.home": "să deschidă fluxul Acasă", - "keyboard_shortcuts.hotkey": "Prescurtări", - "keyboard_shortcuts.legend": "să afișeze această legendă", - "keyboard_shortcuts.local": "să deschidă fluxul local", - "keyboard_shortcuts.mention": "să menționeze autorul", - "keyboard_shortcuts.muted": "să deschidă lista utilizatorilor ignorați", - "keyboard_shortcuts.my_profile": "să deschidă profilul tău", - "keyboard_shortcuts.notifications": "să deschidă coloana cu notificări", - "keyboard_shortcuts.open_media": "pentru a deschide media", - "keyboard_shortcuts.pinned": "să deschidă lista postărilor fixate", - "keyboard_shortcuts.profile": "să deschidă profilul autorului", - "keyboard_shortcuts.reply": "să răspundă", - "keyboard_shortcuts.requests": "să deschidă lista cu cereri de urmărire", - "keyboard_shortcuts.search": "să focalizeze căutarea", - "keyboard_shortcuts.spoilers": "pentru a afişa/ascunde câmpul CW", - "keyboard_shortcuts.start": "să deschidă coloana \"Începere\"", - "keyboard_shortcuts.toggle_hidden": "să arate/ascundă textul în spatele CW", - "keyboard_shortcuts.toggle_sensitivity": "pentru a afișa/ascunde media", - "keyboard_shortcuts.toot": "să înceapă o postare nouă", - "keyboard_shortcuts.unfocus": "să dezactiveze zona de compunere/căutare", - "keyboard_shortcuts.up": "să mute mai sus în listă", + "keyboard_shortcuts.direct": "Deschide coloana de mesaje directe", + "keyboard_shortcuts.down": "Coboară în listă", + "keyboard_shortcuts.enter": "Deschide postarea", + "keyboard_shortcuts.favourite": "Adaugă postarea la favorite", + "keyboard_shortcuts.favourites": "Deschide lista de favorite", + "keyboard_shortcuts.federated": "Afișează cronologia globală", + "keyboard_shortcuts.heading": "Comenzi rapide ale tastaturii", + "keyboard_shortcuts.home": "Afișează cronologia principală", + "keyboard_shortcuts.hotkey": "Tastă rapidă", + "keyboard_shortcuts.legend": "Afișează această legendă", + "keyboard_shortcuts.local": "Deschide cronologia locală", + "keyboard_shortcuts.mention": "Menționează autorul", + "keyboard_shortcuts.muted": "Deschide lista utilizatorilor ignorați", + "keyboard_shortcuts.my_profile": "Afișează propriul profil", + "keyboard_shortcuts.notifications": "Deschide coloana cu notificări", + "keyboard_shortcuts.open_media": "Deschide media", + "keyboard_shortcuts.pinned": "Deschide lista postărilor fixate", + "keyboard_shortcuts.profile": "Afișează profilul autorului", + "keyboard_shortcuts.reply": "Răspunde la postare", + "keyboard_shortcuts.requests": "Deschide lista de cereri de abonare", + "keyboard_shortcuts.search": "Focalizează pe bara de căutare", + "keyboard_shortcuts.spoilers": "Afișează/ascunde câmpul CW", + "keyboard_shortcuts.start": "Deschide coloana \"Primii pași\"", + "keyboard_shortcuts.toggle_hidden": "Afișează/ascunde textul din spatele CW", + "keyboard_shortcuts.toggle_sensitivity": "Afișează/ascunde media", + "keyboard_shortcuts.toot": "Începe o postare nouă", + "keyboard_shortcuts.unfocus": "Părăsește zona de text/bara de căutare", + "keyboard_shortcuts.up": "Urcă în listă", "lightbox.close": "Închide", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", - "lightbox.next": "Următorul", - "lightbox.previous": "Precedentul", + "lightbox.compress": "Închide panoul de vizualizare a imaginilor", + "lightbox.expand": "Deschide panoul de vizualizare a imaginilor", + "lightbox.next": "Înainte", + "lightbox.previous": "Înapoi", "lists.account.add": "Adaugă în listă", "lists.account.remove": "Elimină din listă", "lists.delete": "Șterge lista", - "lists.edit": "Editează lista", + "lists.edit": "Modifică lista", "lists.edit.submit": "Schimbă titlul", - "lists.new.create": "Adaugă listă", + "lists.new.create": "Adaugă o listă", "lists.new.title_placeholder": "Titlu pentru noua listă", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "Nimeni", - "lists.replies_policy.title": "Show replies to:", - "lists.search": "Caută printre persoanele pe care le urmărești", + "lists.replies_policy.followed": "Tuturor persoanelor la care te-ai abonat", + "lists.replies_policy.list": "Membrilor din listă", + "lists.replies_policy.none": "Nu afișa nimănui", + "lists.replies_policy.title": "Afișează răspunsurile:", + "lists.search": "Caută printre persoanele la care ești abonat", "lists.subheading": "Listele tale", "load_pending": "{count, plural, one {# element nou} other {# elemente noi}}", "loading_indicator.label": "Se încarcă...", - "media_gallery.toggle_visible": "Ascunde media", + "media_gallery.toggle_visible": "{number, plural, one {Ascunde imaginea} other {Ascunde imaginile}}", "missing_indicator.label": "Nu a fost găsit", "missing_indicator.sublabel": "Această resursă nu a putut fi găsită", "mute_modal.duration": "Durata", - "mute_modal.hide_notifications": "Ascunzi notificările de la acest utilizator?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.hide_notifications": "Ascunde notificările de la acest utilizator?", + "mute_modal.indefinite": "Nedeterminat", "navigation_bar.apps": "Aplicații mobile", "navigation_bar.blocks": "Utilizatori blocați", "navigation_bar.bookmarks": "Marcaje", - "navigation_bar.community_timeline": "Flux local", + "navigation_bar.community_timeline": "Cronologie locală", "navigation_bar.compose": "Compune o nouă postare", "navigation_bar.direct": "Mesaje directe", "navigation_bar.discover": "Descoperă", "navigation_bar.domain_blocks": "Domenii blocate", - "navigation_bar.edit_profile": "Editează profilul", + "navigation_bar.edit_profile": "Modifică profilul", "navigation_bar.favourites": "Favorite", "navigation_bar.filters": "Cuvinte ignorate", - "navigation_bar.follow_requests": "Cereri de urmărire", - "navigation_bar.follows_and_followers": "Urmăriri și urmăritori", + "navigation_bar.follow_requests": "Cereri de abonare", + "navigation_bar.follows_and_followers": "Abonamente și abonați", "navigation_bar.info": "Despre această instanță", - "navigation_bar.keyboard_shortcuts": "Prescurtări", + "navigation_bar.keyboard_shortcuts": "Taste rapide", "navigation_bar.lists": "Liste", "navigation_bar.logout": "Deconectare", "navigation_bar.mutes": "Utilizatori ignorați", - "navigation_bar.personal": "Personale", + "navigation_bar.personal": "Personal", "navigation_bar.pins": "Postări fixate", "navigation_bar.preferences": "Preferințe", - "navigation_bar.public_timeline": "Flux global", + "navigation_bar.public_timeline": "Cronologie globală", "navigation_bar.security": "Securitate", "notification.favourite": "{name} a adăugat postarea ta la favorite", - "notification.follow": "{name} te urmărește", - "notification.follow_request": "{name} a cerut să te urmărească", + "notification.follow": "{name} s-a abonat la tine", + "notification.follow_request": "{name} a trimis o cerere de abonare", "notification.mention": "{name} te-a menționat", - "notification.own_poll": "Sondajul tău s-a sfârșit", - "notification.poll": "Un sondaj la care ai votat s-a sfârșit", - "notification.reblog": "{name} a impulsionat postarea ta", - "notification.status": "{name} just posted", + "notification.own_poll": "Sondajul tău s-a încheiat", + "notification.poll": "Un sondaj pentru care ai votat s-a încheiat", + "notification.reblog": "{name} ți-a distribuit postarea", + "notification.status": "{name} tocmai a postat", "notifications.clear": "Șterge notificările", "notifications.clear_confirmation": "Ești sigur că vrei să ștergi permanent toate notificările?", "notifications.column_settings.alert": "Notificări pe desktop", "notifications.column_settings.favourite": "Favorite:", "notifications.column_settings.filter_bar.advanced": "Afișează toate categoriile", "notifications.column_settings.filter_bar.category": "Bară de filtrare rapidă", - "notifications.column_settings.filter_bar.show": "Arată", - "notifications.column_settings.follow": "Noi urmăritori:", - "notifications.column_settings.follow_request": "Noi cereri de urmărire:", + "notifications.column_settings.filter_bar.show": "Afișează", + "notifications.column_settings.follow": "Noi abonați:", + "notifications.column_settings.follow_request": "Noi cereri de abonare:", "notifications.column_settings.mention": "Mențiuni:", "notifications.column_settings.poll": "Rezultate sondaj:", "notifications.column_settings.push": "Notificări push", - "notifications.column_settings.reblog": "Impulsuri:", - "notifications.column_settings.show": "Arată în coloană", - "notifications.column_settings.sound": "Redă sunet", - "notifications.column_settings.status": "New toots:", - "notifications.column_settings.unread_markers.category": "Unread notification markers", + "notifications.column_settings.reblog": "Distribuiri:", + "notifications.column_settings.show": "Afișează în coloană", + "notifications.column_settings.sound": "Redare sunet", + "notifications.column_settings.status": "Postări noi:", + "notifications.column_settings.unread_markers.category": "Marcaje de notificări necitite", "notifications.filter.all": "Toate", - "notifications.filter.boosts": "Impulsuri", + "notifications.filter.boosts": "Distribuiri", "notifications.filter.favourites": "Favorite", - "notifications.filter.follows": "Urmărește", - "notifications.filter.mentions": "Menționări", + "notifications.filter.follows": "Abonați", + "notifications.filter.mentions": "Mențiuni", "notifications.filter.polls": "Rezultate sondaj", - "notifications.filter.statuses": "Updates from people you follow", - "notifications.grant_permission": "Grant permission.", + "notifications.filter.statuses": "Noutăți de la persoanele la care ești abonat", + "notifications.grant_permission": "Acordă permisiunea.", "notifications.group": "{count} notificări", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Nu rata niciodată nimic", + "notifications.mark_as_read": "Marchează toate notificările ca citite", + "notifications.permission_denied": "Notificările pe desktop nu sunt disponibile deoarece cererea de permisiuni a navigatorului a fost respinsă", + "notifications.permission_denied_alert": "Notificările pe desktop nu pot fi activate, deoarece permisiunea navigatorului a fost refuzată înainte", + "notifications.permission_required": "Notificările pe desktop nu sunt disponibile deoarece permisiunea necesară nu a fost acordată.", + "notifications_permission_banner.enable": "Activează notificările pe desktop", + "notifications_permission_banner.how_to_control": "Pentru a primi notificări când Mastodon nu este deschis, activează notificările pe desktop. Poți controla exact ce tipuri de interacțiuni generează notificări pe desktop apăsând pe butonul {icon} de mai sus odată ce sunt activate.", + "notifications_permission_banner.title": "Rămâne la curent", "picture_in_picture.restore": "Pune-l înapoi", "poll.closed": "Închis", - "poll.refresh": "Reîmprospătează", + "poll.refresh": "Reîncarcă", "poll.total_people": "{count, plural, one {# persoană} other {# persoane}}", "poll.total_votes": "{count, plural, one {# vot} other {# voturi}}", "poll.vote": "Votează", "poll.voted": "Ai votat pentru acest răspuns", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Adaugă un sondaj", - "poll_button.remove_poll": "Îndepărtează sondajul", - "privacy.change": "Cine vede asta", - "privacy.direct.long": "Postează doar pentru utilizatorii menționați", + "poll_button.remove_poll": "Elimină sondajul", + "privacy.change": "Modifică confidențialitatea postării", + "privacy.direct.long": "Vizibil doar pentru utilizatorii menționați", "privacy.direct.short": "Direct", - "privacy.private.long": "Postează doar pentru urmăritori", - "privacy.private.short": "Doar urmăritorii", - "privacy.public.long": "Postează în fluxul public", + "privacy.private.long": "Vizibil doar pentru abonați", + "privacy.private.short": "Doar abonați", + "privacy.public.long": "Vizibil pentru toți, afișat în cronologiile publice", "privacy.public.short": "Public", - "privacy.unlisted.long": "Nu afișa în fluxul public", + "privacy.unlisted.long": "Vizibil pentru toți, dar nu și în cronologiile publice", "privacy.unlisted.short": "Nelistat", - "refresh": "Reîmprospătează", + "refresh": "Reîncarcă", "regeneration_indicator.label": "Se încarcă…", - "regeneration_indicator.sublabel": "Fluxul tău este în preparare!", + "regeneration_indicator.sublabel": "Cronologia ta principală este în curs de pregătire!", "relative_time.days": "{number}z", "relative_time.hours": "{number}o", "relative_time.just_now": "acum", "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}", - "relative_time.today": "azi", + "relative_time.seconds": "{number}s", + "relative_time.today": "astăzi", "reply_indicator.cancel": "Anulează", "report.forward": "Redirecționează către {target}", "report.forward_hint": "Acest cont este de pe un alt server. Trimitem o copie anonimă a raportului și acolo?", @@ -436,7 +444,7 @@ "timeline_hint.resources.followers": "Urmăritori", "timeline_hint.resources.follows": "Urmăriri", "timeline_hint.resources.statuses": "Postări mai vechi", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} persoană postează} other {{counter} persoane postează}}", "trends.trending_now": "În tendință acum", "ui.beforeunload": "Postarea se va pierde dacă părăsești pagina.", "units.short.billion": "{count}Mld", @@ -448,25 +456,26 @@ "upload_error.poll": "Încărcarea fișierului nu este permisă cu sondaje.", "upload_form.audio_description": "Descrie pentru persoanele cu deficiență a auzului", "upload_form.description": "Adaugă o descriere pentru persoanele cu deficiențe de vedere", - "upload_form.edit": "Editează", + "upload_form.edit": "Modifică", "upload_form.thumbnail": "Schimbă miniatura", "upload_form.undo": "Șterge", - "upload_form.video_description": "Descrie pentru persoanele cu pierdere a auzului sau tulburări de vedere", + "upload_form.video_description": "Adaugă o descriere pentru persoanele cu deficiențe vizuale sau auditive", "upload_modal.analyzing_picture": "Se analizează imaginea…", "upload_modal.apply": "Aplică", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Alege imaginea", - "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.description_placeholder": "Vând muzică de jazz și haine de bun-gust în New-York și Quebec la preț fix", "upload_modal.detect_text": "Detectare text din imagine", - "upload_modal.edit_media": "Editați media", - "upload_modal.hint": "Faceţi clic sau trageţi cercul pe previzualizare pentru a alege punctul focal care va fi întotdeauna vizualizat pe toate miniaturile.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.edit_media": "Modifică media", + "upload_modal.hint": "Fă clic sau glisează cercul pe previzualizare pentru a alege punctul focal care va fi vizibil în toate miniaturile.", + "upload_modal.preparing_ocr": "Se pregătește OCR…", "upload_modal.preview_label": "Previzualizare ({ratio})", - "upload_progress.label": "Se Încarcă...", + "upload_progress.label": "Se încarcă...", "video.close": "Închide video", - "video.download": "Descărcați fișierul", - "video.exit_fullscreen": "Închide", + "video.download": "Descarcă fișierul", + "video.exit_fullscreen": "Ieși din modul ecran complet", "video.expand": "Extinde video", - "video.fullscreen": "Ecran întreg", + "video.fullscreen": "Ecran complet", "video.hide": "Ascunde video", "video.mute": "Oprește sonorul", "video.pause": "Pauză", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 0f3ccebe7..30abbc0c2 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -6,23 +6,23 @@ "account.block": "Заблокировать @{name}", "account.block_domain": "Заблокировать {domain}", "account.blocked": "Заблокирован(а)", - "account.browse_more_on_origin_server": "Посмотреть их можно в оригинальном профиле", + "account.browse_more_on_origin_server": "Посмотреть в оригинальном профиле", "account.cancel_follow_request": "Отменить запрос", "account.direct": "Написать @{name}", "account.disable_notifications": "Отключить уведомления от @{name}", - "account.domain_blocked": "Домен скрыт", - "account.edit_profile": "Изменить профиль", + "account.domain_blocked": "Домен заблокирован", + "account.edit_profile": "Редактировать профиль", "account.enable_notifications": "Включить уведомления для @{name}", "account.endorse": "Рекомендовать в профиле", "account.follow": "Подписаться", - "account.followers": "Подписаны", + "account.followers": "Подписчики", "account.followers.empty": "На этого пользователя пока никто не подписан.", "account.followers_counter": "{count, plural, one {{counter} подписчик} many {{counter} подписчиков} other {{counter} подписчика}}", "account.following_counter": "{count, plural, one {{counter} подписка} many {{counter} подписок} other {{counter} подписки}}", "account.follows.empty": "Этот пользователь пока ни на кого не подписался.", "account.follows_you": "Подписан(а) на вас", "account.hide_reblogs": "Скрыть продвижения от @{name}", - "account.joined": "Присоединился {date}", + "account.joined": "Зарегистрирован(а) с {date}", "account.last_status": "Последняя активность", "account.link_verified_on": "Владение этой ссылкой было проверено {date}", "account.locked_info": "Это закрытый аккаунт. Его владелец вручную одобряет подписчиков.", @@ -35,8 +35,8 @@ "account.never_active": "Никогда", "account.posts": "Посты", "account.posts_with_replies": "Посты и ответы", - "account.report": "Пожаловаться", - "account.requested": "Ожидает подтверждения. Нажмите для отмены", + "account.report": "Жалоба №{name}", + "account.requested": "Ожидает подтверждения. Нажмите для отмены запроса", "account.share": "Поделиться профилем @{name}", "account.show_reblogs": "Показывать продвижения от @{name}", "account.statuses_counter": "{count, plural, one {{counter} пост} many {{counter} постов} other {{counter} поста}}", @@ -44,14 +44,19 @@ "account.unblock_domain": "Разблокировать {domain}", "account.unendorse": "Не рекомендовать в профиле", "account.unfollow": "Отписаться", - "account.unmute": "Не игнорировать @{name}", + "account.unmute": "Убрать {name} из игнорируемых", "account.unmute_notifications": "Показывать уведомления от @{name}", "account_note.placeholder": "Текст заметки", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Пожалуйста, повторите после {retry_time, time, medium}.", "alert.rate_limited.title": "Вы выполняете действие слишком часто", "alert.unexpected.message": "Произошла непредвиденная ошибка.", - "alert.unexpected.title": "Ой!", + "alert.unexpected.title": "Упс!", "announcement.announcement": "Объявление", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} / неделю", "boost_modal.combo": "{combo}, чтобы пропустить это в следующий раз", "bundle_column_error.body": "Что-то пошло не так при загрузке этого компонента.", @@ -65,7 +70,7 @@ "column.community": "Локальная лента", "column.direct": "Личные сообщения", "column.directory": "Просмотр профилей", - "column.domain_blocks": "Скрытые домены", + "column.domain_blocks": "Заблокированные домены", "column.favourites": "Избранное", "column.follow_requests": "Запросы на подписку", "column.home": "Главная", @@ -86,7 +91,7 @@ "community.column_settings.media_only": "Только с медиафайлами", "community.column_settings.remote_only": "Только удалённые", "compose_form.direct_message_warning": "Адресованные посты отправляются и видны только упомянутым в них пользователям.", - "compose_form.direct_message_warning_learn_more": "Узнать подробнее", + "compose_form.direct_message_warning_learn_more": "Подробнее", "compose_form.hashtag_warning": "Так как этот пост не публичный, он не отобразится в поиске по хэштегам.", "compose_form.lock_disclaimer": "Ваша учётная запись {locked}. Любой пользователь сможет подписаться на вас и просматривать посты для подписчиков.", "compose_form.lock_disclaimer.lock": "не закрыта", @@ -95,13 +100,13 @@ "compose_form.poll.duration": "Продолжительность опроса", "compose_form.poll.option_placeholder": "Вариант {number}", "compose_form.poll.remove_option": "Убрать этот вариант", - "compose_form.poll.switch_to_multiple": "Переключить в режим выбора нескольких ответов", + "compose_form.poll.switch_to_multiple": "Разрешить выбор нескольких вариантов", "compose_form.poll.switch_to_single": "Переключить в режим выбора одного ответа", "compose_form.publish": "Запостить", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Отметить медиа{count, plural, one {файл} other {файлы}} как «деликатного характера»", - "compose_form.sensitive.marked": "Медиа{count, plural, one {файл отмечен} other {файлы отмечены}} как «деликатного характера»", - "compose_form.sensitive.unmarked": "Медиа{count, plural, one {файл} other {файлы}} не отмечены как «деликатного характера»", + "compose_form.sensitive.hide": "{count, plural, one {Отметить медифайл как деликатный} other {Отметить медифайлы как деликатные}}", + "compose_form.sensitive.marked": "Медиа{count, plural, =1 {файл отмечен} other {файлы отмечены}} как «деликатного характера»", + "compose_form.sensitive.unmarked": "Медиа{count, plural, =1 {файл не отмечен} other {файлы не отмечены}} как «деликатного характера»", "compose_form.spoiler.marked": "Текст скрыт за предупреждением", "compose_form.spoiler.unmarked": "Текст не скрыт", "compose_form.spoiler_placeholder": "Текст предупреждения", @@ -113,21 +118,23 @@ "confirmations.delete.message": "Вы уверены, что хотите удалить этот пост?", "confirmations.delete_list.confirm": "Удалить", "confirmations.delete_list.message": "Вы действительно хотите навсегда удалить этот список?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Да, заблокировать узел", "confirmations.domain_block.message": "Вы точно уверены, что хотите скрыть все посты с узла {domain}? В большинстве случаев пары блокировок и скрытий вполне достаточно.\n\nПри блокировке узла, вы перестанете получать уведомления оттуда, все посты будут скрыты из публичных лент, а подписчики убраны.", "confirmations.logout.confirm": "Выйти", "confirmations.logout.message": "Вы уверены, что хотите выйти?", "confirmations.mute.confirm": "Игнорировать", - "confirmations.mute.explanation": "Это скроет посты этого пользователя и те, в которых он упоминается, но при этом он по-прежнему сможет подписаться на вас и смотреть ваши посты.", + "confirmations.mute.explanation": "Это действие скроет посты данного пользователя и те, в которых он упоминается, но при этом он по-прежнему сможет подписаться и смотреть ваши посты.", "confirmations.mute.message": "Вы уверены, что хотите добавить {name} в список игнорируемых?", "confirmations.redraft.confirm": "Удалить и исправить", - "confirmations.redraft.message": "Вы уверены, что хотите переписать этот пост? Старый пост будет удалён, а вместе с ним пропадут отметки «избранного», продвижения и ответы.", + "confirmations.redraft.message": "Вы уверены, что хотите отредактировать этот пост? Старый пост будет удалён, а вместе с ним пропадут отметки «В избранное», продвижения и ответы.", "confirmations.reply.confirm": "Ответить", "confirmations.reply.message": "При ответе, текст набираемого поста будет очищен. Продолжить?", "confirmations.unfollow.confirm": "Отписаться", "confirmations.unfollow.message": "Вы уверены, что хотите отписаться от {name}?", "conversation.delete": "Удалить беседу", - "conversation.mark_as_read": "Пометить прочитанным", + "conversation.mark_as_read": "Отметить как прочитанное", "conversation.open": "Просмотр беседы", "conversation.with": "С {names}", "directory.federated": "Со всей федерации", @@ -163,13 +170,13 @@ "empty_column.follow_recommendations": "Похоже, у нас нет предложений для вас. Вы можете попробовать поискать людей, которых уже знаете, или изучить актуальные хэштеги.", "empty_column.follow_requests": "Вам ещё не приходили запросы на подписку. Все новые запросы будут показаны здесь.", "empty_column.hashtag": "С этим хэштегом пока ещё ничего не постили.", - "empty_column.home": "Пока вы ни на кого не подписаны. Полистайте {public} или используйте поиск, чтобы освоиться и завести новые знакомства.", + "empty_column.home": "Ваша лента совсем пуста! Подпишитесь на других, чтобы заполнить её. {suggestions}", "empty_column.home.suggestions": "Посмотреть некоторые предложения", "empty_column.list": "В этом списке пока ничего нет.", "empty_column.lists": "У вас ещё нет списков. Созданные вами списки будут показаны здесь.", "empty_column.mutes": "Вы ещё никого не добавляли в список игнорируемых.", "empty_column.notifications": "У вас пока нет уведомлений. Взаимодействуйте с другими, чтобы завести разговор.", - "empty_column.public": "Здесь ничего нет! Опубликуйте что-нибудь или подпишитесь на пользователей с других узлов, чтобы заполнить ленту", + "empty_column.public": "Здесь совсем пусто. Опубликуйте что-нибудь или подпишитесь на пользователей с других сообществ, чтобы заполнить ленту", "error.unexpected_crash.explanation": "Из-за несовместимого браузера или ошибки в нашем коде, эта страница не может быть корректно отображена.", "error.unexpected_crash.explanation_addons": "Эта страница не может быть корректно отображена. Скорее всего, эта ошибка вызвана расширением браузера или инструментом автоматического перевода.", "error.unexpected_crash.next_steps": "Попробуйте обновить страницу. Если проблема не исчезает, используйте Mastodon из-под другого браузера или приложения.", @@ -177,8 +184,8 @@ "errors.unexpected_crash.copy_stacktrace": "Скопировать диагностическую информацию", "errors.unexpected_crash.report_issue": "Сообщить о проблеме", "follow_recommendations.done": "Готово", - "follow_recommendations.heading": "Подпишитесь на людей, от которые вы хотели бы видеть посты! Вот несколько предложений.", - "follow_recommendations.lead": "Посты от людей, на которых вы подписаны, будут отображаться в вашей домашней ленте в хронологическом порядке. Не бойтесь ошибаться, вы можете отписаться от людей так же легко в любое время!", + "follow_recommendations.heading": "Подпишитесь на людей, чьи посты вы бы хотели видеть. Вот несколько предложений.", + "follow_recommendations.lead": "Посты от людей, на которых вы подписаны, будут отображаться в вашей домашней ленте в хронологическом порядке. Не бойтесь ошибиться — вы так же легко сможете отписаться от них в любое время!", "follow_request.authorize": "Авторизовать", "follow_request.reject": "Отказать", "follow_requests.unlocked_explanation": "Этот запрос отправлен с учётной записи, для которой администрация {domain} включила ручную проверку подписок.", @@ -262,7 +269,7 @@ "lists.subheading": "Ваши списки", "load_pending": "{count, plural, one {# новый элемент} few {# новых элемента} other {# новых элементов}}", "loading_indicator.label": "Загрузка...", - "media_gallery.toggle_visible": "Показать/скрыть", + "media_gallery.toggle_visible": "Показать/скрыть {number, plural, =1 {изображение} other {изображения}}", "missing_indicator.label": "Не найдено", "missing_indicator.sublabel": "Запрашиваемый ресурс не найден", "mute_modal.duration": "Продолжительность", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# голос} few {# голоса} many {# голосов} other {# голосов}}", "poll.vote": "Голосовать", "poll.voted": "Вы проголосовали за этот вариант", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Добавить опрос", "poll_button.remove_poll": "Удалить опрос", "privacy.change": "Изменить видимость поста", @@ -454,6 +462,7 @@ "upload_form.video_description": "Опишите видео для людей с нарушением слуха или зрения", "upload_modal.analyzing_picture": "Обработка изображения…", "upload_modal.apply": "Применить", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Выбрать изображение", "upload_modal.description_placeholder": "На дворе трава, на траве дрова", "upload_modal.detect_text": "Найти текст на картинке", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index be9f06d1d..1e496c3ec 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -47,11 +47,16 @@ "account.unmute": "सशब्दम् @{name}", "account.unmute_notifications": "@{name} सूचनाः सक्रियन्ताम्", "account_note.placeholder": "टीकायोजनार्थं नुद्यताम्", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "{retry_time, time, medium}. समयात् पश्चात् प्रयतताम्", "alert.rate_limited.title": "सीमितगतिः", "alert.unexpected.message": "अनपेक्षितदोषो जातः ।", "alert.unexpected.title": "अरे !", "announcement.announcement": "उद्घोषणा", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} प्रतिसप्ताहे", "boost_modal.combo": "{combo} अत्र स्प्रष्टुं शक्यते, त्यक्तुमेतमन्यस्मिन् समये", "bundle_column_error.body": "विषयस्याऽऽरोपणे कश्चिद्दोषो जातः", @@ -113,6 +118,8 @@ "confirmations.delete.message": "निश्चयेन दौत्यमिदं नश्यताम्?", "confirmations.delete_list.confirm": "नश्यताम्", "confirmations.delete_list.message": "सूचिरियं निश्चयेन स्थायित्वेन च नश्यताम् वा?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "निषिद्धः प्रदेशः क्रियताम्", "confirmations.domain_block.message": "नूनं निश्चयेनैव विनष्टुमिच्छति पूर्णप्रदेशमेव {domain} ? अधिकांशसन्दर्भेऽस्थायित्वेन निषेधता निःशब्दत्वञ्च पर्याप्तं चयनीयञ्च । न तस्मात् प्रदेशात्सर्वे विषया द्रष्टुमशक्याः किस्यांश्चिदपि सर्वजनिकसमयतालिकायां वा स्वीयसूचनापटले । सर्वेऽनुसर्तारस्ते प्रदेशात् ये सन्ति ते नश्यन्ते ।", "confirmations.logout.confirm": "बहिर्गम्यताम्", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 32eadde94..339bbac09 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -22,7 +22,7 @@ "account.follows.empty": "Custa persone non sighit ancora a nemos.", "account.follows_you": "Ti sighit", "account.hide_reblogs": "Cua is cumpartziduras de @{name}", - "account.joined": "Joined {date}", + "account.joined": "At aderidu su {date}", "account.last_status": "Ùrtima atividade", "account.link_verified_on": "Sa propiedade de custu ligòngiu est istada controllada su {date}", "account.locked_info": "S'istadu de riservadesa de custu contu est istadu cunfiguradu comente blocadu. Sa persone chi tenet sa propiedade revisionat a manu chie dda podet sighire.", @@ -47,11 +47,16 @@ "account.unmute": "Torra a ativare a @{name}", "account.unmute_notifications": "Ativa notìficas pro @{name}", "account_note.placeholder": "Incarca pro agiùnghere una nota", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Torra·bi a proare a pustis de {retry_time, time, medium}.", "alert.rate_limited.title": "Màssimu de rechestas barigadu", "alert.unexpected.message": "Ddoe est istada una faddina.", "alert.unexpected.title": "Oh!", "announcement.announcement": "Annùntziu", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} a sa chida", "boost_modal.combo": "Podes incarcare {combo} pro brincare custu sa borta chi benit", "bundle_column_error.body": "Faddina in su carrigamentu de custu cumponente.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Seguru chi boles cantzellare custa publicatzione?", "confirmations.delete_list.confirm": "Cantzella", "confirmations.delete_list.message": "Seguru chi boles cantzellare custa lista in manera permanente?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Bloca totu su domìniu", "confirmations.domain_block.message": "Boles de seguru, ma a beru a beru, blocare {domain}? In sa parte manna de is casos, pagos blocos o silentziamentos de persones sunt sufitzientes e preferìbiles. No as a bìdere cuntenutos dae custu domìniu in peruna lìnia de tempus pùblica o in is notìficas tuas. Sa gente chi ti sighit dae cussu domìniu at a èssere bogada.", "confirmations.logout.confirm": "Essi·nche", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# votu} other {# votos}}", "poll.vote": "Vota", "poll.voted": "As votadu custa risposta", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Agiunghe unu sondàgiu", "poll_button.remove_poll": "Cantzella su sondàgiu", "privacy.change": "Modìfica s'istadu de riservadesa", @@ -454,6 +462,7 @@ "upload_form.video_description": "Descritzione pro persones cun pèrdida auditiva o problemas visuales", "upload_modal.analyzing_picture": "Analizende immàgine…", "upload_modal.apply": "Àplica", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Sèbera un'immàgine", "upload_modal.description_placeholder": "Su margiane castàngiu brincat lestru a subra de su cane mandrone", "upload_modal.detect_text": "Rileva testu de s'immàgine", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index d36ae4b2d..0baa6c7ae 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -22,12 +22,12 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", - "account.joined": "Joined {date}", + "account.joined": "{date} එක් වී ඇත", "account.last_status": "අවසන් වරට සක්‍රීය", "account.link_verified_on": "මෙම සබැඳියේ හිමිකාරිත්වය {date} දින පරීක්ෂා කරන ලදි", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "මාධ්‍යය", - "account.mention": "Mention @{name}", + "account.mention": "@{name} සැඳහුම", "account.moved_to": "{name} has moved to:", "account.mute": "@{name} නිහඬ කරන්න", "account.mute_notifications": "Mute notifications from @{name}", @@ -47,11 +47,16 @@ "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "සටහන එකතු කිරීමට ක්ලික් කරන්න", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "කරුණාකර {retry_time, time, medium} ට පසු නැවත උත්සාහ කරන්න.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "අපොයි!", "announcement.announcement": "නිවේදනය", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", @@ -61,9 +66,9 @@ "bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.retry": "නැවත උත්සාහ කරන්න", "column.blocks": "අවහිර කළ පරිශීලකයින්", - "column.bookmarks": "Bookmarks", + "column.bookmarks": "පොත් යොමු", "column.community": "Local timeline", - "column.direct": "Direct messages", + "column.direct": "සෘජු පණිවිඩ", "column.directory": "පැතිකඩයන් පිරික්සන්න", "column.domain_blocks": "අවහිර කළ වසම්", "column.favourites": "ප්‍රියතමයන්", @@ -76,8 +81,8 @@ "column.public": "Federated timeline", "column_back_button.label": "ආපසු", "column_header.hide_settings": "සැකසුම් සඟවන්න", - "column_header.moveLeft_settings": "Move column to the left", - "column_header.moveRight_settings": "Move column to the right", + "column_header.moveLeft_settings": "තීරුව වමට ගෙනයන්න", + "column_header.moveRight_settings": "තීරුව දකුණට ගෙනයන්න", "column_header.pin": "Pin", "column_header.show_settings": "සැකසුම් පෙන්වන්න", "column_header.unpin": "Unpin", @@ -99,9 +104,9 @@ "compose_form.poll.switch_to_single": "තනි තේරීමකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", "compose_form.publish": "පිඹින්න", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", - "compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}", - "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", + "compose_form.sensitive.hide": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කරන්න} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කරන්න}}", + "compose_form.sensitive.marked": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත}}", + "compose_form.sensitive.unmarked": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කර නැත} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කර නැත}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "පාඨය සඟවා නැත", "compose_form.spoiler_placeholder": "ඔබගේ අවවාදය මෙහි ලියන්න", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "සම්පූර්ණ වසම අවහිර කරන්න", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "නික්මෙන්න", @@ -141,9 +148,9 @@ "emoji_button.flags": "Flags", "emoji_button.food": "ආහාර සහ පාන", "emoji_button.label": "Insert emoji", - "emoji_button.nature": "Nature", + "emoji_button.nature": "සොබාදහම", "emoji_button.not_found": "No matching emojis found", - "emoji_button.objects": "Objects", + "emoji_button.objects": "වස්තූන්", "emoji_button.people": "මිනිසුන්", "emoji_button.recent": "නිතර භාවිතා වූ", "emoji_button.search": "සොයන්න...", @@ -182,10 +189,10 @@ "follow_request.authorize": "Authorize", "follow_request.reject": "ප්‍රතික්ෂේප", "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", - "generic.saved": "Saved", + "generic.saved": "සුරැකිණි", "getting_started.developers": "සංවර්ධකයින්", - "getting_started.directory": "Profile directory", - "getting_started.documentation": "Documentation", + "getting_started.directory": "පැතිකඩ නාමාවලිය", + "getting_started.documentation": "ප්‍රලේඛනය", "getting_started.heading": "Getting started", "getting_started.invite": "මිනිසුන්ට ආරාධනා කරන්න", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", @@ -213,7 +220,7 @@ "keyboard_shortcuts.boost": "to boost", "keyboard_shortcuts.column": "to focus a status in one of the columns", "keyboard_shortcuts.compose": "to focus the compose textarea", - "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.description": "සවිස්තරය", "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "to move down in the list", "keyboard_shortcuts.enter": "to open status", @@ -222,7 +229,7 @@ "keyboard_shortcuts.federated": "to open federated timeline", "keyboard_shortcuts.heading": "Keyboard Shortcuts", "keyboard_shortcuts.home": "to open home timeline", - "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.hotkey": "උණුසුම් යතුර", "keyboard_shortcuts.legend": "to display this legend", "keyboard_shortcuts.local": "to open local timeline", "keyboard_shortcuts.mention": "to mention author", @@ -256,7 +263,7 @@ "lists.new.title_placeholder": "New list title", "lists.replies_policy.followed": "Any followed user", "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", + "lists.replies_policy.none": "කිසිවෙක් නැත", "lists.replies_policy.title": "Show replies to:", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", @@ -268,21 +275,21 @@ "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", "mute_modal.indefinite": "Indefinite", - "navigation_bar.apps": "Mobile apps", - "navigation_bar.blocks": "Blocked users", - "navigation_bar.bookmarks": "Bookmarks", + "navigation_bar.apps": "ජංගම යෙදුම්", + "navigation_bar.blocks": "අවහිර කළ පරිශීලකයින්", + "navigation_bar.bookmarks": "පොත් යොමු", "navigation_bar.community_timeline": "Local timeline", "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Direct messages", + "navigation_bar.direct": "සෘජු පණිවිඩ", "navigation_bar.discover": "Discover", "navigation_bar.domain_blocks": "Hidden domains", - "navigation_bar.edit_profile": "Edit profile", - "navigation_bar.favourites": "Favourites", - "navigation_bar.filters": "Muted words", + "navigation_bar.edit_profile": "පැතිකඩ සංස්කරණය", + "navigation_bar.favourites": "ප්‍රියතමයන්", + "navigation_bar.filters": "නිහඬ කළ වචන", "navigation_bar.follow_requests": "Follow requests", "navigation_bar.follows_and_followers": "Follows and followers", - "navigation_bar.info": "About this server", - "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.info": "මෙම සේවාදායකය පිළිබඳව", + "navigation_bar.keyboard_shortcuts": "උණුසුම් යතුරු", "navigation_bar.lists": "Lists", "navigation_bar.logout": "නික්මෙන්න", "navigation_bar.mutes": "Muted users", @@ -299,33 +306,33 @@ "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", "notification.status": "{name} just posted", - "notifications.clear": "Clear notifications", + "notifications.clear": "දැනුම්දීම් හිස්කරන්න", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", - "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.favourite": "ප්‍රියතමයන්:", "notifications.column_settings.filter_bar.advanced": "Display all categories", "notifications.column_settings.filter_bar.category": "Quick filter bar", "notifications.column_settings.filter_bar.show": "පෙන්වන්න", "notifications.column_settings.follow": "New followers:", "notifications.column_settings.follow_request": "New follow requests:", - "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.mention": "සැඳහුම්:", "notifications.column_settings.poll": "Poll results:", "notifications.column_settings.push": "Push notifications", "notifications.column_settings.reblog": "Boosts:", - "notifications.column_settings.show": "Show in column", - "notifications.column_settings.sound": "Play sound", + "notifications.column_settings.show": "තීරුවෙහි පෙන්වන්න", + "notifications.column_settings.sound": "ශබ්දය ධාවනය", "notifications.column_settings.status": "New toots:", "notifications.column_settings.unread_markers.category": "Unread notification markers", "notifications.filter.all": "සියල්ල", "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", + "notifications.filter.favourites": "ප්‍රියතමයන්", "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", + "notifications.filter.mentions": "සැඳහුම්", "notifications.filter.polls": "Poll results", "notifications.filter.statuses": "Updates from people you follow", "notifications.grant_permission": "Grant permission.", - "notifications.group": "{count} notifications", - "notifications.mark_as_read": "Mark every notification as read", + "notifications.group": "දැනුම්දීම් {count}", + "notifications.mark_as_read": "සෑම දැනුම්දීමක්ම කියවූ ලෙස සලකුණු කරන්න", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", @@ -333,21 +340,22 @@ "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", "picture_in_picture.restore": "Put it back", - "poll.closed": "Closed", - "poll.refresh": "Refresh", + "poll.closed": "වසා ඇත", + "poll.refresh": "නැවුම් කරන්න", "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "මනාපය", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", "privacy.direct.long": "Visible for mentioned users only", - "privacy.direct.short": "Direct", + "privacy.direct.short": "සෘජු", "privacy.private.long": "Visible for followers only", "privacy.private.short": "Followers-only", "privacy.public.long": "Visible for all, shown in public timelines", - "privacy.public.short": "Public", + "privacy.public.short": "ප්‍රසිද්ධ", "privacy.unlisted.long": "Visible for all, but not in public timelines", "privacy.unlisted.short": "Unlisted", "refresh": "නැවුම් කරන්න", @@ -364,7 +372,7 @@ "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", "report.placeholder": "අමතර අදහස්", - "report.submit": "Submit", + "report.submit": "යොමන්න", "report.target": "Report {target}", "search.placeholder": "සොයන්න", "search_popout.search_format": "Advanced search format", @@ -380,33 +388,33 @@ "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", - "status.block": "Block @{name}", - "status.bookmark": "Bookmark", + "status.block": "@{name} අවහිර කරන්න", + "status.bookmark": "පොත් යොමුව", "status.cancel_reblog_private": "Unboost", "status.cannot_reblog": "This post cannot be boosted", "status.copy": "Copy link to status", "status.delete": "Delete", "status.detailed_status": "Detailed conversation view", - "status.direct": "Direct message @{name}", - "status.embed": "Embed", - "status.favourite": "Favourite", + "status.direct": "@{name} සෘජු පණිවිඩය", + "status.embed": "එබ්බවූ", + "status.favourite": "ප්‍රියතම", "status.filtered": "පෙරන ලද", "status.load_more": "තව පූරණය කරන්න", "status.media_hidden": "මාධ්‍ය සඟවා ඇත", - "status.mention": "Mention @{name}", + "status.mention": "@{name} සැඳහුම", "status.more": "තව", "status.mute": "@{name} නිහඬ කරන්න", "status.mute_conversation": "සංවාදය නිහඬ කරන්න", "status.open": "Expand this status", "status.pin": "Pin on profile", "status.pinned": "Pinned toot", - "status.read_more": "Read more", + "status.read_more": "තව කියවන්න", "status.reblog": "Boost", "status.reblog_private": "Boost with original visibility", "status.reblogged_by": "{name} boosted", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", "status.redraft": "Delete & re-draft", - "status.remove_bookmark": "Remove bookmark", + "status.remove_bookmark": "පොත්යොමුව ඉවත් කරන්න", "status.reply": "පිළිතුරු", "status.replyAll": "Reply to thread", "status.report": "@{name} වාර්තා කරන්න", @@ -414,7 +422,7 @@ "status.share": "බෙදාගන්න", "status.show_less": "අඩුවෙන් පෙන්වන්න", "status.show_less_all": "Show less for all", - "status.show_more": "Show more", + "status.show_more": "තව පෙන්වන්න", "status.show_more_all": "Show more for all", "status.show_thread": "Show thread", "status.uncached_media_warning": "Not available", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "පින්තූරය විශ්ලේෂණය කරමින්…", "upload_modal.apply": "යොදන්න", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "පින්තුරයක් තෝරන්න", "upload_modal.description_placeholder": "කඩිසර දුඹුරු හිවලෙක් කම්මැලි බල්ලා මතින් පනී", "upload_modal.detect_text": "පින්තූරයෙන් පාඨ හඳුනාගන්න", @@ -462,12 +471,12 @@ "upload_modal.preparing_ocr": "Preparing OCR…", "upload_modal.preview_label": "පෙරදසුන ({ratio})", "upload_progress.label": "උඩුගත වෙමින්...", - "video.close": "Close video", + "video.close": "දෘශ්‍යකය වසන්න", "video.download": "ගොනුව බාගන්න", - "video.exit_fullscreen": "Exit full screen", + "video.exit_fullscreen": "පූර්ණ තිරයෙන් පිටවන්න", "video.expand": "Expand video", "video.fullscreen": "පූර්ණ තිරය", - "video.hide": "Hide video", + "video.hide": "දෘශ්‍යකය සඟවන්න", "video.mute": "Mute sound", "video.pause": "විරාමය", "video.play": "ධාවනය", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 973d5a895..5911881bb 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -1,28 +1,28 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Poznámka", "account.add_or_remove_from_list": "Pridaj do, alebo odober zo zoznamov", "account.badges.bot": "Bot", "account.badges.group": "Skupina", "account.block": "Blokuj @{name}", "account.block_domain": "Ukry všetko z {domain}", "account.blocked": "Blokovaný/á", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "Prehľadávaj viac na pôvodnom profile", "account.cancel_follow_request": "Zruš žiadosť o sledovanie", "account.direct": "Priama správa pre @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "Prestaň oboznamovať keď má príspevky @{name}", "account.domain_blocked": "Doména ukrytá", "account.edit_profile": "Uprav profil", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "Oboznamuj ma, keď má @{name} príspevky", "account.endorse": "Zobrazuj na profile", "account.follow": "Nasleduj", "account.followers": "Sledujúci", "account.followers.empty": "Tohto používateľa ešte nikto nenásleduje.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.followers_counter": "{count, plural, one {{counter} Sledujúci} few {{counter} Sledujúci} many {{counter} Sledujúci} other {{counter} Sledujúci}}", "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", "account.follows.empty": "Tento používateľ ešte nikoho nenasleduje.", "account.follows_you": "Nasleduje ťa", "account.hide_reblogs": "Skry vyzdvihnutia od @{name}", - "account.joined": "Joined {date}", + "account.joined": "Pridal/a sa v {date}", "account.last_status": "Naposledy aktívny", "account.link_verified_on": "Vlastníctvo tohto odkazu bolo skontrolované {date}", "account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sám prehodnocuje, kto ho môže sledovať.", @@ -47,11 +47,16 @@ "account.unmute": "Prestaň ignorovať @{name}", "account.unmute_notifications": "Zruš stĺmenie oboznámení od @{name}", "account_note.placeholder": "Klikni pre vloženie poznámky", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Prosím, skús to znova za {retry_time, time, medium}.", "alert.rate_limited.title": "Tempo obmedzené", "alert.unexpected.message": "Vyskytla sa nečakaná chyba.", "alert.unexpected.title": "Ups!", "announcement.announcement": "Oboznámenie", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} týždenne", "boost_modal.combo": "Nabudúce môžeš kliknúť {combo} pre preskočenie", "bundle_column_error.body": "Pri načítaní tohto prvku nastala nejaká chyba.", @@ -84,7 +89,7 @@ "column_subheading.settings": "Nastavenia", "community.column_settings.local_only": "Iba miestna", "community.column_settings.media_only": "Iba médiá", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "Iba odľahlé", "compose_form.direct_message_warning": "Tento príspevok bude boslaný iba spomenutým užívateľom.", "compose_form.direct_message_warning_learn_more": "Zisti viac", "compose_form.hashtag_warning": "Tento toot nebude zobrazený pod žiadným haštagom lebo nieje listovaný. Iba verejné tooty môžu byť nájdené podľa haštagu.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Si si istý/á, že chceš vymazať túto správu?", "confirmations.delete_list.confirm": "Vymaž", "confirmations.delete_list.message": "Si si istý/á, že chceš natrvalo vymazať tento zoznam?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Skry celú doménu", "confirmations.domain_block.message": "Si si naozaj istý/á, že chceš blokovať celú doménu {domain}? Vo väčšine prípadov stačí blokovať alebo ignorovať pár konkrétnych užívateľov, čo sa doporučuje. Neuvidíš obsah z tejto domény v žiadnej verejnej časovej osi, ani v oznámeniach. Tvoji následovníci pochádzajúci z tejto domény budú odstránení.", "confirmations.logout.confirm": "Odhlás sa", @@ -150,7 +157,7 @@ "emoji_button.search_results": "Nájdené", "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestovanie a miesta", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "Účet bol vylúčený", "empty_column.account_timeline": "Niesú tu žiadne príspevky!", "empty_column.account_unavailable": "Profil nedostupný", "empty_column.blocks": "Ešte si nikoho nezablokoval/a.", @@ -160,28 +167,28 @@ "empty_column.domain_blocks": "Žiadne domény ešte niesú skryté.", "empty_column.favourited_statuses": "Nemáš obľúbené ešte žiadne príspevky. Keď si nejaký obľúbiš, bude zobrazený práve tu.", "empty_column.favourites": "Tento toot si ešte nikto neobľúbil. Ten kto si ho obľúbi, bude zobrazený tu.", - "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.follow_recommendations": "Zdá sa že pre Vás nemohli byť vygenerované žiadne návrhy. Môžete skúsiť použiť vyhľadávanie aby ste našli ľudi ktorých poznáte, alebo preskúmať trendujúce heštegy.", "empty_column.follow_requests": "Ešte nemáš žiadne požiadavky o následovanie. Keď nejaké dostaneš, budú tu zobrazené.", "empty_column.hashtag": "Pod týmto hashtagom sa ešte nič nenachádza.", "empty_column.home": "Tvoja lokálna osa je zatiaľ prázdna! Pre začiatok navštív {public}, alebo použi vyhľadávanie a nájdi tak aj iných užívateľov.", - "empty_column.home.suggestions": "See some suggestions", + "empty_column.home.suggestions": "Prezri nejaké návrhy", "empty_column.list": "Tento zoznam je ešte prázdny. Keď ale členovia tohoto zoznamu napíšu nové správy, tak tie sa objavia priamo tu.", "empty_column.lists": "Nemáš ešte žiadne zoznamy. Keď nejaký vytvoríš, bude zobrazený práve tu.", "empty_column.mutes": "Ešte si nestĺmil žiadných užívateľov.", "empty_column.notifications": "Ešte nemáš žiadne oznámenia. Začni komunikovať s ostatnými, aby diskusia mohla začať.", "empty_column.public": "Ešte tu nič nie je. Napíš niečo verejne, alebo začni sledovať užívateľov z iných serverov, aby tu niečo pribudlo", "error.unexpected_crash.explanation": "Kvôli chybe v našom kóde, alebo problému s kompatibilitou prehliadača, túto stránku nebolo možné zobraziť správne.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", + "error.unexpected_crash.explanation_addons": "Túto stránku sa nepodarilo zobraziť správne. Táto chyba je pravdepodobne spôsobená rozšírením v prehliadači, alebo nástrojmi automatického prekladu.", "error.unexpected_crash.next_steps": "Skús obnoviť stránku. Ak to nepomôže, pravdepodobne budeš stále môcť používať Mastodon cez iný prehliadač, alebo natívnu aplikáciu.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "error.unexpected_crash.next_steps_addons": "Skús ich vypnúť, a obnoviť túto stránku. Ak to nepomôže, pravdepodobne budeš stále môcť Mastodon používať cez iný prehliadač, alebo natívnu aplikáciu.", "errors.unexpected_crash.copy_stacktrace": "Skopíruj stacktrace do schránky", "errors.unexpected_crash.report_issue": "Nahlás problém", - "follow_recommendations.done": "Done", - "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", - "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", + "follow_recommendations.done": "Hotovo", + "follow_recommendations.heading": "Následuj ľudí od ktorých by si chcel/a vidieť príspevky! Tu sú nejaké návrhy.", + "follow_recommendations.lead": "Príspevky od ľudi ktorých sledujete sa zobrazia v chronologickom poradí na Vašej nástenke. Nebojte sa spraviť chyby, vždy môžete zrušiť sledovanie konkrétnych ľudí!", "follow_request.authorize": "Povoľ prístup", "follow_request.reject": "Odmietni", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", + "follow_requests.unlocked_explanation": "Síce Váš učet nie je uzamknutý, ale {domain} tím si myslel že môžete chcieť skontrolovať žiadosti o sledovanie z týchto účtov manuálne.", "generic.saved": "Uložené", "getting_started.developers": "Vývojári", "getting_started.directory": "Zoznam profilov", @@ -243,8 +250,8 @@ "keyboard_shortcuts.unfocus": "nesústreď sa na písaciu plochu, alebo hľadanie", "keyboard_shortcuts.up": "posuň sa vyššie v zozname", "lightbox.close": "Zatvor", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "Zmenšiť náhľad obrázku", + "lightbox.expand": "Rozšíriť náhľad obrázku", "lightbox.next": "Ďalšie", "lightbox.previous": "Predchádzajúci", "lists.account.add": "Pridaj do zoznamu", @@ -254,10 +261,10 @@ "lists.edit.submit": "Zmeň názov", "lists.new.create": "Pridaj zoznam", "lists.new.title_placeholder": "Názov nového zoznamu", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", - "lists.replies_policy.none": "No one", - "lists.replies_policy.title": "Show replies to:", + "lists.replies_policy.followed": "Akýkoľvek nasledovaný užívateľ", + "lists.replies_policy.list": "Členovia na zozname", + "lists.replies_policy.none": "Nikto", + "lists.replies_policy.title": "Ukáž odpovede na:", "lists.search": "Vyhľadávaj medzi užívateľmi, ktorých sleduješ", "lists.subheading": "Tvoje zoznamy", "load_pending": "{count, plural, one {# nová položka} other {# nových položiek}}", @@ -265,9 +272,9 @@ "media_gallery.toggle_visible": "Zapni/Vypni viditeľnosť", "missing_indicator.label": "Nenájdené", "missing_indicator.sublabel": "Tento zdroj sa ešte nepodarilo nájsť", - "mute_modal.duration": "Duration", + "mute_modal.duration": "Trvanie", "mute_modal.hide_notifications": "Skry oznámenia od tohto používateľa?", - "mute_modal.indefinite": "Indefinite", + "mute_modal.indefinite": "Bez obmedzenia", "navigation_bar.apps": "Aplikácie", "navigation_bar.blocks": "Blokovaní užívatelia", "navigation_bar.bookmarks": "Záložky", @@ -298,7 +305,7 @@ "notification.own_poll": "Tvoja anketa sa skončila", "notification.poll": "Anketa v ktorej si hlasoval/a sa skončila", "notification.reblog": "{name} zdieľal/a tvoj príspevok", - "notification.status": "{name} just posted", + "notification.status": "{name} práve uverejnil/a", "notifications.clear": "Vyčisti oboznámenia", "notifications.clear_confirmation": "Naozaj chceš nenávratne prečistiť všetky tvoje oboznámenia?", "notifications.column_settings.alert": "Oboznámenia na ploche", @@ -315,30 +322,31 @@ "notifications.column_settings.show": "Ukáž v stĺpci", "notifications.column_settings.sound": "Prehraj zvuk", "notifications.column_settings.status": "New toots:", - "notifications.column_settings.unread_markers.category": "Unread notification markers", + "notifications.column_settings.unread_markers.category": "Značenia neprečítaných oboznámení", "notifications.filter.all": "Všetky", "notifications.filter.boosts": "Vyzdvihnutia", "notifications.filter.favourites": "Obľúbené", "notifications.filter.follows": "Sledovania", "notifications.filter.mentions": "Iba spomenutia", "notifications.filter.polls": "Výsledky ankiet", - "notifications.filter.statuses": "Updates from people you follow", - "notifications.grant_permission": "Grant permission.", + "notifications.filter.statuses": "Aktualizácie od ľudí, ktorých následuješ", + "notifications.grant_permission": "Udeľ povolenie.", "notifications.group": "{count} oboznámení", - "notifications.mark_as_read": "Mark every notification as read", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Enable desktop notifications", + "notifications.mark_as_read": "Označ každé oboznámenie za prečítané", + "notifications.permission_denied": "Oboznámenia na plochu sú nedostupné, kvôli predtým zamietnutej požiadavke prehliadača", + "notifications.permission_denied_alert": "Oboznámenia na ploche nemôžu byť zapnuté, pretože požiadavka prehliadača o to, bola už skôr zamietnutá", + "notifications.permission_required": "Oboznámenia na ploche sú nedostupné, pretože potrebné povolenia neboli udelené.", + "notifications_permission_banner.enable": "Povoliť oboznámenia na plochu", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications_permission_banner.title": "Nikdy nezmeškaj jedinú vec", + "picture_in_picture.restore": "Vrátiť späť", "poll.closed": "Uzatvorená", - "poll.refresh": "Občerstvi", + "poll.refresh": "Obnoviť", "poll.total_people": "{count, plural, one {# človek} few {# ľudia} other {# ľudí}}", "poll.total_votes": "{count, plural, one {# hlas} few {# hlasov} many {# hlasov} other {# hlasov}}", "poll.vote": "Hlasuj", "poll.voted": "Hlasoval/a si za túto voľbu", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Pridaj anketu", "poll_button.remove_poll": "Odstráň anketu", "privacy.change": "Uprav súkromie príspevku", @@ -350,9 +358,9 @@ "privacy.public.short": "Verejné", "privacy.unlisted.long": "Neposielaj do verejných časových osí", "privacy.unlisted.short": "Verejne, ale nezobraziť v osi", - "refresh": "Občerstvi", + "refresh": "Obnoviť", "regeneration_indicator.label": "Načítava sa…", - "regeneration_indicator.sublabel": "Vaša domovská nástenka sa pripravuje!", + "regeneration_indicator.sublabel": "Vaša nástenka sa pripravuje!", "relative_time.days": "{number}dní", "relative_time.hours": "{number}hod", "relative_time.just_now": "teraz", @@ -368,7 +376,7 @@ "report.target": "Nahlás {target}", "search.placeholder": "Hľadaj", "search_popout.search_format": "Pokročilé vyhľadávanie", - "search_popout.tips.full_text": "Vráti jednoduchý textový výpis príspevkov ktoré si napísal/a, ktoré si obľúbil/a, povýšil/a, alebo aj tých, v ktorých si bol/a spomenutý/á, a potom všetky zadaniu odpovedajúce prezívky, mená a haštagy.", + "search_popout.tips.full_text": "Vráti jednoduchý textový výpis príspevkov ktoré si napísal/a, ktoré si obľúbil/a, povýšil/a, alebo aj tých, v ktorých si bol/a spomenutý/á, a potom všetky zadaniu odpovedajúce prezývky, mená a haštagy.", "search_popout.tips.hashtag": "haštag", "search_popout.tips.status": "príspevok", "search_popout.tips.text": "Vráti jednoduchý textový výpis zhodujúcich sa mien, prezývok a haštagov", @@ -423,7 +431,7 @@ "suggestions.dismiss": "Zavrhni návrh", "suggestions.header": "Mohlo by ťa zaujímať…", "tabs_bar.federated_timeline": "Federovaná", - "tabs_bar.home": "Domovská", + "tabs_bar.home": "Domov", "tabs_bar.local_timeline": "Miestna", "tabs_bar.notifications": "Oboznámenia", "tabs_bar.search": "Hľadaj", @@ -432,16 +440,16 @@ "time_remaining.minutes": "Ostáva {number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}", "time_remaining.moments": "Ostáva už iba chviľka", "time_remaining.seconds": "Ostáva {number, plural, one {# sekunda} few {# sekúnd} many {# sekúnd} other {# sekúnd}}", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", + "timeline_hint.remote_resource_not_displayed": "{resource} z iných serverov sa nezobrazí.", "timeline_hint.resources.followers": "Sledujúci", "timeline_hint.resources.follows": "Následuje", "timeline_hint.resources.statuses": "Staršie príspevky", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} človek rozpráva} few {{counter} ľudia rozprávajú} many {{counter} ľudia rozprávajú} other {{counter} ľudí rozpráva}}", "trends.trending_now": "Teraz populárne", "ui.beforeunload": "Čo máš rozpísané sa stratí, ak opustíš Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "units.short.billion": "{count}mld.", + "units.short.million": "{count}mil.", + "units.short.thousand": "{count}tis.", "upload_area.title": "Pretiahni a pusť pre nahratie", "upload_button.label": "Pridaj médiálny súbor (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Limit pre nahrávanie súborov bol prekročený.", @@ -449,17 +457,18 @@ "upload_form.audio_description": "Popíš, pre ľudí so stratou sluchu", "upload_form.description": "Opis pre slabo vidiacich", "upload_form.edit": "Uprav", - "upload_form.thumbnail": "Change thumbnail", + "upload_form.thumbnail": "Zmeniť miniatúru", "upload_form.undo": "Vymaž", "upload_form.video_description": "Popíš, pre ľudí so stratou sluchu, alebo očným znevýhodnením", "upload_modal.analyzing_picture": "Analyzujem obrázok…", "upload_modal.apply": "Použi", - "upload_modal.choose_image": "Choose image", + "upload_modal.applying": "Applying…", + "upload_modal.choose_image": "Vyber obrázok", "upload_modal.description_placeholder": "Rýchla hnedá líška skáče ponad lenivého psa", "upload_modal.detect_text": "Rozpoznaj text z obrázka", "upload_modal.edit_media": "Uprav médiá", "upload_modal.hint": "Klikni, alebo potiahni okruh ukážky pre zvolenie z ktorého východzieho bodu bude vždy v dohľadne na všetkých náhľadoch.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.preparing_ocr": "Pripravujem OCR…", "upload_modal.preview_label": "Náhľad ({ratio})", "upload_progress.label": "Nahráva sa...", "video.close": "Zavri video", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 2790a4d19..0919fc3cd 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -1,5 +1,5 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "Opombe", "account.add_or_remove_from_list": "Dodaj ali odstrani iz seznama", "account.badges.bot": "Robot", "account.badges.group": "Group", @@ -47,11 +47,16 @@ "account.unmute": "Odtišaj @{name}", "account.unmute_notifications": "Vklopi obvestila od @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "Zgodila se je nepričakovana napaka.", "alert.unexpected.title": "Uups!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Če želite preskočiti to, lahko pritisnete {combo}", "bundle_column_error.body": "Med nalaganjem te komponente je prišlo do napake.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Ali ste prepričani, da želite izbrisati to stanje?", "confirmations.delete_list.confirm": "Izbriši", "confirmations.delete_list.message": "Ali ste prepričani, da želite trajno izbrisati ta seznam?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Skrij celotno domeno", "confirmations.domain_block.message": "Ali ste res, res prepričani, da želite blokirati celotno {domain}? V večini primerov je nekaj ciljnih blokiranj ali utišanj dovolj in boljše. Vsebino iz te domene ne boste videli v javnih časovnicah ali obvestilih. Vaši sledilci iz te domene bodo odstranjeni.", "confirmations.logout.confirm": "Log out", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural,one {# glas} other {# glasov}}", "poll.vote": "Glasuj", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Dodaj anketo", "poll_button.remove_poll": "Odstrani anketo", "privacy.change": "Prilagodi zasebnost statusa", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "Pri Jakcu bom vzel šest čudežnih fig", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index de274500a..062b566d0 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -47,11 +47,16 @@ "account.unmute": "Ktheji zërin @{name}", "account.unmute_notifications": "Hiqua ndalimin e shfaqjes njoftimeve nga @{name}", "account_note.placeholder": "Klikoni për të shtuar shënim", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Ju lutemi, riprovoni pas {retry_time, time, medium}.", "alert.rate_limited.title": "Shpejtësi e kufizuar", "alert.unexpected.message": "Ndodhi një gabim të papritur.", "alert.unexpected.title": "Hëm!", "announcement.announcement": "Lajmërim", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} për javë", "boost_modal.combo": "Që kjo të anashkalohet herës tjetër, mund të shtypni {combo}", "bundle_column_error.body": "Diç shkoi ters teksa ngarkohej ky përbërës.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Jeni i sigurt se doni të fshihet kjo gjendje?", "confirmations.delete_list.confirm": "Fshije", "confirmations.delete_list.message": "Jeni i sigurt se doni të fshihet përgjithmonë kjo listë?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Bllokoje krejt përkatësinë", "confirmations.domain_block.message": "Jeni i sigurt, shumë i sigurt se doni të bllokohet krejt {domain}? Në shumicën e rasteve, ndoca bllokime ose heshtime me synim të caktuar janë të mjaftueshme dhe të parapëlqyera. S’keni për të parë lëndë nga kjo përkatësi në ndonjë rrjedhë kohore publike, apo te njoftimet tuaja. Ndjekësit tuaj prej asaj përkatësie do të hiqen.", "confirmations.logout.confirm": "Dilni", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural,one {# votë }other {# vota }}", "poll.vote": "Votoni", "poll.voted": "Votuat për këtë përgjigje", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Shtoni një pyetësor", "poll_button.remove_poll": "Hiqe pyetësorin", "privacy.change": "Rregulloni privatësi mesazhesh", @@ -454,6 +462,7 @@ "upload_form.video_description": "Përshkruajeni për persona me dëgjim të kufizuar ose probleme shikimi", "upload_modal.analyzing_picture": "Po analizohet fotoja…", "upload_modal.apply": "Aplikoje", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Zgjidhni figurë", "upload_modal.description_placeholder": "Deshe Korçën, Korçën të dhamë", "upload_modal.detect_text": "Pikase tekstin prej fotoje", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 61e37ba53..3e29734ef 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -47,11 +47,16 @@ "account.unmute": "Ukloni ućutkavanje korisniku @{name}", "account.unmute_notifications": "Uključi nazad obaveštenja od korisnika @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Možete pritisnuti {combo} da preskočite ovo sledeći put", "bundle_column_error.body": "Nešto je pošlo po zlu prilikom učitavanja ove komponente.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Da li ste sigurni da želite obrišete ovaj status?", "confirmations.delete_list.confirm": "Obriši", "confirmations.delete_list.message": "Da li ste sigurni da želite da bespovratno obrišete ovu listu?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Sakrij ceo domen", "confirmations.domain_block.message": "Da li ste stvarno, stvarno sigurno da želite da blokirate ceo domen {domain}? U većini slučajeva, par dobrih blokiranja ili ućutkavanja su dovoljna i preporučljiva.", "confirmations.logout.confirm": "Log out", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Podesi status privatnosti", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 24a4c832c..ba822e15d 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -6,14 +6,14 @@ "account.block": "Блокирај @{name}", "account.block_domain": "Сакриј све са домена {domain}", "account.blocked": "Блокиран", - "account.browse_more_on_origin_server": "Погледајте још на оригиналном профилу", + "account.browse_more_on_origin_server": "Погледајте још на оригиналном налогу", "account.cancel_follow_request": "Поништи захтеве за праћење", "account.direct": "Директна порука @{name}", "account.disable_notifications": "Прекини обавештавање за објаве корисника @{name}", "account.domain_blocked": "Домен сакривен", - "account.edit_profile": "Измени профил", + "account.edit_profile": "Уреди налог", "account.enable_notifications": "Обавести ме када @{name} објави", - "account.endorse": "Приказати на профилу", + "account.endorse": "Истакнуто на налогу", "account.follow": "Запрати", "account.followers": "Пратиоци", "account.followers.empty": "Тренутно нико не прати овог корисника.", @@ -22,7 +22,7 @@ "account.follows.empty": "Корисник тренутно не прати никога.", "account.follows_you": "Прати Вас", "account.hide_reblogs": "Сакриј подршке које даје корисника @{name}", - "account.joined": "Joined {date}", + "account.joined": "Придружио/ла се {date}", "account.last_status": "Последњи пут активан/на", "account.link_verified_on": "Власништво над овом везом је проверено {date}", "account.locked_info": "Статус приватности овог налога је подешен на закључано. Власник ручно прегледа ко га може пратити.", @@ -37,21 +37,26 @@ "account.posts_with_replies": "Трубе и одговори", "account.report": "Пријави @{name}", "account.requested": "Чекам одобрење. Кликните да поништите захтев за праћење", - "account.share": "Подели профил корисника @{name}", + "account.share": "Подели налог корисника @{name}", "account.show_reblogs": "Прикажи подршке од корисника @{name}", "account.statuses_counter": "{count, plural, one {{counter} објава} few {{counter} објаве} other {{counter} објава}}", "account.unblock": "Одблокирај корисника @{name}", "account.unblock_domain": "Одблокирај домен {domain}", - "account.unendorse": "Не истичи на профилу", + "account.unendorse": "Не истичи на налогу", "account.unfollow": "Отпрати", "account.unmute": "Уклони ућуткавање кориснику @{name}", "account.unmute_notifications": "Укључи назад обавештења од корисника @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Молимо покушајте поново после {retry_time, time, medium}.", "alert.rate_limited.title": "Ограничена брзина", "alert.unexpected.message": "Појавила се неочекивана грешка.", "alert.unexpected.title": "Упс!", "announcement.announcement": "Најава", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} недељно", "boost_modal.combo": "Можете притиснути {combo} да прескочите ово следећи пут", "bundle_column_error.body": "Нешто је пошло по злу приликом учитавања ове компоненте.", @@ -64,7 +69,7 @@ "column.bookmarks": "Обележивачи", "column.community": "Локална временска линија", "column.direct": "Директне поруке", - "column.directory": "Претражиј профиле", + "column.directory": "Претражи налоге", "column.domain_blocks": "Скривени домени", "column.favourites": "Омиљене", "column.follow_requests": "Захтеви за праћење", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Да ли сте сигурни да желите обришете овај статус?", "confirmations.delete_list.confirm": "Обриши", "confirmations.delete_list.message": "Да ли сте сигурни да желите да бесповратно обришете ову листу?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Сакриј цео домен", "confirmations.domain_block.message": "Да ли сте заиста сигурни да желите да блокирате цео домен {domain}? У већини случајева, неколико добро промишљених блокирања или ућуткавања су довољна и препоручљива.", "confirmations.logout.confirm": "Одјави се", @@ -152,7 +159,7 @@ "emoji_button.travel": "Путовања и места", "empty_column.account_suspended": "Налог суспендован", "empty_column.account_timeline": "Овде нема труба!", - "empty_column.account_unavailable": "Профил недоступан", + "empty_column.account_unavailable": "Налог је недоступан", "empty_column.blocks": "Још увек немате блокираних корисника.", "empty_column.bookmarked_statuses": "Још увек немате обележене трубе. Када их обележите, појавиће се овде.", "empty_column.community": "Локална временска линија је празна. Напишите нешто јавно да започнете!", @@ -184,7 +191,7 @@ "follow_requests.unlocked_explanation": "Иако ваш налог није закључан, особље {domain} је помислило да бисте можда желели ручно да прегледате захтеве за праћење са ових налога.", "generic.saved": "Сачувано", "getting_started.developers": "Програмери", - "getting_started.directory": "Профил фасцикле", + "getting_started.directory": "Директоријум налога", "getting_started.documentation": "Документација", "getting_started.heading": "Да почнете", "getting_started.invite": "Позовите људе", @@ -227,11 +234,11 @@ "keyboard_shortcuts.local": "да отворите локалну временску линију", "keyboard_shortcuts.mention": "да поменете аутора", "keyboard_shortcuts.muted": "да отворите листу ућутканих корисника", - "keyboard_shortcuts.my_profile": "да отворите ваш профил", + "keyboard_shortcuts.my_profile": "Погледајте ваш налог", "keyboard_shortcuts.notifications": "да отворите колону обавештења", "keyboard_shortcuts.open_media": "за отварање медија", "keyboard_shortcuts.pinned": "да отворите листу закачених труба", - "keyboard_shortcuts.profile": "да отворите профил аутора", + "keyboard_shortcuts.profile": "Погледајте налог аутора", "keyboard_shortcuts.reply": "да одговорите", "keyboard_shortcuts.requests": "да отворите листу примљених захтева за праћење", "keyboard_shortcuts.search": "да се пребаците на претрагу", @@ -276,11 +283,11 @@ "navigation_bar.direct": "Директне поруке", "navigation_bar.discover": "Откриј", "navigation_bar.domain_blocks": "Сакривени домени", - "navigation_bar.edit_profile": "Измени профил", + "navigation_bar.edit_profile": "Измени налог", "navigation_bar.favourites": "Омиљене", "navigation_bar.filters": "Пригушене речи", "navigation_bar.follow_requests": "Захтеви за праћење", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "Праћења и пратиоци", "navigation_bar.info": "О овој инстанци", "navigation_bar.keyboard_shortcuts": "Пречице на тастатури", "navigation_bar.lists": "Листе", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# гласање} few {# гласања} other {# гласања}}", "poll.vote": "Гласајте", "poll.voted": "Гласали сте за овај одговор", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Додај анкету", "poll_button.remove_poll": "Уклони анкету", "privacy.change": "Подеси статус приватности", @@ -398,7 +406,7 @@ "status.mute": "Ућуткај @{name}", "status.mute_conversation": "Ућуткај преписку", "status.open": "Прошири овај статус", - "status.pin": "Закачи на профил", + "status.pin": "Закачи на налог", "status.pinned": "Закачена труба", "status.read_more": "Прочитајте више", "status.reblog": "Подржи", @@ -419,7 +427,7 @@ "status.show_thread": "Show thread", "status.uncached_media_warning": "Није доступно", "status.unmute_conversation": "Укључи преписку", - "status.unpin": "Откачи са профила", + "status.unpin": "Откачи са налога", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Федерисано", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Анализа слике…", "upload_modal.apply": "Примени", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Изабери слику", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 8730db799..efcdd187c 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -47,11 +47,16 @@ "account.unmute": "Sluta tysta @{name}", "account.unmute_notifications": "Återaktivera aviseringar från @{name}", "account_note.placeholder": "Klicka för att lägga till anteckning", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Vänligen försök igen efter {retry_time, time, medium}.", "alert.rate_limited.title": "Mängd begränsad", "alert.unexpected.message": "Ett oväntat fel uppstod.", "alert.unexpected.title": "Hoppsan!", "announcement.announcement": "Meddelande", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per vecka", "boost_modal.combo": "Du kan trycka {combo} för att slippa detta nästa gång", "bundle_column_error.body": "Något gick fel medan denna komponent laddades.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Är du säker på att du vill radera denna status?", "confirmations.delete_list.confirm": "Radera", "confirmations.delete_list.message": "Är du säker på att du vill radera denna lista permanent?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Dölj hela domänen", "confirmations.domain_block.message": "Är du verkligen, verkligen säker på att du vill blockera hela {domain}? I de flesta fall är några riktade blockeringar eller nedtystade konton tillräckligt och att föredra. Du kommer inte se innehåll från den domänen i den allmänna tidslinjen eller i dina aviseringar. Dina följare från den domänen komer att tas bort.", "confirmations.logout.confirm": "Logga ut", @@ -164,7 +171,7 @@ "empty_column.follow_requests": "Du har inga följarförfrågningar än. När du får en kommer den visas här.", "empty_column.hashtag": "Det finns inget i denna hashtag ännu.", "empty_column.home": "Din hemma-tidslinje är tom! Besök {public} eller använd sökning för att komma igång och träffa andra användare.", - "empty_column.home.suggestions": "See some suggestions", + "empty_column.home.suggestions": "Se några förslag", "empty_column.list": "Det finns inget i denna lista än. När medlemmar i denna lista lägger till nya statusar kommer de att visas här.", "empty_column.lists": "Du har inga listor än. När skapar en kommer den dyka upp här.", "empty_column.mutes": "Du har ännu inte tystat några användare.", @@ -255,7 +262,7 @@ "lists.new.create": "Lägg till lista", "lists.new.title_placeholder": "Ny listrubrik", "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", + "lists.replies_policy.list": "Medlemmar i listan", "lists.replies_policy.none": "Ingen", "lists.replies_policy.title": "Visa svar till:", "lists.search": "Sök bland personer du följer", @@ -323,7 +330,7 @@ "notifications.filter.mentions": "Omnämningar", "notifications.filter.polls": "Omröstningsresultat", "notifications.filter.statuses": "Uppdateringar från personer som du följer", - "notifications.grant_permission": "Grant permission.", + "notifications.grant_permission": "Godkänn åtkomst.", "notifications.group": "{count} aviseringar", "notifications.mark_as_read": "Markera varje avisering som läst", "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {1 röst} other {# röster}}", "poll.vote": "Rösta", "poll.voted": "Du röstade för detta svar", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Lägg till en omröstning", "poll_button.remove_poll": "Ta bort omröstning", "privacy.change": "Justera sekretess", @@ -454,6 +462,7 @@ "upload_form.video_description": "Beskriv för personer med hörsel- eller synnedsättning", "upload_modal.analyzing_picture": "Analyserar bild…", "upload_modal.apply": "Verkställ", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Välj bild", "upload_modal.description_placeholder": "En snabb brun räv hoppar över den lata hunden", "upload_modal.detect_text": "Upptäck bildens text", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index c1eadb5a3..eca4765c4 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -47,11 +47,16 @@ "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "Log out", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 3d0d80e37..1b3e70fb6 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -47,11 +47,16 @@ "account.unmute": "@{name} இன் மீது மௌனத் தடையை நீக்குக", "account.unmute_notifications": "@{name} இலிருந்து அறிவிப்புகளின் மீது மௌனத் தடையை நீக்குக", "account_note.placeholder": "குறிப்பு ஒன்றை சேர்க்க சொடுக்கவும்", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "{retry_time, time, medium} க்கு பிறகு மீண்டும் முயற்சிக்கவும்.", "alert.rate_limited.title": "பயன்பாடு கட்டுப்படுத்தப்பட்டுள்ளது", "alert.unexpected.message": "எதிர்பாராத பிழை ஏற்பட்டுவிட்டது.", "alert.unexpected.title": "அச்சச்சோ!", "announcement.announcement": "அறிவிப்பு", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "ஒவ்வொரு வாரம் {count}", "boost_modal.combo": "நீங்கள் இதை அடுத்தமுறை தவிர்க்க {combo} வை அழுத்தவும்", "bundle_column_error.body": "இக்கூற்றை ஏற்றம் செய்யும்பொழுது ஏதோ தவறு ஏற்பட்டுள்ளது.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "இப்பதிவை நிச்சயமாக நீக்க விரும்புகிறீர்களா?", "confirmations.delete_list.confirm": "நீக்கு", "confirmations.delete_list.message": "இப்பட்டியலை நிரந்தரமாக நீக்க நிச்சயம் விரும்புகிறீர்களா?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "முழு களத்தையும் மறை", "confirmations.domain_block.message": "நீங்கள் முழு {domain} களத்தையும் நிச்சயமாக, நிச்சயமாகத் தடுக்க விரும்புகிறீர்களா? பெரும்பாலும் சில குறிப்பிட்ட பயனர்களைத் தடுப்பதே போதுமானது. முழு களத்தையும் தடுத்தால், அதிலிருந்து வரும் எந்தப் பதிவையும் உங்களால் காண முடியாது, மேலும் அப்பதிவுகள் குறித்த அறிவிப்புகளும் உங்களுக்கு வராது. அந்தக் களத்தில் இருக்கும் பின்தொடர்பவர்கள் உங்கள் பக்கத்திலிருந்து நீக்கப்படுவார்கள்.", "confirmations.logout.confirm": "வெளியேறு", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} மற்ற {# votes}}", "poll.vote": "வாக்களி", "poll.voted": "உங்கள் தேர்வு", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "வாக்கெடுப்பைச் சேர்க்கவும்", "poll_button.remove_poll": "வாக்கெடுப்பை அகற்று", "privacy.change": "நிலை தனியுரிமை", @@ -454,6 +462,7 @@ "upload_form.video_description": "செவித்திறன் மற்றும் பார்வைக் குறைபாடு உள்ளவர்களுக்காக விளக்குக‌", "upload_modal.analyzing_picture": "படம் ஆராயப்படுகிறது…", "upload_modal.apply": "உபயோகி", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "படத்தைத் தேர்வுசெய்ய", "upload_modal.description_placeholder": "பொருள் விளக்கம்", "upload_modal.detect_text": "படத்தில் இருக்கும் எழுத்தை கண்டறி", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index 1119c3800..2302e7ccc 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -47,11 +47,16 @@ "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "Log out", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index 306c1ec9f..348d753dc 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -47,11 +47,16 @@ "account.unmute": "@{name}పై మ్యూట్ ని తొలగించు", "account.unmute_notifications": "@{name} నుంచి ప్రకటనలపై మ్యూట్ ని తొలగించు", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "అనుకోని తప్పు జరిగినది.", "alert.unexpected.title": "అయ్యో!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "మీరు తదుపరిసారి దీనిని దాటవేయడానికి {combo} నొక్కవచ్చు", "bundle_column_error.body": "ఈ భాగం లోడ్ అవుతున్నప్పుడు ఏదో తప్పు జరిగింది.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "మీరు ఖచ్చితంగా ఈ స్టేటస్ ని తొలగించాలనుకుంటున్నారా?", "confirmations.delete_list.confirm": "తొలగించు", "confirmations.delete_list.message": "మీరు ఖచ్చితంగా ఈ జాబితాను శాశ్వతంగా తొలగించాలనుకుంటున్నారా?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "మొత్తం డొమైన్ను దాచు", "confirmations.domain_block.message": "మీరు నిజంగా నిజంగా మొత్తం {domain} ని బ్లాక్ చేయాలనుకుంటున్నారా? చాలా సందర్భాలలో కొన్ని లక్ష్యంగా ఉన్న బ్లాక్స్ లేదా మ్యూట్స్ సరిపోతాయి మరియు ఉత్తమమైనవి. మీరు ఆ డొమైన్ నుండి కంటెంట్ను ఏ ప్రజా కాలక్రమాలలో లేదా మీ నోటిఫికేషన్లలో చూడలేరు. ఆ డొమైన్ నుండి మీ అనుచరులు తీసివేయబడతారు.", "confirmations.logout.confirm": "Log out", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "ఎన్నుకోండి", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "ఒక ఎన్నికను చేర్చు", "poll_button.remove_poll": "ఎన్నికను తొలగించు", "privacy.change": "స్టేటస్ గోప్యతను సర్దుబాటు చేయండి", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 03dc725c5..90b8ba464 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -47,11 +47,16 @@ "account.unmute": "เลิกซ่อน @{name}", "account.unmute_notifications": "เลิกซ่อนการแจ้งเตือนจาก @{name}", "account_note.placeholder": "คลิกเพื่อเพิ่มหมายเหตุ", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "โปรดลองใหม่หลังจาก {retry_time, time, medium}", "alert.rate_limited.title": "มีการจำกัดอัตรา", "alert.unexpected.message": "เกิดข้อผิดพลาดที่ไม่คาดคิด", "alert.unexpected.title": "อุปส์!", "announcement.announcement": "ประกาศ", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} ต่อสัปดาห์", "boost_modal.combo": "คุณสามารถกด {combo} เพื่อข้ามสิ่งนี้ในครั้งถัดไป", "bundle_column_error.body": "มีบางอย่างผิดพลาดขณะโหลดส่วนประกอบนี้", @@ -87,7 +92,7 @@ "community.column_settings.remote_only": "ระยะไกลเท่านั้น", "compose_form.direct_message_warning": "จะส่งโพสต์นี้ไปยังผู้ใช้ที่กล่าวถึงเท่านั้น", "compose_form.direct_message_warning_learn_more": "เรียนรู้เพิ่มเติม", - "compose_form.hashtag_warning": "จะไม่แสดงรายการโพสต์นี้ภายใต้แฮชแท็กใด ๆ เนื่องจากไม่อยู่ในรายการ เฉพาะโพสต์สาธารณะเท่านั้นที่สามารถค้นหาโดยแฮชแท็ก", + "compose_form.hashtag_warning": "จะไม่แสดงรายการโพสต์นี้ภายใต้แฮชแท็กใด ๆ เนื่องจากไม่อยู่ในรายการ เฉพาะโพสต์สาธารณะเท่านั้นที่สามารถค้นหาได้โดยแฮชแท็ก", "compose_form.lock_disclaimer": "บัญชีของคุณไม่ได้ {locked} ใครก็ตามสามารถติดตามคุณเพื่อดูโพสต์สำหรับผู้ติดตามเท่านั้นของคุณ", "compose_form.lock_disclaimer.lock": "ล็อคอยู่", "compose_form.placeholder": "คุณกำลังคิดอะไรอยู่?", @@ -113,6 +118,8 @@ "confirmations.delete.message": "คุณแน่ใจหรือไม่ว่าต้องการลบโพสต์นี้?", "confirmations.delete_list.confirm": "ลบ", "confirmations.delete_list.message": "คุณแน่ใจหรือไม่ว่าต้องการลบรายการนี้อย่างถาวร?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "ปิดกั้นทั้งโดเมน", "confirmations.domain_block.message": "คุณแน่ใจจริง ๆ หรือไม่ว่าต้องการปิดกั้นทั้ง {domain}? ในกรณีส่วนใหญ่ การปิดกั้นหรือการซ่อนแบบกำหนดเป้าหมายไม่กี่รายการนั้นเพียงพอและเป็นที่นิยม คุณจะไม่เห็นเนื้อหาจากโดเมนนั้นในเส้นเวลาสาธารณะใด ๆ หรือการแจ้งเตือนของคุณ จะเอาผู้ติดตามของคุณจากโดเมนนั้นออก", "confirmations.logout.confirm": "ออกจากระบบ", @@ -152,7 +159,7 @@ "emoji_button.travel": "การเดินทางและสถานที่", "empty_column.account_suspended": "ระงับบัญชีอยู่", "empty_column.account_timeline": "ไม่มีโพสต์ที่นี่!", - "empty_column.account_unavailable": "ไม่มีโปรไฟล์", + "empty_column.account_unavailable": "โปรไฟล์ไม่พร้อมใช้งาน", "empty_column.blocks": "คุณยังไม่ได้ปิดกั้นผู้ใช้ใด ๆ", "empty_column.bookmarked_statuses": "คุณยังไม่มีโพสต์ที่เพิ่มที่คั่นหน้าไว้ใด ๆ เมื่อคุณเพิ่มที่คั่นหน้าโพสต์ โพสต์จะปรากฏที่นี่", "empty_column.community": "เส้นเวลาในเซิร์ฟเวอร์ว่างเปล่า เขียนบางอย่างเป็นสาธารณะเพื่อเริ่มต้น!", @@ -164,7 +171,7 @@ "empty_column.follow_requests": "คุณยังไม่มีคำขอติดตามใด ๆ เมื่อคุณได้รับคำขอ คำขอจะปรากฏที่นี่", "empty_column.hashtag": "ยังไม่มีสิ่งใดในแฮชแท็กนี้", "empty_column.home": "เส้นเวลาหน้าแรกของคุณว่างเปล่า! ติดตามผู้คนเพิ่มเติมเพื่อเติมเส้นเวลาให้เต็ม {suggestions}", - "empty_column.home.suggestions": "ดูข้อเสนอแนะบางอย่าง", + "empty_column.home.suggestions": "ดูข้อเสนอแนะบางส่วน", "empty_column.list": "ยังไม่มีสิ่งใดในรายการนี้ เมื่อสมาชิกของรายการนี้โพสต์โพสต์ใหม่ โพสต์จะปรากฏที่นี่", "empty_column.lists": "คุณยังไม่มีรายการใด ๆ เมื่อคุณสร้างรายการ รายการจะปรากฏที่นี่", "empty_column.mutes": "คุณยังไม่ได้ซ่อนผู้ใช้ใด ๆ", @@ -172,12 +179,12 @@ "empty_column.public": "ไม่มีสิ่งใดที่นี่! เขียนบางอย่างเป็นสาธารณะ หรือติดตามผู้ใช้จากเซิร์ฟเวอร์อื่น ๆ ด้วยตนเองเพื่อเติมให้เต็ม", "error.unexpected_crash.explanation": "เนื่องจากข้อบกพร่องในโค้ดของเราหรือปัญหาความเข้ากันได้ของเบราว์เซอร์ จึงไม่สามารถแสดงหน้านี้ได้อย่างถูกต้อง", "error.unexpected_crash.explanation_addons": "ไม่สามารถแสดงหน้านี้ได้อย่างถูกต้อง ข้อผิดพลาดนี้เป็นไปได้ว่าเกิดจากส่วนเสริมของเบราว์เซอร์หรือเครื่องมือการแปลอัตโนมัติ", - "error.unexpected_crash.next_steps": "ลองรีเฟรชหน้า หากนั่นไม่ช่วย คุณอาจยังสามารถใช้ Mastodon ผ่านเบราว์เซอร์อื่นหรือแอป", - "error.unexpected_crash.next_steps_addons": "ลองปิดใช้งานส่วนเสริมหรือเครื่องมือแล้วรีเฟรชหน้า หากนั่นไม่ช่วย คุณอาจยังสามารถใช้ Mastodon ผ่านเบราว์เซอร์อื่นหรือแอป", + "error.unexpected_crash.next_steps": "ลองรีเฟรชหน้า หากนั่นไม่ช่วย คุณอาจยังสามารถใช้ Mastodon ได้ผ่านเบราว์เซอร์อื่นหรือแอป", + "error.unexpected_crash.next_steps_addons": "ลองปิดใช้งานส่วนเสริมหรือเครื่องมือแล้วรีเฟรชหน้า หากนั่นไม่ช่วย คุณอาจยังสามารถใช้ Mastodon ได้ผ่านเบราว์เซอร์อื่นหรือแอป", "errors.unexpected_crash.copy_stacktrace": "คัดลอกการติดตามสแตกไปยังคลิปบอร์ด", "errors.unexpected_crash.report_issue": "รายงานปัญหา", "follow_recommendations.done": "เสร็จสิ้น", - "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", + "follow_recommendations.heading": "ติดตามผู้คนที่คุณต้องการเห็นโพสต์! นี่คือข้อเสนอแนะบางส่วน", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", "follow_request.authorize": "อนุญาต", "follow_request.reject": "ปฏิเสธ", @@ -188,7 +195,7 @@ "getting_started.documentation": "เอกสารประกอบ", "getting_started.heading": "เริ่มต้นใช้งาน", "getting_started.invite": "เชิญผู้คน", - "getting_started.open_source_notice": "Mastodon เป็นซอฟต์แวร์โอเพนซอร์ส คุณสามารถมีส่วนร่วมหรือรายงานปัญหาใน GitHub ที่ {github}", + "getting_started.open_source_notice": "Mastodon เป็นซอฟต์แวร์โอเพนซอร์ส คุณสามารถมีส่วนร่วมหรือรายงานปัญหาได้ใน GitHub ที่ {github}", "getting_started.security": "การตั้งค่าบัญชี", "getting_started.terms": "เงื่อนไขการให้บริการ", "hashtag.column_header.tag_mode.all": "และ {additional}", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, other {# การลงคะแนน}}", "poll.vote": "ลงคะแนน", "poll.voted": "คุณได้ลงคะแนนให้กับคำตอบนี้", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "เพิ่มการสำรวจความคิดเห็น", "poll_button.remove_poll": "เอาการสำรวจความคิดเห็นออก", "privacy.change": "เปลี่ยนความเป็นส่วนตัวของโพสต์", @@ -362,7 +370,7 @@ "reply_indicator.cancel": "ยกเลิก", "report.forward": "ส่งต่อไปยัง {target}", "report.forward_hint": "บัญชีมาจากเซิร์ฟเวอร์อื่น ส่งสำเนาของรายงานที่ไม่ระบุตัวตนไปที่นั่นด้วย?", - "report.hint": "จะส่งรายงานไปยังผู้ควบคุมเซิร์ฟเวอร์ของคุณ คุณสามารถให้คำอธิบายเหตุผลที่คุณรายงานบัญชีนี้ด้านล่าง:", + "report.hint": "จะส่งรายงานไปยังผู้ควบคุมเซิร์ฟเวอร์ของคุณ คุณสามารถให้คำอธิบายเหตุผลที่คุณรายงานบัญชีนี้ได้ด้านล่าง:", "report.placeholder": "ความคิดเห็นเพิ่มเติม", "report.submit": "ส่ง", "report.target": "กำลังรายงาน {target}", @@ -454,6 +462,7 @@ "upload_form.video_description": "อธิบายสำหรับผู้สูญเสียการได้ยินหรือบกพร่องทางการมองเห็น", "upload_modal.analyzing_picture": "กำลังวิเคราะห์รูปภาพ…", "upload_modal.apply": "นำไปใช้", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "เลือกภาพ", "upload_modal.description_placeholder": "สุนัขจิ้งจอกสีน้ำตาลที่ว่องไวกระโดดข้ามสุนัขขี้เกียจ", "upload_modal.detect_text": "ตรวจหาข้อความจากรูปภาพ", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index ec97545e7..2ae8a908a 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -9,10 +9,10 @@ "account.browse_more_on_origin_server": "Orijinal profilde daha fazlasına göz atın", "account.cancel_follow_request": "Takip isteğini iptal et", "account.direct": "@{name} adlı kişiye mesaj gönder", - "account.disable_notifications": "@{name} gönderi yaptığında bana bildirmeyi durdur", + "account.disable_notifications": "@{name} gönderi atınca bana bildirmeyi durdur", "account.domain_blocked": "Alan adı engellendi", "account.edit_profile": "Profili düzenle", - "account.enable_notifications": "@{name} gönderi yaptığında bana bildir", + "account.enable_notifications": "@{name} gönderi atınca bana bildir", "account.endorse": "Profildeki özellik", "account.follow": "Takip et", "account.followers": "Takipçi", @@ -33,13 +33,13 @@ "account.mute_notifications": "@{name} adlı kişinin bildirimlerini kapat", "account.muted": "Susturuldu", "account.never_active": "Asla", - "account.posts": "Toot", - "account.posts_with_replies": "Tootlar ve cevaplar", + "account.posts": "Gönderiler", + "account.posts_with_replies": "Gönderiler ve yanıtlar", "account.report": "@{name} adlı kişiyi bildir", "account.requested": "Onay bekleniyor. Takip isteğini iptal etmek için tıklayın", "account.share": "@{name} adlı kişinin profilini paylaş", "account.show_reblogs": "@{name} kişisinin boostlarını göster", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toot}}", + "account.statuses_counter": "{count, plural, one {{counter} Gönderi} other {{counter} Gönderi}}", "account.unblock": "@{name} adlı kişinin engelini kaldır", "account.unblock_domain": "{domain} alan adının engelini kaldır", "account.unendorse": "Profilde gösterme", @@ -47,13 +47,18 @@ "account.unmute": "@{name} adlı kişinin sesini aç", "account.unmute_notifications": "@{name} adlı kişinin bildirimlerini aç", "account_note.placeholder": "Not eklemek için tıklayın", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Lütfen {retry_time, time, medium} süresinden sonra tekrar deneyin.", "alert.rate_limited.title": "Oran sınırlıdır", "alert.unexpected.message": "Beklenmedik bir hata oluştu.", "alert.unexpected.title": "Hay aksi!", "announcement.announcement": "Duyuru", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "Haftada {count}", - "boost_modal.combo": "Bir daha ki sefere {combo} tuşuna basabilirsiniz", + "boost_modal.combo": "Bir daha ki sefere {combo} tuşuna basabilirsin", "bundle_column_error.body": "Bu bileşen yüklenirken bir şeyler ters gitti.", "bundle_column_error.retry": "Tekrar deneyin", "bundle_column_error.title": "Ağ hatası", @@ -72,7 +77,7 @@ "column.lists": "Listeler", "column.mutes": "Sessize alınmış kullanıcılar", "column.notifications": "Bildirimler", - "column.pins": "Sabitlenmiş tootlar", + "column.pins": "Sabitlenmiş gönderiler", "column.public": "Federe zaman tüneli", "column_back_button.label": "Geri", "column_header.hide_settings": "Ayarları gizle", @@ -85,10 +90,10 @@ "community.column_settings.local_only": "Sadece yerel", "community.column_settings.media_only": "Sadece medya", "community.column_settings.remote_only": "Sadece uzak", - "compose_form.direct_message_warning": "Bu toot sadece belirtilen kullanıcılara gönderilecektir.", + "compose_form.direct_message_warning": "Bu gönderi sadece belirtilen kullanıcılara gönderilecektir.", "compose_form.direct_message_warning_learn_more": "Daha fazla bilgi edinin", - "compose_form.hashtag_warning": "Bu toot liste dışı olduğu için hiç bir etikette yer almayacak. Sadece herkese açık tootlar etiketlerde bulunabilir.", - "compose_form.lock_disclaimer": "Hesabınız {locked} değil. Sadece takipçilerle paylaştığınız gönderileri görebilmek için sizi herhangi bir kullanıcı takip edebilir.", + "compose_form.hashtag_warning": "Bu gönderi liste dışı olduğu için hiç bir etikette yer almayacak. Sadece herkese açık gönderiler etiketlerde bulunabilir.", + "compose_form.lock_disclaimer": "Hesabın {locked} değil. Yalnızca takipçilere özel gönderilerini görüntülemek için herkes seni takip edebilir.", "compose_form.lock_disclaimer.lock": "kilitli", "compose_form.placeholder": "Aklında ne var?", "compose_form.poll.add_option": "Bir seçenek ekleyin", @@ -108,24 +113,26 @@ "confirmation_modal.cancel": "İptal", "confirmations.block.block_and_report": "Engelle ve Bildir", "confirmations.block.confirm": "Engelle", - "confirmations.block.message": "{name} adlı kullanıcıyı engellemek istediğinizden emin misiniz?", + "confirmations.block.message": "{name} adlı kullanıcıyı engellemek istediğinden emin misin?", "confirmations.delete.confirm": "Sil", - "confirmations.delete.message": "Bu tootu silmek istediğinizden emin misiniz?", + "confirmations.delete.message": "Bu tootu silmek istediğinden emin misin?", "confirmations.delete_list.confirm": "Sil", - "confirmations.delete_list.message": "Bu listeyi kalıcı olarak silmek istediğinize emin misiniz?", + "confirmations.delete_list.message": "Bu listeyi kalıcı olarak silmek istediğinden emin misin?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Alanın tamamını engelle", - "confirmations.domain_block.message": "tüm {domain} alan adını engellemek istediğinizden emin misiniz? Genellikle birkaç hedefli engel ve susturma işi görür ve tercih edilir.", + "confirmations.domain_block.message": "{domain} alanının tamamını engellemek istediğinden gerçekten emin misin? Genellikle hedeflenen birkaç engelleme veya sessize alma yeterlidir ve tercih edilir. Bu alan adından gelen içeriği herhangi bir genel zaman çizelgesinde veya bildirimlerinde görmezsin. Bu alan adındaki takipçilerin kaldırılır.", "confirmations.logout.confirm": "Oturumu kapat", - "confirmations.logout.message": "Oturumu kapatmak istediğinizden emin misiniz?", + "confirmations.logout.message": "Oturumu kapatmak istediğinden emin misin?", "confirmations.mute.confirm": "Sessize al", - "confirmations.mute.explanation": "Bu onlardan gelen ve onlardan bahseden gönderileri gizleyecek, fakat yine de onların gönderilerinizi görmelerine ve sizi takip etmelerine izin verecektir.", - "confirmations.mute.message": "{name} kullanıcısını sessize almak istediğinizden emin misiniz?", + "confirmations.mute.explanation": "Bu, onlardan gelen ve bahseden gönderileri gizler. Ancak yine de gönderilerini görmelerine ve seni takip etmelerine izin verilir.", + "confirmations.mute.message": "{name} kullanıcısını sessize almak istediğinden emin misin?", "confirmations.redraft.confirm": "Sil ve yeniden taslak yap", - "confirmations.redraft.message": "Bu toot'u silmek ve yeniden taslak yapmak istediğinizden emin misiniz? Favoriler, boostlar kaybolacak ve orijinal gönderiye verilen yanıtlar sahipsiz kalacak.", + "confirmations.redraft.message": "Bu tootu silmek ve yeniden taslak yapmak istediğinden emin misin? Favoriler, boostlar kaybolur ve özgün gönderiye verilen yanıtlar sahipsiz kalır.", "confirmations.reply.confirm": "Yanıtla", - "confirmations.reply.message": "Şimdi yanıtlarken o an oluşturduğunuz mesajın üzerine yazılır. Devam etmek istediğinize emin misiniz?", + "confirmations.reply.message": "Şimdi yanıtlarken o an oluşturduğun mesajın üzerine yazılır. Devam etmek istediğine emin misin?", "confirmations.unfollow.confirm": "Takibi bırak", - "confirmations.unfollow.message": "{name} adlı kullanıcıyı takibi bırakmak istediğinizden emin misiniz?", + "confirmations.unfollow.message": "{name} adlı kullanıcıyı takibi bırakmak istediğinden emin misin?", "conversation.delete": "Sohbeti sil", "conversation.mark_as_read": "Okundu olarak işaretle", "conversation.open": "Sohbeti görüntüle", @@ -151,22 +158,22 @@ "emoji_button.symbols": "Semboller", "emoji_button.travel": "Seyahat ve Yerler", "empty_column.account_suspended": "Hesap askıya alındı", - "empty_column.account_timeline": "Burada hiç toot yok!", + "empty_column.account_timeline": "Burada hiç gönderi yok!", "empty_column.account_unavailable": "Profil kullanılamıyor", - "empty_column.blocks": "Henüz bir kullanıcıyı engellemediniz.", - "empty_column.bookmarked_statuses": "Henüz yer imine eklediğiniz toot yok. Yer imine eklendiğinde burada görünecek.", + "empty_column.blocks": "Henüz herhangi bir kullanıcıyı engellemedin.", + "empty_column.bookmarked_statuses": "Henüz yer imine eklediğin toot yok. Bir tanesi yer imine eklendiğinde burada görünür.", "empty_column.community": "Yerel zaman çizelgesi boş. Daha fazla eğlence için herkese açık bir gönderi paylaşın!", - "empty_column.direct": "Henüz direkt mesajınız yok. Bir tane gönderdiğinizde veya aldığınızda burada görünecektir.", + "empty_column.direct": "Henüz direkt mesajın yok. Bir tane gönderdiğinde veya aldığında burada görünür.", "empty_column.domain_blocks": "Henüz hiçbir gizli alan adı yok.", - "empty_column.favourited_statuses": "Hiç favori tootunuz yok. Favori olduğunda burada görünecek.", - "empty_column.favourites": "Kimse bu tootu favorilerine eklememiş. Biri eklediğinde burada görünecek.", + "empty_column.favourited_statuses": "Favori tootun yok. Favori tootun olduğunda burada görünür.", + "empty_column.favourites": "Kimse bu gönderiyi favorilerine eklememiş. Biri eklediğinde burada görünecek.", "empty_column.follow_recommendations": "Öyle görünüyor ki sizin için hiçbir öneri oluşturulamıyor. Tanıdığınız kişileri aramak için aramayı kullanabilir veya öne çıkanlara bakabilirsiniz.", "empty_column.follow_requests": "Hiç takip isteğiniz yok. Bir tane aldığınızda burada görünecek.", "empty_column.hashtag": "Henüz bu hashtag’e sahip hiçbir gönderi yok.", - "empty_column.home": "Henüz kimseyi takip etmiyorsunuz. {public} ziyaret edebilir veya arama kısmını kullanarak diğer kullanıcılarla iletişime geçebilirsiniz.", + "empty_column.home": "Ana zaman tünelin boş! Akışını doldurmak için daha fazla kişiyi takip et. {suggestions}", "empty_column.home.suggestions": "Bazı önerileri görün", "empty_column.list": "Bu listede henüz hiçbir şey yok.", - "empty_column.lists": "Henüz listeniz yok. Liste oluşturduğunuzda burada görünecek.", + "empty_column.lists": "Henüz listen yok. Liste oluşturduğunda burada görünür.", "empty_column.mutes": "Henüz bir kullanıcıyı sessize almadınız.", "empty_column.notifications": "Henüz bildiriminiz yok. Sohbete başlamak için başkalarıyla etkileşim kurun.", "empty_column.public": "Burada hiçbir şey yok! Herkese açık bir şeyler yazın veya burayı doldurmak için diğer sunuculardaki kullanıcıları takip edin", @@ -210,14 +217,14 @@ "intervals.full.minutes": "{number, plural, one {# dakika} other {# dakika}}", "keyboard_shortcuts.back": "geriye gitmek için", "keyboard_shortcuts.blocked": "engellenen kullanıcılar listesini açmak için", - "keyboard_shortcuts.boost": "boostlamak için", + "keyboard_shortcuts.boost": "Gönderiyi teşvik et", "keyboard_shortcuts.column": "sütunlardan birindeki duruma odaklanmak için", "keyboard_shortcuts.compose": "yazma alanına odaklanmak için", "keyboard_shortcuts.description": "Açıklama", "keyboard_shortcuts.direct": "direkt mesajlar sütununu açmak için", "keyboard_shortcuts.down": "listede aşağıya inmek için", - "keyboard_shortcuts.enter": "durumu açmak için", - "keyboard_shortcuts.favourite": "beğenmek için", + "keyboard_shortcuts.enter": "Gönderiyi aç", + "keyboard_shortcuts.favourite": "Gönderiyi beğen", "keyboard_shortcuts.favourites": "favoriler listesini açmak için", "keyboard_shortcuts.federated": "federe edilmiş zaman tünelini açmak için", "keyboard_shortcuts.heading": "Klavye kısayolları", @@ -230,16 +237,16 @@ "keyboard_shortcuts.my_profile": "profilinizi açmak için", "keyboard_shortcuts.notifications": "bildirimler sütununu açmak için", "keyboard_shortcuts.open_media": "medyayı açmak için", - "keyboard_shortcuts.pinned": "sabitlenmiş tootların listesini açmak için", + "keyboard_shortcuts.pinned": "Sabitlenmiş gönderilerin listesini aç", "keyboard_shortcuts.profile": "yazarın profilini açmak için", - "keyboard_shortcuts.reply": "yanıtlamak için", + "keyboard_shortcuts.reply": "Gönderiyi yanıtla", "keyboard_shortcuts.requests": "takip istekleri listesini açmak için", "keyboard_shortcuts.search": "aramaya odaklanmak için", "keyboard_shortcuts.spoilers": "CW alanını göstermek/gizlemek için", "keyboard_shortcuts.start": "\"başlarken\" sütununu açmak için", "keyboard_shortcuts.toggle_hidden": "CW'den önceki yazıyı göstermek/gizlemek için", "keyboard_shortcuts.toggle_sensitivity": "medyayı göstermek/gizlemek için", - "keyboard_shortcuts.toot": "yepyeni bir toot başlatmak için", + "keyboard_shortcuts.toot": "Yeni bir gönderi başlat", "keyboard_shortcuts.unfocus": "aramada bir gönderiye odaklanmamak için", "keyboard_shortcuts.up": "listede yukarıya çıkmak için", "lightbox.close": "Kapat", @@ -272,7 +279,7 @@ "navigation_bar.blocks": "Engellenen kullanıcılar", "navigation_bar.bookmarks": "Yer İmleri", "navigation_bar.community_timeline": "Yerel Zaman Tüneli", - "navigation_bar.compose": "Yeni toot oluştur", + "navigation_bar.compose": "Yeni gönderi yaz", "navigation_bar.direct": "Direkt Mesajlar", "navigation_bar.discover": "Keşfet", "navigation_bar.domain_blocks": "Engellenen alan adları", @@ -287,17 +294,17 @@ "navigation_bar.logout": "Oturumu kapat", "navigation_bar.mutes": "Sessize alınmış kullanıcılar", "navigation_bar.personal": "Kişisel", - "navigation_bar.pins": "Sabitlenmiş tootlar", + "navigation_bar.pins": "Sabitlenmiş gönderiler", "navigation_bar.preferences": "Tercihler", "navigation_bar.public_timeline": "Federe zaman tüneli", "navigation_bar.security": "Güvenlik", - "notification.favourite": "{name} tootunu beğendi", + "notification.favourite": "{name} gönderini beğendi", "notification.follow": "{name} seni takip etti", "notification.follow_request": "{name} size takip isteği gönderdi", "notification.mention": "{name} senden bahsetti", "notification.own_poll": "Anketiniz sona erdi", "notification.poll": "Oy verdiğiniz bir anket sona erdi", - "notification.reblog": "{name} tootunu boostladı", + "notification.reblog": "{name} gönderini teşvik etti", "notification.status": "{name} az önce gönderdi", "notifications.clear": "Bildirimleri temizle", "notifications.clear_confirmation": "Tüm bildirimlerinizi kalıcı olarak temizlemek ister misiniz?", @@ -314,7 +321,7 @@ "notifications.column_settings.reblog": "Boostlar:", "notifications.column_settings.show": "Sütunda göster", "notifications.column_settings.sound": "Ses çal", - "notifications.column_settings.status": "Yeni tootlar:", + "notifications.column_settings.status": "Yeni gönderiler:", "notifications.column_settings.unread_markers.category": "Okunmamış bildirim işaretleri", "notifications.filter.all": "Tümü", "notifications.filter.boosts": "Boostlar", @@ -339,9 +346,10 @@ "poll.total_votes": "{count, plural, one {# oy} other {# oy}}", "poll.vote": "Oy ver", "poll.voted": "Bu cevap için oy kullandınız", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Bir anket ekleyin", "poll_button.remove_poll": "Anketi kaldır", - "privacy.change": "Toot gizliliğini ayarlayın", + "privacy.change": "Gönderi gizliliğini değiştir", "privacy.direct.long": "Sadece bahsedilen kullanıcılar için görünür", "privacy.direct.short": "Direkt", "privacy.private.long": "Sadece takipçiler için görünür", @@ -352,7 +360,7 @@ "privacy.unlisted.short": "Listelenmemiş", "refresh": "Yenile", "regeneration_indicator.label": "Yükleniyor…", - "regeneration_indicator.sublabel": "Ana akışınız hazırlanıyor!", + "regeneration_indicator.sublabel": "Ana akışın hazırlanıyor!", "relative_time.days": "{number}g", "relative_time.hours": "{number}sa", "relative_time.just_now": "şimdi", @@ -368,18 +376,18 @@ "report.target": "{target} Bildiriliyor", "search.placeholder": "Ara", "search_popout.search_format": "Gelişmiş arama biçimi", - "search_popout.tips.full_text": "Basit metin yazdığınız, tercih ettiğiniz, boostladığınız veya bunlardan bahsettiğiniz tootların yanı sıra kullanıcı adlarını, görünen adları ve hashtag'leri eşleştiren tootları döndürür.", + "search_popout.tips.full_text": "Basit metin yazdığınız, beğendiğiniz, teşvik ettiğiniz veya söz edilen gönderilerin yanı sıra kullanıcı adlarını, görünen adları ve hashtag'leri eşleştiren gönderileri de döndürür.", "search_popout.tips.hashtag": "etiket", - "search_popout.tips.status": "toot", + "search_popout.tips.status": "gönderi", "search_popout.tips.text": "Basit metin, eşleşen görünen adları, kullanıcı adlarını ve hashtag'leri döndürür", "search_popout.tips.user": "kullanıcı", "search_results.accounts": "İnsanlar", "search_results.hashtags": "Etiketler", - "search_results.statuses": "Tootlar", - "search_results.statuses_fts_disabled": "Bu Mastodon sunucusunda toot içeriğine göre arama etkin değil.", + "search_results.statuses": "Gönderiler", + "search_results.statuses_fts_disabled": "Bu Mastodon sunucusunda gönderi içeriğine göre arama etkin değil.", "search_results.total": "{count, number} {count, plural, one {sonuç} other {sonuç}}", "status.admin_account": "@{name} için denetim arayüzünü açın", - "status.admin_status": "Denetim arayüzünde bu durumu açın", + "status.admin_status": "Denetim arayüzünde bu gönderiyi açın", "status.block": "@{name} adlı kişiyi engelle", "status.bookmark": "Yer imlerine ekle", "status.cancel_reblog_private": "Boostu geri al", @@ -392,7 +400,7 @@ "status.favourite": "Beğen", "status.filtered": "Filtrelenmiş", "status.load_more": "Daha fazlasını yükle", - "status.media_hidden": "Gizli görsel", + "status.media_hidden": "Medya gizli", "status.mention": "@{name} kişisinden bahset", "status.more": "Daha fazla", "status.mute": "@{name} kişisini sessize al", @@ -454,6 +462,7 @@ "upload_form.video_description": "İşitme kaybı veya görme engeli olan kişiler için tarif edin", "upload_modal.analyzing_picture": "Resim analiz ediliyor…", "upload_modal.apply": "Uygula", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Resim seç", "upload_modal.description_placeholder": "Pijamalı hasta yağız şoföre çabucak güvendi", "upload_modal.detect_text": "Resimdeki metni algıla", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index fa53a59db..456c5f72d 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -47,11 +47,16 @@ "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Ой!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Бетерү", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "Чыгу", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Куллан", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index c1eadb5a3..eca4765c4 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -47,11 +47,16 @@ "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "Log out", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 5e21d00fc..808701957 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -47,11 +47,16 @@ "account.unmute": "Зняти глушення з @{name}", "account.unmute_notifications": "Показувати сповіщення від @{name}", "account_note.placeholder": "Коментарі відсутні", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Спробуйте ще раз через {retry_time, time, medium}.", "alert.rate_limited.title": "Швидкість обмежена", "alert.unexpected.message": "Трапилась неочікувана помилка.", "alert.unexpected.title": "Ой!", "announcement.announcement": "Оголошення", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} в тиждень", "boost_modal.combo": "Ви можете натиснути {combo}, щоб пропустити це наступного разу", "bundle_column_error.body": "Щось пішло не так під час завантаження компоненту.", @@ -99,9 +104,9 @@ "compose_form.poll.switch_to_single": "Перемкнути у режим вибору однієї відповіді", "compose_form.publish": "Дмухнути", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Позначити медіа як дражливе", - "compose_form.sensitive.marked": "Медіа відмічене як дражливе", - "compose_form.sensitive.unmarked": "Медіа не відмічене як дражливе", + "compose_form.sensitive.hide": "{count, plural, one {Позначити медіа делікатним} other {Позначити медіа делікатними}}", + "compose_form.sensitive.marked": "{count, plural, one {Медіа позначене делікатним} other {Медіа позначені делікатними}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Медіа не позначене делікатним} other {Медіа не позначені делікатними}}", "compose_form.spoiler.marked": "Текст приховано під попередженням", "compose_form.spoiler.unmarked": "Текст видимий", "compose_form.spoiler_placeholder": "Напишіть своє попередження тут", @@ -113,6 +118,8 @@ "confirmations.delete.message": "Ви впевнені, що хочете видалити цей допис?", "confirmations.delete_list.confirm": "Видалити", "confirmations.delete_list.message": "Ви впевнені, що хочете видалити цей список назавжди?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Сховати весь домен", "confirmations.domain_block.message": "Ви точно, точно впевнені, що хочете заблокувати весь домен {domain}? У більшості випадків для нормальної роботи краще заблокувати/заглушити лише деяких користувачів. Ви не зможете бачити контент з цього домену у будь-яких стрічках або ваших сповіщеннях. Ваші підписники з цього домену будуть відписані від вас.", "confirmations.logout.confirm": "Вийти", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# голос} few {# голоси} many {# голосів} other {# голосів}}", "poll.vote": "Проголосувати", "poll.voted": "Ви голосували за цю відповідь", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Додати опитування", "poll_button.remove_poll": "Видалити опитування", "privacy.change": "Змінити видимість допису", @@ -410,7 +418,7 @@ "status.reply": "Відповісти", "status.replyAll": "Відповісти на ланцюжок", "status.report": "Поскаржитися на @{name}", - "status.sensitive_warning": "Дражливий зміст", + "status.sensitive_warning": "Делікатний зміст", "status.share": "Поділитися", "status.show_less": "Згорнути", "status.show_less_all": "Показувати менше для всіх", @@ -454,6 +462,7 @@ "upload_form.video_description": "Опишіть для людей із вадами слуху або зору", "upload_modal.analyzing_picture": "Аналізуємо малюнок…", "upload_modal.apply": "Застосувати", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Вибрати зображення", "upload_modal.description_placeholder": "Щурячий бугай із їжаком-харцизом в'ючись підписали ґешефт у єнах", "upload_modal.detect_text": "Виявити текст на малюнку", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index 4885056b7..55f6856d2 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -1,28 +1,28 @@ { - "account.account_note_header": "Note", + "account.account_note_header": "نوٹ", "account.add_or_remove_from_list": "فہرست میں شامل یا برطرف کریں", "account.badges.bot": "روبوٹ", - "account.badges.group": "Group", + "account.badges.group": "گروپ", "account.block": "مسدود @{name}", "account.block_domain": "{domain} سے سب چھپائیں", "account.blocked": "مسدود کردہ", - "account.browse_more_on_origin_server": "Browse more on the original profile", + "account.browse_more_on_origin_server": "اصل پروفائل پر مزید براؤز کریں", "account.cancel_follow_request": "درخواستِ پیروی منسوخ کریں", "account.direct": "راست پیغام @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "جب @{name} پوسٹ کرے تو مجھ مطلع نہ کریں", "account.domain_blocked": "پوشیدہ ڈومین", "account.edit_profile": "مشخص ترمیم کریں", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "جب @{name} پوسٹ کرے تو مجھ مطلع کریں", "account.endorse": "مشکص پر نمایاں کریں", "account.follow": "پیروی کریں", "account.followers": "پیروکار", "account.followers.empty": "\"ہنوز اس صارف کی کوئی پیروی نہیں کرتا\".", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", + "account.followers_counter": "{count, plural,one {{counter} پیروکار} other {{counter} پیروکار}}", + "account.following_counter": "{count, plural, one {{counter} پیروی کر رہے ہیں} other {{counter} پیروی کر رہے ہیں}}", "account.follows.empty": "\"یہ صارف ہنوز کسی کی پیروی نہیں کرتا ہے\".", "account.follows_you": "آپ کا پیروکار ہے", "account.hide_reblogs": "@{name} سے فروغ چھپائیں", - "account.joined": "Joined {date}", + "account.joined": "{date} شامل ہوئے", "account.last_status": "آخری فعال", "account.link_verified_on": "اس لنک کی ملکیت کی توثیق {date} پر کی گئی تھی", "account.locked_info": "اس اکاونٹ کا اخفائی ضابطہ مقفل ہے۔ صارف کی پیروی کون کر سکتا ہے اس کا جائزہ وہ خود لیتا ہے.", @@ -47,11 +47,16 @@ "account.unmute": "@{name} کو با آواز کریں", "account.unmute_notifications": "@{name} سے اطلاعات کو با آواز کریں", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "\"{retry_time, time, medium} کے بعد کوشش کریں\".", - "alert.rate_limited.title": "Rate limited", + "alert.rate_limited.title": "محدود شرح", "alert.unexpected.message": "ایک غیر متوقع سہو ہوا ہے.", "alert.unexpected.title": "ا رے!", - "announcement.announcement": "Announcement", + "announcement.announcement": "اعلان", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} فی ہفتہ", "boost_modal.combo": "آئیندہ یہ نہ دیکھنے کیلئے آپ {combo} دبا سکتے ہیں", "bundle_column_error.body": "اس عنصر کو برآمد کرتے وقت کچھ خرابی پیش آئی ہے.", @@ -61,7 +66,7 @@ "bundle_modal_error.message": "اس عنصر کو برآمد کرتے وقت کچھ خرابی پیش آئی ہے.", "bundle_modal_error.retry": "دوبارہ کوشش کریں", "column.blocks": "مسدود صارفین", - "column.bookmarks": "Bookmarks", + "column.bookmarks": "بُک مارکس", "column.community": "مقامی زمانی جدول", "column.direct": "راست پیغام", "column.directory": "مشخصات کا مطالعہ کریں", @@ -82,9 +87,9 @@ "column_header.show_settings": "ترتیبات دکھائیں", "column_header.unpin": "رہا کریں", "column_subheading.settings": "ترتیبات", - "community.column_settings.local_only": "Local only", + "community.column_settings.local_only": "صرف مقامی", "community.column_settings.media_only": "وسائل فقط", - "community.column_settings.remote_only": "Remote only", + "community.column_settings.remote_only": "صرف خارجی", "compose_form.direct_message_warning": "یہ ٹوٹ صرف مذکورہ صارفین کو بھیجا جائے گا.", "compose_form.direct_message_warning_learn_more": "مزید جانیں", "compose_form.hashtag_warning": "چونکہ یہ ٹوٹ غیر مندرجہ ہے لہذا یہ کسی بھی ہیش ٹیگ کے تحت درج نہیں کیا جائے گا. ہیش ٹیگ کے تحت صرف \nعمومی ٹوٹ تلاش کئے جا سکتے ہیں.", @@ -95,54 +100,56 @@ "compose_form.poll.duration": "مدتِ رائے", "compose_form.poll.option_placeholder": "انتخاب {number}", "compose_form.poll.remove_option": "یہ انتخاب ہٹا دیں", - "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", - "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", + "compose_form.poll.switch_to_multiple": "متعدد انتخاب کی اجازت دینے کے لیے پول تبدیل کریں", + "compose_form.poll.switch_to_single": "کسی ایک انتخاب کے لیے پول تبدیل کریں", "compose_form.publish": "ٹوٹ", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "وسائل کو حساس نشاندہ کریں", "compose_form.sensitive.marked": "وسائل حساس نشاندہ ہے", - "compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}", + "compose_form.sensitive.unmarked": "{count, plural, one {میڈیا کو حساس کے طور پر نشان زد نہیں کیا گیا ہے} other {میڈیا کو حساس کے طور پر نشان زد نہیں کیا گیا ہے}}", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", - "compose_form.spoiler_placeholder": "Write your warning here", - "confirmation_modal.cancel": "Cancel", - "confirmations.block.block_and_report": "Block & Report", - "confirmations.block.confirm": "Block", - "confirmations.block.message": "Are you sure you want to block {name}?", - "confirmations.delete.confirm": "Delete", + "compose_form.spoiler_placeholder": "اپنی وارننگ یہاں لکھیں", + "confirmation_modal.cancel": "منسوخ", + "confirmations.block.block_and_report": "شکایت کریں اور بلاک کریں", + "confirmations.block.confirm": "بلاک", + "confirmations.block.message": "کیا واقعی آپ {name} کو بلاک کرنا چاہتے ہیں؟", + "confirmations.delete.confirm": "ڈیلیٹ", "confirmations.delete.message": "Are you sure you want to delete this status?", - "confirmations.delete_list.confirm": "Delete", - "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.delete_list.confirm": "ڈیلیٹ", + "confirmations.delete_list.message": "کیا آپ واقعی اس فہرست کو مستقل طور پر ڈیلیٹ کرنا چاہتے ہیں؟", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Hide entire domain", - "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", - "confirmations.logout.confirm": "Log out", - "confirmations.logout.message": "Are you sure you want to log out?", - "confirmations.mute.confirm": "Mute", - "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", - "confirmations.mute.message": "Are you sure you want to mute {name}?", - "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.domain_block.message": "کیا آپ واقعی، واقعی یقین رکھتے ہیں کہ آپ پورے {domain} کو بلاک کرنا چاہتے ہیں؟ زیادہ تر معاملات میں چند ٹارگٹیڈ بلاکس یا خاموش کرنا کافی اور افضل ہیں۔ آپ اس ڈومین کا مواد کسی بھی عوامی ٹائم لائنز یا اپنی اطلاعات میں نہیں دیکھیں گے۔ اس ڈومین سے آپ کے پیروکاروں کو ہٹا دیا جائے گا۔", + "confirmations.logout.confirm": "لاگ آؤٹ", + "confirmations.logout.message": "کیا واقعی آپ لاگ آؤٹ ہونا چاہتے ہیں؟", + "confirmations.mute.confirm": "خاموش", + "confirmations.mute.explanation": "یہ ان سے پوسٹس اور ان کا تذکرہ کرنے والی پوسٹس کو چھپائے گا، لیکن یہ پھر بھی انہیں آپ کی پوسٹس دیکھنے اور آپ کی پیروی کرنے کی اجازت دے گا۔", + "confirmations.mute.message": "کیا واقعی آپ {name} کو خاموش کرنا چاہتے ہیں؟", + "confirmations.redraft.confirm": "ڈیلیٹ کریں اور دوبارہ ڈرافٹ کریں", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", - "confirmations.unfollow.confirm": "Unfollow", - "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", - "conversation.delete": "Delete conversation", - "conversation.mark_as_read": "Mark as read", - "conversation.open": "View conversation", - "conversation.with": "With {names}", - "directory.federated": "From known fediverse", - "directory.local": "From {domain} only", - "directory.new_arrivals": "New arrivals", - "directory.recently_active": "Recently active", + "confirmations.reply.confirm": "جواب دیں", + "confirmations.reply.message": "ابھی جواب دینے سے وہ پیغام اوور رائٹ ہو جائے گا جو آپ فی الحال لکھ رہے ہیں۔ کیا آپ واقعی آگے بڑھنا چاہتے ہیں؟", + "confirmations.unfollow.confirm": "پیروی ترک کریں", + "confirmations.unfollow.message": "کیا واقعی آپ {name} کی پیروی ترک کرنا چاہتے ہیں؟", + "conversation.delete": "گفتگو کو ڈیلیٹ کریں", + "conversation.mark_as_read": "بطور پڑھا ہوا دکھائیں", + "conversation.open": "گفتگو دیکھیں", + "conversation.with": "{names} کے ساتھ", + "directory.federated": "معروف فیڈی ورس سے", + "directory.local": "صرف {domain} سے", + "directory.new_arrivals": "نئے آنے والے", + "directory.recently_active": "حال میں میں ایکٹیو", "embed.instructions": "Embed this status on your website by copying the code below.", - "embed.preview": "Here is what it will look like:", - "emoji_button.activity": "Activity", - "emoji_button.custom": "Custom", - "emoji_button.flags": "Flags", - "emoji_button.food": "Food & Drink", - "emoji_button.label": "Insert emoji", - "emoji_button.nature": "Nature", - "emoji_button.not_found": "No matching emojis found", + "embed.preview": "یہ اس طرح نظر آئے گا:", + "emoji_button.activity": "سرگرمی", + "emoji_button.custom": "حسب منشا", + "emoji_button.flags": "پرچم", + "emoji_button.food": "عذا و مشروب", + "emoji_button.label": "ایموجی داخل کریں", + "emoji_button.nature": "قدرت", + "emoji_button.not_found": "کوئی مماثل ایموجیز نہیں ملے", "emoji_button.objects": "Objects", "emoji_button.people": "People", "emoji_button.recent": "Frequently used", @@ -267,43 +274,43 @@ "missing_indicator.sublabel": "This resource could not be found", "mute_modal.duration": "Duration", "mute_modal.hide_notifications": "Hide notifications from this user?", - "mute_modal.indefinite": "Indefinite", - "navigation_bar.apps": "Mobile apps", - "navigation_bar.blocks": "Blocked users", - "navigation_bar.bookmarks": "Bookmarks", - "navigation_bar.community_timeline": "Local timeline", + "mute_modal.indefinite": "غیر معینہ", + "navigation_bar.apps": "موبائل ایپس", + "navigation_bar.blocks": "مسدود صارفین", + "navigation_bar.bookmarks": "بُک مارکس", + "navigation_bar.community_timeline": "مقامی ٹائم لائن", "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", + "navigation_bar.direct": "براہ راست پیغامات", + "navigation_bar.discover": "دریافت کریں", "navigation_bar.domain_blocks": "Hidden domains", - "navigation_bar.edit_profile": "Edit profile", - "navigation_bar.favourites": "Favourites", - "navigation_bar.filters": "Muted words", - "navigation_bar.follow_requests": "Follow requests", - "navigation_bar.follows_and_followers": "Follows and followers", - "navigation_bar.info": "About this server", - "navigation_bar.keyboard_shortcuts": "Hotkeys", - "navigation_bar.lists": "Lists", - "navigation_bar.logout": "Logout", - "navigation_bar.mutes": "Muted users", - "navigation_bar.personal": "Personal", + "navigation_bar.edit_profile": "پروفائل میں ترمیم کریں", + "navigation_bar.favourites": "پسندیدہ", + "navigation_bar.filters": "خاموش کردہ الفاظ", + "navigation_bar.follow_requests": "پیروی کی درخواستیں", + "navigation_bar.follows_and_followers": "پیروی کردہ اور پیروکار", + "navigation_bar.info": "اس سرور کے بارے میں", + "navigation_bar.keyboard_shortcuts": "ہوٹ کیز", + "navigation_bar.lists": "فہرستیں", + "navigation_bar.logout": "لاگ آؤٹ", + "navigation_bar.mutes": "خاموش کردہ صارفین", + "navigation_bar.personal": "ذاتی", "navigation_bar.pins": "Pinned toots", - "navigation_bar.preferences": "Preferences", - "navigation_bar.public_timeline": "Federated timeline", - "navigation_bar.security": "Security", + "navigation_bar.preferences": "ترجیحات", + "navigation_bar.public_timeline": "وفاقی ٹائم لائن", + "navigation_bar.security": "سیکورٹی", "notification.favourite": "{name} favourited your status", - "notification.follow": "{name} followed you", - "notification.follow_request": "{name} has requested to follow you", - "notification.mention": "{name} mentioned you", - "notification.own_poll": "Your poll has ended", - "notification.poll": "A poll you have voted in has ended", + "notification.follow": "{name} آپ کی پیروی کی", + "notification.follow_request": "{name} نے آپ کی پیروی کی درخواست کی", + "notification.mention": "{name} نے آپ کا تذکرہ کیا", + "notification.own_poll": "آپ کا پول ختم ہو گیا ہے", + "notification.poll": "آپ کا ووٹ دیا گیا ایک پول ختم ہو گیا ہے", "notification.reblog": "{name} boosted your status", - "notification.status": "{name} just posted", - "notifications.clear": "Clear notifications", - "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", - "notifications.column_settings.alert": "Desktop notifications", - "notifications.column_settings.favourite": "Favourites:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notification.status": "{name} نے ابھی ابھی پوسٹ کیا", + "notifications.clear": "اطلاعات ہٹائیں", + "notifications.clear_confirmation": "کیا آپ واقعی اپنی تمام اطلاعات کو صاف کرنا چاہتے ہیں؟", + "notifications.column_settings.alert": "ڈیسک ٹاپ اطلاعات", + "notifications.column_settings.favourite": "پسندیدہ:", + "notifications.column_settings.filter_bar.advanced": "تمام زمرے دکھائیں", "notifications.column_settings.filter_bar.category": "Quick filter bar", "notifications.column_settings.filter_bar.show": "Show", "notifications.column_settings.follow": "New followers:", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Choose image", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 26ee75cf0..9922707be 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -28,7 +28,7 @@ "account.locked_info": "Đây là tài khoản riêng tư. Họ sẽ tự mình xét duyệt các yêu cầu theo dõi.", "account.media": "Media", "account.mention": "Nhắc đến @{name}", - "account.moved_to": "{name} đã dời sang:", + "account.moved_to": "{name} đã đổi thành:", "account.mute": "Ẩn @{name}", "account.mute_notifications": "Tắt thông báo từ @{name}", "account.muted": "Đã ẩn", @@ -45,13 +45,18 @@ "account.unendorse": "Ngưng tôn vinh người này", "account.unfollow": "Ngưng theo dõi", "account.unmute": "Bỏ ẩn @{name}", - "account.unmute_notifications": "Hiển lại thông báo từ @{name}", + "account.unmute_notifications": "Mở lại thông báo từ @{name}", "account_note.placeholder": "Nhấn để thêm", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Vui lòng thử lại sau {retry_time, time, medium}.", "alert.rate_limited.title": "Vượt giới hạn", "alert.unexpected.message": "Đã xảy ra lỗi không mong muốn.", "alert.unexpected.title": "Ốiii!", "announcement.announcement": "Thông báo chung", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} mỗi tuần", "boost_modal.combo": "Nhấn {combo} để chia sẻ nhanh hơn", "bundle_column_error.body": "Đã có lỗi xảy ra trong khi tải nội dung này.", @@ -88,7 +93,7 @@ "compose_form.direct_message_warning": "Tút này sẽ chỉ gửi cho người được nhắc đến.", "compose_form.direct_message_warning_learn_more": "Tìm hiểu thêm", "compose_form.hashtag_warning": "Tút này sẽ không xuất hiện công khai. Chỉ những tút công khai mới có thể được tìm kiếm thông qua hashtag.", - "compose_form.lock_disclaimer": "Tài khoản của bạn không {locked}. Bất cứ ai cũng có thể theo dõi bạn và xem bài viết của bạn dành riêng cho người theo dõi.", + "compose_form.lock_disclaimer": "Tài khoản của bạn không {locked}. Bất cứ ai cũng có thể theo dõi và xem tút riêng tư của bạn.", "compose_form.lock_disclaimer.lock": "khóa", "compose_form.placeholder": "Bạn đang nghĩ gì?", "compose_form.poll.add_option": "Thêm lựa chọn", @@ -110,22 +115,24 @@ "confirmations.block.confirm": "Chặn", "confirmations.block.message": "Bạn có thật sự muốn chặn {name}?", "confirmations.delete.confirm": "Xóa bỏ", - "confirmations.delete.message": "Bạn có chắc chắn muốn xóa tút này?", + "confirmations.delete.message": "Bạn \bthật sự muốn xóa tút này?", "confirmations.delete_list.confirm": "Xóa bỏ", - "confirmations.delete_list.message": "Bạn có chắc chắn muốn xóa vĩnh viễn danh sách này?", + "confirmations.delete_list.message": "Bạn thật sự muốn xóa vĩnh viễn danh sách này?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Ẩn toàn bộ máy chủ", - "confirmations.domain_block.message": "Bạn có chắc chắn rằng muốn ẩn toàn bộ nội dung từ {domain}? Sẽ hợp lý hơn nếu bạn chỉ chặn hoặc ẩn một vài tài khoản cụ thể. Ẩn toàn bộ nội dung từ máy chủ sẽ khiến bạn không còn thấy nội dung từ máy chủ đó ở bất kỳ nơi nào, kể cả thông báo. Người quan tâm bạn từ máy chủ đó cũng sẽ bị xóa luôn.", + "confirmations.domain_block.message": "Bạn thật sự muốn ẩn toàn bộ nội dung từ {domain}? Sẽ hợp lý hơn nếu bạn chỉ chặn hoặc ẩn một vài tài khoản cụ thể. Ẩn toàn bộ nội dung từ máy chủ sẽ khiến bạn không còn thấy nội dung từ máy chủ đó ở bất kỳ nơi nào, kể cả thông báo. Người quan tâm bạn từ máy chủ đó cũng sẽ bị xóa luôn.", "confirmations.logout.confirm": "Đăng xuất", "confirmations.logout.message": "Bạn có thật sự muốn thoát?", "confirmations.mute.confirm": "Ẩn", "confirmations.mute.explanation": "Điều này sẽ khiến tút của họ và những tút có nhắc đến họ bị ẩn, tuy nhiên họ vẫn có thể xem tút của bạn và theo dõi bạn.", - "confirmations.mute.message": "Bạn có chắc chắn muốn ẩn {name}?", + "confirmations.mute.message": "Bạn thật sự muốn ẩn {name}?", "confirmations.redraft.confirm": "Xóa & viết lại", - "confirmations.redraft.message": "Bạn có chắc chắn muốn xóa tút và viết lại? Điều này sẽ xóa mất những lượt thích và chia sẻ của tút, cũng như những trả lời sẽ không còn nội dung gốc.", + "confirmations.redraft.message": "Bạn thật sự muốn xóa tút và viết lại? Điều này sẽ xóa mất những lượt thích và chia sẻ của tút, cũng như những trả lời sẽ không còn nội dung gốc.", "confirmations.reply.confirm": "Trả lời", "confirmations.reply.message": "Nội dung bạn đang soạn thảo sẽ bị ghi đè, bạn có tiếp tục?", "confirmations.unfollow.confirm": "Ngưng theo dõi", - "confirmations.unfollow.message": "Bạn có chắc chắn muốn ngưng theo dõi {name}?", + "confirmations.unfollow.message": "Bạn thật sự muốn ngưng theo dõi {name}?", "conversation.delete": "Xóa tin nhắn này", "conversation.mark_as_read": "Đánh dấu là đã đọc", "conversation.open": "Xem toàn bộ tin nhắn", @@ -142,7 +149,7 @@ "emoji_button.food": "Ăn uống", "emoji_button.label": "Chèn emoji", "emoji_button.nature": "Thiên nhiên", - "emoji_button.not_found": "Không tìm thấy emoji! (°□°)", + "emoji_button.not_found": "Không tìm thấy emoji", "emoji_button.objects": "Đồ vật", "emoji_button.people": "Mặt cười", "emoji_button.recent": "Thường dùng", @@ -300,7 +307,7 @@ "notification.reblog": "{name} chia sẻ tút của bạn", "notification.status": "{name} vừa đăng", "notifications.clear": "Xóa hết thông báo", - "notifications.clear_confirmation": "Bạn có chắc chắn muốn xóa vĩnh viễn tất cả thông báo của mình?", + "notifications.clear_confirmation": "Bạn thật sự muốn xóa vĩnh viễn tất cả thông báo của mình?", "notifications.column_settings.alert": "Thông báo trên máy tính", "notifications.column_settings.favourite": "Lượt thích:", "notifications.column_settings.filter_bar.advanced": "Toàn bộ", @@ -339,24 +346,25 @@ "poll.total_votes": "{count, plural, other {# người bình chọn}}", "poll.vote": "Bình chọn", "poll.voted": "Bạn đã bình chọn rồi", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "Tạo bình chọn", "poll_button.remove_poll": "Hủy cuộc bình chọn", "privacy.change": "Thay đổi quyền riêng tư", - "privacy.direct.long": "Chỉ người được nhắc đến mới thấy", + "privacy.direct.long": "Gửi trực tiếp cho người được nhắc đến", "privacy.direct.short": "Tin nhắn", - "privacy.private.long": "Chỉ dành cho người theo dõi", - "privacy.private.short": "Người theo dõi", + "privacy.private.long": "Dành riêng cho người theo dõi", + "privacy.private.short": "Riêng tư", "privacy.public.long": "Hiện trên bảng tin máy chủ", "privacy.public.short": "Công khai", "privacy.unlisted.long": "Không hiện trên bảng tin máy chủ", - "privacy.unlisted.short": "Riêng tư", + "privacy.unlisted.short": "Hạn chế", "refresh": "Làm mới", "regeneration_indicator.label": "Đang tải…", "regeneration_indicator.sublabel": "Bảng tin của bạn đang được cập nhật!", - "relative_time.days": "{number}d", + "relative_time.days": "{number} ngày", "relative_time.hours": "{number} giờ", "relative_time.just_now": "vừa xong", - "relative_time.minutes": "{number}m", + "relative_time.minutes": "{number} phút", "relative_time.seconds": "{number}s", "relative_time.today": "hôm nay", "reply_indicator.cancel": "Hủy bỏ", @@ -402,7 +410,7 @@ "status.pinned": "Tút đã ghim", "status.read_more": "Đọc tiếp", "status.reblog": "Chia sẻ", - "status.reblog_private": "Chia sẻ với người có thể xem", + "status.reblog_private": "Chia sẻ (Riêng tư)", "status.reblogged_by": "{name} chia sẻ", "status.reblogs.empty": "Tút này chưa có ai chia sẻ. Nếu có, nó sẽ hiển thị ở đây.", "status.redraft": "Xóa và viết lại", @@ -454,6 +462,7 @@ "upload_form.video_description": "Mô tả cho người mất thị lực hoặc không thể nghe", "upload_modal.analyzing_picture": "Phân tích hình ảnh", "upload_modal.apply": "Áp dụng", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "Chọn ảnh", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Trích văn bản từ trong ảnh", diff --git a/app/javascript/mastodon/locales/whitelist_kmr.json b/app/javascript/mastodon/locales/whitelist_kmr.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_kmr.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json index fdbc1c210..22f6823fe 100644 --- a/app/javascript/mastodon/locales/zgh.json +++ b/app/javascript/mastodon/locales/zgh.json @@ -47,11 +47,16 @@ "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "account_note.placeholder": "Click to add a note", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} ⵙ ⵉⵎⴰⵍⴰⵙⵙ", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", @@ -113,6 +118,8 @@ "confirmations.delete.message": "ⵉⵙ ⵏⵉⵜ ⵜⵅⵙⴷ ⴰⴷ ⵜⴽⴽⵙⴷ ⵜⴰⵥⵕⵉⴳⵜ ⴰ?", "confirmations.delete_list.confirm": "ⴽⴽⵙ", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.logout.confirm": "ⴼⴼⵖ", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# ⵓⵙⵜⵜⴰⵢ} other {# ⵉⵙⵜⵜⴰⵢⵏ}}", "poll.vote": "Vote", "poll.voted": "You voted for this answer", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "ⵔⵏⵓ ⵢⴰⵏ ⵢⵉⴷⵣ", "poll_button.remove_poll": "ⵙⵙⵉⵜⵢ ⵉⴷⵣ", "privacy.change": "Adjust status privacy", @@ -454,6 +462,7 @@ "upload_form.video_description": "Describe for people with hearing loss or visual impairment", "upload_modal.analyzing_picture": "Analyzing picture…", "upload_modal.apply": "Apply", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "ⴷⵖⵔ ⵜⴰⵡⵍⴰⴼⵜ", "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", "upload_modal.detect_text": "Detect text from picture", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 986ebfbdf..286d54fb8 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -4,13 +4,13 @@ "account.badges.bot": "机器人", "account.badges.group": "群组", "account.block": "屏蔽 @{name}", - "account.block_domain": "隐藏来自 {domain} 的内容", + "account.block_domain": "屏蔽 {domain} 实例", "account.blocked": "已屏蔽", "account.browse_more_on_origin_server": "在原始个人资料页面上浏览详情", "account.cancel_follow_request": "取消关注请求", "account.direct": "发送私信给 @{name}", "account.disable_notifications": "当 @{name} 发嘟时不要通知我", - "account.domain_blocked": "网站已屏蔽", + "account.domain_blocked": "域名已屏蔽", "account.edit_profile": "修改个人资料", "account.enable_notifications": "当 @{name} 发嘟时通知我", "account.endorse": "在个人资料中推荐此用户", @@ -41,17 +41,22 @@ "account.show_reblogs": "显示来自 @{name} 的转嘟", "account.statuses_counter": "{counter} 条嘟文", "account.unblock": "解除屏蔽 @{name}", - "account.unblock_domain": "不再隐藏来自 {domain} 的内容", + "account.unblock_domain": "不再屏蔽 {domain} 实例", "account.unendorse": "不在个人资料中推荐此用户", "account.unfollow": "取消关注", "account.unmute": "不再隐藏 @{name}", "account.unmute_notifications": "不再隐藏来自 @{name} 的通知", "account_note.placeholder": "点击添加备注", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "请在{retry_time, time, medium}后重试。", "alert.rate_limited.title": "频率受限", "alert.unexpected.message": "发生了意外错误。", "alert.unexpected.title": "哎呀!", "announcement.announcement": "公告", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "每星期 {count} 条", "boost_modal.combo": "下次按住 {combo} 即可跳过此提示", "bundle_column_error.body": "载入这个组件时发生了错误。", @@ -113,6 +118,8 @@ "confirmations.delete.message": "你确定要删除这条嘟文吗?", "confirmations.delete_list.confirm": "删除", "confirmations.delete_list.message": "你确定要永久删除这个列表吗?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "隐藏整个网站的内容", "confirmations.domain_block.message": "你真的确定要屏蔽所有来自 {domain} 的内容吗?多数情况下,屏蔽或隐藏几个特定的用户就已经足够了。来自该网站的内容将不再出现在你的任何公共时间轴或通知列表里。来自该网站的关注者将会被移除。", "confirmations.logout.confirm": "登出", @@ -339,6 +346,7 @@ "poll.total_votes": "{count} 票", "poll.vote": "投票", "poll.voted": "你已经对这个答案投过票了", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "发起投票", "poll_button.remove_poll": "移除投票", "privacy.change": "设置嘟文的可见范围", @@ -454,6 +462,7 @@ "upload_form.video_description": "为听障人士和视障人士添加文字描述", "upload_modal.analyzing_picture": "分析图片…", "upload_modal.apply": "应用", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "选择图像", "upload_modal.description_placeholder": "天地玄黄 宇宙洪荒 日月盈仄 辰宿列张", "upload_modal.detect_text": "从图片中检测文本", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 68e99886f..e93c81f94 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -14,7 +14,7 @@ "account.edit_profile": "修改個人資料", "account.enable_notifications": "如果 @{name} 發文請通知我", "account.endorse": "在個人資料頁推薦對方", - "account.follow": "正在關注", + "account.follow": "關注", "account.followers": "關注者", "account.followers.empty": "尚未有人關注這位使用者。", "account.followers_counter": "有 {count, plural,one {{counter} 個} other {{counter} 個}}關注者", @@ -22,7 +22,7 @@ "account.follows.empty": "這位使用者尚未關注任何人。", "account.follows_you": "關注你", "account.hide_reblogs": "隱藏 @{name} 的轉推", - "account.joined": "Joined {date}", + "account.joined": "於 {date} 加入", "account.last_status": "上次活躍時間", "account.link_verified_on": "此連結的所有權已在 {date} 檢查過", "account.locked_info": "這位使用者將私隱設定為「不公開」,會手動審批誰能關注他/她。", @@ -47,11 +47,16 @@ "account.unmute": "取消 @{name} 的靜音", "account.unmute_notifications": "取消來自 @{name} 通知的靜音", "account_note.placeholder": "按此添加備注", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "請在 {retry_time, time, medium} 後重試", "alert.rate_limited.title": "已限速", "alert.unexpected.message": "發生不可預期的錯誤。", "alert.unexpected.title": "噢!", "announcement.announcement": "公告", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} / 週", "boost_modal.combo": "如你想在下次路過這顯示,請按{combo},", "bundle_column_error.body": "加載本組件出錯。", @@ -113,6 +118,8 @@ "confirmations.delete.message": "你確定要刪除這文章嗎?", "confirmations.delete_list.confirm": "刪除", "confirmations.delete_list.message": "你確定要永久刪除這列表嗎?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "封鎖整個網站", "confirmations.domain_block.message": "你真的真的確定要封鎖整個 {domain} ?多數情況下,封鎖或靜音幾個特定目標就已經有效,也是比較建議的做法。若然封鎖全站,你將不會再在這裏看到該站的內容和通知。來自該站的關注者亦會被移除。", "confirmations.logout.confirm": "登出", @@ -160,11 +167,11 @@ "empty_column.domain_blocks": "尚未隱藏任何網域。", "empty_column.favourited_statuses": "你還沒收藏任何文章。這裡將會顯示你收藏的嘟文。", "empty_column.favourites": "還沒有人收藏這則文章。這裡將會顯示被收藏的嘟文。", - "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.follow_recommendations": "似乎未能替您產生任何建議。您可以試著搜尋您知道的帳戶或者探索熱門主題標籤", "empty_column.follow_requests": "您尚未收到任何關注請求。這裡將會顯示收到的關注請求。", "empty_column.hashtag": "這個標籤暫時未有內容。", "empty_column.home": "你還沒有關注任何使用者。快看看{public},向其他使用者搭訕吧。", - "empty_column.home.suggestions": "See some suggestions", + "empty_column.home.suggestions": "檢視部份建議", "empty_column.list": "這個列表暫時未有內容。", "empty_column.lists": "你還沒有建立任何名單。這裡將會顯示你所建立的名單。", "empty_column.mutes": "你尚未靜音任何使用者。", @@ -176,9 +183,9 @@ "error.unexpected_crash.next_steps_addons": "請嘗試停止使用這些附加元件然後重新載入頁面。如果問題沒有解決,你仍然可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。", "errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿", "errors.unexpected_crash.report_issue": "舉報問題", - "follow_recommendations.done": "Done", - "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", - "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", + "follow_recommendations.done": "完成", + "follow_recommendations.heading": "跟隨人們以看到來自他們的嘟文!這裡有些建議。", + "follow_recommendations.lead": "您跟隨對象知嘟文將會以時間順序顯示於您的 home feed 上。別擔心犯下錯誤,您隨時可以取消跟隨人們!", "follow_request.authorize": "批准", "follow_request.reject": "拒絕", "follow_requests.unlocked_explanation": "即使您的帳戶未上鎖,{domain} 的工作人員認為您可能想手動審核來自這些帳戶的關注請求。", @@ -315,7 +322,7 @@ "notifications.column_settings.show": "在通知欄顯示", "notifications.column_settings.sound": "播放音效", "notifications.column_settings.status": "新的文章", - "notifications.column_settings.unread_markers.category": "Unread notification markers", + "notifications.column_settings.unread_markers.category": "未讀通知標記", "notifications.filter.all": "全部", "notifications.filter.boosts": "轉推", "notifications.filter.favourites": "最愛", @@ -339,6 +346,7 @@ "poll.total_votes": "{count, plural, one {# 票} other {# 票}}", "poll.vote": "投票", "poll.voted": "你已投票給這答案", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "建立投票", "poll_button.remove_poll": "移除投票", "privacy.change": "調整私隱設定", @@ -454,6 +462,7 @@ "upload_form.video_description": "簡單描述給聽障或視障人士", "upload_modal.analyzing_picture": "正在分析圖片…", "upload_modal.apply": "套用", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "選擇圖片", "upload_modal.description_placeholder": "一隻敏捷的狐狸,輕巧地跳過那隻懶洋洋的狗", "upload_modal.detect_text": "從圖片偵測文字", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 1e9527cb8..7fdd156ea 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -7,25 +7,25 @@ "account.block_domain": "封鎖來自 {domain} 網域的所有內容", "account.blocked": "已封鎖", "account.browse_more_on_origin_server": "在該伺服器的個人檔案頁上瀏覽更多", - "account.cancel_follow_request": "取消關注請求", + "account.cancel_follow_request": "取消跟隨請求", "account.direct": "傳私訊給 @{name}", "account.disable_notifications": "取消來自 @{name} 嘟文的通知", "account.domain_blocked": "已封鎖網域", "account.edit_profile": "編輯個人資料", "account.enable_notifications": "當 @{name} 嘟文時通知我", "account.endorse": "在個人資料推薦對方", - "account.follow": "關注", - "account.followers": "關注者", - "account.followers.empty": "尚未有人關注這位使用者。", - "account.followers_counter": "被 {count, plural,one {{counter} 人}other {{counter} 人}}關注", - "account.following_counter": "正在關注 {count, plural,one {{counter}}other {{counter} 人}}", - "account.follows.empty": "這位使用者尚未關注任何人。", - "account.follows_you": "關注了您", + "account.follow": "跟隨", + "account.followers": "跟隨者", + "account.followers.empty": "尚未有人跟隨這位使用者。", + "account.followers_counter": "被 {count, plural,one {{counter} 人}other {{counter} 人}} 跟隨", + "account.following_counter": "正在跟隨 {count, plural,one {{counter}}other {{counter} 人}}", + "account.follows.empty": "這位使用者尚未跟隨任何人。", + "account.follows_you": "跟隨了您", "account.hide_reblogs": "隱藏來自 @{name} 的轉嘟", "account.joined": "加入於 {date}", "account.last_status": "上次活躍時間", "account.link_verified_on": "已在 {date} 檢查此連結的擁有者權限", - "account.locked_info": "此帳戶的隱私狀態被設為鎖定。該擁有者會手動審核能關注此帳戶的人。", + "account.locked_info": "此帳戶的隱私狀態被設為鎖定。該擁有者會手動審核能跟隨此帳戶的人。", "account.media": "媒體", "account.mention": "提及 @{name}", "account.moved_to": "{name} 已遷移至:", @@ -36,22 +36,27 @@ "account.posts": "嘟文", "account.posts_with_replies": "嘟文與回覆", "account.report": "檢舉 @{name}", - "account.requested": "正在等待核准。按一下取消關注請求", + "account.requested": "正在等待核准。按一下以取消跟隨請求", "account.share": "分享 @{name} 的個人資料", "account.show_reblogs": "顯示來自 @{name} 的嘟文", "account.statuses_counter": "{count, plural,one {{counter} 則}other {{counter} 則}}嘟文", "account.unblock": "取消封鎖 @{name}", "account.unblock_domain": "取消封鎖域名 {domain}", "account.unendorse": "不再於個人資料頁面推薦對方", - "account.unfollow": "取消關注", + "account.unfollow": "取消跟隨", "account.unmute": "取消靜音 @{name}", "account.unmute_notifications": "重新接收來自 @{name} 的通知", "account_note.placeholder": "按此添加備注", + "admin.dashboard.retention": "Retention", + "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort_size": "New users", "alert.rate_limited.message": "請在 {retry_time, time, medium} 後重試", "alert.rate_limited.title": "已限速", "alert.unexpected.message": "發生了非預期的錯誤。", "alert.unexpected.title": "哎呀!", "announcement.announcement": "公告", + "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} / 週", "boost_modal.combo": "下次您可以按 {combo} 跳過", "bundle_column_error.body": "載入此元件時發生錯誤。", @@ -66,8 +71,8 @@ "column.direct": "私訊", "column.directory": "瀏覽個人資料", "column.domain_blocks": "已封鎖的網域", - "column.favourites": "收藏", - "column.follow_requests": "關注請求", + "column.favourites": "最愛", + "column.follow_requests": "跟隨請求", "column.home": "首頁", "column.lists": "名單", "column.mutes": "已靜音的使用者", @@ -88,7 +93,7 @@ "compose_form.direct_message_warning": "這條嘟文只有被提及的使用者才看得到。", "compose_form.direct_message_warning_learn_more": "了解更多", "compose_form.hashtag_warning": "由於這則嘟文設定為「不公開」,它將不會被列於任何主題標籤下。只有公開的嘟文才能藉由主題標籤找到。", - "compose_form.lock_disclaimer": "您的帳戶尚未{locked}。任何人都能關注您並看到您設定成只有關注者能看的嘟文。", + "compose_form.lock_disclaimer": "您的帳戶尚未{locked}。任何人都能關注您並看到您設定成只有跟隨者能看的嘟文。", "compose_form.lock_disclaimer.lock": "上鎖", "compose_form.placeholder": "正在想些什麼嗎?", "compose_form.poll.add_option": "新增選項", @@ -113,19 +118,21 @@ "confirmations.delete.message": "您確定要刪除這則嘟文?", "confirmations.delete_list.confirm": "刪除", "confirmations.delete_list.message": "確定永久刪除此名單?", + "confirmations.discard_edit_media.confirm": "Discard", + "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", "confirmations.domain_block.confirm": "隱藏整個域名", - "confirmations.domain_block.message": "真的非常確定封鎖整個 {domain} 網域嗎?大部分情況下,您只需要封鎖或靜音少數特定的帳帳戶能滿足需求了。您將不能在任何公開的時間軸及通知中看到此網域的內容。您來自該網域的關注者也將被移除。", + "confirmations.domain_block.message": "真的非常確定封鎖整個 {domain} 網域嗎?大部分情況下,您只需要封鎖或靜音少數特定的帳帳戶能滿足需求了。您將不能在任何公開的時間軸及通知中看到來自此網域的內容。您來自該網域的跟隨者也將被移除。", "confirmations.logout.confirm": "登出", "confirmations.logout.message": "確定要登出嗎?", "confirmations.mute.confirm": "靜音", - "confirmations.mute.explanation": "這將會隱藏來自他們的貼文與通知,但是他們還是可以查閱你的貼文與關注您。", + "confirmations.mute.explanation": "這將會隱藏來自他們的嘟文與通知,但是他們還是可以查閱您的嘟文與跟隨您。", "confirmations.mute.message": "確定靜音 {name} ?", "confirmations.redraft.confirm": "刪除並重新編輯", - "confirmations.redraft.message": "確定刪掉這則嘟文並重新編輯嗎?將會失去這則嘟文的轉嘟及收藏,且回覆這則的嘟文將會變成獨立的嘟文。", + "confirmations.redraft.message": "確定刪掉這則嘟文並重新編輯嗎?將會失去這則嘟文的轉嘟及最愛,且回覆這則的嘟文將會變成獨立的嘟文。", "confirmations.reply.confirm": "回覆", "confirmations.reply.message": "現在回覆將蓋掉您目前正在撰寫的訊息。是否仍要回覆?", - "confirmations.unfollow.confirm": "取消關注", - "confirmations.unfollow.message": "確定要取消關注 {name} 嗎?", + "confirmations.unfollow.confirm": "取消跟隨", + "confirmations.unfollow.message": "確定要取消跟隨 {name} 嗎?", "conversation.delete": "刪除對話", "conversation.mark_as_read": "標記為已讀", "conversation.open": "檢視對話", @@ -158,18 +165,18 @@ "empty_column.community": "本機時間軸是空的。快公開嘟些文搶頭香啊!", "empty_column.direct": "您還沒有任何私訊。當您私訊別人或收到私訊時,它將於此顯示。", "empty_column.domain_blocks": "尚未封鎖任何網域。", - "empty_column.favourited_statuses": "您還沒收藏過任何嘟文。當您收藏嘟文時,它將於此顯示。", - "empty_column.favourites": "還沒有人收藏過這則嘟文。當有人收藏嘟文時,它將於此顯示。", - "empty_column.follow_recommendations": "似乎未能為您生成任何建議。您可以嘗試使用搜尋來尋找您可能認識的人,或是探索熱門主題標籤。", - "empty_column.follow_requests": "您尚未收到任何關注請求。這裡將會顯示收到的關注請求。", + "empty_column.favourited_statuses": "您還沒加過任何嘟文至最愛。當您收藏嘟文時,它將於此顯示。", + "empty_column.favourites": "還沒有人加過這則嘟文至最愛。當有人收藏嘟文時,它將於此顯示。", + "empty_column.follow_recommendations": "似乎未能為您產生任何建議。您可以嘗試使用搜尋來尋找您可能認識的人,或是探索熱門主題標籤。", + "empty_column.follow_requests": "您尚未收到任何跟隨請求。這裡將會顯示收到的跟隨請求。", "empty_column.hashtag": "這個主題標籤下什麼也沒有。", - "empty_column.home": "您的首頁時間軸是空的!前往 {public} 或使用搜尋功能來認識其他人。", + "empty_column.home": "您的首頁時間軸是空的!前往 {suggestions} 或使用搜尋功能來認識其他人。", "empty_column.home.suggestions": "檢視部份建議", "empty_column.list": "這份名單還沒有東西。當此名單的成員嘟出了新的嘟文時,它們就會顯示於此。", "empty_column.lists": "您還沒有建立任何名單。這裡將會顯示您所建立的名單。", "empty_column.mutes": "您尚未靜音任何使用者。", "empty_column.notifications": "您尚未收到任何通知,和別人互動開啟對話吧。", - "empty_column.public": "這裡什麼都沒有!嘗試寫些公開的嘟文,或著自己關注其他伺服器的使用者後就會有嘟文出現了", + "empty_column.public": "這裡什麼都沒有!嘗試寫些公開的嘟文,或著自己跟隨其他伺服器的使用者後就會有嘟文出現了", "error.unexpected_crash.explanation": "由於發生系統故障或瀏覽器相容性問題,無法正常顯示此頁面。", "error.unexpected_crash.explanation_addons": "此頁面無法被正常顯示,這可能是由瀏覽器附加元件或網頁自動翻譯工具造成的。", "error.unexpected_crash.next_steps": "請嘗試重新整理頁面。如果狀況沒有改善,您可以使用不同的瀏覽器或應用程式來檢視來使用 Mastodon。", @@ -177,11 +184,11 @@ "errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿", "errors.unexpected_crash.report_issue": "回報問題", "follow_recommendations.done": "完成", - "follow_recommendations.heading": "追蹤您想檢視其貼文的人!這裡有一些建議。", - "follow_recommendations.lead": "來自您追蹤的人的貼文將會按時間順序顯示在您的家 feed 上。不要害怕犯錯,您隨時都可以取消追蹤其他人!", + "follow_recommendations.heading": "跟隨您想檢視其貼文的人!這裡有一些建議。", + "follow_recommendations.lead": "來自您跟隨的人的貼文將會按時間順序顯示在您的家 feed 上。不要害怕犯錯,您隨時都可以取消跟隨其他人!", "follow_request.authorize": "授權", "follow_request.reject": "拒絕", - "follow_requests.unlocked_explanation": "即便您的帳戶未被鎖定,{domain} 的員工認為您可能想要自己審核這些帳戶的追蹤請求。", + "follow_requests.unlocked_explanation": "即便您的帳戶未被鎖定,{domain} 的管理員認為您可能想要自己審核這些帳戶的跟隨請求。", "generic.saved": "已儲存", "getting_started.developers": "開發者", "getting_started.directory": "個人資料目錄", @@ -217,8 +224,8 @@ "keyboard_shortcuts.direct": "開啟私訊欄", "keyboard_shortcuts.down": "在名單中往下移動", "keyboard_shortcuts.enter": "檢視嘟文", - "keyboard_shortcuts.favourite": "加到收藏", - "keyboard_shortcuts.favourites": "開啟收藏名單", + "keyboard_shortcuts.favourite": "加到最愛", + "keyboard_shortcuts.favourites": "開啟最愛名單", "keyboard_shortcuts.federated": "開啟聯邦時間軸", "keyboard_shortcuts.heading": "鍵盤快速鍵", "keyboard_shortcuts.home": "開啟首頁時間軸", @@ -233,7 +240,7 @@ "keyboard_shortcuts.pinned": "開啟釘選的嘟文名單", "keyboard_shortcuts.profile": "開啟作者的個人資料頁面", "keyboard_shortcuts.reply": "回應嘟文", - "keyboard_shortcuts.requests": "開啟關注請求名單", + "keyboard_shortcuts.requests": "開啟跟隨請求名單", "keyboard_shortcuts.search": "將焦點移至搜尋框", "keyboard_shortcuts.spoilers": "顯示或隱藏被折疊的正文", "keyboard_shortcuts.start": "開啟「開始使用」欄位", @@ -258,7 +265,7 @@ "lists.replies_policy.list": "列表成員", "lists.replies_policy.none": "沒有人", "lists.replies_policy.title": "顯示回覆:", - "lists.search": "搜尋您關注的使用者", + "lists.search": "搜尋您跟隨的使用者", "lists.subheading": "您的名單", "load_pending": "{count, plural, one {# 個新項目} other {# 個新項目}}", "loading_indicator.label": "讀取中...", @@ -279,8 +286,8 @@ "navigation_bar.edit_profile": "編輯個人資料", "navigation_bar.favourites": "收藏", "navigation_bar.filters": "靜音詞彙", - "navigation_bar.follow_requests": "關注請求", - "navigation_bar.follows_and_followers": "關注及關注者", + "navigation_bar.follow_requests": "跟隨請求", + "navigation_bar.follows_and_followers": "跟隨中與跟隨者", "navigation_bar.info": "關於此伺服器", "navigation_bar.keyboard_shortcuts": "快速鍵", "navigation_bar.lists": "名單", @@ -292,8 +299,8 @@ "navigation_bar.public_timeline": "聯邦時間軸", "navigation_bar.security": "安全性", "notification.favourite": "{name} 把您的嘟文加入了最愛", - "notification.follow": "{name} 關注了您", - "notification.follow_request": "{name} 要求關注您", + "notification.follow": "{name} 跟隨了您", + "notification.follow_request": "{name} 要求跟隨您", "notification.mention": "{name} 提到了您", "notification.own_poll": "您的投票已結束", "notification.poll": "您曾投過的投票已經結束", @@ -306,8 +313,8 @@ "notifications.column_settings.filter_bar.advanced": "顯示所有分類", "notifications.column_settings.filter_bar.category": "快速過濾欄", "notifications.column_settings.filter_bar.show": "顯示", - "notifications.column_settings.follow": "新關注者:", - "notifications.column_settings.follow_request": "新的關注請求:", + "notifications.column_settings.follow": "新的跟隨者:", + "notifications.column_settings.follow_request": "新的跟隨請求:", "notifications.column_settings.mention": "提及:", "notifications.column_settings.poll": "投票結果:", "notifications.column_settings.push": "推播通知", @@ -319,7 +326,7 @@ "notifications.filter.all": "全部", "notifications.filter.boosts": "轉嘟", "notifications.filter.favourites": "最愛", - "notifications.filter.follows": "關注的使用者", + "notifications.filter.follows": "跟隨的使用者", "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票結果", "notifications.filter.statuses": "已跟隨使用者的最新動態", @@ -339,13 +346,14 @@ "poll.total_votes": "{count, plural, one {# 個投票} other {# 個投票}}", "poll.vote": "投票", "poll.voted": "您已對此問題投票", + "poll.votes": "{votes, plural, one {# vote} other {# votes}}", "poll_button.add_poll": "建立投票", "poll_button.remove_poll": "移除投票", "privacy.change": "調整嘟文隱私狀態", "privacy.direct.long": "只有被提及的使用者能看到", "privacy.direct.short": "私訊", - "privacy.private.long": "只有關注您的使用者能看到", - "privacy.private.short": "僅關注者", + "privacy.private.long": "只有跟隨您的使用者能看到", + "privacy.private.short": "僅跟隨者", "privacy.public.long": "公開,且顯示於公開時間軸", "privacy.public.short": "公開", "privacy.unlisted.long": "公開,但不會顯示在公開時間軸", @@ -368,7 +376,7 @@ "report.target": "檢舉 {target}", "search.placeholder": "搜尋", "search_popout.search_format": "進階搜尋格式", - "search_popout.tips.full_text": "輸入簡單的文字,搜尋由您撰寫、收藏、轉嘟或提您的嘟文,以及與關鍵詞匹配的使用者名稱、帳戶顯示名稱和主題標籤。", + "search_popout.tips.full_text": "輸入簡單的文字,搜尋由您撰寫、最愛、轉嘟或提您的嘟文,以及與關鍵詞匹配的使用者名稱、帳戶顯示名稱和主題標籤。", "search_popout.tips.hashtag": "主題標籤", "search_popout.tips.status": "嘟文", "search_popout.tips.text": "輸入簡單的文字,搜尋符合的使用者名稱,帳戶名稱與標籤", @@ -433,8 +441,8 @@ "time_remaining.moments": "剩餘時間", "time_remaining.seconds": "剩餘 {number, plural, one {# 秒} other {# 秒}}", "timeline_hint.remote_resource_not_displayed": "不會顯示來自其他伺服器的 {resource}", - "timeline_hint.resources.followers": "關注者", - "timeline_hint.resources.follows": "正在關注", + "timeline_hint.resources.followers": "跟隨者", + "timeline_hint.resources.follows": "正在跟隨", "timeline_hint.resources.statuses": "更早的嘟文", "trends.counter_by_accounts": "{count, plural,one {{counter} 人}other {{counter} 人}}正在討論", "trends.trending_now": "目前趨勢", @@ -454,6 +462,7 @@ "upload_form.video_description": "描述給聽障或視障人士", "upload_modal.analyzing_picture": "正在分析圖片…", "upload_modal.apply": "套用", + "upload_modal.applying": "Applying…", "upload_modal.choose_image": "選擇圖片", "upload_modal.description_placeholder": "我能吞下玻璃而不傷身體", "upload_modal.detect_text": "從圖片中偵測文字", diff --git a/app/javascript/mastodon/reducers/accounts_map.js b/app/javascript/mastodon/reducers/accounts_map.js new file mode 100644 index 000000000..e0d42e9cd --- /dev/null +++ b/app/javascript/mastodon/reducers/accounts_map.js @@ -0,0 +1,15 @@ +import { ACCOUNT_IMPORT, ACCOUNTS_IMPORT } from '../actions/importer'; +import { Map as ImmutableMap } from 'immutable'; + +const initialState = ImmutableMap(); + +export default function accountsMap(state = initialState, action) { + switch(action.type) { + case ACCOUNT_IMPORT: + return state.set(action.account.acct, action.account.id); + case ACCOUNTS_IMPORT: + return state.withMutations(map => action.accounts.forEach(account => map.set(account.acct, account.id))); + default: + return state; + } +}; diff --git a/app/javascript/mastodon/reducers/compose.js b/app/javascript/mastodon/reducers/compose.js index 4c0ba1c36..34c7c4dea 100644 --- a/app/javascript/mastodon/reducers/compose.js +++ b/app/javascript/mastodon/reducers/compose.js @@ -39,6 +39,9 @@ import { COMPOSE_POLL_OPTION_CHANGE, COMPOSE_POLL_OPTION_REMOVE, COMPOSE_POLL_SETTINGS_CHANGE, + INIT_MEDIA_EDIT_MODAL, + COMPOSE_CHANGE_MEDIA_DESCRIPTION, + COMPOSE_CHANGE_MEDIA_FOCUS, } from '../actions/compose'; import { TIMELINE_DELETE } from '../actions/timelines'; import { STORE_HYDRATE } from '../actions/store'; @@ -76,6 +79,13 @@ const initialState = ImmutableMap({ resetFileKey: Math.floor((Math.random() * 0x10000)), idempotencyKey: null, tagHistory: ImmutableList(), + media_modal: ImmutableMap({ + id: null, + description: '', + focusX: 0, + focusY: 0, + dirty: false, + }), }); const initialPoll = ImmutableMap({ @@ -354,6 +364,19 @@ export default function compose(state = initialState, action) { return item; })); + case INIT_MEDIA_EDIT_MODAL: + const media = state.get('media_attachments').find(item => item.get('id') === action.id); + return state.set('media_modal', ImmutableMap({ + id: action.id, + description: media.get('description') || '', + focusX: media.getIn(['meta', 'focus', 'x'], 0), + focusY: media.getIn(['meta', 'focus', 'y'], 0), + dirty: false, + })); + case COMPOSE_CHANGE_MEDIA_DESCRIPTION: + return state.setIn(['media_modal', 'description'], action.description).setIn(['media_modal', 'dirty'], true); + case COMPOSE_CHANGE_MEDIA_FOCUS: + return state.setIn(['media_modal', 'focusX'], action.focusX).setIn(['media_modal', 'focusY'], action.focusY).setIn(['media_modal', 'dirty'], true); case COMPOSE_MENTION: return state.withMutations(map => { map.update('text', text => [text.trim(), `@${action.account.get('acct')} `].filter((str) => str.length !== 0).join(' ')); @@ -390,6 +413,7 @@ export default function compose(state = initialState, action) { case COMPOSE_UPLOAD_CHANGE_SUCCESS: return state .set('is_changing_upload', false) + .setIn(['media_modal', 'dirty'], false) .update('media_attachments', list => list.map(item => { if (item.get('id') === action.media.id) { return fromJS(action.media); diff --git a/app/javascript/mastodon/reducers/index.js b/app/javascript/mastodon/reducers/index.js index 3b3c5ae29..e518c8228 100644 --- a/app/javascript/mastodon/reducers/index.js +++ b/app/javascript/mastodon/reducers/index.js @@ -38,6 +38,7 @@ import missed_updates from './missed_updates'; import announcements from './announcements'; import markers from './markers'; import picture_in_picture from './picture_in_picture'; +import accounts_map from './accounts_map'; const reducers = { announcements, @@ -52,6 +53,7 @@ const reducers = { status_lists, accounts, accounts_counters, + accounts_map, statuses, relationships, settings, diff --git a/app/javascript/mastodon/reducers/modal.js b/app/javascript/mastodon/reducers/modal.js index cb53887c7..41161a206 100644 --- a/app/javascript/mastodon/reducers/modal.js +++ b/app/javascript/mastodon/reducers/modal.js @@ -1,19 +1,18 @@ import { MODAL_OPEN, MODAL_CLOSE } from '../actions/modal'; import { TIMELINE_DELETE } from '../actions/timelines'; +import { COMPOSE_UPLOAD_CHANGE_SUCCESS } from '../actions/compose'; +import { Stack as ImmutableStack, Map as ImmutableMap } from 'immutable'; -const initialState = { - modalType: null, - modalProps: {}, -}; - -export default function modal(state = initialState, action) { +export default function modal(state = ImmutableStack(), action) { switch(action.type) { case MODAL_OPEN: - return { modalType: action.modalType, modalProps: action.modalProps }; + return state.unshift(ImmutableMap({ modalType: action.modalType, modalProps: action.modalProps })); case MODAL_CLOSE: - return (action.modalType === undefined || action.modalType === state.modalType) ? initialState : state; + return (action.modalType === undefined || action.modalType === state.getIn([0, 'modalType'])) ? state.shift() : state; + case COMPOSE_UPLOAD_CHANGE_SUCCESS: + return state.getIn([0, 'modalType']) === 'FOCAL_POINT' ? state.shift() : state; case TIMELINE_DELETE: - return (state.modalProps.statusId === action.id) ? initialState : state; + return state.filterNot((modal) => modal.get('modalProps').statusId === action.id); default: return state; } diff --git a/app/javascript/mastodon/reducers/picture_in_picture.js b/app/javascript/mastodon/reducers/picture_in_picture.js index 06cd8c5e8..48772ae7f 100644 --- a/app/javascript/mastodon/reducers/picture_in_picture.js +++ b/app/javascript/mastodon/reducers/picture_in_picture.js @@ -1,4 +1,5 @@ import { PICTURE_IN_PICTURE_DEPLOY, PICTURE_IN_PICTURE_REMOVE } from 'mastodon/actions/picture_in_picture'; +import { TIMELINE_DELETE } from '../actions/timelines'; const initialState = { statusId: null, @@ -16,6 +17,8 @@ export default function pictureInPicture(state = initialState, action) { return { statusId: action.statusId, accountId: action.accountId, type: action.playerType, ...action.props }; case PICTURE_IN_PICTURE_REMOVE: return { ...initialState }; + case TIMELINE_DELETE: + return (state.statusId === action.id) ? { ...initialState } : state; default: return state; } diff --git a/app/javascript/mastodon/service_worker/web_push_notifications.js b/app/javascript/mastodon/service_worker/web_push_notifications.js index 958e5fc12..926c5c4d7 100644 --- a/app/javascript/mastodon/service_worker/web_push_notifications.js +++ b/app/javascript/mastodon/service_worker/web_push_notifications.js @@ -90,7 +90,7 @@ const handlePush = (event) => { options.tag = notification.id; options.badge = '/badge.png'; options.image = notification.status && notification.status.media_attachments.length > 0 && notification.status.media_attachments[0].preview_url || undefined; - options.data = { access_token, preferred_locale, id: notification.status ? notification.status.id : notification.account.id, url: notification.status ? `/web/statuses/${notification.status.id}` : `/web/accounts/${notification.account.id}` }; + options.data = { access_token, preferred_locale, id: notification.status ? notification.status.id : notification.account.id, url: notification.status ? `/web/@${notification.account.acct}/${notification.status.id}` : `/web/@${notification.account.acct}` }; if (notification.status && notification.status.spoiler_text || notification.status.sensitive) { options.data.hiddenBody = htmlToPlainText(notification.status.content); diff --git a/app/javascript/mastodon/utils/numbers.js b/app/javascript/mastodon/utils/numbers.js index 6f2505cae..6ef563ad8 100644 --- a/app/javascript/mastodon/utils/numbers.js +++ b/app/javascript/mastodon/utils/numbers.js @@ -69,3 +69,11 @@ export function pluralReady(sourceNumber, division) { return Math.trunc(sourceNumber / closestScale) * closestScale; } + +/** + * @param {number} num + * @returns {number} + */ +export function roundTo10(num) { + return Math.round(num * 0.1) / 0.1; +} diff --git a/app/javascript/packs/admin.js b/app/javascript/packs/admin.js index 6a6343a52..a3fcefcc3 100644 --- a/app/javascript/packs/admin.js +++ b/app/javascript/packs/admin.js @@ -99,4 +99,24 @@ ready(() => { const registrationMode = document.getElementById('form_admin_settings_registrations_mode'); if (registrationMode) onChangeRegistrationMode(registrationMode); + + const React = require('react'); + const ReactDOM = require('react-dom'); + + [].forEach.call(document.querySelectorAll('[data-admin-component]'), element => { + const componentName = element.getAttribute('data-admin-component'); + const { locale, ...componentProps } = JSON.parse(element.getAttribute('data-props')); + + import('../mastodon/containers/admin_component').then(({ default: AdminComponent }) => { + return import('../mastodon/components/admin/' + componentName).then(({ default: Component }) => { + ReactDOM.render(( + + + + ), element); + }); + }).catch(error => { + console.error(error); + }); + }); }); diff --git a/app/javascript/styles/fonts/montserrat.scss b/app/javascript/styles/fonts/montserrat.scss index 8079dc6fc..ea7e04536 100644 --- a/app/javascript/styles/fonts/montserrat.scss +++ b/app/javascript/styles/fonts/montserrat.scss @@ -5,6 +5,7 @@ url('../fonts/montserrat/Montserrat-Regular.woff') format('woff'), url('../fonts/montserrat/Montserrat-Regular.ttf') format('truetype'); font-weight: 400; + font-display: swap; font-style: normal; } @@ -13,5 +14,6 @@ src: local('Montserrat Medium'), url('../fonts/montserrat/Montserrat-Medium.ttf') format('truetype'); font-weight: 500; + font-display: swap; font-style: normal; } diff --git a/app/javascript/styles/fonts/roboto-mono.scss b/app/javascript/styles/fonts/roboto-mono.scss index 2a1f74e16..bd9839abf 100644 --- a/app/javascript/styles/fonts/roboto-mono.scss +++ b/app/javascript/styles/fonts/roboto-mono.scss @@ -6,5 +6,6 @@ url('../fonts/roboto-mono/robotomono-regular-webfont.ttf') format('truetype'), url('../fonts/roboto-mono/robotomono-regular-webfont.svg#roboto_monoregular') format('svg'); font-weight: 400; + font-display: swap; font-style: normal; } diff --git a/app/javascript/styles/fonts/roboto.scss b/app/javascript/styles/fonts/roboto.scss index f9c7c50fe..f3a6dcb6e 100644 --- a/app/javascript/styles/fonts/roboto.scss +++ b/app/javascript/styles/fonts/roboto.scss @@ -6,6 +6,7 @@ url('../fonts/roboto/roboto-italic-webfont.ttf') format('truetype'), url('../fonts/roboto/roboto-italic-webfont.svg#roboto-italic-webfont') format('svg'); font-weight: normal; + font-display: swap; font-style: italic; } @@ -17,6 +18,7 @@ url('../fonts/roboto/roboto-bold-webfont.ttf') format('truetype'), url('../fonts/roboto/roboto-bold-webfont.svg#roboto-bold-webfont') format('svg'); font-weight: bold; + font-display: swap; font-style: normal; } @@ -28,6 +30,7 @@ url('../fonts/roboto/roboto-medium-webfont.ttf') format('truetype'), url('../fonts/roboto/roboto-medium-webfont.svg#roboto-medium-webfont') format('svg'); font-weight: 500; + font-display: swap; font-style: normal; } @@ -39,5 +42,6 @@ url('../fonts/roboto/roboto-regular-webfont.ttf') format('truetype'), url('../fonts/roboto/roboto-regular-webfont.svg#roboto-regular-webfont') format('svg'); font-weight: normal; + font-display: swap; font-style: normal; } diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index 25ebc19b0..489646e1f 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -1,3 +1,5 @@ +@use "sass:math"; + $no-columns-breakpoint: 600px; $sidebar-width: 240px; $content-width: 840px; @@ -909,10 +911,205 @@ a.name-tag, } } +.dashboard__counters.admin-account-counters { + margin-top: 10px; +} + .account-badges { margin: -2px 0; } -.dashboard__counters.admin-account-counters { - margin-top: 10px; +.retention { + overflow: auto; + + > h4 { + position: sticky; + left: 0; + } + + &__table { + &__number { + color: $secondary-text-color; + padding: 10px; + } + + &__date { + white-space: nowrap; + padding: 10px 0; + text-align: left; + min-width: 120px; + + &.retention__table__average { + font-weight: 700; + } + } + + &__size { + text-align: center; + padding: 10px; + } + + &__label { + font-weight: 700; + color: $darker-text-color; + } + + &__box { + box-sizing: border-box; + background: $ui-highlight-color; + padding: 10px; + font-weight: 500; + color: $primary-text-color; + width: 52px; + margin: 1px; + + @for $i from 0 through 10 { + &--#{10 * $i} { + background-color: rgba($ui-highlight-color, 1 * (math.div(max(1, $i), 10))); + } + } + } + } +} + +.sparkline { + display: block; + text-decoration: none; + background: lighten($ui-base-color, 4%); + border-radius: 4px; + padding: 0; + position: relative; + padding-bottom: 55px + 20px; + overflow: hidden; + + &__value { + display: flex; + line-height: 33px; + align-items: flex-end; + padding: 20px; + padding-bottom: 10px; + + &__total { + display: block; + margin-right: 10px; + font-weight: 500; + font-size: 28px; + color: $primary-text-color; + } + + &__change { + display: block; + font-weight: 500; + font-size: 18px; + color: $darker-text-color; + margin-bottom: -3px; + + &.positive { + color: $valid-value-color; + } + + &.negative { + color: $error-value-color; + } + } + } + + &__label { + padding: 0 20px; + padding-bottom: 10px; + text-transform: uppercase; + color: $darker-text-color; + font-weight: 500; + } + + &__graph { + position: absolute; + bottom: 0; + width: 100%; + + svg { + display: block; + margin: 0; + } + + path:first-child { + fill: rgba($highlight-text-color, 0.25) !important; + fill-opacity: 1 !important; + } + + path:last-child { + stroke: lighten($highlight-text-color, 6%) !important; + fill: none !important; + } + } +} + +a.sparkline { + &:hover, + &:focus, + &:active { + background: lighten($ui-base-color, 6%); + } +} + +.skeleton { + background-color: lighten($ui-base-color, 8%); + background-image: linear-gradient(90deg, lighten($ui-base-color, 8%), lighten($ui-base-color, 12%), lighten($ui-base-color, 8%)); + background-size: 200px 100%; + background-repeat: no-repeat; + border-radius: 4px; + display: inline-block; + line-height: 1; + width: 100%; + animation: skeleton 1.2s ease-in-out infinite; +} + +@keyframes skeleton { + 0% { + background-position: -200px 0; + } + + 100% { + background-position: calc(200px + 100%) 0; + } +} + +.dimension { + table { + width: 100%; + } + + &__item { + border-bottom: 1px solid lighten($ui-base-color, 4%); + + &__key { + font-weight: 500; + padding: 11px 10px; + } + + &__value { + text-align: right; + color: $darker-text-color; + padding: 11px 10px; + } + + &__indicator { + display: inline-block; + width: 8px; + height: 8px; + border-radius: 50%; + background: $ui-highlight-color; + margin-right: 10px; + + @for $i from 0 through 10 { + &--#{10 * $i} { + background-color: rgba($ui-highlight-color, 1 * (math.div(max(1, $i), 10))); + } + } + } + + &:last-child { + border-bottom: 0; + } + } } diff --git a/app/javascript/styles/mastodon/boost.scss b/app/javascript/styles/mastodon/boost.scss index fb1451cb2..2969958e2 100644 --- a/app/javascript/styles/mastodon/boost.scss +++ b/app/javascript/styles/mastodon/boost.scss @@ -28,5 +28,17 @@ button.icon-button { i.fa-retweet { background-image: url("data:image/svg+xml;utf8,"); } + + &.reblogPrivate { + i.fa-retweet { + background-image: url("data:image/svg+xml;utf8,"); + } + } + + &.disabled { + i.fa-retweet { + background-image: url("data:image/svg+xml;utf8,"); + } + } } } diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index a47c45e07..68fd53257 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -2826,7 +2826,7 @@ a.account__display-name { transition: background-color 0.2s ease; } -.react-toggle:hover:not(.react-toggle--disabled) .react-toggle-track { +.react-toggle:is(:hover, :focus-within):not(.react-toggle--disabled) .react-toggle-track { background-color: darken($ui-base-color, 10%); } @@ -2834,7 +2834,7 @@ a.account__display-name { background-color: $ui-highlight-color; } -.react-toggle--checked:hover:not(.react-toggle--disabled) .react-toggle-track { +.react-toggle--checked:is(:hover, :focus-within):not(.react-toggle--disabled) .react-toggle-track { background-color: lighten($ui-highlight-color, 10%); } @@ -3026,13 +3026,13 @@ a.account__display-name { } @media screen and (max-height: 810px) { - .trends__item:nth-child(3) { + .trends__item:nth-of-type(3) { display: none; } } @media screen and (max-height: 720px) { - .trends__item:nth-child(2) { + .trends__item:nth-of-type(2) { display: none; } } @@ -3552,12 +3552,17 @@ a.status-card.compact:hover { } .column-header__setting-btn { - &:hover { + &:hover, + &:focus { color: $darker-text-color; text-decoration: underline; } } +.column-header__collapsible__extra + .column-header__setting-btn { + padding-top: 5px; +} + .column-header__permission-btn { display: inline; font-weight: inherit; @@ -3568,10 +3573,15 @@ a.status-card.compact:hover { float: right; .column-header__setting-btn { - padding: 0 10px; + padding: 5px; + + &:first-child { + padding-right: 7px; + } &:last-child { - padding-right: 0; + padding-left: 7px; + margin-left: 5px; } } } @@ -4742,6 +4752,13 @@ a.status-card.compact:hover { background: rgba($gold-star, 0.3); } } + + &.disabled { + color: $white; + background-color: transparent; + cursor: default; + opacity: 0.4; + } } } } @@ -5546,7 +5563,8 @@ a.status-card.compact:hover { opacity: 0.2; } - .video-player__buttons button { + .video-player__buttons button, + .video-player__buttons a { color: currentColor; opacity: 0.75; @@ -6954,7 +6972,6 @@ noscript { &__current { flex: 0 0 auto; font-size: 24px; - line-height: 36px; font-weight: 500; text-align: right; padding-right: 15px; @@ -6976,6 +6993,58 @@ noscript { fill: none !important; } } + + &--requires-review { + .trends__item__name { + color: $gold-star; + + a { + color: $gold-star; + } + } + + .trends__item__current { + color: $gold-star; + } + + .trends__item__sparkline { + path:first-child { + fill: rgba($gold-star, 0.25) !important; + } + + path:last-child { + stroke: lighten($gold-star, 6%) !important; + } + } + } + + &--disabled { + .trends__item__name { + color: lighten($ui-base-color, 12%); + + a { + color: lighten($ui-base-color, 12%); + } + } + + .trends__item__current { + color: lighten($ui-base-color, 12%); + } + + .trends__item__sparkline { + path:first-child { + fill: rgba(lighten($ui-base-color, 12%), 0.25) !important; + } + + path:last-child { + stroke: lighten(lighten($ui-base-color, 12%), 6%) !important; + } + } + } + } + + &--compact &__item { + padding: 10px; } } @@ -7301,6 +7370,7 @@ noscript { &__account { display: flex; text-decoration: none; + overflow: hidden; } .account__avatar { diff --git a/app/javascript/styles/mastodon/dashboard.scss b/app/javascript/styles/mastodon/dashboard.scss index c0944d417..5e900e8c5 100644 --- a/app/javascript/styles/mastodon/dashboard.scss +++ b/app/javascript/styles/mastodon/dashboard.scss @@ -56,23 +56,60 @@ } } -.dashboard__widgets { - display: flex; - flex-wrap: wrap; - margin: 0 -5px; +.dashboard { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr); + grid-gap: 10px; - & > div { - flex: 0 0 33.333%; - margin-bottom: 20px; + @media screen and (max-width: 1350px) { + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + } - & > div { - padding: 0 5px; + &__item { + &--span-double-column { + grid-column: span 2; + } + + &--span-double-row { + grid-row: span 2; + } + + h4 { + padding-top: 20px; } } - a:not(.name-tag) { - color: $ui-secondary-color; - font-weight: 500; + &__quick-access { + display: flex; + align-items: baseline; + border-radius: 4px; + background: $ui-highlight-color; + color: $primary-text-color; + transition: all 100ms ease-in; + font-size: 14px; + padding: 0 16px; + line-height: 36px; + height: 36px; text-decoration: none; + margin-bottom: 4px; + + &:active, + &:focus, + &:hover { + background-color: lighten($ui-highlight-color, 10%); + transition: all 200ms ease-out; + } + + span { + flex: 1 1 auto; + } + + .fa { + flex: 0 0 auto; + } + + strong { + font-weight: 700; + } } } diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 66647e2ad..9dfe181ef 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -11,6 +11,24 @@ code { margin: 0 auto; } +.indicator-icon { + display: flex; + align-items: center; + justify-content: center; + width: 40px; + height: 40px; + border-radius: 50%; + color: $primary-text-color; + + &.success { + background: $success-green; + } + + &.failure { + background: $error-red; + } +} + .simple_form { &.hidden { display: none; diff --git a/app/javascript/styles/mastodon/rtl.scss b/app/javascript/styles/mastodon/rtl.scss index baacf46b9..ea7bb5113 100644 --- a/app/javascript/styles/mastodon/rtl.scss +++ b/app/javascript/styles/mastodon/rtl.scss @@ -126,6 +126,20 @@ body.rtl { .column-header__setting-arrows { float: left; + + .column-header__setting-btn { + &:first-child { + padding-left: 7px; + padding-right: 5px; + } + + &:last-child { + padding-right: 7px; + padding-left: 5px; + margin-right: 5px; + margin-left: 0; + } + } } .setting-toggle__label { @@ -451,11 +465,6 @@ body.rtl { margin-left: 5px; } - .column-header__setting-arrows .column-header__setting-btn:last-child { - padding-left: 0; - padding-right: 10px; - } - .simple_form .input.radio_buttons .radio > label input { left: auto; right: 0; diff --git a/app/lib/activity_tracker.rb b/app/lib/activity_tracker.rb index 81303b715..6d3401b37 100644 --- a/app/lib/activity_tracker.rb +++ b/app/lib/activity_tracker.rb @@ -1,29 +1,73 @@ # frozen_string_literal: true class ActivityTracker + include Redisable + EXPIRE_AFTER = 6.months.seconds + def initialize(prefix, type) + @prefix = prefix + @type = type + end + + def add(value = 1, at_time = Time.now.utc) + key = key_at(at_time) + + case @type + when :basic + redis.incrby(key, value) + when :unique + redis.pfadd(key, value) + end + + redis.expire(key, EXPIRE_AFTER) + end + + def get(start_at, end_at = Time.now.utc) + (start_at.to_date...end_at.to_date).map do |date| + key = key_at(date.to_time(:utc)) + + value = begin + case @type + when :basic + redis.get(key).to_i + when :unique + redis.pfcount(key) + end + end + + [date, value] + end + end + + def sum(start_at, end_at = Time.now.utc) + keys = (start_at.to_date...end_at.to_date).flat_map { |date| [key_at(date.to_time(:utc)), legacy_key_at(date)] }.uniq + + case @type + when :basic + redis.mget(*keys).map(&:to_i).sum + when :unique + redis.pfcount(*keys) + end + end + class << self - include Redisable - def increment(prefix) - key = [prefix, current_week].join(':') - - redis.incrby(key, 1) - redis.expire(key, EXPIRE_AFTER) + new(prefix, :basic).add end def record(prefix, value) - key = [prefix, current_week].join(':') - - redis.pfadd(key, value) - redis.expire(key, EXPIRE_AFTER) - end - - private - - def current_week - Time.zone.today.cweek + new(prefix, :unique).add(value) end end + + private + + def key_at(at_time) + "#{@prefix}:#{at_time.beginning_of_day.to_i}" + end + + def legacy_key_at(at_time) + "#{@prefix}:#{at_time.to_date.cweek}" + end end diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 9a2960507..4c13a80a6 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -223,8 +223,8 @@ class ActivityPub::Activity::Create < ActivityPub::Activity emoji ||= CustomEmoji.new(domain: @account.domain, shortcode: shortcode, uri: uri) emoji.image_remote_url = image_url emoji.save - rescue Seahorse::Client::NetworkingError - nil + rescue Seahorse::Client::NetworkingError => e + Rails.logger.warn "Error storing emoji: #{e}" end def process_attachments @@ -247,8 +247,8 @@ class ActivityPub::Activity::Create < ActivityPub::Activity media_attachment.save rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError RedownloadMediaWorker.perform_in(rand(30..600).seconds, media_attachment.id) - rescue Seahorse::Client::NetworkingError - nil + rescue Seahorse::Client::NetworkingError => e + Rails.logger.warn "Error storing media attachment: #{e}" end end @@ -446,10 +446,14 @@ class ActivityPub::Activity::Create < ActivityPub::Activity end def supported_blurhash?(blurhash) - components = blurhash.blank? ? nil : Blurhash.components(blurhash) + components = blurhash.blank? || !blurhash_valid_chars?(blurhash) ? nil : Blurhash.components(blurhash) components.present? && components.none? { |comp| comp > 5 } end + def blurhash_valid_chars?(blurhash) + /^[\w#$%*+-.:;=?@\[\]^{|}~]+$/.match?(blurhash) + end + def skip_download? return @skip_download if defined?(@skip_download) diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index f6b5e10d3..f6b9741fa 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -64,6 +64,10 @@ class ActivityPub::TagManager account_status_replies_url(target.account, target, page_params) end + def followers_uri_for(target) + target.local? ? account_followers_url(target) : target.followers_url.presence + end + # Primary audience of a status # Public statuses go out to primarily the public collection # Unlisted and private statuses go out primarily to the followers collection @@ -80,17 +84,17 @@ class ActivityPub::TagManager account_ids = status.active_mentions.pluck(:account_id) to = status.account.followers.where(id: account_ids).each_with_object([]) do |account, result| result << uri_for(account) - result << account_followers_url(account) if account.group? + result << followers_uri_for(account) if account.group? end to.concat(FollowRequest.where(target_account_id: status.account_id, account_id: account_ids).each_with_object([]) do |request, result| result << uri_for(request.account) - result << account_followers_url(request.account) if request.account.group? - end) + result << followers_uri_for(request.account) if request.account.group? + end).compact else status.active_mentions.each_with_object([]) do |mention, result| result << uri_for(mention.account) - result << account_followers_url(mention.account) if mention.account.group? - end + result << followers_uri_for(mention.account) if mention.account.group? + end.compact end end end @@ -118,17 +122,17 @@ class ActivityPub::TagManager account_ids = status.active_mentions.pluck(:account_id) cc.concat(status.account.followers.where(id: account_ids).each_with_object([]) do |account, result| result << uri_for(account) - result << account_followers_url(account) if account.group? - end) + result << followers_uri_for(account) if account.group? + end.compact) cc.concat(FollowRequest.where(target_account_id: status.account_id, account_id: account_ids).each_with_object([]) do |request, result| result << uri_for(request.account) - result << account_followers_url(request.account) if request.account.group? - end) + result << followers_uri_for(request.account) if request.account.group? + end.compact) else cc.concat(status.active_mentions.each_with_object([]) do |mention, result| result << uri_for(mention.account) - result << account_followers_url(mention.account) if mention.account.group? - end) + result << followers_uri_for(mention.account) if mention.account.group? + end.compact) end end diff --git a/app/lib/admin/metrics/dimension.rb b/app/lib/admin/metrics/dimension.rb new file mode 100644 index 000000000..279539f68 --- /dev/null +++ b/app/lib/admin/metrics/dimension.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class Admin::Metrics::Dimension + DIMENSIONS = { + languages: Admin::Metrics::Dimension::LanguagesDimension, + sources: Admin::Metrics::Dimension::SourcesDimension, + servers: Admin::Metrics::Dimension::ServersDimension, + space_usage: Admin::Metrics::Dimension::SpaceUsageDimension, + software_versions: Admin::Metrics::Dimension::SoftwareVersionsDimension, + }.freeze + + def self.retrieve(dimension_keys, start_at, end_at, limit) + Array(dimension_keys).map { |key| DIMENSIONS[key.to_sym]&.new(start_at, end_at, limit) }.compact + end +end diff --git a/app/lib/admin/metrics/dimension/base_dimension.rb b/app/lib/admin/metrics/dimension/base_dimension.rb new file mode 100644 index 000000000..8ed8d7683 --- /dev/null +++ b/app/lib/admin/metrics/dimension/base_dimension.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class Admin::Metrics::Dimension::BaseDimension + def initialize(start_at, end_at, limit) + @start_at = start_at&.to_datetime + @end_at = end_at&.to_datetime + @limit = limit&.to_i + end + + def key + raise NotImplementedError + end + + def data + raise NotImplementedError + end + + def self.model_name + self.class.name + end + + def read_attribute_for_serialization(key) + send(key) if respond_to?(key) + end + + protected + + def time_period + (@start_at...@end_at) + end +end diff --git a/app/lib/admin/metrics/dimension/languages_dimension.rb b/app/lib/admin/metrics/dimension/languages_dimension.rb new file mode 100644 index 000000000..2d0ac124e --- /dev/null +++ b/app/lib/admin/metrics/dimension/languages_dimension.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class Admin::Metrics::Dimension::LanguagesDimension < Admin::Metrics::Dimension::BaseDimension + def key + 'languages' + end + + def data + sql = <<-SQL.squish + SELECT locale, count(*) AS value + FROM users + WHERE current_sign_in_at BETWEEN $1 AND $2 + AND locale IS NOT NULL + GROUP BY locale + ORDER BY count(*) DESC + LIMIT $3 + SQL + + rows = ActiveRecord::Base.connection.select_all(sql, nil, [[nil, @start_at], [nil, @end_at], [nil, @limit]]) + + rows.map { |row| { key: row['locale'], human_key: SettingsHelper::HUMAN_LOCALES[row['locale'].to_sym], value: row['value'].to_s } } + end +end diff --git a/app/lib/admin/metrics/dimension/servers_dimension.rb b/app/lib/admin/metrics/dimension/servers_dimension.rb new file mode 100644 index 000000000..3e80b6625 --- /dev/null +++ b/app/lib/admin/metrics/dimension/servers_dimension.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class Admin::Metrics::Dimension::ServersDimension < Admin::Metrics::Dimension::BaseDimension + def key + 'servers' + end + + def data + sql = <<-SQL.squish + SELECT accounts.domain, count(*) AS value + FROM statuses + INNER JOIN accounts ON accounts.id = statuses.account_id + WHERE statuses.id BETWEEN $1 AND $2 + GROUP BY accounts.domain + ORDER BY count(*) DESC + LIMIT $3 + SQL + + rows = ActiveRecord::Base.connection.select_all(sql, nil, [[nil, Mastodon::Snowflake.id_at(@start_at)], [nil, Mastodon::Snowflake.id_at(@end_at)], [nil, @limit]]) + + rows.map { |row| { key: row['domain'] || Rails.configuration.x.local_domain, human_key: row['domain'] || Rails.configuration.x.local_domain, value: row['value'].to_s } } + end +end diff --git a/app/lib/admin/metrics/dimension/software_versions_dimension.rb b/app/lib/admin/metrics/dimension/software_versions_dimension.rb new file mode 100644 index 000000000..34917404d --- /dev/null +++ b/app/lib/admin/metrics/dimension/software_versions_dimension.rb @@ -0,0 +1,69 @@ +# frozen_string_literal: true + +class Admin::Metrics::Dimension::SoftwareVersionsDimension < Admin::Metrics::Dimension::BaseDimension + include Redisable + + def key + 'software_versions' + end + + def data + [mastodon_version, ruby_version, postgresql_version, redis_version] + end + + private + + def mastodon_version + value = Mastodon::Version.to_s + + { + key: 'mastodon', + human_key: 'Mastodon', + value: value, + human_value: value, + } + end + + def ruby_version + value = "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}" + + { + key: 'ruby', + human_key: 'Ruby', + value: value, + human_value: value, + } + end + + def postgresql_version + value = ActiveRecord::Base.connection.execute('SELECT VERSION()').first['version'].match(/\A(?:PostgreSQL |)([^\s]+).*\z/)[1] + + { + key: 'postgresql', + human_key: 'PostgreSQL', + value: value, + human_value: value, + } + end + + def redis_version + value = redis_info['redis_version'] + + { + key: 'redis', + human_key: 'Redis', + value: value, + human_value: value, + } + end + + def redis_info + @redis_info ||= begin + if redis.is_a?(Redis::Namespace) + redis.redis.info + else + redis.info + end + end + end +end diff --git a/app/lib/admin/metrics/dimension/sources_dimension.rb b/app/lib/admin/metrics/dimension/sources_dimension.rb new file mode 100644 index 000000000..a9f061809 --- /dev/null +++ b/app/lib/admin/metrics/dimension/sources_dimension.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class Admin::Metrics::Dimension::SourcesDimension < Admin::Metrics::Dimension::BaseDimension + def key + 'sources' + end + + def data + sql = <<-SQL.squish + SELECT oauth_applications.name, count(*) AS value + FROM users + LEFT JOIN oauth_applications ON oauth_applications.id = users.created_by_application_id + WHERE users.created_at BETWEEN $1 AND $2 + GROUP BY oauth_applications.name + ORDER BY count(*) DESC + LIMIT $3 + SQL + + rows = ActiveRecord::Base.connection.select_all(sql, nil, [[nil, @start_at], [nil, @end_at], [nil, @limit]]) + + rows.map { |row| { key: row['name'] || 'web', human_key: row['name'] || I18n.t('admin.dashboard.website'), value: row['value'].to_s } } + end +end diff --git a/app/lib/admin/metrics/dimension/space_usage_dimension.rb b/app/lib/admin/metrics/dimension/space_usage_dimension.rb new file mode 100644 index 000000000..aa00a2e18 --- /dev/null +++ b/app/lib/admin/metrics/dimension/space_usage_dimension.rb @@ -0,0 +1,70 @@ +# frozen_string_literal: true + +class Admin::Metrics::Dimension::SpaceUsageDimension < Admin::Metrics::Dimension::BaseDimension + include Redisable + include ActionView::Helpers::NumberHelper + + def key + 'space_usage' + end + + def data + [postgresql_size, redis_size, media_size] + end + + private + + def postgresql_size + value = ActiveRecord::Base.connection.execute('SELECT pg_database_size(current_database())').first['pg_database_size'] + + { + key: 'postgresql', + human_key: 'PostgreSQL', + value: value.to_s, + unit: 'bytes', + human_value: number_to_human_size(value), + } + end + + def redis_size + value = redis_info['used_memory'] + + { + key: 'redis', + human_key: 'Redis', + value: value.to_s, + unit: 'bytes', + human_value: number_to_human_size(value), + } + end + + def media_size + value = [ + MediaAttachment.sum(Arel.sql('COALESCE(file_file_size, 0) + COALESCE(thumbnail_file_size, 0)')), + CustomEmoji.sum(:image_file_size), + PreviewCard.sum(:image_file_size), + Account.sum(Arel.sql('COALESCE(avatar_file_size, 0) + COALESCE(header_file_size, 0)')), + Backup.sum(:dump_file_size), + Import.sum(:data_file_size), + SiteUpload.sum(:file_file_size), + ].sum + + { + key: 'media', + human_key: I18n.t('admin.dashboard.media_storage'), + value: value.to_s, + unit: 'bytes', + human_value: number_to_human_size(value), + } + end + + def redis_info + @redis_info ||= begin + if redis.is_a?(Redis::Namespace) + redis.redis.info + else + redis.info + end + end + end +end diff --git a/app/lib/admin/metrics/measure.rb b/app/lib/admin/metrics/measure.rb new file mode 100644 index 000000000..5cebf0331 --- /dev/null +++ b/app/lib/admin/metrics/measure.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class Admin::Metrics::Measure + MEASURES = { + active_users: Admin::Metrics::Measure::ActiveUsersMeasure, + new_users: Admin::Metrics::Measure::NewUsersMeasure, + interactions: Admin::Metrics::Measure::InteractionsMeasure, + opened_reports: Admin::Metrics::Measure::OpenedReportsMeasure, + resolved_reports: Admin::Metrics::Measure::ResolvedReportsMeasure, + }.freeze + + def self.retrieve(measure_keys, start_at, end_at) + Array(measure_keys).map { |key| MEASURES[key.to_sym]&.new(start_at, end_at) }.compact + end +end diff --git a/app/lib/admin/metrics/measure/active_users_measure.rb b/app/lib/admin/metrics/measure/active_users_measure.rb new file mode 100644 index 000000000..ac022eb9d --- /dev/null +++ b/app/lib/admin/metrics/measure/active_users_measure.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +class Admin::Metrics::Measure::ActiveUsersMeasure < Admin::Metrics::Measure::BaseMeasure + def key + 'active_users' + end + + def total + activity_tracker.sum(time_period.first, time_period.last) + end + + def previous_total + activity_tracker.sum(previous_time_period.first, previous_time_period.last) + end + + def data + activity_tracker.get(time_period.first, time_period.last).map { |date, value| { date: date.to_time(:utc).iso8601, value: value.to_s } } + end + + protected + + def activity_tracker + @activity_tracker ||= ActivityTracker.new('activity:logins', :unique) + end + + def time_period + (@start_at.to_date...@end_at.to_date) + end + + def previous_time_period + ((@start_at.to_date - length_of_period)...(@end_at.to_date - length_of_period)) + end +end diff --git a/app/lib/admin/metrics/measure/base_measure.rb b/app/lib/admin/metrics/measure/base_measure.rb new file mode 100644 index 000000000..4c336a69e --- /dev/null +++ b/app/lib/admin/metrics/measure/base_measure.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +class Admin::Metrics::Measure::BaseMeasure + def initialize(start_at, end_at) + @start_at = start_at&.to_datetime + @end_at = end_at&.to_datetime + end + + def key + raise NotImplementedError + end + + def total + raise NotImplementedError + end + + def previous_total + raise NotImplementedError + end + + def data + raise NotImplementedError + end + + def self.model_name + self.class.name + end + + def read_attribute_for_serialization(key) + send(key) if respond_to?(key) + end + + protected + + def time_period + (@start_at...@end_at) + end + + def previous_time_period + ((@start_at - length_of_period)...(@end_at - length_of_period)) + end + + def length_of_period + @length_of_period ||= @end_at - @start_at + end +end diff --git a/app/lib/admin/metrics/measure/interactions_measure.rb b/app/lib/admin/metrics/measure/interactions_measure.rb new file mode 100644 index 000000000..9a4ef6d63 --- /dev/null +++ b/app/lib/admin/metrics/measure/interactions_measure.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +class Admin::Metrics::Measure::InteractionsMeasure < Admin::Metrics::Measure::BaseMeasure + def key + 'interactions' + end + + def total + activity_tracker.sum(time_period.first, time_period.last) + end + + def previous_total + activity_tracker.sum(previous_time_period.first, previous_time_period.last) + end + + def data + activity_tracker.get(time_period.first, time_period.last).map { |date, value| { date: date.to_time(:utc).iso8601, value: value.to_s } } + end + + protected + + def activity_tracker + @activity_tracker ||= ActivityTracker.new('activity:interactions', :basic) + end + + def time_period + (@start_at.to_date...@end_at.to_date) + end + + def previous_time_period + ((@start_at.to_date - length_of_period)...(@end_at.to_date - length_of_period)) + end +end diff --git a/app/lib/admin/metrics/measure/new_users_measure.rb b/app/lib/admin/metrics/measure/new_users_measure.rb new file mode 100644 index 000000000..b31679ad3 --- /dev/null +++ b/app/lib/admin/metrics/measure/new_users_measure.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +class Admin::Metrics::Measure::NewUsersMeasure < Admin::Metrics::Measure::BaseMeasure + def key + 'new_users' + end + + def total + User.where(created_at: time_period).count + end + + def previous_total + User.where(created_at: previous_time_period).count + end + + def data + sql = <<-SQL.squish + SELECT axis.*, ( + WITH new_users AS ( + SELECT users.id + FROM users + WHERE date_trunc('day', users.created_at)::date = axis.period + ) + SELECT count(*) FROM new_users + ) AS value + FROM ( + SELECT generate_series(date_trunc('day', $1::timestamp)::date, date_trunc('day', $2::timestamp)::date, interval '1 day') AS period + ) AS axis + SQL + + rows = ActiveRecord::Base.connection.select_all(sql, nil, [[nil, @start_at], [nil, @end_at]]) + + rows.map { |row| { date: row['period'], value: row['value'].to_s } } + end +end diff --git a/app/lib/admin/metrics/measure/opened_reports_measure.rb b/app/lib/admin/metrics/measure/opened_reports_measure.rb new file mode 100644 index 000000000..9acc2c33d --- /dev/null +++ b/app/lib/admin/metrics/measure/opened_reports_measure.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +class Admin::Metrics::Measure::OpenedReportsMeasure < Admin::Metrics::Measure::BaseMeasure + def key + 'opened_reports' + end + + def total + Report.where(created_at: time_period).count + end + + def previous_total + Report.where(created_at: previous_time_period).count + end + + def data + sql = <<-SQL.squish + SELECT axis.*, ( + WITH new_reports AS ( + SELECT reports.id + FROM reports + WHERE date_trunc('day', reports.created_at)::date = axis.period + ) + SELECT count(*) FROM new_reports + ) AS value + FROM ( + SELECT generate_series(date_trunc('day', $1::timestamp)::date, date_trunc('day', $2::timestamp)::date, interval '1 day') AS period + ) AS axis + SQL + + rows = ActiveRecord::Base.connection.select_all(sql, nil, [[nil, @start_at], [nil, @end_at]]) + + rows.map { |row| { date: row['period'], value: row['value'].to_s } } + end +end diff --git a/app/lib/admin/metrics/measure/resolved_reports_measure.rb b/app/lib/admin/metrics/measure/resolved_reports_measure.rb new file mode 100644 index 000000000..0dcecbbad --- /dev/null +++ b/app/lib/admin/metrics/measure/resolved_reports_measure.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +class Admin::Metrics::Measure::ResolvedReportsMeasure < Admin::Metrics::Measure::BaseMeasure + def key + 'resolved_reports' + end + + def total + Report.resolved.where(updated_at: time_period).count + end + + def previous_total + Report.resolved.where(updated_at: previous_time_period).count + end + + def data + sql = <<-SQL.squish + SELECT axis.*, ( + WITH resolved_reports AS ( + SELECT reports.id + FROM reports + WHERE action_taken + AND date_trunc('day', reports.updated_at)::date = axis.period + ) + SELECT count(*) FROM resolved_reports + ) AS value + FROM ( + SELECT generate_series(date_trunc('day', $1::timestamp)::date, date_trunc('day', $2::timestamp)::date, interval '1 day') AS period + ) AS axis + SQL + + rows = ActiveRecord::Base.connection.select_all(sql, nil, [[nil, @start_at], [nil, @end_at]]) + + rows.map { |row| { date: row['period'], value: row['value'].to_s } } + end +end diff --git a/app/lib/admin/metrics/retention.rb b/app/lib/admin/metrics/retention.rb new file mode 100644 index 000000000..6b9dfde49 --- /dev/null +++ b/app/lib/admin/metrics/retention.rb @@ -0,0 +1,67 @@ +# frozen_string_literal: true + +class Admin::Metrics::Retention + class Cohort < ActiveModelSerializers::Model + attributes :period, :frequency, :data + end + + class CohortData < ActiveModelSerializers::Model + attributes :date, :percent, :value + end + + def initialize(start_at, end_at, frequency) + @start_at = start_at&.to_date + @end_at = end_at&.to_date + @frequency = %w(day month).include?(frequency) ? frequency : 'day' + end + + def cohorts + sql = <<-SQL.squish + SELECT axis.*, ( + WITH new_users AS ( + SELECT users.id + FROM users + WHERE date_trunc($3, users.created_at)::date = axis.cohort_period + ), + retained_users AS ( + SELECT users.id + FROM users + INNER JOIN new_users on new_users.id = users.id + WHERE date_trunc($3, users.current_sign_in_at) >= axis.retention_period + ) + SELECT ARRAY[count(*), (count(*))::float / (SELECT GREATEST(count(*), 1) FROM new_users)] AS retention_value_and_rate + FROM retained_users + ) + FROM ( + WITH cohort_periods AS ( + SELECT generate_series(date_trunc($3, $1::timestamp)::date, date_trunc($3, $2::timestamp)::date, ('1 ' || $3)::interval) AS cohort_period + ), + retention_periods AS ( + SELECT cohort_period AS retention_period FROM cohort_periods + ) + SELECT * + FROM cohort_periods, retention_periods + WHERE retention_period >= cohort_period + ) as axis + SQL + + rows = ActiveRecord::Base.connection.select_all(sql, nil, [[nil, @start_at], [nil, @end_at], [nil, @frequency]]) + + rows.each_with_object([]) do |row, arr| + current_cohort = arr.last + + if current_cohort.nil? || current_cohort.period != row['cohort_period'] + current_cohort = Cohort.new(period: row['cohort_period'], frequency: @frequency, data: []) + arr << current_cohort + end + + value, rate = row['retention_value_and_rate'].delete('{}').split(',') + + current_cohort.data << CohortData.new( + date: row['retention_period'], + percent: rate.to_f, + value: value.to_s + ) + end + end +end diff --git a/app/lib/fast_geometry_parser.rb b/app/lib/fast_geometry_parser.rb index 5209c2bc5..f3395a833 100644 --- a/app/lib/fast_geometry_parser.rb +++ b/app/lib/fast_geometry_parser.rb @@ -2,7 +2,7 @@ class FastGeometryParser def self.from_file(file) - width, height = FastImage.size(file.path) + width, height = FastImage.size(file) raise Paperclip::Errors::NotIdentifiedByImageMagickError if width.nil? diff --git a/app/lib/formatter.rb b/app/lib/formatter.rb index fd6537526..1610f3689 100644 --- a/app/lib/formatter.rb +++ b/app/lib/formatter.rb @@ -214,39 +214,10 @@ class Formatter result.flatten.join end - UNICODE_ESCAPE_BLACKLIST_RE = /\p{Z}|\p{P}/ - def utf8_friendly_extractor(text, options = {}) - old_to_new_index = [0] - - escaped = text.chars.map do |c| - output = begin - if c.ord.to_s(16).length > 2 && !UNICODE_ESCAPE_BLACKLIST_RE.match?(c) - CGI.escape(c) - else - c - end - end - - old_to_new_index << old_to_new_index.last + output.length - - output - end.join - # Note: I couldn't obtain list_slug with @user/list-name format # for mention so this requires additional check - special = Extractor.extract_urls_with_indices(escaped, options).map do |extract| - new_indices = [ - old_to_new_index.find_index(extract[:indices].first), - old_to_new_index.find_index(extract[:indices].last), - ] - - next extract.merge( - indices: new_indices, - url: text[new_indices.first..new_indices.last - 1] - ) - end - + special = Extractor.extract_urls_with_indices(text, options) standard = Extractor.extract_entities_with_indices(text, options) extra = Extractor.extract_extra_uris_with_indices(text, options) diff --git a/app/lib/permalink_redirector.rb b/app/lib/permalink_redirector.rb new file mode 100644 index 000000000..e48bce060 --- /dev/null +++ b/app/lib/permalink_redirector.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +class PermalinkRedirector + include RoutingHelper + + def initialize(path) + @path = path + end + + def redirect_path + if path_segments[0] == 'web' + if path_segments[1].present? && path_segments[1].start_with?('@') && path_segments[2] =~ /\d/ + find_status_url_by_id(path_segments[2]) + elsif path_segments[1].present? && path_segments[1].start_with?('@') + find_account_url_by_name(path_segments[1]) + elsif path_segments[1] == 'statuses' && path_segments[2] =~ /\d/ + find_status_url_by_id(path_segments[2]) + elsif path_segments[1] == 'accounts' && path_segments[2] =~ /\d/ + find_account_url_by_id(path_segments[2]) + elsif path_segments[1] == 'timelines' && path_segments[2] == 'tag' && path_segments[3].present? + find_tag_url_by_name(path_segments[3]) + elsif path_segments[1] == 'tags' && path_segments[2].present? + find_tag_url_by_name(path_segments[2]) + end + end + end + + private + + def path_segments + @path_segments ||= @path.gsub(/\A\//, '').split('/') + end + + def find_status_url_by_id(id) + status = Status.find_by(id: id) + + return unless status&.distributable? + + ActivityPub::TagManager.instance.url_for(status) + end + + def find_account_url_by_id(id) + account = Account.find_by(id: id) + + return unless account + + ActivityPub::TagManager.instance.url_for(account) + end + + def find_account_url_by_name(name) + username, domain = name.gsub(/\A@/, '').split('@') + domain = nil if TagManager.instance.local_domain?(domain) + account = Account.find_remote(username, domain) + + return unless account + + ActivityPub::TagManager.instance.url_for(account) + end + + def find_tag_url_by_name(name) + tag_path(CGI.unescape(name)) + end +end diff --git a/app/models/account.rb b/app/models/account.rb index 230a9c178..8a234a95f 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -58,15 +58,16 @@ class Account < ApplicationRecord hub_url ) - USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.-]+[a-z0-9_]+)?/i - MENTION_RE = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[[:word:]\.\-]+[a-z0-9]+)?)/i + USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.-]+[a-z0-9_]+)?/i + MENTION_RE = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[[:word:]\.\-]+[[:word:]]+)?)/i + URL_PREFIX_RE = /\Ahttp(s?):\/\/[^\/]+/ + include Attachmentable include AccountAssociations include AccountAvatar include AccountFinderConcern include AccountHeader include AccountInteractions - include Attachmentable include Paginable include AccountCounters include DomainNormalizable @@ -232,11 +233,11 @@ class Account < ApplicationRecord suspended? && deletion_request.present? end - def suspend!(date: Time.now.utc, origin: :local) + def suspend!(date: Time.now.utc, origin: :local, block_email: true) transaction do create_deletion_request! update!(suspended_at: date, suspension_origin: origin) - create_canonical_email_block! + create_canonical_email_block! if block_email end end @@ -295,7 +296,11 @@ class Account < ApplicationRecord end def fields - (self[:fields] || []).map { |f| Field.new(self, f) } + (self[:fields] || []).map do |f| + Field.new(self, f) + rescue + nil + end.compact end def fields_attributes=(attributes) @@ -375,7 +380,7 @@ class Account < ApplicationRecord def synchronization_uri_prefix return 'local' if local? - @synchronization_uri_prefix ||= uri[/http(s?):\/\/[^\/]+\//] + @synchronization_uri_prefix ||= "#{uri[URL_PREFIX_RE]}/" end class Field < ActiveModelSerializers::Model @@ -570,7 +575,11 @@ class Account < ApplicationRecord def create_canonical_email_block! return unless local? && user_email.present? - CanonicalEmailBlock.create(reference_account: self, email: user_email) + begin + CanonicalEmailBlock.create(reference_account: self, email: user_email) + rescue ActiveRecord::RecordNotUnique + # A canonical e-mail block may already exist for the same e-mail + end end def destroy_canonical_email_block! diff --git a/app/models/account_stat.rb b/app/models/account_stat.rb index 44da4f0d0..e702fa4a4 100644 --- a/app/models/account_stat.rb +++ b/app/models/account_stat.rb @@ -15,6 +15,7 @@ class AccountStat < ApplicationRecord self.locking_column = nil + self.ignored_columns = %w(lock_version) belongs_to :account, inverse_of: :account_stat diff --git a/app/models/account_statuses_cleanup_policy.rb b/app/models/account_statuses_cleanup_policy.rb new file mode 100644 index 000000000..0a9551ec2 --- /dev/null +++ b/app/models/account_statuses_cleanup_policy.rb @@ -0,0 +1,171 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: account_statuses_cleanup_policies +# +# id :bigint not null, primary key +# account_id :bigint not null +# enabled :boolean default(TRUE), not null +# min_status_age :integer default(1209600), not null +# keep_direct :boolean default(TRUE), not null +# keep_pinned :boolean default(TRUE), not null +# keep_polls :boolean default(FALSE), not null +# keep_media :boolean default(FALSE), not null +# keep_self_fav :boolean default(TRUE), not null +# keep_self_bookmark :boolean default(TRUE), not null +# min_favs :integer +# min_reblogs :integer +# created_at :datetime not null +# updated_at :datetime not null +# +class AccountStatusesCleanupPolicy < ApplicationRecord + include Redisable + + ALLOWED_MIN_STATUS_AGE = [ + 2.weeks.seconds, + 1.month.seconds, + 2.months.seconds, + 3.months.seconds, + 6.months.seconds, + 1.year.seconds, + 2.years.seconds, + ].freeze + + EXCEPTION_BOOLS = %w(keep_direct keep_pinned keep_polls keep_media keep_self_fav keep_self_bookmark).freeze + EXCEPTION_THRESHOLDS = %w(min_favs min_reblogs).freeze + + # Depending on the cleanup policy, the query to discover the next + # statuses to delete my get expensive if the account has a lot of old + # statuses otherwise excluded from deletion by the other exceptions. + # + # Therefore, `EARLY_SEARCH_CUTOFF` is meant to be the maximum number of + # old statuses to be considered for deletion prior to checking exceptions. + # + # This is used in `compute_cutoff_id` to provide a `max_id` to + # `statuses_to_delete`. + EARLY_SEARCH_CUTOFF = 5_000 + + belongs_to :account + + validates :min_status_age, inclusion: { in: ALLOWED_MIN_STATUS_AGE } + validates :min_favs, numericality: { greater_than_or_equal_to: 1, allow_nil: true } + validates :min_reblogs, numericality: { greater_than_or_equal_to: 1, allow_nil: true } + validate :validate_local_account + + before_save :update_last_inspected + + def statuses_to_delete(limit = 50, max_id = nil, min_id = nil) + scope = account.statuses + scope.merge!(old_enough_scope(max_id)) + scope = scope.where(Status.arel_table[:id].gteq(min_id)) if min_id.present? + scope.merge!(without_popular_scope) unless min_favs.nil? && min_reblogs.nil? + scope.merge!(without_direct_scope) if keep_direct? + scope.merge!(without_pinned_scope) if keep_pinned? + scope.merge!(without_poll_scope) if keep_polls? + scope.merge!(without_media_scope) if keep_media? + scope.merge!(without_self_fav_scope) if keep_self_fav? + scope.merge!(without_self_bookmark_scope) if keep_self_bookmark? + + scope.reorder(id: :asc).limit(limit) + end + + # This computes a toot id such that: + # - the toot would be old enough to be candidate for deletion + # - there are at most EARLY_SEARCH_CUTOFF toots between the last inspected toot and this one + # + # The idea is to limit expensive SQL queries when an account has lots of toots excluded from + # deletion, while not starting anew on each run. + def compute_cutoff_id + min_id = last_inspected || 0 + max_id = Mastodon::Snowflake.id_at(min_status_age.seconds.ago, with_random: false) + subquery = account.statuses.where(Status.arel_table[:id].gteq(min_id)).where(Status.arel_table[:id].lteq(max_id)) + subquery = subquery.select(:id).reorder(id: :asc).limit(EARLY_SEARCH_CUTOFF) + + # We're textually interpolating a subquery here as ActiveRecord seem to not provide + # a way to apply the limit to the subquery + Status.connection.execute("SELECT MAX(id) FROM (#{subquery.to_sql}) t").values.first.first + end + + # The most important thing about `last_inspected` is that any toot older than it is guaranteed + # not to be kept by the policy regardless of its age. + def record_last_inspected(last_id) + redis.set("account_cleanup:#{account.id}", last_id, ex: 1.week.seconds) + end + + def last_inspected + redis.get("account_cleanup:#{account.id}")&.to_i + end + + def invalidate_last_inspected(status, action) + last_value = last_inspected + return if last_value.nil? || status.id > last_value || status.account_id != account_id + + case action + when :unbookmark + return unless keep_self_bookmark? + when :unfav + return unless keep_self_fav? + when :unpin + return unless keep_pinned? + end + + record_last_inspected(status.id) + end + + private + + def update_last_inspected + if EXCEPTION_BOOLS.map { |name| attribute_change_to_be_saved(name) }.compact.include?([true, false]) + # Policy has been widened in such a way that any previously-inspected status + # may need to be deleted, so we'll have to start again. + redis.del("account_cleanup:#{account.id}") + end + if EXCEPTION_THRESHOLDS.map { |name| attribute_change_to_be_saved(name) }.compact.any? { |old, new| old.present? && (new.nil? || new > old) } + redis.del("account_cleanup:#{account.id}") + end + end + + def validate_local_account + errors.add(:account, :invalid) unless account&.local? + end + + def without_direct_scope + Status.where.not(visibility: :direct) + end + + def old_enough_scope(max_id = nil) + # Filtering on `id` rather than `min_status_age` ago will treat + # non-snowflake statuses as older than they really are, but Mastodon + # has switched to snowflake IDs significantly over 2 years ago anyway. + max_id = [max_id, Mastodon::Snowflake.id_at(min_status_age.seconds.ago, with_random: false)].compact.min + Status.where(Status.arel_table[:id].lteq(max_id)) + end + + def without_self_fav_scope + Status.where('NOT EXISTS (SELECT * FROM favourites fav WHERE fav.account_id = statuses.account_id AND fav.status_id = statuses.id)') + end + + def without_self_bookmark_scope + Status.where('NOT EXISTS (SELECT * FROM bookmarks bookmark WHERE bookmark.account_id = statuses.account_id AND bookmark.status_id = statuses.id)') + end + + def without_pinned_scope + Status.where('NOT EXISTS (SELECT * FROM status_pins pin WHERE pin.account_id = statuses.account_id AND pin.status_id = statuses.id)') + end + + def without_media_scope + Status.where('NOT EXISTS (SELECT * FROM media_attachments media WHERE media.status_id = statuses.id)') + end + + def without_poll_scope + Status.where(poll_id: nil) + end + + def without_popular_scope + scope = Status.left_joins(:status_stat) + scope = scope.where('COALESCE(status_stats.reblogs_count, 0) < ?', min_reblogs) unless min_reblogs.nil? + scope = scope.where('COALESCE(status_stats.favourites_count, 0) < ?', min_favs) unless min_favs.nil? + scope + end +end diff --git a/app/models/admin/action_log_filter.rb b/app/models/admin/action_log_filter.rb index a1c156a8b..6e19dcf70 100644 --- a/app/models/admin/action_log_filter.rb +++ b/app/models/admin/action_log_filter.rb @@ -76,7 +76,7 @@ class Admin::ActionLogFilter when 'account_id' Admin::ActionLog.where(account_id: value) when 'target_account_id' - account = Account.find(value) + account = Account.find_or_initialize_by(id: value) Admin::ActionLog.where(target: [account, account.user].compact) else raise "Unknown filter: #{key}" diff --git a/app/models/bookmark.rb b/app/models/bookmark.rb index 916261a17..f21ea714c 100644 --- a/app/models/bookmark.rb +++ b/app/models/bookmark.rb @@ -23,4 +23,12 @@ class Bookmark < ApplicationRecord before_validation do self.status = status.reblog if status&.reblog? end + + after_destroy :invalidate_cleanup_info + + def invalidate_cleanup_info + return unless status&.account_id == account_id && account.local? + + account.statuses_cleanup_policy&.invalidate_last_inspected(status, :unbookmark) + end end diff --git a/app/models/concerns/account_associations.rb b/app/models/concerns/account_associations.rb index aaf371ebd..f2a4eae77 100644 --- a/app/models/concerns/account_associations.rb +++ b/app/models/concerns/account_associations.rb @@ -66,5 +66,8 @@ module AccountAssociations # Follow recommendations has_one :follow_recommendation_suppression, inverse_of: :account, dependent: :destroy + + # Account statuses cleanup policy + has_one :statuses_cleanup_policy, class_name: 'AccountStatusesCleanupPolicy', inverse_of: :account, dependent: :destroy end end diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb index 958f6c78e..ad1665dc4 100644 --- a/app/models/concerns/account_interactions.rb +++ b/app/models/concerns/account_interactions.rb @@ -81,6 +81,9 @@ module AccountInteractions has_many :following, -> { order('follows.id desc') }, through: :active_relationships, source: :target_account has_many :followers, -> { order('follows.id desc') }, through: :passive_relationships, source: :account + # Account notes + has_many :account_notes, dependent: :destroy + # Block relationships has_many :block_relationships, class_name: 'Block', foreign_key: 'account_id', dependent: :destroy has_many :blocking, -> { order('blocks.id desc') }, through: :block_relationships, source: :target_account @@ -192,6 +195,10 @@ module AccountInteractions !following_anyone? end + def followed_by?(other_account) + other_account.following?(self) + end + def blocking?(other_account) block_relationships.where(target_account: other_account).exists? end @@ -251,10 +258,13 @@ module AccountInteractions .where('users.current_sign_in_at > ?', User::ACTIVE_DURATION.ago) end - def remote_followers_hash(url_prefix) - Rails.cache.fetch("followers_hash:#{id}:#{url_prefix}") do + def remote_followers_hash(url) + url_prefix = url[Account::URL_PREFIX_RE] + return if url_prefix.blank? + + Rails.cache.fetch("followers_hash:#{id}:#{url_prefix}/") do digest = "\x00" * 32 - followers.where(Account.arel_table[:uri].matches(url_prefix + '%', false, true)).pluck_each(:uri) do |uri| + followers.where(Account.arel_table[:uri].matches("#{Account.sanitize_sql_like(url_prefix)}/%", false, true)).or(followers.where(uri: url_prefix)).pluck_each(:uri) do |uri| Xorcist.xor!(digest, Digest::SHA256.digest(uri)) end digest.unpack('H*')[0] diff --git a/app/models/concerns/attachmentable.rb b/app/models/concerns/attachmentable.rb index c5febb828..01fae4236 100644 --- a/app/models/concerns/attachmentable.rb +++ b/app/models/concerns/attachmentable.rb @@ -15,50 +15,47 @@ module Attachmentable # those files, it is necessary to use the output of the # `file` utility instead INCORRECT_CONTENT_TYPES = %w( + audio/vorbis video/ogg video/webm ).freeze included do - before_post_process :obfuscate_file_name - before_post_process :set_file_extensions - before_post_process :check_image_dimensions - before_post_process :set_file_content_type + def self.has_attached_file(name, options = {}) # rubocop:disable Naming/PredicateName + options = { validate_media_type: false }.merge(options) + super(name, options) + send(:"before_#{name}_post_process") do + attachment = send(name) + check_image_dimension(attachment) + set_file_content_type(attachment) + obfuscate_file_name(attachment) + set_file_extension(attachment) + Paperclip::Validators::MediaTypeSpoofDetectionValidator.new(attributes: [name]).validate(self) + end + end end private - def set_file_content_type - self.class.attachment_definitions.each_key do |attachment_name| - attachment = send(attachment_name) + def set_file_content_type(attachment) # rubocop:disable Naming/AccessorMethodName + return if attachment.blank? || attachment.queued_for_write[:original].blank? || !INCORRECT_CONTENT_TYPES.include?(attachment.instance_read(:content_type)) - next if attachment.blank? || attachment.queued_for_write[:original].blank? || !INCORRECT_CONTENT_TYPES.include?(attachment.instance_read(:content_type)) - - attachment.instance_write :content_type, calculated_content_type(attachment) - end + attachment.instance_write :content_type, calculated_content_type(attachment) end - def set_file_extensions - self.class.attachment_definitions.each_key do |attachment_name| - attachment = send(attachment_name) + def set_file_extension(attachment) # rubocop:disable Naming/AccessorMethodName + return if attachment.blank? - next if attachment.blank? - - attachment.instance_write :file_name, [Paperclip::Interpolations.basename(attachment, :original), appropriate_extension(attachment)].delete_if(&:blank?).join('.') - end + attachment.instance_write :file_name, [Paperclip::Interpolations.basename(attachment, :original), appropriate_extension(attachment)].delete_if(&:blank?).join('.') end - def check_image_dimensions - self.class.attachment_definitions.each_key do |attachment_name| - attachment = send(attachment_name) + def check_image_dimension(attachment) + return if attachment.blank? || !/image.*/.match?(attachment.content_type) || attachment.queued_for_write[:original].blank? - next if attachment.blank? || !/image.*/.match?(attachment.content_type) || attachment.queued_for_write[:original].blank? + width, height = FastImage.size(attachment.queued_for_write[:original].path) + matrix_limit = attachment.content_type == 'image/gif' ? GIF_MATRIX_LIMIT : MAX_MATRIX_LIMIT - width, height = FastImage.size(attachment.queued_for_write[:original].path) - matrix_limit = attachment.content_type == 'image/gif' ? GIF_MATRIX_LIMIT : MAX_MATRIX_LIMIT - - raise Mastodon::DimensionsValidationError, "#{width}x#{height} images are not supported" if width.present? && height.present? && (width * height > matrix_limit) - end + raise Mastodon::DimensionsValidationError, "#{width}x#{height} images are not supported" if width.present? && height.present? && (width * height > matrix_limit) end def appropriate_extension(attachment) @@ -79,13 +76,9 @@ module Attachmentable '' end - def obfuscate_file_name - self.class.attachment_definitions.each_key do |attachment_name| - attachment = send(attachment_name) + def obfuscate_file_name(attachment) + return if attachment.blank? || attachment.queued_for_write[:original].blank? || attachment.options[:preserve_files] - next if attachment.blank? || attachment.queued_for_write[:original].blank? || attachment.options[:preserve_files] - - attachment.instance_write :file_name, SecureRandom.hex(8) + File.extname(attachment.instance_read(:file_name)) - end + attachment.instance_write :file_name, SecureRandom.hex(8) + File.extname(attachment.instance_read(:file_name)) end end diff --git a/app/models/concerns/ldap_authenticable.rb b/app/models/concerns/ldap_authenticable.rb index e3f94bb6c..dc5abcd5a 100644 --- a/app/models/concerns/ldap_authenticable.rb +++ b/app/models/concerns/ldap_authenticable.rb @@ -15,10 +15,10 @@ module LdapAuthenticable def ldap_get_user(attributes = {}) safe_username = attributes[Devise.ldap_uid.to_sym].first + if Devise.ldap_uid_conversion_enabled keys = Regexp.union(Devise.ldap_uid_conversion_search.chars) replacement = Devise.ldap_uid_conversion_replace - safe_username = safe_username.gsub(keys, replacement) end diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index 41fd5ce31..bafbcbb8e 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -21,6 +21,8 @@ # class CustomEmoji < ApplicationRecord + include Attachmentable + LIMIT = 50.kilobytes SHORTCODE_RE_FRAGMENT = '[a-zA-Z0-9_]{2,}' @@ -34,7 +36,7 @@ class CustomEmoji < ApplicationRecord belongs_to :category, class_name: 'CustomEmojiCategory', optional: true has_one :local_counterpart, -> { where(domain: nil) }, class_name: 'CustomEmoji', primary_key: :shortcode, foreign_key: :shortcode - has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce -strip' } } + has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce -strip' } }, validate_media_type: false before_validation :downcase_domain @@ -49,8 +51,6 @@ class CustomEmoji < ApplicationRecord remotable_attachment :image, LIMIT - include Attachmentable - after_commit :remove_entity_cache def local? diff --git a/app/models/favourite.rb b/app/models/favourite.rb index 35028b7dd..ca8bce146 100644 --- a/app/models/favourite.rb +++ b/app/models/favourite.rb @@ -28,6 +28,7 @@ class Favourite < ApplicationRecord after_create :increment_cache_counters after_destroy :decrement_cache_counters + after_destroy :invalidate_cleanup_info private @@ -39,4 +40,10 @@ class Favourite < ApplicationRecord return if association(:status).loaded? && status.marked_for_destruction? status&.decrement_count!(:favourites_count) end + + def invalidate_cleanup_info + return unless status&.account_id == account_id && account.local? + + account.statuses_cleanup_policy&.invalidate_last_inspected(status, :unfav) + end end diff --git a/app/models/form/account_batch.rb b/app/models/form/account_batch.rb index 698933c9f..f1e1c8a65 100644 --- a/app/models/form/account_batch.rb +++ b/app/models/form/account_batch.rb @@ -43,9 +43,7 @@ class Form::AccountBatch end def remove_from_followers! - current_account.passive_relationships.where(account_id: account_ids).find_each do |follow| - reject_follow!(follow) - end + RemoveFromFollowersService.new.call(current_account, account_ids) end def block_domains! @@ -62,14 +60,6 @@ class Form::AccountBatch Account.where(id: account_ids) end - def reject_follow!(follow) - follow.destroy - - return unless follow.account.activitypub? - - ActivityPub::DeliveryWorker.perform_async(Oj.dump(serialize_payload(follow, ActivityPub::RejectFollowSerializer)), current_account.id, follow.account.inbox_url) - end - def approve! users = accounts.includes(:user).map(&:user) diff --git a/app/models/login_activity.rb b/app/models/login_activity.rb new file mode 100644 index 000000000..52a0fd01d --- /dev/null +++ b/app/models/login_activity.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true +# == Schema Information +# +# Table name: login_activities +# +# id :bigint(8) not null, primary key +# user_id :bigint(8) not null +# authentication_method :string +# provider :string +# success :boolean +# failure_reason :string +# ip :inet +# user_agent :string +# created_at :datetime +# + +class LoginActivity < ApplicationRecord + enum authentication_method: { password: 'password', otp: 'otp', webauthn: 'webauthn', sign_in_token: 'sign_in_token', omniauth: 'omniauth' } + + belongs_to :user + + validates :authentication_method, inclusion: { in: authentication_methods.keys } + + def detection + @detection ||= Browser.new(user_agent) + end + + def browser + detection.id + end + + def platform + detection.platform.id + end +end diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index 6b51c90a9..ae74fc83b 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -31,6 +31,8 @@ class MediaAttachment < ApplicationRecord self.inheritance_column = nil + include Attachmentable + enum type: [:image, :gifv, :video, :unknown, :audio] enum processing: [:queued, :in_progress, :complete, :failed], _prefix: true @@ -50,7 +52,7 @@ class MediaAttachment < ApplicationRecord IMAGE_MIME_TYPES = %w(image/jpeg image/png image/gif).freeze VIDEO_MIME_TYPES = %w(video/webm video/mp4 video/quicktime video/ogg).freeze VIDEO_CONVERTIBLE_MIME_TYPES = %w(video/webm video/quicktime).freeze - AUDIO_MIME_TYPES = %w(audio/wave audio/wav audio/x-wav audio/x-pn-wave audio/ogg audio/mpeg audio/mp3 audio/webm audio/flac audio/aac audio/m4a audio/x-m4a audio/mp4 audio/3gpp video/x-ms-asf).freeze + AUDIO_MIME_TYPES = %w(audio/wave audio/wav audio/x-wav audio/x-pn-wave audio/ogg audio/vorbis audio/mpeg audio/mp3 audio/webm audio/flac audio/aac audio/m4a audio/x-m4a audio/mp4 audio/3gpp video/x-ms-asf).freeze BLURHASH_OPTIONS = { x_comp: 4, @@ -165,12 +167,11 @@ class MediaAttachment < ApplicationRecord processors: ->(f) { file_processors f }, convert_options: GLOBAL_CONVERT_OPTIONS - before_file_post_process :set_type_and_extension - before_file_post_process :check_video_dimensions + before_file_validate :set_type_and_extension + before_file_validate :check_video_dimensions validates_attachment_content_type :file, content_type: IMAGE_MIME_TYPES + VIDEO_MIME_TYPES + AUDIO_MIME_TYPES - validates_attachment_size :file, less_than: IMAGE_LIMIT, unless: :larger_media_format? - validates_attachment_size :file, less_than: VIDEO_LIMIT, if: :larger_media_format? + validates_attachment_size :file, less_than: ->(m) { m.larger_media_format? ? VIDEO_LIMIT : IMAGE_LIMIT } remotable_attachment :file, VIDEO_LIMIT, suppress_errors: false, download_on_assign: false, attribute_name: :remote_url has_attached_file :thumbnail, @@ -182,8 +183,6 @@ class MediaAttachment < ApplicationRecord validates_attachment_size :thumbnail, less_than: IMAGE_LIMIT remotable_attachment :thumbnail, IMAGE_LIMIT, suppress_errors: true, download_on_assign: false - include Attachmentable - validates :account, presence: true validates :description, length: { maximum: MAX_DESCRIPTION_LENGTH }, if: :local? validates :file, presence: true, if: :local? @@ -218,7 +217,7 @@ class MediaAttachment < ApplicationRecord end def to_param - shortcode + shortcode.presence || id&.to_s end def focus=(point) @@ -255,7 +254,7 @@ class MediaAttachment < ApplicationRecord after_commit :reset_parent_cache, on: :update before_create :prepare_description, unless: :local? - before_create :set_shortcode + before_create :set_unknown_type before_create :set_processing after_post_process :set_meta @@ -298,15 +297,8 @@ class MediaAttachment < ApplicationRecord private - def set_shortcode + def set_unknown_type self.type = :unknown if file.blank? && !type_changed? - - return unless local? - - loop do - self.shortcode = SecureRandom.urlsafe_base64(14) - break if MediaAttachment.find_by(shortcode: shortcode).nil? - end end def prepare_description diff --git a/app/models/preview_card.rb b/app/models/preview_card.rb index 7cda6c4ab..e43d7d9a8 100644 --- a/app/models/preview_card.rb +++ b/app/models/preview_card.rb @@ -27,6 +27,8 @@ # class PreviewCard < ApplicationRecord + include Attachmentable + IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze LIMIT = 1.megabytes @@ -41,9 +43,7 @@ class PreviewCard < ApplicationRecord has_and_belongs_to_many :statuses - has_attached_file :image, processors: [:thumbnail, :blurhash_transcoder], styles: ->(f) { image_styles(f) }, convert_options: { all: '-quality 80 -strip' } - - include Attachmentable + has_attached_file :image, processors: [:thumbnail, :blurhash_transcoder], styles: ->(f) { image_styles(f) }, convert_options: { all: '-quality 80 -strip' }, validate_media_type: false validates :url, presence: true, uniqueness: true validates_attachment_content_type :image, content_type: IMAGE_MIME_TYPES diff --git a/app/models/report_filter.rb b/app/models/report_filter.rb index c32d4359e..a91a6baeb 100644 --- a/app/models/report_filter.rb +++ b/app/models/report_filter.rb @@ -6,6 +6,7 @@ class ReportFilter account_id target_account_id by_target_domain + target_origin ).freeze attr_reader :params @@ -34,8 +35,21 @@ class ReportFilter Report.where(account_id: value) when :target_account_id Report.where(target_account_id: value) + when :target_origin + target_origin_scope(value) else raise "Unknown filter: #{key}" end end + + def target_origin_scope(value) + case value.to_sym + when :local + Report.where(target_account: Account.local) + when :remote + Report.where(target_account: Account.remote) + else + raise "Unknown value: #{value}" + end + end end diff --git a/app/models/status.rb b/app/models/status.rb index 847921ac2..3acf759f9 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -426,7 +426,7 @@ class Status < ApplicationRecord end def decrement_counter_caches - return if direct_visibility? + return if direct_visibility? || new_record? account&.decrement_count!(:statuses_count) reblog&.decrement_count!(:reblogs_count) if reblog? diff --git a/app/models/status_pin.rb b/app/models/status_pin.rb index afc76bded..93a0ea1c0 100644 --- a/app/models/status_pin.rb +++ b/app/models/status_pin.rb @@ -15,4 +15,12 @@ class StatusPin < ApplicationRecord belongs_to :status validates_with StatusPinValidator + + after_destroy :invalidate_cleanup_info + + def invalidate_cleanup_info + return unless status&.account_id == account_id && account.local? + + account.statuses_cleanup_policy&.invalidate_last_inspected(status, :unpin) + end end diff --git a/app/models/user.rb b/app/models/user.rb index 4973c68b6..4059c96b5 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -42,6 +42,7 @@ # sign_in_token_sent_at :datetime # webauthn_id :string # sign_up_ip :inet +# skip_sign_in_token :boolean # class User < ApplicationRecord @@ -200,7 +201,7 @@ class User < ApplicationRecord end def suspicious_sign_in?(ip) - !otp_required_for_login? && current_sign_in_at.present? && current_sign_in_at < 2.weeks.ago && !recent_ip?(ip) + !otp_required_for_login? && !skip_sign_in_token? && current_sign_in_at.present? && !recent_ip?(ip) end def functional? @@ -329,12 +330,32 @@ class User < ApplicationRecord super end - def reset_password!(new_password, new_password_confirmation) + def reset_password(new_password, new_password_confirmation) return false if encrypted_password.blank? super end + def reset_password! + # First, change password to something random, invalidate the remember-me token, + # and deactivate all sessions + transaction do + update(remember_token: nil, remember_created_at: nil, password: SecureRandom.hex) + session_activations.destroy_all + end + + # Then, remove all authorized applications and connected push subscriptions + Doorkeeper::AccessGrant.by_resource_owner(self).in_batches.update_all(revoked_at: Time.now.utc) + + Doorkeeper::AccessToken.by_resource_owner(self).in_batches do |batch| + batch.update_all(revoked_at: Time.now.utc) + Web::PushSubscription.where(access_token_id: batch).delete_all + end + + # Finally, send a reset password prompt to the user + send_reset_password_instructions + end + def show_all_media? setting_display_media == 'show_all' end diff --git a/app/policies/user_policy.rb b/app/policies/user_policy.rb index d832bff75..6695a0ddf 100644 --- a/app/policies/user_policy.rb +++ b/app/policies/user_policy.rb @@ -13,6 +13,14 @@ class UserPolicy < ApplicationPolicy admin? && !record.staff? end + def disable_sign_in_token_auth? + staff? + end + + def enable_sign_in_token_auth? + staff? + end + def confirm? staff? && !record.confirmed? end diff --git a/app/presenters/instance_presenter.rb b/app/presenters/instance_presenter.rb index 8cd774abe..3e85faa92 100644 --- a/app/presenters/instance_presenter.rb +++ b/app/presenters/instance_presenter.rb @@ -24,8 +24,8 @@ class InstancePresenter Rails.cache.fetch('user_count') { User.confirmed.joins(:account).merge(Account.without_suspended).count } end - def active_user_count(weeks = 4) - Rails.cache.fetch("active_user_count/#{weeks}") { Redis.current.pfcount(*(0...weeks).map { |i| "activity:logins:#{i.weeks.ago.utc.to_date.cweek}" }) } + def active_user_count(num_weeks = 4) + Rails.cache.fetch("active_user_count/#{num_weeks}") { ActivityTracker.new('activity:logins', :unique).sum(num_weeks.weeks.ago) } end def status_count diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index 70263e0c5..b3b913946 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -19,6 +19,7 @@ class InitialStateSerializer < ActiveModel::Serializer source_url: Mastodon::Version.source_url, version: Mastodon::Version.to_s, invites_enabled: Setting.min_invite_role == 'user', + limited_federation_mode: Rails.configuration.x.whitelist_mode, mascot: instance_presenter.mascot&.file&.url, profile_directory: Setting.profile_directory, trends: Setting.trends, diff --git a/app/serializers/manifest_serializer.rb b/app/serializers/manifest_serializer.rb index dafe8f55b..4786aa760 100644 --- a/app/serializers/manifest_serializer.rb +++ b/app/serializers/manifest_serializer.rb @@ -48,7 +48,7 @@ class ManifestSerializer < ActiveModel::Serializer end def scope - root_url + '/' end def share_target diff --git a/app/serializers/rest/admin/cohort_serializer.rb b/app/serializers/rest/admin/cohort_serializer.rb new file mode 100644 index 000000000..56b35c699 --- /dev/null +++ b/app/serializers/rest/admin/cohort_serializer.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class REST::Admin::CohortSerializer < ActiveModel::Serializer + attributes :period, :frequency + + class CohortDataSerializer < ActiveModel::Serializer + attributes :date, :percent, :value + + def date + object.date.iso8601 + end + end + + has_many :data, serializer: CohortDataSerializer + + def period + object.period.iso8601 + end +end diff --git a/app/serializers/rest/admin/dimension_serializer.rb b/app/serializers/rest/admin/dimension_serializer.rb new file mode 100644 index 000000000..a00b6ecd7 --- /dev/null +++ b/app/serializers/rest/admin/dimension_serializer.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +class REST::Admin::DimensionSerializer < ActiveModel::Serializer + attributes :key, :data +end diff --git a/app/serializers/rest/admin/measure_serializer.rb b/app/serializers/rest/admin/measure_serializer.rb new file mode 100644 index 000000000..81d655c1a --- /dev/null +++ b/app/serializers/rest/admin/measure_serializer.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class REST::Admin::MeasureSerializer < ActiveModel::Serializer + attributes :key, :total, :previous_total, :data + + def total + object.total.to_s + end + + def previous_total + object.previous_total.to_s + end +end diff --git a/app/serializers/rest/admin/tag_serializer.rb b/app/serializers/rest/admin/tag_serializer.rb new file mode 100644 index 000000000..425ba4ba3 --- /dev/null +++ b/app/serializers/rest/admin/tag_serializer.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class REST::Admin::TagSerializer < REST::TagSerializer + attributes :id, :trendable, :usable, :requires_review + + def id + object.id.to_s + end + + def requires_review + object.requires_review? + end +end diff --git a/app/serializers/rest/instance_serializer.rb b/app/serializers/rest/instance_serializer.rb index d39092b56..0dc44b623 100644 --- a/app/serializers/rest/instance_serializer.rb +++ b/app/serializers/rest/instance_serializer.rb @@ -5,7 +5,8 @@ class REST::InstanceSerializer < ActiveModel::Serializer attributes :uri, :title, :short_description, :description, :email, :version, :urls, :stats, :thumbnail, - :languages, :registrations, :approval_required, :invites_enabled + :languages, :registrations, :approval_required, :invites_enabled, + :configuration has_one :contact_account, serializer: REST::AccountSerializer @@ -53,6 +54,32 @@ class REST::InstanceSerializer < ActiveModel::Serializer { streaming_api: Rails.configuration.x.streaming_api_base_url } end + def configuration + { + statuses: { + max_characters: StatusLengthValidator::MAX_CHARS, + max_media_attachments: 4, + characters_reserved_per_url: StatusLengthValidator::URL_PLACEHOLDER_CHARS, + }, + + media_attachments: { + supported_mime_types: MediaAttachment::IMAGE_MIME_TYPES + MediaAttachment::VIDEO_MIME_TYPES + MediaAttachment::AUDIO_MIME_TYPES, + image_size_limit: MediaAttachment::IMAGE_LIMIT, + image_matrix_limit: Attachmentable::MAX_MATRIX_LIMIT, + video_size_limit: MediaAttachment::VIDEO_LIMIT, + video_frame_rate_limit: MediaAttachment::MAX_VIDEO_FRAME_RATE, + video_matrix_limit: MediaAttachment::MAX_VIDEO_MATRIX_LIMIT, + }, + + polls: { + max_options: PollValidator::MAX_OPTIONS, + max_characters_per_option: PollValidator::MAX_OPTION_CHARS, + min_expiration: PollValidator::MIN_EXPIRATION, + max_expiration: PollValidator::MAX_EXPIRATION, + }, + } + end + def languages [I18n.default_locale] end diff --git a/app/serializers/rest/media_attachment_serializer.rb b/app/serializers/rest/media_attachment_serializer.rb index a24f95315..f27dda832 100644 --- a/app/serializers/rest/media_attachment_serializer.rb +++ b/app/serializers/rest/media_attachment_serializer.rb @@ -40,7 +40,7 @@ class REST::MediaAttachmentSerializer < ActiveModel::Serializer end def text_url - object.local? ? medium_url(object) : nil + object.local? && object.shortcode.present? ? medium_url(object) : nil end def meta diff --git a/app/services/account_statuses_cleanup_service.rb b/app/services/account_statuses_cleanup_service.rb new file mode 100644 index 000000000..cbadecc63 --- /dev/null +++ b/app/services/account_statuses_cleanup_service.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +class AccountStatusesCleanupService < BaseService + # @param [AccountStatusesCleanupPolicy] account_policy + # @param [Integer] budget + # @return [Integer] + def call(account_policy, budget = 50) + return 0 unless account_policy.enabled? + + cutoff_id = account_policy.compute_cutoff_id + return 0 if cutoff_id.blank? + + num_deleted = 0 + last_deleted = nil + + account_policy.statuses_to_delete(budget, cutoff_id, account_policy.last_inspected).reorder(nil).find_each(order: :asc) do |status| + status.discard + RemovalWorker.perform_async(status.id, redraft: false) + num_deleted += 1 + last_deleted = status.id + end + + account_policy.record_last_inspected(last_deleted.presence || cutoff_id) + + num_deleted + end +end diff --git a/app/services/activitypub/fetch_remote_status_service.rb b/app/services/activitypub/fetch_remote_status_service.rb index cf4f62899..4f789d50b 100644 --- a/app/services/activitypub/fetch_remote_status_service.rb +++ b/app/services/activitypub/fetch_remote_status_service.rb @@ -13,7 +13,20 @@ class ActivityPub::FetchRemoteStatusService < BaseService end end - return if !(supported_context? && expected_type?) || actor_id.nil? || !trustworthy_attribution?(@json['id'], actor_id) + return unless supported_context? + + actor_id = nil + activity_json = nil + + if expected_object_type? + actor_id = value_or_id(first_of_value(@json['attributedTo'])) + activity_json = { 'type' => 'Create', 'actor' => actor_id, 'object' => @json } + elsif expected_activity_type? + actor_id = value_or_id(first_of_value(@json['actor'])) + activity_json = @json + end + + return if activity_json.nil? || !trustworthy_attribution?(@json['id'], actor_id) actor = ActivityPub::TagManager.instance.uri_to_resource(actor_id, Account) actor = ActivityPub::FetchRemoteAccountService.new.call(actor_id, id: true) if actor.nil? || needs_update?(actor) @@ -25,14 +38,6 @@ class ActivityPub::FetchRemoteStatusService < BaseService private - def activity_json - { 'type' => 'Create', 'actor' => actor_id, 'object' => @json } - end - - def actor_id - value_or_id(first_of_value(@json['attributedTo'])) - end - def trustworthy_attribution?(uri, attributed_to) return false if uri.nil? || attributed_to.nil? Addressable::URI.parse(uri).normalized_host.casecmp(Addressable::URI.parse(attributed_to).normalized_host).zero? @@ -42,7 +47,11 @@ class ActivityPub::FetchRemoteStatusService < BaseService super(@json) end - def expected_type? + def expected_activity_type? + equals_or_includes_any?(@json['type'], %w(Create Announce)) + end + + def expected_object_type? equals_or_includes_any?(@json['type'], ActivityPub::Activity::Create::SUPPORTED_TYPES + ActivityPub::Activity::Create::CONVERTED_TYPES) end diff --git a/app/services/backup_service.rb b/app/services/backup_service.rb index 6a1575616..037f519d3 100644 --- a/app/services/backup_service.rb +++ b/app/services/backup_service.rb @@ -167,7 +167,7 @@ class BackupService < BaseService io.write(buffer) end end - rescue Errno::ENOENT, Seahorse::Client::NetworkingError - Rails.logger.warn "Could not backup file #{filename}: file not found" + rescue Errno::ENOENT, Seahorse::Client::NetworkingError => e + Rails.logger.warn "Could not backup file #{filename}: #{e}" end end diff --git a/app/services/delete_account_service.rb b/app/services/delete_account_service.rb index 182f0e127..d8270498a 100644 --- a/app/services/delete_account_service.rb +++ b/app/services/delete_account_service.rb @@ -4,6 +4,7 @@ class DeleteAccountService < BaseService include Payloadable ASSOCIATIONS_ON_SUSPEND = %w( + account_notes account_pins active_relationships aliases @@ -34,6 +35,7 @@ class DeleteAccountService < BaseService # by foreign keys, making them safe to delete without loading # into memory ASSOCIATIONS_WITHOUT_SIDE_EFFECTS = %w( + account_notes account_pins aliases conversation_mutes diff --git a/app/services/fetch_oembed_service.rb b/app/services/fetch_oembed_service.rb index 60be9b9dc..4cbaa04c6 100644 --- a/app/services/fetch_oembed_service.rb +++ b/app/services/fetch_oembed_service.rb @@ -2,6 +2,7 @@ class FetchOEmbedService ENDPOINT_CACHE_EXPIRES_IN = 24.hours.freeze + URL_REGEX = /(=(http[s]?(%3A|:)(\/\/|%2F%2F)))([^&]*)/i.freeze attr_reader :url, :options, :format, :endpoint_url @@ -65,10 +66,12 @@ class FetchOEmbedService end def cache_endpoint! + return unless URL_REGEX.match?(@endpoint_url) + url_domain = Addressable::URI.parse(@url).normalized_host endpoint_hash = { - endpoint: @endpoint_url.gsub(/(=(http[s]?(%3A|:)(\/\/|%2F%2F)))([^&]*)/i, '={url}'), + endpoint: @endpoint_url.gsub(URL_REGEX, '={url}'), format: @format, } diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb index fc187db40..a1b5ca1e3 100644 --- a/app/services/notify_service.rb +++ b/app/services/notify_service.rb @@ -127,7 +127,7 @@ class NotifyService < BaseService def push_notification! return if @notification.activity.nil? - Redis.current.publish("timeline:#{@recipient.id}", Oj.dump(event: :notification, payload: InlineRenderer.render(@notification, @recipient, :notification))) + Redis.current.publish("timeline:#{@recipient.id}:notifications", Oj.dump(event: :notification, payload: InlineRenderer.render(@notification, @recipient, :notification))) send_push_notifications! end diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index 0a383d6a3..85aaec4d6 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -74,6 +74,9 @@ class PostStatusService < BaseService status_for_validation = @account.statuses.build(status_attributes) if status_for_validation.valid? + # Marking the status as destroyed is necessary to prevent the status from being + # persisted when the associated media attachments get updated when creating the + # scheduled status. status_for_validation.destroy # The following transaction block is needed to wrap the UPDATEs to diff --git a/app/services/remove_from_followers_service.rb b/app/services/remove_from_followers_service.rb new file mode 100644 index 000000000..3dac5467f --- /dev/null +++ b/app/services/remove_from_followers_service.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +class RemoveFromFollowersService < BaseService + include Payloadable + + def call(source_account, target_accounts) + source_account.passive_relationships.where(account_id: target_accounts).find_each do |follow| + follow.destroy + + if source_account.local? && !follow.account.local? && follow.account.activitypub? + create_notification(follow) + end + end + end + + private + + def create_notification(follow) + ActivityPub::DeliveryWorker.perform_async(build_json(follow), follow.target_account_id, follow.account.inbox_url) + end + + def build_json(follow) + Oj.dump(serialize_payload(follow, ActivityPub::RejectFollowSerializer)) + end +end diff --git a/app/services/remove_status_service.rb b/app/services/remove_status_service.rb index b680c8e96..f9c3dcf78 100644 --- a/app/services/remove_status_service.rb +++ b/app/services/remove_status_service.rb @@ -102,7 +102,7 @@ class RemoveStatusService < BaseService # because once original status is gone, reblogs will disappear # without us being able to do all the fancy stuff - @status.reblogs.includes(:account).find_each do |reblog| + @status.reblogs.includes(:account).reorder(nil).find_each do |reblog| RemoveStatusService.new.call(reblog, original_removed: true) end end diff --git a/app/services/resolve_account_service.rb b/app/services/resolve_account_service.rb index 5400612bf..b266c019e 100644 --- a/app/services/resolve_account_service.rb +++ b/app/services/resolve_account_service.rb @@ -142,6 +142,7 @@ class ResolveAccountService < BaseService end def queue_deletion! + @account.suspend!(origin: :remote) AccountDeletionWorker.perform_async(@account.id, reserve_username: false, skip_activitypub: true) end diff --git a/app/services/unsuspend_account_service.rb b/app/services/unsuspend_account_service.rb index 949c670aa..39d8a6ba7 100644 --- a/app/services/unsuspend_account_service.rb +++ b/app/services/unsuspend_account_service.rb @@ -1,13 +1,14 @@ # frozen_string_literal: true class UnsuspendAccountService < BaseService + include Payloadable def call(account) @account = account unsuspend! refresh_remote_account! - return if @account.nil? + return if @account.nil? || @account.suspended? merge_into_home_timelines! merge_into_list_timelines! diff --git a/app/validators/reaction_validator.rb b/app/validators/reaction_validator.rb index 494b6041b..4ed3376e8 100644 --- a/app/validators/reaction_validator.rb +++ b/app/validators/reaction_validator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class ReactionValidator < ActiveModel::Validator - SUPPORTED_EMOJIS = Oj.load(File.read(Rails.root.join('app', 'javascript', 'mastodon', 'features', 'emoji', 'emoji_map.json'))).keys.freeze + SUPPORTED_EMOJIS = Oj.load_file(Rails.root.join('app', 'javascript', 'mastodon', 'features', 'emoji', 'emoji_map.json').to_s).keys.freeze LIMIT = 8 diff --git a/app/validators/status_length_validator.rb b/app/validators/status_length_validator.rb index 57d173da0..2c38af03b 100644 --- a/app/validators/status_length_validator.rb +++ b/app/validators/status_length_validator.rb @@ -2,7 +2,8 @@ class StatusLengthValidator < ActiveModel::Validator MAX_CHARS = 7777 - URL_PLACEHOLDER = "\1#{'x' * 23}" + URL_PLACEHOLDER_CHARS = 23 + URL_PLACEHOLDER = "\1#{'x' * URL_PLACEHOLDER_CHARS}" def validate(status) return unless status.local? && !status.reblog? diff --git a/app/views/about/more.html.haml b/app/views/about/more.html.haml index cd93b0f58..f4429622c 100644 --- a/app/views/about/more.html.haml +++ b/app/views/about/more.html.haml @@ -17,11 +17,11 @@ .row__information-board .information-board__section %span= t 'about.user_count_before' - %strong= number_to_human @instance_presenter.user_count, strip_insignificant_zeros: true + %strong= friendly_number_to_human @instance_presenter.user_count %span= t 'about.user_count_after', count: @instance_presenter.user_count .information-board__section %span= t 'about.status_count_before' - %strong= number_to_human @instance_presenter.status_count, strip_insignificant_zeros: true + %strong= friendly_number_to_human @instance_presenter.status_count %span= t 'about.status_count_after', count: @instance_presenter.status_count .row__mascot .landing-page__mascot diff --git a/app/views/about/show.html.haml b/app/views/about/show.html.haml index 565c4ed59..6ae9e6ae0 100644 --- a/app/views/about/show.html.haml +++ b/app/views/about/show.html.haml @@ -70,10 +70,10 @@ .hero-widget__counters__wrapper .hero-widget__counter - %strong= number_to_human @instance_presenter.user_count, strip_insignificant_zeros: true + %strong= friendly_number_to_human @instance_presenter.user_count %span= t 'about.user_count_after', count: @instance_presenter.user_count .hero-widget__counter - %strong= number_to_human @instance_presenter.active_user_count, strip_insignificant_zeros: true + %strong= friendly_number_to_human @instance_presenter.active_user_count %span = t 'about.active_count_after' %abbr{ title: t('about.active_footnote') } * diff --git a/app/views/accounts/_header.html.haml b/app/views/accounts/_header.html.haml index cae5a5ac9..d9966723a 100644 --- a/app/views/accounts/_header.html.haml +++ b/app/views/accounts/_header.html.haml @@ -15,17 +15,17 @@ .details-counters .counter{ class: active_nav_class(short_account_url(account), short_account_with_replies_url(account), short_account_media_url(account)) } = link_to short_account_url(account), class: 'u-url u-uid', title: number_with_delimiter(account.statuses_count) do - %span.counter-number= number_to_human account.statuses_count, strip_insignificant_zeros: true + %span.counter-number= friendly_number_to_human account.statuses_count %span.counter-label= t('accounts.posts', count: account.statuses_count) .counter{ class: active_nav_class(account_following_index_url(account)) } = link_to account_following_index_url(account), title: number_with_delimiter(account.following_count) do - %span.counter-number= number_to_human account.following_count, strip_insignificant_zeros: true + %span.counter-number= friendly_number_to_human account.following_count %span.counter-label= t('accounts.following', count: account.following_count) .counter{ class: active_nav_class(account_followers_url(account)) } = link_to account_followers_url(account), title: number_with_delimiter(account.followers_count) do - %span.counter-number= number_to_human account.followers_count, strip_insignificant_zeros: true + %span.counter-number= friendly_number_to_human account.followers_count %span.counter-label= t('accounts.followers', count: account.followers_count) .spacer .public-account-header__tabs__tabs__buttons @@ -36,8 +36,8 @@ .public-account-header__extra__links = link_to account_following_index_url(account) do - %strong= number_to_human account.following_count, strip_insignificant_zeros: true + %strong= friendly_number_to_human account.following_count = t('accounts.following', count: account.following_count) = link_to account_followers_url(account) do - %strong= number_to_human account.followers_count, strip_insignificant_zeros: true + %strong= friendly_number_to_human account.followers_count = t('accounts.followers', count: account.followers_count) diff --git a/app/views/accounts/show.html.haml b/app/views/accounts/show.html.haml index 1a81b96f6..72e9c6611 100644 --- a/app/views/accounts/show.html.haml +++ b/app/views/accounts/show.html.haml @@ -81,6 +81,6 @@ = t('accounts.nothing_here') - else %time.formatted{ datetime: featured_tag.last_status_at.iso8601, title: l(featured_tag.last_status_at) }= l featured_tag.last_status_at - .trends__item__current= number_to_human featured_tag.statuses_count, strip_insignificant_zeros: true + .trends__item__current= friendly_number_to_human featured_tag.statuses_count = render 'application/sidebar' diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml index 27e1f80a7..66eb49342 100644 --- a/app/views/admin/accounts/show.html.haml +++ b/app/views/admin/accounts/show.html.haml @@ -129,6 +129,27 @@ - else = t('admin.accounts.confirming') %td= table_link_to 'refresh', t('admin.accounts.resend_confirmation.send'), resend_admin_account_confirmation_path(@account.id), method: :post if can?(:confirm, @account.user) + %tr + %th{ rowspan: can?(:reset_password, @account.user) ? 2 : 1 }= t('admin.accounts.security') + %td{ rowspan: can?(:reset_password, @account.user) ? 2 : 1 } + - if @account.user&.two_factor_enabled? + = t 'admin.accounts.security_measures.password_and_2fa' + - elsif @account.user&.skip_sign_in_token? + = t 'admin.accounts.security_measures.only_password' + - else + = t 'admin.accounts.security_measures.password_and_sign_in_token' + %td + - if @account.user&.two_factor_enabled? + = table_link_to 'unlock', t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(@account.user.id), method: :delete if can?(:disable_2fa, @account.user) + - elsif @account.user&.skip_sign_in_token? + = table_link_to 'lock', t('admin.accounts.enable_sign_in_token_auth'), admin_user_sign_in_token_authentication_path(@account.user.id), method: :post if can?(:enable_sign_in_token_auth, @account.user) + - else + = table_link_to 'unlock', t('admin.accounts.disable_sign_in_token_auth'), admin_user_sign_in_token_authentication_path(@account.user.id), method: :delete if can?(:disable_sign_in_token_auth, @account.user) + + - if can?(:reset_password, @account.user) + %tr + %td + = table_link_to 'key', t('admin.accounts.reset_password'), admin_account_reset_path(@account.id), method: :create, data: { confirm: t('admin.accounts.are_you_sure') } %tr %th= t('simple_form.labels.defaults.locale') @@ -221,9 +242,6 @@ %div - if @account.local? - = link_to t('admin.accounts.reset_password'), admin_account_reset_path(@account.id), method: :create, class: 'button' if can?(:reset_password, @account.user) - - if @account.user&.otp_required_for_login? - = link_to t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(@account.user.id), method: :delete, class: 'button' if can?(:disable_2fa, @account.user) - if !@account.memorial? && @account.user_approved? = link_to t('admin.accounts.memorialize'), memorialize_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:memorialize, @account) - else diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml index e8a2b46fd..560eba7b4 100644 --- a/app/views/admin/dashboard/index.html.haml +++ b/app/views/admin/dashboard/index.html.haml @@ -1,6 +1,14 @@ +- content_for :header_tags do + = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' + - content_for :page_title do = t('admin.dashboard.title') +- content_for :heading_actions do + = l(@time_period.first) + = ' - ' + = l(@time_period.last) + - unless @system_checks.empty? .flash-message-stack - @system_checks.each do |message| @@ -9,131 +17,52 @@ - if message.action = link_to t("admin.system_checks.#{message.key}.action"), message.action -.dashboard__counters - %div - = link_to admin_accounts_url(local: 1, recent: 1) do - .dashboard__counters__num{ title: number_with_delimiter(@users_count, strip_insignificant_zeros: true) } - = number_to_human @users_count, strip_insignificant_zeros: true - .dashboard__counters__label= t 'admin.dashboard.total_users' - %div - %div - .dashboard__counters__num{ title: number_with_delimiter(@registrations_week, strip_insignificant_zeros: true) } - = number_to_human @registrations_week, strip_insignificant_zeros: true - .dashboard__counters__label= t 'admin.dashboard.week_users_new' - %div - %div - .dashboard__counters__num{ title: number_with_delimiter(@logins_week, strip_insignificant_zeros: true) } - = number_to_human @logins_week, strip_insignificant_zeros: true - .dashboard__counters__label= t 'admin.dashboard.week_users_active' - %div - = link_to admin_pending_accounts_path do - .dashboard__counters__num{ title: number_with_delimiter(@pending_users_count, strip_insignificant_zeros: true) } - = number_to_human @pending_users_count, strip_insignificant_zeros: true - .dashboard__counters__label= t 'admin.dashboard.pending_users' - %div - = link_to admin_reports_url do - .dashboard__counters__num{ title: number_with_delimiter(@reports_count, strip_insignificant_zeros: true) } - = number_to_human @reports_count, strip_insignificant_zeros: true - .dashboard__counters__label= t 'admin.dashboard.open_reports' - %div - = link_to admin_tags_path(pending_review: '1') do - .dashboard__counters__num{ title: number_with_delimiter(@pending_tags_count, strip_insignificant_zeros: true) } - = number_to_human @pending_tags_count, strip_insignificant_zeros: true - .dashboard__counters__label= t 'admin.dashboard.pending_tags' - %div - %div - .dashboard__counters__num{ title: number_with_delimiter(@interactions_week, strip_insignificant_zeros: true) } - = number_to_human @interactions_week, strip_insignificant_zeros: true - .dashboard__counters__label= t 'admin.dashboard.week_interactions' - %div - = link_to sidekiq_url do - .dashboard__counters__num{ title: number_with_delimiter(@queue_backlog, strip_insignificant_zeros: true) } - = number_to_human @queue_backlog, strip_insignificant_zeros: true - .dashboard__counters__label= t 'admin.dashboard.backlog' +.dashboard + .dashboard__item + = react_admin_component :counter, measure: 'new_users', start_at: @time_period.first, end_at: @time_period.last, label: t('admin.dashboard.new_users'), href: admin_accounts_path -.dashboard__widgets - .dashboard__widgets__users - %div - %h4= t 'admin.dashboard.recent_users' - %ul - - @recent_users.each do |user| - %li= admin_account_link_to(user.account) + .dashboard__item + = react_admin_component :counter, measure: 'active_users', start_at: @time_period.first, end_at: @time_period.last, label: t('admin.dashboard.active_users'), href: admin_accounts_path - .dashboard__widgets__features - %div - %h4= t 'admin.dashboard.features' - %ul - %li - = feature_hint(link_to(t('admin.dashboard.feature_registrations'), edit_admin_settings_path), @registrations_enabled) - %li - = feature_hint(link_to(t('admin.dashboard.feature_invites'), edit_admin_settings_path), @invites_enabled) - %li - = feature_hint(link_to(t('admin.dashboard.feature_deletions'), edit_admin_settings_path), @deletions_enabled) - %li - = feature_hint(link_to(t('admin.dashboard.feature_profile_directory'), edit_admin_settings_path), @profile_directory) - %li - = feature_hint(link_to(t('admin.dashboard.feature_timeline_preview'), edit_admin_settings_path), @timeline_preview) - %li - = feature_hint(link_to(t('admin.dashboard.trends'), edit_admin_settings_path), @trends_enabled) - %li - = feature_hint(link_to(t('admin.dashboard.feature_relay'), admin_relays_path), @relay_enabled) + .dashboard__item + = react_admin_component :counter, measure: 'interactions', start_at: @time_period.first, end_at: @time_period.last, label: t('admin.dashboard.interactions') - .dashboard__widgets__versions - %div - %h4= t 'admin.dashboard.software' - %ul - %li - Mastodon - %span.pull-right= @version - %li - Ruby - %span.pull-right= "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}" - %li - PostgreSQL - %span.pull-right= @database_version - %li - Redis - %span.pull-right= @redis_version + .dashboard__item + = react_admin_component :counter, measure: 'opened_reports', start_at: @time_period.first, end_at: @time_period.last, label: t('admin.dashboard.opened_reports'), href: admin_reports_path - .dashboard__widgets__space - %div - %h4= t 'admin.dashboard.space' - %ul - %li - PostgreSQL - %span.pull-right= number_to_human_size @database_size - %li - Redis - %span.pull-right= number_to_human_size @redis_size + .dashboard__item + = react_admin_component :counter, measure: 'resolved_reports', start_at: @time_period.first, end_at: @time_period.last, label: t('admin.dashboard.resolved_reports'), href: admin_reports_path(resolved: '1') - .dashboard__widgets__config - %div - %h4= t 'admin.dashboard.config' - %ul - %li - = feature_hint(t('admin.dashboard.search'), @search_enabled) - %li - = feature_hint(t('admin.dashboard.single_user_mode'), @single_user_mode) - %li - = feature_hint(t('admin.dashboard.authorized_fetch_mode'), @authorized_fetch) - %li - = feature_hint(t('admin.dashboard.whitelist_mode'), @whitelist_enabled) - %li - = feature_hint('LDAP', @ldap_enabled) - %li - = feature_hint('CAS', @cas_enabled) - %li - = feature_hint('SAML', @saml_enabled) - %li - = feature_hint('PAM', @pam_enabled) - %li - = feature_hint(t('admin.dashboard.hidden_service'), @hidden_service) + .dashboard__item + = link_to admin_reports_path, class: 'dashboard__quick-access' do + %span= t('admin.dashboard.pending_reports_html', count: @pending_reports_count) + = fa_icon 'chevron-right fw' - .dashboard__widgets__trends - %div - %h4= t 'admin.dashboard.trends' - %ul - - @trending_hashtags.each do |tag| - %li - = link_to content_tag(:span, "##{tag.name}", class: !tag.trendable? && !tag.reviewed? ? 'warning-hint' : (!tag.trendable? ? 'negative-hint' : nil)), admin_tag_path(tag.id) - %span.pull-right= number_with_delimiter(tag.history[0][:accounts].to_i) + = link_to admin_pending_accounts_path, class: 'dashboard__quick-access' do + %span= t('admin.dashboard.pending_users_html', count: @pending_users_count) + = fa_icon 'chevron-right fw' + + = link_to admin_tags_path(pending_review: '1'), class: 'dashboard__quick-access' do + %span= t('admin.dashboard.pending_tags_html', count: @pending_tags_count) + = fa_icon 'chevron-right fw' + + .dashboard__item + = react_admin_component :dimension, dimension: 'sources', start_at: @time_period.first, end_at: @time_period.last, limit: 8, label: t('admin.dashboard.sources') + + .dashboard__item + = react_admin_component :dimension, dimension: 'languages', start_at: @time_period.first, end_at: @time_period.last, limit: 8, label: t('admin.dashboard.top_languages') + + .dashboard__item + = react_admin_component :dimension, dimension: 'servers', start_at: @time_period.first, end_at: @time_period.last, limit: 8, label: t('admin.dashboard.top_servers') + + .dashboard__item.dashboard__item--span-double-column + = react_admin_component :retention, start_at: @time_period.last - 6.months, end_at: @time_period.last, frequency: 'month' + + .dashboard__item.dashboard__item--span-double-row + = react_admin_component :trends, limit: 7 + + .dashboard__item + = react_admin_component :dimension, dimension: 'software_versions', start_at: @time_period.first, end_at: @time_period.last, limit: 4, label: t('admin.dashboard.software') + + .dashboard__item + = react_admin_component :dimension, dimension: 'space_usage', start_at: @time_period.first, end_at: @time_period.last, limit: 3, label: t('admin.dashboard.space') diff --git a/app/views/admin/follow_recommendations/_account.html.haml b/app/views/admin/follow_recommendations/_account.html.haml index af5a4aaf7..00196dd01 100644 --- a/app/views/admin/follow_recommendations/_account.html.haml +++ b/app/views/admin/follow_recommendations/_account.html.haml @@ -7,10 +7,10 @@ %tr %td= account_link_to account %td.accounts-table__count.optional - = number_to_human account.statuses_count, strip_insignificant_zeros: true + = friendly_number_to_human account.statuses_count %small= t('accounts.posts', count: account.statuses_count).downcase %td.accounts-table__count.optional - = number_to_human account.followers_count, strip_insignificant_zeros: true + = friendly_number_to_human account.followers_count %small= t('accounts.followers', count: account.followers_count).downcase %td.accounts-table__count - if account.last_status_at.present? diff --git a/app/views/admin/instances/_instance.html.haml b/app/views/admin/instances/_instance.html.haml index 990cf9ec8..dc81007ac 100644 --- a/app/views/admin/instances/_instance.html.haml +++ b/app/views/admin/instances/_instance.html.haml @@ -30,4 +30,4 @@ = ' / ' %span.negative-hint = t('admin.instances.delivery.unavailable_message') - .trends__item__current{ title: t('admin.instances.known_accounts', count: instance.accounts_count) }= number_to_human instance.accounts_count, strip_insignificant_zeros: true + .trends__item__current{ title: t('admin.instances.known_accounts', count: instance.accounts_count) }= friendly_number_to_human instance.accounts_count diff --git a/app/views/admin/reports/index.html.haml b/app/views/admin/reports/index.html.haml index 721c55f71..619173373 100644 --- a/app/views/admin/reports/index.html.haml +++ b/app/views/admin/reports/index.html.haml @@ -7,6 +7,12 @@ %ul %li= filter_link_to t('admin.reports.unresolved'), resolved: nil %li= filter_link_to t('admin.reports.resolved'), resolved: '1' + .filter-subset + %strong= t('admin.reports.target_origin') + %ul + %li= filter_link_to t('admin.accounts.location.all'), target_origin: nil + %li= filter_link_to t('admin.accounts.location.local'), target_origin: 'local' + %li= filter_link_to t('admin.accounts.location.remote'), target_origin: 'remote' = form_tag admin_reports_url, method: 'GET', class: 'simple_form' do .fields-group diff --git a/app/views/admin/tags/_tag.html.haml b/app/views/admin/tags/_tag.html.haml index adf4ca7b2..ac0c72816 100644 --- a/app/views/admin/tags/_tag.html.haml +++ b/app/views/admin/tags/_tag.html.haml @@ -16,4 +16,4 @@ = fa_icon 'fire fw' = t('admin.tags.trending_right_now') - .trends__item__current= number_to_human tag.history.first[:uses], strip_insignificant_zeros: true + .trends__item__current= friendly_number_to_human tag.history.first[:uses] diff --git a/app/views/auth/registrations/_sessions.html.haml b/app/views/auth/registrations/_sessions.html.haml index d3a04c00e..5d993f574 100644 --- a/app/views/auth/registrations/_sessions.html.haml +++ b/app/views/auth/registrations/_sessions.html.haml @@ -1,5 +1,7 @@ %h3= t 'sessions.title' -%p.muted-hint= t 'sessions.explanation' +%p.muted-hint + = t 'sessions.explanation' + = link_to t('sessions.view_authentication_history'), settings_login_activities_path %hr.spacer/ @@ -29,3 +31,4 @@ %td - if current_session.session_id != session.session_id && !current_account.suspended? = table_link_to 'times', t('sessions.revoke'), settings_session_path(session), method: :delete + diff --git a/app/views/directories/index.html.haml b/app/views/directories/index.html.haml index 7975ee999..04639e32c 100644 --- a/app/views/directories/index.html.haml +++ b/app/views/directories/index.html.haml @@ -39,10 +39,10 @@ .directory__card__extra .accounts-table__count - = number_to_human account.statuses_count, strip_insignificant_zeros: true + = friendly_number_to_human account.statuses_count %small= t('accounts.posts', count: account.statuses_count).downcase .accounts-table__count - = number_to_human account.followers_count, strip_insignificant_zeros: true + = friendly_number_to_human account.followers_count %small= t('accounts.followers', count: account.followers_count).downcase .accounts-table__count - if account.last_status_at.present? diff --git a/app/views/layouts/public.html.haml b/app/views/layouts/public.html.haml index e63cf0848..bdb8a3a8e 100644 --- a/app/views/layouts/public.html.haml +++ b/app/views/layouts/public.html.haml @@ -46,7 +46,8 @@ .column-3 %h4= site_hostname %ul - %li= link_to t('about.about_this'), about_more_path + - unless whitelist_mode? + %li= link_to t('about.about_this'), about_more_path %li= "v#{Mastodon::Version.to_s}" .column-4 %h4= t 'footer.more' diff --git a/app/views/notification_mailer/_status.html.haml b/app/views/notification_mailer/_status.html.haml index 9b7e1b65c..31460a76e 100644 --- a/app/views/notification_mailer/_status.html.haml +++ b/app/views/notification_mailer/_status.html.haml @@ -37,7 +37,7 @@ %p - status.media_attachments.each do |a| - if status.local? - = link_to medium_url(a), medium_url(a) + = 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 diff --git a/app/views/relationships/_account.html.haml b/app/views/relationships/_account.html.haml index f521aff22..0fa3cffb5 100644 --- a/app/views/relationships/_account.html.haml +++ b/app/views/relationships/_account.html.haml @@ -9,10 +9,10 @@ = interrelationships_icon(@relationships, account.id) %td= account_link_to account %td.accounts-table__count.optional - = number_to_human account.statuses_count, strip_insignificant_zeros: true + = friendly_number_to_human account.statuses_count %small= t('accounts.posts', count: account.statuses_count).downcase %td.accounts-table__count.optional - = number_to_human account.followers_count, strip_insignificant_zeros: true + = friendly_number_to_human account.followers_count %small= t('accounts.followers', count: account.followers_count).downcase %td.accounts-table__count - if account.last_status_at.present? diff --git a/app/views/settings/featured_tags/index.html.haml b/app/views/settings/featured_tags/index.html.haml index 297379893..65de7f8f3 100644 --- a/app/views/settings/featured_tags/index.html.haml +++ b/app/views/settings/featured_tags/index.html.haml @@ -28,4 +28,4 @@ - else %time{ datetime: featured_tag.last_status_at.iso8601, title: l(featured_tag.last_status_at) }= l featured_tag.last_status_at = table_link_to 'trash', t('filters.index.delete'), settings_featured_tag_path(featured_tag), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } - .trends__item__current= number_to_human featured_tag.statuses_count, strip_insignificant_zeros: true + .trends__item__current= friendly_number_to_human featured_tag.statuses_count diff --git a/app/views/settings/login_activities/_login_activity.html.haml b/app/views/settings/login_activities/_login_activity.html.haml new file mode 100644 index 000000000..0c2c7087d --- /dev/null +++ b/app/views/settings/login_activities/_login_activity.html.haml @@ -0,0 +1,17 @@ +- method_str = content_tag(:span, login_activity.omniauth? ? t(login_activity.provider, scope: 'auth.providers') : t(login_activity.authentication_method, scope: 'login_activities.authentication_methods'), class: 'target') +- ip_str = content_tag(:span, login_activity.ip, class: 'target') +- browser_str = content_tag(:span, t('sessions.description', browser: t("sessions.browsers.#{login_activity.browser}", default: "#{login_activity.browser}"), platform: t("sessions.platforms.#{login_activity.platform}", default: "#{login_activity.platform}")), class: 'target', title: login_activity.user_agent) + +.log-entry + .log-entry__header + .log-entry__avatar + .indicator-icon{ class: login_activity.success? ? 'success' : 'failure' } + = fa_icon login_activity.success? ? 'check' : 'times' + .log-entry__content + .log-entry__title + - if login_activity.success? + = t('login_activities.successful_sign_in_html', method: method_str, ip: ip_str, browser: browser_str) + - else + = t('login_activities.failed_sign_in_html', method: method_str, ip: ip_str, browser: browser_str) + .log-entry__timestamp + %time.formatted{ datetime: login_activity.created_at.iso8601 }= l(login_activity.created_at) diff --git a/app/views/settings/login_activities/index.html.haml b/app/views/settings/login_activities/index.html.haml new file mode 100644 index 000000000..ce524fbef --- /dev/null +++ b/app/views/settings/login_activities/index.html.haml @@ -0,0 +1,15 @@ +- content_for :page_title do + = t 'login_activities.title' + +%p= t('login_activities.description_html') + +%hr.spacer/ + +- if @login_activities.empty? + %div.muted-hint.center-text + = t 'login_activities.empty' +- else + .announcements-list + = render partial: 'login_activity', collection: @login_activities + += paginate @login_activities diff --git a/app/views/settings/profiles/show.html.haml b/app/views/settings/profiles/show.html.haml index ef9262f6d..2f0e2c5b6 100644 --- a/app/views/settings/profiles/show.html.haml +++ b/app/views/settings/profiles/show.html.haml @@ -29,9 +29,8 @@ .fields-group = f.input :bot, as: :boolean, wrapper: :with_label, hint: t('simple_form.hints.defaults.bot') - - if Setting.profile_directory - .fields-group - = f.input :discoverable, as: :boolean, wrapper: :with_label, hint: t('simple_form.hints.defaults.discoverable'), recommended: true + .fields-group + = f.input :discoverable, as: :boolean, wrapper: :with_label, hint: t(Setting.profile_directory ? 'simple_form.hints.defaults.discoverable' : 'simple_form.hints.defaults.discoverable_no_directory'), recommended: true %hr.spacer/ diff --git a/app/views/statuses/_detailed_status.html.haml b/app/views/statuses/_detailed_status.html.haml index daf164949..6b3b81306 100644 --- a/app/views/statuses/_detailed_status.html.haml +++ b/app/views/statuses/_detailed_status.html.haml @@ -55,18 +55,18 @@ = fa_icon('reply') - else = fa_icon('reply-all') - %span.detailed-status__reblogs>= number_to_human status.replies_count, strip_insignificant_zeros: true + %span.detailed-status__reblogs>= friendly_number_to_human status.replies_count = " " · - if status.public_visibility? || status.unlisted_visibility? = link_to remote_interaction_path(status, type: :reblog), class: 'modal-button detailed-status__link' do = fa_icon('retweet') - %span.detailed-status__reblogs>= number_to_human status.reblogs_count, strip_insignificant_zeros: true + %span.detailed-status__reblogs>= friendly_number_to_human status.reblogs_count = " " · = link_to remote_interaction_path(status, type: :favourite), class: 'modal-button detailed-status__link' do = fa_icon('star') - %span.detailed-status__favorites>= number_to_human status.favourites_count, strip_insignificant_zeros: true + %span.detailed-status__favorites>= friendly_number_to_human status.favourites_count = " " - if user_signed_in? diff --git a/app/views/statuses_cleanup/show.html.haml b/app/views/statuses_cleanup/show.html.haml new file mode 100644 index 000000000..59de4b5aa --- /dev/null +++ b/app/views/statuses_cleanup/show.html.haml @@ -0,0 +1,45 @@ +- content_for :page_title do + = t('settings.statuses_cleanup') + +- content_for :heading_actions do + = button_tag t('generic.save_changes'), class: 'button', form: 'edit_policy' + += simple_form_for @policy, url: statuses_cleanup_path, method: :put, html: { id: 'edit_policy' } do |f| + + .fields-row + .fields-row__column.fields-row__column-6.fields-group + = f.input :enabled, as: :boolean, wrapper: :with_label, label: t('statuses_cleanup.enabled'), hint: t('statuses_cleanup.enabled_hint') + .fields-row__column.fields-row__column-6.fields-group + = f.input :min_status_age, wrapper: :with_label, label: t('statuses_cleanup.min_age_label'), collection: AccountStatusesCleanupPolicy::ALLOWED_MIN_STATUS_AGE.map(&:to_i), label_method: lambda { |i| t("statuses_cleanup.min_age.#{i}") }, include_blank: false, hint: false + + .flash-message= t('statuses_cleanup.explanation') + + %h4= t('statuses_cleanup.exceptions') + + .fields-row + .fields-row__column.fields-row__column-6.fields-group + = f.input :keep_pinned, wrapper: :with_label, label: t('statuses_cleanup.keep_pinned'), hint: t('statuses_cleanup.keep_pinned_hint') + .fields-row__column.fields-row__column-6.fields-group + = f.input :keep_direct, wrapper: :with_label, label: t('statuses_cleanup.keep_direct'), hint: t('statuses_cleanup.keep_direct_hint') + + .fields-row + .fields-row__column.fields-row__column-6.fields-group + = f.input :keep_self_fav, wrapper: :with_label, label: t('statuses_cleanup.keep_self_fav'), hint: t('statuses_cleanup.keep_self_fav_hint') + .fields-row__column.fields-row__column-6.fields-group + = f.input :keep_self_bookmark, wrapper: :with_label, label: t('statuses_cleanup.keep_self_bookmark'), hint: t('statuses_cleanup.keep_self_bookmark_hint') + + .fields-row + .fields-row__column.fields-row__column-6.fields-group + = f.input :keep_polls, wrapper: :with_label, label: t('statuses_cleanup.keep_polls'), hint: t('statuses_cleanup.keep_polls_hint') + .fields-row__column.fields-row__column-6.fields-group + = f.input :keep_media, wrapper: :with_label, label: t('statuses_cleanup.keep_media'), hint: t('statuses_cleanup.keep_media_hint') + + %h4= t('statuses_cleanup.interaction_exceptions') + + .fields-row + .fields-row__column.fields-row__column-6.fields-group + = f.input :min_favs, wrapper: :with_label, label: t('statuses_cleanup.min_favs'), hint: t('statuses_cleanup.min_favs_hint'), input_html: { min: 1, placeholder: t('statuses_cleanup.ignore_favs') } + .fields-row__column.fields-row__column-6.fields-group + = f.input :min_reblogs, wrapper: :with_label, label: t('statuses_cleanup.min_reblogs'), hint: t('statuses_cleanup.min_reblogs_hint'), input_html: { min: 1, placeholder: t('statuses_cleanup.ignore_reblogs') } + + .flash-message= t('statuses_cleanup.interaction_exceptions_explanation') diff --git a/app/workers/activitypub/delivery_worker.rb b/app/workers/activitypub/delivery_worker.rb index 6c5a576a7..788f2cf80 100644 --- a/app/workers/activitypub/delivery_worker.rb +++ b/app/workers/activitypub/delivery_worker.rb @@ -44,11 +44,7 @@ class ActivityPub::DeliveryWorker end def synchronization_header - "collectionId=\"#{account_followers_url(@source_account)}\", digest=\"#{@source_account.remote_followers_hash(inbox_url_prefix)}\", url=\"#{account_followers_synchronization_url(@source_account)}\"" - end - - def inbox_url_prefix - @inbox_url[/http(s?):\/\/[^\/]+\//] + "collectionId=\"#{account_followers_url(@source_account)}\", digest=\"#{@source_account.remote_followers_hash(@inbox_url)}\", url=\"#{account_followers_synchronization_url(@source_account)}\"" end def perform_request diff --git a/app/workers/move_worker.rb b/app/workers/move_worker.rb index 39e321316..cc2c17d32 100644 --- a/app/workers/move_worker.rb +++ b/app/workers/move_worker.rb @@ -13,9 +13,13 @@ class MoveWorker queue_follow_unfollows! end + @deferred_error = nil + copy_account_notes! carry_blocks_over! carry_mutes_over! + + raise @deferred_error unless @deferred_error.nil? rescue ActiveRecord::RecordNotFound true end @@ -36,21 +40,25 @@ class MoveWorker @source_account.followers.local.select(:id).find_in_batches do |accounts| UnfollowFollowWorker.push_bulk(accounts.map(&:id)) { |follower_id| [follower_id, @source_account.id, @target_account.id, bypass_locked] } + rescue => e + @deferred_error = e end end def copy_account_notes! AccountNote.where(target_account: @source_account).find_each do |note| - text = I18n.with_locale(note.account.user.locale || I18n.default_locale) do + text = I18n.with_locale(note.account.user&.locale || I18n.default_locale) do I18n.t('move_handler.copy_account_note_text', acct: @source_account.acct) end new_note = AccountNote.find_by(account: note.account, target_account: @target_account) if new_note.nil? - AccountNote.create!(account: note.account, target_account: @target_account, comment: [text, note.comment].join('\n')) + AccountNote.create!(account: note.account, target_account: @target_account, comment: [text, note.comment].join("\n")) else - new_note.update!(comment: [text, note.comment, '\n', new_note.comment].join('\n')) + new_note.update!(comment: [text, note.comment, "\n", new_note.comment].join("\n")) end + rescue => e + @deferred_error = e end end @@ -60,6 +68,8 @@ class MoveWorker BlockService.new.call(block.account, @target_account) add_account_note_if_needed!(block.account, 'move_handler.carry_blocks_over_text') end + rescue => e + @deferred_error = e end end @@ -67,12 +77,14 @@ class MoveWorker @source_account.muted_by_relationships.where(account: Account.local).find_each do |mute| MuteService.new.call(mute.account, @target_account, notifications: mute.hide_notifications) unless mute.account.muting?(@target_account) || mute.account.following?(@target_account) add_account_note_if_needed!(mute.account, 'move_handler.carry_mutes_over_text') + rescue => e + @deferred_error = e end end def add_account_note_if_needed!(account, id) unless AccountNote.where(account: account, target_account: @target_account).exists? - text = I18n.with_locale(account.user.locale || I18n.default_locale) do + text = I18n.with_locale(account.user&.locale || I18n.default_locale) do I18n.t(id, acct: @source_account.acct) end AccountNote.create!(account: account, target_account: @target_account, comment: text) diff --git a/app/workers/scheduler/accounts_statuses_cleanup_scheduler.rb b/app/workers/scheduler/accounts_statuses_cleanup_scheduler.rb new file mode 100644 index 000000000..f42d4bca6 --- /dev/null +++ b/app/workers/scheduler/accounts_statuses_cleanup_scheduler.rb @@ -0,0 +1,96 @@ +# frozen_string_literal: true + +class Scheduler::AccountsStatusesCleanupScheduler + include Sidekiq::Worker + + # This limit is mostly to be nice to the fediverse at large and not + # generate too much traffic. + # This also helps limiting the running time of the scheduler itself. + MAX_BUDGET = 50 + + # This is an attempt to spread the load across instances, as various + # accounts are likely to have various followers. + PER_ACCOUNT_BUDGET = 5 + + # This is an attempt to limit the workload generated by status removal + # jobs to something the particular instance can handle. + PER_THREAD_BUDGET = 5 + + # Those avoid loading an instance that is already under load + MAX_DEFAULT_SIZE = 2 + MAX_DEFAULT_LATENCY = 5 + MAX_PUSH_SIZE = 5 + MAX_PUSH_LATENCY = 10 + # 'pull' queue has lower priority jobs, and it's unlikely that pushing + # deletes would cause much issues with this queue if it didn't cause issues + # with default and push. Yet, do not enqueue deletes if the instance is + # lagging behind too much. + MAX_PULL_SIZE = 500 + MAX_PULL_LATENCY = 300 + + # This is less of an issue in general, but deleting old statuses is likely + # to cause delivery errors, and thus increase the number of jobs to be retried. + # This doesn't directly translate to load, but connection errors and a high + # number of dead instances may lead to this spiraling out of control if + # unchecked. + MAX_RETRY_SIZE = 50_000 + + sidekiq_options retry: 0, lock: :until_executed + + def perform + return if under_load? + + budget = compute_budget + first_policy_id = last_processed_id + + loop do + num_processed_accounts = 0 + + scope = AccountStatusesCleanupPolicy.where(enabled: true) + scope.where(Account.arel_table[:id].gt(first_policy_id)) if first_policy_id.present? + scope.find_each(order: :asc) do |policy| + num_deleted = AccountStatusesCleanupService.new.call(policy, [budget, PER_ACCOUNT_BUDGET].min) + num_processed_accounts += 1 unless num_deleted.zero? + budget -= num_deleted + if budget.zero? + save_last_processed_id(policy.id) + break + end + end + + # The idea here is to loop through all policies at least once until the budget is exhausted + # and start back after the last processed account otherwise + break if budget.zero? || (num_processed_accounts.zero? && first_policy_id.nil?) + first_policy_id = nil + end + end + + def compute_budget + threads = Sidekiq::ProcessSet.new.filter { |x| x['queues'].include?('push') }.map { |x| x['concurrency'] }.sum + [PER_THREAD_BUDGET * threads, MAX_BUDGET].min + end + + def under_load? + return true if Sidekiq::Stats.new.retry_size > MAX_RETRY_SIZE + queue_under_load?('default', MAX_DEFAULT_SIZE, MAX_DEFAULT_LATENCY) || queue_under_load?('push', MAX_PUSH_SIZE, MAX_PUSH_LATENCY) || queue_under_load?('pull', MAX_PULL_SIZE, MAX_PULL_LATENCY) + end + + private + + def queue_under_load?(name, max_size, max_latency) + queue = Sidekiq::Queue.new(name) + queue.size > max_size || queue.latency > max_latency + end + + def last_processed_id + Redis.current.get('account_statuses_cleanup_scheduler:last_account_id') + end + + def save_last_processed_id(id) + if id.nil? + Redis.current.del('account_statuses_cleanup_scheduler:last_account_id') + else + Redis.current.set('account_statuses_cleanup_scheduler:last_account_id', id, ex: 1.hour.seconds) + end + end +end diff --git a/app/workers/scheduler/ip_cleanup_scheduler.rb b/app/workers/scheduler/ip_cleanup_scheduler.rb index df7e6ad56..918c10ac9 100644 --- a/app/workers/scheduler/ip_cleanup_scheduler.rb +++ b/app/workers/scheduler/ip_cleanup_scheduler.rb @@ -17,6 +17,7 @@ class Scheduler::IpCleanupScheduler def clean_ip_columns! SessionActivation.where('updated_at < ?', IP_RETENTION_PERIOD.ago).in_batches.destroy_all User.where('current_sign_in_at < ?', IP_RETENTION_PERIOD.ago).in_batches.update_all(last_sign_in_ip: nil, current_sign_in_ip: nil, sign_up_ip: nil) + LoginActivity.where('created_at < ?', IP_RETENTION_PERIOD.ago).in_batches.destroy_all end def clean_expired_ip_blocks! diff --git a/chart/Chart.lock b/chart/Chart.lock index 7b68a2ed2..d74e7570c 100644 --- a/chart/Chart.lock +++ b/chart/Chart.lock @@ -1,12 +1,12 @@ dependencies: - name: elasticsearch repository: https://charts.bitnami.com/bitnami - version: 14.2.3 + version: 15.10.3 - name: postgresql repository: https://charts.bitnami.com/bitnami version: 8.10.14 - name: redis repository: https://charts.bitnami.com/bitnami version: 10.9.0 -digest: sha256:9e3e7b987c6ffba9295a30b7fae2613fe680c2b1a1832ff5afb185414ce1898e -generated: "2021-02-27T01:01:12.776919968Z" +digest: sha256:f5c57108f7768fd16391c1a050991c7809f84a640cca308d7d24d87379d04000 +generated: "2021-08-05T08:01:01.457727804Z" diff --git a/chart/Chart.yaml b/chart/Chart.yaml index 8f1976cf7..a09ae8e8a 100644 --- a/chart/Chart.yaml +++ b/chart/Chart.yaml @@ -24,7 +24,7 @@ appVersion: 3.3.0 dependencies: - name: elasticsearch - version: 14.2.3 + version: 15.10.3 repository: https://charts.bitnami.com/bitnami condition: elasticsearch.enabled - name: postgresql diff --git a/chart/values.yaml b/chart/values.yaml index a638f4a7d..ff45a7b61 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -60,7 +60,7 @@ mastodon: concurrency: 25 smtp: auth_method: plain - ca_file: + ca_file: /etc/ssl/certs/ca-certificates.crt delivery_method: smtp domain: enable_starttls_auto: true diff --git a/config/application.rb b/config/application.rb index 749b8aa58..561722884 100644 --- a/config/application.rb +++ b/config/application.rb @@ -1,6 +1,21 @@ require_relative 'boot' -require 'rails/all' +require 'rails' + +require 'active_record/railtie' +#require 'active_storage/engine' +require 'action_controller/railtie' +require 'action_view/railtie' +require 'action_mailer/railtie' +require 'active_job/railtie' +#require 'action_cable/engine' +#require 'action_mailbox/engine' +#require 'action_text/engine' +#require 'rails/test_unit/railtie' +require 'sprockets/railtie' + +# Used to be implicitly required in action_mailbox/engine +require 'mail' # Require the gems listed in Gemfile, including any gems # you've limited to :test, :development, or :production. @@ -10,11 +25,9 @@ require_relative '../lib/exceptions' require_relative '../lib/enumerable' require_relative '../lib/sanitize_ext/sanitize_config' require_relative '../lib/redis/namespace_extensions' -require_relative '../lib/paperclip/schema_extensions' -require_relative '../lib/paperclip/validation_extensions' require_relative '../lib/paperclip/url_generator_extensions' require_relative '../lib/paperclip/attachment_extensions' -require_relative '../lib/paperclip/media_type_spoof_detector_extensions' +require_relative '../lib/paperclip/storage_extensions' require_relative '../lib/paperclip/lazy_thumbnail' require_relative '../lib/paperclip/gif_transcoder' require_relative '../lib/paperclip/transcoder' @@ -95,6 +108,7 @@ module Mastodon :ka, :kab, :kk, + :kmr, :kn, :ko, :ku, diff --git a/config/boot.rb b/config/boot.rb index 6cde5319d..4e379e7db 100644 --- a/config/boot.rb +++ b/config/boot.rb @@ -12,8 +12,6 @@ Bootsnap.setup( cache_dir: File.expand_path('../tmp/cache', __dir__), development_mode: ENV.fetch('RAILS_ENV', 'development') == 'development', load_path_cache: true, - autoload_paths_cache: true, - disable_trace: false, compile_cache_iseq: false, compile_cache_yaml: false ) diff --git a/config/deploy.rb b/config/deploy.rb index f844cc871..f642e6e59 100644 --- a/config/deploy.rb +++ b/config/deploy.rb @@ -2,7 +2,7 @@ lock '3.16.0' -set :repo_url, ENV.fetch('REPO', 'https://github.com/tootsuite/mastodon.git') +set :repo_url, ENV.fetch('REPO', 'https://github.com/mastodon/mastodon.git') set :branch, ENV.fetch('BRANCH', 'master') set :application, 'mastodon' diff --git a/config/environments/production.rb b/config/environments/production.rb index df6b07d77..4a8899944 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -105,7 +105,7 @@ Rails.application.configure do :password => ENV['SMTP_PASSWORD'].presence, :domain => ENV['SMTP_DOMAIN'] || ENV['LOCAL_DOMAIN'], :authentication => ENV['SMTP_AUTH_METHOD'] == 'none' ? nil : ENV['SMTP_AUTH_METHOD'] || :plain, - :ca_file => ENV['SMTP_CA_FILE'].presence, + :ca_file => ENV['SMTP_CA_FILE'].presence || '/etc/ssl/certs/ca-certificates.crt', :openssl_verify_mode => ENV['SMTP_OPENSSL_VERIFY_MODE'], :enable_starttls_auto => ENV['SMTP_ENABLE_STARTTLS_AUTO'] || true, :tls => ENV['SMTP_TLS'].presence, diff --git a/config/initializers/omniauth.rb b/config/initializers/omniauth.rb index 9e037f421..5039b4c1f 100644 --- a/config/initializers/omniauth.rb +++ b/config/initializers/omniauth.rb @@ -30,6 +30,8 @@ Devise.setup do |config| cas_options[:location_key] = ENV['CAS_LOCATION_KEY'] || 'location' cas_options[:image_key] = ENV['CAS_IMAGE_KEY'] || 'image' cas_options[:phone_key] = ENV['CAS_PHONE_KEY'] || 'phone' + cas_options[:security] = {} + cas_options[:security][:assume_email_is_verified] = ENV['CAS_SECURITY_ASSUME_EMAIL_IS_VERIFIED'] == 'true' config.omniauth :cas, cas_options end diff --git a/config/initializers/twitter_regex.rb b/config/initializers/twitter_regex.rb index 3ff2aa9e5..d2ea5f974 100644 --- a/config/initializers/twitter_regex.rb +++ b/config/initializers/twitter_regex.rb @@ -24,6 +24,9 @@ module Twitter::TwitterText ) \) /iox + UCHARS = '\u{A0}-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFEF}\u{10000}-\u{1FFFD}\u{20000}-\u{2FFFD}\u{30000}-\u{3FFFD}\u{40000}-\u{4FFFD}\u{50000}-\u{5FFFD}\u{60000}-\u{6FFFD}\u{70000}-\u{7FFFD}\u{80000}-\u{8FFFD}\u{90000}-\u{9FFFD}\u{A0000}-\u{AFFFD}\u{B0000}-\u{BFFFD}\u{C0000}-\u{CFFFD}\u{D0000}-\u{DFFFD}\u{E1000}-\u{EFFFD}\u{E000}-\u{F8FF}\u{F0000}-\u{FFFFD}\u{100000}-\u{10FFFD}' + REGEXEN[:valid_url_query_chars] = /[a-z0-9!?\*'\(\);:&=\+\$\/%#\[\]\-_\.,~|@#{UCHARS}]/iou + REGEXEN[:valid_url_query_ending_chars] = /[a-z0-9_&=#\/\-#{UCHARS}]/iou REGEXEN[:valid_url_path] = /(?: (?: #{REGEXEN[:valid_general_url_path_chars]}* @@ -53,23 +56,21 @@ module Twitter::TwitterText #{REGEXEN[:validate_url_pct_encoded]}| #{REGEXEN[:validate_url_sub_delims]} )/iox - REGEXEN[:xmpp_uri] = %r{ - (xmpp:) # Protocol - (//#{REGEXEN[:validate_nodeid]}+@#{REGEXEN[:valid_domain]}/)? # Authority (optional) - (#{REGEXEN[:validate_nodeid]}+@)? # Username in path (optional) - (#{REGEXEN[:valid_domain]}) # Domain in path - (/#{REGEXEN[:validate_resid]}+)? # Resource in path (optional) - (\?#{REGEXEN[:valid_url_query_chars]}*#{REGEXEN[:valid_url_query_ending_chars]})? # Query String - }iox - REGEXEN[:magnet_uri] = %r{ - (magnet:) # Protocol - (\?#{REGEXEN[:valid_url_query_chars]}*#{REGEXEN[:valid_url_query_ending_chars]}) # Query String - }iox REGEXEN[:valid_extended_uri] = %r{ ( # $1 total match (#{REGEXEN[:valid_url_preceding_chars]}) # $2 Preceding character ( # $3 URL - (#{REGEXEN[:xmpp_uri]}) | (#{REGEXEN[:magnet_uri]}) + ( + (xmpp:) # Protocol + (//#{REGEXEN[:validate_nodeid]}+@#{REGEXEN[:valid_domain]}/)? # Authority (optional) + (#{REGEXEN[:validate_nodeid]}+@)? # Username in path (optional) + (#{REGEXEN[:valid_domain]}) # Domain in path + (/#{REGEXEN[:validate_resid]}+)? # Resource in path (optional) + (\?#{REGEXEN[:valid_url_query_chars]}*#{REGEXEN[:valid_url_query_ending_chars]})? # Query String + ) | ( + (magnet:) # Protocol + (\?#{REGEXEN[:valid_url_query_chars]}*#{REGEXEN[:valid_url_query_ending_chars]}) # Query String + ) ) ) }iox diff --git a/config/locales/activerecord.br.yml b/config/locales/activerecord.br.yml index a7eab580c..e16e78eb3 100644 --- a/config/locales/activerecord.br.yml +++ b/config/locales/activerecord.br.yml @@ -5,13 +5,26 @@ br: poll: expires_at: Deiziad termen options: Dibaboù + user: + email: Chomlec'h postel + locale: Lec'hel + password: Ger-tremen + user/account: + username: Anv + user/invite_request: + text: Abeg errors: models: account: attributes: username: invalid: nemet lizherennoù, niverennoù hag isbarrennigoù + reserved: a zo miret status: attributes: reblog: taken: eus ar statud a zo dija + user: + attributes: + email: + blocked: a implij ur pourvezour postel berzet diff --git a/config/locales/activerecord.es-MX.yml b/config/locales/activerecord.es-MX.yml index da658a338..c316a70a7 100644 --- a/config/locales/activerecord.es-MX.yml +++ b/config/locales/activerecord.es-MX.yml @@ -6,7 +6,7 @@ es-MX: expires_at: Vencimiento options: Opciones user: - agreement: Acuerdo de Servicio + agreement: Contrato de servicio email: Dirección de correo electrónico locale: Idioma password: Contraseña diff --git a/config/locales/activerecord.fi.yml b/config/locales/activerecord.fi.yml index efd8b5e75..40dd81812 100644 --- a/config/locales/activerecord.fi.yml +++ b/config/locales/activerecord.fi.yml @@ -4,7 +4,7 @@ fi: attributes: poll: expires_at: Määräaika - options: Vaihtoehdot + options: Valinnat user: agreement: Palvelusopimus email: Sähköpostiosoite diff --git a/config/locales/activerecord.fr.yml b/config/locales/activerecord.fr.yml index 47cd8765d..00d40aaf0 100644 --- a/config/locales/activerecord.fr.yml +++ b/config/locales/activerecord.fr.yml @@ -11,7 +11,7 @@ fr: locale: Langue password: Mot de passe user/account: - username: Nom d’utilisateur·ice + username: Nom d’utilisateur user/invite_request: text: Raison errors: diff --git a/config/locales/activerecord.hy.yml b/config/locales/activerecord.hy.yml index 237866b96..dc5c86634 100644 --- a/config/locales/activerecord.hy.yml +++ b/config/locales/activerecord.hy.yml @@ -8,13 +8,25 @@ hy: user: agreement: Ծառայության համաձայնագիր email: Էլ․ հասցե + locale: Տեղանք + password: Գաղտնաբառ + user/account: + username: Մուտքանուն + user/invite_request: + text: Պատճառ errors: models: account: attributes: username: invalid: միայն տառեր, թվեր և ընդգիծկներ + reserved: զբաղուած է status: attributes: reblog: - taken: թութը գոյություն ունի + taken: գրառումը արդէն գոյութիւն ունի + user: + attributes: + email: + blocked: արգելուած էլ. փոստի ծառայութիւն + unreachable: կարծես գոյութիւն չունի diff --git a/config/locales/activerecord.id.yml b/config/locales/activerecord.id.yml index 5510ccc8d..dc90c1322 100644 --- a/config/locales/activerecord.id.yml +++ b/config/locales/activerecord.id.yml @@ -19,7 +19,7 @@ id: account: attributes: username: - invalid: hanya boleh berisi huruf, angka, dan underscore + invalid: hanya boleh berisi huruf, angka, dan garis bawah reserved: sudah dipesan status: attributes: diff --git a/config/locales/activerecord.kab.yml b/config/locales/activerecord.kab.yml index d6b3c40e4..5b3d06634 100644 --- a/config/locales/activerecord.kab.yml +++ b/config/locales/activerecord.kab.yml @@ -5,12 +5,22 @@ kab: poll: expires_at: Azemz n taggara options: Tifranin + user: + agreement: Amtawa n umeẓlu + email: Tansa imayl + locale: Tutlayt + password: Awal uffir + user/account: + username: Isem n useqdac + user/invite_request: + text: Taɣzent errors: models: account: attributes: username: invalid: isekkilen, uṭṭunen d yijerriden n wadda kan + reserved: yettwaṭṭef status: attributes: reblog: diff --git a/config/locales/activerecord.kmr.yml b/config/locales/activerecord.kmr.yml new file mode 100644 index 000000000..616c4966f --- /dev/null +++ b/config/locales/activerecord.kmr.yml @@ -0,0 +1,32 @@ +--- +kmr: + activerecord: + attributes: + poll: + expires_at: Dîroka dawîbûnê + options: Hilbijark + user: + agreement: Peymana karûbarê + email: Navnîşana E-nameyê + locale: Herêm + password: Pêborîn + user/account: + username: Navê bikarhêneriyê + user/invite_request: + text: Sedem + errors: + models: + account: + attributes: + username: + invalid: pêdivî ye ku tenê tîp, hejmar û xêzikên jêrîn hebin + reserved: hatiye bikaranîn + status: + attributes: + reblog: + taken: ev nivîs berê heye jixwe + user: + attributes: + email: + blocked: dabînkerê e-nameya qedexe bi kar tîne + unreachable: xuya ye ku tune ye diff --git a/config/locales/activerecord.lv.yml b/config/locales/activerecord.lv.yml index 1be0eabc0..f3524811b 100644 --- a/config/locales/activerecord.lv.yml +++ b/config/locales/activerecord.lv.yml @@ -1 +1,32 @@ +--- lv: + activerecord: + attributes: + poll: + expires_at: Gala termiņš + options: Izvēles + user: + agreement: Pakalpojuma līgums + email: E-pasta adrese + locale: Lokalizācija + password: Parole + user/account: + username: Lietotājvārds + user/invite_request: + text: Iemesls + errors: + models: + account: + attributes: + username: + invalid: drīkst saturēt tikai burtus, ciparus un pasvītras + reserved: ir rezervēts + status: + attributes: + reblog: + taken: ziņa jau pastāv + user: + attributes: + email: + blocked: lieto neatļautu epasta pakalpojuma sniedzēju + unreachable: šķiet, ka neeksistē diff --git a/config/locales/activerecord.no.yml b/config/locales/activerecord.no.yml index aea66b101..43b589745 100644 --- a/config/locales/activerecord.no.yml +++ b/config/locales/activerecord.no.yml @@ -7,6 +7,7 @@ options: Valg user: email: E-mail address + locale: Område password: Passord user/account: username: Brukernavn diff --git a/config/locales/activerecord.pt-BR.yml b/config/locales/activerecord.pt-BR.yml index a6314cdae..8b4d3439a 100644 --- a/config/locales/activerecord.pt-BR.yml +++ b/config/locales/activerecord.pt-BR.yml @@ -3,30 +3,30 @@ pt-BR: activerecord: attributes: poll: - expires_at: Vencimento - options: Escolhas + expires_at: Prazo + options: Opções user: - agreement: Termos do Serviço - email: Endereço de e-mail - locale: Local + agreement: Termos de serviço + email: E-mail + locale: Idioma password: Senha user/account: - username: Nome de usuário + username: Usuário user/invite_request: - text: Motivos + text: Razão errors: models: account: attributes: username: invalid: apenas letras, números e underlines ( "_" ) - reserved: está reservado + reserved: já existe status: attributes: reblog: - taken: do status já existe + taken: do toot já existe user: attributes: email: - blocked: utiliza um provedor de e-mail não permitido + blocked: usa provedor de e-mail não permitido unreachable: parece não existir diff --git a/config/locales/activerecord.ro.yml b/config/locales/activerecord.ro.yml index b6ef711d1..1da164190 100644 --- a/config/locales/activerecord.ro.yml +++ b/config/locales/activerecord.ro.yml @@ -5,6 +5,9 @@ ro: poll: expires_at: Termen limită options: Alegeri + user: + email: Adresă e-mail + password: Parolă errors: models: account: diff --git a/config/locales/activerecord.si.yml b/config/locales/activerecord.si.yml index f836cfba7..4152861e8 100644 --- a/config/locales/activerecord.si.yml +++ b/config/locales/activerecord.si.yml @@ -5,9 +5,23 @@ si: poll: expires_at: නියමිත කාලය options: තේරීම් + user: + agreement: සේවා ගිවිසුම + email: වි-තැපැල් ලිපිනය + password: මුර පදය + user/account: + username: පරිශීලක නාමය + user/invite_request: + text: හේතුව errors: models: account: attributes: username: invalid: අකුරු, අංක සහ යට-ඉරි පමණි + reserved: වෙන් කර ඇත + user: + attributes: + email: + blocked: නොඉඩ දෙන වි-තැපැල් ප්‍රතිපාදකයෙකු භාවිතා කරයි + unreachable: පෙනෙන හැටියට නොපවතී diff --git a/config/locales/activerecord.sr.yml b/config/locales/activerecord.sr.yml index d974d0e7b..feebfb6dc 100644 --- a/config/locales/activerecord.sr.yml +++ b/config/locales/activerecord.sr.yml @@ -5,13 +5,28 @@ sr: poll: expires_at: Крајњи рок options: Избори + user: + agreement: Уговор о услузи + email: Имејл адреса + locale: Регионална подешавања + password: Лозинка + user/account: + username: Корисничко име + user/invite_request: + text: Разлог errors: models: account: attributes: username: - invalid: само слова, бројеви и доње црте + invalid: мора да садржи само слова, бројеве и доње црте + reserved: је резервисано status: attributes: reblog: - taken: статуса већ постоји + taken: објава већ постоји + user: + attributes: + email: + blocked: користи недозвољени имејл сервис + unreachable: изгледа да не постоји diff --git a/config/locales/activerecord.th.yml b/config/locales/activerecord.th.yml index ef93d4ce9..4957ab7bd 100644 --- a/config/locales/activerecord.th.yml +++ b/config/locales/activerecord.th.yml @@ -19,6 +19,7 @@ th: attributes: username: invalid: ต้องมีเฉพาะตัวอักษร, ตัวเลข และขีดล่างเท่านั้น + reserved: ถูกสงวนไว้ status: attributes: reblog: @@ -27,3 +28,4 @@ th: attributes: email: blocked: ใช้ผู้ให้บริการอีเมลที่ไม่ได้รับอนุญาต + unreachable: ดูเหมือนว่าจะไม่มีอยู่จริง diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 07d7dab3a..6c3cccdb3 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -135,6 +135,7 @@ ar: demote: إنزال الرُتبة الوظيفية destroyed_msg: بيانات حساب %{username} الآن في قائمة الانتظار ليتم حذفها قريباً disable: تعطيل + disable_sign_in_token_auth: تعطيل مصادقة رمز البريد الإلكتروني disable_two_factor_authentication: تعطيل المصادقة بخطوتين disabled: معطَّل display_name: عرض الاسم @@ -143,6 +144,7 @@ ar: email: البريد الإلكتروني email_status: حالة البريد الإلكتروني enable: تفعيل + enable_sign_in_token_auth: تمكين مصادقة رمز البريد الإلكتروني enabled: مفعَّل enabled_msg: تم إلغاء تجميد حساب %{username} followers: المتابِعون @@ -207,6 +209,10 @@ ar: search: البحث search_same_email_domain: مستخدمون آخرون لديهم نفس نطاق البريد الإلكتروني search_same_ip: مستخدِمون آخرون بنفس الـ IP + security_measures: + only_password: كلمة المرور فقط + password_and_2fa: كلمة المرور و 2FA + password_and_sign_in_token: كلمة المرور ورمز البريد الإلكتروني sensitive: حساس sensitized: مُعَين كمنشور حساس shared_inbox_url: رابط الصندوق المُشترَك للبريد الوارد @@ -258,8 +264,10 @@ ar: destroy_unavailable_domain: حذف نطاق غير متوفر disable_2fa_user: تعطيل 2FA disable_custom_emoji: تعطيل الإيموجي المخصص + disable_sign_in_token_auth_user: تعطيل مصادقة رمز البريد الإلكتروني للمستخدم disable_user: تعطيل المستخدم enable_custom_emoji: تفعيل الإيموجي المخصص + enable_sign_in_token_auth_user: تمكين مصادقة رمز البريد الإلكتروني للمستخدم enable_user: تفعيل المستخدم memorialize_account: جعل الحساب تذكاريا promote_user: ترقية المستخدم @@ -287,6 +295,42 @@ ar: create_custom_emoji_html: "%{name} قام برفع إيموجي جديد %{target}" create_domain_allow_html: قام %{name} بإضافة النطاق %{target} إلى القائمة البيضاء create_domain_block_html: "%{name} قام بحجب نطاق %{target}" + create_email_domain_block_html: قام %{name} بحظر نطاق البريد الإلكتروني %{target} + create_ip_block_html: قام %{name} بإنشاء قاعدة للـIP %{target} + create_unavailable_domain_html: قام %{name} بتوقيف التوصيل للنطاق %{target} + demote_user_html: قام %{name} بخفض الرتبة الوظيفية لـ%{target} + destroy_announcement_html: قام %{name} بحذف الإعلان %{target} + destroy_custom_emoji_html: قام %{name} بحذف الإيموجي %{target} + destroy_domain_allow_html: قام %{name} بمنع الاتحاد مع النطاق %{target} + destroy_domain_block_html: قام %{name} برفع الحظر عن النطاق %{target} + destroy_email_domain_block_html: قام %{name} برفع الحظر عن نطاق البريد الإلكتروني %{target} + destroy_ip_block_html: قام %{name} بحذف قاعدة للـIP %{target} + destroy_status_html: قام %{name} بحذف منشور من %{target} + destroy_unavailable_domain_html: قام %{name} باستئناف التوصيل للنطاق %{target} + disable_2fa_user_html: قام %{name} بتعطيل المصادقة بخطوتين للمستخدم %{target} + disable_custom_emoji_html: قام %{name} بتعطيل الإيموجي %{target} + disable_sign_in_token_auth_user_html: "%{name} تعطيل مصادقة رمز البريد الإلكتروني لـ %{target}" + disable_user_html: قام %{name} بتعطيل تسجيل الدخول للمستخدم %{target} + enable_custom_emoji_html: قام %{name} بتنشيط الإيموجي %{target} + enable_sign_in_token_auth_user_html: "%{name} تمكين مصادقة رمز البريد الإلكتروني لـ %{target}" + enable_user_html: قام %{name} بتنشيط تسجيل الدخول للمستخدم %{target} + memorialize_account_html: قام %{name} بتحويل حساب %{target} إلى صفحة تذكارية + promote_user_html: قام %{name} بترويج المستخدم %{target} + remove_avatar_user_html: قام %{name} بإزالة صورة %{target} الرمزية + reopen_report_html: قام %{name} بإعادة فتح الشكوى %{target} + reset_password_user_html: قام %{name} بإعادة تعيين كلمة مرور المستخدم %{target} + resolve_report_html: قام %{name} بحل الشكوى %{target} + sensitive_account_html: قام %{name} بوضع علامة حساس على محتوى %{target} + silence_account_html: قام %{name} بكتم حساب %{target} + suspend_account_html: قام %{name} بتعليق حساب %{target} + unassigned_report_html: قام %{name} بإلغاء تعيين الشكوى %{target} + unsensitive_account_html: قام %{name} بإزالة علامة حساس على محتوى %{target} + unsilence_account_html: قام %{name} بإلغاء كتم المستخدم %{target} + unsuspend_account_html: قام %{name} بإلغاء تعليق حساب %{target} + update_announcement_html: قام %{name} بتحديث الإعلان %{target} + update_custom_emoji_html: قام %{name} بتحديث الإيموجي %{target} + update_domain_block_html: قام %{name} بتحديث كتلة النطاق %{target} + update_status_html: قام %{name} بتحديث منشور من %{target} deleted_status: "(منشور محذوف)" empty: لم يتم العثور على سجلات. filter_by_action: تصفية بحسب الإجراء @@ -301,10 +345,12 @@ ar: new: create: إنشاء إعلان title: إعلان جديد + publish: نشر published_msg: تم نشر الإعلان بنجاح! scheduled_for: بُرمِج على %{time} scheduled_msg: تمت جدولة نشر الإعلان! title: الإعلانات + unpublish: إلغاء النشر unpublished_msg: تم إلغاء نشر الإعلان بنجاح! updated_msg: تم تحديث الإعلان بنجاح! custom_emojis: @@ -341,32 +387,9 @@ ar: updated_msg: تم تحديث الإيموجي بنجاح! upload: رفع dashboard: - authorized_fetch_mode: الوضع الآمن - backlog: الأعمال المتراكمة - config: الإعداد - feature_deletions: الحسابات المحذوفة - feature_invites: روابط الدعوات - feature_profile_directory: دليل الملفات التعريفية - feature_registrations: التسجيلات - feature_relay: المُرحّل الفديرالي - feature_timeline_preview: معاينة الخيط الزمني - features: الميّزات - hidden_service: الفيديرالية مع الخدمات الخفية - open_reports: شكاوي مفتوحة - pending_tags: وسوم في انتظار المراجعة - pending_users: مستخدمين في انتظار مراجعة - recent_users: أحدث المستخدِمين - search: البحث النصي الكامل - single_user_mode: وضع المستخدِم الأوحد software: البرنامج space: المساحة المستخدَمة title: لوح المراقبة - total_users: إجمالي المستخدِمين - trends: المتداوَلة - week_interactions: تفاعُلات هذا الأسبوع - week_users_active: نشطاء هذا الأسبوع - week_users_new: مستخدِمين هذا الأسبوع - whitelist_mode: وضع القائمة البيضاء domain_allows: add_new: إضافة النطاق إلى القائمة البيضاء created_msg: تمت إضافة النطاق إلى القائمة البيضاء بنجاح @@ -430,9 +453,38 @@ ar: create: إضافة نطاق title: إضافة نطاق بريد جديد إلى اللائحة السوداء title: القائمة السوداء للبريد الإلكتروني + follow_recommendations: + description_html: "تساعد اقتراحات المتابعة المستخدمين في العثور بسرعة على محتوى مثير للاهتمام. عندما لا يتفاعل المستخدم مع الآخرين بشكل كافي لتشكيل اقتراحات متابعة مخصصة له، تظهر هذه الاقتراحات بدلاً من ذلك. يُعاد حسابهم بشكل يومي من مزيج حسابات لديها أكثر التفاعلات وأكثر عدد من المتابعين المحليين للغة معينة." + language: للغة + status: الحالة + suppress: إلغاء توصية اقتراح المتابعة + suppressed: ملغاة التوصية + title: اقتراحات المتابعة + unsuppress: إستعادة إقتراحات المتابعة instances: + back_to_all: الكل + back_to_limited: محدود + back_to_warning: تحذير by_domain: النطاق + delivery: + all: الكل + clear: مسح أخطاء التسليم + restart: إعادة تشغيل التوصيل + stop: إيقاف التوصيل + title: التوصيل + unavailable: غير متوفر + unavailable_message: التوصيل غير متوفر + warning: تحذير + warning_message: + few: فشل التوصيل لـ%{count} أيام + many: فشل التوصيل لـ%{count} يوم + one: فشل التوصيل لـ%{count} يوم + other: فشل التوصيل لـ%{count} يوم + two: فشل التوصيل لـ%{count} يوم + zero: فشل التوصيل لـ%{count} يوم delivery_available: التسليم متوفر + delivery_error_days: أيام أخطاء التوصيل + delivery_error_hint: إذا كان التوصيل غير ممكناً لـ%{count} يوم، فستوضع عليها علامة {غير قابلة للتسليم} تلقائياً. empty: لم يتم العثور على نطاقات. known_accounts: few: "%{count} حسابات معروفة" @@ -540,13 +592,17 @@ ar: resolved: معالجة resolved_msg: تم حل تقرير بنجاح! status: الحالة + target_origin: مصدر الحساب المبلغ عنه title: الشكاوى unassign: إلغاء تعيين unresolved: غير معالجة updated_at: محدث rules: add_new: إضافة قاعدة + delete: حذف + description_html: بينما يدعي معظم الناس أنهم قرأوا شروط الخدمة ووافقوا عليها، فإن الناس عادةً لا يقرأون إلا بعد حدوث مشكلة. اجعل من الأسهل رؤية قواعد خادمك بلمحة عن طريق تزويدهم في قائمة النقاط المدورة. حاول إبقاء القواعد الفردية قصيرة وبسيطة، ولكن لا تحاول أن تُقسمها إلى العديد من العناصر المنفصلة أيضا. edit: تعديل القانون + empty: لم يتم تحديد قواعد الخادم بعد. title: قوانين الخادم settings: activity_api_enabled: @@ -654,6 +710,14 @@ ar: no_status_selected: لم يطرأ أي تغيير على أي منشور بما أنه لم يتم اختيار أي واحد title: منشورات الحساب with_media: تحتوي على وسائط + system_checks: + database_schema_check: + message_html: هناك عمليات هجرة معلقة لقواعد البيانات. يرجى تشغيلها لضمان تصرف التطبيق كما هو متوقع + rules_check: + action: إدارة قواعد الخادم + message_html: لم تقم بتحديد أي قواعد خادم. + sidekiq_process_check: + message_html: لا توجد عملية Sidekiq قيد التشغيل لقائمة الانتظار %{value}. يرجى مراجعة إعدادات Sidekiq الخاصة بك tags: accounts_today: استخدامات هذا اليوم accounts_week: استخدامات هذا الأسبوع @@ -674,6 +738,7 @@ ar: add_new: إضافة واحد جديد delete: حذف edit_preset: تعديل نموذج التحذير + empty: لم تحدد أي إعدادات تحذير مسبقة بعد. title: إدارة نماذج التحذير admin_mailer: new_pending_account: @@ -971,6 +1036,17 @@ ar: lists: errors: limit: لقد بلغت الحد الأقصى للقوائم + login_activities: + authentication_methods: + otp: تطبيق المصادقة الثنائية + password: كلمة المرور + sign_in_token: رمز الأمان للبريد الإلكتروني + webauthn: مفاتيح الأمان + description_html: إذا رأيت النشاط الذي لا تتعرف عليه، فكر في تغيير كلمة المرور الخاصة بك وتفعيل المصادقة ذات العاملين. + empty: لا يوجد سجل مصادقة متاح + failed_sign_in_html: فشل محاولة تسجيل الدخول مع %{method} من %{ip} (%{browser}) + successful_sign_in_html: تم تسجيل الدخول بنجاح مع %{method} من %{ip} (%{browser}) + title: تاريخ المصادقة media_attachments: validations: images_and_video: ليس بالإمكان إرفاق فيديو في منشور يحتوي مسبقا على صور @@ -1051,6 +1127,8 @@ ar: body: 'أشار إليك %{name} في:' subject: لقد قام %{name} بذِكرك title: إشارة جديدة + poll: + subject: انتهى استطلاع %{name} للرأي reblog: body: 'قام %{name} بترقية منشورك:' subject: قام %{name} بترقية منشورك @@ -1183,6 +1261,7 @@ ar: revoke: إبطال revoke_success: تم إبطال الجلسة بنجاح title: الجلسات + view_authentication_history: عرض سجل المصادقة لحسابك settings: account: الحساب account_settings: إعدادات الحساب @@ -1203,6 +1282,7 @@ ar: preferences: التفضيلات profile: الملف التعريفي relationships: المتابِعون والمتابَعون + statuses_cleanup: حذف المنشور الآلي two_factor_authentication: المُصادقة بخُطوَتَيْن webauthn_authentication: مفاتيح الأمان statuses: @@ -1271,12 +1351,47 @@ ar: sign_in_to_participate: قم بتسجيل الدخول للمشاركة في هذه المحادثة title: '%{name}: "%{quote}"' visibilities: + direct: مباشرة private: لمتابِعيك فقط private_long: اعرضه لمتابعيك فقط public: للعامة public_long: يمكن للجميع رؤيته unlisted: غير مُدرَج unlisted_long: يُمكن لأيٍ كان رُؤيتَه و لكن لن يُعرَض على الخيوط العامة + statuses_cleanup: + enabled: حذف المشاركات القديمة تلقائياً + enabled_hint: حذف منشوراتك تلقائياً بمجرد أن تصل إلى عتبة عمرية محددة، إلا إذا كانت مطابقة لأحد الاستثناءات أدناه + exceptions: الاستثناءات + explanation: لأن حذف المشاركات عملية مكلفة، يتم ذلك ببطء مع مرور الوقت عندما يكون الخادم غير مشغول. لهذا السبب، يمكن حذف مشاركاتك بعد فترة من بلوغها عتبة السن. + ignore_favs: تجاهل المفضلة + ignore_reblogs: تجاهل التعزيزات + interaction_exceptions: الاستثناءات المبنية على التفاعلات + interaction_exceptions_explanation: لاحظ أنه لا يوجد ضمان لحذف الوظائف إذا كانت أقل من عتبة التعزيز المفضلة بعد أن تكون قد ذهبت إليها. + keep_direct: الاحتفاظ بالرسائل المباشرة + keep_direct_hint: لم تقوم بحذف أي من رسائلك المباشرة + keep_media: الاحتفاظ بالمشاركات مع مرفقات الوسائط + keep_media_hint: لم تقوم بحذف أي من المشاركات الخاصة بك التي تحتوي على مرفقات الوسائط + keep_pinned: الاحتفاظ بالمشاركات المثبتة + keep_pinned_hint: لم تقوم بحذف أي من مشاركتك المثبتة + keep_polls: الاحتفاظ باستطلاعات الرأي + keep_polls_hint: لم تقم بحذف أي من استطلاعاتك + keep_self_bookmark: احتفظ بالمشاركات التي أدرجتها حجزا + keep_self_bookmark_hint: لم تقم بحذف مشاركاتك الخاصة إذا قمت بوضع علامة مرجعية عليها + keep_self_fav: احتفظ بالمشاركات التي تفضلها + keep_self_fav_hint: لم تقم بحذف مشاركاتك الخاصة إذا كنت قد فضلتهم + min_age: + '1209600': أسبوعان + '15778476': 6 أشهر + '2629746': شهر واحد + '31556952': سنة واحدة + '5259492': شهران + '63113904': أسبوعان + '7889238': 3 أشهر + min_age_label: عتبة العمر + min_favs: إبقاء المشاركات المفضلة أكثر من + min_favs_hint: لم تقوم بحذف أي من المشاركات الخاصة بك التي حصلت على أكثر من هذه الكمية من المفضلة. اتركه فارغاً لحذف المشاركات بغض النظر عن عدد المفضلات لديها + min_reblogs: إبقاء المشاركات المعززة أكثر من + min_reblogs_hint: لم تقم بحذف أي من مشاركاتك التي تم تعزيزها أكثر من هذا العدد من المرات. اتركه فارغاً لحذف المشاركات بغض النظر عن عدد تعزيزاتها stream_entries: pinned: تبويق مثبّت reblogged: رقّاه diff --git a/config/locales/ast.yml b/config/locales/ast.yml index a709113e6..d0a8b3d34 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -89,16 +89,6 @@ ast: copy_failed_msg: Nun pudo facese una copia llocal d'esi fustaxe emoji: Fustaxe update_failed_msg: Nun pudo anovase esi fustaxe - dashboard: - config: Configuración - feature_registrations: Rexistros - features: Carauterístiques - hidden_service: Federación con servicios anubríos - recent_users: Usuarios de recién - total_users: usuarios en total - trends: Tendencies - week_interactions: interaiciones d'esta selmana - week_users_new: usuarios d'esta selmana domain_blocks: domain: Dominiu email_domain_blocks: diff --git a/config/locales/bn.yml b/config/locales/bn.yml index 922a081e8..7e6fee889 100644 --- a/config/locales/bn.yml +++ b/config/locales/bn.yml @@ -257,32 +257,9 @@ bn: updated_msg: ইমোজি সফলভাবে আপডেট হয়েছে! upload: আপলোড dashboard: - authorized_fetch_mode: সুরক্ষিত মোড - backlog: ব্যাকলগ জবগুলি - config: কনফিগারেশন - feature_deletions: মোছা অ্যাকাউন্টগুলি - feature_invites: আমন্ত্রণ লিঙ্কগুলি - feature_profile_directory: প্রোফাইল ডিরেক্টরি - feature_registrations: নিবন্ধনগুলি - feature_relay: ফেডারেশন রিলে - feature_timeline_preview: পূর্বদর্শন সময়রেখা - features: বৈশিষ্ট্যগুলি - hidden_service: লুকানো সেবা সহ ফেডারেশন - open_reports: খোলার রিপোর্টগুলি - pending_tags: যে হ্যাশট্যাগগুলি পুনঃমূল্যায়নার জন্য অপেক্ষা করছে - pending_users: যে ব্যবহারকারী পুনঃমূল্যায়নার জন্য অপেক্ষা করছে - recent_users: সাম্প্রতিক ব্যবহারকারীরা - search: সম্পূর্ণ পাঠ্য অনুসন্ধান - single_user_mode: একক ব্যবহারকারী মোড software: সফটওয়্যার space: স্থান ব্যবহার title: ড্যাশবোর্ড - total_users: মোট ব্যবহারকারী - trends: প্রবণতাগুলি - week_interactions: এই সপ্তাহে মিথষ্ক্রিয়াগুলি - week_users_active: এই সপ্তাহে সক্রিয় ব্যাবহারকারিরা - week_users_new: এই সপ্তাহে ব্যাবহারকারিরা - whitelist_mode: সীমিত ফেডারেশন মোড instances: moderation: limited: সীমিত diff --git a/config/locales/br.yml b/config/locales/br.yml index 32bb04f11..87190d1ea 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -110,10 +110,8 @@ br: enabled: Gweredekaet list: Listenn dashboard: - config: Kefluniadur software: Meziant title: Taolenn labour - trends: Luskadoù domain_blocks: domain: Domani new: @@ -272,7 +270,23 @@ br: sessions: browser: Merdeer browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox generic: Merdeer dianav + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Merdeer Nokia S40 Ovi + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UCBrowser + weibo: Weibo description: "%{browser} war %{platform}" platforms: other: savenn dianav diff --git a/config/locales/ca.yml b/config/locales/ca.yml index d8717ccf9..c0aef6c37 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -119,6 +119,7 @@ ca: demote: Degrada destroyed_msg: Les dades de %{username} son a la cua per a ser esborrades en breu disable: Inhabilita + disable_sign_in_token_auth: Desactivar l'autenticació de token per correu disable_two_factor_authentication: Desactiva 2FA disabled: Inhabilitat display_name: Nom visible @@ -127,6 +128,7 @@ ca: email: Adreça electrònica email_status: Estat de l'adreça electrònica enable: Habilita + enable_sign_in_token_auth: Activar l'autenticació de token per correu enabled: Habilitat enabled_msg: El compte de %{username} s’ha descongelat amb èxit followers: Seguidors @@ -191,6 +193,10 @@ ca: search: Cerca search_same_email_domain: Altres usuaris amb el mateix domini de correu search_same_ip: Altres usuaris amb la mateixa IP + security_measures: + only_password: Només contrasenya + password_and_2fa: Contrasenya i 2FA + password_and_sign_in_token: Contrasenya i token per correu sensitive: Sensible sensitized: marcar com a sensible shared_inbox_url: URL de la safata d'entrada compartida @@ -242,8 +248,10 @@ ca: destroy_unavailable_domain: Esborra domini no disponible disable_2fa_user: Desactiva 2FA disable_custom_emoji: Desactiva l'emoji personalitzat + disable_sign_in_token_auth_user: Desactivar l'autenticació de token per correu per l'usuari disable_user: Deshabilita l'usuari enable_custom_emoji: Activa l'emoji personalitzat + enable_sign_in_token_auth_user: Activar l'autenticació de token per correu pel l'usuari enable_user: Activa l'usuari memorialize_account: Memoritza el compte promote_user: Promou l'usuari @@ -285,8 +293,10 @@ ca: destroy_unavailable_domain_html: "%{name} ha représ el lliurament delivery al domini %{target}" disable_2fa_user_html: "%{name} ha desactivat el requisit de dos factors per a l'usuari %{target}" disable_custom_emoji_html: "%{name} ha desactivat l'emoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} ha desactivat l'autenticació de token per correu per a %{target}" disable_user_html: "%{name} ha desactivat l'accés del usuari %{target}" enable_custom_emoji_html: "%{name} ha activat l'emoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} ha activat l'autenticació de token per correu per a %{target}" enable_user_html: "%{name} ha activat l'accés del usuari %{target}" memorialize_account_html: "%{name} ha convertit el compte %{target} en una pàgina de memorial" promote_user_html: "%{name} ha promogut l'usuari %{target}" @@ -361,32 +371,28 @@ ca: updated_msg: Emoji s'ha actualitzat correctament! upload: Carrega dashboard: - authorized_fetch_mode: Mode d'obtenció autoritzat - backlog: treballs en espera - config: Configuració - feature_deletions: Supressions del compte - feature_invites: Enllaços de convits - feature_profile_directory: Directori de perfils - feature_registrations: Registres - feature_relay: Relay de la Federació - feature_timeline_preview: Vista prèvia de línia de temps - features: Característiques - hidden_service: Federació amb serveis ocults - open_reports: informes oberts - pending_tags: etiquetes pendents de revisar - pending_users: usuaris pendents de revisar - recent_users: Usuaris recents - search: Cerca de text complet - single_user_mode: Mode d'usuari únic + active_users: usuaris actius + interactions: interaccions + media_storage: Mèdia + new_users: usuaris nous + opened_reports: informes oberts + pending_reports_html: + one: "1 informe pendent" + other: "%{count} informes pendents" + pending_tags_html: + one: "1 etiqueta pendent" + other: "%{count} etiquetes pendents" + pending_users_html: + one: "1 usuari pendent" + other: "%{count} usuaris pendents" + resolved_reports: informes resolts software: Programari + sources: Fonts de registre space: Ús de l’espai title: Panell - total_users: usuaris en total - trends: Tendències - week_interactions: interaccions d'aquesta setmana - week_users_active: usuaris actius aquesta setmana - week_users_new: nous usuaris aquest setmana - whitelist_mode: Mode llista blanca + top_languages: Idiomes més actius + top_servers: Servidors més actius + website: Lloc web domain_allows: add_new: Dominis autoritzats created_msg: El domini ha estat correctament autoritzat @@ -468,6 +474,9 @@ ca: unavailable: No disponible unavailable_message: El lliurament no està disponible warning: Avís + warning_message: + one: Fallada de lliurament %{count} dia + other: Fallada de lliurament %{count} dies delivery_available: El lliurament està disponible delivery_error_days: Dies de fallades de lliurament delivery_error_hint: Si el lliurament no és possible per %{count} dies, serà automàticament marcat com a no lliurable. @@ -566,6 +575,7 @@ ca: resolved: Resolt resolved_msg: Informe resolt amb èxit! status: Estat + target_origin: Origen del compte reportat title: Informes unassign: Treu l'assignació unresolved: No resolt @@ -1001,6 +1011,17 @@ ca: lists: errors: limit: Has assolit la quantitat màxima de llistes + login_activities: + authentication_methods: + otp: aplicació d'autenticació de dos factors + password: contrasenya + sign_in_token: codi de seguretat per correu electrònic + webauthn: claus de seguretat + description_html: Si veus activitat que no reconeixes, considera canviar la teva contrasenya i activar l'autenticació de dos factors. + empty: Historial d'autenticació no disponible + failed_sign_in_html: Intent d'inici de sessió errat amb %{method} des-de %{ip} (%{browser}) + successful_sign_in_html: Inici de sessió exitós amb %{method} des-de %{ip} (%{browser}) + title: Historial d'autenticació media_attachments: validations: images_and_video: No es pot adjuntar un vídeo a una publicació que ja contingui imatges @@ -1207,6 +1228,7 @@ ca: revoke: Revoca revoke_success: S'ha revocat la sessió amb èxit title: Sessions + view_authentication_history: Veure l'historial d'autenticació del teu compte settings: account: Compte account_settings: Ajustos del compte @@ -1227,6 +1249,7 @@ ca: preferences: Preferències profile: Perfil relationships: Seguits i seguidors + statuses_cleanup: Borrat automàtic de publicacions two_factor_authentication: Autenticació de dos factors webauthn_authentication: Claus de seguretat statuses: @@ -1278,6 +1301,40 @@ ca: public_long: Tothom pot veure-ho unlisted: No llistat unlisted_long: Tothom ho pot veure, però no es mostra en les línies de temps públiques + statuses_cleanup: + enabled: Esborra automàtic publicacions velles + enabled_hint: Suprimeix automàticament les teves publicacions quan arribin a un llindar d’edat especificat, tret que coincideixin amb una de les excepcions següents + exceptions: Excepcions + explanation: Com que suprimir publicacions és una operació cara, es fa lentament amb el pas del temps quan el servidor no està ocupat. Per aquest motiu, és possible que les teves publicacions se suprimeixin un temps després d’assolir el llindar d’edat. + ignore_favs: Ignora favorits + ignore_reblogs: Ignora impulsos + interaction_exceptions: Excepcions basades en interaccions + interaction_exceptions_explanation: Tingues en compte que no es garanteix que es suprimeixen les publicacions si passen per sota del llindar de favorit o impuls després d'haver-lo superat. + keep_direct: Manté missatges directes + keep_direct_hint: No esborra cap dels teus missatges directes + keep_media: Manté les publicacions amb adjunts multimèdia + keep_media_hint: No esborra cap de les teves publicacions que tinguin adjunts multimèdia + keep_pinned: Manté les publicacions fixades + keep_pinned_hint: No esborra cap de les teves publicacions fixades + keep_polls: Manté enquestes + keep_polls_hint: No esborra cap de les teves enquestes + keep_self_bookmark: Manté les publicacions que has desat a les adreces d'interès + keep_self_bookmark_hint: No esborra les teves pròpies publicacions si les has desat en les adreces d'interès + keep_self_fav: Manté les publicacions que has afavorit + keep_self_fav_hint: No esborra les teves pròpies publicacions si les has afavorit + min_age: + '1209600': 2 setmanes + '15778476': 6 mesos + '2629746': 1 mes + '31556952': 1 any + '5259492': 2 mesos + '63113904': 2 anys + '7889238': 3 mesos + min_age_label: Llindar d'edat + min_favs: Manté les publicacions afavorides més de + min_favs_hint: No suprimeix cap de les teves publicacions que hagin rebut més d'aquesta quantitat de favorits. Deixa-ho en blanc per suprimir publicacions independentment del nombre de favorits que tinguin + min_reblogs: Manté les publicacions impulsades més de + min_reblogs_hint: No suprimeix cap de les teves publicacions que s'hagin impulsat més que aquest número de vegades. Deixa-ho en blanc per suprimir les publicacions independentment del nombre d'impulsos que tinguin stream_entries: pinned: Tut fixat reblogged: ha impulsat diff --git a/config/locales/co.yml b/config/locales/co.yml index 56a8aef17..f2f278678 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -119,14 +119,16 @@ co: demote: Ritrugradà destroyed_msg: I dati di %{username} sò avà in fila d'attesa per esse tolti da quì à pocu disable: Disattivà + disable_sign_in_token_auth: Disattivà l'autentificazione à codice e-mail disable_two_factor_authentication: Disattivà l’identificazione à 2 fattori - disabled: Disattivatu + disabled: Ghjacciatu display_name: Nome pubblicu domain: Duminiu edit: Mudificà email: E-mail email_status: Statutu di l’e-mail enable: Riattivà + enable_sign_in_token_auth: Attivà l'autentificazione à codice e-mail enabled: Attivatu enabled_msg: U contu di %{username} hè statu riattivatu followers: Abbunati @@ -191,6 +193,10 @@ co: search: Cercà search_same_email_domain: Altri utilizatori cù listessu duminiu d'e-mail search_same_ip: Altri utilizatori cù listessa IP + security_measures: + only_password: Solu a chjave d'accessu + password_and_2fa: Chjave d’accessu è A2F + password_and_sign_in_token: Chjave d’accessu è codice da l'e-mail sensitive: Sensibile sensitized: indicatu cum’è sensibile shared_inbox_url: URL di l’inbox spartuta @@ -242,8 +248,10 @@ co: destroy_unavailable_domain: Toglie duminiu micca dispunibule disable_2fa_user: Disattivà l’identificazione à 2 fattori disable_custom_emoji: Disattivà Emoji Persunalizata + disable_sign_in_token_auth_user: Disattivà l'Autentificazione à Codice E-Mail disable_user: Disattivà Utilizatore enable_custom_emoji: Attivà Emoji Persunalizata + enable_sign_in_token_auth_user: Attivà l'Autentificazione à Codice E-Mail enable_user: Attivà utilizatore memorialize_account: Trasfurmà contu in mimuriale promote_user: Prumove Utilizatore @@ -361,32 +369,9 @@ co: updated_msg: L’emoji hè stata messa à ghjornu! upload: Caricà dashboard: - authorized_fetch_mode: Modu ricuperazione auturizata - backlog: travagli in attesa - config: Cunfigurazione - feature_deletions: Sguassamenti di conti - feature_invites: Ligami d'invitazione - feature_profile_directory: Annuariu di i prufili - feature_registrations: Arregistramenti - feature_relay: Ripetitore di federazione - feature_timeline_preview: Vista di a linea pubblica - features: Funziunalità - hidden_service: Federazione cù servizii piattati - open_reports: signalamenti aperti - pending_tags: hashtag in attesa di verificazione - pending_users: utilizatori in attesa di rivista - recent_users: Utilizatori ricenti - search: Ricerca di testu sanu - single_user_mode: Modu utilizatore unicu software: Lugiziale space: Usu di u spaziu title: Quatru di strumenti - total_users: utilizatori in tutale - trends: Tindenze - week_interactions: interazzione sta settimana - week_users_active: attivi sta settimana - week_users_new: utilizatori sta settimana - whitelist_mode: Modu lista bianca domain_allows: add_new: Aghjunghje à a lista bianca created_msg: U duminiu hè statu aghjuntu à a lista bianca @@ -996,6 +981,12 @@ co: lists: errors: limit: Ùn pudete più creà altre liste + login_activities: + authentication_methods: + otp: app d'identificazione à dui fattori + password: chjave d’accessu + sign_in_token: codice di sicurità d'un e-mail + webauthn: chjave di sicurità media_attachments: validations: images_and_video: Ùn si pò micca aghjunghje un filmettu à un statutu chì hà digià ritratti @@ -1273,6 +1264,33 @@ co: public_long: Tuttu u mondu pò vede unlisted: Micca listatu unlisted_long: Tuttu u mondu pò vede, mà micca indè e linee pubbliche + statuses_cleanup: + exceptions: Eccezzione + keep_direct: Cunservà i missaghji diretti + keep_direct_hint: Ùn sguassa micca i vostri missaghji diretti + keep_media: Cunservà i statuti cù fugliali aghjunti + keep_media_hint: Ùn sguassa micca i vostri missaghji chì anu fugliali aghjunti + keep_pinned: Cunservà i statuti puntarulati + keep_pinned_hint: Ùn sguassa micca i vostri missaghji chì sò puntarulati + keep_polls: Cunservà i scandagli + keep_polls_hint: Ùn sguassa micca i vostri missaghji ch'anu scandagli + keep_self_bookmark: Cunservà i statuti ch'avete segnalibrati + keep_self_bookmark_hint: Ùn sguassa micca i vostri propii missaghji s'e voi l'avete aghjunti à i vostri segnalibri + keep_self_fav: Cunservà i statuti ch'avete favurizati + keep_self_fav_hint: Ùn sguassa micca i vostri propii missaghji s'e voi l'avete aghjunti à i vostri favuriti + min_age: + '1209600': 2 settimane + '15778476': 6 mesi + '2629746': 1 mese + '31556952': 1 annu + '5259492': 2 mesi + '63113904': 2 anni + '7889238': 3 mesi + min_age_label: Età minima + min_favs: Cunservà i statuti favurizzati più di + min_favs_hint: Ùn sguassa micca i vostri statuti chì anu ricevuti più chì stu numeru di favuriti. Lasciate viotu per sguassà i statuti senza piglià in contu u numaru di favuriti + min_reblogs: Cunservà i statuti spartuti più di + min_reblogs_hint: Ùn sguassa micca i vostri statuti chì anu ricevuti più chì stu numeru di spartere. Lasciate viotu per sguassà i statuti senza piglià in contu u numaru di spartere stream_entries: pinned: Statutu puntarulatu reblogged: hà spartutu diff --git a/config/locales/cs.yml b/config/locales/cs.yml index c1d44a8be..19428252b 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -46,7 +46,7 @@ cs: rejecting_media: 'Mediální soubory z tohoto serveru nebudou zpracovány a nebudou zobrazeny žádné náhledy. Pro prohlédnutí médií bude třeba manuálně přejít na druhý server:' rejecting_media_title: Filtrovaná média silenced: 'Příspěvky z těchto serverů nebudou zobrazeny ve veřejných časových osách a konverzacích a nebudou generována oznámení o interakcích uživatelů z toho serveru, pokud je nesledujete:' - silenced_title: Ztišené servery + silenced_title: Omezené servery suspended: 'Žádná data z těchto serverů nebudou zpracována, ukládána ani vyměňována, čímž bude znemožněna jakákoliv interakce či komunikace s uživateli z těchto serverů:' suspended_title: Pozastavené servery unavailable_content_html: Mastodon vám obvykle dovoluje prohlížet si obsah a komunikovat s uživateli z jakéhokoliv dalšího serveru ve fedivesmíru. Tohle jsou výjimky, které byly zavedeny na tomto konkrétním serveru. @@ -67,7 +67,7 @@ cs: many: Sledujících one: Sledující other: Sledujících - following: Sledovaní + following: Sledovaných instance_actor_flash: Tento účet je virtuální aktér, který představuje server samotný, nikoliv jednotlivého uživatele. Používá se pro účely federace a neměl by být pozastaven. joined: Uživatelem od %{date} last_active: naposledy aktivní @@ -127,6 +127,7 @@ cs: demote: Degradovat destroyed_msg: Data účtu %{username} jsou nyní ve frontě k okamžitému smazání disable: Zmrazit + disable_sign_in_token_auth: Zrušit ověřování e-mailovým tokenem disable_two_factor_authentication: Vypnout 2FA disabled: Zmrazen display_name: Zobrazované jméno @@ -135,6 +136,7 @@ cs: email: E-mail email_status: Stav e-mailu enable: Rozmrazit + enable_sign_in_token_auth: Povolit ověřování e-mailovým tokenem enabled: Povoleno enabled_msg: Účet %{username} byl úspěšně rozmrazen followers: Sledující @@ -159,8 +161,8 @@ cs: active: Aktivní all: Vše pending: Čekající - silenced: Uživatel ztišen - suspended: Uživatel pozastaven + silenced: Omezené + suspended: Pozastavené title: Moderování moderation_notes: Moderátorské poznámky most_recent_activity: Nejnovější aktivita @@ -199,6 +201,10 @@ cs: search: Hledat search_same_email_domain: Ostatní uživatelé se stejnou e-mailovou doménou search_same_ip: Další uživatelé se stejnou IP adresou + security_measures: + only_password: Pouze heslo + password_and_2fa: Heslo a 2FA + password_and_sign_in_token: Heslo a e-mailový token sensitive: Citlivý sensitized: označen jako citlivý shared_inbox_url: URL sdílené příchozí schránky @@ -216,7 +222,7 @@ cs: title: Účty unconfirmed_email: Nepotvrzený e-mail undo_sensitized: Vrátit zpět citlivost - undo_silenced: Zrušit ztišení + undo_silenced: Zrušit omezení undo_suspension: Zrušit pozastavení unsilenced_msg: Omezení účtu %{username} úspěšně odstraněno unsubscribe: Přestat odebírat @@ -250,8 +256,10 @@ cs: destroy_unavailable_domain: Smazat nedostupnou doménu disable_2fa_user: Vypnout 2FA disable_custom_emoji: Zakázat vlastní emoji + disable_sign_in_token_auth_user: Zrušit uživatelovo ověřování e-mailovým tokenem disable_user: Deaktivovat uživatele enable_custom_emoji: Povolit vlastní emoji + enable_sign_in_token_auth_user: Povolit uživatelovo ověřování e-mailovým tokenem enable_user: Povolit uživatele memorialize_account: Změna na „in memoriam“ promote_user: Povýšit uživatele @@ -260,11 +268,11 @@ cs: reset_password_user: Obnovit heslo resolve_report: Označit hlášení jako vyřešené sensitive_account: Označit média ve vašem účtu jako citlivá - silence_account: Ztišit účet + silence_account: Omezit účet suspend_account: Pozastavit účet unassigned_report: Zrušit přiřazení hlášení unsensitive_account: Zrušit označení médií ve vašem účtu jako citlivých - unsilence_account: Zrušit ztišení účtu + unsilence_account: Zrušit omezení účtu unsuspend_account: Zrušit pozastavení účtu update_announcement: Aktualizovat oznámení update_custom_emoji: Aktualizovat vlastní emoji @@ -293,8 +301,10 @@ cs: destroy_unavailable_domain_html: "%{name} obnovil doručování na doménu %{target}" disable_2fa_user_html: Uživatel %{name} vypnul dvoufázové ověřování pro uživatele %{target} disable_custom_emoji_html: Uživatel %{name} zakázal emoji %{target} + disable_sign_in_token_auth_user_html: Uživatel %{name} zrušil ověřování e-mailovým tokenem pro %{target} disable_user_html: Uživatel %{name} zakázal přihlašování pro uživatele %{target} enable_custom_emoji_html: Uživatel %{name} povolil emoji %{target} + enable_sign_in_token_auth_user_html: Uživatel %{name} povolil ověřování e-mailovým tokenem pro %{target} enable_user_html: Uživatel %{name} povolil přihlašování pro uživatele %{target} memorialize_account_html: Uživatel %{name} změnil účet %{target} na „in memoriam“ stránku promote_user_html: Uživatel %{name} povýšil uživatele %{target} @@ -369,32 +379,34 @@ cs: updated_msg: Emoji úspěšně aktualizováno! upload: Nahrát dashboard: - authorized_fetch_mode: Zabezpečený režim - backlog: nevyřízené úlohy - config: Konfigurace - feature_deletions: Smazání účtů - feature_invites: Zvací odkazy - feature_profile_directory: Adresář profilů - feature_registrations: Registrace - feature_relay: Federovací most - feature_timeline_preview: Náhled časové osy - features: Vlastnosti - hidden_service: Federace se skrytými službami - open_reports: otevřená hlášení - pending_tags: hashtagy čekající na posouzení - pending_users: uživatelé čekající na posouzení - recent_users: Nedávní uživatelé - search: Fulltextové vyhledávání - single_user_mode: Režim jednoho uživatele + active_users: aktivní uživatelé + interactions: interakce + media_storage: Úložiště médií + new_users: noví uživatelé + opened_reports: podáno hlášení + pending_reports_html: + few: "%{count} čekající hlášení" + many: "%{count} čekajících hlášení" + one: "1 čekající hlášení" + other: "%{count} čekající hlášení" + pending_tags_html: + few: "%{count} čekající hashtagy" + many: "%{count} čekajících hashtagů" + one: "1 čekající hashtag" + other: "%{count} čekající hashtagy" + pending_users_html: + few: "%{count} čekající uživatelé" + many: "%{count} čekajících uživatelů" + one: "1 čekající uživatel" + other: "%{count} čekající uživatel" + resolved_reports: vyřešeno hlášení software: Software + sources: Zdroje registrací space: Využití prostoru title: Přehled - total_users: uživatelů celkem - trends: Populární hashtagy - week_interactions: interakcí tento týden - week_users_active: aktivních tento týden - week_users_new: uživatelů tento týden - whitelist_mode: Režim omezené federace + top_languages: Nejaktivnější jazyky + top_servers: Nejaktivnější servery + website: Webová stránka domain_allows: add_new: Povolit federaci s doménou created_msg: S doménou byla úspěšně povolena federace @@ -429,7 +441,7 @@ cs: rejecting_media: odmítají se mediální soubory rejecting_reports: odmítají se hlášení severity: - silence: ztišeno + silence: omezena suspend: pozastaveno show: affected_accounts: @@ -438,7 +450,7 @@ cs: one: Jeden účet v databázi byl ovlivněn other: "%{count} účtů v databázi bylo ovlivněno" retroactive: - silence: Zrušit ztišení existujících ovlivněných účtů z této domény + silence: Vzít zpět omezení existujících dotčených účtů z této domény suspend: Zrušit pozastavení existujících ovlivněných účtů z této domény title: Zrušit blokaci domény %{domain} undo: Odvolat @@ -587,6 +599,7 @@ cs: resolved: Vyřešeno resolved_msg: Hlášení úspěšně vyřešeno! status: Stav + target_origin: Původ nahlášeného účtu title: Hlášení unassign: Odebrat unresolved: Nevyřešeno @@ -990,7 +1003,7 @@ cs: overwrite: Přepsat overwrite_long: Nahradit aktuální záznamy novými preface: Můžete importovat data, která jste exportovali z jiného serveru, jako například seznam lidí, které sledujete či blokujete. - success: Vaše data byla úspěšně nahrána a nyní budou zpracována v daný čas + success: Vaše data byla úspěšně nahrána a budou zpracována v pravý čas types: blocking: Seznam blokovaných bookmarks: Záložky @@ -1026,6 +1039,17 @@ cs: lists: errors: limit: Dosáhli jste maximálního počtu seznamů + login_activities: + authentication_methods: + otp: aplikací pro dvoufaktorové ověření + password: heslem + sign_in_token: e-mailovým bezpečnostním kódem + webauthn: bezpečnostními klíči + description_html: Pokud vidíte aktivitu, kterou nepoznáváte, zvažte změnu hesla a zapnutí dvoufaktorového ověřování. + empty: Není k dispozici žádná historie přihlášení + failed_sign_in_html: Neúspěšný pokus o přihlášení %{method} z %{ip} (%{browser}) + successful_sign_in_html: Úspěšné přihlášení %{method} z %{ip} (%{browser}) + title: Historie přihlášení media_attachments: validations: images_and_video: K příspěvku, který již obsahuje obrázky, nelze připojit video @@ -1056,7 +1080,7 @@ cs: warning: backreference_required: Nový účet musí být nejprve nastaven, aby odkazoval zpátky na tento before: 'Před pokračováním si prosím pečlivě přečtěte tyto poznámky:' - cooldown: Po přesunu nastane období odpočinku, kdy se nebudete moci opět přesunout + cooldown: Po přesunu následuje čekací doba, po kterou se nebudete moci znovu přesunout disabled_account: Váš aktuální účet nebude poté zcela použitelný. Budete však mít přístup k datovým exportům a budete ho moci znovu aktivovat. followers: Touto akcí přesunete všechny sledující z aktuálního účtu na nový only_redirect_html: Alternativně můžete nastavit pouze přesměrování na váš profil. @@ -1236,6 +1260,7 @@ cs: revoke: Zrušit revoke_success: Relace úspěšně zrušena title: Relace + view_authentication_history: Zobrazit historii přihlášení do vašeho účtu settings: account: Účet account_settings: Nastavení účtu @@ -1256,6 +1281,7 @@ cs: preferences: Předvolby profile: Profil relationships: Sledovaní a sledující + statuses_cleanup: Automatické mazání příspěvků two_factor_authentication: Dvoufázové ověřování webauthn_authentication: Bezpečnostní klíče statuses: @@ -1319,6 +1345,40 @@ cs: public_long: Uvidí kdokoliv unlisted: Neuvedené unlisted_long: Uvidí kdokoliv, ale nebude zahrnut ve veřejných časových osách + statuses_cleanup: + enabled: Automaticky mazat staré příspěvky + enabled_hint: Automaticky maže vaše příspěvky poté, co dosáhnou stanoveného stáří, nesplňují-li některou z výjimek níže + exceptions: Výjimky + explanation: Protože je mazání příspěvků nákladná operace, je prováděno pomalu v čase, kdy server není zaneprázdněn ničím jiným. Z tohoto důvodu mohou být vaše příspěvky smazány delší dobu po dosažení stanoveného stáří. + ignore_favs: Ignorovat oblíbení + ignore_reblogs: Ignorovat boosty + interaction_exceptions: Výjimky založené na interakcích + interaction_exceptions_explanation: Upozorňujeme, že není zaručeno smazání příspěvků, které nedosahují stanového počtu oblíbení nebo boostnutí poté, co už byly jednou zkontrolovány. + keep_direct: Zachovat přímé zprávy + keep_direct_hint: Nesmaže žádnou z vašich přímých zpráv + keep_media: Zachovat příspěvky s mediálními přílohami + keep_media_hint: Nesmaže žádný z vašich příspěvků, které mají mediální přílohy + keep_pinned: Zachovat připnuté příspěvky + keep_pinned_hint: Nesmaže žádný z vašich připnutých příspěvků + keep_polls: Zachovat ankety + keep_polls_hint: Nesmaže žádnou z vašich anket + keep_self_bookmark: Zachovat příspěvky, které jste přidali do záložek + keep_self_bookmark_hint: Nesmaže vaše vlastní příspěvky, pokud jste je přidali do záložek + keep_self_fav: Zachovat příspěvky, které jste si oblíbili + keep_self_fav_hint: Nesmaže vaše vlastní příspěvky, pokud jste si je oblíbili + min_age: + '1209600': 2 týdny + '15778476': 6 měsíců + '2629746': 1 měsíc + '31556952': 1 rok + '5259492': 2 měsíce + '63113904': 2 roky + '7889238': 3 měsíce + min_age_label: Hranice stáří + min_favs: Zachovat příspěvky oblíbené alespoň + min_favs_hint: Nesmaže žádný z vašich příspěvků, který obdržel alespoň dané množství oblíbení. Ponechte prázdné pro mazání příspěvků bez ohledu na počet jejich oblíbení + min_reblogs: Zachovat příspěvky boostnuté alespoň + min_reblogs_hint: Nesmaže žádný z vašich příspěvků, který byl boostnut alespoň tolikrát. Ponechte prázdné pro mazání příspěvků bez ohledu na počet jejich boostnutí stream_entries: pinned: Připnutý příspěvek reblogged: boostnul @@ -1488,7 +1548,7 @@ cs: otp_lost_help_html: Pokud jste ztratili přístup k oběma, spojte se s %{email} seamless_external_login: Jste přihlášeni přes externí službu, nastavení hesla a e-mailu proto nejsou dostupná. signed_in_as: 'Přihlášeni jako:' - suspicious_sign_in_confirmation: Zdá se, že se z tohoto zařízení přihlašujete poprvé a po dlouhé době. Pro ověření tohoto přihlášení jsme vám e-mailem zaslali bezpečnostní kód. + suspicious_sign_in_confirmation: Zdá se, že se z tohoto zařízení přihlašujete poprvé, proto pro ověření přihlášení na vaši e-mailovou adresu posíláme bezpečnostní kód. verification: explanation_html: 'Můžete se ověřit jako vlastník odkazů v metadatech profilu. Pro tento účel musí stránka v odkazu obsahovat odkaz zpět na váš profil na Mastodonu. Odkaz zpět musí mít atribut rel="me". Na textu odkazu nezáleží. Zde je příklad:' verification: Ověření diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 942be3b58..8e899ebd0 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -124,6 +124,7 @@ cy: confirm: Cadarnhau confirmed: Cadarnhawyd confirming: Cadarnhau + delete: Dileu data deleted: Wedi dileu demote: Diraddio disable: Diffodd @@ -166,6 +167,7 @@ cy: pending: Yn aros am adolygiad perform_full_suspension: Atal promote: Hyrwyddo + protocol: Protocol public: Cyhoeddus push_subscription_expires: Tanysgrifiad gwthiadwy yn dod i ben redownload: Adnewyddu proffil @@ -296,32 +298,9 @@ cy: updated_msg: Llwyddwyd i ddiweddaru'r emoji! upload: Uwchlwytho dashboard: - authorized_fetch_mode: Modd nôl awdurdodedig - backlog: tasgau heb eu cwblhau - config: Cyfluniad - feature_deletions: Dileadau cyfrif - feature_invites: Dolenni gwahodd - feature_profile_directory: Cyfeiriadur proffil - feature_registrations: Cofrestriadau - feature_relay: Relái ffederasiwn - feature_timeline_preview: Rhagolwg o'r ffrwd - features: Nodweddion - hidden_service: Ffederasiwn a gwasanaethau cudd - open_reports: adroddiadau agored - pending_tags: hashnodau yn aros am adolygiad - pending_users: defnyddwyr yn aros am adolygiad - recent_users: Defnyddwyr diweddar - search: Chwilio testun llawn - single_user_mode: Modd un defnyddiwr software: Meddalwedd space: Defnydd o ofod title: Dangosfwrdd - total_users: cyfanswm defnyddwyr - trends: Tueddiadau - week_interactions: ymadweithiau yr wythnos hon - week_users_active: gweithredol yr wythnos hon - week_users_new: defnyddwyr yr wythnos hon - whitelist_mode: Modd rhestr wen domain_allows: add_new: Rhestrwch parth created_msg: Rhestrwyd wen parth yn llwyddiannus diff --git a/config/locales/da.yml b/config/locales/da.yml index 90e9e008e..128d3ece9 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -119,6 +119,7 @@ da: demote: Degradér destroyed_msg: "%{username}s data er nu i kø til straks at blive slettet" disable: Frys + disable_sign_in_token_auth: Deaktivér e-mailtokengodkendelse disable_two_factor_authentication: Deaktivér 2FA disabled: Frosset display_name: Visningsnavn @@ -127,6 +128,7 @@ da: email: E-mail email_status: E-mailstatus enable: Optø + enable_sign_in_token_auth: Aktivér e-mailtokengodkendelse enabled: Aktiveret enabled_msg: "%{username}s konto er optøet" followers: Følgere @@ -191,6 +193,10 @@ da: search: Søg search_same_email_domain: Andre brugere med det samme e-maildomæne search_same_ip: Andre brugere med den samme IP + security_measures: + only_password: Kun adgangskode + password_and_2fa: Adgangskode og 2FA + password_and_sign_in_token: Adgangskode og e-mailtoken sensitive: Sensitivt sensitized: markeret som sensitivt shared_inbox_url: Delt indbakke-URL @@ -242,8 +248,10 @@ da: destroy_unavailable_domain: Slet Utilgængeligt Domæne disable_2fa_user: Deaktivér 2FA disable_custom_emoji: Deaktivér tilpasset emoji + disable_sign_in_token_auth_user: Deaktivér e-mailtokengodkendelse for bruger disable_user: Deaktivér bruger enable_custom_emoji: Aktivér tilpasset emoji + enable_sign_in_token_auth_user: Aktivér e-mailtokengodkendelse for bruger enable_user: Aktivér brugeren memorialize_account: Gør til mindekonto promote_user: Promovér bruger @@ -285,8 +293,10 @@ da: destroy_unavailable_domain_html: "%{name} genoptog levering til domænet %{target}" disable_2fa_user_html: "%{name} deaktiverede tofaktorkravet for brugeren %{target}" disable_custom_emoji_html: "%{name} deaktiverede humørikonet %{target}" + disable_sign_in_token_auth_user_html: "%{name} deaktiverede e-mailtokengodkendelse for %{target}" disable_user_html: "%{name} deaktiverede indlogning for brugeren %{target}" enable_custom_emoji_html: "%{name} aktiverede humørikonet %{target}" + enable_sign_in_token_auth_user_html: "%{name} aktiverede e-mailtokengodkendelse for %{target}" enable_user_html: "%{name} aktiverede indlogning for brugeren %{target}" memorialize_account_html: "%{name} gjorde %{target}s konto til en mindeside" promote_user_html: "%{name} forfremmede brugeren %{target}" @@ -361,32 +371,27 @@ da: updated_msg: Emoji blev opdateret! upload: Upload dashboard: - authorized_fetch_mode: Sikker tilstand - backlog: ophobede jobs - config: Opsætning - feature_deletions: Kontosletninger - feature_invites: Invitationslinks - feature_profile_directory: Profilliste - feature_registrations: Registreringer - feature_relay: Federationsredistributør - feature_timeline_preview: Tidslinjeforhåndsvisning - features: Funktioner - hidden_service: Federering med skjulte tjenester - open_reports: åbne anmeldelser - pending_tags: hastags afventende revidering - pending_users: brugere afventende revidering - recent_users: Seneste brugere - search: Fuldtekstsøgning - single_user_mode: Enkeltbrugertilstand + active_users: aktive brugere + interactions: interaktioner + media_storage: Medielagerplads + new_users: nye brugere + pending_reports_html: + one: "1 afventende rapport" + other: "%{count} afventende rapporter" + pending_tags_html: + one: "1 afventende hashtag" + other: "%{count} afventende hashtags" + pending_users_html: + one: "1 afventende bruger" + other: "%{count} afventende brugere" + resolved_reports: anmeldelser løst software: Software + sources: Tilmeldingskilder space: Lagerpladsforbrug title: Betjeningspanel - total_users: brugere i alt - trends: Tendenser - week_interactions: interaktioner denne uge - week_users_active: aktive denne uge - week_users_new: brugere denne uge - whitelist_mode: Begrænset federeringstilstand + top_languages: Mest aktive sprog + top_servers: Mest aktive servere + website: Websted domain_allows: add_new: Tillade federering med domæne created_msg: Domæne er blevet tilladt federering @@ -569,6 +574,7 @@ da: resolved: Løst resolved_msg: Anmeldelse er nu løst! status: Status + target_origin: Anmeldte kontos oprindelse title: Anmeldelser unassign: Utildel unresolved: Ikke-løst @@ -1004,6 +1010,17 @@ da: lists: errors: limit: Maks. listeantal nået + login_activities: + authentication_methods: + otp: tofaktorgodkendelses-app + password: adgangskode + sign_in_token: e-mailsikkerhedskode + webauthn: sikkerhedsnøgler + description_html: Bliver der observeret ukendt aktivitet, så overvej at skifte adgangskode samt aktivere tofaktorgodkendelse. + empty: Ingen tilgængelig godkendelseshistorik + failed_sign_in_html: Mislykket indlogning med %{method} fra %{ip} (%{browser}) + successful_sign_in_html: Gennemført indlogning med %{method} fra %{ip} (%{browser}) + title: Godkendelseshistorik media_attachments: validations: images_and_video: En video kan ikke vedhæftes et indlæg med billedindhold @@ -1210,6 +1227,7 @@ da: revoke: Tilbagekald revoke_success: Session tilbagekaldt title: Sessioner + view_authentication_history: Vis godkendelseshistorik for din konto settings: account: Konto account_settings: Kontoindstillinger @@ -1230,6 +1248,7 @@ da: preferences: Præferencer profile: Profil relationships: Følger og følgere + statuses_cleanup: Automatiseret indlægssletning two_factor_authentication: Tofaktorgodkendelse webauthn_authentication: Sikkerhedsnøgler statuses: @@ -1281,6 +1300,40 @@ da: public_long: Alle kan se unlisted: Ulistet unlisted_long: Alle kan se, men er ikke listet på offentlige tidslinjer + statuses_cleanup: + enabled: Slet automatisk gamle indlæg + enabled_hint: Sletter automatisk dine indlæg, når disse når en bestemt alder, medmindre de matcher en af undtagelserne nedenfor + exceptions: Undtagelser + explanation: Sletning af indlæg er en ressourcekrævende operation, hvorfor dette sker gradvist over tid, når serveren ellers ikke er optaget. Dine indlæg kan derfor blive slettet nogen tid efter, at de har passeret aldersgrænsen. + ignore_favs: Ignorér favoritter + ignore_reblogs: Ignorér boosts + interaction_exceptions: Undtagelser baseret på interaktioner + interaction_exceptions_explanation: Bemærk, at der ikke er nogen garanti for at indlæg slettes, hvis de går under favorit- eller boost-tærsklerne efter at have været gået over dem. + keep_direct: Behold direkte besked + keep_direct_hint: Slet ingen af dine direkte beskeder + keep_media: Behold indlæg med medievedhæftninger + keep_media_hint: Sletter ingen af dine indlæg med medievedhæftninger + keep_pinned: Behold fastgjorte indlæg + keep_pinned_hint: Sletter ingen af dine fastgjorte indlæg + keep_polls: Behold afstemninger + keep_polls_hint: Sletter ingen af dine afstemninger + keep_self_bookmark: Behold dine bogmærker + keep_self_bookmark_hint: Sletter ikke egne indlæg, såfremt de er bogmærket + keep_self_fav: Behold indlæg du har foretrukket + keep_self_fav_hint: Sletter ikke egne indlæg, såfremt de er foretrukket + min_age: + '1209600': 2 uger + '15778476': 6 måneder + '2629746': 1 måned + '31556952': 1 år + '5259492': 2 måneder + '63113904': 2 år + '7889238': 3 måneder + min_age_label: Alderstærskel + min_favs: Behold indlæg foretrukket mere end + min_favs_hint: Sletter ingen af dine indlæg, som har modtaget flere end dette antal favoriseringer. Lad stå tomt for at slette indlæg uanset favoriseringsantal + min_reblogs: Behold indlæg boostet flere end + min_reblogs_hint: Sletter ingen af dine indlæg, som er blevet boostet flere end dette antal gange. Lad stå tomt for at slette indlæg uanset deres boosts-antal stream_entries: pinned: Fastgjort indlæg reblogged: boostet diff --git a/config/locales/de.yml b/config/locales/de.yml index cded342f6..4e59f7b34 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -119,6 +119,7 @@ de: demote: Degradieren destroyed_msg: "%{username}'s Daten wurden zum Löschen in die Warteschlange eingereiht" disable: Ausschalten + disable_sign_in_token_auth: Deaktiviere die Zwei-Faktor-Authentifizierung per E-Mail disable_two_factor_authentication: 2FA abschalten disabled: Ausgeschaltet display_name: Anzeigename @@ -127,6 +128,7 @@ de: email: E-Mail email_status: E-Mail-Status enable: Freischalten + enable_sign_in_token_auth: Aktiviere die Zwei-Faktor-Authentifizierung per E-Mail enabled: Freigegeben enabled_msg: "%{username}'s Konto erfolgreich freigegeben" followers: Folgende @@ -191,6 +193,10 @@ de: search: Suche search_same_email_domain: Andere Benutzer mit der gleichen E-Mail-Domain search_same_ip: Andere Benutzer mit derselben IP + security_measures: + only_password: Nur Passwort + password_and_2fa: Passwort und 2FA + password_and_sign_in_token: Passwort und E-Mail-Token sensitive: NSFW sensitized: Als NSFW markieren shared_inbox_url: Geteilte Posteingang-URL @@ -242,8 +248,10 @@ de: destroy_unavailable_domain: Nicht verfügbare Domain löschen disable_2fa_user: 2FA deaktivieren disable_custom_emoji: Benutzerdefiniertes Emoji deaktivieren + disable_sign_in_token_auth_user: Zwei-Faktor-Authentifizierung per E-Mail für den Nutzer deaktiviert disable_user: Benutzer deaktivieren enable_custom_emoji: Benutzerdefiniertes Emoji aktivieren + enable_sign_in_token_auth_user: Zwei-Faktor-Authentifizierung per E-Mail für den Nutzer aktiviert enable_user: Benutzer aktivieren memorialize_account: Account deaktivieren promote_user: Benutzer befördern @@ -285,8 +293,10 @@ de: destroy_unavailable_domain_html: "%{name} setzte die Lieferung an die Domain %{target} fort" disable_2fa_user_html: "%{name} hat Zwei-Faktor-Anforderung für Benutzer_in %{target} deaktiviert" disable_custom_emoji_html: "%{name} hat das %{target} Emoji deaktiviert" + disable_sign_in_token_auth_user_html: "%{name} hat die E-Mail-Token Authentifizierung für %{target} deaktiviert" disable_user_html: "%{name} hat Zugang von Benutzer_in %{target} deaktiviert" enable_custom_emoji_html: "%{name} hat das %{target} Emoji aktiviert" + enable_sign_in_token_auth_user_html: "%{name} hat die E-Mail-Token Authentifizierung für %{target} aktiviert" enable_user_html: "%{name} hat Zugang von Benutzer_in %{target} aktiviert" memorialize_account_html: "%{name} hat das Konto von %{target} in eine Gedenkseite umgewandelt" promote_user_html: "%{name} hat %{target} befördert" @@ -361,32 +371,9 @@ de: updated_msg: Emoji erfolgreich aktualisiert! upload: Hochladen dashboard: - authorized_fetch_mode: Autorisierter Abruf-Modus - backlog: Rückständige Jobs - config: Konfiguration - feature_deletions: Kontolöschung - feature_invites: Einladungen - feature_profile_directory: Profilverzeichnis - feature_registrations: Offene Anmeldung - feature_relay: Föderationsrelais - feature_timeline_preview: Zeitleistenvorschau - features: Funktionen - hidden_service: Föderation mit versteckten Diensten - open_reports: Ausstehende Meldungen - pending_tags: Hashtags, die auf eine Überprüfung warten - pending_users: Benutzer, die auf eine Überprüfung warten - recent_users: Neueste Nutzer - search: Volltextsuche - single_user_mode: Einzelnutzermodus software: Software space: Speicherverbrauch title: Übersicht - total_users: Benutzer insgesamt - trends: Trends - week_interactions: Interaktionen diese Woche - week_users_active: Aktiv diese Woche - week_users_new: Benutzer diese Woche - whitelist_mode: Whitelist-Modus domain_allows: add_new: Whitelist-Domain created_msg: Domain wurde erfolgreich zur Whitelist hinzugefügt @@ -569,6 +556,7 @@ de: resolved: Gelöst resolved_msg: Meldung erfolgreich gelöst! status: Zustand + target_origin: Domain des gemeldeten Kontos title: Meldungen unassign: Zuweisung entfernen unresolved: Ungelöst @@ -1004,6 +992,17 @@ de: lists: errors: limit: Du hast die maximale Anzahl an Listen erreicht + login_activities: + authentication_methods: + otp: Zwei-Faktor-Authentifizierung-App + password: Passwort + sign_in_token: E-Mail Sicherheitscode + webauthn: Sicherheitsschlüssel + description_html: Wenn du Aktivitäten siehst, die du nicht erkennst, solltest du dein Passwort ändern und die Zwei-Faktor-Authentifizierung aktivieren. + empty: Kein Authentifizierungsverlauf verfügbar + failed_sign_in_html: Fehler beim Anmeldeversuch mit %{method} von %{ip} (%{browser}) + successful_sign_in_html: Erfolgreiche Anmeldung mit %{method} von %{ip} (%{browser}) + title: Authentifizierungsverlauf media_attachments: validations: images_and_video: Es kann kein Video an einen Beitrag, der bereits Bilder enthält, angehängt werden @@ -1108,7 +1107,7 @@ de: wrong_code: Der eingegebene Code war ungültig! Sind die Serverzeit und die Gerätezeit korrekt? pagination: newer: Neuer - next: Vorwärts + next: Weiter older: Älter prev: Zurück truncate: "…" @@ -1210,6 +1209,7 @@ de: revoke: Schließen revoke_success: Sitzung erfolgreich geschlossen title: Sitzungen + view_authentication_history: Authentifizierungsverlauf deines Kontos anzeigen settings: account: Konto account_settings: Konto & Sicherheit @@ -1230,6 +1230,7 @@ de: preferences: Einstellungen profile: Profil relationships: Folgende und Gefolgte + statuses_cleanup: Automatisches Beitraglöschen two_factor_authentication: Zwei-Faktor-Auth webauthn_authentication: Sicherheitsschlüssel statuses: @@ -1281,6 +1282,40 @@ de: public_long: Für alle sichtbar unlisted: Nicht gelistet unlisted_long: Für alle sichtbar, aber nicht in öffentlichen Zeitleisten aufgelistet + statuses_cleanup: + enabled: Automatisch alte Beiträge löschen + enabled_hint: Löscht automatisch deine Beiträge, sobald sie einen bestimmten Altersgrenzwert erreicht haben, es sei denn, sie entsprechen einer der folgenden Ausnahmen + exceptions: Ausnahmen + explanation: Da das Löschen von Beiträgen eine kostspielige Operation ist, geschieht dies langsam im Laufe der Zeit, wenn der Server sonst nicht beschäftigt ist. Aus diesem Grund können deine Beiträge gelöscht werden, eine Weile nachdem sie die Altersgrenze erreicht haben. + ignore_favs: Favoriten ignorieren + ignore_reblogs: Boosts ignorieren + interaction_exceptions: Ausnahmen basierend auf Interaktionen + interaction_exceptions_explanation: Beachte, dass es keine Garantie für das Löschen von Beiträgen gibt, wenn sie nach einem Übertritt des Favoriten- oder Boost-Schwellenwert wieder unter diesen fallen. + keep_direct: Direktnachrichten behalten + keep_direct_hint: Löscht keine deiner Direktnachrichten + keep_media: Beiträge mit Medienanhängen behalten + keep_media_hint: Löscht keine Ihrer Beiträge mit Medienanhängen + keep_pinned: Angeheftete Beiträge behalten + keep_pinned_hint: Löscht keine deiner angehefteten Beiträge + keep_polls: Umfragen behalten + keep_polls_hint: Löscht keine deiner Umfragen + keep_self_bookmark: Als Lesezeichen markierte Beiträge behalten + keep_self_bookmark_hint: Löscht nicht deine eigenen Beiträge, wenn du sie als Lesezeichen markiert hast + keep_self_fav: Behalte die von dir favorisierten Beiträge + keep_self_fav_hint: Löscht nicht deine eigenen Beiträge, wenn du sie favorisiert hast + min_age: + '1209600': 2 Wochen + '15778476': 6 Monate + '2629746': 1 Monat + '31556952': 1 Jahr + '5259492': 2 Monate + '63113904': 2 Jahre + '7889238': 3 Monate + min_age_label: Altersgrenze + min_favs: Behalte Beiträge, die öfter favorisiert wurden als + min_favs_hint: Löscht keine deiner Beiträge, die mehr als diese Anzahl an Favoriten erhalten haben. Leer lassen, um Beiträge zu löschen, unabhängig von ihrer Anzahl an Favoriten + min_reblogs: Behalte Beiträge, die öfter geteilt wurden als + min_reblogs_hint: Löscht keine deiner Beiträge, die mehr als diese Anzahl geteilt wurden. Lasse leer, um Beiträge zu löschen, unabhängig von ihrer Anzahl an Boosts stream_entries: pinned: Angehefteter Beitrag reblogged: teilte diff --git a/config/locales/devise.br.yml b/config/locales/devise.br.yml index 95b9c1cbc..dc4a650e4 100644 --- a/config/locales/devise.br.yml +++ b/config/locales/devise.br.yml @@ -36,13 +36,22 @@ br: two_factor_enabled: title: 2FA gweredekaet passwords: + updated: Cheñchet eo bet ho ker-tremen gant berzh. Bremañ oc'h anavezadennet. updated_not_active: Kemmet eo bet ho ker-tremen ent reizh. registrations: + destroyed: Kenavo! Ho kont a zo bet nullet gant berzh. Emichañs e viot adwelet tuchant. signed_up: Donemat ! Kevreet oc'h. + signed_up_but_inactive: Enskrivet oc'h bet gant berzh. N'omp ket evit anavezadenniñ ac'hanoc'h alatao, rak ho kont n'eo ket aotreet c'hoazh. + signed_up_but_locked: Enskrivet oc'h bet gant berzh. N'omp ket evit anavezadenniñ ac'hanoc'h alatao, rak ho kont a zo prennet. sessions: already_signed_out: Digennasket gant berzh. signed_in: Kennasket gant berzh. signed_out: Digennasket gant berzh. + unlocks: + unlocked: Ho kont a zo bet dibrennet gant berzh. Anavezadennit evit mont-tre. errors: messages: + already_confirmed: a zo bet kadarnaet dija, klaskit d'en em anavezadenniñ + confirmation_period_expired: eo ret bezañ kadarnaet a-raok %{period}, goulennit unan all mar plij not_found: digavet + not_locked: ne oa ket prennet diff --git a/config/locales/devise.fi.yml b/config/locales/devise.fi.yml index 3716bf4af..7637ae3e1 100644 --- a/config/locales/devise.fi.yml +++ b/config/locales/devise.fi.yml @@ -60,6 +60,23 @@ fi: title: 2FA palautuskoodit vaihdettu unlock_instructions: subject: 'Mastodon: Ohjeet lukituksen poistoon' + webauthn_credential: + added: + explanation: Seuraava suojausavain on lisätty tilillesi + subject: 'Mastodon: Uusi suojausavain' + title: Uusi suojausavain on lisätty + deleted: + explanation: Seuraava suojausavain on poistettu tililtäsi + subject: 'Mastodon: Suojausavain poistettu' + title: Yksi suojausavaimistasi on poistettu + webauthn_disabled: + explanation: Suojausavaimilla todennus on poistettu käytöstä tililtäsi. Kirjautuminen on nyt mahdollista käyttämällä vain paritetun TOTP-sovelluksen luomaa tokenia. + subject: 'Mastodon: Todennus suoja-avaimilla poistettu käytöstä' + title: Suojausavaimet poistettu käytöstä + webauthn_enabled: + explanation: Todennus suojausavaimella on otettu käyttöön tililläsi. Suojausavaintasi voidaan nyt käyttää kirjautumiseen. + subject: 'Mastodon: Todennus suojausavaimella on otettu käyttöön' + title: Suojausavaimet käytössä omniauth_callbacks: failure: Tunnistautuminen lähteestä %{kind} ei onnistunut, koska "%{reason}". success: Tunnistautuminen tililtä %{kind} onnistui. diff --git a/config/locales/devise.fr.yml b/config/locales/devise.fr.yml index b918b7fb2..41ec75856 100644 --- a/config/locales/devise.fr.yml +++ b/config/locales/devise.fr.yml @@ -6,7 +6,7 @@ fr: send_instructions: Vous allez recevoir par courriel les instructions nécessaires à la confirmation de votre compte dans quelques minutes. Veuillez, dans le cas où vous ne recevriez pas ce message, vérifier votre dossier d’indésirables. send_paranoid_instructions: Si votre adresse électronique existe dans notre base de données, vous allez bientôt recevoir un courriel contenant les instructions de confirmation de votre compte. Veuillez, dans le cas où vous ne recevriez pas ce message, vérifier votre dossier d’indésirables. failure: - already_authenticated: Vous êtes déjà connecté⋅e. + already_authenticated: Vous êtes déjà connecté. inactive: Votre compte n’est pas encore activé. invalid: "%{authentication_keys} ou mot de passe invalide." last_attempt: Vous avez droit à une dernière tentative avant que votre compte ne soit verrouillé. @@ -24,15 +24,15 @@ fr: explanation_when_pending: Vous avez demandé à vous inscrire à %{host} avec cette adresse de courriel. Une fois que vous aurez confirmé cette adresse, nous étudierons votre demande. Vous ne pourrez pas vous connecter d’ici-là. Si votre demande est refusée, vos données seront supprimées du serveur, aucune action supplémentaire de votre part n’est donc requise. Si vous n’êtes pas à l’origine de cette demande, veuillez ignorer ce message. extra_html: Merci de consultez également les règles du serveur et nos conditions d’utilisation. subject: 'Mastodon : Merci de confirmer votre inscription sur %{instance}' - title: Vérifier l’adresse courriel + title: Vérifiez l’adresse courriel email_changed: explanation: 'L’adresse courriel de votre compte est en cours de modification pour devenir :' - extra: Si vous n’avez pas changé votre adresse courriel, il est probable que quelqu’un ait eu accès à votre compte. Veuillez changer votre mot de passe immédiatement ou contacter l’administrateur·rice du serveur si vous êtes bloqué·e hors de votre compte. + extra: Si vous n’avez pas changé votre adresse courriel, il est probable que quelqu’un ait eu accès à votre compte. Veuillez changer votre mot de passe immédiatement ou contacter l’administrateur du serveur si vous êtes bloqué hors de votre compte. subject: 'Mastodon : Courriel modifié' title: Nouvelle adresse courriel password_change: explanation: Le mot de passe de votre compte a été changé. - extra: Si vous n’avez pas changé votre mot de passe, il est probable que quelqu’un ait eu accès à votre compte. Veuillez changer votre mot de passe immédiatement ou contacter l’administrateur·rice du serveur si vous êtes bloqué·e hors de votre compte. + extra: Si vous n’avez pas changé votre mot de passe, il est probable que quelqu’un ait eu accès à votre compte. Veuillez changer votre mot de passe immédiatement ou contacter l’administrateur du serveur si vous êtes bloqué hors de votre compte. subject: 'Mastodon : Votre mot de passe a été modifié avec succès' title: Mot de passe modifié reconfirmation_instructions: @@ -56,7 +56,7 @@ fr: 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' + subject: 'Mastodon : codes de récupération à deux facteurs régénérés' title: Codes de récupération 2FA modifiés unlock_instructions: subject: 'Mastodon : Instructions pour déverrouiller votre compte' @@ -84,32 +84,32 @@ fr: no_token: Vous ne pouvez accéder à cette page sans passer par un courriel de réinitialisation de mot de passe. Si vous êtes passé⋅e par un courriel de ce type, assurez-vous d’utiliser l’URL complète. send_instructions: Vous allez recevoir les instructions de réinitialisation du mot de passe dans quelques instants. Veuillez, dans le cas où vous ne recevriez pas ce message, vérifier votre dossier d’indésirables. send_paranoid_instructions: Si votre adresse électronique existe dans notre base de données, vous allez recevoir un lien de réinitialisation par courriel. Veuillez, dans le cas où vous ne recevriez pas ce message, vérifier votre dossier d’indésirables. - updated: Votre mot de passe a été modifié avec succès, vous êtes maintenant connecté·e. + updated: Votre mot de passe a été modifié avec succès, vous êtes maintenant connecté. updated_not_active: Votre mot de passe a été modifié avec succès. registrations: destroyed: Au revoir ! Votre compte a été supprimé avec succès. Nous espérons vous revoir bientôt. - signed_up: Bienvenue ! Vous êtes connecté·e. - signed_up_but_inactive: Vous êtes bien enregistré·e. Vous ne pouvez cependant pas vous connecter car votre compte n’est pas encore activé. - signed_up_but_locked: Vous êtes bien enregistré·e. Vous ne pouvez cependant pas vous connecter car votre compte est verrouillé. - signed_up_but_pending: Un message avec un lien de confirmation a été envoyé à votre adresse courriel. Après avoir cliqué sur le lien, nous examinerons votre demande. Vous serez informé·e si elle a été approuvée. + signed_up: Bienvenue ! Vous êtes connecté. + signed_up_but_inactive: Vous êtes bien enregistré. Vous ne pouvez cependant pas vous connecter car votre compte n’est pas encore activé. + signed_up_but_locked: Vous êtes bien enregistré. Vous ne pouvez cependant pas vous connecter car votre compte est verrouillé. + signed_up_but_pending: Un message avec un lien de confirmation a été envoyé à votre adresse courriel. Après avoir cliqué sur le lien, nous examinerons votre demande. Vous serez informé si elle a été approuvée. signed_up_but_unconfirmed: Un message contenant un lien de confirmation a été envoyé à votre adresse courriel. Ouvrez ce lien pour activer votre compte. Veuillez vérifier votre dossier d'indésirables si vous ne recevez pas le courriel. update_needs_confirmation: Votre compte a bien été mis à jour, mais nous devons vérifier votre nouvelle adresse courriel. Merci de vérifier vos courriels et de cliquer sur le lien de confirmation pour finaliser la validation de votre nouvelle adresse. Si vous n'avez pas reçu le courriel, vérifiez votre dossier de spams. updated: Votre compte a été modifié avec succès. sessions: already_signed_out: Déconnecté·e. - signed_in: Connecté·e. - signed_out: Déconnecté·e. + signed_in: Connecté. + signed_out: Déconnecté. unlocks: send_instructions: Vous allez recevoir les instructions nécessaires au déverrouillage de votre compte dans quelques instants. Veuillez, dans le cas où vous ne recevriez pas ce message, vérifier votre dossier d’indésirables. send_paranoid_instructions: Si votre compte existe, vous allez bientôt recevoir un courriel contenant les instructions pour le déverrouiller. Veuillez, dans le cas où vous ne recevriez pas ce message, vérifier votre dossier d’indésirables. - unlocked: Votre compte a été déverrouillé avec succès, vous êtes maintenant connecté·e. + unlocked: Votre compte a été déverrouillé avec succès, vous êtes maintenant connecté. errors: messages: already_confirmed: a déjà été validée, veuillez essayer de vous connecter confirmation_period_expired: à confirmer dans les %{period}, merci de faire une nouvelle demande expired: a expiré, merci d’en faire une nouvelle demande - not_found: n’a pas été trouvé·e - not_locked: n’était pas verrouillé·e + not_found: n’a pas été trouvé + not_locked: n’était pas verrouillé not_saved: - one: 'Une erreur a empêché ce·tte %{resource} d’être sauvegardé·e :' - other: "%{count} erreurs ont empêché %{resource} d’être sauvegardé⋅e :" + one: 'Une erreur a empêché cette %{resource} d’être sauvegardé :' + other: "%{count} erreurs ont empêché %{resource} d’être sauvegardé :" diff --git a/config/locales/devise.hu.yml b/config/locales/devise.hu.yml index d05985f4d..24aa076ee 100644 --- a/config/locales/devise.hu.yml +++ b/config/locales/devise.hu.yml @@ -12,7 +12,7 @@ hu: last_attempt: Már csak egy próbálkozásod maradt, mielőtt a fiókodat zároljuk. locked: A fiókodat zároltuk. not_found_in_database: Helytelen %{authentication_keys} vagy jelszó. - pending: A fiókod még felülvizsgálat alatt áll. + pending: A fiókod felülvizsgálat alatt áll, még mielőtt használhatnád. timeout: A munkameneted lejárt. Kérjük, a folytatáshoz jelentkezz be újra. unauthenticated: A folytatás előtt be kell jelentkezned vagy regisztrálnod kell. unconfirmed: A folytatás előtt meg kell erősítened az e-mail címed. diff --git a/config/locales/devise.kmr.yml b/config/locales/devise.kmr.yml new file mode 100644 index 000000000..14528ff62 --- /dev/null +++ b/config/locales/devise.kmr.yml @@ -0,0 +1,119 @@ +--- +kmr: + devise: + confirmations: + confirmed: Navnîşana te ya e-nameyê bi awayekî serkeftî hat piştrastkirin. + send_instructions: Çend xulek şûnde ji bo navnîşana e-name ya te çawa were pejirandinê, tu yê e-name yek hildî. Heke ev e-name yê hilnedî ji kerema xwe re peldanka nexwestî binêre. + send_paranoid_instructions: Heger navnîşana e-name ya te danegeha me de hebe çend xulek şûnde ji bo navnîşana e-name ya te çawa were pejirandinê, tu yê e-name yek hildî. Heke ev e-name yê hilnedî ji kerema xwe re peldanka nexwestî binêrin. + failure: + already_authenticated: Jixwe te berê têketin kiriye. + inactive: Ajimêra te hîn nehatiye çalakkirin. + invalid: Nederbasdar %{authentication_keys} an jî şîfre. + last_attempt: Peşiya kilît kirina ajimêra te carek din jî biceribîne. + locked: Ajimêra ye hat kilît kirin. + not_found_in_database: Nederbasdar %{authentication_keys} an jî şîfre. + pending: Ajimêra te hîn tê vekolandin. + timeout: Danişîna te qedîya. Ji kerema xwe ji bo berdewamiyê dîsa têkeve. + unauthenticated: Peşiya berdewamiya te têketina xwe bike an jî xwe tomar bike. + unconfirmed: Peşiya berdewamiyê, navnîşana e-name ya xwe bipejirîne. + mailer: + confirmation_instructions: + action: Navnîşana e-nameyê piştrast bike + action_with_app: Piştrast bike û vegere bo %{app} + explanation: Te li ser %{host} ajimêrek çê kiriye bi navnîşana vê e-nameyê re. Tu ji çalakkirina wê bi tikandinekê dûr î. Heke ev ne tu bûya, ji kerema xwe guh nede vê e-nameyê. + explanation_when_pending: |- + Te bi vê navnîşana e -nameyê serlêdana vexwendina %{host} kir. Gava ku tu navnîşana e-nameya xwe piştrast bikî, em ê serlêdana te binirxînin. Tu dikarî têkevî da ku hûrguliyên xwe biguherînî an ajimêra xwe jê bibî, lê heya ku ajimêra te neyê pejirandin tu nekarî piraniya fonksiyonan bi kar bînî + Heke serlêdana te werê red kirin, dê daneyên te werin jêbirin, ji ber vê yekê çalakîyek din ji te nayê xwestin. Heke ev ne tu bû, ji kerema xwe guh nede vê e-nameyê. + extra_html: Jkx vê jî kontrol bike rêbazên rajekar û mercên me yên karûbaran. + subject: 'Mastodon: ji bo %{instance} pejirandinê rêwerzan' + title: Navnîşana e-nameyê piştrast bike + email_changed: + explanation: 'Navnîşana e-nameyê ajimêra te hate guhertin bo:' + extra: Heke te ajimêra xwe ne guhertiye. Ew tê wateya ku kesek ketiye ajimêrê te. Jkx pêborîna xwe zû biguherîne an jî bi rêveberiya rajekar re têkeve têkiliyê heke tu êdî nikare ajimêra xwe bi kar bînî. + subject: 'Mastodon: E-name hate guhertin' + title: Navnîşana e-nameya nû + password_change: + explanation: Pêborîna ajimêra te hate guhertin. + extra: Heke te ajimêra xwe ne guhertiye. Ew tê wateya ku kesek ketiye ajimêrê te. Jkx pêborîna xwe zû biguherîne an jî bi rêveberiya rajekar re têkeve têkiliyê heke tu êdî nikare ajimêra xwe bi kar bînî. + subject: 'Mastodon: pêborîn hate guhertin' + title: Pêborîn hate guhertin + reconfirmation_instructions: + explanation: Navnîşana nû piştrast bike da ku tu e-nameya xwe biguherînî. + extra: |- + Heke ev daxwaz ji aliyê te de nehate pêkanîn, jkx guh nede vê e-nameyê + Navnîşana e-nameyê bo ajimêra Mastodon wê tu guhertin pêk neyîne heya ku tu li girêdana Jêrin bitikînî. + subject: 'Mastodon: E-nameyê piştrast bike bo %{instance}' + title: Navnîşana e-nameyê piştrast bike + reset_password_instructions: + action: Pêborînê biguherîne + explanation: Te ji bo ajimêra xwe daxwaza pêborîneke nû kiriye. + extra: Heke te ev daxwaz nekir, jkx guh nede vê e-nameyê. Pêborîna te wê neyê guhertin heya ku tu li girêdana Jêrin bitikînî û yeka nû çê bikî. + subject: 'Mastodon: rêwerzên jê birina pêborîn' + title: Pêborîn 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 û şîfre ya 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: + explanation: Kodên paşve hatiye rizgarkirin betal bû û yên nû hat çêkirin. + subject: 'Mastodon: kodên rizgarkirî ên du-faktorî dîsa hat avakirin' + title: Kodê 2FA ya rizgarkirinê hatine guhertin + unlock_instructions: + subject: 'Mastodon: kilîdê rêwerzan veke' + webauthn_credential: + added: + explanation: Kilîta ewlehiyê jêrîn li ajimêra te hate tevlîkirin + subject: Kilîta ewlehiyê ya nû + title: Kilîta ewlehiyê ya nû hate tevlîkirin + deleted: + explanation: Kilîta ewlehiyê jêrîn li ajimêra te hate jêbirin + 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: + failure: Nikare ji %{kind} rastandinê bikê ji bo " %{reason}". + success: Ji ajimêra %{kind} bi serkeftî hate rastandin. + passwords: + no_token: Tu nikarî xwe bigihînî vê rûpelê bêyî ku tu ji e-nameya ji nû ve sazkirina pêborînê wernegerî. Heke tu ji e-nameya ji nû ve sazkirina pêborînê tê, ji kerema xwe pê ewle be ku tu girêdanê ya tevahî bi kar tînî. + send_instructions: Heke navnîşana te ya e-nameyê di danegeha me da hebê, tu yê di navnîşana xwe ya e-nameyê da girêdana rizgarkirina pêborînê bistînî. Heke te ev e-name wernegirtibe, ji kerema xwe peldanka xwe ya spamê kontrol bike. + send_paranoid_instructions: Heke navnîşana te ya e-nameyê di danegeha me da hebê, tu yê di navnîşana xwe ya e-nameyê da girêdana rizgarkirina pêborînê bistînî di hundir çend xulkan de. Heke te ev e-name wernegirtibe, ji kerema xwe peldanka xwe ya spamê kontrol bike. + updated: Pêborîna te bi serkeftî hate guhertin. Niha tu têketî ye. + updated_not_active: Pêborîna te bi serkeftî hate guhertin. + registrations: + destroyed: Xatirê te! Ajimêra te bi serkeftî hate pûçkirin. Em hêvî dikin ku tu di nêzîk de te dîsa bibînin. + signed_up: Bi xêr hatî! Te bi serkeftî tomarkirin kir. + signed_up_but_inactive: Te bi serkeftî tomarkirin kir. lê piştî ku tu çalak bikî em dikarin ku tu têketinê bikî. + signed_up_but_locked: Te bi serkeftî tomarkirin kir. lê ajimêra te girtiye ber wê tu nikarî ku têketinê bikî. + signed_up_but_pending: Peyamek bi girêda pejirandinê ji navnîşana e-nameya te re hate şandin. Piştî ku tu girêdanê bitikînî, em ê serlêdana te binirxînin. Heke werê pejirandin tu yê bê agahdarkirin. + signed_up_but_unconfirmed: Peyamek bi girêda pejirandinê ji navnîşana e-nameya te re hate şandin. Ji kerema xwe girêdanê bişopîne da ku tu ajimêra xwe çalak bikî. Ji kerema xwe heke te ev e-name nestand peldanka spama xwe kontrol bike. + update_needs_confirmation: Te ajimêra xwe bi awayekî serkeftî rojane kir, lê pêdiviya me bi kontrolkirina navnîşana e -nameya te ya nû heye. Ji kerema xwe e -nameya xwe kontrol bike û girêdana piştrastkirinê bişopîne da ku navnîşana e -nameya xwe ya nû piştrast bikî. Ji kerema xwe heke te ev e -name nestand peldanka spama xwe kontrol bike. + updated: Ajimêra te bi awayekî serkeftî hate rojanekirin. + sessions: + already_signed_out: Derketina te serkeftî bû. + signed_in: Têketina te serkeftî bû. + signed_out: Derketina te serkeftî bû. + unlocks: + send_instructions: Çend xulek şûnde ji bo navnîşana e-name ya te çawa were pejirandinê, tu yê e-name yek hildî. Heke ev e-name yê hilnedî ji kerema xwe re peldanka nexwestî binêrin. + send_paranoid_instructions: Hek ajimêra te hebe, tu yê e-nameyeke bi zanyariyan bistînî ka mirov çawa di çend xulekan de ajimêr vedikê. Ji kerema xwe heke te ev e-name nestand peldanka spama xwe kontrol bike. + unlocked: Ajimêra te bi serkeftî vebû. Ji kerema xwe têkeve da ku tu bidomînî. + errors: + messages: + already_confirmed: jixwe hate pejirandin, ji kerema xwe têketinê biceribîne + confirmation_period_expired: pêdivî ye ku di nav %{period} de werê pejirandin, ji kerema xwe yeka nû bixwaze + expired: qediya ye, ji kerema xwe yeka nû bixwaze + not_found: nehate dîtin + not_locked: ne girtî bû + not_saved: + one: '1 çewtî nehişt ku %{resource} werê tomarkirin:' + other: "%{count} çewtî nehişt ku %{resource} werê tomarkirin:" diff --git a/config/locales/devise.ko.yml b/config/locales/devise.ko.yml index 92cda21ef..570377f8a 100644 --- a/config/locales/devise.ko.yml +++ b/config/locales/devise.ko.yml @@ -2,7 +2,7 @@ ko: devise: confirmations: - confirmed: 이메일이 성공적으로 확인 되었습니다. + confirmed: 이메일이 성공적으로 승인 되었습니다. send_instructions: 몇 분 이내로 확인 이메일이 발송 됩니다. 이메일을 받지 못 한 경우, 스팸 폴더를 확인하세요. send_paranoid_instructions: 당신의 이메일이 우리의 DB에 있을 경우 몇 분 이내로 확인 메일이 발송 됩니다. 이메일을 받지 못 한 경우, 스팸 폴더를 확인하세요. failure: diff --git a/config/locales/devise.lv.yml b/config/locales/devise.lv.yml index 1be0eabc0..365ecdabe 100644 --- a/config/locales/devise.lv.yml +++ b/config/locales/devise.lv.yml @@ -1 +1,116 @@ +--- lv: + devise: + confirmations: + confirmed: Tava e-pasta adrese ir veiksmīgi apstiprināta. + send_instructions: Pēc dažām minūtēm jūs saņemsi e-pastu ar norādījumiem, kā apstiprināt savu e -pasta adresi. Lūdzu, pārbaudi surogātpasta mapi, ja neesi saņēmis šo e-pastu. + send_paranoid_instructions: Ja tava e-pasta adrese ir mūsu datu bāzē, pēc dažām minūtēm saņemsi e-pastu ar norādījumiem, kā apstiprināt savu e-pasta adresi. Lūdzu, pārbaudi surogātpasta mapi, ja neesi saņēmis šo e-pastu. + failure: + already_authenticated: Jau esi pierakstījies. + inactive: Tavs konts vēl nav aktivizēts. + invalid: Nederīga %{authentication_keys} vai parole. + last_attempt: Tev ir vēl viens mēģinājums, pirms tavs konts tiks bloķēts. + locked: Tavs konts ir bloķēts. + not_found_in_database: Nederīga %{authentication_keys} vai parole. + pending: Tavs konts joprojām tiek pārskatīts. + timeout: Tava sesija ir beigusies. Lūdzu, pieraksties vēlreiz, lai turpinātu. + unauthenticated: Lai turpinātu, tev ir jāpierakstās vai jāreģistrējas. + unconfirmed: Lai turpinātu, tev ir jāapstiprina savu e-pasta adresi. + mailer: + confirmation_instructions: + action: Apstiprini savu e-pasta adresi + action_with_app: Apstiprini un atgriezies %{app} + explanation: Ar šo e-pasta adresi esi izveidojis kontu vietnē %{host}. Tu esi viena klikšķa attālumā no tā aktivizēšanas. Ja tas nebiji tu, lūdzu, ignorē šo e-pasta ziņojumu. + explanation_when_pending: Tu pieteicies uzaicinājumam uz %{host} ar šo e-pasta adresi. Kad būsi apstiprinājis savu e-pasta adresi, mēs izskatīsim pieteikumu. Tu vari pieteikties, lai mainītu savu informāciju vai dzēstu savu kontu, taču nevari piekļūt lielākajai daļai funkciju, kamēr tavs konts nav apstiprināts. Ja tavs pieteikums tiks noraidīts, tavi dati tiks noņemti, tāpēc tev nebūs jāveic nekādas darbības. Ja tas nebiji tu, lūdzu, ignorē šo e-pasta ziņojumu. + extra_html: Lūdzu, pārbaudi arī servera nosacījumus un mūsu pakalpojumu sniegšanas noteikumi. + subject: 'Mastodon: Apstiprināšanas norādījumi %{instance}' + title: Apstiprini savu e-pasta adresi + email_changed: + explanation: 'Tava konta e-pasta adrese tiek mainīta uz:' + extra: Ja neesi mainījis savu e-pasta adresi, iespējams, kāds ir ieguvis piekļuvi tavam kontam. Lūdzu, nekavējoties nomaini paroli vai sazinies ar servera administratoru, ja nevari piekļūt savam kontam. + subject: 'Mastodon: E-pasts nomainīts' + title: Jaunā e-pasta adrese + password_change: + explanation: Tava konta parole ir nomainīta. + extra: Ja neesi mainījis savu paroli, iespējams, kāds ir ieguvis piekļuvi tavam kontam. Lūdzu, nekavējoties nomaini paroli vai sazinies ar servera administratoru, ja nevari piekļūt savam kontam. + subject: 'Mastodon: Parole ir nomainīta' + title: Parole nomainīta + reconfirmation_instructions: + explanation: Apstiprini jauno adresi, lai mainītu savu e-pastu. + extra: Ja šīs izmaiņas neesi veicis tu, lūdzu, ignorē šo e-pasta ziņojumu. Mastodon konta e-pasta adrese nemainīsies, kamēr nebūsi piekļuvis iepriekš norādītajai saitei. + subject: 'Mastodon: Apstiprini e-pastu %{instance}' + title: Apstiprini e-pasta adresi + reset_password_instructions: + action: Nomainīt paroli + explanation: Tu pieprasīji jaunu paroli savam kontam. + extra: Ja neesi to pieprasījis, lūdzu, ignorē šo e-pasta ziņojumu. Tava parole nemainīsies, kamēr neesi piekļuvis iepriekš norādītajai saitei un izveidojis jaunu. + 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 marķieris, ko ģenerējusi pārī savienotā TOTP lietotne. + subject: 'Mastodon: Divfaktoru autentifikācija iespējota' + title: 2FA iespējota + two_factor_recovery_codes_changed: + explanation: Iepriekšējie atkopšanas kodi ir atzīti par nederīgiem un ģenerēti jauni. + subject: 'Mastodon: Divfaktoru autkopšanas kodi pārģenerēti' + title: 2FA atkopšanas kodi mainīti + unlock_instructions: + subject: 'Mastodon: Norādījumi atbloķēšanai' + webauthn_credential: + added: + explanation: Tavam kontam ir pievienota šāda drošības atslēga + subject: 'Mastodon: Jaunā drošības atslēga' + title: Tika pievienota jauna drošības atslēga + deleted: + explanation: Tālāk norādītā drošības atslēga ir izdzēsta no tava konta + 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 marķieri, ko ģenerējusi pārī savienotā TOTP lietotne. + subject: 'Mastodon: Atutentifikā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: + failure: Nevarēja autentificēt tevi no %{kind}, jo "%{reason}". + success: Veiksmīgi autentificēts no %{kind} konta. + passwords: + no_token: Tu nevari piekļūt šai lapai, ja neesi saņēmis paroles atiestatīšanas e-pasta ziņojumu. Ja ienāci no paroles atiestatīšanas e-pasta, lūdzu, pārliecinies, vai izmanto visu norādīto URL. + send_instructions: Ja tava e pasta adrese ir mūsu datu bāzē, pēc dažām minūtēm uz savu e-pasta adresi saņemsi paroles atkopšanas saiti. Lūdzu, pārbaudi surogātpasta mapi, ja neesi saņēmis šo e-pastu. + send_paranoid_instructions: Ja tava e pasta adrese ir mūsu datu bāzē, pēc dažām minūtēm uz savu e-pasta adresi saņemsi paroles atkopšanas saiti. Lūdzu, pārbaudi surogātpasta mapi, ja neesi saņēmis šo e-pastu. + updated: Tava parole ir veiksmīgi nomainīta. Tagad tu esi pierakstījies. + updated_not_active: Tava parole ir veiksmīgi nomainīta. + registrations: + destroyed: Visu labu! Tavs konts ir veiksmīgi atcelts. Mēs ceram tevi drīz atkal redzēt. + signed_up: Laipni lūdzam! Tu esi veiksmīgi reģistrējies. + signed_up_but_inactive: Tava reģistrācija bija veiksmīga. Tomēr mēs nevarējām tevi pierakstīt, jo tavs konts vēl nav aktivizēts. + signed_up_but_locked: Tava reģistrācija bija veiksmīga. Tomēr mēs nevarējām tevi pierakstīt, jo tavs konts ir bloķēts. + signed_up_but_pending: Uz tavu e-pasta adresi ir nosūtīts ziņojums ar apstiprinājuma saiti. Pēc noklikšķināšanas uz saites mēs izskatīsim tavu pieteikumu. Tu tiksi informēts, ja tas tiks apstiprināts. + signed_up_but_unconfirmed: Uz tavu e-pasta adresi ir nosūtīts ziņojums ar apstiprinājuma saiti. Lūdzu, seko saitei, lai aktivizētu savu kontu. Lūdzu, pārbaudi surogātpasta mapi, ja neesi saņēmis šo e-pastu. + update_needs_confirmation: Tu veiksmīgi atjaunināji savu kontu, taču mums ir jāverificē teva jaunā e-pasta adrese. Lūdzu, pārbaudi savu e-pastu un seko apstiprinājuma saitei, lai apstiprinātu savu jauno e-pasta adresi. Lūdzu, pārbaudi surogātpasta mapi, ja neesi saņēmis šo e-pastu. + updated: Tavs konts ir veiksmīgi atjaunināts. + sessions: + already_signed_out: Veiksmīgi izrakstījies. + signed_in: Veiksmīgi pierakstījies. + signed_out: Veiksmīgi izrakstījies. + unlocks: + send_instructions: Pēc dažām minūtēm tu saņemsi e-pastu ar norādījumiem, kā atbloķēt savu kontu. Lūdzu, pārbaudi surogātpasta mapi, ja neesi saņēmis šo e-pastu. + send_paranoid_instructions: Ja tavs konts eksistē, dažu minūšu laikā tu saņemsi e-pastu ar norādījumiem, kā to atbloķēt. Lūdzu, pārbaudi surogātpasta mapi, ja neesi saņēmis šo e-pastu. + unlocked: Tavs konts ir veiksmīgi atbloķēts. Lūdzu, pieraksties, lai turpinātu. + errors: + messages: + already_confirmed: jau tika apstiprināts, lūdzu, mēģini pierakstīties + confirmation_period_expired: jāapstiprina %{period} laikā, lūdzu, pieprasi jaunu + expired: ir beidzies derīguma termiņš, lūdzu, pieprasi jaunu + not_found: nav atrasts + not_locked: nebija bloķēts + not_saved: + one: '1 kļūda liedza saglabāt šo %{resource}:' + other: "%{count} kļūdas liedza saglabāt šo %{resource}:" + zero: "%{count} kļūdas liedza saglabāt šo %{resource}:" diff --git a/config/locales/devise.pt-BR.yml b/config/locales/devise.pt-BR.yml index 6fecaecdf..ae64d165e 100644 --- a/config/locales/devise.pt-BR.yml +++ b/config/locales/devise.pt-BR.yml @@ -3,56 +3,56 @@ pt-BR: devise: confirmations: confirmed: O seu endereço de e-mail foi confirmado. - send_instructions: Você receberá um e-mail com instruções sobre como confirmar o endereço de e-mail dentro de alguns minutos. Por favor, verifique sua pasta de spam caso ainda não o tenha recebido. - send_paranoid_instructions: Se o seu endereço de e-mail já existir em nosso banco de dados, você receberá um e-mail com instruções para confirmá-lo dentro de alguns minutos. Por favor, verifique sua pasta de spam caso ainda não o tenha recebido. + send_instructions: Você receberá um e-mail com instruções sobre como confirmá-lo dentro de alguns minutos. Verifique sua caixa de spam caso ainda não o tenha recebido. + send_paranoid_instructions: Se o seu endereço de e-mail já existir em nosso banco de dados, você receberá um e-mail com instruções para confirmá-lo dentro de alguns minutos. Verifique sua caixa de spam caso ainda não o tenha recebido. failure: already_authenticated: Você entrou na sua conta. inactive: Sua conta não foi confirmada ainda. invalid: "%{authentication_keys} ou senha inválida." - last_attempt: Você tem mais uma tentativa antes de sua conta ser trancada. - locked: Sua conta está trancada. + last_attempt: Você tem mais uma tentativa antes de sua conta ser bloqueada. + locked: Sua conta está bloqueada. not_found_in_database: "%{authentication_keys} ou senha inválida." pending: Sua conta está sendo revisada. - timeout: Você saiu de sua conta. Por favor, entre novamente para continuar. + timeout: Você saiu de sua conta. Entre novamente para continuar. unauthenticated: Você precisa entrar ou criar uma conta antes de continuar. unconfirmed: Você precisa confirmar o seu endereço de e-mail antes de continuar. mailer: confirmation_instructions: action: Confirmar endereço de e-mail action_with_app: Confirmar e voltar para %{app} - explanation: Você criou uma conta em %{host} com esse endereço de e-mail. Se não foi você, por favor, ignore este e-mail. - explanation_when_pending: Você solicitou um convite para %{host} com esse endereço de e-mail. Após você confirmar o seu endereço de e-mail, espere o resultado da revisão de sua solicitação. Se sua conta por vetada, seus dados serão excluídos e nenhuma ação será necessária de sua parte. Se você não solicitou nada, por favor, ignore este e-mail. - extra_html: Por favor confira também as regras da instância e nossos termos de serviço. + explanation: Você criou uma conta em %{host} com esse endereço de e-mail. Se não foi você, ignore este e-mail. + explanation_when_pending: Você solicitou um convite para %{host} com esse endereço de e-mail. Após você confirmar o seu e-mail, espere o resultado da revisão de sua solicitação. Se sua conta for recusada, seus dados serão excluídos e nenhuma ação será necessária de sua parte. Se você não solicitou nada, ignore este e-mail. + extra_html: Confira também as regras da instância e nossos termos de serviço. subject: 'Mastodon: Instruções de confirmação para %{instance}' title: Confirme o endereço de e-mail email_changed: explanation: 'O e-mail vinculado à sua conta será alterado para:' - extra: Se você não alterou seu email, é provável que alguém tenha ganhado acesso a sua conta. Por favor altere sua senha imediatamente ou entre em contato com o administrador do servidor se você está trancado fora de sua conta. + extra: Se você não alterou seu e-mail, é possível que alguém tenha ganhado acesso à sua conta. Altere sua senha imediatamente ou entre em contato com a administração da instância se você está sem acesso à ela. subject: 'Mastodon: Endereço de e-mail alterado' title: Novo endereço de e-mail password_change: explanation: A senha da sua conta foi alterada. - extra: Se você não alterou sua senha, é provável que alguém tenha ganhado acesso a sua conta. Por favor altere sua senha imediatamente ou entre em contato com o administrador do servidor se você está trancado fora de sua conta. + extra: Se você não alterou sua senha, é possível que alguém tenha ganhado acesso à sua conta. Altere sua senha imediatamente ou entre em contato com a administração da instância se você está sem acesso à ela. subject: 'Mastodon: Senha alterada' title: Senha alterada reconfirmation_instructions: explanation: Confirme seu novo endereço para alterar seu e-mail. - extra: Se essa alteração não foi feita por você, por favor, ignore este e-mail. O endereço de e-mail para essa conta do Mastodon não será alterado até que você entre no link acima. + extra: Se essa alteração não foi feita por você, ignore este e-mail. O endereço de e-mail para essa conta do Mastodon não será alterado até que você entre no link acima. subject: 'Mastodon: Confirmar endereço de e-mail para %{instance}' title: Confirmar endereço de e-mail reset_password_instructions: action: Alterar senha explanation: Você solicitou uma nova senha para sua conta. - extra: Se você não solicitou nada, por favor, ignore este e-mail. Sua senha não será alterada até que você entre no link acima e crie uma nova. + extra: Se você não solicitou nada, ignore este e-mail. Sua senha não será alterada até que você entre no link acima e crie uma nova. 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 acessar apenas com seu endereço de e-mail e senha. + 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. subject: 'Mastodon: Autenticação de dois fatores 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 desativada' + subject: 'Mastodon: Autenticação de dois fatores ativada' title: 2FA ativada two_factor_recovery_codes_changed: explanation: Os códigos de recuperação anteriores foram invalidados e novos códigos foram gerados. @@ -70,46 +70,46 @@ 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 desabilitada para a sua conta. O login agora é possível usando apenas o token gerado pelo aplicativo TOTP pareado. - subject: 'Mastodon: Autenticação por chaves de segurança desabilitada' - title: Chaves de segurança desabilitadas + 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. + 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 habilitada para a sua conta. Sua chave de segurança agora pode ser usada para fazer login. - subject: 'Mastodon: Autenticação por chave de segurança habilitada' - title: Chaves de segurança habilitadas + 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. + subject: 'Mastodon: Autenticação por chaves de segurança ativada' + title: Chaves de segurança ativadas omniauth_callbacks: failure: Não foi possível entrar como %{kind} porque "%{reason}". success: Entrou como %{kind}. passwords: - no_token: Você não pode acessar esta página sem vir de um e-mail de alteração de senha. Se este for o caso, por favor, verifique se o link fornecido está completo. - send_instructions: Se o seu endereço de e-mail já existir em nosso banco de dados, você receberá um e-mail com instruções para alterar a senha dentro de alguns minutos. Por favor, verifique sua pasta de spam caso ainda não o tenha recebido. - send_paranoid_instructions: Se o seu endereço de e-mail já existir em nosso banco de dados, você receberá um e-mail com instruções para alterar a senha dentro de alguns minutos. Por favor, verifique sua pasta de spam caso ainda não o tenha recebido. + no_token: Você não pode acessar esta página sem vir de um e-mail de alteração de senha. Se este for o caso, verifique se o link fornecido está completo. + send_instructions: Se o seu endereço de e-mail já existir em nosso banco de dados, você receberá um e-mail com instruções para alterar a senha dentro de alguns minutos. Verifique sua caixa de spam caso ainda não o tenha recebido. + send_paranoid_instructions: Se o seu endereço de e-mail já existir em nosso banco de dados, você receberá um e-mail com instruções para alterar a senha dentro de alguns minutos. Verifique sua caixa de spam caso ainda não o tenha recebido. updated: Sua senha foi alterada e você entrou na sua conta. updated_not_active: Sua senha foi alterada com sucesso. registrations: destroyed: Adeus! Sua conta foi cancelada. Talvez um dia possamos nos ver de novo. signed_up: Boas vindas! Conta criada. signed_up_but_inactive: Conta criada! Agora você deve confirmá-la. - signed_up_but_locked: Você se cadastrou com sucesso. Contudo, não pudemos fazer login porque sua conta está trancada. + signed_up_but_locked: Você se cadastrou com sucesso. Contudo, não pudemos entrar na sua conta porque ela está bloqueada. signed_up_but_pending: Um e-mail com um link de confirmação foi enviado para o seu endereço de e-mail. Após você entrar no link, revisaremos sua solicitação e você será notificado caso seja aprovado. - signed_up_but_unconfirmed: Um e-mail com instruções para confirmar o seu endereço de e-mail foi enviado. Por favor, verifique sua pasta de spam caso ainda não o tenha recebido. - update_needs_confirmation: Você alterou seu endereço de e-mail ou sua senha, porém é preciso confirmar a alteração. Por favor, entre no link que foi enviado para o seu novo endereço de e-mail e verifique sua pasta de spam caso ainda não o tenha recebido. + signed_up_but_unconfirmed: Um e-mail com instruções para confirmar o seu endereço de e-mail foi enviado. Verifique sua caixa de spam caso ainda não o tenha recebido. + update_needs_confirmation: Você alterou seu endereço de e-mail ou sua senha, porém é preciso confirmar a alteração. Entre no link que foi enviado para o seu novo endereço de e-mail e verifique sua caixa de spam caso ainda não o tenha recebido. updated: Sua conta foi alterada com sucesso. sessions: already_signed_out: Você saiu de sua conta. signed_in: Você entrou na sua conta. signed_out: Você saiu de sua conta. unlocks: - send_instructions: Você receberá um email com instruções para destrancar a sua conta em alguns minutos. Por favor verifique sua pasta de spam se não recebeu este email. - send_paranoid_instructions: Se a sua conta existe, você vai reveber um email com instruções para destrancá-la em alguns minutos. Por favor verifique sua pasta de spam se você não recebeu este email. - unlocked: Sua conta foi destrancada com sucesso. Por favor entre na sua conta para continuar. + send_instructions: Você receberá um e-mail com instruções para desbloquear sua conta em alguns minutos. Verifique sua caixa de spam se não recebeu este e-mail. + send_paranoid_instructions: Se a sua conta existe, você receberá um e-mail com instruções para desbloqueá-la em alguns minutos. Verifique sua caixa de spam se você não recebeu este e-mail. + unlocked: Sua conta foi desbloqueada com sucesso! Entre na sua conta para continuar. errors: messages: already_confirmed: confirmado, agora tente entrar na sua conta - confirmation_period_expired: precisa ser confirmada em até %{period}, por favor, solicite novo link de confirmação - expired: expirou, por favor solicite uma nova + confirmation_period_expired: precisa ser confirmada em até %{period}, solicite um novo link de confirmação + expired: expirou, solicite uma nova not_found: não encontrado - not_locked: não foi trancada + not_locked: não foi bloqueada not_saved: one: '1 erro impediu este %{resource} de ser salvo(a):' other: "%{count} erros impediram este %{resource} de ser salvo(a):" diff --git a/config/locales/devise.pt-PT.yml b/config/locales/devise.pt-PT.yml index 0bd6bb3cd..7af16faf2 100644 --- a/config/locales/devise.pt-PT.yml +++ b/config/locales/devise.pt-PT.yml @@ -3,8 +3,8 @@ pt-PT: devise: confirmations: confirmed: O teu endereço de e-mail foi confirmado com sucesso. - send_instructions: Vais receber um email com as instruções para confirmar o teu endereço de email dentro de alguns minutos. Por favor, verifica a caixa de spam se não recebeste o e-mail. - send_paranoid_instructions: Se o teu endereço de email já existir na nossa base de dados, vais receber um email com as instruções de confirmação dentro de alguns minutos. Por favor, verifica a caixa de spam se não recebeste o e-mail. + send_instructions: Vais receber um e-mail com as instruções para confirmar o teu endereço de e-mail dentro de alguns minutos. Por favor, verifica a caixa de spam se não recebeu o e-mail. + send_paranoid_instructions: Se o teu endereço de e-mail já existir na nossa base de dados, vais receber um e-mail com as instruções de confirmação dentro de alguns minutos. Por favor, verifica a caixa de spam se não recebeu o e-mail. failure: already_authenticated: A tua sessão já está aberta. inactive: A tua conta ainda não está ativada. @@ -15,20 +15,20 @@ pt-PT: pending: A sua conta está ainda a aguardar revisão. timeout: A tua sessão expirou. Por favor, entra de novo para continuares. unauthenticated: Precisas de entrar na tua conta ou de te registares antes de continuar. - unconfirmed: Tens de confirmar o teu endereço de email antes de continuar. + unconfirmed: Tens de confirmar o teu endereço de e-mail antes de continuar. mailer: confirmation_instructions: action: Verificar o endereço de e-mail action_with_app: Confirmar e regressar a %{app} - explanation: Criou uma conta em %{host} com este endereço de e-mail. Está a um clique de activá-la. Se não foi você que fez este registo, por favor ignore esta mensagem. + explanation: Criou uma conta em %{host} com este endereço de e-mail. Está a um clique de ativá-la. Se não foi você que fez este registo, por favor ignore esta mensagem. explanation_when_pending: Você solicitou um convite para %{host} com este endereço de e-mail. Logo que confirme o seu endereço de e-mail, iremos rever a sua inscrição. Pode iniciar sessão para alterar os seus dados ou eliminar a sua conta, mas não poderá aceder à maioria das funções até que a sua conta seja aprovada. Se a sua inscrição for rejeitada, os seus dados serão eliminados, pelo que não será necessária qualquer ação adicional da sua parte. Se não solicitou este convite, por favor, ignore este e-mail. extra_html: Por favor leia as regras da instância e os nossos termos de serviço. subject: 'Mastodon: Instruções de confirmação %{instance}' title: Verificar o endereço de e-mail email_changed: - explanation: 'O e-mail associado à tua conta será alterado para:' - extra: Se não alterou o seu email, é possível que alguém tenha conseguido aceder à sua conta. Por favor altere a sua palavra-passe imediatamente ou entra em contacto com um administrador da instância se tiver ficado sem acesso à sua conta. - subject: 'Mastodon: Email alterado' + explanation: 'O e-mail associado à sua conta será alterado para:' + extra: Se não alterou o seu e-mail, é possível que alguém tenha conseguido aceder à sua conta. Por favor altere a sua palavra-passe imediatamente ou entra em contacto com um administrador da instância se tiver ficado sem acesso à sua conta. + subject: 'Mastodon: E-mail alterado' title: Novo endereço de e-mail password_change: explanation: A palavra-passe da tua conta foi alterada. @@ -36,27 +36,27 @@ pt-PT: subject: 'Mastodon: Nova palavra-passe' title: Palavra-passe alterada reconfirmation_instructions: - explanation: Confirma o teu novo endereço para alterar o e-mail. - extra: Se esta mudança não foi iniciada por ti, por favor ignora este e-mail. O endereço de e-mail para a tua conta do Mastodon não irá mudar enquanto não acederes ao link acima. + explanation: Confirme o seu novo endereço para alterar o e-mail. + extra: Se esta mudança não foi iniciada por si, por favor ignore este e-mail. O endereço de e-mail para a sua conta do Mastodon não irá mudar enquanto não aceder ao link acima. subject: 'Mastodon: Confirmação de e-mail %{instance}' title: Validar o endereço de e-mail reset_password_instructions: action: Alterar palavra-passe explanation: Pediste a alteração da palavra-passe da tua conta. - extra: Se não fizeste este pedido, por favor ignora este e-mail. A tua palavra-passe não irá mudar se não acederes ao link acima e criares uma nova. + extra: Se não fez este pedido, por favor ignore este e-mail. A sua palavra-passe não irá mudar se não aceder ao link acima e criar uma nova. subject: 'Mastodon: Instruções para alterar a palavra-passe' title: Solicitar nova palavra-passe two_factor_disabled: - explanation: A autenticação de dois fatores para sua conta foi desativada. É agora possível aceder apenas com seu endereço de e-mail e senha. - subject: 'Mastodon: Autenticação de dois fatores desativada' + 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. + subject: 'Mastodon: Autenticação de duas etapas desativada' title: 2FA desativado two_factor_enabled: - explanation: A autenticação de dois fatores foi ativada para sua conta. Um token, gerado pela aplicação TOTP emparelhada, será necessário para aceder. - subject: 'Mastodon: Autenticação de dois fatores ativada' + 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. + subject: 'Mastodon: Autenticação em duas etapas ativada' title: 2FA ativado two_factor_recovery_codes_changed: explanation: Os códigos de recuperação anteriores foram invalidados e novos foram gerados. - subject: 'Mastodonte: Gerados novos códigos de recuperação de dois fatores' + subject: 'Mastodon: Gerados novos códigos de recuperação em duas etapas' title: Códigos de recuperação 2FA alterados unlock_instructions: subject: 'Mastodon: Instruções para desbloquear a tua conta' @@ -81,9 +81,9 @@ pt-PT: failure: Não foi possível autenticar %{kind} porque "%{reason}". success: Autenticado com sucesso na conta %{kind}. passwords: - no_token: Não pode aceder a esta página se não vier através do link enviado por email para alteração da sua palavra-passe. Se usaste esse link para chegar aqui, por favor verifica que o endereço URL actual é o mesmo do que foi enviado no email. - send_instructions: Vais receber um email com instruções para alterar a palavra-passe dentro de algns minutos. - send_paranoid_instructions: Se o teu endereço de email existe na nossa base de dados, vais receber um link para recuperar a palavra-passe dentro de alguns minutos. + no_token: Não pode aceder a esta página se não vier através do link enviado por e-mail para alteração da sua palavra-passe. Se usou esse link para chegar aqui, por favor verifique que o endereço URL atual é igual ao que foi enviado no e-mail. + send_instructions: Vai receber um e-mail com instruções para alterar a palavra-passe dentro de alguns minutos. + send_paranoid_instructions: Se o seu endereço de e-mail existir na nossa base de dados, vai receber um link para recuperar a palavra-passe dentro de alguns minutos. updated: A tua palavra-passe foi alterada. Estás agora autenticado na tua conta. updated_not_active: A tua palavra-passe foi alterada. registrations: @@ -91,17 +91,17 @@ pt-PT: signed_up: Bem-vindo! A tua conta foi registada com sucesso. signed_up_but_inactive: A tua conta foi registada. No entanto ainda não está activa. signed_up_but_locked: A sua conta foi registada com sucesso. No entanto, não pudemos iniciar a sua sessão porque a conta está bloqueada. - signed_up_but_pending: Uma mensagem com um link de confirmação foi enviada para o seu endereço de e-mail. Depois de clicar no link, iremos rever a sua inscrição. Será notificado se a sua conta é aprovada. - signed_up_but_unconfirmed: Uma mensagem com um link de confirmação foi enviada para o teu email. Por favor segue esse link para activar a tua conta. - update_needs_confirmation: Alteraste o teu endereço de email ou palavra-passe, mas é necessário confirmar essa alteração. Por favor vai ao teu email e segue link que te enviámos. + signed_up_but_pending: Uma mensagem com um link de confirmação foi enviada para o seu endereço de e-mail. Depois de clicar no link, iremos rever a sua inscrição. Será notificado se a sua conta for aprovada. + signed_up_but_unconfirmed: Uma mensagem com um link de confirmação foi enviada para o seu e-mail. Por favor utilize esse link para ativar a sua conta. + update_needs_confirmation: Alteraste o teu endereço de e-mail ou palavra-passe, mas é necessário confirmar essa alteração. Por favor vá ao seu e-mail e utilize o link que lhe enviámos. updated: A tua conta foi actualizada com sucesso. sessions: already_signed_out: Sessão encerrada. signed_in: Sessão iniciada. signed_out: Sessão encerrada. unlocks: - send_instructions: Vais receber um email com instruções para desbloquear a tua conta dentro de alguns minutos. - send_paranoid_instructions: Se a tua conta existe, vais receber um email com instruções a detalhar como a desbloquear dentro de alguns minutos. + send_instructions: Vai receber um e-mail com instruções para desbloquear a sua conta dentro de alguns minutos. + send_paranoid_instructions: Se a sua conta existe, vais receber um e-mail com instruções a detalhar como a desbloquear dentro de alguns minutos. unlocked: A sua conta foi desbloqueada com sucessos. Por favor, inicie uma nova sessão para continuar. errors: messages: diff --git a/config/locales/devise.si.yml b/config/locales/devise.si.yml index 346b13be4..b9aa1527c 100644 --- a/config/locales/devise.si.yml +++ b/config/locales/devise.si.yml @@ -2,11 +2,13 @@ si: devise: failure: + already_authenticated: ඔබ දැනටමත් පිවිස ඇත. locked: ඔබගේ ගිණුම අගුළු දමා ඇත. mailer: confirmation_instructions: title: වි. තැපැල් ලිපිනය තහවුරු කරන්න email_changed: + subject: 'මාස්ටඩන්: වි-තැපෑල වෙනස් විය' title: නව විද්‍යුත් තැපැල් ලිපිනය password_change: title: මුරපදය වෙනස් කරන ලදි @@ -14,10 +16,23 @@ si: title: වි. තැපැල් ලිපිනය තහවුරු කරන්න reset_password_instructions: action: මුරපදය වෙනස් කරන්න + title: මුරපදය නැවත සැකසීම + two_factor_disabled: + title: ද්විපියවර අබලයි + two_factor_enabled: + title: ද්විපියවර සබලයි + two_factor_recovery_codes_changed: + title: ද්විපියවර ප්‍රතිසාධන කේත වෙනස්විණි + unlock_instructions: + subject: 'මාස්ටඩන්: අගුලුහැරීමේ උපදේශ' + webauthn_credential: + added: + subject: 'මාස්ටඩන්: නව ආරක්‍ෂණ යතුර' + title: ආරක්‍ෂණ යතුරක් එකතු කර ඇත webauthn_disabled: - title: ආරක්ෂක යතුරු අබල කර ඇත + title: ආරක්‍ෂණ යතුරු අබල කර ඇත webauthn_enabled: - title: ආරක්ෂක යතුරු සබල කර ඇත + title: ආරක්‍ෂණ යතුරු සබල කර ඇත registrations: update_needs_confirmation: ඔබ ඔබගේ ගිණුම සාර්ථකව යාවත්කාලීන කළ නමුත් අපට ඔබගේ නව විද්‍යුත් තැපැල් ලිපිනය තහවුරු කළ යුතුය. කරුණාකර ඔබගේ විද්‍යුත් තැපෑල පරීක්ෂා කර තහවුරු කිරීමේ සබැඳිය අනුගමනය කර ඔබගේ නව විද්‍යුත් තැපැල් ලිපිනය තහවුරු කරන්න. ඔබට මෙම විද්‍යුත් තැපෑල නොලැබුනේ නම් කරුණාකර ඔබගේ අයාචිත තැපැල් බහාලුම පරීක්ෂා කරන්න. updated: ඔබගේ ගිණුම සාර්ථකව යාවත්කාලීන කර ඇත. diff --git a/config/locales/devise.th.yml b/config/locales/devise.th.yml index 0b5524a74..5970e8d26 100644 --- a/config/locales/devise.th.yml +++ b/config/locales/devise.th.yml @@ -10,7 +10,7 @@ th: inactive: ยังไม่ได้เปิดใช้งานบัญชีของคุณ invalid: "%{authentication_keys} หรือรหัสผ่านไม่ถูกต้อง" last_attempt: คุณลองได้อีกหนึ่งครั้งก่อนที่บัญชีของคุณจะถูกล็อค - locked: มีการล็อคบัญชีของคุณอยู่ + locked: บัญชีของคุณถูกล็อค not_found_in_database: "%{authentication_keys} หรือรหัสผ่านไม่ถูกต้อง" pending: บัญชีของคุณยังอยู่ระหว่างการตรวจทาน timeout: เซสชันของคุณหมดอายุแล้ว โปรดลงชื่อเข้าอีกครั้งเพื่อดำเนินการต่อ @@ -76,10 +76,10 @@ th: subject: 'Mastodon: เปิดใช้งานการรับรองความถูกต้องด้วยกุญแจความปลอดภัยแล้ว' title: เปิดใช้งานกุญแจความปลอดภัยแล้ว omniauth_callbacks: - failure: ไม่สามารถรับรองความถูกต้องคุณจาก %{kind} เนื่องจาก “%{reason}” + failure: ไม่สามารถรับรองความถูกต้องคุณจาก %{kind} ได้เนื่องจาก “%{reason}” success: รับรองความถูกต้องจากบัญชี %{kind} สำเร็จ passwords: - no_token: คุณไม่สามารถเข้าถึงหน้านี้โดยไม่ได้มาจากอีเมลการตั้งรหัสผ่านใหม่ หากคุณมาจากอีเมลการตั้งรหัสผ่านใหม่ โปรดตรวจสอบให้แน่ใจว่าคุณได้ใช้ URL แบบเต็มที่ให้มา + no_token: คุณไม่สามารถเข้าถึงหน้านี้ได้โดยไม่ได้มาจากอีเมลการตั้งรหัสผ่านใหม่ หากคุณมาจากอีเมลการตั้งรหัสผ่านใหม่ โปรดตรวจสอบให้แน่ใจว่าคุณได้ใช้ URL แบบเต็มที่ให้มา send_instructions: หากมีที่อยู่อีเมลของคุณอยู่ในฐานข้อมูลของเรา คุณจะได้รับลิงก์กู้คืนรหัสผ่านที่ที่อยู่อีเมลของคุณในไม่กี่นาที โปรดตรวจสอบโฟลเดอร์สแปมของคุณหากคุณไม่ได้รับอีเมลนี้ send_paranoid_instructions: หากมีที่อยู่อีเมลของคุณอยู่ในฐานข้อมูลของเรา คุณจะได้รับลิงก์กู้คืนรหัสผ่านที่ที่อยู่อีเมลของคุณในไม่กี่นาที โปรดตรวจสอบโฟลเดอร์สแปมของคุณหากคุณไม่ได้รับอีเมลนี้ updated: เปลี่ยนรหัสผ่านของคุณสำเร็จ ตอนนี้คุณได้ลงชื่อเข้าแล้ว @@ -87,8 +87,8 @@ th: registrations: destroyed: ลาก่อน! ยกเลิกบัญชีของคุณสำเร็จ เราหวังว่าจะได้พบคุณอีกในเร็ว ๆ นี้ signed_up: ยินดีต้อนรับ! คุณได้ลงทะเบียนสำเร็จ - signed_up_but_inactive: คุณได้ลงทะเบียนสำเร็จ อย่างไรก็ตามเราไม่สามารถลงชื่อคุณเข้าเนื่องจากยังไม่ได้เปิดใช้งานบัญชีของคุณ - signed_up_but_locked: คุณได้ลงทะเบียนสำเร็จ อย่างไรก็ตามเราไม่สามารถลงชื่อคุณเข้าเนื่องจากมีการล็อคบัญชีของคุณอยู่ + signed_up_but_inactive: คุณได้ลงทะเบียนสำเร็จ อย่างไรก็ตามเราไม่สามารถลงชื่อคุณเข้าได้เนื่องจากยังไม่ได้เปิดใช้งานบัญชีของคุณ + signed_up_but_locked: คุณได้ลงทะเบียนสำเร็จ อย่างไรก็ตามเราไม่สามารถลงชื่อคุณเข้าได้เนื่องจากมีการล็อคบัญชีของคุณอยู่ signed_up_but_pending: ส่งข้อความพร้อมลิงก์ยืนยันไปยังที่อยู่อีเมลของคุณแล้ว หลังจากคุณคลิกลิงก์ เราจะตรวจทานใบสมัครของคุณ คุณจะได้รับการแจ้งเตือนหากมีการอนุมัติใบสมัคร signed_up_but_unconfirmed: ส่งข้อความพร้อมลิงก์ยืนยันไปยังที่อยู่อีเมลของคุณแล้ว โปรดไปตามลิงก์เพื่อเปิดใช้งานบัญชีของคุณ โปรดตรวจสอบโฟลเดอร์สแปมของคุณหากคุณไม่ได้รับอีเมลนี้ update_needs_confirmation: คุณได้อัปเดตบัญชีของคุณสำเร็จ แต่เราจำเป็นต้องยืนยันที่อยู่อีเมลใหม่ของคุณ โปรดตรวจสอบอีเมลของคุณแล้วไปตามลิงก์ยืนยันเพื่อยืนยันที่อยู่อีเมลใหม่ของคุณ โปรดตรวจสอบโฟลเดอร์สแปมของคุณหากคุณไม่ได้รับอีเมลนี้ diff --git a/config/locales/devise.zh-CN.yml b/config/locales/devise.zh-CN.yml index e727e47c7..0d8e487c9 100644 --- a/config/locales/devise.zh-CN.yml +++ b/config/locales/devise.zh-CN.yml @@ -3,13 +3,13 @@ zh-CN: devise: confirmations: confirmed: 已成功确认你的邮箱地址。 - send_instructions: 你的电子邮箱将在几分钟后收到一封确认邮件。如果没有,请检查你的垃圾邮箱。 - send_paranoid_instructions: 如果你的邮箱存在于我们的数据库中,你将收到一封确认注册的邮件。如果没有,请检查你的垃圾邮箱。 + send_instructions: 你将在几分钟内收到一封电子邮件,指导你如何验证电子邮箱地址。如果你没有收到这封邮件,请检查你的垃圾邮件文件夹。 + send_paranoid_instructions: 如果你的电子邮箱地址存在于我们的数据库中,你将在几分钟内收到一封邮件,知道你如何验证电子邮箱地址。如果你没有收到这封邮件,请检查你的垃圾邮件文件夹。 failure: - already_authenticated: 你已经登录。 + already_authenticated: 你已登录。 inactive: 你还没有激活帐户。 invalid: "%{authentication_keys} 无效或密码错误。" - last_attempt: 这是最后一次尝试机会,失败后你的帐户将被锁定。 + last_attempt: 你只有最后一次尝试机会,若未通过,帐号将被锁定。 locked: 你的帐户已被锁定。 not_found_in_database: "%{authentication_keys}或密码错误。" pending: 你的帐号仍在审核中。 @@ -20,19 +20,19 @@ zh-CN: confirmation_instructions: action: 验证电子邮件地址 action_with_app: 确认并返回%{app} - explanation: 你在 %{host} 上使用这个电子邮件地址创建了一个帐户。只需点击下面的链接,即可完成激活。如果你并没有创建过帐户,请忽略此邮件。 + explanation: 你在 %{host} 上使用此电子邮箱地址创建了一个帐号。点击下面的链接即可激活帐号。如果你没有创建帐号,请忽略此邮件。 explanation_when_pending: 你用这个电子邮件申请了在 %{host} 注册。在确认电子邮件地址之后,我们会审核你的申请。在此之前,你不能登录。如果你的申请被驳回,你的数据会被移除,因此你无需再采取任何行动。如果申请人不是你,请忽略这封邮件。 extra_html: 请记得阅读本服务器的相关规定我们的使用条款。 subject: Mastodon:来自 %{instance} 的确认指引 title: 验证电子邮件地址 email_changed: - explanation: 你的帐户的电子邮件地址将变更为: + explanation: 你的账号的电子邮箱地址将变更为: extra: 如果你并没有请求更改你的电子邮件地址,则他人很有可能已经入侵你的帐户。请立即更改你的密码;如果你已经无法访问你的帐户,请联系服务器管理员请求协助。 subject: Mastodon:电子邮件地址已被更改 title: 新电子邮件地址 password_change: explanation: 你的帐户密码已更改。 - extra: 如果你并没有请求更改你的密码,则他人很有可能已经入侵你的帐户。请立即更改你的密码;如果你已经无法访问你的帐户,请联系服务器的管理员请求协助。 + extra: 如果你并没有申请更改密码,那似乎有人已经入侵你的帐户。请立即更改你的密码;如果你已经无法访问你的帐户,请联系服务器的管理员获取帮助。 subject: Mastodon:密码已被更改 title: 密码已被重置 reconfirmation_instructions: @@ -55,9 +55,9 @@ zh-CN: subject: Mastodon:双重验证已开启 title: 已启用双重认证 two_factor_recovery_codes_changed: - explanation: 之前的恢复码已失效,现已生成了新的恢复码。 + explanation: 新恢复码已生成,同时旧恢复码已失效。 subject: Mastodon:重新生成双重认证的恢复码 - title: 双重验证的恢复码已更改 + title: 双重认证的恢复码已更改 unlock_instructions: subject: Mastodon:帐户解锁信息 webauthn_credential: diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index 7922599f6..d095b0f93 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -83,6 +83,10 @@ fi: invalid_client: Asiakasohjelman valtuutus epäonnistui, koska asiakas on tuntematon, asiakkaan valtuutus ei ollut mukana tai valtuutustapaa ei tueta. invalid_grant: Valtuutuslupa on virheellinen, umpeutunut, peruttu, valtuutuspyynnössä käytettyä uudelleenohjaus-URI:tä vastaamaton tai myönnetty toiselle asiakkaalle. invalid_redirect_uri: Uudelleenohjaus-URI on virheellinen. + invalid_request: + missing_param: 'Vaadittu parametri puuttuu: %{value}.' + request_not_authorized: Pyyntö on hyväksyttävä. Vaadittu parametri pyynnön hyväksymiseksi puuttuu tai on virheellinen. + unknown: Pyynnöstä puuttuu vaadittu parametri, se sisältää tukemattoman parametriarvon tai on muulla tavoin väärin muotoiltu. invalid_resource_owner: Annetut resurssin omistajan tunnnukset ovat virheelliset, tai resurssin omistajaa ei löydy invalid_scope: Pyydetyt oikeudet ovat virheellisiä, tuntemattomia tai väärin muotoiltuja. invalid_token: @@ -115,16 +119,36 @@ fi: title: OAuth-valtuutus tarvitaan scopes: admin:read: lukea kaikkia tietoja palvelimelta - admin:read:accounts: lukea arkaluontoista sisältöä kaikista tileistä + admin:read:accounts: lue arkaluontoinen sisältö kaikilta tileiltä + admin:read:reports: lue arkaluonteiset tiedot kaikista raporteista ja raportoiduista tileistä admin:write: muokata kaikkia tietoja palvelimella + admin:write:accounts: suorita moderointitoiminnot tileillä + admin:write:reports: suorita moderointitoiminnot raporteissa follow: seurata, estää, perua eston ja lopettaa tilien seuraaminen push: vastaanottaa push-ilmoituksesi read: lukea tilin tietoja read:accounts: nähdä tilin tiedot + read:blocks: katso lohkosi + read:bookmarks: katso kirjanmerkkisi + read:favourites: katso suosikkisi + read:filters: katso suodattimesi + read:follows: katso ketä seuraat + read:lists: katso listasi + read:mutes: katso mykistyksesi + read:notifications: katso ilmoitukset + read:reports: katso raporttisi + read:search: haku sinun puolesta + read:statuses: katso kaikki viestit write: julkaista puolestasi write:accounts: muokata profiiliasi + write:blocks: estää tilit ja palvelimet + write:bookmarks: kirjanmerkki viestit + write:favourites: suosikki viestit write:filters: luoda suodattimia write:follows: seurata ihmisiä write:lists: luoda listoja write:media: lähettää mediatiedostoja + write:mutes: mykistää ihmisiä ja keskusteluja write:notifications: tyhjentää ilmoituksesi + write:reports: raportoi muille ihmisille + write:statuses: julkaise viestejä diff --git a/config/locales/doorkeeper.gd.yml b/config/locales/doorkeeper.gd.yml index 4b3bccf67..0ca8dfa23 100644 --- a/config/locales/doorkeeper.gd.yml +++ b/config/locales/doorkeeper.gd.yml @@ -33,7 +33,7 @@ gd: help: native_redirect_uri: Cleachd %{native_redirect_uri} gus a chur fo dheuchainn gu h-ionadail redirect_uri: Cleachd loidhne fa leth do gach URI - scopes: Sgar sgòpaichean le beàrnan. Fàg seo bàn airson nan sgòpaichean tùsail a chleachdadh. + scopes: Sgar sgòpaichean le beàrnan. Fàg seo bàn airson nan sgòpaichean bunaiteach a chleachdadh. index: application: Aplacaid callback_url: URL gairm air ais diff --git a/config/locales/doorkeeper.hy.yml b/config/locales/doorkeeper.hy.yml index ec5beb1c3..ec7b6e5f5 100644 --- a/config/locales/doorkeeper.hy.yml +++ b/config/locales/doorkeeper.hy.yml @@ -73,6 +73,7 @@ hy: index: application: Յաւելուած created_at: Նոյնականացրած + date_format: "%Y-%m-%d %H:%M:%S" scopes: Դաշտեր title: Քո նոյնականացրած ծրագրերը errors: @@ -82,6 +83,10 @@ hy: invalid_client: Կլիենտի նոյնականացումը ձախողուեց անյայտ կլիենտի, կլիենտի նոյնականացման, կամ նոյնականացման չաջակցուող ձեւի պատճառով։ invalid_grant: Տրամադրուած նոյնականացման թոյլտուութիւնն անվաւեր է, սպառուած, չեղարկուած, չի համապատասխանում վերայղուած URI֊ի նոյնականացման յայտին, կամ յղուել է այլ կլիենտի։ invalid_redirect_uri: Վերայղուած uri֊ի անվաւեր է։ + invalid_request: + missing_param: Բացակայում է պահանջուած տուեալը՝ %{value}։ + request_not_authorized: Հարցումը պէտք է լինի նոյնականացուած։ Նոյնականացման համար պահանջուող տուեալը բացակայում է կամ սխալ է։ + unknown: Յայտից բացակայում է պահանջուող պարամետրը, ներառում է չաջակցուող արժէք կամ այլ անսարքութիւն։ invalid_resource_owner: Տրամադրուած ռեսուրսի տիրոջ տուեալները անվաւեր են կամ ռեսուրսի տէրը չի գտնուել invalid_scope: Յայտի դաշտն անվաւեր, անյայտ կամ անսարք։ invalid_token: @@ -140,3 +145,10 @@ hy: write:bookmarks: էջանշել գրառումները write:favourites: հաւանել գրառումները write:filters: "'ստեղծել ֆիլտրեր" + write:follows: հետեւել մարդկանց + write:lists: ստեղծել ցանկեր + write:media: բեռնել մեդիա ֆայլեր + write:mutes: լռեցնել մարդկանց եւ զրոյցները + write:notifications: մաքրել ծանուցումները + write:reports: բողոքել այլոցից + write:statuses: հրապարակել գրառում diff --git a/config/locales/doorkeeper.kab.yml b/config/locales/doorkeeper.kab.yml index 9db063202..c8171fb83 100644 --- a/config/locales/doorkeeper.kab.yml +++ b/config/locales/doorkeeper.kab.yml @@ -105,6 +105,8 @@ kab: read:lists: ẓer tibdarin-ik·im read:mutes: ẓer wid i tesgugmeḍ read:notifications: ẓer tilγa-ik + read:reports: ẓer ineqqisen-ik·im + read:search: anadi deg umkan-ik·im read:statuses: ẓer meṛṛa tisuffaγ write: beddel meṛṛa isefka n umiḍan-ik write:accounts: ẓreg amaγnu-ik @@ -114,3 +116,4 @@ kab: write:follows: ḍfeṛ imdanen write:lists: ad yesnulfu tibdarin write:media: ad yessali ifayluyen n teγwalt + write:notifications: sfeḍ tilɣa-k·m diff --git a/config/locales/doorkeeper.kmr.yml b/config/locales/doorkeeper.kmr.yml new file mode 100644 index 000000000..6a8b65d91 --- /dev/null +++ b/config/locales/doorkeeper.kmr.yml @@ -0,0 +1,154 @@ +--- +kmr: + activerecord: + attributes: + doorkeeper/application: + name: Navê sepanê + redirect_uri: Girêdana beralîkirî + scopes: Berfirehî + website: Malpera sepanê + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: perçe tê de tinne. + invalid_uri: ger ev URL derbasdar be. + relative_uri: teqez URl'yek hebe. + secured_uri: ger HTTPS/SSL URl hebe. + doorkeeper: + applications: + buttons: + authorize: Destûr bide + cancel: Dev jê berde + destroy: Tinne bike + edit: Serrast bike + submit: Bişîne + confirmations: + destroy: Ma tu bawerî? + edit: + title: Sepanê serrast bike + form: + error: Wey li min! kontrol bikeku form çewtî tê de tune + help: + native_redirect_uri: Bo testên herêmî %{native_redirect_uri} bikar bîne + redirect_uri: Serê URl de rêzek bikarbînin + scopes: Berfirehî bi valahîyan re veqetîne. Bo bikaranîna berfirehî ya standard vala bihêle. + index: + application: Sepan + callback_url: URl ya vegeriyayî + delete: Jê bibe + empty: Qet sepanê te tinne. + name: Nav + new: Sepanê nû + scopes: Berfirehî + show: Nîşan bike + title: Sepanê te + new: + title: Sepanê nû + show: + actions: Çalakî + application_id: Kilîdê rajegir + callback_urls: URlyên vegeriyayî + scopes: Berfirehî + secret: Rajegirî veşartî + title: 'Sepan: %{name}' + authorizations: + buttons: + authorize: Destûr bide + deny: Guh nedê + error: + title: Xeletîyek çêbû + new: + able_to: Ew ê bikaribe + prompt: Sepanê %{client_name} dixwaze bigihîje ajimêrê te + title: Destûr kirin pêwîst e + show: + title: Destûr hildana vê kodê jê bigire û ji sepanê re pêve bike. + authorized_applications: + buttons: + revoke: Betal bike + confirmations: + revoke: Ma tu bawerî? + index: + application: Sepan + created_at: Destûrmend + date_format: "%Y-%m-%d%H:%M:%S" + scopes: Berfirehî + title: Sepanên destûrmendê te + errors: + messages: + access_denied: Xwedîyê çavkanîyê an jî destûrmendê rajeker daxwazî red kirin. + credential_flow_not_configured: Herikîna pêborînê bawername ya xwediyê çavkaniyê, ji ber Doorkeeper.configure.resource_owner_from_credentials nehat pevsazkirin. + invalid_client: Erêkirina nasnameyê rajegir ji ber rajegirê nediyar têk çû, erêkirina nasnameyê rajegir di nav da tinne an jî rêbaza erêkirinê ne piştgirêdayî ye. + invalid_grant: Mafê ku hatiye peyda kirin ne derbasdar e, qediya ye, pûç e, girêdana ya ku di daxwaza mafê de tê bikaranîn li hev nagire an jî rajegirekî din hildaye. + invalid_redirect_uri: Girêdan beralîkirî ya di nav da ne derbasdar e. + invalid_request: + missing_param: 'Pîvana hewce dike kêm e: %{value}.' + request_not_authorized: Hewceye daxwazî rêdayî be. Ji bo daxwazî rêdayî be pîvana hewce dike kêm an jî betal e. + unknown: Di nav daxwazîyê de pîvanekî hewceyî kêm e. Nirxekî pîvanê bê piştgirêdayî tê de heye an jî wek din xelet e. + invalid_resource_owner: Bawernameyên xwediyê çavkanîyê yên hatine pêşkeş kirin ne derbasdar e an jî xwedîyê çavkanîyê nayê dîtin + invalid_scope: Berfirehiya tê xwestin nederbasdare, nenas e, an jî xelet e. + invalid_token: + expired: Dema nîşana gihîştinê qediya + revoked: Nîşana gihîştin hatibû pûçkirin + unknown: Nîşana gihîştinê derbasdar e + resource_owner_authenticator_not_configured: Xwedîyê çavkanîyê, ji ber ku nehatîye sazkirin bi ser neket di Doorkeeper.configure.resource_owner_authenticator de. + server_error: Rajekarê rastandinê bi şertek nediyar re rûbirû ma ku nehişt ku ew daxwazê ​​bicîh bîne. + temporarily_unavailable: Mafê rajekarê hetta demekî ji ber zêde barkirinê an jî lê nihêrîna rajekarê daxwaz bi cîh nay. + unauthorized_client: Rajegir nahêlê ku vê daxwazê bi vê awayê bicîh bîne. + unsupported_grant_type: Cureyê maf dayînê ji alîyê rajekara mafê va ne piştgirêdayî ye. + unsupported_response_type: Mafê rajekarê cûreya vê bersîvê piştgirêdayî nîne. + flash: + applications: + create: + notice: Sepan hate çêkirin. + destroy: + notice: Sepan hate jêbirin. + update: + notice: Sepan hate rojanekirin. + authorized_applications: + destroy: + notice: Sepan hate dûrxisitn. + layouts: + admin: + nav: + applications: Sepan + oauth2_provider: Peydakarê OAuth2 + application: + title: Mafê dayînê OAuth pêwist e + scopes: + admin:read: hemû daneyên li ser rajekar bixwîne + admin:read:accounts: zanyariyên hestiyar yên hemû ajimêran li ser rajekar bixwîne + admin:read:reports: zanyariyên hestiyar yên hemû gilîyan û ajimêrên gilêkirî li ser rajekar bixwîne + admin:write: hemû daneyên li ser rajekar biguherîne + admin:write:accounts: di ajimêrê de çalakiyên li hev kirî pêk bîne + admin:write:reports: di ragihandinê de çalakiyên li hev kirî pêk bîne + follow: têkiliyên ajimêrê biguherîne + push: agahdariyên xwe bistîne + read: hemû daneyên ajimêra xwe bixwîne + read:accounts: zanyariyên ajimêran bibîne + read:blocks: ajimêran ku te astenkiriye bibîne + read:bookmarks: şûnpelên xwe bibîne + read:favourites: bijarteyên xwe bibîne + read:filters: parzûnûn xwe bibîne + read:follows: şopînerên xwe bibîne + read:lists: rêzoka xwe bibîne + read:mutes: ajimêrên bêdeng kirî bibîne + read:notifications: agahdariyên xwe bibîne + read:reports: ragihandinên xwe bibîne + read:search: li ser navê xwe lêgerîn bike + read:statuses: hemû şandiyan bibîne + write: hemû daneyên ajimêra xwe biguherîne + write:accounts: profîla xwe biguherîne + write:blocks: hemû ajimêr û navperan asteng bike + write:bookmarks: şandiyan di şûnpelê de tomar bike + write:favourites: şandiyên bijarte + write:filters: parzûnan çê bike + write:follows: kesan bişopîne + write:lists: rêzokan çê bike + write:media: pelên medya bar bike + write:mutes: mirovan û axaftinan bêdeng bike + write:notifications: agahdariyên xwe pak bike + write:reports: mirovên din gilî bike + write:statuses: şandiyekê biweşîne diff --git a/config/locales/doorkeeper.lv.yml b/config/locales/doorkeeper.lv.yml index 1be0eabc0..547facc8e 100644 --- a/config/locales/doorkeeper.lv.yml +++ b/config/locales/doorkeeper.lv.yml @@ -1 +1,154 @@ +--- lv: + activerecord: + attributes: + doorkeeper/application: + name: Lietotnes nosaukums + redirect_uri: Novirzīšanas URI + scopes: Darbības sfēras + website: Lietotnes mājvieta + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: nedrīkst saturēt fragmentu. + invalid_uri: jābūt derīgam URI. + relative_uri: jābūt absolūtam URI. + secured_uri: jābūt HTTPS/SSL URI. + doorkeeper: + applications: + buttons: + authorize: Autorizēt + cancel: Atcelt + destroy: Iznīcināt + edit: Rediģēt + submit: Apstiprināt + confirmations: + destroy: Vai esi pārliecināts? + edit: + title: Rediģēt pieteikumu + form: + error: Hmm! Pārbaudi, vai tavā veidlapā nav kļūdu + help: + native_redirect_uri: Lokālajiem testiem izmanto %{native_redirect_uri} + redirect_uri: Katram URI izmanto vienu līniju + scopes: Atdali darbības jomas ar atstarpēm. Lai izmantotu noklusējuma darbības jomas, atstāj tukšu. + index: + application: Lietotne + callback_url: Atzvanīšanas URL + delete: Dzēst + empty: Tev nav lietotņu. + name: Nosaukums + new: Jauns pieteikums + scopes: Darbības sfēras + show: Parādīt + title: Tavas lietotnes + new: + title: Jauns pieteikums + show: + actions: Darbības + application_id: Klienta atslēga + callback_urls: Atzvanīšanas URL + scopes: Darbības sfēras + secret: Klienta noslēpums + title: 'Lietotne: %{name}' + authorizations: + buttons: + authorize: Autorizēt + deny: Aizliegt + error: + title: Radās kļūda + new: + able_to: Tā varēs + prompt: Lietotne %{client_name} prasa piekļuvi tavam kontam + title: Nepieciešama autorizācija + show: + title: Nokopē šo autorizācijas kodu un ielīmē to lietotnē. + authorized_applications: + buttons: + revoke: Atsaukt + confirmations: + revoke: Vai esi pārliecināts? + index: + application: Lietotne + created_at: Autorizēts + date_format: "%Y-%m-%d %H:%M:%S" + scopes: Darbības sfēras + title: Tevis autorizētās lietotnes + errors: + messages: + access_denied: Resursa īpašnieks vai autorizācijas serveris pieprasījumu noraidīja. + credential_flow_not_configured: Resursa īpašnieka paroles akreditācijas datu plūsma neizdevās, jo Doorkeeper.configure.resource_owner_from_credentials nebija konfigurēts. + invalid_client: Klienta autentifikācija neizdevās nezināma klienta, klienta autentifikācijas vai neatbalstītas autentifikācijas metodes dēļ. + invalid_grant: Sniegtā autorizācijas piekrišana nav derīga, tai ir beidzies derīguma termiņš, tā ir atsaukta, tā neatbilst autorizācijas pieprasījumā izmantotajam novirzīšanas URI vai tika izsniegta citam klientam. + invalid_redirect_uri: Iekļauts novirzīšanas uri nav derīgs. + invalid_request: + missing_param: 'Trūkst pieprasītā parametra: %{value}.' + request_not_authorized: Pieprasījums ir jāautorizē. Trūkst vai nav derīgs pieprasījuma autorizēšanai nepieciešamais parametrs. + unknown: Pieprasījumā trūkst nepieciešamā parametra, tajā ir neatbalstīta parametra vērtība vai tas ir citādi nepareizi veidots. + invalid_resource_owner: Norādītie resursa īpašnieka akreditācijas dati nav derīgi, vai arī resursa īpašnieku nevar atrast + invalid_scope: Pieprasītā darbības joma nav derīga, nav zināma vai ir nepareizi veidota. + invalid_token: + expired: Piekļuves pilnvaras derīguma termiņš ir beidzies + revoked: Piekļuves pilnvara tika atsaukta + unknown: Piekļuves pilnvara nav derīga + resource_owner_authenticator_not_configured: Resursa īpašnieka atrašana neizdevās, jo Doorkeeper.configure.resource_owner_authenticator nav savienots. + server_error: Autorizācijas serverim radās neparedzēts nosacījums, kas neļāva izpildīt pieprasījumu. + temporarily_unavailable: Autorizācijas serveris pašlaik nevar apstrādāt pieprasījumu servera īslaicīgas pārslodzes vai apkopes dēļ. + unauthorized_client: Klients nav pilnvarots izpildīt šo pieprasījumu, izmantojot šo metodi. + unsupported_grant_type: Autorizācijas serveris neatbalsta atļaujas piešķiršanas veidu. + unsupported_response_type: Autorizācijas serveris neatbalsta šo atbildes veidu. + flash: + applications: + create: + notice: Lietotne izveidota. + destroy: + notice: Lietotne izdzēsta. + update: + notice: Lietotne atjaunināta. + authorized_applications: + destroy: + notice: Lietotne atsaukta. + layouts: + admin: + nav: + applications: Lietotnes + oauth2_provider: OAuth2 nodrošinātājs + application: + title: OAuth nepieciešama autorizācija + scopes: + admin:read: lasīt visus datus uz servera + admin:read:accounts: lasīt sensitīvu informāciju no visiem kontiem + admin:read:reports: lasīt sensitīvu informāciju no visiem pārskatiem un kontiem, par kuriem ziņots + admin:write: modificēt visus datus uz servera + admin:write:accounts: veikt moderācijas darbības kontos + admin:write:reports: veikt moderācijas darbības pārskatos + follow: mainīt konta attiecības + push: saņemt savus push paziņojumus + read: lasīt visus sava konta datus + read:accounts: apskatīt kontu informāciju + read:blocks: apskatīt savus blokus + read:bookmarks: apskatīt savas grāmatzīmes + read:favourites: apskatīt savu izlasi + read:filters: apskatīt savus filtrus + read:follows: apskatīt savus sekotājus + read:lists: apskatīt savus sarakstus + read:mutes: apskatīt savus apklusinātos + read:notifications: apskatīt savus paziņojumus + read:reports: apskatīt savus pārskatus + read:search: meklēt savā vārdā + read:statuses: skatīt visus ierakstus + write: labot visus sava konta datus + write:accounts: labot manu profilu + write:blocks: bloķēt kontus un domēnus + write:bookmarks: pievienotās grāmatzīmes + write:favourites: iecienītākās ziņas + write:filters: izveidot filtrus + write:follows: seko cilvēkiem + write:lists: izveido sarakstus + write:media: pievieno mediju datnes + write:mutes: apklusini cilvēkus un sarunas + write:notifications: notīri savus paziņojumus + write:reports: ziņo par citiem cilvēkiem + write:statuses: publicē ziņas diff --git a/config/locales/doorkeeper.no.yml b/config/locales/doorkeeper.no.yml index 0783b8723..eeddcfa36 100644 --- a/config/locales/doorkeeper.no.yml +++ b/config/locales/doorkeeper.no.yml @@ -73,6 +73,7 @@ index: application: Applikasjon created_at: Autorisert + date_format: "%d. %m %Y kl. %H.%M.%S" scopes: Omfang title: Dine autoriserte applikasjoner errors: @@ -82,6 +83,10 @@ invalid_client: Klientautentisering feilet på grunn av ukjent klient, ingen autentisering inkludert, eller autentiseringsmetode er ikke støttet. invalid_grant: Autoriseringen er ugyldig, utløpt, opphevet, stemmer ikke overens med omdirigerings-URIen eller var utstedt til en annen klient. invalid_redirect_uri: Den inkluderte omdirigerings-URLen er ikke gyldig. + invalid_request: + missing_param: 'Mangler påkrevd parameter: %{value}.' + request_not_authorized: Forespørselen må godkjennes. Påkrevd parameter for godkjenningsforespørselen mangler eller er ugyldig. + unknown: Forespørselen mangler en påkrevd parameter, inkluderer en ukjent parameterverdi, eller er utformet for noe annet. invalid_resource_owner: Ressurseierens detaljer er ikke gyldige, eller så er det ikke mulig å finne eieren invalid_scope: Det etterspurte omfanget er ugyldig, ukjent eller har feil struktur. invalid_token: diff --git a/config/locales/doorkeeper.pt-BR.yml b/config/locales/doorkeeper.pt-BR.yml index cadc5a410..822159c10 100644 --- a/config/locales/doorkeeper.pt-BR.yml +++ b/config/locales/doorkeeper.pt-BR.yml @@ -29,10 +29,10 @@ pt-BR: edit: title: Editar aplicativo form: - error: Eita! Verifique o seu formulário para saber de possíveis erros + error: Eita! Verifique o seu formulário e procure possíveis erros help: native_redirect_uri: Use %{native_redirect_uri} para testes locais - redirect_uri: Use uma linha para cada link + redirect_uri: Use uma linha por link scopes: Separe autorizações com espaços. Deixe em branco para usar autorizações padrões. index: application: Aplicativos @@ -56,7 +56,7 @@ pt-BR: authorizations: buttons: authorize: Autorizar - deny: Negar + deny: Recusar error: title: Ocorreu um erro new: @@ -78,20 +78,24 @@ pt-BR: title: Aplicativos autorizados errors: messages: - access_denied: O proprietário ou servidor de autorização negou a solicitação. - credential_flow_not_configured: Cadeira de Credenciais de Senha do Proprietário falhou porque Doorkeeper.configure.resource_owner_from_credentials não foram configuradas. + access_denied: O proprietário do recurso ou servidor de autorização recusou a solicitação. + credential_flow_not_configured: Fluxo das Credenciais de Senha do Proprietário do Recurso falhou porque Doorkeeper.configure.resource_owner_from_credentials não foi configurado. invalid_client: Autenticação do cliente falhou por causa de um cliente desconhecido, nenhum cliente de autenticação foi incluído ou o método de autenticação não é suportado. invalid_grant: A garantia de autorização está inválida, expirou ou foi revogada, não é equivalente ao link de redirecionamento usado na solicitação de autorização ou foi emitido por outro cliente. - invalid_redirect_uri: O link de redirecionamento não é válido. - invalid_resource_owner: As credenciais do proprietário informadas não são válidas ou o proprietário não pôde ser encontrado - invalid_scope: A autorização requirida é inválida, desconhecida ou está mal formatada. + invalid_redirect_uri: O link de redirecionamento é inválido. + invalid_request: + missing_param: 'Parâmetro obrigatório faltando: %{value}.' + request_not_authorized: A solicitação precisa ser autorizada. O parâmetro obrigatório para autorização da solicitação está ausente ou inválido. + unknown: A solicitação não possui um parâmetro obrigatório, inclui um valor não suportado ou está malformado. + invalid_resource_owner: As credenciais do proprietário informadas são inválidas ou o proprietário não pôde ser encontrado + invalid_scope: A autorização necessária é inválida, desconhecida ou está malformada. invalid_token: expired: O código de acesso expirou revoked: O código de acesso foi revogado unknown: O código de acesso é inválido resource_owner_authenticator_not_configured: A procura pelo Proprietário do Recurso falhou porque Doorkeeper.configure.resource_owner_authenticator não foi configurado. - server_error: O servidor de autorização encontrou uma condição inesperada que preveniu a solicitação de ser respondida. - temporarily_unavailable: O servidor de autorização é incapaz de lidar com a solicitação no momento devido à múltiplas requisições ou manutenção programada. + server_error: O servidor de autorização encontrou uma condição inesperada que impediu a solicitação de ser respondida. + temporarily_unavailable: O servidor de autorização não consegue lidar com a solicitação no momento devido à múltiplas solicitações ou manutenção programada. unauthorized_client: O cliente não possui autorização para executar esta solicitação usando este método. unsupported_grant_type: O tipo de garantia de autorização não é suportado pelo servidor de autorização. unsupported_response_type: O servidor de autorização não suporta este tipo de resposta. @@ -124,13 +128,13 @@ pt-BR: push: receber notificações push read: ler todos os dados da sua conta read:accounts: ver informações das contas - read:blocks: ver seus bloqueios + read:blocks: ver seus bloqueados read:bookmarks: ver seus salvos read:favourites: ver seus favoritos read:filters: ver seus filtros read:follows: ver quem você segue read:lists: ver suas listas - read:mutes: ver seus silenciamentos + read:mutes: ver seus silenciados read:notifications: ver suas notificações read:reports: ver suas denúncias read:search: pesquisar em seu nome diff --git a/config/locales/doorkeeper.si.yml b/config/locales/doorkeeper.si.yml index 9e399ec31..5a97eb41f 100644 --- a/config/locales/doorkeeper.si.yml +++ b/config/locales/doorkeeper.si.yml @@ -4,22 +4,32 @@ si: attributes: doorkeeper/application: name: යෙදුමේ නම + website: යෙදුමේ වියමන අඩවිය doorkeeper: applications: buttons: cancel: අවලංගු destroy: විනාශ කරන්න edit: සංස්කරණය + submit: යොමන්න confirmations: destroy: ඔබට විශ්වාසද? + edit: + title: යෙදුම සංස්කරණය කරන්න index: application: යෙදුම + empty: ඔබට කිසිම යෙදුමක් නැත. name: නම + new: නව යෙදුම show: පෙන්වන්න title: ඔබගේ යෙදුම් + new: + title: නව යෙදුම show: actions: ක්‍රියාමාර්ග application_id: අනුග්‍රාහක යතුර + secret: අනුග්‍රාහකයේ රහස + title: 'යෙදුම: %{name}' authorizations: buttons: authorize: සත්‍යාපනය @@ -33,7 +43,21 @@ si: admin: nav: applications: යෙදුම් + oauth2_provider: වි.සත්‍යා.2 (OAuth) සැපයුම්කරු + application: + title: වි.සත්‍යා. (OAuth) අනුමැතිය අවශ්‍යයයි scopes: + admin:read: සේවාදායකයේ ඇති සියලුම දත්ත කියවන්න + admin:read:accounts: සියලුම ගිණුම් වල සංවේදී තොරතුරු කියවන්න + admin:read:reports: සියලුම වාර්තා සහ වාර්තා කළ ගිණුම් වල සංවේදී තොරතුරු කියවන්න + read: ඔබගේ ගිණුමේ සියලුම දත්ත කියවන්න read:filters: ඔබගේ පෙරහන් බලන්න read:lists: ඔබගේ ලැයිස්තු බලන්න read:notifications: ඔබගේ දැනුම්දීම් බලන්න + read:search: ඔබ වෙනුවට සොයන්න + write:blocks: ගිණුම් සහ වසම් අවහිර කරන්න + write:filters: පෙරහන් සාදන්න + write:media: මාධ්‍ය ගොනු උඩුගත කරන්න + write:mutes: මිනිසුන් සහ සංවාද නිහඬකරන්න + write:notifications: ඔබගේ දැනුම්දීම් හිස්කරන්න + write:reports: වෙනත් මිනිසුන් වාර්තා කරන්න diff --git a/config/locales/doorkeeper.th.yml b/config/locales/doorkeeper.th.yml index 54ca4dc14..f95276383 100644 --- a/config/locales/doorkeeper.th.yml +++ b/config/locales/doorkeeper.th.yml @@ -81,10 +81,13 @@ th: access_denied: เจ้าของทรัพยากรหรือเซิร์ฟเวอร์การอนุญาตปฏิเสธคำขอ invalid_request: missing_param: 'พารามิเตอร์ที่จำเป็นขาดหายไป: %{value}' + invalid_scope: ขอบเขตที่ขอไม่ถูกต้อง ไม่รู้จัก หรือผิดรูปแบบ invalid_token: expired: โทเคนการเข้าถึงหมดอายุแล้ว revoked: เพิกถอนโทเคนการเข้าถึงแล้ว unknown: โทเคนการเข้าถึงไม่ถูกต้อง + resource_owner_authenticator_not_configured: การค้นหาเจ้าของทรัพยากรล้มเหลวเนื่องจากไม่ได้กำหนดค่า Doorkeeper.configure.resource_owner_authenticator + unauthorized_client: ไคลเอ็นต์ไม่ได้รับอนุญาตให้ทำคำขอนี้โดยใช้วิธีการนี้ unsupported_response_type: เซิร์ฟเวอร์การอนุญาตไม่รองรับชนิดการตอบสนองนี้ flash: applications: diff --git a/config/locales/doorkeeper.vi.yml b/config/locales/doorkeeper.vi.yml index 97cc26854..585d7ce07 100644 --- a/config/locales/doorkeeper.vi.yml +++ b/config/locales/doorkeeper.vi.yml @@ -21,7 +21,7 @@ vi: buttons: authorize: Cho phép cancel: Hủy bỏ - destroy: Xoá bỏ + destroy: Xóa bỏ edit: Sửa submit: Gửi đi confirmations: diff --git a/config/locales/el.yml b/config/locales/el.yml index 148704ef3..7b91dd9e9 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -314,32 +314,9 @@ el: updated_msg: Επιτυχής ενημέρωση του emoji! upload: Ανέβασμα dashboard: - authorized_fetch_mode: Λειτουργία εγκεκριμένης ανάκτησης - backlog: χρονοκαθυστερημένες εργασίες - config: Διαμόρφωση - feature_deletions: Διαγραφή λογαριασμών - feature_invites: Σύνδεσμοι προσκλήσεων - feature_profile_directory: Κατάλογος χρηστών - feature_registrations: Εγγραφές - feature_relay: Ανταποκριτής ομοσπονδίας - feature_timeline_preview: Προεπισκόπιση ροής - features: Λειτουργίες - hidden_service: Ομοσπονδία με κρυμμένες υπηρεσίες - open_reports: ανοιχτές καταγγελίες - pending_tags: ετικέτες προς έγκριση - pending_users: χρήστες προς έγκριση - recent_users: Πρόσφατοι χρήστες - search: Αναζήτηση πλήρους κειμένου - single_user_mode: Λειτουργία μοναδιαίου χρήστη software: Λογισμικό space: Κατανάλωση χώρου title: Ταμπλό - total_users: χρήστες συνολικά - trends: Τάσεις - week_interactions: αλληλεπιδράσεις αυτή την εβδομάδα - week_users_active: ενεργοί αυτή την εβδομάδα - week_users_new: χρήστες αυτή την εβδομάδα - whitelist_mode: Λειτουργία εγκρίσεων domain_allows: add_new: Έγκριση τομέα created_msg: Ο τομέας εγκρίθηκε με επιτυχία diff --git a/config/locales/en.yml b/config/locales/en.yml index 6274031dc..be15ad4b0 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -44,7 +44,7 @@ en: rejecting_media: 'Media files from these servers will not be processed or stored, and no thumbnails will be displayed, requiring manual click-through to the original file:' rejecting_media_title: Filtered media silenced: 'Posts from these servers will be hidden in public timelines and conversations, and no notifications will be generated from their users interactions, unless you are following them:' - silenced_title: Silenced servers + silenced_title: Limited servers suspended: 'No data from these servers will be processed, stored or exchanged, making any interaction or communication with users from these servers impossible:' suspended_title: Suspended servers unavailable_content_html: Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server. @@ -119,6 +119,7 @@ en: demote: Demote destroyed_msg: "%{username}'s data is now queued to be deleted imminently" disable: Freeze + disable_sign_in_token_auth: Disable e-mail token authentication disable_two_factor_authentication: Disable 2FA disabled: Frozen display_name: Display name @@ -127,6 +128,7 @@ en: email: Email email_status: Email status enable: Unfreeze + enable_sign_in_token_auth: Enable e-mail token authentication enabled: Enabled enabled_msg: Successfully unfroze %{username}'s account followers: Followers @@ -151,7 +153,7 @@ en: active: Active all: All pending: Pending - silenced: Silenced + silenced: Limited suspended: Suspended title: Moderation moderation_notes: Moderation notes @@ -191,8 +193,12 @@ en: search: Search search_same_email_domain: Other users with the same e-mail domain search_same_ip: Other users with the same IP - sensitive: Sensitive - sensitized: marked as sensitive + security_measures: + only_password: Only password + password_and_2fa: Password and 2FA + password_and_sign_in_token: Password and e-mail token + sensitive: Force-sensitive + sensitized: Marked as sensitive shared_inbox_url: Shared inbox URL show: created_reports: Made reports @@ -207,10 +213,10 @@ en: time_in_queue: Waiting in queue %{time} title: Accounts unconfirmed_email: Unconfirmed email - undo_sensitized: Undo sensitive - undo_silenced: Undo silence + undo_sensitized: Undo force-sensitive + undo_silenced: Undo limit undo_suspension: Undo suspension - unsilenced_msg: Successfully unlimited %{username}'s account + unsilenced_msg: Successfully undid limit of %{username}'s account unsubscribe: Unsubscribe unsuspended_msg: Successfully unsuspended %{username}'s account username: Username @@ -236,14 +242,16 @@ en: destroy_custom_emoji: Delete Custom Emoji destroy_domain_allow: Delete Domain Allow destroy_domain_block: Delete Domain Block - destroy_email_domain_block: Delete e-mail domain block + destroy_email_domain_block: Delete E-mail Domain Block destroy_ip_block: Delete IP rule destroy_status: Delete Post destroy_unavailable_domain: Delete Unavailable Domain disable_2fa_user: Disable 2FA disable_custom_emoji: Disable Custom Emoji + disable_sign_in_token_auth_user: Disable E-mail Token Authentication for User disable_user: Disable User enable_custom_emoji: Enable Custom Emoji + enable_sign_in_token_auth_user: Enable E-mail Token Authentication for User enable_user: Enable User memorialize_account: Memorialize Account promote_user: Promote User @@ -251,12 +259,12 @@ en: reopen_report: Reopen Report reset_password_user: Reset Password resolve_report: Resolve Report - sensitive_account: Mark the media in your account as sensitive - silence_account: Silence Account + sensitive_account: Force-Sensitive Account + silence_account: Limit Account suspend_account: Suspend Account unassigned_report: Unassign Report - unsensitive_account: Unmark the media in your account as sensitive - unsilence_account: Unsilence Account + unsensitive_account: Undo Force-Sensitive Account + unsilence_account: Undo Limit Account unsuspend_account: Unsuspend Account update_announcement: Update Announcement update_custom_emoji: Update Custom Emoji @@ -285,8 +293,10 @@ en: destroy_unavailable_domain_html: "%{name} resumed delivery to domain %{target}" disable_2fa_user_html: "%{name} disabled two factor requirement for user %{target}" disable_custom_emoji_html: "%{name} disabled emoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} disabled e-mail token authentication for %{target}" disable_user_html: "%{name} disabled login for user %{target}" enable_custom_emoji_html: "%{name} enabled emoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} enabled e-mail token authentication for %{target}" enable_user_html: "%{name} enabled login for user %{target}" memorialize_account_html: "%{name} turned %{target}'s account into a memoriam page" promote_user_html: "%{name} promoted user %{target}" @@ -295,11 +305,11 @@ en: reset_password_user_html: "%{name} reset password of user %{target}" resolve_report_html: "%{name} resolved report %{target}" sensitive_account_html: "%{name} marked %{target}'s media as sensitive" - silence_account_html: "%{name} silenced %{target}'s account" + silence_account_html: "%{name} limited %{target}'s account" suspend_account_html: "%{name} suspended %{target}'s account" unassigned_report_html: "%{name} unassigned report %{target}" unsensitive_account_html: "%{name} unmarked %{target}'s media as sensitive" - unsilence_account_html: "%{name} unsilenced %{target}'s account" + unsilence_account_html: "%{name} undid limit of %{target}'s account" unsuspend_account_html: "%{name} unsuspended %{target}'s account" update_announcement_html: "%{name} updated announcement %{target}" update_custom_emoji_html: "%{name} updated emoji %{target}" @@ -361,32 +371,28 @@ en: updated_msg: Emoji successfully updated! upload: Upload dashboard: - authorized_fetch_mode: Secure mode - backlog: backlogged jobs - config: Configuration - feature_deletions: Account deletions - feature_invites: Invite links - feature_profile_directory: Profile directory - feature_registrations: Registrations - feature_relay: Federation relay - feature_timeline_preview: Timeline preview - features: Features - hidden_service: Federation with hidden services - open_reports: open reports - pending_tags: hashtags waiting for review - pending_users: users waiting for review - recent_users: Recent users - search: Full-text search - single_user_mode: Single user mode + active_users: active users + interactions: interactions + media_storage: Media storage + new_users: new users + opened_reports: reports opened + pending_reports_html: + one: "1 pending reports" + other: "%{count} pending reports" + pending_tags_html: + one: "1 pending hashtags" + other: "%{count} pending hashtags" + pending_users_html: + one: "1 pending users" + other: "%{count} pending users" + resolved_reports: reports resolved software: Software + sources: Sign-up sources space: Space usage title: Dashboard - total_users: users in total - trends: Trends - week_interactions: interactions this week - week_users_active: active this week - week_users_new: users this week - whitelist_mode: Limited federation mode + top_languages: Top active languages + top_servers: Top active servers + website: Website domain_allows: add_new: Allow federation with domain created_msg: Domain has been successfully allowed for federation @@ -421,14 +427,14 @@ en: rejecting_media: rejecting media files rejecting_reports: rejecting reports severity: - silence: silenced + silence: limited suspend: suspended show: affected_accounts: one: One account in the database affected other: "%{count} accounts in the database affected" retroactive: - silence: Unsilence existing affected accounts from this domain + silence: Undo limit of existing affected accounts from this domain suspend: Unsuspend existing affected accounts from this domain title: Undo domain block for %{domain} undo: Undo @@ -569,6 +575,7 @@ en: resolved: Resolved resolved_msg: Report successfully resolved! status: Status + target_origin: Origin of reported account title: Reports unassign: Unassign unresolved: Unresolved @@ -1004,6 +1011,17 @@ en: lists: errors: limit: You have reached the maximum amount of lists + login_activities: + authentication_methods: + otp: two-factor authentication app + password: password + sign_in_token: e-mail security code + webauthn: security keys + description_html: If you see activity that you don't recognize, consider changing your password and enabling two-factor authentication. + empty: No authentication history available + failed_sign_in_html: Failed sign-in attempt with %{method} from %{ip} (%{browser}) + successful_sign_in_html: Successful sign-in with %{method} from %{ip} (%{browser}) + title: Authentication history media_attachments: validations: images_and_video: Cannot attach a video to a post that already contains images @@ -1211,6 +1229,7 @@ en: revoke: Revoke revoke_success: Session successfully revoked title: Sessions + view_authentication_history: View authentication history of your account settings: account: Account account_settings: Account settings @@ -1231,6 +1250,7 @@ en: preferences: Preferences profile: Profile relationships: Follows and followers + statuses_cleanup: Automated post deletion two_factor_authentication: Two-factor Auth webauthn_authentication: Security keys statuses: @@ -1282,6 +1302,40 @@ en: public_long: Everyone can see unlisted: Unlisted unlisted_long: Everyone can see, but not listed on public timelines + statuses_cleanup: + enabled: Automatically delete old posts + enabled_hint: Automatically deletes your posts once they reach a specified age threshold, unless they match one of the exceptions below + exceptions: Exceptions + explanation: Because deleting posts is an expensive operation, this is done slowly over time when the server is not otherwise busy. For this reason, your posts may be deleted a while after they reach the age threshold. + ignore_favs: Ignore favourites + ignore_reblogs: Ignore boosts + interaction_exceptions: Exceptions based on interactions + interaction_exceptions_explanation: Note that there is no guarantee for posts to be deleted if they go below the favourite or boost threshold after having once gone over them. + keep_direct: Keep direct messages + keep_direct_hint: Doesn't delete any of your direct messages + keep_media: Keep posts with media attachments + keep_media_hint: Doesn't delete any of your posts that have media attachments + keep_pinned: Keep pinned posts + keep_pinned_hint: Doesn't delete any of your pinned posts + keep_polls: Keep polls + keep_polls_hint: Doesn't delete any of your polls + keep_self_bookmark: Keep posts you bookmarked + keep_self_bookmark_hint: Doesn't delete your own posts if you have bookmarked them + keep_self_fav: Keep posts you favourited + keep_self_fav_hint: Doesn't delete your own posts if you have favourited them + min_age: + '1209600': 2 weeks + '15778476': 6 months + '2629746': 1 month + '31556952': 1 year + '5259492': 2 months + '63113904': 2 years + '7889238': 3 months + min_age_label: Age threshold + min_favs: Keep posts favourited at least + min_favs_hint: Doesn't delete any of your posts that has received at least this amount of favourites. Leave blank to delete posts regardless of their number of favourites + min_reblogs: Keep posts boosted at least + min_reblogs_hint: Doesn't delete any of your posts that has been boosted at least this number of times. Leave blank to delete posts regardless of their number of boosts stream_entries: pinned: Pinned post reblogged: boosted @@ -1451,7 +1505,7 @@ en: otp_lost_help_html: If you lost access to both, you may get in touch with %{email} seamless_external_login: You are logged in via an external service, so password and e-mail settings are not available. signed_in_as: 'Signed in as:' - suspicious_sign_in_confirmation: You appear to not have logged in from this device before, and you haven't logged in for a while, so we're sending a security code to your e-mail address to confirm that it's you. + suspicious_sign_in_confirmation: You appear to not have logged in from this device before, so we're sending a security code to your e-mail address to confirm that it's you. verification: explanation_html: 'You can verify yourself as the owner of the links in your profile metadata. For that, the linked website must contain a link back to your Mastodon profile. The link back must have a rel="me" attribute. The text content of the link does not matter. Here is an example:' verification: Verification diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 3031acb5a..6841bb439 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -175,6 +175,10 @@ eo: search: Serĉi search_same_email_domain: Aliaj uzantoj kun la sama retpoŝta domajno search_same_ip: Aliaj uzantoj kun la sama IP + security_measures: + only_password: Nur pasvorto + password_and_2fa: Pasvorto kaj 2FA + password_and_sign_in_token: Pasvorto kaj retpoŝta ĵetono sensitive: Tikla sensitized: markita tikla shared_inbox_url: URL de kunhavigita leterkesto @@ -324,32 +328,9 @@ eo: updated_msg: Emoĝio sukcese ĝisdatigita! upload: Alŝuti dashboard: - authorized_fetch_mode: Sekura reĝimo - backlog: postigitaj taskoj - config: Agordado - feature_deletions: Forigo de kontoj - feature_invites: Invitaj ligiloj - feature_profile_directory: Profilujo - feature_registrations: Registriĝoj - feature_relay: Federacia ripetilo - feature_timeline_preview: Templinio antaŭvidi - features: Funkcioj - hidden_service: Federacio kun kaŝitaj servoj - open_reports: nesolvitaj signaloj - pending_tags: kradvortoj atendantaj revizion - pending_users: uzantoj atendantaj revizion - recent_users: Lastatempaj uzantoj - search: Tutteksta serĉado - single_user_mode: Unuuzanta reĝimo software: Programo space: Memorspaca uzado title: Kontrolpanelo - total_users: uzantoj sume - trends: Furoraĵoj - week_interactions: interagoj tiusemajne - week_users_active: aktivaj tiusemajne - week_users_new: uzantoj tiusemajne - whitelist_mode: En la blanka listo domain_allows: add_new: Aldoni domajnon al la blanka listo created_msg: Domajno estis sukcese aldonita al la blanka listo @@ -413,8 +394,12 @@ eo: suppressed: Subpremita title: Rekomendoj de sekvado instances: + back_to_all: Ĉiuj + back_to_limited: Limigita + back_to_warning: Averta by_domain: Domajno delivery: + all: Ĉiuj warning: Averto delivery_available: Liverado disponeblas empty: Neniuj domajnoj trovitaj. @@ -662,7 +647,7 @@ eo: remove: Malligili alinomon appearance: advanced_web_interface: Altnivela retpaĝa interfaco - advanced_web_interface_hint: 'Se vi volas uzi la tutan larĝecon de via ekrano, la kompleksa reta interfaco permesas al vi agordi multajn malsamajn kolumnojn por vidi tiom da informoj kiom vi volas samtempe: Hejmo, sciigoj, fratara tempolinio, kaj ajna kvanto de listoj kaj kradvortoj.' + advanced_web_interface_hint: 'Se vi volas uzi la tutan larĝecon de via ekrano, la kompleksa reta interfaco permesas al vi agordi multajn malsamajn kolumnojn por vidi tiom da informoj kiom vi volas samtempe: Hejmo, sciigoj, fratara templinio, kaj ajna kvanto de listoj kaj kradvortoj.' animations_and_accessibility: Animacioj kaj alirebleco confirmation_dialogs: Konfirmaj fenestroj discovery: Eltrovo @@ -913,6 +898,12 @@ eo: lists: errors: limit: Vi atingis la maksimuman kvanton de listoj + login_activities: + authentication_methods: + password: pasvorto + sign_in_token: retpoŝta sekureca kodo + webauthn: sekurecaj ŝlosiloj + title: Aŭtentiga historio media_attachments: validations: images_and_video: Aldoni videon al mesaĝo, kiu jam havas bildojn ne eblas @@ -1169,6 +1160,19 @@ eo: public_long: Ĉiuj povas vidi unlisted: Nelistigita unlisted_long: Ĉiuj povas vidi, sed nelistigita en publikaj templinioj + statuses_cleanup: + enabled: Aŭtomate forigi malnovajn postojn + exceptions: Esceptoj + ignore_favs: Ignori ŝatatajn + ignore_reblogs: Ignori akcelojn + min_age: + '1209600': 2 semajnoj + '15778476': 6 monatoj + '2629746': 1 monato + '31556952': 1 jaro + '5259492': 2 monatoj + '63113904': 2 jaroj + '7889238': 3 monatoj stream_entries: pinned: Alpinglita reblogged: diskonigita diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 019887bb8..bcfab74c8 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -44,7 +44,7 @@ es-AR: rejecting_media: 'Los archivos de medios de este servidor no van a ser procesados y no se mostrarán miniaturas, lo que requiere un clic manual hacia el archivo original:' rejecting_media_title: Medios filtrados silenced: 'Los mensajes de estos servidores se ocultarán en las líneas temporales y conversaciones públicas, y no se generarán notificaciones de las interacciones de sus usuarios, a menos que los estés siguiendo:' - silenced_title: Servidores silenciados + silenced_title: Servidores limitados suspended: 'No se procesarán, almacenarán o intercambiarán datos de estos servidores, haciendo imposible cualquier interacción o comunicación con los usuarios de estos servidores:' suspended_title: Servidores suspendidos unavailable_content_html: Mastodon generalmente te permite ver contenido e interactuar con usuarios de cualquier otro servidor en el fediverso. Estas son las excepciones que se hicieron en este servidor en particular. @@ -119,6 +119,7 @@ es-AR: demote: Bajar de nivel destroyed_msg: Los datos de %{username} están ahora en cola para ser eliminados inminentemente disable: Congelar + disable_sign_in_token_auth: Deshabilitar autenticación de token por correo electrónico disable_two_factor_authentication: Deshabilitar 2FA disabled: Congelada display_name: Nombre para mostrar @@ -127,6 +128,7 @@ es-AR: email: Correo electrónico email_status: Estado del correo enable: Descongelar + enable_sign_in_token_auth: Habilitar autenticación de token por correo electrónico enabled: Habilitada enabled_msg: Se descongeló exitosamente la cuenta de %{username} followers: Seguidores @@ -151,7 +153,7 @@ es-AR: active: Activas all: Todas pending: Pendientes - silenced: Silenciadas + silenced: Limitadas suspended: Suspendidas title: Moderación moderation_notes: Notas de moderación @@ -191,8 +193,12 @@ es-AR: search: Buscar search_same_email_domain: Otros usuarios con el mismo dominio de correo electrónico search_same_ip: Otros usuarios con la misma dirección IP - sensitive: Sensible - sensitized: marcado como sensible + security_measures: + only_password: Sólo contraseña + password_and_2fa: Contraseña y 2FA + password_and_sign_in_token: Contraseña y token por correo electrónico + sensitive: Forzar como sensible + sensitized: Marcado como sensible shared_inbox_url: Dirección web de la bandeja de entrada compartida show: created_reports: Denuncias hechas @@ -207,8 +213,8 @@ es-AR: time_in_queue: Esperando en cola %{time} title: Cuentas unconfirmed_email: Correo electrónico sin confirmar - undo_sensitized: Deshacer marcado como sensible - undo_silenced: Deshacer silenciado + undo_sensitized: Deshacer Forzar como sensible + undo_silenced: Deshacer límite undo_suspension: Deshacer suspensión unsilenced_msg: Se quitó exitosamente el límite de la cuenta de %{username} unsubscribe: Desuscribirse @@ -242,8 +248,10 @@ es-AR: destroy_unavailable_domain: Eliminar dominio no disponible disable_2fa_user: Deshabilitar 2FA disable_custom_emoji: Deshabilitar emoji personalizado + disable_sign_in_token_auth_user: Deshabilitar autenticación de token por correo electrónico para el usuario disable_user: Deshabilitar usuario enable_custom_emoji: Habilitar emoji personalizado + enable_sign_in_token_auth_user: Habilitar autenticación de token por correo electrónico para el usuario enable_user: Habilitar usuario memorialize_account: Convertir en cuenta conmemorativa promote_user: Promover usuario @@ -251,12 +259,12 @@ es-AR: reopen_report: Reabrir denuncia reset_password_user: Cambiar contraseña resolve_report: Resolver denuncia - sensitive_account: Marcar los medios en tu cuenta como sensibles - silence_account: Silenciar cuenta + sensitive_account: Forzar cuenta como sensible + silence_account: Limitar cuenta suspend_account: Suspender cuenta unassigned_report: Desasignar denuncia - unsensitive_account: Desmarcar los medios en tu cuenta como sensibles - unsilence_account: Dejar de silenciar cuenta + unsensitive_account: Desmarcar Forzar cuenta como sensible + unsilence_account: Deshacer Limitar cuenta unsuspend_account: Dejar de suspender cuenta update_announcement: Actualizar anuncio update_custom_emoji: Actualizar emoji personalizado @@ -285,8 +293,10 @@ es-AR: destroy_unavailable_domain_html: "%{name} reanudó la entrega al dominio %{target}" disable_2fa_user_html: "%{name} deshabilitó el requerimiento de dos factores para el usuario %{target}" disable_custom_emoji_html: "%{name} deshabilitó el emoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} deshabilitó la autenticación de token por correo electrónico para %{target}" disable_user_html: "%{name} deshabilitó el inicio de sesión para el usuario %{target}" enable_custom_emoji_html: "%{name} habilitó el emoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} habilitó la autenticación de token por correo electrónico para %{target}" enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}" memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una cuenta conmemorativa" promote_user_html: "%{name} promovió al usuario %{target}" @@ -295,11 +305,11 @@ es-AR: reset_password_user_html: "%{name} cambió la contraseña del usuario %{target}" resolve_report_html: "%{name} resolvió la denuncia %{target}" sensitive_account_html: "%{name} marcó los medios de %{target} como sensibles" - silence_account_html: "%{name} silenció la cuenta de %{target}" + silence_account_html: "%{name} limitó la cuenta de %{target}" suspend_account_html: "%{name} suspendió la cuenta de %{target}" unassigned_report_html: "%{name} desasignó la denuncia %{target}" unsensitive_account_html: "%{name} desmarcó los medios de %{target} como sensibles" - unsilence_account_html: "%{name} quitó el silenciado de la cuenta de %{target}" + unsilence_account_html: "%{name} quitó el límite de la cuenta de %{target}" unsuspend_account_html: "%{name} quitó la suspensión de la cuenta de %{target}" update_announcement_html: "%{name} actualizó el anuncio %{target}" update_custom_emoji_html: "%{name} actualizó el emoji %{target}" @@ -361,32 +371,9 @@ es-AR: updated_msg: "¡Emoji actualizado exitosamente!" upload: Subir dashboard: - authorized_fetch_mode: Modo seguro - backlog: trabajos registrados - config: Configuración - feature_deletions: Eliminaciones de cuenta - feature_invites: Enlaces de invitación - feature_profile_directory: Directorio de perfiles - feature_registrations: Registros - feature_relay: Relé de federación - feature_timeline_preview: Previsualización de la línea temporal - features: Funciones - hidden_service: Federación con servicios ocultos - open_reports: denuncias abiertas - pending_tags: etiquetas esperando revisión - pending_users: usuarios esperando revisión - recent_users: Usuarios recientes - search: Búsqueda de texto completo - single_user_mode: Modo de usuario único software: Software space: Uso de almacenamiento title: Panel - total_users: usuarios en total - trends: Tendencias - week_interactions: interacciones esta semana - week_users_active: activos esta semana - week_users_new: usuarios esta semana - whitelist_mode: Modo de federación limitada domain_allows: add_new: Permitir federación con el dominio created_msg: El dominio fue exitosamente permitido para la federación @@ -421,14 +408,14 @@ es-AR: rejecting_media: rechazo de archivos de medios rejecting_reports: rechazo de denuncias severity: - silence: silenciados + silence: limitados suspend: suspendidos show: affected_accounts: one: Una cuenta afectada en la base de datos other: "%{count} cuentas afectadas en la base de datos" retroactive: - silence: Quitar silenciado de las cuentas existentes afectadas de este dominio + silence: Quitar límite de las cuentas existentes afectadas de este dominio suspend: Quitar suspensión de las cuentas existentes afectadas de este dominio title: Deshacer el bloqueo de dominio para %{domain} undo: Deshacer @@ -569,6 +556,7 @@ es-AR: resolved: Resueltas resolved_msg: "¡Denuncia exitosamente resuelta!" status: Estado + target_origin: Origen de la cuenta denunciada title: Denuncias unassign: Desasignar unresolved: No resueltas @@ -1004,6 +992,17 @@ es-AR: lists: errors: limit: Alcanzaste el máximo de listas + login_activities: + authentication_methods: + otp: aplicación de autenticación de dos factores + password: contraseña + sign_in_token: código de seguridad por correo electrónico + webauthn: llaves de seguridad + description_html: Si ves actividad que no reconocés, considerá cambiar tu contraseña y habilitar la autenticación de dos factores. + empty: No hay historial de autenticación disponible + failed_sign_in_html: Intento de inicio de sesión fallido con %{method} desde %{ip} (%{browser}) + successful_sign_in_html: Inicio de sesión exitoso con %{method} desde %{ip} (%{browser}) + title: Historial de autenticación media_attachments: validations: images_and_video: No se puede adjuntar un video a un mensaje que ya contenga imágenes @@ -1210,6 +1209,7 @@ es-AR: revoke: Revocar revoke_success: Sesión revocada exitosamente title: Sesiones + view_authentication_history: Ver historial de autenticación de tu cuenta settings: account: Cuenta account_settings: Config. de la cuenta @@ -1230,6 +1230,7 @@ es-AR: preferences: Configuración profile: Perfil relationships: Seguimientos + statuses_cleanup: Eliminación automática de mensajes two_factor_authentication: Autenticación de dos factores webauthn_authentication: Llaves de seguridad statuses: @@ -1281,6 +1282,40 @@ es-AR: public_long: Todos pueden ver unlisted: No listado unlisted_long: Todos pueden ver, pero no está listado en las líneas temporales públicas + statuses_cleanup: + enabled: Eliminar automáticamente mensajes antiguos + enabled_hint: Elimina automáticamente tus mensajes una vez que alcancen un umbral de edad especificado, a menos que coincidan con una de las excepciones a continuación + exceptions: Exepciones + explanation: Debido a que la eliminación de mensajes es una operación costosa, esto se hace lentamente con el tiempo cuando el servidor no está ocupado. Por esta razón, tus mensajes pueden ser borrados un poco después de que alcancen el umbral de edad. + ignore_favs: Ignorar mensajes marcados como favoritos + ignore_reblogs: Ignorar adhesiones + interaction_exceptions: Excepciones basadas en interacciones + interaction_exceptions_explanation: Tené en cuenta que no hay garantía de que los mensajes se eliminen si van por debajo del umbral de los mensajes marcados como favorito o de las adhesiones después de haberlos superado una vez. + keep_direct: Conservar mensajes directos + keep_direct_hint: No elimina ninguno de tus mensajes directos + keep_media: Conservar mensajes con archivos adjuntos + keep_media_hint: No elimina ninguno de tus mensajes con archivos adjuntos + keep_pinned: Conservar mensajes fijados + keep_pinned_hint: No elimina ninguno de tus mensajes fijados + keep_polls: Conservar encuestas + keep_polls_hint: No elimina ninguna de tus encuestas + keep_self_bookmark: Conservar mensajes que marcaste como favoritos + keep_self_bookmark_hint: No elimina tus propios mensajes si los marcaste como favoritos + keep_self_fav: Conservar mensajes marcados como favoritos + keep_self_fav_hint: No elimina tus propios mensajes si los marcaste como favoritos + min_age: + '1209600': 2 semanas + '15778476': 6 meses + '2629746': 1 mes + '31556952': 1 año + '5259492': 2 meses + '63113904': 2 años + '7889238': 3 meses + min_age_label: Umbral de edad + min_favs: Conservar mensajes marcados como favoritos de hace más de + min_favs_hint: No elimina ninguno de tus mensajes que haya recibido más de esta cantidad de favoritos. Dejá en blanco para eliminar mensajes independientemente de su número de favoritos + min_reblogs: Conservar adhesiones de hace más de + min_reblogs_hint: No elimina ninguno de tus mensajes que haya recibido más de esta cantidad de adhesiones. Dejá en blanco para eliminar mensajes independientemente de su número de adhesiones stream_entries: pinned: Mensaje fijado reblogged: adhirió a este mensaje diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index a7dc45892..0260febab 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -102,7 +102,7 @@ es-MX: approve_all: Aprobar todos approved_msg: La solicitud de registro de %{username} ha sido aprobada correctamente are_you_sure: "¿Estás seguro?" - avatar: Avatar + avatar: Foto de perfil by_domain: Dominio change_email: changed_msg: "¡El correo electrónico se ha actualizado correctamente!" @@ -119,6 +119,7 @@ es-MX: demote: Degradar destroyed_msg: Los datos de %{username} están ahora en cola para ser eliminados inminentemente disable: Deshabilitar + disable_sign_in_token_auth: Desactivar la autenticación de doble factor disable_two_factor_authentication: Desactivar autenticación de dos factores disabled: Deshabilitada display_name: Nombre @@ -127,6 +128,7 @@ es-MX: email: E-mail email_status: E-mail Status enable: Habilitar + enable_sign_in_token_auth: Habilitar la autenticación por token de correo electrónico enabled: Habilitada enabled_msg: Se ha descongelado correctamente la cuenta de %{username} followers: Seguidores @@ -191,6 +193,10 @@ es-MX: search: Buscar search_same_email_domain: Otros usuarios con el mismo dominio de correo search_same_ip: Otros usuarios con la misma IP + security_measures: + only_password: Sólo contraseña + password_and_2fa: Contraseña y 2FA + password_and_sign_in_token: Contraseña y token de correo electrónico sensitive: Sensible sensitized: marcado como sensible shared_inbox_url: URL de bandeja compartida @@ -242,8 +248,10 @@ es-MX: destroy_unavailable_domain: Eliminar Dominio No Disponible disable_2fa_user: Deshabilitar 2FA disable_custom_emoji: Deshabilitar Emoji Personalizado + disable_sign_in_token_auth_user: Deshabilitar la Autenticación por Token de Correo Electrónico para el Usuario disable_user: Deshabilitar Usuario enable_custom_emoji: Habilitar Emoji Personalizado + enable_sign_in_token_auth_user: Habilitar la Autenticación por Token de Correo Electrónico para el Usuario enable_user: Habilitar Usuario memorialize_account: Transformar en Cuenta Conmemorativa promote_user: Promover Usuario @@ -285,8 +293,10 @@ es-MX: destroy_unavailable_domain_html: "%{name} reanudó las entregas al dominio %{target}" disable_2fa_user_html: "%{name} desactivó el requisito de dos factores para el usuario %{target}" disable_custom_emoji_html: "%{name} desactivó el emoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} ha deshabilitado la autenticación por token de correo electrónico para %{target}" disable_user_html: "%{name} deshabilitó el inicio de sesión para el usuario %{target}" enable_custom_emoji_html: "%{name} activó el emoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} ha habilitado la autenticación por token de correo electrónico para %{target}" enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}" memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una página in memoriam" promote_user_html: "%{name} promoción al usuario %{target}" @@ -361,32 +371,9 @@ es-MX: updated_msg: "¡Emoji actualizado con éxito!" upload: Subir dashboard: - authorized_fetch_mode: Modo seguro - backlog: trabajos de backlog - config: Configuración - feature_deletions: Borrados de cuenta - feature_invites: Enlaces de invitación - feature_profile_directory: Directorio de perfil - feature_registrations: Registros - feature_relay: Relés de federación - feature_timeline_preview: Vista previa de la línea de tiempo - features: Características - hidden_service: Federación con servicios ocultos - open_reports: informes abiertos - pending_tags: hashtags esperando revisión - pending_users: usuarios esperando por revisión - recent_users: Usuarios recientes - search: Búsqueda por texto completo - single_user_mode: Modo único usuario software: Software space: Uso de almacenamiento title: Tablero - total_users: usuarios en total - trends: Tendencias - week_interactions: interacciones esta semana - week_users_active: activo esta semana - week_users_new: usuarios esta semana - whitelist_mode: En la lista blanca domain_allows: add_new: Añadir dominio a la lista blanca created_msg: Dominio añadido a la lista blanca con éxito @@ -569,6 +556,7 @@ es-MX: resolved: Resuelto resolved_msg: "¡La denuncia se ha resuelto correctamente!" status: Estado + target_origin: Origen de la cuenta reportada title: Reportes unassign: Desasignar unresolved: No resuelto @@ -701,7 +689,7 @@ es-MX: last_active: Última actividad most_popular: Más popular most_recent: Más reciente - name: Hashtag + name: Etiqueta review: Estado de revisión reviewed: Revisado title: Etiquetas @@ -1004,6 +992,17 @@ es-MX: lists: errors: limit: Has alcanzado la cantidad máxima de listas + login_activities: + authentication_methods: + otp: aplicación de autenticación en dos pasos + password: contraseña + sign_in_token: código de seguridad por correo electrónico + webauthn: claves de seguridad + description_html: Si ve una actividad que no reconoce, considere cambiar su contraseña y habilitar la autenticación de dos factores. + empty: No hay historial de autenticación disponible + failed_sign_in_html: Intento de inicio de sesión fallido con %{method} de %{ip} (%{browser}) + successful_sign_in_html: Inicio de sesión exitoso con %{method} desde %{ip} (%{browser}) + title: Historial de autenticación media_attachments: validations: images_and_video: No se puede adjuntar un video a un estado que ya contenga imágenes @@ -1210,6 +1209,7 @@ es-MX: revoke: Revocar revoke_success: Sesión revocada exitosamente title: Sesiones + view_authentication_history: Ver historial de autenticación de tu cuenta settings: account: Cuenta account_settings: Ajustes de la cuenta @@ -1230,6 +1230,7 @@ es-MX: preferences: Preferencias profile: Perfil relationships: Siguiendo y seguidores + statuses_cleanup: Eliminación automática de publicaciones two_factor_authentication: Autenticación de dos factores webauthn_authentication: Claves de seguridad statuses: @@ -1281,6 +1282,40 @@ es-MX: public_long: Todos pueden ver unlisted: Público, pero no mostrar en la historia federada unlisted_long: Todos pueden ver, pero no está listado en las líneas de tiempo públicas + statuses_cleanup: + enabled: Borrar automáticamente publicaciones antiguas + enabled_hint: Elimina automáticamente tus publicaciones una vez que alcancen un umbral de tiempo especificado, a menos que coincidan con alguna de las excepciones detalladas debajo + exceptions: Excepciones + explanation: Debido a que la eliminación de mensajes es una operación costosa, esto se hace lentamente, a lo largo de un tiempo, cuando el servidor no está ocupado. Por este motivo, puede que tus publicaciones sean borradas algo después de que alcancen el umbral de tiempo especificado. + ignore_favs: Ignorar favoritos + ignore_reblogs: Ignorar reblogueos + interaction_exceptions: Excepciones basadas en interacciones + interaction_exceptions_explanation: Ten en cuenta que no hay garantía de que se eliminen las publicaciones que están por debajo de los umbrales de favoritos o de reblogueos si los han superado en algún momento. + keep_direct: Mantener mensajes directos + keep_direct_hint: No elimina ninguno de tus mensajes directos + keep_media: Mantener publicaciones con multimedia adjunto + keep_media_hint: No borra ninguna de tus publicaciones con multimedia adjunto + keep_pinned: Mantener publicaciones fijadas + keep_pinned_hint: No borra ninguna de tus publicaciones fijadas + keep_polls: Mantener encuestas + keep_polls_hint: No borra ninguna de tus encuestas + keep_self_bookmark: Mantener publicaciones a las que has añadido un marcador + keep_self_bookmark_hint: No borra tus propias publicaciones si les has añadido un marcador + keep_self_fav: Mantener publicaciones que marcaste como favoritas + keep_self_fav_hint: No borra publicaciones tuyas que hayas marcado como favoritas + min_age: + '1209600': 2 semanas + '15778476': 6 meses + '2629746': 1 mes + '31556952': 1 año + '5259492': 2 meses + '63113904': 2 años + '7889238': 3 meses + min_age_label: Umbral de tiempo + min_favs: Mantener mensajes con un número de favoritos mayor que + min_favs_hint: No borra ninguna de las publicaciones que hayan recibido más de esta cantidad de favoritos. Deja en blanco para eliminar publicaciones sin importar el número de favoritos + min_reblogs: Mantener publicaciones reblogueadas más de + min_reblogs_hint: No borra ninguna de las publicaciones que hayan sido reblogueadas más de este número de veces. Deja en blanco para eliminar publicaciones sin importar el número de reblogueos stream_entries: pinned: Toot fijado reblogged: retooteado diff --git a/config/locales/es.yml b/config/locales/es.yml index 9f2f593ce..6bd81c8a2 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -119,6 +119,7 @@ es: demote: Degradar destroyed_msg: Los datos de %{username} están ahora en cola para ser eliminados inminentemente disable: Deshabilitar + disable_sign_in_token_auth: Deshabilitar la autenticación por token de correo electrónico disable_two_factor_authentication: Desactivar autenticación de dos factores disabled: Deshabilitada display_name: Nombre @@ -127,6 +128,7 @@ es: email: E-mail email_status: E-mail Status enable: Habilitar + enable_sign_in_token_auth: Habilitar la autenticación por token de correo electrónico enabled: Habilitada enabled_msg: Se ha descongelado correctamente la cuenta de %{username} followers: Seguidores @@ -191,6 +193,10 @@ es: search: Buscar search_same_email_domain: Otros usuarios con el mismo dominio de correo search_same_ip: Otros usuarios con la misma IP + security_measures: + only_password: Sólo contraseña + password_and_2fa: Contraseña y 2FA + password_and_sign_in_token: Contraseña y token de correo electrónico sensitive: Sensible sensitized: marcado como sensible shared_inbox_url: URL de bandeja compartida @@ -242,8 +248,10 @@ es: destroy_unavailable_domain: Eliminar Dominio No Disponible disable_2fa_user: Deshabilitar 2FA disable_custom_emoji: Deshabilitar Emoji Personalizado + disable_sign_in_token_auth_user: Deshabilitar la Autenticación por Token de Correo Electrónico para el Usuario disable_user: Deshabilitar Usuario enable_custom_emoji: Habilitar Emoji Personalizado + enable_sign_in_token_auth_user: Habilitar la Autenticación por Token de Correo Electrónico para el Usuario enable_user: Habilitar Usuario memorialize_account: Transformar en Cuenta Conmemorativa promote_user: Promover Usuario @@ -285,8 +293,10 @@ es: destroy_unavailable_domain_html: "%{name} reanudó las entregas al dominio %{target}" disable_2fa_user_html: "%{name} desactivó el requisito de dos factores para el usuario %{target}" disable_custom_emoji_html: "%{name} desactivó el emoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} ha deshabilitado la autenticación por token de correo electrónico para %{target}" disable_user_html: "%{name} deshabilitó el inicio de sesión para el usuario %{target}" enable_custom_emoji_html: "%{name} activó el emoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} ha habilitado la autenticación por token de correo electrónico para %{target}" enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}" memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una página in memoriam" promote_user_html: "%{name} promoción al usuario %{target}" @@ -361,32 +371,28 @@ es: updated_msg: "¡Emoji actualizado con éxito!" upload: Subir dashboard: - authorized_fetch_mode: Modo seguro - backlog: trabajos de backlog - config: Configuración - feature_deletions: Borrados de cuenta - feature_invites: Enlaces de invitación - feature_profile_directory: Directorio de perfil - feature_registrations: Registros - feature_relay: Relés de federación - feature_timeline_preview: Vista previa de la línea de tiempo - features: Características - hidden_service: Federación con servicios ocultos - open_reports: informes abiertos - pending_tags: hashtags esperando revisión - pending_users: usuarios esperando por revisión - recent_users: Usuarios recientes - search: Búsqueda por texto completo - single_user_mode: Modo único usuario + active_users: usuarios activos + interactions: interacciones + media_storage: Almacenamiento multimedia + new_users: nuevos usuarios + opened_reports: informes abiertos + pending_reports_html: + one: "1 informe pendiente" + other: "%{count} informes pendientes" + pending_tags_html: + one: "1 etiqueta pendiente" + other: "%{count} etiquetas pendientes" + pending_users_html: + one: "1 usuario pendiente" + other: "%{count} usuarios pendientes" + resolved_reports: informes resueltos software: Software + sources: Fuentes de registro space: Uso de almacenamiento title: Tablero - total_users: usuarios en total - trends: Tendencias - week_interactions: interacciones esta semana - week_users_active: activo esta semana - week_users_new: usuarios esta semana - whitelist_mode: En la lista blanca + top_languages: Idiomas más activos + top_servers: Servidores más activos + website: Sitio web domain_allows: add_new: Añadir dominio a la lista blanca created_msg: Dominio añadido a la lista blanca con éxito @@ -569,6 +575,7 @@ es: resolved: Resuelto resolved_msg: "¡La denuncia se ha resuelto correctamente!" status: Estado + target_origin: Origen de la cuenta reportada title: Reportes unassign: Desasignar unresolved: No resuelto @@ -1004,6 +1011,17 @@ es: lists: errors: limit: Has alcanzado la cantidad máxima de listas + login_activities: + authentication_methods: + otp: aplicación de autenticación en dos pasos + password: contraseña + sign_in_token: código de seguridad por correo electrónico + webauthn: claves de seguridad + description_html: Si ve una actividad que no reconoce, considere cambiar su contraseña y habilitar la autenticación de dos factores. + empty: No hay historial de autenticación disponible + failed_sign_in_html: Intento de inicio de sesión fallido con %{method} de %{ip} (%{browser}) + successful_sign_in_html: Inicio de sesión exitoso con %{method} desde %{ip} (%{browser}) + title: Historial de autenticación media_attachments: validations: images_and_video: No se puede adjuntar un video a un estado que ya contenga imágenes @@ -1210,6 +1228,7 @@ es: revoke: Revocar revoke_success: Sesión revocada exitosamente title: Sesiones + view_authentication_history: Ver historial de autenticación de tu cuenta settings: account: Cuenta account_settings: Ajustes de la cuenta @@ -1230,6 +1249,7 @@ es: preferences: Preferencias profile: Perfil relationships: Siguiendo y seguidores + statuses_cleanup: Eliminación automática de publicaciones two_factor_authentication: Autenticación de dos factores webauthn_authentication: Claves de seguridad statuses: @@ -1281,6 +1301,40 @@ es: public_long: Todos pueden ver unlisted: Público, pero no mostrar en la historia federada unlisted_long: Todos pueden ver, pero no está listado en las líneas de tiempo públicas + statuses_cleanup: + enabled: Borrar automáticamente publicaciones antiguas + enabled_hint: Elimina automáticamente tus publicaciones una vez que alcancen un umbral de tiempo especificado, a menos que coincidan con alguna de las excepciones detalladas debajo + exceptions: Excepciones + explanation: Debido a que la eliminación de mensajes es una operación costosa, esto se hace lentamente, a lo largo de un tiempo, cuando el servidor no está ocupado. Por este motivo, puede que tus publicaciones sean borradas algo después de que alcancen el umbral de tiempo especificado. + ignore_favs: Ignorar favoritos + ignore_reblogs: Ignorar reblogueos + interaction_exceptions: Excepciones basadas en interacciones + interaction_exceptions_explanation: Ten en cuenta que no hay garantía de que se eliminen las publicaciones que están por debajo de los umbrales de favoritos o de reblogueos si los han superado en algún momento. + keep_direct: Mantener mensajes directos + keep_direct_hint: No elimina ninguno de tus mensajes directos + keep_media: Mantener publicaciones con multimedia adjunto + keep_media_hint: No borra ninguna de tus publicaciones con multimedia adjunto + keep_pinned: Mantener publicaciones fijadas + keep_pinned_hint: No borra ninguna de tus publicaciones fijadas + keep_polls: Mantener encuestas + keep_polls_hint: No borra ninguna de tus encuestas + keep_self_bookmark: Mantener publicaciones a las que has añadido un marcador + keep_self_bookmark_hint: No borra tus propias publicaciones si les has añadido un marcador + keep_self_fav: Mantener publicaciones que marcaste como favoritas + keep_self_fav_hint: No borra publicaciones tuyas que hayas marcado como favoritas + min_age: + '1209600': 2 semanas + '15778476': 6 meses + '2629746': 1 mes + '31556952': 1 año + '5259492': 2 meses + '63113904': 2 años + '7889238': 3 meses + min_age_label: Umbral de tiempo + min_favs: Mantener mensajes con un número de favoritos mayor que + min_favs_hint: No borra ninguna de las publicaciones que hayan recibido más de esta cantidad de favoritos. Deja en blanco para eliminar publicaciones sin importar el número de favoritos + min_reblogs: Mantener publicaciones reblogueadas más de + min_reblogs_hint: No borra ninguna de las publicaciones que hayan sido reblogueadas más de este número de veces. Deja en blanco para eliminar publicaciones sin importar el número de reblogueos stream_entries: pinned: Publicación fijada reblogged: retooteado diff --git a/config/locales/et.yml b/config/locales/et.yml index 6239977c7..3fcca0ad5 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -281,32 +281,9 @@ et: updated_msg: Emotikoni uuendamine õnnestus! upload: Lae üles dashboard: - authorized_fetch_mode: Autoriseeritud tõmberežiim - backlog: mahajäänud tööd - config: Konfiguratsioon - feature_deletions: Kontode kustutamised - feature_invites: Kutselingid - feature_profile_directory: Profiilikataloog - feature_registrations: Registreerimised - feature_relay: Föderatsiooni relee - feature_timeline_preview: Ajajoone eelvaade - features: Omadused - hidden_service: Föderatsioon peidetud teenustega - open_reports: ava teavitused - pending_tags: sildid ootamas ülevaadet - pending_users: kasutajad ootamas ülevaadet - recent_users: Hiljutised kasutajad - search: Täis teksti otsing - single_user_mode: Üksiku kasutaja režiim software: Tarkvara space: Kettakasutus title: Töölaud - total_users: kokku kasutajaid - trends: Trendid - week_interactions: interaktsioone see nädal - week_users_active: aktiivne see nädal - week_users_new: kasutajaid see nädal - whitelist_mode: Lubatud domain_allows: add_new: Luba domeen created_msg: Domeeni lubamine õnnestus diff --git a/config/locales/eu.yml b/config/locales/eu.yml index cd84e5d17..7fd8fdd93 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -359,32 +359,9 @@ eu: updated_msg: Emoji-a ongi eguneratu da! upload: Igo dashboard: - authorized_fetch_mode: Baimendutako eskuratze modua - backlog: aurreikusitako lanak - config: Konfigurazioa - feature_deletions: Kontu ezabaketak - feature_invites: Gonbidapen estekak - feature_profile_directory: Profil-direktorioa - feature_registrations: Izen emateak - feature_relay: Federazio errelea - feature_timeline_preview: Denbora-lerroaren aurrebista - features: Ezaugarriak - hidden_service: Federazioa ezkutuko zerbitzuekin - open_reports: salaketa irekiak - pending_tags: berrikusketaren zain dauden etiketak - pending_users: berrikusketaren zain dauden erabiltzaileak - recent_users: Azken erabiltzaileak - search: Testu osoko bilaketa - single_user_mode: Erabiltzaile bakarreko modua software: Softwarea space: Espazio erabilera title: Kontrol panela - total_users: erabiltzaile guztira - trends: Joerak - week_interactions: interakzio aste honetan - week_users_active: aktibo aste honetan - week_users_new: erabiltzaile aste honetan - whitelist_mode: Zerrenda zuria modua domain_allows: add_new: Sartu domeinua zerrenda zurian created_msg: Domeinua ongi sartu da zerrenda zurian @@ -1002,6 +979,17 @@ eu: lists: errors: limit: Gehieneko zerrenda kopurura heldu zara + login_activities: + authentication_methods: + otp: bi faktoreko autentifikazio aplikazioa + password: pasahitza + sign_in_token: e-posta segurtasun kodea + webauthn: segurtasun gakoak + description_html: Ezagutzen ez duzun aktibitatea ikusten baduzu, pasahitza aldatu eta bi faktoreko autentifikazioa gaitzea gomendatzen dizugu. + empty: Ez dago autentifikazio historiarik eskuragarri + failed_sign_in_html: Huts egindako saioa hasteko saiakera %{method} erabiliz %{ip} IPtik (%{browser}) + successful_sign_in_html: Saioa hasiera arrakastatsua %{method} erabiliz %{ip} IPtik (%{browser}) + title: Autentifikazioen historia media_attachments: validations: images_and_video: Ezin da irudiak dituen bidalketa batean bideo bat erantsi @@ -1208,6 +1196,7 @@ eu: revoke: Indargabetu revoke_success: Saioa ongi indargabetu da title: Saioak + view_authentication_history: Ikusi zure kontuaren autentifikazioen historia settings: account: Kontua account_settings: Kontuaren ezarpenak diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 30230a97c..8d4dab2b1 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -27,6 +27,7 @@ fa: learn_more: بیشتر بدانید privacy_policy: سیاست رازداری rules: قوانین کارساز + rules_html: 'در زیر خلاصه‌ای از قوانینی که در صورت علاقه به داشتن حسابی روی این کارساز ماستودون، باید رعایت کنید آمده است:' see_whats_happening: ببینید چه خبر است server_stats: 'آمار کارساز:' source_code: کدهای منبع @@ -120,6 +121,7 @@ fa: demote: تنزل‌دادن destroyed_msg: داده‌های %{username} در صف حدف قرار گرفتند disable: از کار انداختن + disable_sign_in_token_auth: از کار انداختن تأیید هویت ژتون رایانامه‌ای disable_two_factor_authentication: از کار انداختن ورود دومرحله‌ای disabled: از کار افتاده display_name: نام نمایشی @@ -128,6 +130,7 @@ fa: email: ایمیل email_status: وضعیت ایمیل enable: به کار انداختن + enable_sign_in_token_auth: به کار انداختن تأیید هویت ژتون رایانامه‌ای enabled: به کار افتاده enabled_msg: حساب %{username} با موفقیت به کار انداخته شد followers: پیگیران @@ -192,6 +195,10 @@ fa: search: جستجو search_same_email_domain: دیگر کاربران با دامنهٔ رایانامهٔ یکسان search_same_ip: دیگر کاربران با IP یکسان + security_measures: + only_password: فقط گذرواژه + password_and_2fa: گذرواژه و ۲عاملی + password_and_sign_in_token: گذرواژه و ژتون رایانامه‌ای sensitive: حساس sensitized: علامت‌زده به عنوان حساس shared_inbox_url: نشانی صندوق ورودی مشترک @@ -231,6 +238,7 @@ fa: create_domain_block: ایجاد انسداد دامنه create_email_domain_block: ایجاد انسداد دامنهٔ رایانامه create_ip_block: ایجاد قاعدهٔ آی‌پی + create_unavailable_domain: ایجاد دامنهٔ ناموجود demote_user: تنزل کاربر destroy_announcement: حذف اعلامیه destroy_custom_emoji: حذف اموجی سفارشی @@ -239,10 +247,13 @@ fa: destroy_email_domain_block: حذف انسداد دامنهٔ رایانامه destroy_ip_block: حذف قاعدهٔ آی‌پی destroy_status: حذف وضعیت + destroy_unavailable_domain: حذف دامنهٔ ناموجود disable_2fa_user: از کار انداختن ورود دومرحله‌ای disable_custom_emoji: از کار انداختن اموجی سفارشی + disable_sign_in_token_auth_user: از کار انداختن تأیید هویت ژتون رایانامه‌ای برای کاربر disable_user: از کار انداختن کاربر enable_custom_emoji: به کار انداختن اموجی سفارشی + enable_sign_in_token_auth_user: به کار انداختن تأیید هویت ژتون رایانامه‌ای برای کاربر enable_user: به کار انداختن کاربر memorialize_account: یادسپاری حساب promote_user: ترفیع کاربر @@ -272,6 +283,7 @@ fa: create_domain_block_html: "%{name} دامنهٔ %{target} را مسدود کرد" create_email_domain_block_html: "%{name} دامنهٔ رایانامهٔ %{target} را مسدود کرد" create_ip_block_html: "%{name} برای آی‌پی %{target} قانونی ایجاد کرد" + create_unavailable_domain_html: "%{name} تحویل محتوا به دامنه %{target} را متوقف کرد" demote_user_html: "%{name} کاربر %{target} را تنزل داد" destroy_announcement_html: "%{name} اعلامیهٔ %{target} را حذف کرد" destroy_custom_emoji_html: "%{name} اموجی %{target} را نابود کرد" @@ -280,6 +292,31 @@ fa: destroy_email_domain_block_html: "%{name} انسداد دامنهٔ رایانامهٔ %{target} را برداشت" destroy_ip_block_html: "%{name} قاعدهٔ آی‌پی %{target} را حذف کرد" destroy_status_html: "%{name} وضعیت %{target} را برداشت" + destroy_unavailable_domain_html: "%{name} تحویل محتوا به دامنه %{target} را از سر گرفت" + disable_2fa_user_html: "%{name} ضرورت ورود دو مرحله‌ای را برای کاربر %{target} غیر فعال کرد" + disable_custom_emoji_html: "%{name} شکلک %{target} را غیرفعال کرد" + disable_sign_in_token_auth_user_html: "%{name}، احراز هویت با توکن رایانامه را برای %{target} غیرفعال کرد" + disable_user_html: "%{name} ورود را برای کاربر %{target} غیرفعال کرد" + enable_custom_emoji_html: "%{name} شکلک %{target} را فعال کرد" + enable_sign_in_token_auth_user_html: "%{name}، احراز هویت با توکن رایانامه را برای %{target} فعال کرد" + enable_user_html: "%{name} ورود را برای کاربر %{target} فعال کرد" + memorialize_account_html: "%{name} حساب %{target} را تبدیل به صفحهٔ یادمان کرد" + promote_user_html: "%{name} کاربر %{target} را ترفیع داد" + remove_avatar_user_html: "%{name} تصویر نمایهٔ %{target} را حذف کرد" + reopen_report_html: "%{name} گزارش %{target} را دوباره به جریان انداخت" + reset_password_user_html: "%{name} گذرواژه کاربر %{target} را بازنشاند" + resolve_report_html: "%{name} گزارش %{target} را رفع کرد" + sensitive_account_html: "%{name} رسانهٔ %{target} را به عنوان حساس علامت‌گذاری کرد" + silence_account_html: "%{name} حساب %{target} را محدود کرد" + suspend_account_html: "%{name} حساب %{target} را تعلیق کرد" + unassigned_report_html: "%{name} گزارش %{target} را از حالت محول شده خارج کرد" + unsensitive_account_html: "%{name} علامت حساس رسانهٔ %{target} را برداشت" + unsilence_account_html: "%{name} محدودیت حساب %{target} را برداشت" + unsuspend_account_html: "%{name} حساب %{target} را از تعلیق خارج کرد" + update_announcement_html: "%{name} اعلامیهٔ %{target} را به‌روز کرد" + update_custom_emoji_html: "%{name} شکلک %{target} را به‌روز کرد" + update_domain_block_html: "%{name} مسدودسازی دامنه را برای %{target} به‌روزرسانی کرد" + update_status_html: "%{name} نوشتهٔ %{target} را به‌روز کرد" deleted_status: "(نوشتهٔ پاک‌شده)" empty: هیچ گزارشی پیدا نشد. filter_by_action: پالایش بر اساس کنش @@ -336,32 +373,9 @@ fa: updated_msg: شکلک با موفقیت به‌روز شد! upload: بارگذاری dashboard: - authorized_fetch_mode: حالت دریافت مجازشده - backlog: کارهای باقیمانده - config: پیکربندی - feature_deletions: حساب‌های حذف‌شده - feature_invites: دعوت‌نامه‌ها - feature_profile_directory: فهرست گزیدهٔ کاربران - feature_registrations: ثبت‌نام‌ها - feature_relay: رله - feature_timeline_preview: پیش‌نمایش نوشته‌ها - features: ویژگی‌ها - hidden_service: ارتباط میان‌سروری با سرویس‌های نهفته - open_reports: گزارش‌های باز - pending_tags: برچسب‌های منتظر بازبینی - pending_users: کاربران منتظر بازبینی - recent_users: کاربران اخیر - search: جستجوی متنی - single_user_mode: حالت تک‌کاربره software: نرم‌افزار space: فضای مصرف‌شده title: ابزارهای مدیریت - total_users: شمار کاربران - trends: برچسب‌های پرکاربرد - week_interactions: فعالیت‌ها در این هفته - week_users_active: کاربران فعال هفتهٔ اخیر - week_users_new: کاربران هفتهٔ اخیر - whitelist_mode: حالت فهرست مجاز domain_allows: add_new: مجاز کردن دامنه created_msg: دامنه با موفقیت مجاز شد @@ -422,8 +436,11 @@ fa: title: مسدودسازی دامین ایمیل تازه title: مسدودسازی دامین‌های ایمیل follow_recommendations: + description_html: "پیشنهادات پیگیری به کاربران جدید کک می‌کند تا سریع‌تر محتوای جالب را پیدا کنند. زمانی که کاربری هنوز به اندازه کافی با دیگران تعامل نداشته است تا پیشنهادات پیگیری شخصی‌سازی‌شده دریافت کند، این حساب‌ها را به جای آن فهرست مشاهده خواهد کرد. این حساب‌ها به صورت روزانه و در ترکیب با بیشتری تعاملات و بالاترین دنبال‌کنندگان محلی برای یک زبان مشخص بازمحاسبه می‌شوند." language: برای زبان status: وضعیت + suppress: غیرفعال کردن پیشنهاد پیگیری + suppressed: غیرفعال شد title: پیشنهادهای پی‌گیری unsuppress: بازگردانی پیشنهادهای پی‌گیری instances: @@ -433,9 +450,16 @@ fa: by_domain: دامین delivery: all: همه + clear: پاک کردن خطاهای تحول محتوا + restart: بازراه‌اندازی تحویل محتوا + stop: متوقف‌کردن تحویل محتوا + title: تحویل محتوا unavailable: ناموجود + unavailable_message: تحویل محتوا در دسترس نیست warning: هشدار delivery_available: پیام آماده است + delivery_error_days: زورهای خطای تحویل محتوا + delivery_error_hint: اگر تحویل محتوا به مدت %{count} روز ممکن نباشد، به طور خودکار به عنوان تحویل‌ناشونده علامت‌گذاری خواهد شد. empty: هیج دامنه‌ای پیدا نشد. known_accounts: one: "%{count} حساب شناخته‌شده" @@ -531,6 +555,7 @@ fa: resolved: حل‌شده resolved_msg: گزارش با موفقیت حل شد! status: نوشته + target_origin: خاستگاه حساب گزارش‌شده title: گزارش‌ها unassign: پس‌گرفتن مسئولیت unresolved: حل‌نشده @@ -538,6 +563,7 @@ fa: rules: add_new: افزودن قانون delete: حذف + description_html: در حالی که اکثر افراد ادعا می‌کنند که شرایط استفاده را خوانده و پذیرفته‌اند، افراد معمولا تا پیش از بروز مشکل این متن را مطالعه نمی‌کنند. پیدا کردن قوانین کارساز‌تان را با تبدیل‌شان به صورت فهرست برای کاربران تسهیل کنید. سعی کنید هر قانون را کوتاه و ساده نگاه دارید اما از آن طرف هم تلاش نکنید که آن‌ها به تعداد زیادی مورد جدا از هم تقسیم کنید. edit: ویرایش قانون empty: هنوز هیچ قانونی برای کارساز تعریف نشده. title: قوانین کارساز @@ -648,9 +674,13 @@ fa: title: نوشته‌های حساب with_media: دارای عکس یا ویدیو system_checks: + database_schema_check: + message_html: تعداد مهاجرت پایگاه داده در انتظار انجام هستند. لطفا آن‌ها را اجرا کنید تا اطمینان یابید که برنامه مطابق انتظار رفتار خواهد کرد rules_check: action: مدیریت قانون‌های کارساز message_html: هیچ قانون کارسازی تعریف نکرده‌اید. + sidekiq_process_check: + message_html: صف(های) %{value} فاقد هیچونه فرایند Sidekiq هستند. لطفا تنظیمات Sidekiq خود را بازبینی کنید tags: accounts_today: کاربرد یکتا در امروز accounts_week: کاربرد یکتا در این هفته @@ -671,6 +701,7 @@ fa: add_new: افزودن تازه delete: زدودن edit_preset: ویرایش هشدار پیش‌فرض + empty: هنز هیچ پیش‌تنظیم هشداری را تعریف نکرده‌اید. title: مدیریت هشدارهای پیش‌فرض admin_mailer: new_pending_account: @@ -960,6 +991,17 @@ fa: lists: errors: limit: از این بیشتر نمی‌شود فهرست داشت + login_activities: + authentication_methods: + otp: کارهٔ تأیید هویت دوعاملی + password: گذرواژه + sign_in_token: کد امنیتی رایانامه‌ای + webauthn: کلیدهای امنیتی + description_html: اگر فعالیتی می‌بینید که تشخیصش نمی‌دهید، تغییر گذرواژه و به کار انداختن تأیید هویت دوعاملی را در نظر داشته باشید. + empty: هیچ تاریخچه‌ای از تأییدهویت موجود نیست + failed_sign_in_html: تلاش‌های شکست‌خوردهٔ ورود با %{method} از %{ip} (%{browser}) + successful_sign_in_html: ورودهای موفق با %{method} از %{ip} (%{browser}) + title: تاریخچهٔ تأیید هویت media_attachments: validations: images_and_video: نمی‌توان برای نوشته‌ای که تصویر دارد ویدیو بارگذاری کرد @@ -1166,6 +1208,7 @@ fa: revoke: لغو کردن revoke_success: نشست با موفقیت لغو شد title: نشست‌ها + view_authentication_history: دیدن تاریخچهٔ تأییدهویت حسابتان settings: account: حساب account_settings: تنظیمات حساب @@ -1186,6 +1229,7 @@ fa: preferences: ترجیحات profile: نمایه relationships: پیگیری‌ها و پیگیران + statuses_cleanup: حذف فرستهٔ خودکار two_factor_authentication: ورود دومرحله‌ای webauthn_authentication: کلیدهای امنیتی statuses: @@ -1237,6 +1281,40 @@ fa: public_long: همه می‌توانند ببینند unlisted: فهرست‌نشده unlisted_long: عمومی، ولی در فهرست نوشته‌ها نمایش نمی‌یابد + statuses_cleanup: + enabled: حذف خودکار فرسته‌های قدیمی + enabled_hint: فرسته‌هایتان را هنگام رسیدن به کرانهٔ سن خاصی به صورت خودکار حذف می‌کند، مگر این که با یکی از استثناهای زیر مطابق باشند + exceptions: استثناها + explanation: از آن‌جا که حذف فرسته‌ها، عملی پرهزینه است، این کار به آرامی در هنگام پرکار نبودن کارساز انجام می‌شود. به این خاطر، ممکن است فرسته‌هایتان مدّتی پس از رسیدن به آستانهٔ سن حذف شوند. + ignore_favs: چشم‌پوشی از برگزیده‌ها + ignore_reblogs: چشم‌پوشی از تقویت‌ها + interaction_exceptions: استثناها بر پایهٔ برهم‌کنش‌ها + interaction_exceptions_explanation: توجّه داشته باشید که ضمانتی بر حذف شدن فرسته‌هایی که پس از یک بار گذشتن زمان از آن‌ها، به زیر کرانهٔ برگزیدن یا تقویت می‌روند نیست. + keep_direct: نگه داشتن پیام‌های خصوصی + keep_direct_hint: هیچ یک از پیام‌های خصوصیتان را حذف نمی‌کند + keep_media: نگه داشتن فرسته‌ها با پیوست‌های رسانه‌ای + keep_media_hint: هیچ یک از فرسته‌هایتان که پیوست‌های رسانه‌ای داشته باشند را حذف نمی‌کند + keep_pinned: نگه داشتن فرسته‌های سنجاق شده + keep_pinned_hint: هیچ یک از فرسته‌های سنجاقش شده‌تان را حذف نمی‌کند + keep_polls: نگه داشتن نظرسنجی‌ها + keep_polls_hint: هیچ یک از نظرسنجی‌هایتان را حذف نمی‌کند + keep_self_bookmark: نگه داشتن فرسته‌هایی که نشانه‌گذاری کرده‌اید + keep_self_bookmark_hint: فرسته‌های خودتان را که نشانه‌گذاری کرده‌اید، حذف نمی‌کند + keep_self_fav: نگه داشتن فرستاده‌هایی که برگزیده‌اید + keep_self_fav_hint: فرسته‌های خودتان را که برگزیده‌اید، حذف نمی‌کند + min_age: + '1209600': ۲ هفته + '15778476': ۶ ماه + '2629746': ۱ ماه + '31556952': ۱ سال + '5259492': ۲ ماه + '63113904': ۲ سال + '7889238': ۳ ماه + min_age_label: کرانهٔ سن + min_favs: نگه داشتن فرسته‌هایی با برگزینش بیش از + min_favs_hint: هیچ یک از فرسته‌هایتان را که بیش از این تعداد برگزیده شده باشند، حذف نمی‌کند. برای حذف فرسته‌ها فارغ از تعداد برگزینش‌هایشان، خالی بگذارید + min_reblogs: نگه داشتن فرسته‌هایی با تقویت بیش از + min_reblogs_hint: هیچ یک از فرسته‌هایتان را که بیش از این تعداد تق. یت شده باشند، حذف نمی‌کند. برای حذف فرسته‌ها فارغ از تعداد تقویت‌هایشان، خالی بگذارید stream_entries: pinned: نوشته‌های ثابت reblogged: بازبوقید @@ -1333,6 +1411,7 @@ fa: time: formats: default: "%d %b %Y, %H:%M" + month: "%b %Y" two_factor_authentication: add: افزودن disable: غیرفعال‌کردن diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 541b1b38e..c8376023b 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -5,19 +5,29 @@ fi: about_mastodon_html: Mastodon on sosiaalinen verkosto. Se on toteutettu avoimilla verkkoprotokollilla ja vapailla, avoimen lähdekoodin ohjelmistoilla, ja se toimii hajautetusti samaan tapaan kuin sähköposti. about_this: Tietoja tästä palvelimesta active_count_after: aktiivinen + active_footnote: Kuukausittaiset aktiiviset käyttäjät (MAU) administered_by: 'Ylläpitäjä:' + api: Rajapinta apps: Mobiili sovellukset apps_platforms: Käytä Mastodonia iOS:llä, Androidilla tai muilla alustoilla browse_directory: Selaa profiilihakemistoa ja suodata kiinnostuksen kohteiden mukaan + browse_local_posts: Selaa suoratoistoja julkisista viesteistä tältä palvelimelta + browse_public_posts: Selaa suoratoistoja julkisista viesteistä Mastodonissa contact: Ota yhteyttä contact_missing: Ei asetettu contact_unavailable: Ei saatavilla discover_users: Löydä käyttäjiä documentation: Dokumentaatio + federation_hint_html: Tilillä %{instance}:ssa voit seurata ihmisiä millä tahansa Mastodon-palvelimella ja sen ulkopuolella. get_apps: Kokeile mobiilisovellusta hosted_on: Mastodon palvelimella %{domain} + instance_actor_flash: | + Tämä on virtuaalitili, joka edustaa itse palvelinta eikä yksittäistä käyttäjää. + Sitä käytetään yhdistämistarkoituksiin, eikä sitä saa estää, ellet halua estää koko palvelinta, jolloin sinun on käytettävä verkkotunnuksen estoa. learn_more: Lisätietoja privacy_policy: Tietosuojaseloste + rules: Palvelimen säännöt + rules_html: 'Alla on yhteenveto säännöistä, joita sinun on noudatettava, jos haluat olla tili tällä Mastodonin palvelimella:' see_whats_happening: Näe mitä tapahtuu server_stats: 'Palvelimen tilastot:' source_code: Lähdekoodi @@ -27,13 +37,17 @@ fi: status_count_before: He ovat luoneet tagline: Seuraa ja löydä uusia kavereita terms: Käyttöehdot + unavailable_content: Moderoidut palvelimet unavailable_content_description: domain: Palvelin reason: Syy + rejecting_media: 'Näiden palvelimien mediatiedostoja ei käsitellä tai tallenneta eikä pikkukuvia näytetä, mikä edellyttää manuaalista klikkausta alkuperäiseen tiedostoon:' rejecting_media_title: Media suodatettu silenced: 'Julkaisut näiltä palvelimilta piilotetaan julkisilta aikajanoilta ja keskusteluista, ilmoituksia ei luoda näiden käyttäjien tekemistä toiminnoista, jos et seuraa heitä:' silenced_title: Hiljennetyt palvelimet suspended: 'Dataa näiltä palvelimilta ei tulla käsittelemään, tallentamaan tai jakamaan. Tämä tekee kommunikoinnin näiden käyttäjien kanssa mahdottomaksi:' + suspended_title: Keskeytetyt palvelimet + unavailable_content_html: Mastodonin avulla voit yleensä tarkastella sisältöä ja olla vuorovaikutuksessa käyttäjien kanssa millä tahansa muulla palvelimella fediversessä. Nämä ovat poikkeuksia, jotka on tehty tälle palvelimelle. user_count_after: one: käyttäjä other: käyttäjät @@ -42,14 +56,17 @@ fi: accounts: choices_html: "%{name} valinnat:" endorsements_hint: Voit suositella seuraamiasi henkilöitä web käyttöliittymän kautta, ne tulevat näkymään tähän. + featured_tags_hint: Voit käyttää tiettyjä aihesanoja, jotka näytetään täällä. follow: Seuraa followers: one: Seuraaja other: Seuraajat following: Seuratut + instance_actor_flash: Tämä on virtuaalitili, jota käytetään edustamaan itse palvelinta eikä yksittäistä käyttäjää. Sitä käytetään yhdistämistarkoituksiin, eikä sitä tule keskeyttää. joined: Liittynyt %{date} last_active: viimeksi aktiivinen link_verified_on: Tämän linkin omistus on tarkastettu %{date} + media: Media moved_html: "%{name} on muuttanut osoitteeseen %{new_profile_link}:" network_hidden: Nämä tiedot eivät ole käytettävissä never_active: Ei koskaan @@ -73,14 +90,17 @@ fi: admin: account_actions: action: Suorita toimenpide + title: Suorita moderointitoiminto %{acct} account_moderation_notes: create: Jätä muistiinpano created_msg: Moderointimerkinnän luonti onnistui! delete: Poista destroyed_msg: Moderointimerkinnän poisto onnistui! accounts: + add_email_domain_block: Estä sähköpostidomain approve: Hyväksy approve_all: Hyväksy kaikki + approved_msg: Käyttäjän %{username} liittymishakemus hyväksyttiin are_you_sure: Oletko varma? avatar: Profiilikuva by_domain: Verkkotunnus @@ -94,9 +114,12 @@ fi: confirm: Vahvista confirmed: Vahvistettu confirming: Vahvistetaan + delete: Poista tiedot deleted: Poistettu demote: Alenna + destroyed_msg: Käyttäjän %{username} tiedot ovat nyt jonossa poistettavaksi välittömästi disable: Poista käytöstä + disable_sign_in_token_auth: Poista sähköpostitunnuksen todennus käytöstä disable_two_factor_authentication: Poista 2FA käytöstä disabled: Poistettu käytöstä display_name: Nimimerkki @@ -105,12 +128,16 @@ fi: email: Sähköposti email_status: Sähköpostin tila enable: Ota käyttöön + enable_sign_in_token_auth: Ota sähköpostitunnuksen todennus käyttöön enabled: Käytössä + enabled_msg: Käyttäjän %{username} tili palautettu onnistuneesti käyttöön followers: Seuraajat follows: Seuraa header: Otsakekuva inbox_url: Saapuvan postilaatikon osoite + invite_request_text: Syitä liittymiseen invited_by: Kutsuja + ip: IP joined: Liittynyt location: all: Kaikki @@ -120,6 +147,8 @@ fi: login_status: Sisäänkirjautumisen tila media_attachments: Medialiitteet memorialize: Muuta muistosivuksi + memorialized: Muutettu muistotiliksi + memorialized_msg: Käyttäjän %{username} tili muutettu onnistuneesti muistotiliksi moderation: active: Aktiivinen all: Kaikki @@ -130,6 +159,7 @@ fi: moderation_notes: Moderointimerkinnät most_recent_activity: Viimeisin toiminta most_recent_ip: Viimeisin IP + no_account_selected: Yhtään tiliä ei muutettu, koska mitään ei valittu no_limits_imposed: Rajoituksia ei ole asetettu not_subscribed: Ei tilaaja pending: Odottaa tarkistusta @@ -139,10 +169,14 @@ fi: public: Julkinen push_subscription_expires: PuSH-tilaus vanhenee redownload: Päivitä profiilikuva + redownloaded_msg: Käyttäjän %{username} profiilin päivittäminen alkuperästä onnistui reject: Hylkää reject_all: Hylkää kaikki + rejected_msg: Käyttäjän %{username} rekisteröitymishakemus hylättiin remove_avatar: Poista profiilikuva remove_header: Poista otsakekuva + removed_avatar_msg: Käyttäjän %{username} avatar-kuva poistettu onnistuneesti + removed_header_msg: Käyttäjän %{username} otsikkokuva poistettiin onnistuneesti resend_confirmation: already_confirmed: Tämä käyttäjä on jo vahvistettu send: Lähetä varmistusviesti uudelleen @@ -157,7 +191,14 @@ fi: staff: Henkilöstö user: Käyttäjä search: Hae + search_same_email_domain: Muut käyttäjät, joilla on sama sähköpostiverkkotunnus search_same_ip: Muut käyttäjät samalla IP-osoitteella + security_measures: + only_password: Vain salasana + password_and_2fa: Salasana ja kaksivaiheinen tunnistautuminen + password_and_sign_in_token: Salasana ja sähköpostitunnus + sensitive: Pakotus arkaluontoiseksi + sensitized: Merkitty arkaluontoiseksi shared_inbox_url: Jaetun saapuvan postilaatikon osoite show: created_reports: Tämän tilin luomat raportit @@ -167,32 +208,113 @@ fi: statuses: Tilat subscribe: Tilaa suspended: Jäähyllä + suspension_irreversible: Tämän tilin tiedot on poistettu peruuttamattomasti. Voit peruuttaa tilin jäädyttämisen, jolloin siitä tulee käyttökelpoinen, mutta toiminto ei palauta sillä aiemmin olleita tietoja. + suspension_reversible_hint_html: Tili on jäädytetty, ja tiedot poistetaan kokonaan %{date}. Siihen asti tili voidaan palauttaa ilman haitallisia vaikutuksia. Jos haluat poistaa kaikki tilin tiedot välittömästi, voit tehdä sen alla. time_in_queue: Odottaa jonossa %{time} title: Tilit unconfirmed_email: Sähköpostia ei vahvistettu + undo_sensitized: Kumoa pakotus arkaluontoiseksi tiliksi undo_silenced: Peru hiljennys undo_suspension: Peru jäähy + unsilenced_msg: "%{username} -tilin rajoituksen kumoaminen onnistui" unsubscribe: Lopeta tilaus + unsuspended_msg: "%{username} -tilin keskeytyksen kumoaminen onnistui" username: Käyttäjänimi + view_domain: Näytä verkkotunnuksen yhteenveto warn: Varoita web: Verkko + whitelisted: Sallittu liittämiselle action_logs: action_types: + assigned_to_self_report: Määritä raportti + change_email_user: Vaihda sähköposti käyttäjälle confirm_user: Vahvista käyttäjä create_account_warning: Luo varoitus create_announcement: Luo ilmoitus create_custom_emoji: Luo mukautettu emoji + create_domain_allow: Salli palvelin + create_domain_block: Estä palvelin + create_email_domain_block: Estä sähköpostipalvelin + create_ip_block: Luo IP-sääntö + create_unavailable_domain: Luo ei-saatavilla oleva verkkotunnus demote_user: Alenna käyttäjä destroy_announcement: Poista ilmoitus destroy_custom_emoji: Poista mukautettu emoji + destroy_domain_allow: Salli verkkotunnuksen poisto + destroy_domain_block: Poista verkkotunnuksen esto + destroy_email_domain_block: Poista sähköpostipalvelimen esto + destroy_ip_block: Poista IP-sääntö destroy_status: Poista tilapäivitys + destroy_unavailable_domain: Poista ei-saatavilla oleva verkkotunnus disable_2fa_user: Poista kaksivaiheinen tunnistautuminen käytöstä + disable_custom_emoji: Estä mukautettu emoji + disable_sign_in_token_auth_user: Estä käyttäjältä sähköpostitunnuksen todennus disable_user: Tili poistettu käytöstä enable_custom_emoji: Käytä mukautettuja emojeita + enable_sign_in_token_auth_user: Salli käyttäjälle sähköpostitunnuksen todennus enable_user: Tili otettu käyttöön + memorialize_account: Muuta muistotiliksi promote_user: Käyttäjä ylennetty remove_avatar_user: Profiilikuvan poisto + reopen_report: Uudelleenavaa raportti + reset_password_user: Nollaa salasana + resolve_report: Selvitä raportti + sensitive_account: Pakotus arkaluontoiseksi tiliksi silence_account: Hiljennä tili + suspend_account: Jäädytä tili + unassigned_report: Peruuta raportin määritys + unsensitive_account: Kumoa pakotus arkaluontoiseksi tiliksi + unsilence_account: Peruuta tilin rajoitus + unsuspend_account: Peruuta tilin jäädytys + update_announcement: Päivitä ilmoitus + update_custom_emoji: Päivitä muokattu emoji + update_domain_block: Päivitä verkkotunnuksen esto + update_status: Päivitä viesti + actions: + assigned_to_self_report_html: "%{name} otti raportin %{target} tehtäväkseen" + change_email_user_html: "%{name} vaihtoi käyttäjän %{target} sähköpostiosoitteen" + confirm_user_html: "%{name} vahvisti käyttäjän %{target} sähköpostiosoitteen" + create_account_warning_html: "%{name} lähetti varoituksen henkilölle %{target}" + create_announcement_html: "%{name} loi uuden ilmoituksen %{target}" + create_custom_emoji_html: "%{name} lähetti uuden emojin %{target}" + create_domain_allow_html: "%{name} salli yhdistäminen verkkotunnuksella %{target}" + create_domain_block_html: "%{name} esti verkkotunnuksen %{target}" + create_email_domain_block_html: "%{name} esti sähköpostin %{target}" + create_ip_block_html: "%{name} luonut IP-säännön %{target}" + create_unavailable_domain_html: "%{name} pysäytti toimituksen verkkotunnukseen %{target}" + demote_user_html: "%{name} alensi käyttäjän %{target}" + destroy_announcement_html: "%{name} poisti ilmoituksen %{target}" + destroy_custom_emoji_html: "%{name} poisti emojin %{target}" + destroy_domain_allow_html: "%{name} esti yhdistämisen verkkotunnuksella %{target}" + destroy_domain_block_html: "%{name} poisti verkkotunnuksen %{target} eston" + destroy_email_domain_block_html: "%{name} poisti verkkotunnuksen %{target} eston" + destroy_ip_block_html: "%{name} poisti IP-säännön %{target}" + destroy_status_html: "%{name} poisti viestin %{target}" + destroy_unavailable_domain_html: "%{name} jatkoi toimitusta verkkotunnukseen %{target}" + disable_2fa_user_html: "%{name} poisti käyttäjältä %{target} vaatimuksen kaksivaiheisen todentamiseen" + disable_custom_emoji_html: "%{name} poisti emojin %{target}" + disable_sign_in_token_auth_user_html: "%{name} poisti sähköpostitunnuksen %{target} todennuksen käytöstä" + disable_user_html: "%{name} poisti kirjautumisen käyttäjältä %{target}" + enable_custom_emoji_html: "%{name} salli emojin %{target}" + enable_sign_in_token_auth_user_html: "%{name} aktivoi sähköpostitunnuksen käyttäjälle %{target}" + enable_user_html: "%{name} salli kirjautumisen käyttäjälle %{target}" + memorialize_account_html: "%{name} muutti käyttäjän %{target} tilin muistosivuksi" + promote_user_html: "%{name} ylensi käyttäjän %{target}" + remove_avatar_user_html: "%{name} poisti käyttäjän %{target} profiilikuvan" + reopen_report_html: "%{name} avasi uudelleen raportin %{target}" + reset_password_user_html: "%{name} palautti käyttäjän %{target} salasanan" + resolve_report_html: "%{name} ratkaisi raportin %{target}" + sensitive_account_html: "%{name} merkitsi %{target} median arkaluonteiseksi" + silence_account_html: "%{name} rajoitti %{target} tilin" + suspend_account_html: "%{name} siirsi käyttäjän %{target} jäähylle" + unassigned_report_html: "%{name} peruutti raportin määrityksen %{target}" + unsensitive_account_html: "%{name} poisti merkinnän %{target} arkaluonteinen media" + unsilence_account_html: "%{name} ei tehnyt rajoitusta %{target} tilille" + unsuspend_account_html: "%{name} perui käyttäjän %{target} jäähyn" + update_announcement_html: "%{name} päivitti ilmoituksen %{target}" + update_custom_emoji_html: "%{name} päivitti emojin %{target}" + update_domain_block_html: "%{name} päivitti verkkotunnuksen %{target}" + update_status_html: "%{name} päivitti viestin %{target}" deleted_status: "(poistettu tilapäivitys)" empty: Lokeja ei löytynyt. filter_by_action: Suodata tapahtuman mukaan @@ -203,11 +325,18 @@ fi: edit: title: Muokkaa ilmoitusta empty: Yhtään ilmoitusta ei löytynyt. + live: Suora new: create: Luo ilmoitus title: Uusi ilmoitus + publish: Julkaise published_msg: Ilmoitus julkaistu onnistuneesti! + scheduled_for: Ajastettu %{time} + scheduled_msg: Ilmoitus on tarkoitus julkaista! title: Ilmoitukset + unpublish: Julkaisematon + unpublished_msg: Ilmoituksen julkaisu lopetettu! + updated_msg: Ilmoitus päivitetty onnistuneesti! custom_emojis: assign_category: Aseta kategoria by_domain: Verkkotunnus @@ -221,6 +350,7 @@ fi: disable: Poista käytöstä disabled: Ei käytössä disabled_msg: Emojin poisto käytöstä onnistui + emoji: Emoji enable: Ota käyttöön enabled: Käytössä enabled_msg: Emojin käyttöönotto onnistui @@ -241,28 +371,21 @@ fi: updated_msg: Emojin päivitys onnistui! upload: Lähetä dashboard: - authorized_fetch_mode: Suojattu tila - config: Asetukset - feature_deletions: Tilien poistot - feature_invites: Kutsulinkit - feature_profile_directory: Profiilihakemisto - feature_registrations: Rekisteröitymiset - feature_timeline_preview: Aikajanan esikatselu - features: Ominaisuudet - recent_users: Viimeaikaiset käyttäjät - search: Haku koko tekstistä software: Ohjelmisto space: Tilankäyttö title: Hallintapaneeli - total_users: käyttäjiä yhteensä - trends: Trendit - week_users_active: aktiivinen tällä viikolla - week_users_new: käyttäjiä tällä viikolla + domain_allows: + add_new: Salli liitto verkkotunnuksella + created_msg: Verkkotunnus on onnistuneesti sallittu federaatiolle + destroyed_msg: Verkkotunnus on estetty federaatiossa + undo: Estä liitto verkkotunnukselle domain_blocks: add_new: Lisää uusi created_msg: Verkkotunnuksen estoa käsitellään destroyed_msg: Verkkotunnuksen esto on peruttu domain: Verkkotunnus + edit: Muokkaa verkkotunnuksen estoa + existing_domain_block_html: Olet jo asettanut %{name} tiukemmat rajat ja sinun täytyy poistaa se ensin. new: create: Luo esto hint: Verkkotunnuksen esto ei estä tilien luomista ja lisäämistä tietokantaan, mutta se soveltaa näihin tileihin automaattisesti määrättyjä moderointitoimia tilin luomisen jälkeen. @@ -272,10 +395,18 @@ fi: silence: Hiljennys suspend: Jäähy title: Uusi verkkotunnuksen esto + obfuscate: Peitä verkkotunnuksen nimi + obfuscate_hint: Peitä verkkotunnus osittain luettelossa, jos verkkotunnuksen rajoitusten luettelo on käytössä private_comment: Yksityinen kommentti + private_comment_hint: Kommentoi tätä verkkotunnuksen rajoitusta, valvojien sisäiseen käyttöön. public_comment: Julkinen kommentti + public_comment_hint: Kommentoi tätä verkkotunnukselle koskevaa rajoitusta suurelle yleisölle, jos verkkotunnusten luettelon mainonta on käytössä. reject_media: Hylkää mediatiedostot reject_media_hint: Poistaa paikallisesti tallennetut mediatiedostot eikä lataa niitä enää jatkossa. Ei merkitystä jäähyn kohdalla + reject_reports: Hylkää raportit + reject_reports_hint: Ohita kaikki tästä verkkotunnuksesta tulevat raportit. Erottamisen kannalta ei merkitystä + rejecting_media: mediatiedostojen hylkääminen + rejecting_reports: raporttien hylkääminen severity: silence: hiljennetty suspend: jäähyllä @@ -289,17 +420,45 @@ fi: title: Peru verkkotunnuksen %{domain} esto undo: Peru undo: Peru + view: Näytä verkkotunnuksen esto email_domain_blocks: add_new: Lisää uusi created_msg: Sähköpostiverkkotunnuksen lisäys estolistalle onnistui delete: Poista destroyed_msg: Sähköpostiverkkotunnuksen poisto estolistalta onnistui domain: Verkkotunnus + empty: Sähköpostiosoitteita ei ole tällä hetkellä estetty. + from_html: käyttäjältä %{domain} new: create: Lisää verkkotunnus title: Uusi sähköpostiestolistan merkintä title: Sähköpostiestolista + follow_recommendations: + description_html: "Suositusten noudattaminen auttaa uusia käyttäjiä löytämään nopeasti mielenkiintoista sisältöä.. Jos käyttäjä ei ole ollut vuorovaikutuksessa tarpeeksi muiden kanssa luodakseen henkilökohtaisia seuraajia, näitä muita tilejä suositellaan sen sijaan. Ne lasketaan uudelleen päivittäin yhdistelmästä tilejä, joilla on korkein viimeaikainen käyttö ja korkein paikallinen seuraajien määrä tietyllä kielellä." + language: Kielelle + status: Tilanne + suppress: Peitä noudata suosituksia + suppressed: Rajoitettu + title: Noudata suosituksia + unsuppress: Palauta seuraa suositus instances: + back_to_all: Kaikki + back_to_limited: Rajoitettu + back_to_warning: Varoitus + by_domain: Verkkotunnus + delivery: + all: Kaikki + clear: Tyhjennä toimitusvirheet + restart: Käynnistä toimitus uudelleen + stop: Lopeta toimitus + title: Toimitus + unavailable: Ei saatavilla + unavailable_message: Toimitus ei käytettävissä + warning: Varoitus + delivery_available: Toimitus on saatavilla + delivery_error_days: Toimitusvirheen päivät + delivery_error_hint: Jos toimitus ei ole mahdollista %{count} päivän aikana, se merkitään automaattisesti toimittamattomaksi. + empty: Verkkotunnuksia ei löytynyt. moderation: all: Kaikki limited: Rajoitettu @@ -310,6 +469,7 @@ fi: total_blocked_by_us: Estetty meidän toimesta total_followed_by_them: Heidän seuraama total_followed_by_us: Meidän seuraama + total_reported: Niitä koskevat raportit total_storage: Medialiitteet invites: deactivate_all: Poista kaikki käytöstä @@ -319,14 +479,41 @@ fi: expired: Vanhentunut title: Suodata title: Kutsut - relays: + ip_blocks: + add_new: Luo sääntö + created_msg: Lisätty uusi IP-sääntö onnistuneesti delete: Poista + expires_in: + '1209600': 2 viikkoa + '15778476': 6 kuukautta + '2629746': 1 kuukausi + '31556952': 1 vuosi + '86400': 1 päivä + '94670856': 3 vuotta + new: + title: Luo uusi IP-sääntö + no_ip_block_selected: IP-sääntöjä ei muutettu, koska yhtään ei ole valittuna + title: IP-säännöt + pending_accounts: + title: Vireillä olevat tilit (%{count}) + relationships: + title: "%{acct}n suhteet" + relays: + add_new: Lisää uusi rele + delete: Poista + description_html: "federation relay on välittäjä palvelin, joka vaihtaa suuria määriä julkisia viestejä palvelimien välillä, jotka tilaavat ja julkaisevat sitä. Tämä auttaa pieniä ja keskisuuria palvelimia löytämään monipuolista sisältöä, joka muuten vaatisi käyttäjiä seuraamaan manuaalisesti muita ihmisiä eri palvelimilla." disable: Poista käytöstä disabled: Poistettu käytöstä enable: Ota käyttöön + enable_hint: Kun käytössä, palvelimesi tilaa kaikki julkiset viestit tästä releestä ja alkaa lähettää tämän palvelimen julkisia viestejä siihen. enabled: Käytössä + inbox_url: Synkronoi URL + pending: Odotetaan releen hyväksyntää save_and_enable: Tallenna ja ota käyttöön + setup: Määritä releyhteys + signatures_not_enabled: Releet eivät toimi oikein, kun turvallinen tila tai rajoitettu federaatio on käytössä status: Tila + title: Releet report_notes: created_msg: Muistiinpano onnistuneesti lisätty raporttiin! destroyed_msg: Muistiinpano onnistuneesti poistettu raportista! @@ -334,9 +521,13 @@ fi: action_taken_by: Toimenpiteen tekijä are_you_sure: Oletko varma? assign_to_self: Ota tehtäväksi + assigned: Määritetty valvoja + by_target_domain: Ilmoitetun tilin verkkotunnus comment: none: Ei mitään created_at: Raportoitu + forwarded: Välitetty + forwarded_to: Välitetty %{domain} mark_as_resolved: Merkitse ratkaistuksi mark_as_unresolved: Merkitse ratkaisemattomaksi notes: @@ -352,9 +543,18 @@ fi: resolved: Ratkaistut resolved_msg: Raportti onnistuneesti ratkaistu! status: Tila + target_origin: Raportoidun tilin alkuperä title: Raportit + unassign: Määrittämätön unresolved: Ratkaisemattomat updated_at: Päivitetty + rules: + add_new: Lisää sääntö + delete: Poista + description_html: Vaikka useimmat väittävät, että ovat lukenut ja hyväksyneet käyttöehdot niin yleensä ihmiset eivät lue niitä läpi ennen kuin ongelma syntyy. Tee helpoksi nähdä palvelimen säännöt yhdellä silmäyksellä tarjoamalla ne tiiviissä luettelossa. Yritä pitää säännöt lyhyinä ja yksinkertaisina, mutta yritä olla jakamatta niitä moniin erillisiin kohteisiin. + edit: Muokkaa sääntöä + empty: Palvelimen sääntöjä ei ole vielä määritelty. + title: Palvelimen säännöt settings: activity_api_enabled: desc_html: Paikallisesti julkaistujen tilojen, aktiivisten käyttäjien ja uusien rekisteröintien määrät viikoittain @@ -366,21 +566,33 @@ fi: email: Työsähköposti username: Yhteyshenkilön käyttäjänimi custom_css: + desc_html: Muokkaa ulkoasua CSS:llä, joka on ladattu jokaiselle sivulle title: Mukautettu CSS + default_noindex: + desc_html: Vaikuttaa kaikkiin käyttäjiin, jotka eivät ole muuttaneet tätä asetusta itse + title: Valitse oletuksena käyttäjät hakukoneiden indeksoinnin ulkopuolelle domain_blocks: all: Kaikille disabled: Ei kenellekkään title: Näytä domainestot + users: Kirjautuneille paikallisille käyttäjille domain_blocks_rationale: title: Näytä syy hero: desc_html: Näytetään etusivulla. Suosituskoko vähintään 600x100 pikseliä. Jos kuvaa ei aseteta, käytetään instanssin pikkukuvaa title: Sankarin kuva mascot: + desc_html: Näytetään useilla sivuilla. Suositus vähintään 293×205px. Kun ei ole asetettu, käytetään oletuskuvaa title: Maskottikuva peers_api_enabled: desc_html: Verkkotunnukset, jotka tämä instanssi on kohdannut fediversumissa title: Julkaise löydettyjen instanssien luettelo + preview_sensitive_media: + desc_html: Linkin esikatselu muilla sivustoilla näyttää pikkukuvan vaikka media on merkitty arkaluonteiseksi + title: Näytä arkaluontoiset mediat OpenGraph esikatselussa + profile_directory: + desc_html: Salli käyttäjien olla löydettävissä + title: Ota profiilihakemisto käyttöön registrations: closed_message: desc_html: Näytetään etusivulla, kun rekisteröinti on suljettu. HTML-tagit käytössä @@ -391,11 +603,15 @@ fi: min_invite_role: disabled: Ei kukaan title: Salli kutsut käyttäjältä + require_invite_text: + desc_html: Kun rekisteröinnit edellyttävät manuaalista hyväksyntää, tee “Miksi haluat liittyä?” teksti pakolliseksi eikä valinnaiseksi + title: Vaadi uusia käyttäjiä antamaan liittymisen syy registrations_mode: modes: approved: Rekisteröinti vaatii hyväksynnän none: Kukaan ei voi rekisteröityä open: Kaikki voivat rekisteröityä + title: Rekisteröintitapa show_known_fediverse_at_about_page: desc_html: Kun tämä on valittu, esikatselussa näytetään tuuttaukset kaikkialta tunnetusta fediversumista. Muutoin näytetään vain paikalliset tuuttaukset. title: Näytä aikajanan esikatselussa koko tunnettu fediversumi @@ -409,6 +625,7 @@ fi: desc_html: Hyvä paikka käytösohjeille, säännöille, ohjeistuksille ja muille instanssin muista erottaville asioille. HTML-tagit käytössä title: Omavalintaiset laajat tiedot site_short_description: + desc_html: Näytetään sivupalkissa ja kuvauksessa. Kerro yhdessä kappaleessa, mitä Mastodon on ja mikä tekee palvelimesta erityisen. title: Lyhyt instanssin kuvaus site_terms: desc_html: Tähän voi kirjoittaa instanssin tietosuojakäytännöstä, käyttöehdoista ja sen sellaisista asioista. HTML-tagit käytössä @@ -421,10 +638,15 @@ fi: desc_html: Näytä julkinen aikajana aloitussivulla title: Aikajanan esikatselu title: Sivuston asetukset + trendable_by_default: + desc_html: Vaikuttaa hashtageihin, joita ei ole aiemmin poistettu käytöstä + title: Salli hashtagit ilman tarkistusta ennakkoon trends: + desc_html: Näytä julkisesti aiemmin tarkistetut hashtagit, jotka ovat tällä hetkellä saatavilla title: Trendaavat aihetunnisteet site_uploads: delete: Poista ladattu tiedosto + destroyed_msg: Sivuston lataus onnistuneesti poistettu! statuses: back_to_account: Takaisin tilin sivulle batch: @@ -433,37 +655,75 @@ fi: nsfw_on: NSFW PÄÄLLÄ deleted: Poistettu failed_to_execute: Suoritus epäonnistui + media: + title: Media no_media: Ei mediaa + no_status_selected: Viestejä ei muutettu, koska yhtään ei ole valittuna title: Tilin tilat with_media: Sisältää mediaa + system_checks: + database_schema_check: + message_html: Tietokannan siirto on vireillä. Suorita ne varmistaaksesi, että sovellus toimii odotetulla tavalla + rules_check: + action: Hallinnoi palvelimen sääntöjä + message_html: Et ole määrittänyt mitään palvelimen sääntöä. + sidekiq_process_check: + message_html: Ei ole Sidekiq-prosessia käynnissä jonossa %{value}. Tarkista Sidekiq-asetukset tags: + accounts_today: Tämän päivän käyttö + accounts_week: Tämän viikon käyttö + breakdown: Tämän päivän käyttö lähteen mukaan last_active: Aktiivinen viimeksi most_popular: Suosituimmat most_recent: Viimeisimmät name: Aihetunniste + review: Tarkista tila reviewed: Tarkistetut title: Aihetunnisteet trending_right_now: Trendaa juuri nyt + unique_uses_today: "%{count} postausta tänään" + unreviewed: Ei tarkistettu + updated_msg: Hashtagin asetukset päivitetty onnistuneesti title: Ylläpito warning_presets: add_new: Lisää uusi delete: Poista + edit_preset: Muokkaa varoituksen esiasetusta + empty: Et ole vielä määrittänyt yhtään varoitusesiasetusta. + title: Hallinnoi varoitusesiasetuksia admin_mailer: + new_pending_account: + body: Uuden tilin tiedot ovat alla. Voit hyväksyä tai hylätä tämän hakemuksen. + subject: Uusi tili tarkastettavana %{instance} (%{username}) new_report: body: "%{reporter} on raportoinut kohteen %{target}" body_remote: Joku osoitteesta %{domain} on raportoinut kohteen %{target} subject: Uusi raportti instanssista %{instance} (nro %{id}) + new_trending_tag: + body: 'Aihetunniste #%{name} on nousussa tänään, mutta sitä ei ole aiemmin tarkistettu. Sitä ei näytetä julkisesti, ellet salli sitä. Siitä ei ilmoiteta uudelleen, jos pelkästään tallennat lomakkeen sellaisenaan.' + subject: Uusi aihetunniste tarkistettavaksi %{instance} (#%{name}) aliases: add_new: Luo alias + created_msg: Uusi alias luotiin onnistuneesti. Voit nyt aloittaa siirron vanhasta tilistä. + deleted_msg: Alias poistettiin onnistuneesti. Siirtyminen tuolta tililtä tähän ei ole enää mahdollista. empty: Sinulla ei ole aliaksia. + hint_html: Jos haluat siirtyä toisesta tilistä tähän tiliin, voit luoda aliasin, joka on pakollinen, ennen kuin voit siirtää seuraajia vanhasta tilistä tähän tiliin. Tämä toiminto on itsessään vaaraton ja palautuva. Tilin siirtyminen aloitetaan vanhalta tililtä. remove: Poista aliaksen linkitys appearance: + advanced_web_interface: Edistynyt web-käyttöliittymä + advanced_web_interface_hint: 'Jos haluat käyttää koko näytön leveyttä, edistyneen web-käyttöliittymän avulla voit määrittää useita eri sarakkeita näyttämään niin paljon tietoa samanaikaisesti kuin haluat: Koti, ilmoitukset, yhdistetty aikajana, mikä tahansa määrä luetteloita ja aihetunnisteita.' + animations_and_accessibility: Animaatiot ja saavutettavuus + confirmation_dialogs: Vahvistusvalinnat + discovery: Löytö localization: body: Mastodonin ovat kääntäneet vapaaehtoiset. + guide_link: https://crowdin.com/project/mastodon guide_link_text: Kaikki voivat osallistua. sensitive_content: Arkaluontoista sisältöä + toot_layout: Viestin asettelu application_mailer: notification_preferences: Muuta sähköpostiasetuksia + salutation: "%{name}," settings: 'Muuta sähköpostiasetuksia: %{link}' view: 'Näytä:' view_profile: Näytä profiili @@ -479,30 +739,50 @@ fi: auth: apply_for_account: Pyydä kutsu change_password: Salasana + checkbox_agreement_html: Hyväksyn palvelinsäännöt ja käyttöehdot + checkbox_agreement_without_rules_html: Hyväksyn käyttöehdot delete_account: Poista tili delete_account_html: Jos haluat poistaa tilisi, paina tästä. Poisto on vahvistettava. description: + prefix_invited_by_user: "@%{name} kutsuu sinut liittymään tälle Mastodonin palvelimelle!" prefix_sign_up: Liity Mastodoniin tänään! suffix: Tilillä voit seurata ihmisiä, julkaista päivityksiä ja lähetellä viestejä muille käyttäjille miltä palvelimelta tahansa ja paljon muuta! didnt_get_confirmation: Etkö saanut vahvistusohjeita? + dont_have_your_security_key: Eikö sinulla ole suojausavainta? forgot_password: Unohditko salasanasi? invalid_reset_password_token: Salasananpalautustunnus on virheellinen tai vanhentunut. Pyydä uusi. + link_to_otp: Syötä puhelimesi kaksivaiheinen koodi tai palautuskoodi + link_to_webauth: Käytä suojausavaintasi login: Kirjaudu sisään logout: Kirjaudu ulos migrate_account: Muuta toiseen tiliin migrate_account_html: Jos haluat ohjata tämän tilin toiseen tiliin, voit asettaa toisen tilin tästä. or_log_in_with: Tai käytä kirjautumiseen + providers: + cas: CAS + saml: SAML register: Rekisteröidy + registration_closed: "%{instance} ei hyväksy uusia jäseniä" resend_confirmation: Lähetä vahvistusohjeet uudestaan reset_password: Palauta salasana security: Tunnukset set_new_password: Aseta uusi salasana + setup: + email_below_hint_html: Jos alla oleva sähköpostiosoite on virheellinen, voit muuttaa sitä täällä ja tilata uuden vahvistussähköpostiviestin. + email_settings_hint_html: Vahvistussähköposti lähetettiin osoitteeseen %{email}. Jos sähköpostiosoite ei ole oikea, voit muuttaa sitä tiliasetuksissa. + title: Asetukset status: account_status: Tilin tila + confirming: Odotetaan sähköpostivahvistuksen valmistumista. functional: Tilisi on täysin toimiva. + pending: Hakemuksesi odottaa henkilökuntamme tarkastusta. Tämä voi kestää jonkin aikaa. Saat sähköpostiviestin, jos hakemuksesi on hyväksytty. + redirecting_to: Tilisi ei ole aktiivinen, koska se ohjaa tällä hetkellä kohteeseen %{acct}. + too_fast: Lomake lähetettiin liian nopeasti, yritä uudelleen. trouble_logging_in: Ongelmia kirjautumisessa? + use_security_key: Käytä suojausavainta authorize_follow: already_following: Sinä seuraat jo tätä tiliä + already_requested: Olet jo lähettänyt seurantapyynnön tälle tilille error: Valitettavasti etätilin haussa tapahtui virhe follow: Seuraa follow_request: 'Olet lähettänyt seuraamispyynnön käyttäjälle:' @@ -514,6 +794,17 @@ fi: title: Seuraa käyttäjää %{acct} challenge: confirm: Jatka + hint_html: "Vihje: Emme pyydä sinulta salasanaa uudelleen seuraavan tunnin aikana." + invalid_password: Virheellinen salasana + prompt: Vahvista salasanasi jatkaaksesi + crypto: + errors: + invalid_key: ei ole kelvollinen Ed25519- tai Curve25519 -avain + invalid_signature: ei ole kelvollinen Ed25519-allekirjoitus + date: + formats: + default: "%b %d, %Y" + with_month_name: "%B %d, %Y" datetime: distance_in_words: about_x_hours: "%{count} h" @@ -529,24 +820,33 @@ fi: x_months: "%{count} kk" x_seconds: "%{count} s" deletes: + challenge_not_passed: Antamasi tiedot eivät olleet oikeat confirm_password: Tunnistaudu syöttämällä nykyinen salasanasi + confirm_username: Vahvista toimenpide antamalla käyttäjänimesi proceed: Poista tili success_msg: Tilin poisto onnistui warning: + before: 'Ennen kuin jatkat, lue nämä huomautukset huolellisesti:' + caches: Muiden palvelimien välimuistiin tallentamaa sisältöä voi vielä löytyä + data_removal: Viestit ja muut tiedot poistetaan pysyvästi + email_change_html: Voit muuttaa sähköpostiosoitettasi poistamatta tiliäsi + email_contact_html: Jos ei saavu perille, voit pyytää apua sähköpostilla %{email} + email_reconfirmation_html: Jos et saa vahvistuksen sähköpostia, niin voit pyytää sitä uudelleen + irreversible: Et voi palauttaa tiliäsi tai aktivoida sitä uudelleen more_details_html: Lisätietoja saat tietosuojakäytännöstämme. username_available: Käyttäjänimesi tulee saataville uudestaan username_unavailable: Käyttäjänimesi ei tule saataville enää uudestaan directories: directory: Profiilihakemisto - explanation: Löydä käyttäjiä hiedän kiinnostuksiensa kautta - explore_mastodon: Tutki %{title} + explanation: Löydä käyttäjiä heidän kiinnostustensa mukaan + explore_mastodon: Tutki %{title}ia domain_validator: invalid_domain: ei ole kelvollinen toimialueen nimi errors: - '400': The request you submitted was invalid or malformed. + '400': Lähettämäsi pyyntö oli virheellinen tai muotoiltu virheellisesti. '403': Sinulla ei ole lupaa nähdä tätä sivua. '404': Etsimääsi sivua ei ole olemassa. - '406': This page is not available in the requested format. + '406': Tämä sivu ei ole saatavilla pyydetyssä muodossa. '410': Etsimääsi sivua ei ole enää olemassa. '422': content: Turvallisuusvahvistus epäonnistui. Oletko estänyt evästeet? @@ -555,8 +855,11 @@ fi: '500': content: Valitettavasti jokin meni pieleen meidän päässämme. title: Sivu ei ole oikein - '503': The page could not be served due to a temporary server failure. + '503': Sivua ei voitu näyttää palvelimen väliaikaisen vian vuoksi. noscript_html: Mastodon-selainsovelluksen käyttöön vaaditaan JavaScript. Voit vaihtoehtoisesti kokeilla jotakin omalle käyttöjärjestelmällesi tehtyä Mastodonsovellusta. + existing_username_validator: + not_found: paikallista käyttäjää ei löydy kyseisellä käyttäjänimellä + not_found_multiple: "%{usernames} ei löytynyt" exports: archive_takeout: date: Päiväys @@ -566,11 +869,17 @@ fi: request: Pyydä arkisto size: Koko blocks: Estot + bookmarks: Kirjanmerkit + csv: CSV + domain_blocks: Verkkotunnus estetty lists: Listat mutes: Mykistetyt storage: Media-arkisto featured_tags: add_new: Lisää uusi + errors: + limit: Olet jo lisännyt enimmäismäärän hashtageja + hint_html: "Mitkä ovat näkyvillä olevat hashtagit? Ne ovat näkyvästi julkisessa profiilissasi ja niiden avulla ihmiset voivat selata julkisia viestejäsi nimenomaan näiden hashtagien alla. Ne ovat loistava luovan työn työkalu tai pitkäaikaisten projektien seurantaan." filters: contexts: account: Profiilit @@ -580,6 +889,9 @@ fi: thread: Keskustelut edit: title: Muokkaa suodatinta + errors: + invalid_context: Ei sisältöä tai se on virheellinen + invalid_irreversible: Sen sijaan suodatus toimii vain kodin tai ilmoitusten yhteydessä index: delete: Poista empty: Sinulla ei ole suodattimia. @@ -596,19 +908,48 @@ fi: changes_saved_msg: Muutosten tallennus onnistui! copy: Kopioi delete: Poista + no_batch_actions_available: Tällä sivulla ei ole erätoimintoja order_by: Järjestä save_changes: Tallenna muutokset validation_errors: one: Kaikki ei ole aivan oikein! Tarkasta alla oleva virhe other: Kaikki ei ole aivan oikein! Tarkasta alla olevat %{count} virhettä + html_validator: + invalid_markup: 'sisältää virheellisen HTML-merkinnän: %{error}' identity_proofs: active: Aktiivinen authorize: Kyllä, valtuuta + authorize_connection_prompt: Sallitaanko tämä salausyhteys? + errors: + failed: Salausyhteys epäonnistui. Yritä uudelleen %{provider}. + keybase: + invalid_token: Keybase-tunnukset ovat allekirjoituksia ja niiden on oltava 66 hex-merkkiä + verification_failed: Keybase ei tunnista tätä tunnusta Keybase käyttäjän %{kb_username} allekirjoituksena. Yritä uudelleen Keybasesta. + wrong_user: Todistusta käyttäjälle %{proving} ei voida luoda kirjautuessa %{current}. Kirjaudu sisään käyttäjänä %{proving} ja yritä uudelleen. + explanation_html: Täällä voit salata muita identiteettejäsi muista alustoista, kuten Keybase. Näin muut ihmiset voivat lähettää sinulle salattuja viestejä kyseisillä alustoilla ja he voivat luottaa siihen, että lähettämäsi sisältö tulee sinulta. + i_am_html: Olen %{username} %{service}. + identity: Identiteetti + inactive: Passiivinen + publicize_checkbox: 'Ja toot tämä:' + publicize_toot: 'Se on todistettu! Olen %{username} %{service}: %{url}' + remove: Poista todiste tililtä + removed: Todisteen poistaminen tililtä onnistui + status: Vahvistuksen tila + view_proof: Näytä todiste imports: + errors: + over_rows_processing_limit: sisältää yli %{count} riviä + modes: + merge: Yhdistä + merge_long: Säilytä olemassa olevat tietueet ja lisää uusia + overwrite: Korvaa + overwrite_long: Korvaa nykyiset tietueet uusilla preface: Voit tuoda toisesta instanssista viemiäsi tietoja, kuten esimerkiksi seuraamiesi tai estämiesi henkilöiden listan. success: Tietojen lähettäminen onnistui, ja ne käsitellään kohtapuoliin types: blocking: Estettyjen lista + bookmarks: Kirjanmerkit + domain_blocking: Verkkoalueen estolista following: Seurattujen lista muting: Mykistettyjen lista upload: Lähetä @@ -625,6 +966,7 @@ fi: '86400': 1 vuorokausi expires_in_prompt: Ei koskaan generate: Luo + invited_by: 'Sinut kutsui:' max_uses: one: kertakäyttöinen other: "%{count} käyttökertaa" @@ -637,21 +979,46 @@ fi: lists: errors: limit: Sinulla on jo suurin sallittu määrä listoja + login_activities: + authentication_methods: + otp: kaksivaiheinen todennussovellus + password: salasana + sign_in_token: sähköpostin turvakoodi + webauthn: suojausavaimet + description_html: Jos näet toimintaa, jota et tunnista, harkitse salasanan vaihtamista ja kaksivaiheisen todennuksen ottamista käyttöön. + empty: Todennushistoriaa ei ole saatavilla + failed_sign_in_html: Kirjautumisyritys epäonnistui %{method} - %{ip} (%{browser}) + successful_sign_in_html: Kirjautuminen onnistui %{method} - %{ip} (%{browser}) + title: Todennushistoria media_attachments: validations: images_and_video: Videota ei voi liittää tilapäivitykseen, jossa on jo kuvia + not_ready: Ei voi liittää tiedostoja, joiden käsittely on kesken. Yritä hetken kuluttua uudelleen! too_many: Tiedostoja voi liittää enintään 4 migrations: acct: uuden tilin käyttäjätunnus@verkkotunnus + cancel: Peruuta uudelleenohjaus + cancel_explanation: Uudelleenohjauksen peruuttaminen aktivoi uudelleen nykyisen tilisi, mutta ei palauta seuraajia, jotka on siirretty kyseiselle tilille. + cancelled_msg: Uudelleenohjaus peruttu onnistuneesti. errors: + already_moved: on sama tili, jonka olet jo siirtänyt + missing_also_known_as: ei ole tämän tilin alias move_to_self: ei voi olla nykyinen tili not_found: ei voitu löytää on_cooldown: Sinä olet jäähyllä followers_count: Seuraajat muuton aikana + incoming_migrations: Siirtyminen toiselta tililtä + incoming_migrations_html: Siirtääksesi toisesta tilistä tähän tiliin, sinun täytyy ensin luoda tilin alias. + moved_msg: Tilisi ohjaa nyt kohteeseen %{acct} ja seuraajiasi siirretään. + not_redirecting: Tilisi ei ohjaa tällä hetkellä mihinkään muuhun tiliin. + on_cooldown: Olet siirtänyt tilisi äskettäin. Tämä toiminto tulee saataville uudelleen %{count} päivän kuluttua. past_migrations: Edelliset migraatiot proceed_with_move: Siirrä seuraajat + redirected_msg: 'Tilisi uudelleenohjaa nyt kohteeseen: %{acct}.' + redirecting_to: 'Tilisi uudelleenohjaa nyt kohteeseen: %{acct}.' set_redirect: Aseta uudelleenohjaus warning: + backreference_required: Uusi tili on ensin määritettävä viittaamaan tähän tiliin before: 'Ennen jatkamista, lue nämä huomautukset huolellisesti:' moderation: title: Moderointi @@ -728,14 +1095,35 @@ fi: activity: Viimeisin toiminta browser: Selain browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron generic: Tuntematon selain nokia: Nokia S40 Ovi -selain + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UCBrowser + weibo: Weibo current_session: Nykyinen istunto description: "%{browser}, %{platform}" explanation: Nämä verkkoselaimet ovat tällä hetkellä kirjautuneet Mastodon-tilillesi. ip: IP-osoite platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: Chrome OS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: macOS other: tuntematon järjestelmä + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone revoke: Hylkää revoke_success: Istunnon hylkäys onnistui title: Istunnot @@ -786,16 +1174,46 @@ fi: other: "%{count} ääntä" vote: Äänestä show_more: Näytä lisää + show_newer: Näytä uudemmat + show_older: Näytä vanhempi show_thread: Näytä ketju sign_in_to_participate: Kirjaudu sisään osallistuaksesi keskusteluun title: "%{name}: ”%{quote}”" visibilities: + direct: Suoraan private: Vain seuraajille private_long: Näytä vain seuraajille public: Julkinen public_long: Kaikki voivat nähdä unlisted: Listaamaton julkinen unlisted_long: Kaikki voivat nähdä, mutta ei näytetä julkisilla aikajanoilla + statuses_cleanup: + enabled: Poista vanhat viestit automaattisesti + enabled_hint: Poistaa viestit automaattisesti, kun ne saavuttavat tietyn ikärajan, elleivät ne täsmää yhtä alla olevista poikkeuksista + exceptions: Poikkeukset + explanation: Koska viestien poistaminen on kallista toimintaa. Tämä tehdään hitaasti ajan mittaan, kun palvelin ei ole muuten kiireinen. Tästä syystä viestejäsi voidaan poistaa jonkin aikaa myöhemmin, kun ne ovat saavuttaneet ikärajan. + ignore_favs: Ohita suosikit + ignore_reblogs: Ohita tehostukset + interaction_exceptions: Poikkeukset, jotka perustuvat vuorovaikutukseen + keep_direct: Säilytä suorat viestit + keep_media: Säilytä viestit, joissa on liitetiedostoja + keep_media_hint: Ei poista viestejä, joissa on liitteitä + keep_pinned: Pidä kiinnitettyt viestit + keep_pinned_hint: Ei poista mitään kiinnitettyä viestiä + keep_polls: Säilytä äänestykset + keep_polls_hint: Ei poista yhtäkään äänestystä + keep_self_bookmark: Säilytä lisäämäsi viestit kirjanmerkkeihin + keep_self_bookmark_hint: Ei poista viestejäsi, jos olet lisännyt ne kirjanmerkkeihin + keep_self_fav: Säilyttää viestit suosikeissa + keep_self_fav_hint: Ei poista omia viestejäsi, jos olet lisännyt ne suosikkeihin + min_age: + '1209600': 2 viikkoa + '15778476': 6 kuukautta + '2629746': 1 kuukausi + '31556952': 1 year + '5259492': 2 months + '63113904': 2 years + '7889238': 3 months stream_entries: pinned: Kiinnitetty tuuttaus reblogged: buustasi @@ -821,6 +1239,10 @@ fi: explanation: Pyysit täydellistä varmuuskopiota Mastodon-tilistäsi. Voit nyt ladata sen! subject: Arkisto on valmiina ladattavaksi title: Arkiston tallennus + warning: + title: + silence: Rajoitettu tili + suspend: Tilin käyttäminen keskeytetty welcome: edit_profile_action: Aseta profiili edit_profile_step: Voit mukauttaa profiiliasi lataamalla profiilikuvan ja otsakekuvan, muuttamalla näyttönimeäsi ym. Jos haluat hyväksyä uudet seuraajat ennen kuin he voivat seurata sinua, voit lukita tilisi. @@ -839,7 +1261,31 @@ fi: tips: Vinkkejä title: Tervetuloa mukaan, %{name}! users: + follow_limit_reached: Et voi seurata yli %{limit} henkilöä + generic_access_help_html: Onko sinulla pääsy tiliisi? Voit ottaa yhteyttä %{email} saadaksesi apua invalid_otp_token: Virheellinen kaksivaiheisen todentamisen koodi + invalid_sign_in_token: Virheellinen turvakoodi otp_lost_help_html: Jos sinulla ei ole pääsyä kumpaankaan, voit ottaa yhteyttä osoitteeseen %{email} seamless_external_login: Olet kirjautunut ulkoisen palvelun kautta, joten salasana- ja sähköpostiasetukset eivät ole käytettävissä. signed_in_as: 'Kirjautunut henkilönä:' + suspicious_sign_in_confirmation: Et ilmeisesti ole kirjautunut sisään tältä laitteelta aikaisemmin, joten lähetämme sähköpostiisi turvakoodin vahvistaaksesi, että se olet sinä. + verification: + explanation_html: 'Voit vahvistaa itsesi profiilisi metatietojen linkkien omistajaksi.. Tätä varten linkitetyn verkkosivuston on sisällettävä linkki takaisin Mastodon -profiiliisi. Palauttavalla linkillä täytyy olla rel="minä" tuntomerkki. Linkin tekstisisällöllä ei ole väliä. Tässä on esimerkki:' + verification: Vahvistus + webauthn_credentials: + add: Lisää uusi suojausavain + create: + error: Suojausavaimen lisäämisessä tapahtui ongelma. Yritä uudelleen. + success: Sinun suojausavaimen lisääminen onnistui. + delete: Poista + delete_confirmation: Haluatko varmasti poistaa tämän suojausavaimen? + description_html: Jos otat suojausavaimen todennuksen käyttöön, kirjautuminen edellyttää jonkin suojausavaimen käyttämistä. + destroy: + error: Suojausavaimen poistamisessa tapahtui ongelma. Yritä uudelleen. + success: Sinun suojausavaimen poistaminen onnistui. + invalid_credential: Virheellinen suojausavain + nickname_hint: Anna nimimerkki uudelle suojausavaimelle + not_enabled: Et ole vielä ottanut käyttöön WebAuthn-ohjelmaa + not_supported: Tämä selain ei tue suojausavaimia + otp_required: Jos haluat käyttää suojausavaimia, ota ensin käyttöön kaksivaiheinen todennus. + registered_on: Rekisteröity %{date} diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 9a80b1b1a..35b5f2973 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -6,7 +6,7 @@ fr: about_this: À propos active_count_after: actif·ve·s active_footnote: Nombre mensuel d'utilisateur·rice·s actif·ve·s (NMUA) - administered_by: 'Administrée par :' + administered_by: 'Administré par :' api: API apps: Applications mobiles apps_platforms: Utilisez Mastodon depuis iOS, Android et d’autres plates-formes @@ -35,7 +35,7 @@ fr: one: statut other: statuts status_count_before: Ayant publié - tagline: Suivez vos ami·e·s et découvrez-en de nouveaux·elles + tagline: Suivez vos amis et découvrez-en de nouveaux terms: Conditions d’utilisation unavailable_content: Serveurs modérés unavailable_content_description: @@ -43,14 +43,14 @@ fr: reason: Motif rejecting_media: 'Les fichiers média de ces serveurs ne seront ni traités ni stockés, et aucune miniature ne sera affichée, rendant nécessaire de cliquer vers le fichier d’origine :' rejecting_media_title: Médias filtrés - silenced: 'Les messages de ces serveurs seront cachés des flux publics et conversations, et les interactions de leurs utilisateur·rice·s ne donneront lieu à aucune notification, à moins que vous ne les suiviez :' + silenced: 'Les messages de ces serveurs seront cachés des flux publics et conversations, et les interactions de leurs utilisateurs ne donneront lieu à aucune notification, à moins que vous ne les suiviez :' silenced_title: Serveurs masqués - suspended: 'Aucune donnée venant de ces serveurs ne sera traitée, stockée ou échangée, rendant impossible toute interaction ou communication avec les utilisateur·rice·s de ces serveurs :' + suspended: 'Aucune donnée venant de ces serveurs ne sera traitée, stockée ou échangée, rendant impossible toute interaction ou communication avec les utilisateurs de ces serveurs :' suspended_title: Serveurs suspendus unavailable_content_html: Mastodon vous permet généralement de visualiser le contenu et d'interagir avec les utilisateur·rice·s de n'importe quel autre serveur dans le fédiverse. Voici les exceptions qui ont été faites sur ce serveur en particulier. user_count_after: - one: utilisateur·rice - other: utilisateur·rice·s + one: utilisateur + other: utilisateurs user_count_before: Abrite what_is_mastodon: Qu’est-ce que Mastodon ? accounts: @@ -59,11 +59,11 @@ fr: featured_tags_hint: Vous pouvez mettre en avant certains hashtags qui seront affichés ici. follow: Suivre followers: - one: Abonné·e + one: Abonné other: Abonné·e·s following: Abonnements instance_actor_flash: Ce compte est un acteur virtuel utilisé pour représenter le serveur lui-même et non un utilisateur individuel. Il est utilisé à des fins de fédération et ne doit pas être suspendu. - joined: Inscrit·e en %{date} + joined: Inscrit en %{date} last_active: dernière activité link_verified_on: La propriété de ce lien a été vérifiée le %{date} media: Médias @@ -74,7 +74,7 @@ fr: people_followed_by: Personnes suivies par %{name} people_who_follow: Personnes qui suivent %{name} pin_errors: - following: Vous devez être déjà abonné·e à la personne que vous désirez recommander + following: Vous devez être déjà abonné à la personne que vous désirez recommander posts: one: Message other: Messages @@ -84,7 +84,7 @@ fr: admin: Admin bot: Robot group: Groupe - moderator: Modérateur·trice + moderator: Modérateur unavailable: Profil non disponible unfollow: Ne plus suivre admin: @@ -119,6 +119,7 @@ fr: demote: Rétrograder destroyed_msg: Les données de %{username} sont maintenant en file d’attente pour être supprimées imminemment disable: Désactiver + disable_sign_in_token_auth: Désactiver l'authentification basée sur les jetons envoyés par courriel disable_two_factor_authentication: Désactiver l’authentification à deux facteurs disabled: Désactivé display_name: Nom affiché @@ -127,16 +128,17 @@ fr: email: Courriel email_status: État du courriel enable: Activer + enable_sign_in_token_auth: Activer l'authentification basée sur les jetons envoyés par courriel enabled: Activé enabled_msg: Le compte de %{username} a été débloqué avec succès - followers: Abonné·e·s + followers: Abonnés follows: Abonnements header: Entête inbox_url: URL d’entrée invite_request_text: Raisons de l’adhésion invited_by: Invité par ip: Adresse IP - joined: Inscrit·e depuis + joined: Inscrit depuis location: all: Tous local: Local @@ -145,10 +147,10 @@ fr: login_status: Statut de connexion media_attachments: Fichiers médias memorialize: Convertir en mémorial - memorialized: Mémorialisé + memorialized: Mis en mémoire memorialized_msg: Transformation réussie de %{username} en un compte mémorial moderation: - active: Actif·ve·s + active: Actifs all: Tous pending: En cours de traitement silenced: Masqués @@ -176,7 +178,7 @@ fr: removed_avatar_msg: L’avatar de %{username} a été supprimé avec succès removed_header_msg: L’image d’en-tête de %{username} a été supprimée avec succès resend_confirmation: - already_confirmed: Cet·te utilisateur·rice est déjà confirmé·e + already_confirmed: Cet utilisateur est déjà confirmé send: Renvoyer un courriel de confirmation success: Courriel de confirmation envoyé avec succès ! reset: Réinitialiser @@ -189,8 +191,12 @@ fr: staff: Équipe user: Utilisateur search: Rechercher - search_same_email_domain: Autres utilisateurs·trices avec le même domaine de courriel - search_same_ip: Autres utilisateur·rice·s avec la même IP + search_same_email_domain: Autres utilisateurs avec le même domaine de courriel + search_same_ip: Autres utilisateurs avec la même IP + security_measures: + only_password: Mot de passe uniquement + password_and_2fa: Mot de passe et 2FA + password_and_sign_in_token: Mot de passe et jeton par courriel sensitive: Sensible sensitized: marqué comme sensible shared_inbox_url: URL de la boite de réception partagée @@ -212,8 +218,8 @@ fr: undo_suspension: Annuler la suspension unsilenced_msg: Le compte de %{username} a été illimité avec succès unsubscribe: Se désabonner - unsuspended_msg: Le compte de %{username} a été désuspendu avec succès - username: Nom d’utilisateur·ice + unsuspended_msg: Le compte de %{username} a été réactivé avec succès + username: Nom d’utilisateur view_domain: Voir le résumé du domaine warn: Avertissement web: Web @@ -231,7 +237,7 @@ fr: create_email_domain_block: Créer un blocage de domaine de courriel create_ip_block: Créer une règle IP create_unavailable_domain: Créer un domaine indisponible - demote_user: Rétrograder l’utilisateur·ice + demote_user: Rétrograder l’utilisateur destroy_announcement: Supprimer l’annonce destroy_custom_emoji: Supprimer des émojis personnalisés destroy_domain_allow: Supprimer le domaine autorisé @@ -242,10 +248,12 @@ fr: destroy_unavailable_domain: Supprimer le domaine indisponible disable_2fa_user: Désactiver l’A2F disable_custom_emoji: Désactiver les émojis personnalisés - disable_user: Désactiver l’utilisateur·ice + disable_sign_in_token_auth_user: Désactiver l'authentification basée sur les jetons envoyés par courriel pour l'utilisateur + disable_user: Désactiver l’utilisateur enable_custom_emoji: Activer les émojis personnalisées + enable_sign_in_token_auth_user: Activer l'authentification basée sur les jetons envoyés par courriel pour l'utilisateur enable_user: Activer l’utilisateur - memorialize_account: Mémorialiser le compte + memorialize_account: Se souvenir du compte promote_user: Promouvoir l’utilisateur remove_avatar_user: Supprimer l’avatar reopen_report: Rouvrir le signalement @@ -263,8 +271,8 @@ fr: update_domain_block: Mettre à jour le blocage de domaine update_status: Mettre à jour le statut actions: - assigned_to_self_report_html: "%{name} s’est assigné·e le signalement de %{target}" - change_email_user_html: "%{name} a modifié l'adresse de courriel de l'utilisateur·rice %{target}" + assigned_to_self_report_html: "%{name} s’est assigné le signalement de %{target}" + change_email_user_html: "%{name} a modifié l'adresse de courriel de l'utilisateur %{target}" confirm_user_html: "%{name} a confirmé l'adresse courriel de l'utilisateur·rice %{target}" create_account_warning_html: "%{name} a envoyé un avertissement à %{target}" create_announcement_html: "%{name} a créé une nouvelle annonce %{target}" @@ -274,7 +282,7 @@ fr: create_email_domain_block_html: "%{name} a bloqué de domaine de courriel %{target}" create_ip_block_html: "%{name} a créé une règle pour l'IP %{target}" create_unavailable_domain_html: "%{name} a arrêté la livraison vers le domaine %{target}" - demote_user_html: "%{name} a rétrogradé l'utilisateur·rice %{target}" + demote_user_html: "%{name} a rétrogradé l'utilisateur %{target}" destroy_announcement_html: "%{name} a supprimé l'annonce %{target}" destroy_custom_emoji_html: "%{name} a détruit l'émoji %{target}" destroy_domain_allow_html: "%{name} a rejeté la fédération avec le domaine %{target}" @@ -283,16 +291,18 @@ fr: destroy_ip_block_html: "%{name} a supprimé la règle pour l'IP %{target}" destroy_status_html: "%{name} a supprimé le statut de %{target}" destroy_unavailable_domain_html: "%{name} a repris la livraison au domaine %{target}" - disable_2fa_user_html: "%{name} a désactivé l'authentification à deux facteurs pour l'utilisateur·rice %{target}" + disable_2fa_user_html: "%{name} a désactivé l'authentification à deux facteurs pour l'utilisateur %{target}" disable_custom_emoji_html: "%{name} a désactivé l'émoji %{target}" - disable_user_html: "%{name} a désactivé la connexion de l'utilisateur·rice %{target}" + disable_sign_in_token_auth_user_html: "%{name} a désactivé l'authentification basée sur les jetons envoyés par courriel pour %{target}" + disable_user_html: "%{name} a désactivé la connexion de l'utilisateur %{target}" enable_custom_emoji_html: "%{name} a activé l'émoji %{target}" - enable_user_html: "%{name} a activé la connexion de l'utilisateur·rice %{target}" + enable_sign_in_token_auth_user_html: "%{name} a activé l'authentification basée sur les jetons envoyés par courriel pour %{target}" + enable_user_html: "%{name} a activé la connexion de l'utilisateur %{target}" memorialize_account_html: "%{name} a converti le compte de %{target} en un mémorial" - promote_user_html: "%{name} a promu l'utilisateur·rice %{target}" + promote_user_html: "%{name} a promu l'utilisateur %{target}" remove_avatar_user_html: "%{name} a supprimé l'avatar de %{target}" reopen_report_html: "%{name} a rouvert le signalement %{target}" - reset_password_user_html: "%{name} a réinitialisé le mot de passe de l'utilisateur·rice %{target}" + reset_password_user_html: "%{name} a réinitialisé le mot de passe de l'utilisateur %{target}" resolve_report_html: "%{name} a résolu le signalement %{target}" sensitive_account_html: "%{name} a marqué le média de %{target} comme sensible" silence_account_html: "%{name} a masqué le compte de %{target}" @@ -308,7 +318,7 @@ fr: deleted_status: "(statut supprimé)" empty: Aucun journal trouvé. filter_by_action: Filtrer par action - filter_by_user: Filtrer par utilisateur·ice + filter_by_user: Filtrer par utilisateur title: Journal d’audit announcements: destroyed_msg: Annonce supprimée avec succès ! @@ -330,16 +340,16 @@ fr: custom_emojis: assign_category: Attribuer une catégorie by_domain: Domaine - copied_msg: Copie locale de l’émoji créée avec succès ! + copied_msg: Copie locale de l’émoji créée avec succès copy: Copier copy_failed_msg: Impossible de faire une copie locale de cet émoji create_new_category: Créer une nouvelle catégorie created_msg: Émoji créé avec succès ! delete: Supprimer - destroyed_msg: Émoji supprimé avec succès ! + destroyed_msg: Émoji supprimé avec succès! disable: Désactiver disabled: Désactivé - disabled_msg: Émoji désactivé avec succès ! + disabled_msg: Émoji désactivé avec succès emoji: Émoji enable: Activer enabled: Activé @@ -358,35 +368,31 @@ fr: unlist: Délister unlisted: Délisté update_failed_msg: Cet émoji n'a pas pu être mis à jour - updated_msg: Émoji mis à jour avec succès ! + updated_msg: Émoji mis à jour avec succès! upload: Téléverser dashboard: - authorized_fetch_mode: Mode de récupération autorisé - backlog: tâches en attente - config: Configuration - feature_deletions: Suppressions de comptes - feature_invites: Liens d’invitation - feature_profile_directory: Annuaire des profils - feature_registrations: Inscriptions - feature_relay: Relais de fédération - feature_timeline_preview: Aperçu du fil public - features: Fonctionnalités - hidden_service: Fédération avec des services cachés - open_reports: signalements non résolus - pending_tags: hashtags en attente d’approbation - pending_users: utilisateur·rice·s en attente d’approbation - recent_users: Utilisateur·rice·s récent·e·s - search: Recherche plein texte - single_user_mode: Mode utilisateur·rice unique + active_users: utilisateurs actifs + interactions: interactions + media_storage: Stockage des médias + new_users: nouveaux utilisateurs + opened_reports: rapports ouverts + pending_reports_html: + one: "1 rapport en attente" + other: "%{count} rapports en attente" + pending_tags_html: + one: "1 hashtag en attente" + other: "%{count} hashtags en attente" + pending_users_html: + one: "1 utilisateur en attente" + other: "%{count} utilisateurs en attente" + resolved_reports: rapports résolus software: Logiciel + sources: Sources d'inscription space: Espace utilisé title: Tableau de bord - total_users: utilisateur·rice·s au total - trends: Tendances - week_interactions: interactions cette semaine - week_users_active: actif·ve·s cette semaine - week_users_new: utilisateur·rice·s cette semaine - whitelist_mode: Mode liste blanche + top_languages: Langues les plus actives + top_servers: Serveurs les plus actifs + website: Site Web domain_allows: add_new: Mettre le domaine sur liste sur blanche created_msg: Ce domaine a été ajouté à la liste blanche avec succès @@ -447,7 +453,7 @@ fr: title: Nouveau blocage de domaine de courriel title: Blocage de domaines de courriel follow_recommendations: - description_html: "Les recommandations d'abonnement aident les nouvelles personnes à trouver rapidement du contenu intéressant. Si un·e utilisateur·rice n'a pas assez interagi avec les autres pour avoir des recommandations personnalisées, ces comptes sont alors recommandés. La sélection est mise à jour quotidiennement depuis un mélange de comptes ayant le plus d'interactions récentes et le plus grand nombre d'abonné·e·s locaux pour une langue donnée." + description_html: "Les recommandations d'abonnement aident les nouvelles personnes à trouver rapidement du contenu intéressant. Si un utilisateur n'a pas assez interagi avec les autres pour avoir des recommandations personnalisées, ces comptes sont alors recommandés. La sélection est mise à jour quotidiennement depuis un mélange de comptes ayant le plus d'interactions récentes et le plus grand nombre d'abonnés locaux pour une langue donnée." language: Pour la langue status: État suppress: Supprimer les recommandations d'abonnement @@ -569,6 +575,7 @@ fr: resolved: Résolus resolved_msg: Signalement résolu avec succès ! status: Statut + target_origin: Origine du compte signalé title: Signalements unassign: Dés-assigner unresolved: Non résolus @@ -576,17 +583,17 @@ fr: rules: add_new: Ajouter une règle delete: Supprimer - description_html: Bien que la plupart des gens prétende avoir lu les conditions d'utilisation avant de les accepter, généralement les utilisateur·rice·s ne les lisent vraiment que lorsque un problème apparaît. Pour faciliter la visualisation des règles de votre serveur en un seul coup d’œil, présentez-les sous la forme d'une liste à puces ! Essayez de garder chacune des règles simple et concise, mais faites attention à ne pas non plus les diviser en de trop nombreux éléments distincts. + description_html: Bien que la plupart des gens prétende avoir lu les conditions d'utilisation avant de les accepter, généralement les utilisateurs ne les lisent vraiment que lorsque un problème apparaît. Pour faciliter la visualisation des règles de votre serveur en un seul coup d’œil, présentez-les sous la forme d'une liste à puces ! Essayez de garder chacune des règles simple et concise, mais faites attention à ne pas non plus les diviser en de trop nombreux éléments distincts. edit: Modifier la règle empty: Aucune règle de serveur n'a été définie pour l'instant. title: Règles du serveur settings: activity_api_enabled: - desc_html: Nombre de statuts affichés localement, de comptes actifs et de nouvelles inscriptions regroupé·e·s par semaine - title: Publier des statistiques agrégées sur l’activité des utilisateur·rice·s + desc_html: Nombre de statuts affichés localement, de comptes actifs et de nouvelles inscriptions regroupés par semaine + title: Publier des statistiques agrégées sur l’activité des utilisateurs bootstrap_timeline_accounts: - desc_html: Séparez les noms d’utilisateur·rice·s par des virgules. Ne fonctionne qu’avec des comptes locaux et non verrouillés. Si laissé vide, tous les administrateur·rice·s locaux sont sélectionné⋅e⋅s. - title: Abonnements par défaut pour les nouveaux·elles utilisateur·rice·s + desc_html: Séparez les noms d’utilisateurs par des virgules. Ne fonctionne qu’avec des comptes locaux et non verrouillés. Si laissé vide, tous les administrateurs locaux sont sélectionnés + title: Abonnements par défaut pour les nouveaux utilisateurs contact_information: email: Entrez une adresse courriel publique username: Entrez un nom d’utilisateur·ice @@ -600,7 +607,7 @@ fr: all: À tout le monde disabled: À personne title: Afficher les bloqueurs de domaines - users: Aux utilisateur·rice·s connecté·e·s localement + users: Aux utilisateurs connectés localement domain_blocks_rationale: title: Montrer la raison hero: @@ -616,14 +623,14 @@ fr: desc_html: Les aperçus de lien sur les autres sites web afficheront une vignette même si les médias sont marqués comme sensibles title: Montrer les médias sensibles dans les prévisualisations OpenGraph profile_directory: - desc_html: Permettre aux utilisateur·ice·s d’être découvert·e·s + desc_html: Permettre aux utilisateurs d’être découverts title: Activer l’annuaire des profils registrations: closed_message: desc_html: Affiché sur la page d’accueil lorsque les inscriptions sont fermées. Vous pouvez utiliser des balises HTML title: Message de fermeture des inscriptions deletion: - desc_html: Permettre à tou·te·s les utilisateur·rice·s de supprimer leur compte + desc_html: Permettre à tous les utilisateurs de supprimer leur compte title: Autoriser les suppressions de compte min_invite_role: disabled: Personne @@ -641,7 +648,7 @@ fr: desc_html: Lorsque désactivée, restreint le fil public accessible via la page d’accueil de l’instance pour ne montrer que le contenu local title: Inclure le contenu fédéré sur la page de fil public sans authentification show_staff_badge: - desc_html: Montrer un badge de responsable sur une page utilisateur·rice + desc_html: Montrer un badge de responsable sur une page utilisateur title: Montrer un badge de responsable site_description: desc_html: Paragraphe introductif sur la page d’accueil. Décrivez ce qui rend spécifique ce serveur Mastodon et toute autre chose importante. Vous pouvez utiliser des balises HTML, en particulier <a> et <em>. @@ -771,7 +778,7 @@ fr: description: prefix_invited_by_user: "@%{name} vous invite à rejoindre ce serveur Mastodon !" prefix_sign_up: Inscrivez-vous aujourd’hui sur Mastodon ! - suffix: Avec un compte, vous pourrez suivre des gens, publier des statuts et échanger des messages avec les utilisateur·rice·s de n'importe quel serveur Mastodon et bien plus ! + suffix: Avec un compte, vous pourrez suivre des gens, publier des statuts et échanger des messages avec les utilisateurs de n'importe quel serveur Mastodon et bien plus ! didnt_get_confirmation: Vous n’avez pas reçu les consignes de confirmation ? dont_have_your_security_key: Vous n'avez pas votre clé de sécurité? forgot_password: Mot de passe oublié ? @@ -814,7 +821,7 @@ fr: following: 'Youpi ! Vous suivez maintenant  :' post_follow: close: Ou bien, vous pouvez fermer cette fenêtre. - return: Afficher le profil de l’utilisateur·ice + return: Afficher le profil de l’utilisateur web: Retour à l’interface web title: Suivre %{acct} challenge: @@ -859,11 +866,11 @@ fr: email_reconfirmation_html: Si vous ne recevez pas le courriel de confirmation, vous pouvez le demander à nouveau irreversible: Vous ne pourrez pas restaurer ou réactiver votre compte more_details_html: Pour plus de détails, voir la politique de confidentialité. - username_available: Votre nom d’utilisateur·rice sera à nouveau disponible - username_unavailable: Votre nom d’utilisateur·rice restera indisponible + username_available: Votre nom d’utilisateur sera à nouveau disponible + username_unavailable: Votre nom d’utilisateur restera indisponible directories: directory: Annuaire des profils - explanation: Découvrir des utilisateur·rice·s en selon leurs centres d’intérêt + explanation: Découvrir des utilisateurs en selon leurs centres d’intérêt explore_mastodon: Explorer %{title} domain_validator: invalid_domain: n’est pas un nom de domaine valide @@ -878,12 +885,12 @@ fr: title: Vérification de sécurité échouée '429': Trop de requêtes émises dans un délai donné '500': - content: Nous sommes désolé·e·s, mais quelque chose s’est mal passé de notre côté. + content: Nous sommes désolés, mais quelque chose s’est mal passé de notre côté. title: Cette page n’est pas correcte '503': La page n'a pas pu être servie en raison d'une défaillance temporaire du serveur. noscript_html: Pour utiliser Mastodon, veuillez activer JavaScript. Sinon, essayez l’une des applications natives pour Mastodon pour votre plate-forme. existing_username_validator: - not_found: n’a pas trouvé d’utilisateur·rice local·e avec ce nom + not_found: n’a pas trouvé d’utilisateur local avec ce nom not_found_multiple: n’a pas trouvé %{usernames} exports: archive_takeout: @@ -991,7 +998,7 @@ fr: '86400': 1 jour expires_in_prompt: Jamais generate: Générer un lien d'invitation - invited_by: 'Vous avez été invité·e par :' + invited_by: 'Vous avez été invité par :' max_uses: one: 1 utilisation other: "%{count} utilisations" @@ -1004,6 +1011,17 @@ fr: lists: errors: limit: Vous avez atteint le nombre maximum de listes + login_activities: + authentication_methods: + otp: application d'authentification à deux facteurs + password: mot de passe + sign_in_token: code de sécurité par courriel + webauthn: clés de sécurité + description_html: Si vous voyez une activité que vous ne reconnaissez pas, envisagez de changer votre mot de passe et d'activer l'authentification à deux facteurs. + empty: Aucun historique d'authentification disponible + failed_sign_in_html: Tentative de connexion échouée avec %{method} de %{ip} (%{browser}) + successful_sign_in_html: Connexion réussie avec %{method} de %{ip} (%{browser}) + title: Historique d'authentification media_attachments: validations: images_and_video: Impossible de joindre une vidéo à un statut contenant déjà des images @@ -1012,22 +1030,22 @@ fr: migrations: acct: A déménagé vers cancel: Annuler la redirection - cancel_explanation: Annuler la redirection réactivera votre compte actuel, mais ne rapportera pas les abonné·e·s qui ont été déplacé·e·s sur ce compte. + cancel_explanation: Annuler la redirection réactivera votre compte actuel, mais ne rapportera pas les abonnés qui ont été déplacés sur ce compte. cancelled_msg: Suppression de la redirection réussie. errors: already_moved: est le même compte que vous avez déjà déplacé vers missing_also_known_as: ne référence pas ce compte en retour move_to_self: ne peut pas être le compte actuel not_found: n'a pas été trouvé - on_cooldown: Vous êtes soumis·e à un temps de rechargement - followers_count: Abonné·e·s au moment du déménagement + on_cooldown: Vous êtes soumis à un temps de rechargement + followers_count: Abonnés au moment du déménagement incoming_migrations: Déplacement depuis un compte différent incoming_migrations_html: Pour déménager d'un autre compte à celui-ci, vous devez d'abord créer un alias de compte. - moved_msg: Votre compte est maintenant redirigé vers %{acct} et vos abonné·e·s sont en train d'être déplacé·e·s. + moved_msg: Votre compte est maintenant redirigé vers %{acct} et vos abonnés sont en train d'être déplacés. not_redirecting: Votre compte n'est pas redirigé vers un autre compte actuellement. on_cooldown: Vous avez récemment migré votre compte. Cette fonction sera à nouveau disponible dans %{count} jours. past_migrations: Migrations passées - proceed_with_move: Migrer les abonné·e·s + proceed_with_move: Migrer les abonnés redirected_msg: Votre compte est maintenant redirigé vers %{acct}. redirecting_to: Votre compte est redirigé vers %{acct}. set_redirect: Définir la redirection @@ -1035,9 +1053,9 @@ fr: backreference_required: Le nouveau compte doit d'abord être configuré pour faire référence à celui-ci en définissant un alias before: 'Avant de procéder, veuillez lire attentivement ces notes :' cooldown: Après le déménagement, il y a une période d’attente pendant laquelle vous ne pourrez pas re-déménager - disabled_account: Votre compte actuel ne sera pas entièrement utilisable par la suite. Cependant, vous aurez accès à l'exportation de données et à la ré-activation. - followers: Cette action va déménager tou·te·s les abonné·e·s du compte actuel vers le nouveau compte - only_redirect_html: Alternativement, vous pouvez seulement afficher une redirection sur votre profil. + disabled_account: Votre compte actuel ne sera pas entièrement utilisable par la suite. Cependant, vous aurez accès à l'exportation de données et à la réactivation. + followers: Cette action va déménager tous les abonnés du compte actuel vers le nouveau compte + only_redirect_html: Alternativement, vous pouvez seulement appliquer une redirection sur votre profil. other_data: Aucune autre donnée ne sera déplacée automatiquement redirect: Le profil de votre compte actuel sera mis à jour avec un avis de redirection et sera exclu des recherches moderation: @@ -1045,15 +1063,15 @@ fr: move_handler: carry_blocks_over_text: Cet utilisateur que vous aviez bloqué est parti de %{acct}. carry_mutes_over_text: Cet utilisateur que vous aviez masqué est parti de %{acct}. - copy_account_note_text: 'Cet·te utilisateur·rice est parti·e de %{acct}, voici vos notes précédentes à son sujet :' + copy_account_note_text: 'Cet utilisateur est parti de %{acct}, voici vos notes précédentes à son sujet :' notification_mailer: digest: action: Voir toutes les notifications body: Voici un bref résumé des messages que vous avez raté depuis votre dernière visite le %{since} - mention: "%{name} vous a mentionné⋅e dans :" + mention: "%{name} vous a mentionné dans :" new_followers_summary: - one: Vous avez un⋅e nouvel⋅le abonné⋅e ! Youpi ! - other: Vous avez %{count} nouveaux⋅elles abonné⋅e·s ! Incroyable ! + one: Vous avez un nouvel abonné ! Youpi ! + other: Vous avez %{count} nouveaux abonnés ! Incroyable ! subject: one: "Une nouvelle notification depuis votre dernière visite \U0001F418" other: "%{count} nouvelles notifications depuis votre dernière visite \U0001F418" @@ -1065,16 +1083,16 @@ fr: follow: body: "%{name} vous suit !" subject: "%{name} vous suit" - title: Nouvel·le abonné·e + title: Nouvel abonné follow_request: action: Gérer les demandes d’abonnement body: "%{name} a demandé à vous suivre" - subject: 'Abonné·e·s en attente : %{name}' + subject: 'Abonnés en attente : %{name}' title: Nouvelle demande d’abonnement mention: action: Répondre - body: "%{name} vous a mentionné⋅e dans :" - subject: "%{name} vous a mentionné·e" + body: "%{name} vous a mentionné dans :" + subject: "%{name} vous a mentionné" title: Nouvelle mention poll: subject: Un sondage de %{name} est terminé @@ -1102,7 +1120,7 @@ fr: code_hint: Entrez le code généré par votre application d'authentification pour confirmer description_html: Si vous activez l’authentification à deux facteurs en utilisant une application d'authentification, votre connexion vous imposera d'être en possession de votre téléphone, ce qui génèrera des jetons que vous devrez saisir. enable: Activer - instructions_html: "Scannez ce code QR dans Google Authenticator ou une application TOTP similiaire sur votre téléphone. À partir de maintenant, cette application générera des jetons que vous devrez entrer lorsque vous vous connecterez." + instructions_html: "Scannez ce code QR dans Google Authenticator ou une application TOTP similaire sur votre téléphone. À partir de maintenant, cette application générera des jetons que vous devrez entrer lorsque vous vous connecterez." manual_instructions: 'Si vous ne pouvez pas scanner le QR code et que vous devez le saisir manuellement, voici le texte secret en brut :' setup: Mise en place wrong_code: Le code saisi est invalide. L'heure du serveur et l'heure de l'appareil sont-ils corrects ? @@ -1134,18 +1152,18 @@ fr: relationships: activity: Activité du compte dormant: Dormant - follow_selected_followers: Suivre les abonné·e·s sélectionné·e·s - followers: Abonné·e·s + follow_selected_followers: Suivre les abonnés sélectionnés + followers: Abonnés following: Abonnements - invited: Invité·e + invited: Invité last_active: Dernière activité most_recent: Plus récent moved: Déménagé mutual: Mutuel primary: Primaire relationship: Relation - remove_selected_domains: Supprimer tous les abonné·e·s des domaines sélectionnés - remove_selected_followers: Supprimer les abonné·e·s sélectionnés + remove_selected_domains: Supprimer tous les abonnés des domaines sélectionnés + remove_selected_followers: Supprimer les abonnés sélectionnés remove_selected_follows: Cesser de suivre les comptes sélectionnés status: État du compte remote_follow: @@ -1154,7 +1172,7 @@ fr: no_account_html: Vous n’avez pas de compte ? Vous pouvez vous inscrire ici proceed: Confirmer l’abonnement prompt: 'Vous allez suivre :' - reason_html: "Pourquoi cette étape est-elle nécessaire? %{instance} pourrait ne pas être le serveur sur lequel vous vous êtes inscrit·e, et nous devons donc vous rediriger vers votre serveur de base en premier." + reason_html: "Pourquoi cette étape est-elle nécessaire? %{instance} pourrait ne pas être le serveur sur lequel vous vous êtes inscrit, et nous devons donc vous rediriger vers votre serveur de base en premier." remote_interaction: favourite: proceed: Confirmer l’ajout aux favoris @@ -1210,6 +1228,7 @@ fr: revoke: Révoquer revoke_success: Session révoquée avec succès title: Sessions + view_authentication_history: Voir l'historique d'authentification de votre compte settings: account: Compte account_settings: Paramètres du compte @@ -1230,6 +1249,7 @@ fr: preferences: Préférences profile: Profil relationships: Abonnements et abonné·e·s + statuses_cleanup: Suppression automatique de la publication two_factor_authentication: Identification à deux facteurs webauthn_authentication: Clés de sécurité statuses: @@ -1275,12 +1295,46 @@ fr: title: '%{name} : "%{quote}"' visibilities: direct: Direct - private: Abonné⋅e⋅s uniquement - private_long: Afficher seulement à vos vos abonné·e·s + private: Abonnés uniquement + private_long: Afficher seulement à vos vos abonnés public: Publique public_long: Tout le monde peut voir vos statuts unlisted: Public sans être affiché sur le fil public unlisted_long: Tout le monde peut voir vos statuts mais ils ne seront pas listés sur les fils publics + statuses_cleanup: + enabled: Supprimer automatiquement les anciennes publications + enabled_hint: Supprime automatiquement vos publications une fois qu'elles ont atteint un seuil d'ancienneté défini, à moins qu'elles ne correspondent à l'une des exceptions ci-dessous + exceptions: Exceptions + explanation: Parce que la suppression de messages est une opération lourde, cela se fait lentement au fil du temps lorsque le serveur n'est pas autrement occupé. Pour cette raison, vos messages peuvent être supprimés un peu plus tard que le seuil d'ancienneté défini. + ignore_favs: Ignorer les favoris + ignore_reblogs: Ignorer les partages + interaction_exceptions: Exceptions basées sur les interactions + interaction_exceptions_explanation: Notez qu'il n'est pas garanti que les messages soient supprimés s'ils passent sous le seuil des favoris ou des partages une fois qu'ils les ont dépassés. + keep_direct: Conserver les messages directs + keep_direct_hint: Ne supprime aucun de vos messages directs + keep_media: Conserver les publications avec des fichiers médias joints + keep_media_hint: Ne supprime pas les publications contenant des fichiers médias joints + keep_pinned: Conserver les publications épinglées + keep_pinned_hint: Ne supprime aucune de vos publications épinglées + keep_polls: Conserver les sondages + keep_polls_hint: Ne supprime aucun de vos sondages + keep_self_bookmark: Conserver les publications que vous avez mises en marque-page + keep_self_bookmark_hint: Ne supprime pas vos propres publications si vous les avez ajoutées aux marque-pages + keep_self_fav: Conserver les publications que vous avez mises dans vos favoris + keep_self_fav_hint: Ne supprime pas vos propres publications si vous les avez mises dans vos favoris + min_age: + '1209600': 2 semaines + '15778476': 6 mois + '2629746': 1 mois + '31556952': 1 an + '5259492': 2 mois + '63113904': 2 ans + '7889238': 3 mois + min_age_label: Seuil d'ancienneté + min_favs: Conserver les publications favorites plus de + min_favs_hint: Ne supprime aucune de vos publications qui ont reçu plus que ce nombre de favoris. Laisser vide pour supprimer les messages quel que soit leur nombre de favoris + min_reblogs: Conserver les publications partagées plus de + min_reblogs_hint: Ne supprime aucune de vos publications qui ont été partagées plus que ce nombre de fois. Laisser vide pour supprimer les publications indépendamment de leur nombre de partages stream_entries: pinned: Message épinglé reblogged: a partagé @@ -1294,8 +1348,8 @@ fr:
    • Informations de base sur votre compte : si vous vous inscrivez sur ce serveur, il vous sera demandé de rentrer un identifiant, une adresse électronique et un mot de passe. Vous pourrez également ajouter des informations additionnelles sur votre profil, telles qu’un nom public et une biographie, ainsi que téléverser une image de profil et une image d’en-tête. Vos identifiant, nom public, biographie, image de profil et image d’en-tête seront toujours affichés publiquement.
    • -
    • Posts, liste d’abonnements et autres informations publiques : la liste de vos abonnements ainsi que la liste de vos abonné·e·s sont publiques. Quand vous postez un message, la date et l’heure d’envoi ainsi que le nom de l’application utilisée pour sa transmission sont enregistré·e·s. Des médias, tels que des images ou des vidéos, peuvent être joints aux messages. Les posts publics et non listés sont affichés publiquement. Quand vous mettez en avant un post sur votre profil, ce post est également affiché publiquement. Vos messages sont délivrés à vos abonné·e·s, ce qui, dans certains cas, signifie qu’ils sont délivrés à des serveurs tiers et que ces derniers en stockent une copie. Quand vous supprimez un post, il est probable que l'action soit aussi délivrée à vos abonné·e·s. Partager un message ou le marquer comme favori est toujours une action publique.
    • -
    • Posts directs et abonné·e·s uniquement : tous les posts sont stockés et traités par le serveur. Les messages abonné·e·s uniquement ne sont transmis qu’à vos abonné·e·s et aux personnes mentionnées dans le corps du message, tandis que les messages directs ne sont transmis qu’aux personnes mentionnées. Dans certains cas, cela signifie qu’ils sont délivrés à des serveurs tiers et que ces derniers en stockent une copie. Nous faisons un effort de bonne foi pour en limiter l’accès uniquement aux personnes autorisées, mais ce n’est pas nécessairement le cas des autres serveurs. Il est donc très important que vous vérifiiez les serveurs auxquels appartiennent vos abonné·e·s. Il vous est possible d’activer une option dans les paramètres afin d’approuver et de rejeter manuellement les nouveaux·lles abonné·e·s. Gardez s’il vous plaît en mémoire que les opérateur·rice·s du serveur ainsi que celles et ceux de n’importe quel serveur récepteur peuvent voir ces messages et qu’il est possible pour les destinataires de faire des captures d’écran, de copier et plus généralement de repartager ces messages. Ne partagez aucune information sensible à l’aide de Mastodon !
    • +
    • Posts, liste d’abonnements et autres informations publiques : la liste de vos abonnements ainsi que la liste de vos abonnés sont publiques. Quand vous postez un message, la date et l’heure d’envoi ainsi que le nom de l’application utilisée pour sa transmission sont enregistrés. Des médias, tels que des images ou des vidéos, peuvent être joints aux messages. Les posts publics et non listés sont affichés publiquement. Quand vous mettez en avant un post sur votre profil, ce post est également affiché publiquement. Vos messages sont délivrés à vos abonnés, ce qui, dans certains cas, signifie qu’ils sont délivrés à des serveurs tiers et que ces derniers en stockent une copie. Quand vous supprimez un post, il est probable que l'action soit aussi délivrée à vos abonnés. Partager un message ou le marquer comme favori est toujours une action publique.
    • +
    • Posts directs et abonnés uniquement : tous les posts sont stockés et traités par le serveur. Les messages abonnés uniquement ne sont transmis qu’à vos abonnés et aux personnes mentionnées dans le corps du message, tandis que les messages directs ne sont transmis qu’aux personnes mentionnées. Dans certains cas, cela signifie qu’ils sont délivrés à des serveurs tiers et que ces derniers en stockent une copie. Nous faisons un effort de bonne foi pour en limiter l’accès uniquement aux personnes autorisées, mais ce n’est pas nécessairement le cas des autres serveurs. Il est donc très important que vous vérifiiez les serveurs auxquels appartiennent vos abonnés. Il vous est possible d’activer une option dans les paramètres afin d’approuver et de rejeter manuellement les nouveaux abonnés. Gardez s’il vous plaît en mémoire que les opérateurs du serveur ainsi que celles et ceux de n’importe quel serveur récepteur peuvent voir ces messages et qu’il est possible pour les destinataires de faire des captures d’écran, de copier et plus généralement de repartager ces messages. Ne partagez aucune information sensible à l’aide de Mastodon !
    • IP et autres métadonnées : quand vous vous connectez, nous enregistrons votre adresse IP ainsi que le nom de votre navigateur web. Toutes les sessions enregistrées peuvent être consultées dans les paramètres, afin que vous puissiez les surveiller et éventuellement les révoquer. La dernière adresse IP utilisée est conservée pour une durée de 12 mois. Nous sommes également susceptibles de conserver les journaux du serveur, ce qui inclut l’adresse IP de chaque requête reçue.
    @@ -1306,7 +1360,7 @@ fr:

    Toutes les informations que nous collectons sur vous peuvent être utilisées des manières suivantes :

      -
    • pour vous fournir les fonctionnalités de base de Mastodon. Vous ne pouvez interagir avec le contenu des autres et poster votre propre contenu que lorsque vous êtes connecté·e. Par exemple, vous pouvez vous abonner à plusieurs autres comptes pour voir l’ensemble de leurs posts dans votre fil d’accueil personnalisé.
    • +
    • pour vous fournir les fonctionnalités de base de Mastodon. Vous ne pouvez interagir avec le contenu des autres et poster votre propre contenu que lorsque vous êtes connecté. Par exemple, vous pouvez vous abonner à plusieurs autres comptes pour voir l’ensemble de leurs posts dans votre fil d’accueil personnalisé.
    • pour aider à la modération de la communauté : par exemple, comparer votre adresse IP avec d’autres afin de déterminer si un bannissement a été contourné ou si une autre violation aux règles a été commise.
    • l’adresse électronique que vous nous avez fournie peut être utilisée pour vous envoyer des informations, des notifications lorsque d’autres personnes interagissent avec votre contenu ou vous envoient des messages, pour répondre à des demandes de votre part ainsi que pour toutes autres requêtes ou questions.
    @@ -1325,7 +1379,7 @@ fr:
    • pour ne pas conserver plus de 90 jours les journaux systèmes contenant les adresses IP de toutes les requêtes reçues par ce serveur.
    • -
    • pour ne pas conserver plus de 12 mois les adresses IP associées aux utilisateur·ice·s enregistré·e·s.
    • +
    • pour ne pas conserver plus de 12 mois les adresses IP associées aux utilisateurs enregistrés.

    Vous pouvez demander une archive de votre contenu, incluant vos posts, vos médias joints, votre image de profil et votre image d’en-tête.

    @@ -1346,9 +1400,9 @@ fr:

    Nous ne vendons, n’échangeons ou ne transférons d’une quelconque manière que ce soit des informations permettant de vous identifier personnellement. Cela n’inclut pas les tiers de confiance qui nous aident à faire fonctionner ce site, à conduire nos activités commerciales ou à vous servir, du moment qu’ils acceptent de garder ces informations confidentielles. Nous sommes également susceptibles de partager vos informations quand nous pensons que cela est nécessaire pour nous conformer à la loi, pour faire respecter les règles de notre site, ainsi que pour défendre nos droits, notre propriété, notre sécurité, ou ceux d’autres personnes.

    -

    Votre contenu public peut être téléchargé par d’autres serveurs du réseau. Dans le cas où vos abonné·e·s et vos destinataires résideraient sur des serveurs différents du vôtre, vos posts publics et abonné·e·s uniquement peuvent être délivrés vers les serveurs de vos abonné·e·s tandis que vos messages directs sont délivrés aux serveurs de vos destinataires.

    +

    Votre contenu public peut être téléchargé par d’autres serveurs du réseau. Dans le cas où vos abonnés et vos destinataires résideraient sur des serveurs différents du vôtre, vos posts publics et abonnés uniquement peuvent être délivrés vers les serveurs de vos abonnés tandis que vos messages directs sont délivrés aux serveurs de vos destinataires.

    -

    Quand vous autorisez une application à utiliser votre compte, en fonction de l’étendue des permissions que vous approuvez, il est possible qu’elle puisse accéder aux informations publiques de votre profil, à votre liste d’abonnements, votre liste d’abonné·e·s, vos listes, tous vos posts et vos favoris. Les applications ne peuvent en aucun cas accéder à votre adresse électronique et à votre mot de passe.

    +

    Quand vous autorisez une application à utiliser votre compte, en fonction de l’étendue des permissions que vous approuvez, il est possible qu’elle puisse accéder aux informations publiques de votre profil, à votre liste d’abonnements, votre liste d’abonnés, vos listes, tous vos posts et vos favoris. Les applications ne peuvent en aucun cas accéder à votre adresse électronique et à votre mot de passe.


    @@ -1427,16 +1481,16 @@ fr: suspend: Compte suspendu welcome: edit_profile_action: Configuration du profil - edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant un avatar, une image d’en-tête, en changeant votre pseudo et plus encore. Si vous souhaitez examiner les nouveaux·lles abonné·e·s avant qu’il·elle·s ne soient autorisé·e·s à vous suivre, vous pouvez verrouiller votre compte. + edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant un avatar, une image d’en-tête, en changeant votre pseudo et plus encore. Si vous souhaitez examiner les nouveaux abonnés avant qu’ils ne soient autorisés à vous suivre, vous pouvez verrouiller votre compte. explanation: Voici quelques conseils pour vous aider à démarrer final_action: Commencez à publier - final_step: 'Commencez à publier ! Même sans abonné·e·s, vos messages publics peuvent être vus par d’autres, par exemple sur le fil public local et dans les hashtags. Vous pouvez vous présenter sur le hashtag #introductions.' + final_step: 'Commencez à publier ! Même sans abonnés, vos messages publics peuvent être vus par d’autres, par exemple sur le fil public local et dans les hashtags. Vous pouvez vous présenter sur le hashtag #introductions.' full_handle: Votre identifiant complet - full_handle_hint: C’est ce que vous diriez à vos ami·e·s pour leur permettre de vous envoyer un message ou vous suivre à partir d’un autre serveur. + full_handle_hint: C’est ce que vous diriez à vos amis pour leur permettre de vous envoyer un message ou vous suivre à partir d’un autre serveur. review_preferences_action: Modifier les préférences review_preferences_step: Assurez-vous de définir vos préférences, telles que les courriels que vous aimeriez recevoir ou le niveau de confidentialité auquel vous publier vos messages par défaut. Si vous n’avez pas le mal des transports, vous pouvez choisir d’activer la lecture automatique des GIF. subject: Bienvenue sur Mastodon - tip_federated_timeline: La fil public global est une vue en direct du réseau Mastodon. Mais elle n’inclut que les personnes auxquelles vos voisin·es sont abonné·e·s, donc elle n’est pas complète. + tip_federated_timeline: La fil public global est une vue en direct du réseau Mastodon. Mais elle n’inclut que les personnes auxquelles vos voisins sont abonnés, donc elle n’est pas complète. tip_following: Vous suivez les administrateur·rice·s de votre serveur par défaut. Pour trouver d’autres personnes intéressantes, consultez les fils publics local et global. tip_local_timeline: Le fil public local est une vue des personnes sur %{instance}. Ce sont vos voisines et voisins immédiats ! tip_mobile_webapp: Si votre navigateur mobile vous propose d’ajouter Mastodon à votre écran d’accueil, vous pouvez recevoir des notifications. Il agit comme une application native de bien des façons ! @@ -1449,7 +1503,7 @@ fr: invalid_sign_in_token: Code de sécurité non valide otp_lost_help_html: Si vous perdez accès aux deux, vous pouvez contacter %{email} seamless_external_login: Vous êtes connecté via un service externe, donc les paramètres concernant le mot de passe et le courriel ne sont pas disponibles. - signed_in_as: 'Connecté·e en tant que :' + signed_in_as: 'Connecté en tant que :' suspicious_sign_in_confirmation: Il semblerait que vous ne vous êtes pas connecté depuis cet appareil auparavant et que vous ne vous êtes pas connecté depuis un moment, alors nous envoyons un code de sécurité à votre adresse courriel pour confirmer qu’il s’agit bien de vous. verification: explanation_html: 'Vous pouvez vous vérifier en tant que propriétaire des liens dans les métadonnées de votre profil. Pour cela, le site web lié doit contenir un lien vers votre profil Mastodon. Le lien de retour doit avoir un attribut rel="me" . Le texte du lien n’a pas d’importance. Voici un exemple :' diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 6ec1cf25a..357a12b25 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1,7 +1,7 @@ --- gd: about: - about_hashtag_html: Seo postaichean poblach le taga #%{hashtag} riutha. ’S urrainn dhut eadar-ghnìomh a ghabhail leotha ma tha cunntas agad àite sam bith sa cho-shaoghal. + about_hashtag_html: Seo postaichean poblach le taga #%{hashtag} riutha. ’S urrainn dhut conaltradh leotha ma tha cunntas agad àite sam bith sa cho-shaoghal. about_mastodon_html: 'An lìonra sòisealta dhan àm ri teachd: Gun sanasachd, gun chaithris corporra, dealbhadh beusail agus dì-mheadhanachadh! Gabh sealbh air an dàta agad fhèin le Mastodon!' about_this: Mu dhèidhinn active_count_after: gnìomhach @@ -45,11 +45,11 @@ gd: reason: Adhbhar rejecting_media: 'Cha dèid faidhlichean meadhain o na frithealaichean seo a phròiseasadh no a stòradh agus cha dèid dealbhagan dhiubh a shealltainn. Feumar briogadh gus an ruigear am faidhle tùsail a làimh:' rejecting_media_title: Meadhanan criathraichte - silenced: 'Thèid postaichean o na frithealaichean seo fhalach air loidhnichean-ama is còmhraidhean poblach agus cha dèid brathan a ghintinn à eadar-ghnìomhan nan cleachdaichean aca ach ma bhios tu fèin a’ leantainn orra:' + silenced: 'Thèid postaichean o na frithealaichean seo fhalach air loidhnichean-ama is còmhraidhean poblach agus cha dèid brathan a ghintinn à conaltraidhean nan cleachdaichean aca ach ma bhios tu fèin a’ leantainn orra:' silenced_title: Frithealaichean mùchte - suspended: 'Cha dèid dàta sam bith o na frithealaichean seo a phròiseasadh, a stòradh no iomlaid agus chan urrainn do na cleachdaichean o na frithealaichean sin conaltradh no eadar-ghnìomh a ghabhail an-seo:' + suspended: 'Cha dèid dàta sam bith o na frithealaichean seo a phròiseasadh, a stòradh no iomlaid agus chan urrainn do na cleachdaichean o na frithealaichean sin conaltradh an-seo:' suspended_title: Frithealaichean à rèim - unavailable_content_html: San fharsaingeachd, leigidh Mastodon leat susbaint o fhrithealaiche sam bith sa cho-shaoghal a shealltainn agus eadar-ghìomh a ghabhail leis na cleachdaichean uapa-san. Seo na h-easgaidhean a tha an sàs air an fhrithealaiche shònraichte seo. + unavailable_content_html: San fharsaingeachd, leigidh Mastodon leat susbaint o fhrithealaiche sam bith sa cho-shaoghal a shealltainn agus conaltradh leis na cleachdaichean uapa-san. Seo na h-easgaidhean a tha an sàs air an fhrithealaiche shònraichte seo. user_count_after: few: cleachdaichean one: chleachdaiche @@ -127,6 +127,7 @@ gd: demote: Ìslich destroyed_msg: Chaidh an dàta aig %{username} a chur air a’ chiutha ach an dèid a sguabadh às an ceann greis bheag disable: Reòth + disable_sign_in_token_auth: Cuir à comas dearbhadh le tòcan puist-d disable_two_factor_authentication: Cuir an dearbhadh dà-cheumnach à comas disabled: Reòthte display_name: Ainm-taisbeanaidh @@ -135,6 +136,7 @@ gd: email: Post-d email_status: Staid a’ phuist-d enable: Dì-reòth + enable_sign_in_token_auth: Cuir an comas dearbhadh le tòcan puist-d enabled: An comas enabled_msg: Chaidh an cunntas aig %{username} a dhì-reòthadh followers: Luchd-leantainn @@ -199,8 +201,12 @@ gd: search: Lorg search_same_email_domain: Cleachdaichean eile aig a bheil an aon àrainn puist-d search_same_ip: Cleachdaichean eile aig a bheil an t-aon IP + security_measures: + only_password: Facal-faire a-mhàin + password_and_2fa: Facal-faire ’s dà-cheumnach + password_and_sign_in_token: Facal-faire ’s tòcan puist-d sensitive: Frionasach - sensitized: chaidh comharradh gu bheil e frionasach + sensitized: Chaidh comharradh gu bheil e frionasach shared_inbox_url: URL a’ bhogsa a-steach cho-roinnte show: created_reports: Gearanan a chaidh a dhèanamh @@ -250,8 +256,10 @@ gd: destroy_unavailable_domain: Sguab às àrainn nach eil ri fhaighinn disable_2fa_user: Cuir an dearbhadh dà-cheumnach à comas disable_custom_emoji: Cuir an t-Emoji gnàthaichte à comas + disable_sign_in_token_auth_user: Cuir à comas dearbhadh le tòcan puist-d dhan chleachdaiche disable_user: Cuir an cleachdaiche à comas enable_custom_emoji: Cuir an t-Emoji gnàthaichte an comas + enable_sign_in_token_auth_user: Cuir an comas dearbhadh le tòcan puist-d dhan chleachdaiche enable_user: Cuir an cleachdaiche an comas memorialize_account: Dèan cuimhneachan dhen chunntas promote_user: Àrdaich an cleachdaiche @@ -293,8 +301,10 @@ gd: destroy_unavailable_domain_html: Lean %{name} air adhart leis an lìbhrigeadh dhan àrainn %{target} disable_2fa_user_html: Chuir %{name} riatanas an dearbhaidh dà-cheumnaich à comas dhan chleachdaiche %{target} disable_custom_emoji_html: Chuir %{name} an Emoji %{target} à comas + disable_sign_in_token_auth_user_html: Chuir %{name} à comas dearbhadh le tòcan puist-d dha %{target} disable_user_html: Chuir %{name} an clàradh a-steach à comas dhan chleachdaiche %{target} enable_custom_emoji_html: Chuir %{name} an Emoji %{target} an comas + enable_sign_in_token_auth_user_html: Chuir %{name} an comas dearbhadh le tòcan puist-d dha %{target} enable_user_html: Chuir %{name} an clàradh a-steach an comas dhan chleachdaiche %{target} memorialize_account_html: Rinn %{name} duilleag cuimhneachain dhen chunntas aig %{target} promote_user_html: Dh’àrdaich %{name} an cleachdaiche %{target} @@ -369,32 +379,9 @@ gd: updated_msg: Chaidh an t-Emoji ùrachadh! upload: Luchdaich suas dashboard: - authorized_fetch_mode: Modh tèarainte - backlog: an càrn-obrach - config: Rèiteachadh - feature_deletions: Cunntasan air an sguabadh às - feature_invites: Ceanglaichean cuiridh - feature_profile_directory: Eòlaire nam pròifil - feature_registrations: Clàraidhean - feature_relay: Ath-sheachadan co-nasgaidh - feature_timeline_preview: Ro-shealladh air an loidhne-ama - features: Gleusan - hidden_service: Co-nasgadh le seirbheisean falaichte - open_reports: gearanan fosgailte - pending_tags: tagaichean hais a’ feitheamh air lèirmheas - pending_users: cleachdaichean a’ feitheamh air lèirmheas - recent_users: Cleachdaichean o chionn ghoirid - search: Lorg làn-teacsa - single_user_mode: Modh a’ chleachdaiche shingilte software: Bathar-bog space: Caitheamh àite title: Deas-bhòrd - total_users: cleachdaichean iomlan - trends: Treandaichean - week_interactions: eadar-ghnìomhan an t-seachdain seo - week_users_active: gnìomhach an t-seachdain seo - week_users_new: cleachdaichean an t-seachdain seo - whitelist_mode: Modh a’ cho-nasgaidh chuingichte domain_allows: add_new: Ceadaich co-nasgadh le àrainn created_msg: Chaidh an àrainn a cheadachadh a chùm co-nasgaidh @@ -457,7 +444,7 @@ gd: title: Bac àrainn puist-d ùr title: Àrainnean puist-d ’gam bacadh follow_recommendations: - description_html: "Cuidichidh molaidhean leantainn an luchd-cleachdaidh ùr ach an lorg iad susbaint inntinneach gu luath. Mur an do ghabh cleachdaiche eadar-ghnìomhan gu leòr le càch airson molaidhean leantainn gnàthaichte fhaighinn, mholamaid na cunntasan seo ’nan àite. Thèid an àireamhachadh às ùr gach latha stèidhichte air na cunntasan air an robh an conaltradh as trice ’s an luchd-leantainn ionadail as motha sa chànan." + description_html: "Cuidichidh molaidhean leantainn an luchd-cleachdaidh ùr ach an lorg iad susbaint inntinneach gu luath. Mur an do ghabh cleachdaiche conaltradh gu leòr le càch airson molaidhean leantainn gnàthaichte fhaighinn, mholamaid na cunntasan seo ’nan àite. Thèid an àireamhachadh às ùr gach latha stèidhichte air na cunntasan air an robh an conaltradh as trice ’s an luchd-leantainn ionadail as motha sa chànan." language: Dhan chànan status: Staid suppress: Mùch na molaidhean leantainn @@ -587,6 +574,7 @@ gd: resolved: Air fhuasgladh resolved_msg: Chaidh an gearan fhuasgladh! status: Staid + target_origin: Tùs cunntas a’ ghearain title: Gearanan unassign: Dì-iomruin unresolved: Gun fhuasgladh @@ -716,9 +704,9 @@ gd: accounts_today: Cleachdaidhean fa leth an-diugh accounts_week: Cleachdaidhean fa leth an t-seachdain seo breakdown: Seall an cleachdadh an-diugh a-rèir tùis - last_active: Air a chleachdadh o chionn ghoirid + last_active: Air a chleachdadh o chionn goirid most_popular: Na tha fèill mhòr air - most_recent: Air a chruthachadh o chionn ghoirid + most_recent: Air a chruthachadh o chionn goirid name: Taga hais review: Dèan lèirmheas air an staid reviewed: Chaidh lèirmheas a dhèanamh air @@ -1026,6 +1014,17 @@ gd: lists: errors: limit: Ràinig thu na tha ceadaichte dhut de liostaichean + login_activities: + authentication_methods: + otp: aplacaid dearbhaidh dhà-cheumnaich + password: facal-faire + sign_in_token: cuir còd tèarainteachd air a’ phost-d + webauthn: iuchraichean tèarainteachd + description_html: Ma chì thu gnìomhachd nach aithnich thu, mholamaid gun atharraich thu am facal-faire agad ’s gun cuir thu an dearbhadh dà-cheumnach an comas. + empty: Chan eil eachdraidh an dearbhaidh ri fhaighinn + failed_sign_in_html: Oidhirp clàraidh a-steach nach deach leis le %{method} o %{ip} (%{browser}) + successful_sign_in_html: Oidhirp clàraidh a-steach a shoirbhich leis le %{method} o %{ip} (%{browser}) + title: Eachdraidh an dearbhaidh media_attachments: validations: images_and_video: Chan urrainn dhut video a cheangal ri post sa bheil dealbh mu thràth @@ -1047,7 +1046,7 @@ gd: incoming_migrations_html: Airson imrich o chunntas eile dhan fhear seo, feumaidh tu alias cunntais a chruthachadh an toiseach. moved_msg: Tha an cunntas agad ’ga ath-stiùireadh gu %{acct} a-nis ’s an luchd-leantainn agad ’gan imrich. not_redirecting: Chan eil an cunntas agad ’ga ath-stiùireadh gu cunntas sam bith eile aig an àm seo. - on_cooldown: Rinn thu imrich air a’ chunntas agad o chionn ghoirid. Bidh an gleus seo ri làimh dhut a-rithist an ceann %{count} là(ithean). + on_cooldown: Rinn thu imrich air a’ chunntas agad o chionn goirid. Bidh an gleus seo ri làimh dhut a-rithist an ceann %{count} là(ithean). past_migrations: Imrichean roimhpe proceed_with_move: Imrich an luchd-leantainn redirected_msg: Tha an cunntas agad ’ga ath-stiùireadh gu %{acct} a-nis. @@ -1236,6 +1235,7 @@ gd: revoke: Cùl-ghairm revoke_success: Chaidh an seisean a chùl-ghairm title: Seiseanan + view_authentication_history: Seall eachdraidh an dearbhaidh dhan chunntas agad settings: account: Cunntas account_settings: Roghainnean a’ chunntais @@ -1256,6 +1256,7 @@ gd: preferences: Roghainnean profile: Pròifil relationships: Dàimhean leantainn + statuses_cleanup: Sguabadh às fèin-obrachail phostaichean two_factor_authentication: Dearbhadh dà-cheumnach webauthn_authentication: Iuchraichean tèarainteachd statuses: @@ -1319,6 +1320,40 @@ gd: public_long: Chì a h-uile duine seo unlisted: Falaichte o liostaichean unlisted_long: Chì a h-uile duine seo ach cha nochd e air loidhnichean-ama poblach + statuses_cleanup: + enabled: Sguab às seann-phostaichean gu fèin-obrachail + enabled_hint: Sguabaidh seo às na seann-phostaichean agad gu fèin-obrachail nuair a ruigeas iad stairsneach aoise sònraichte ach ma fhreagras iad ri gin dhe na h-eisgeachdan gu h-ìosal + exceptions: Eisgeachdan + explanation: On a tha sguabadh às phostaichean ’na ghnìomh cosgail, thèid seo a dhèanamh gu slaodach thar ùine nuair nach eil am frithealaiche dripeil le nithean eile. Air an adhbhar sin, dh’fhaoidte gum mair na postaichean agad greiseag fhathast nuair a ruigeas iad stairsneach na h-aoise. + ignore_favs: Leig seachad na h-annsachdan + ignore_reblogs: Leig seachad na brosnachaidhean + interaction_exceptions: Eisgeachdan stèidhichte air eadar-ghnìomhan + interaction_exceptions_explanation: Thoir an aire nach doir sinn barantas gun dèid postaichean a sguabadh às nuair a thèid iad fo stairsneach nan annsachdan no brosnachaidhean ma bha iad os a chionn uair. + keep_direct: Cùm na teachdaireachdan dìreach + keep_direct_hint: Cha dèid gin dhe na teachdaireachdan dìreach agad a sguabadh às + keep_media: Cùm postaichean le ceanglachan meadhain + keep_media_hint: Cha dèid gin dhe na postaichean agad ris a bheil ceanglachan meadhain a sguabadh às + keep_pinned: Cùm na postaichean prìnichte + keep_pinned_hint: Cha dèid gin dhe na postaichean prìnichte agad a sguabadh às + keep_polls: Cùm na cunntasan-bheachd + keep_polls_hint: Cha dèid gin dhe na cunntasan-bheachd agad a sguabadh às + keep_self_bookmark: Cùm na chuir thu ris comharran-lìn + keep_self_bookmark_hint: Cha dèid gin dhe na postaichean agad fhèin a chuir thu ris na comharran-lìn agad a sguabadh às + keep_self_fav: Cùm na chuir thu ris na h-annsachdan + keep_self_fav_hint: Cha dèid gin dhe na postaichean agad fhèin a chuir thu ris na h-annsachdan agad a sguabadh às + min_age: + '1209600': 2 sheachdain + '15778476': Leth-bhliadhna + '2629746': Mìos + '31556952': Bliadhna + '5259492': 2 mhìos + '63113904': 2 bhliadhna + '7889238': 3 mìosan + min_age_label: Stairsneach aoise + min_favs: Cùm na tha ’na annsachd aig còrr is + min_favs_hint: Cha dèid gin dhe na postaichean agad a sguabadh às a tha ’nan annsachd aig barrachd daoine na an t-uiread seo. Fàg seo bàn airson postaichean a sguabadh às ge b’ e co mheud neach a chur ris na h-annsachdan iad + min_reblogs: Cùm na tha ’ga bhrosnachadh le còrr is + min_reblogs_hint: Cha dèid gin dhe na postaichean agad a sguabadh às a tha ’gam brosnachadh le barrachd daoine na an t-uiread seo. Fàg seo bàn airson postaichean a sguabadh às ge b’ e co mheud neach a tha ’gam brosnachadh stream_entries: pinned: Post prìnichte reblogged: "’ga bhrosnachadh" @@ -1326,9 +1361,7 @@ gd: tags: does_not_match_previous_name: "– chan eil seo a-rèir an ainm roimhe" terms: - body_html: '

    Poileasaidh prìobhaideachd

    Dè am fiosrachadh a chruinnicheas sinn?

    • Fiosrachadh bunasach a’ cunntais: Ma chlàraicheas tu leis an fhrithealaiche seo, dh’fhaoidte gun dèid iarraidh ort gun cuir thu a-steach ainm-cleachdaiche, seòladh puist-d agus facal-faire. Faodaidh tu barrachd fiosrachaidh a chur ris a’ phròifil agad ma thogras tu, can ainm-taisbeanaidh agus teacsa mu do dhèidhinn agus dealbhan pròifile ’s banna-chinn a luchdadh suas. Thèid an t-ainm-cleachdaiche, an t-ainm-taisbeanaidh, an teacsa mu do dhèidhinn agus dealbhan na pròifile ’s a bhanna-chinn a shealltainn gu poblach an-còmhnaidh.
    • Postaichean, luchd-leantainn agus fiosrachadh poblach eile: Tha liosta nan daoine air a leanas tu poblach mar a tha i dhan luchd-leantainn agad. Nuair a chuireas tu a-null teachdaireachd, thèid an t-àm ’s an ceann-latha a stòradh cho math ris an aplacaid leis an do chuir thu am foirm a-null. Faodaidh ceanglachain meadhain a bhith am broinn teachdaireachdan, can dealbhan no videothan. Tha postaichean poblach agus postaichean falaichte o liostaichean ri ’m faighinn gu poblach. Nuair a bhrosnaicheas tu post air a’ phròifil agad, ’s e fiosrachadh poblach a tha sin cuideachd. Thèid na postaichean agad a lìbhrigeadh dhan luchd-leantainn agad agus is ciall dha seo gun dèid an lìbhrigeadh gu frithealaichean eile aig amannan is gun dèid lethbhreacan dhiubh a stòradh thall. Nuair a sguabas tu às post, thèid sin a lìbhrigeadh dhan luchd-leantainn agad cuideachd. Tha ath-bhlogachadh no dèanamh annsachd de phost eile poblach an-còmhnaidh.
    • Postaichean dìreach is dhan luchd-leantainn a-mhàin: Thèid a h-uile post a stòradh ’s a phròiseasadh air an fhrithealaiche. Thèid na postaichean dhan luchd-leantainn a-mhàin a lìbhrigeadh dhan luchd-leantainn agad agus dhan luchd-chleachdaidh a chaidh iomradh a dhèanamh orra sa phost. Thèid postaichean dìreach a lìbhrigeadh dhan luchd-chleachdaidh a chaidh iomradh a dhèanamh orra sa phost a-mhàin. Is ciall dha seo gun dèid an lìbhrigeadh gu frithealaichean eile aig amannan is gun dèid lethbhreacan dhiubh a stòradh thall. Nì sinn ar dìcheall gun cuingich sinn an t-inntrigeadh dha na postaichean air na daoine a fhuair ùghdarrachadh dhaibh ach dh’fhaoidte nach dèan frithealaichean eile seo. Mar sin dheth, tha e cudromach gun doir thu sùil air na frithealaichean dhan a bhuineas an luchd-leantainn agad. Faodaidh tu roghainn a chur air no dheth a leigeas leat aontachadh ri luchd-leantainn ùra no an diùltadh a làimh. Thoir an aire gum faic rianairean an fhrithealaiche agus frithealaiche sam bith a gheibh am fiosrachadh na teachdaireachdan dhen leithid agus gur urrainn dha na faightearan glacaidhean-sgrìn no lethbhreacan dhiubh a dhèanamh no an cho-roinneadh air dòighean eile. Na co-roinn fiosrachadh cunnartach air Mastodon idir.
    • IPan is meata-dàta eile: Nuair a nì thu clàradh a-steach, clàraidh sinn an seòladh IP on a rinn thu clàradh a-steach cuide ri ainm aplacaid a’ bhrabhsair agad. Bidh a h-uile seisean clàraidh a-steach ri làimh dhut airson an lèirmheas agus an cùl-ghairm sna roghainnean. Thèid an seòladh IP as ùire a chleachd thu a stòradh suas ri 12 mhìos. Faodaidh sinn cuideachd logaichean an fhrithealaiche a chumail a ghabhas a-steach seòladh IP aig a h-uile iarrtas dhan fhrithealaiche againn.

    Dè na h-adhbharan air an cleachd sinn am fiosrachadh agad?

    Seo na dòighean air an cleachd sinn fiosrachadh sam bith a chruinnich sinn uat ma dh’fhaoidte:

    • Airson bun-ghleusan Mhastodon a lìbhrigeadh. Chan urrainn dhut eadar-ghnìomh a ghabhail le susbaint càich no an t-susbaint agad fhèin a phostadh ach nuair a bhios tu air do chlàradh a-steach. Mar eisimpleir, faodaidh tu leantainn air càch ach am faic thu na postaichean aca còmhla air loidhne-ama pearsanaichte na dachaigh agad.
    • Airson cuideachadh le maorsainneachd na coimhearsnachd, can airson coimeas a dhèanamh eadar an seòladh IP agad ri feadhainn eile feuch am mothaich sinn do sheachnadh toirmisg no briseadh eile nan riaghailtean.
    • Faodaidh sinn an seòladh puist-d agad a chleachdadh airson fiosrachadh no brathan mu eadar-ghnìomhan a ghabh càch leis an t-susbaint agad no teachdaireachdan a chur thugad, airson freagairt ri ceasnachaidhean agus/no iarrtasan no ceistean eile.

    Ciamar a dhìonas sinn am fiosrachadh agad?

    Cuiridh sinn iomadh gleus tèarainteachd an sàs ach an glèidheadh sinn sàbhailteachd an fhiosrachaidh phearsanta agad nuair a chuireas tu gin a-steach, nuair a chuireas tu a-null e no nuair a nì thu inntrigeadh air. Am measg gleusan eile, thèid seisean a’ bhrabhsair agad cuide ris an trafaig eadar na h-aplacaidean agad ’s an API a dhìon le SSL agus thèid hais a dhèanamh dhen fhacal-fhaire agad le algairim aon-shligheach làidir. Faodaidh tu dearbhadh dà-cheumnach a chur an comas airson barrachd tèarainteachd a chur ris an inntrigeadh dhan chunntas agad.


    Dè am poileasaidh cumail dàta againn?

    Nì sinn ar dìcheall:

    • Nach cùm sinn logaidhean an fhrithealaiche sa bheil seòlaidhean IP nan iarrtasan uile dhan fhrithealaiche seo nas fhaide na 90 latha ma chumas sinn logaichean dhen leithid idir.
    • Nach cùm sinn na seòlaidhean IP a tha co-cheangailte ri cleachdaichean clàraichte nas fhaide na 12 mhìos.

    ’S urrainn dhut tasg-lann iarraidh dhen t-susbaint agad ’s a luchdadh a-nuas is gabhaidh seo a-staigh na postaichean, na ceanglachain meadhain, dealbh na pròifil agus dealbh a’ bhanna-chinn agad.

    ’S urrainn dhut an cunntas agad a sguabadh às gu buan uair sam bith.


    An cleachd sinn briosgaidhean?

    Cleachdaidh. ’S e faidhlichean beaga a tha sna briosgaidean a thar-chuireas làrach no solaraiche seirbheise gu clàr-cruaidh a’ choimpiutair agad leis a’ bhrabhsair-lìn agad (ma cheadaicheas tu sin). Bheir na briosgaidean sin comas dhan làrach gun aithnich i am brabhsair agad agus ma tha cunntas clàraichte agad, gun co-cheangail i ris a’ chunntas chlàraichte agad e.

    Cleachdaidh sinn briosgaidean airson na roghainnean agad a thuigsinn ’s a ghlèidheadh gus an tadhail thu oirnn san àm ri teachd.


    Am foillsich sinn fiosrachadh sam bith gu pàrtaidhean air an taobh a-muigh?

    Cha reic, malairt no tar-chuir sinn fiosrachadh air a dh’aithnichear thu fhèin gu pàrtaidh sam bith air an taobh a-muigh. Cha ghabh seo a-staigh treas-phàrtaidhean earbsach a chuidicheas leinn le ruith na làraich againn, le obrachadh a’ ghnìomhachais againn no gus an t-seirbheis a thoirt leat cho fada ’s a dh’aontaicheas na treas-phàrtaidhean sin gun cùm iad am fiosrachadh dìomhair. Faodaidh sinn am fiosrachadh agad fhoillseachadh cuideachd nuair a bhios sinn dhen bheachd gu bheil am foillseachadh sin iomchaidh airson gèilleadh dhan lagh, poileasaidhean na làraich againn èigneachadh no na còraichean, an sealbh no an t-sàbhailteachd againn fhèin no aig càch a dhìon.

    Dh’fhaoidte gun dèid an t-susbaint phoblach agad a luchdadh a-nuas le frithealaichean eile san lìonra. Thèid na postaichean poblach agad ’s an fheadhainn dhan luchd-leantainn a-mhàin a lìbhrigeadh dha na frithealaichean far a bheil an luchd-leantainn agad a’ còmhnaidh agus thèid na teachdaireachdan dìreach a lìbhrigeadh gu frithealaichean nam faightearan nuair a bhios iad a’ còmhnaidh air frithealaiche eile.

    Nuair a dh’ùghdarraicheas tu aplacaid gun cleachd i an cunntas agad, a-rèir sgòp nan ceadan a dh’aontaicheas tu riutha, faodaidh i fiosrachadh poblach na pròifil agad, liosta na feadhna air a bhios tu a’ leantainn, an luchd-leantainn agad, na liostaichean agad, na postaichean agad uile ’s na h-annsachdan agad inntrigeadh. Chan urrainn do dh’aplacaidean an seòladh puist-d no am facal-faire agad inntrigeadh idir.


    Cleachdadh na làraich leis a’ chloinn

    Ma tha am frithealaiche seo san Aonadh Eòrpach (AE) no san Roinn Eaconomach na h-Eòrpa (EEA): Tha an làrach, na batharan agus na seirbheisean againn uile ag amas air an fheadhainn a tha co-dhiù 16 bliadhnaichean a dh’aois. Ma tha thu nas òige na 16 bliadhnaichean a dh’aois, tha e riatanach fon GDPR (General Data Protection Regulation) nach cleachd thu an làrach seo.

    Ma tha am frithealaiche seo sna Stàitean Aonaichte (SAA): Tha an làrach, na batharan agus na seirbheisean againn uile ag amas air an fheadhainn a tha co-dhiù 13 bliadhnaichean a dh’aois. Ma tha thu nas òige na 16 bliadhnaichean a dh’aois, tha e riatanach fon COPPA (Children''s Online Privacy Protection Act)ha an làrach, na batharan agus na seirbheisean againn uile ag amas air an fheadhainn a tha co-dhiù 16 bliadhnaichean a dh’aois. Ma tha thu nas òige na 16 bliadhnaichean a dh’aois, tha e riatanach fon GDPR (General Data Protection Regulation) nach cleachd thu an làrach seo.

    Ma tha am frithealaiche seo sna Stàitean Aonaichte (SAA): Tha an làrach, na batharan agus na seirbheisean againn uile ag amas air an fheadhainn a tha co-dhiù 13 bliadhnaichean a dh’aois. Ma tha thu nas òige na 16 bliadhnaichean a dh’aois, tha e riatanach fon COPPA (Children''s Online Privacy Protection Act) nach cleachd thu an làrach seo.

    Dh’fhaoidte gu bheil am frithealaiche seo fo riatanasan lagha eile ma tha e ann an uachdranas laghail eile.


    Atharraichean air a’ phoileasaidh phrìobhaideachd againn

    Ma chuireas sinn romhainn am poileasaidh prìobhaideachd againn atharrachadh, postaichidh sinn na h-atharraichean dhan duilleag seo.

    Tha an sgrìobhainn seo fo cheadachas CC-BY-SA. Chaidh ùrachadh an turas mu dheireadh an t-7mh dhen Mhart 2018.

    Chaidh a fhreagarrachadh o thùs o phoileasaidh prìobhaideachd Discourse.

    nach cleachd thu an làrach seo.

    Dh’fhaoidte gu bheil am frithealaiche seo fo riatanasan lagha eile ma tha e ann an uachdranas laghail eile.


    Atharraichean air a’ phoileasaidh phrìobhaideachd againn

    Ma chuireas sinn romhainn am poileasaidh prìobhaideachd againn atharrachadh, postaichidh sinn na h-atharraichean dhan duilleag seo.

    Tha an sgrìobhainn seo fo cheadachas CC-BY-SA. Chaidh ùrachadh an turas mu dheireadh an t-7mh dhen Mhart 2018.

    Chaidh a fhreagarrachadh o thùs o phoileasaidh prìobhaideachd Discourse.

    - - ' + body_html: '

    Poileasaidh prìobhaideachd

    Dè am fiosrachadh a chruinnicheas sinn?

    • Fiosrachadh bunasach a’ cunntais: Ma chlàraicheas tu leis an fhrithealaiche seo, dh’fhaoidte gun dèid iarraidh ort gun cuir thu a-steach ainm-cleachdaiche, seòladh puist-d agus facal-faire. Faodaidh tu barrachd fiosrachaidh a chur ris a’ phròifil agad ma thogras tu, can ainm-taisbeanaidh agus teacsa mu do dhèidhinn agus dealbhan pròifile ’s banna-chinn a luchdadh suas. Thèid an t-ainm-cleachdaiche, an t-ainm-taisbeanaidh, an teacsa mu do dhèidhinn agus dealbhan na pròifile ’s a bhanna-chinn a shealltainn gu poblach an-còmhnaidh.
    • Postaichean, luchd-leantainn agus fiosrachadh poblach eile: Tha liosta nan daoine air a leanas tu poblach mar a tha i dhan luchd-leantainn agad. Nuair a chuireas tu a-null teachdaireachd, thèid an t-àm ’s an ceann-latha a stòradh cho math ris an aplacaid leis an do chuir thu am foirm a-null. Faodaidh ceanglachain meadhain a bhith am broinn teachdaireachdan, can dealbhan no videothan. Tha postaichean poblach agus postaichean falaichte o liostaichean ri ’m faighinn gu poblach. Nuair a bhrosnaicheas tu post air a’ phròifil agad, ’s e fiosrachadh poblach a tha sin cuideachd. Thèid na postaichean agad a lìbhrigeadh dhan luchd-leantainn agad agus is ciall dha seo gun dèid an lìbhrigeadh gu frithealaichean eile aig amannan is gun dèid lethbhreacan dhiubh a stòradh thall. Nuair a sguabas tu às post, thèid sin a lìbhrigeadh dhan luchd-leantainn agad cuideachd. Tha ath-bhlogachadh no dèanamh annsachd de phost eile poblach an-còmhnaidh.
    • Postaichean dìreach is dhan luchd-leantainn a-mhàin: Thèid a h-uile post a stòradh ’s a phròiseasadh air an fhrithealaiche. Thèid na postaichean dhan luchd-leantainn a-mhàin a lìbhrigeadh dhan luchd-leantainn agad agus dhan luchd-chleachdaidh a chaidh iomradh a dhèanamh orra sa phost. Thèid postaichean dìreach a lìbhrigeadh dhan luchd-chleachdaidh a chaidh iomradh a dhèanamh orra sa phost a-mhàin. Is ciall dha seo gun dèid an lìbhrigeadh gu frithealaichean eile aig amannan is gun dèid lethbhreacan dhiubh a stòradh thall. Nì sinn ar dìcheall gun cuingich sinn an t-inntrigeadh dha na postaichean air na daoine a fhuair ùghdarrachadh dhaibh ach dh’fhaoidte nach dèan frithealaichean eile seo. Mar sin dheth, tha e cudromach gun doir thu sùil air na frithealaichean dhan a bhuineas an luchd-leantainn agad. Faodaidh tu roghainn a chur air no dheth a leigeas leat aontachadh ri luchd-leantainn ùra no an diùltadh a làimh. Thoir an aire gum faic rianairean an fhrithealaiche agus frithealaiche sam bith a gheibh am fiosrachadh na teachdaireachdan dhen leithid agus gur urrainn dha na faightearan glacaidhean-sgrìn no lethbhreacan dhiubh a dhèanamh no an cho-roinneadh air dòighean eile. Na co-roinn fiosrachadh cunnartach air Mastodon idir.
    • IPan is meata-dàta eile: Nuair a nì thu clàradh a-steach, clàraidh sinn an seòladh IP on a rinn thu clàradh a-steach cuide ri ainm aplacaid a’ bhrabhsair agad. Bidh a h-uile seisean clàraidh a-steach ri làimh dhut airson an lèirmheas agus an cùl-ghairm sna roghainnean. Thèid an seòladh IP as ùire a chleachd thu a stòradh suas ri 12 mhìos. Faodaidh sinn cuideachd logaichean an fhrithealaiche a chumail a ghabhas a-steach seòladh IP aig a h-uile iarrtas dhan fhrithealaiche againn.

    Dè na h-adhbharan air an cleachd sinn am fiosrachadh agad?

    Seo na dòighean air an cleachd sinn fiosrachadh sam bith a chruinnich sinn uat ma dh’fhaoidte:

    • Airson bun-ghleusan Mhastodon a lìbhrigeadh. Chan urrainn dhut conaltradh le susbaint càich no an t-susbaint agad fhèin a phostadh ach nuair a bhios tu air do chlàradh a-steach. Mar eisimpleir, faodaidh tu leantainn air càch ach am faic thu na postaichean aca còmhla air loidhne-ama pearsanaichte na dachaigh agad.
    • Airson cuideachadh le maorsainneachd na coimhearsnachd, can airson coimeas a dhèanamh eadar an seòladh IP agad ri feadhainn eile feuch am mothaich sinn do sheachnadh toirmisg no briseadh eile nan riaghailtean.
    • Faodaidh sinn an seòladh puist-d agad a chleachdadh airson fiosrachadh no brathan mu chonaltraidhean càich leis an t-susbaint agad no teachdaireachdan a chur thugad, airson freagairt ri ceasnachaidhean agus/no iarrtasan no ceistean eile.

    Ciamar a dhìonas sinn am fiosrachadh agad?

    Cuiridh sinn iomadh gleus tèarainteachd an sàs ach an glèidheadh sinn sàbhailteachd an fhiosrachaidh phearsanta agad nuair a chuireas tu gin a-steach, nuair a chuireas tu a-null e no nuair a nì thu inntrigeadh air. Am measg gleusan eile, thèid seisean a’ bhrabhsair agad cuide ris an trafaig eadar na h-aplacaidean agad ’s an API a dhìon le SSL agus thèid hais a dhèanamh dhen fhacal-fhaire agad le algairim aon-shligheach làidir. Faodaidh tu dearbhadh dà-cheumnach a chur an comas airson barrachd tèarainteachd a chur ris an inntrigeadh dhan chunntas agad.


    Dè am poileasaidh cumail dàta againn?

    Nì sinn ar dìcheall:

    • Nach cùm sinn logaidhean an fhrithealaiche sa bheil seòlaidhean IP nan iarrtasan uile dhan fhrithealaiche seo nas fhaide na 90 latha ma chumas sinn logaichean dhen leithid idir.
    • Nach cùm sinn na seòlaidhean IP a tha co-cheangailte ri cleachdaichean clàraichte nas fhaide na 12 mhìos.

    ’S urrainn dhut tasg-lann iarraidh dhen t-susbaint agad ’s a luchdadh a-nuas is gabhaidh seo a-staigh na postaichean, na ceanglachain meadhain, dealbh na pròifil agus dealbh a’ bhanna-chinn agad.

    ’S urrainn dhut an cunntas agad a sguabadh às gu buan uair sam bith.


    An cleachd sinn briosgaidhean?

    Cleachdaidh. ’S e faidhlichean beaga a tha sna briosgaidean a thar-chuireas làrach no solaraiche seirbheise gu clàr-cruaidh a’ choimpiutair agad leis a’ bhrabhsair-lìn agad (ma cheadaicheas tu sin). Bheir na briosgaidean sin comas dhan làrach gun aithnich i am brabhsair agad agus ma tha cunntas clàraichte agad, gun co-cheangail i ris a’ chunntas chlàraichte agad e.

    Cleachdaidh sinn briosgaidean airson na roghainnean agad a thuigsinn ’s a ghlèidheadh gus an tadhail thu oirnn san àm ri teachd.


    Am foillsich sinn fiosrachadh sam bith gu pàrtaidhean air an taobh a-muigh?

    Cha reic, malairt no tar-chuir sinn fiosrachadh air a dh’aithnichear thu fhèin gu pàrtaidh sam bith air an taobh a-muigh. Cha ghabh seo a-staigh treas-phàrtaidhean earbsach a chuidicheas leinn le ruith na làraich againn, le obrachadh a’ ghnìomhachais againn no gus an t-seirbheis a thoirt leat cho fada ’s a dh’aontaicheas na treas-phàrtaidhean sin gun cùm iad am fiosrachadh dìomhair. Faodaidh sinn am fiosrachadh agad fhoillseachadh cuideachd nuair a bhios sinn dhen bheachd gu bheil am foillseachadh sin iomchaidh airson gèilleadh dhan lagh, poileasaidhean na làraich againn èigneachadh no na còraichean, an sealbh no an t-sàbhailteachd againn fhèin no aig càch a dhìon.

    Dh’fhaoidte gun dèid an t-susbaint phoblach agad a luchdadh a-nuas le frithealaichean eile san lìonra. Thèid na postaichean poblach agad ’s an fheadhainn dhan luchd-leantainn a-mhàin a lìbhrigeadh dha na frithealaichean far a bheil an luchd-leantainn agad a’ còmhnaidh agus thèid na teachdaireachdan dìreach a lìbhrigeadh gu frithealaichean nam faightearan nuair a bhios iad a’ còmhnaidh air frithealaiche eile.

    Nuair a dh’ùghdarraicheas tu aplacaid gun cleachd i an cunntas agad, a-rèir sgòp nan ceadan a dh’aontaicheas tu riutha, faodaidh i fiosrachadh poblach na pròifil agad, liosta na feadhna air a bhios tu a’ leantainn, an luchd-leantainn agad, na liostaichean agad, na postaichean agad uile ’s na h-annsachdan agad inntrigeadh. Chan urrainn do dh’aplacaidean an seòladh puist-d no am facal-faire agad inntrigeadh idir.


    Cleachdadh na làraich leis a’ chloinn

    Ma tha am frithealaiche seo san Aonadh Eòrpach (AE) no san Roinn Eaconomach na h-Eòrpa (EEA): Tha an làrach, na batharan agus na seirbheisean againn uile ag amas air an fheadhainn a tha co-dhiù 16 bliadhnaichean a dh’aois. Ma tha thu nas òige na 16 bliadhnaichean a dh’aois, tha e riatanach fon GDPR (General Data Protection Regulation) nach cleachd thu an làrach seo.

    Ma tha am frithealaiche seo sna Stàitean Aonaichte (SAA): Tha an làrach, na batharan agus na seirbheisean againn uile ag amas air an fheadhainn a tha co-dhiù 13 bliadhnaichean a dh’aois. Ma tha thu nas òige na 16 bliadhnaichean a dh’aois, tha e riatanach fon COPPA (Children''s Online Privacy Protection Act)ha an làrach, na batharan agus na seirbheisean againn uile ag amas air an fheadhainn a tha co-dhiù 16 bliadhnaichean a dh’aois. Ma tha thu nas òige na 16 bliadhnaichean a dh’aois, tha e riatanach fon GDPR (General Data Protection Regulation) nach cleachd thu an làrach seo.

    Ma tha am frithealaiche seo sna Stàitean Aonaichte (SAA): Tha an làrach, na batharan agus na seirbheisean againn uile ag amas air an fheadhainn a tha co-dhiù 13 bliadhnaichean a dh’aois. Ma tha thu nas òige na 16 bliadhnaichean a dh’aois, tha e riatanach fon COPPA (Children''s Online Privacy Protection Act) nach cleachd thu an làrach seo.

    Dh’fhaoidte gu bheil am frithealaiche seo fo riatanasan lagha eile ma tha e ann an uachdranas laghail eile.


    Atharraichean air a’ phoileasaidh phrìobhaideachd againn

    Ma chuireas sinn romhainn am poileasaidh prìobhaideachd againn atharrachadh, postaichidh sinn na h-atharraichean dhan duilleag seo.

    Tha an sgrìobhainn seo fo cheadachas CC-BY-SA. Chaidh ùrachadh an turas mu dheireadh an t-7mh dhen Mhart 2018.

    Chaidh a fhreagarrachadh o thùs o phoileasaidh prìobhaideachd Discourse.

    nach cleachd thu an làrach seo.

    Dh’fhaoidte gu bheil am frithealaiche seo fo riatanasan lagha eile ma tha e ann an uachdranas laghail eile.


    Atharraichean air a’ phoileasaidh phrìobhaideachd againn

    Ma chuireas sinn romhainn am poileasaidh prìobhaideachd againn atharrachadh, postaichidh sinn na h-atharraichean dhan duilleag seo.

    Tha an sgrìobhainn seo fo cheadachas CC-BY-SA. Chaidh ùrachadh an turas mu dheireadh an t-7mh dhen Mhart 2018.

    Chaidh a fhreagarrachadh o thùs o phoileasaidh prìobhaideachd Discourse.

    ' title: Teirmichean na seirbheise ⁊ poileasaidh prìobhaideachd %{instance} themes: contrast: Mastodon (iomsgaradh àrd) @@ -1336,7 +1369,7 @@ gd: mastodon-light: Mastodon (soilleir) time: formats: - default: "%d %b %Y, %H∶%M" + default: "%d %b %Y, %H:%M" month: "%b %Y" two_factor_authentication: add: Cuir ris @@ -1397,7 +1430,7 @@ gd: review_preferences_step: Dèan cinnteach gun suidhich thu na roghainnean agad, can dè na puist-d a bu mhiann leat fhaighinn no dè a’ bun-roghainn air ìre na prìobhaideachd a bu chòir a bhith aig na postaichean agad. Mura cuir gluasad an òrrais ort, b’ urrainn dhut cluich fèin-obrachail nan GIFs a chur an comas. subject: Fàilte gu Mastodon tip_federated_timeline: "’S e sealladh farsaing dhen lìonra Mastodon a tha san loidhne-ama cho-naisgte. Gidheadh, cha ghabh i a-staigh ach na daoine air an do rinn do nàbaidhean fo-sgrìobhadh, mar sin chan eil i coileanta." - tip_following: Leanaidh tu air rianaire(an) an fhrithealaiche agad o thùs. Airson daoine nas inntinniche a lorg, thoir sùil air na loidhnichean-ama ionadail is co-naisgte. + tip_following: Leanaidh tu air rianaire(an) an fhrithealaiche agad a ghnàth. Airson daoine nas inntinniche a lorg, thoir sùil air na loidhnichean-ama ionadail is co-naisgte. tip_local_timeline: "’S e sealladh farsaing air na daoine a th’ air %{instance} a tha san loidhne-ama ionadail agad. Seo na nàbaidhean a tha faisg ort!" tip_mobile_webapp: Ma leigeas am brabhsair mobile agad leat Mastodon a chur ris an sgrìn-dhachaigh, ’s urrainn dhut brathan putaidh fhaighinn. Bidh e ’ga ghiùlan fhèin coltach ri aplacaid thùsail air iomadh dòigh! tips: Gliocasan diff --git a/config/locales/gl.yml b/config/locales/gl.yml index ce7dd20ce..d740d2b73 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -10,7 +10,7 @@ gl: api: API apps: Aplicacións móbiles apps_platforms: Emprega Mastodon dende iOS, Android e outras plataformas - browse_directory: Navega polo directorio de perfís e filtra por intereses + browse_directory: Mira o directorio e filtra por intereses browse_local_posts: Navega polas publicacións públicas deste servidor en tempo real browse_public_posts: Navega polas publicacións públicas de Mastodon en tempo real contact: Contacto @@ -21,9 +21,7 @@ gl: federation_hint_html: Cunha conta en %{instance} poderás seguir ás persoas en calquera servidor do Mastodon e alén. get_apps: Probar unha aplicación móbil hosted_on: Mastodon aloxado en %{domain} - instance_actor_flash: 'Esta conta é un actor virtual utilizado para representar ao servidor e non a unha usuaria individual. Utilízase para propósitos de federación e non debería estar bloqueada a menos que queiras bloquear a toda a instancia, en tal caso deberías utilizar o bloqueo do dominio. - - ' + instance_actor_flash: Esta conta é un actor virtual utilizado para representar ao servidor e non a unha usuaria individual. Utilízase para propósitos de federación e non debería estar bloqueada a menos que queiras bloquear a toda a instancia, en tal caso deberías utilizar o bloqueo do dominio. learn_more: Saber máis privacy_policy: Política de privacidade rules: Regras do servidor @@ -119,6 +117,7 @@ gl: demote: Rebaixar destroyed_msg: Os datos de %{username} están na cola para ser eliminados axiña disable: Desactivar + disable_sign_in_token_auth: Desactivar a autenticación por token nun email disable_two_factor_authentication: Desactivar 2FA disabled: Desactivado display_name: Nome a amosar @@ -127,6 +126,7 @@ gl: email: Email email_status: Estado do email enable: Activar + enable_sign_in_token_auth: Activar autenticación cun token no email enabled: Activado enabled_msg: Desbloqueada a conta de %{username} followers: Seguidoras @@ -151,7 +151,7 @@ gl: active: Activa all: Todo pending: Pendente - silenced: Silenciados + silenced: Acalada suspended: Suspendidos title: Moderación moderation_notes: Notas de moderación @@ -191,6 +191,10 @@ gl: search: Procurar search_same_email_domain: Outras usuarias co mesmo dominio de email search_same_ip: Outras usuarias co mesmo IP + security_measures: + only_password: Só contrasinal + password_and_2fa: Contrasinal e 2FA + password_and_sign_in_token: Contrasinal e token nun email sensitive: Sensible sensitized: marcado como sensible shared_inbox_url: URL da caixa de entrada compartida @@ -242,8 +246,10 @@ gl: destroy_unavailable_domain: Eliminar dominio Non dispoñible disable_2fa_user: Desactivar 2FA disable_custom_emoji: Desactivar emoticona personalizada + disable_sign_in_token_auth_user: Desactivar Autenticación por token no email para Usuaria disable_user: Desactivar usuaria enable_custom_emoji: Activar emoticona personalizada + enable_sign_in_token_auth_user: Activar Autenticación con token no email para Usuaria enable_user: Activar usuaria memorialize_account: Transformar en conta conmemorativa promote_user: Promover usuaria @@ -285,8 +291,10 @@ gl: destroy_unavailable_domain_html: "%{name} retomou a interacción co dominio %{target}" disable_2fa_user_html: "%{name} desactivou o requerimento do segundo factor para a usuaria %{target}" disable_custom_emoji_html: "%{name} desactivou o emoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} desactivou a autenticación por token no email para %{target}" disable_user_html: "%{name} desactivou a conexión para a usuaria %{target}" enable_custom_emoji_html: "%{name} activou o emoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} activou a autenticación con token no email para %{target}" enable_user_html: "%{name} activou a conexión para a usuaria %{target}" memorialize_account_html: "%{name} convertiu a conta de %{target} nunha páxina para o recordo" promote_user_html: "%{name} promocionou a usuaria %{target}" @@ -361,32 +369,28 @@ gl: updated_msg: Actualizouse a emoticona de xeito correcto! upload: Subir dashboard: - authorized_fetch_mode: Modo seguro - backlog: traballos en espera - config: Axustes - feature_deletions: Eliminacións da conta - feature_invites: Ligazóns de convite - feature_profile_directory: Directorio do perfil - feature_registrations: Rexistros - feature_relay: Repetidor da federación - feature_timeline_preview: Vista previa da cronoloxía - features: Funcións - hidden_service: Federación con servizos agochados - open_reports: denuncias abertas - pending_tags: cancelos agardando revisión - pending_users: usuarias agardando revisión - recent_users: Usuarias recentes - search: Procura por texto completo - single_user_mode: Modo de usuaria única + active_users: usuarias activas + interactions: interaccións + media_storage: Almacenaxe multimedia + new_users: novas usuarias + opened_reports: denuncias abertas + pending_reports_html: + one: "1 denuncia pendente" + other: "%{count} denuncias pendentes" + pending_tags_html: + one: "1 cancelo pendente" + other: "%{count} cancelos pendentes" + pending_users_html: + one: "1 usuaria pendente" + other: "%{count} usuarias pendentes" + resolved_reports: denuncias resoltas software: Software + sources: Orixes de rexistro space: Uso de almacenamento title: Taboleiro - total_users: usuarias en total - trends: Tendencias - week_interactions: interaccións desta semana - week_users_active: activos desta semana - week_users_new: usuarias esta semana - whitelist_mode: Modo de listaxe branca + top_languages: Idiomas máis activos + top_servers: Servidores máis activos + website: Sitio web domain_allows: add_new: Engadir dominio á listaxe branca created_msg: Engadeu o dominio a lista branca @@ -569,6 +573,7 @@ gl: resolved: Resolto resolved_msg: Resolveuse con éxito a denuncia! status: Estado + target_origin: Orixe da conta denunciada title: Denuncias unassign: Non asignar unresolved: Non resolto @@ -862,7 +867,7 @@ gl: username_available: O nome de usuaria estará dispoñible novamente username_unavailable: O nome de usuaria non estará dispoñible directories: - directory: Directorio de perfil + directory: Directorio de perfís explanation: Descubre usuarias según o teu interese explore_mastodon: Explorar %{title} domain_validator: @@ -1004,6 +1009,17 @@ gl: lists: errors: limit: Acadou o número máximo de listas + login_activities: + authentication_methods: + otp: app para autenticación con dous factores + password: contrasinal + sign_in_token: código de seguridade por email + webauthn: chaves de seguridade + description_html: Se ves actividade que non recoñeces, considera cambiar o contrasinal e activar o segundo factor de autenticación. + empty: Sen historial de autenticación dispoñible + failed_sign_in_html: Intento de conexión errado con %{method} desde %{ip} (%{browser}) + successful_sign_in_html: Conexión correcta con %{method} desde %{ip} (%{browser}) + title: Historial de autenticación media_attachments: validations: images_and_video: Non podes anexar un vídeo a unha publicación que xa contén imaxes @@ -1037,7 +1053,7 @@ gl: cooldown: Tras a migración existe un período de calma durante o cal non poderás volver a migrar de novo disabled_account: Tras o cambio a túa conta actual non será totalmente usable, pero terás acceso a exportar os datos e tamén a reactivación. followers: Esta acción moverá todas as túas seguidoras desde a conta actual a nova conta - only_redirect_html: De xeito alternativo, podes simplemente por unha redirección no perfil. + only_redirect_html: De xeito alternativo, podes simplemente pór unha redirección no perfil. other_data: Non se moverán outros datos de xeito automático redirect: O perfil da túa conta actualizarase cun aviso de redirección e será excluído das buscas moderation: @@ -1210,6 +1226,7 @@ gl: revoke: Revogar revoke_success: A sesión revogouse con éxito title: Sesións + view_authentication_history: Ver o historial de conexións da túa conta settings: account: Conta account_settings: Axustes da conta @@ -1230,6 +1247,7 @@ gl: preferences: Preferencias profile: Perfil relationships: Seguindo e seguidoras + statuses_cleanup: Borrado automático da publicación two_factor_authentication: Validar Dobre Factor webauthn_authentication: Chaves de seguridade statuses: @@ -1281,6 +1299,40 @@ gl: public_long: Visible para calquera unlisted: Non listado unlisted_long: Visible para calquera, pero non en cronoloxías públicas + statuses_cleanup: + enabled: Borrar automáticamente publicacións antigas + enabled_hint: Borra automáticamente as túas publicacións unha vez acadan certa lonxevidade, a menos que cumpran algunha destas excepcións + exceptions: Excepcións + explanation: Como o borrado de publicacións consume moitos recursos, este faise lentamente cando o servidor non ten moita carga de traballo. Así, a eliminación das túas publicacións podería ser lixeiramente posterior a cando lle correspondería por idade. + ignore_favs: Ignorar favoritas + ignore_reblogs: Ignorar promocións + interaction_exceptions: Excepcións baseadas en interaccións + interaction_exceptions_explanation: Ten en conta de que non hai garantía de que se eliminen as túas publicacións se non superan o límite de promocións e favoritos aínd que algunha vez o tivesen superado. + keep_direct: Manter mensaxes directas + keep_direct_hint: Non borrar ningunha das túas mensaxes directas + keep_media: Manter publicacións que conteñen multimedia + keep_media_hint: Non eliminar ningunha das túas publicacións con contido multimedia anexado + keep_pinned: Manter publicacións fixadas + keep_pinned_hint: Non eliminar ningunha das túas publicacións fixadas + keep_polls: Manter enquisas + keep_polls_hint: Non eliminar ningunha das túas enquisas + keep_self_bookmark: Manter as publicacións engadidas a marcadores + keep_self_bookmark_hint: Non elimina as publicacións se as engadiches aos marcadores + keep_self_fav: Manter as publicacións que marcaches como favoritas + keep_self_fav_hint: Non elimina as túas propias publicacións se as marcaches como favoritas + min_age: + '1209600': 2 semanas + '15778476': 6 meses + '2629746': 1 mes + '31556952': 1 ano + '5259492': 2 meses + '63113904': 2 anos + '7889238': 3 meses + min_age_label: Límite temporal + min_favs: Manter as publicacións favoritas máis de + min_favs_hint: Non elimina ningunha das túas publicacións que recibiron máis desta cantidade de favoritos. Deixa en branco para eliminar publicacións independentemente do número de favorecementos + min_reblogs: Manter publicacións promovidas máis de + min_reblogs_hint: Non elimina ningunha das túas publicacións se foron promovidas máis deste número de veces. Deixa en branco para eliminar publicacións independentemente do seu número de promocións stream_entries: pinned: Publicación fixada reblogged: promovido diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 542b5553b..720cc7350 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -121,6 +121,7 @@ hu: demote: Lefokozás destroyed_msg: A %{username} fiók adatai bekerültek a végleges törlése váró sorba disable: Kikapcsolás + disable_sign_in_token_auth: Tokenes e-mail hitelesítés letiltása disable_two_factor_authentication: Kétlépcsős hitelesítés kikapcsolása disabled: Kikapcsolva display_name: Megjelenített név @@ -129,6 +130,7 @@ hu: email: E-mail email_status: E-mail állapot enable: Bekapcsolás + enable_sign_in_token_auth: Tokenes e-mail hitelesítés engedélyezése enabled: Bekapcsolva enabled_msg: A %{username} fiók fagyasztását sikeresen visszavontuk followers: Követő @@ -193,6 +195,10 @@ hu: search: Keresés search_same_email_domain: Felhasználók ugyanezzel az email domainnel search_same_ip: Más felhasználók ugyanezzel az IP-vel + security_measures: + only_password: Csak jelszó + password_and_2fa: Jelszó és kétlépcsős hitelesítés + password_and_sign_in_token: Jelszó és e-mail token sensitive: Kényes sensitized: kényesnek jelölve shared_inbox_url: Megosztott bejövő üzenetek URL @@ -244,8 +250,10 @@ hu: destroy_unavailable_domain: Elérhetetlen domain törlése disable_2fa_user: Kétlépcsős hitelesítés letiltása disable_custom_emoji: Egyéni emodzsi letiltása + disable_sign_in_token_auth_user: A felhasználó tokenes e-mail hitelesítésének letiltása disable_user: Felhasználói letiltása enable_custom_emoji: Egyéni emodzsi engedélyezése + enable_sign_in_token_auth_user: A felhasználó tokenes e-mail hitelesítésének engedélyezése enable_user: Felhasználó engedélyezése memorialize_account: Fiók emlékké nyilvánítása promote_user: Felhasználó előléptetése @@ -287,8 +295,10 @@ hu: destroy_unavailable_domain_html: "%{name} újraindította a kézbesítést a %{target} domainbe" disable_2fa_user_html: "%{name} kikapcsolta a kétlépcsős azonosítást %{target} felhasználó fiókján" disable_custom_emoji_html: "%{name} letiltotta a %{target} emodzsit" + disable_sign_in_token_auth_user_html: "%{name} letiltotta a tokenes e-mail hitelesítést %{target} felhasználóra" disable_user_html: "%{name} letiltotta %{target} felhasználó bejelentkezését" enable_custom_emoji_html: "%{name} engedélyezte a %{target} emodzsit" + enable_sign_in_token_auth_user_html: "%{name} engedélyezte a tokenes e-mail hitelesítést %{target} felhasználóra" enable_user_html: "%{name} engedélyezte %{target} felhasználó bejelentkezését" memorialize_account_html: "%{name} emléket állított %{target} felhasználónak" promote_user_html: "%{name} előléptette %{target} felhasználót" @@ -363,32 +373,28 @@ hu: updated_msg: Emodzsi sikeresen frissítve! upload: Feltöltés dashboard: - authorized_fetch_mode: Áttöltő üzemmód engedélyezve - backlog: hátralévő feladatok - config: Beállítások - feature_deletions: Fióktörlések - feature_invites: Meghívó linkek - feature_profile_directory: Profil adatbázis - feature_registrations: Regisztráció - feature_relay: Föderációs relé - feature_timeline_preview: Idővonal betekintő - features: Funkciók - hidden_service: Föderáció rejtett szolgáltatásokkal - open_reports: nyitott bejelentések - pending_tags: hashtag engedélyezésre vár - pending_users: felhasználó engedélyezésre vár - recent_users: Legutóbbi felhasználók - search: Keresés teljes szövegben - single_user_mode: Egyfelhasználós mód + active_users: aktív felhasználó + interactions: interakció + media_storage: Médiatároló + new_users: új felhasználó + opened_reports: megnyitott bejelentés + pending_reports_html: + one: "1 függőben lévő bejelentés" + other: "%{count} függőben lévő bejelentés" + pending_tags_html: + one: "1 függőben lévő hashtag" + other: "%{count} függőben lévő hashtag" + pending_users_html: + one: "1 függőben lévő felhasználó" + other: "%{count} függőben lévő felhasználó" + resolved_reports: megoldott bejelentés software: Szoftver + sources: Regisztrációs források space: Tárhely használat title: Műszerfal - total_users: felhasználó összesen - trends: Trendek - week_interactions: interakció ezen a héten - week_users_active: aktív ezen a héten - week_users_new: felhasználó ezen a héten - whitelist_mode: Engedélyező-lista mód + top_languages: Legaktívabb nyelvek + top_servers: Legaktívabb szerverek + website: Weboldal domain_allows: add_new: Domain engedélyezése created_msg: A domain rákerült az engedélyező-listára @@ -571,6 +577,7 @@ hu: resolved: Megoldott resolved_msg: A bejelentést sikeresen megoldottuk! status: Állapot + target_origin: A jelentett fiók eredete title: Bejelentések unassign: Hozzárendelés törlése unresolved: Megoldatlan @@ -578,7 +585,7 @@ hu: rules: add_new: Szabály hozzáadása delete: Törlés - description_html: Bár a többség azt állítja, hogy elolvasták és egyetértenek a felhasználói feltételekkel, általában ez nem teljesül, amíg egy probléma elő nem jön. Tedd könnyebbé a szervered szabályinak áttekintését azzal, hogy pontokba foglalod azt egy listába. Próbáld meg a különálló szabályokat megtartani rövidnek, egyszerűnek, de próbáld meg azt is, hogy nem darabolod fel őket sok különálló kis pontra. + description_html: Bár a többség azt állítja, hogy elolvasták és egyetértenek a felhasználói feltételekkel, általában ez nem teljesül, amíg egy probléma elő nem jön. Tedd könnyebbé a szervered szabályainak áttekintését azzal, hogy pontokba foglalod azt egy listába. Próbáld meg a különálló szabályokat megtartani rövidnek, egyszerűnek. Próbáld meg azt is, hogy nem darabolod fel őket sok különálló kis pontra. edit: Szabály szerkesztése empty: Nincsenek még szerver szabályok definiálva. title: Szerverszabályzat @@ -1006,6 +1013,17 @@ hu: lists: errors: limit: Elérted a hozzáadható listák maximális számát + login_activities: + authentication_methods: + otp: kétlépcsős azonosító alkalmazás + password: jelszó + sign_in_token: e-mail biztonsági kód + webauthn: biztonsági kulcsok + description_html: Ha olyan aktivitást látsz, melyet nem ismersz fel, fontold meg, hogy megváltoztatod a jelszavad és engedélyezed a kétlépcsős hitelesítést. + empty: Nem érhető el hitelesítési történet + failed_sign_in_html: Bejelentkezés meghiúsult ezzel %{method} innen %{ip} (%{browser}) + successful_sign_in_html: Sikeres bejelentkezés ezzel %{method} innen %{ip} (%{browser}) + title: Hitelesítési történet media_attachments: validations: images_and_video: Nem csatolhatsz videót olyan bejegyzéshez, amelyhez már csatoltál képet @@ -1212,6 +1230,7 @@ hu: revoke: Visszavonás revoke_success: Munkamenet sikeresen visszavonva title: Munkamenetek + view_authentication_history: Fiókod hitelesítési történetének megtekintése settings: account: Fiók account_settings: Fiók beállítások @@ -1232,6 +1251,7 @@ hu: preferences: Beállítások profile: Profil relationships: Követések és követők + statuses_cleanup: Bejegyzések automatikus törlése two_factor_authentication: Kétlépcsős hitelesítés webauthn_authentication: Biztonsági kulcsok statuses: @@ -1283,6 +1303,40 @@ hu: public_long: Bárki láthatja unlisted: Listázatlan unlisted_long: Mindenki látja, de a nyilvános idővonalakon nem jelenik meg + statuses_cleanup: + enabled: Régi bejegyzések automatikus törlése + enabled_hint: Automatikusan törli a bejegyzéseidet, ahogy azok elérik a megadott korhatárt, kivéve azokat, melyek illeszkednek valamely alábbi kivételre + exceptions: Kivételek + explanation: Mivel a bejegyzések törlése drága művelet, ezt időben elnyújtva tesszük meg, amikor a szerver éppen nem elfoglalt. Ezért lehetséges, hogy a bejegyzéseidet valamivel később töröljük, mint ahogy azok elérik a korhatárukat. + ignore_favs: Kedvencek kihagyása + ignore_reblogs: Megtolások kihagyása + interaction_exceptions: Interakció alapú kivételek + interaction_exceptions_explanation: Nincs arra garancia, hogy olyan bejegyzések törlésre kerüljenek, melyek épp a megadott kedvencnek jelölési vagy megtolási határ alatt vannak, de régebben e fölött is jártak már. + keep_direct: Közvetlen üzenetek megtartása + keep_direct_hint: Nem törli egyetlen közvetlen üzenetedet sem + keep_media: Médiacsatolmánnyal ellátott bejegyzések megtartása + keep_media_hint: Egyetlen bejegyzésedet sem törli, melyeknek van médiacsatolmánya + keep_pinned: Kitűzött bejegyzések megtartása + keep_pinned_hint: Egyetlen kitűzött bejegyzésedet sem törli + keep_polls: Szavazások megtartása + keep_polls_hint: Egyetlen szavazásodat sem törli + keep_self_bookmark: Általad könyvjelzőzött bejegyzések megtartása + keep_self_bookmark_hint: Egyetlen olyan bejegyzésedet sem törli, melyet könyvjelzővel láttál el + keep_self_fav: Kedvenc bejegyzések megtartása + keep_self_fav_hint: Nem törli azon bejegyzéseidet, melyeket kedvencnek jelöltél + min_age: + '1209600': 2 hét + '15778476': 6 hónap + '2629746': 1 hónap + '31556952': 1 év + '5259492': 2 hónap + '63113904': 2 év + '7889238': 3 hónap + min_age_label: Korhatár + min_favs: Bejegyzések megtartása, melyeket többször jelöltek kedvencnek, mint + min_favs_hint: Nem törli egyetlen olyan bejegyzésedet sem, melyeket ennél többször jelöltek kedvencnek. Hagyd üresen, hogy a kedvencnek jelölések számától függetlenül töröljük őket + min_reblogs: Bejegyzések megtartása, melyeket többször toltak meg, mint + min_reblogs_hint: Egyetlen olyan bejegyzésedet sem törli, melyet ennél többször toltak meg. Hagyd üresen, hogy a megtolások számától függetlenül töröljük a bejegyzéseket stream_entries: pinned: Kitűzött bejegyzés reblogged: megtolta diff --git a/config/locales/hy.yml b/config/locales/hy.yml index fb694709c..fb9df0156 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -1,7 +1,7 @@ --- hy: about: - about_hashtag_html: Սրանք #%{hashtag} հեշթեգով հանրային թթերն են։ Կարող եք փոխգործակցել դրանց հետ եթե ունեք որեւէ հաշիու դաշտեզերքում։ + about_hashtag_html: Սրանք #%{hashtag} հեշթեգով հանրային հրապարակումներն են։ Կարող էք փոխգործակցել դրանց հետ եթե ունէք որեւէ հաշիւ դաշտեզերքում։ about_mastodon_html: Ապագայի սոցցանցը։ Ոչ մի գովազդ, ոչ մի կորպորատիվ վերահսկողութիւն, էթիկական դիզայն, եւ ապակենտրոնացում։ Մաստադոնում դու ես քո տուեալների տէրը։ about_this: Մեր մասին active_count_after: ակտիվ @@ -18,15 +18,15 @@ hy: contact_unavailable: Ոչինչ չկա discover_users: Գտնել օգտատերներ documentation: Փաստաթղթեր - federation_hint_html: "%{instance} հանգոյցում հաշիւ բացելով կարող ես հետեւել այլ մարդկանց Մաստադոնի ցանկացած հանգոյցից և ոչ միայն։" + federation_hint_html: "«%{instance}»-ում հաշիւ բացելով դու կը կարողանաք հետեւել մարդկանց Մաստադոնի ցանկացած հանգոյցից և ոչ միայն։" get_apps: Փորձեք բջջային հավելվածը hosted_on: Մաստոդոնը տեղակայուած է %{domain}ում instance_actor_flash: "Այս հաշիւ վիրտուալ դերասան է, օգտագործուում է սպասարկիչը, այլ ոչ անհատ օգտատիրոջը ներկայացնելու, համար։ Օգտագործուում է ֆեդերացիայի նպատակով, ու չպէտք է արգելափակուի, եթէ չէք ցանկանում արգելափակել ողջ հանգոյցը, որի դէպքում պէտք է օգտագործէք տիրոյթի արգելափակումը։ \n" learn_more: Իմանալ ավելին privacy_policy: Գաղտնիության քաղաքականություն - rules: Սերվերի կանոնները - rules_html: Ներքևում կանոնների ամփոփագիր է, որին պետք է հետևեք, եթե ցանկանում եք այս սերվերում ունենան Mastodon-ի հաշիվ - see_whats_happening: Տես ինչ ա կատարվում + rules: Սերուերի կանոնները + rules_html: Այս սերուերում հաշիւ ունենալու համար անհրաժեշտ է պահպանել ստորեւ նշուած կանոնները։ + see_whats_happening: Տես ինչ կը կատարուի server_stats: Սերվերի վիճակը․ source_code: Ելատեքստ status_count_after: @@ -62,7 +62,7 @@ hy: following: Հետևում եք instance_actor_flash: Այս հաշիւը վիրտուալ դերասան է, որը ներկայացնում է հանգոյցը, եւ ոչ որեւէ անհատ օգտատիրոջ։ Այն օգտագործուում է ֆեդերացիայի նպատակներով եւ չպէտք է կասեցուի։ joined: Միացել են %{date} - last_active: վերջին թութը + last_active: վերջին այցը link_verified_on: Սոյն յղման տիրապետումը ստուգուած է՝ %{date}֊ին media: Մեդիա moved_html: "%{name} տեղափոխուել է %{new_profile_link}" @@ -74,10 +74,10 @@ hy: pin_errors: following: Դու պէտք է հետեւես մարդուն, որին ցանկանում ես խրախուսել posts: - one: Թութ - other: Թութերից - posts_tab_heading: Թթեր - posts_with_replies: Թթեր եւ պատասխաններ + one: Գրառում + other: Գրառումներ + posts_tab_heading: Գրառումներ + posts_with_replies: Գրառումներ եւ պատասխաններ roles: admin: Ադմինիստրատոր bot: Բոտ @@ -111,7 +111,7 @@ hy: title: Փոխել էլ․ փոստը %{username}ի համար confirm: Հաստատել confirmed: Հաստատված է - confirming: Հաստատում + confirming: Հաստատման սպասող delete: Ջնջել տվյալները deleted: Ջնջված է demote: Աստիճանազրկել @@ -189,6 +189,10 @@ hy: search: Որոնել search_same_email_domain: Այլ օգտատէրեր նոյն էլ․ փոստի դոմէյնով search_same_ip: Այլ օգտատէրեր նոյն IP֊ով + security_measures: + only_password: Միայն ծածկագիր + password_and_2fa: Ծածկագիր եւ 2FA + password_and_sign_in_token: ծածկագիր եւ էլ. նամակով բանալի sensitive: Զգայուն sensitized: նշուեց որպէս դիւրազգաց shared_inbox_url: Ընդհանուր մուտքային URL @@ -272,10 +276,12 @@ hy: new: create: Ստեղծել յայտարարութիւն title: Նոր յայտարարութիւն + publish: Հրապարակել published_msg: Յայտարարութիւնը բարեյաջող հրապարակուեց scheduled_for: Պլանաւորուած է %{time}ին scheduled_msg: Յայտարարութիւնը նախապատրաստուեց հրապարակման title: Յայտարարութիւններ + unpublish: Ապահրապարակել unpublished_msg: Յայտարարութիւնը բարեյաջող ապահրապարակուեց updated_msg: Յայտարարութիւնը բարեյաջող թարմացուեց custom_emojis: @@ -312,31 +318,9 @@ hy: updated_msg: Էմոջին թարմացուեց upload: Վերբեռնել dashboard: - authorized_fetch_mode: Անվտանգ եղանակ - config: Կարգաւորում - feature_deletions: Հաշուի հեռացումներ - feature_invites: Հրաւէրի յղումներ - feature_profile_directory: Օգտատիրոջ մատեան - feature_registrations: Գրանցումներ - feature_relay: Ֆեդերացիայի շերտ - feature_timeline_preview: Հոսքի նախադիտում - features: Յատկանիշներ - hidden_service: Ֆեդերացիա թաքնուած ծառայութիւնների հետ - open_reports: բաց բողոքներ - pending_tags: պիտակներն սպասում են վերանայման - pending_users: օգտատէրերն սպասում են վերանայման - recent_users: Վերջին օգտատէրերը - search: Տեքստային որոնում - single_user_mode: Մէկ օգտատիրոջ ռեժիմ software: Ծրագրային ապահովում space: Տարածքի օգտագործում title: Գործիքների վահանակ - total_users: ընդհանուր օգտատէրեր - trends: Թրենդներ - week_interactions: շաբաթուայ գործողութիւններ - week_users_active: շաբաթուայ ակտիւութիւն - week_users_new: շաբաթուայ օգտատէրեր - whitelist_mode: Սահմանափակ ֆեդերացիայի ռեժիմ domain_allows: add_new: Թոյլատրել ֆեդերացիա տիրոյթի հետ created_msg: Տիրոյթը յաջողութեամբ թոյլատրուեց ֆեդերացուելու @@ -380,8 +364,18 @@ hy: create: Ավելացնել դոմեն title: Արգելափակել էլ․ փոստի նոր տիրոյթ title: էլ․ փոստի արգելափակուած տիրոյթներ + follow_recommendations: + language: Լեզուի համար + status: Կարգավիճակ instances: + back_to_all: Բոլորը + back_to_limited: Սահամանփակ + back_to_warning: Զգուշացում by_domain: Դոմեն + delivery: + all: Բոլորը + unavailable: Անհասանելի է + warning: Զգուշացում empty: Դոմեյնները չեն գտնուել known_accounts: one: "%{count} յայտնի հաշիւ" @@ -464,6 +458,12 @@ hy: unassign: Չնշանակել unresolved: Չլուծուած updated_at: Թարմացուած + rules: + add_new: Աւելացնել կանոն + delete: Ջնջել + edit: Խմբագրել կանոնը + empty: Սերուերի կանոնները դեռեւս սահմանուած չեն։ + title: Սերուերի կանոնները settings: contact_information: email: Գործնական էլփոստ @@ -504,6 +504,7 @@ hy: title: Կայքի հակիրճ նկարագրութիւն site_terms: desc_html: Դու կարող ես գրել քո սեփական գաղտնիութեան քաղաքականութիւնը, օգտագործման պայմանները եւ այլ կանոններ։ Կարող ես օգտագործել HTML թեգեր + title: Սեփական օգտագործման կանոնները site_title: Սպասարկչի անուն thumbnail: title: Հանգոյցի նկարը @@ -517,6 +518,7 @@ hy: back_to_account: Վերադառնալ անձնական էջ batch: delete: Ջնջել + nsfw_off: Նշել որպէս ոչ դիւրազգաց nsfw_on: Նշել որպէս դիւրազգաց deleted: Ջնջված է failed_to_execute: Կատարումը ձախողուեց @@ -554,20 +556,25 @@ hy: guide_link_text: Աջակցել կարող են բոլորը։ sensitive_content: Զգայուն բովանդակութիւն application_mailer: + notification_preferences: Փոխել փոստային կարգաւորումները + salutation: "%{name}" view: Նայել․ view_profile: Նայել անձնական էջը view_status: Նայել գրառումը applications: invalid_url: Տրամադրուած URL անվաւեր է + regenerate_token: Ստեղծել նոր հասանելիութեան կտրոն your_token: Քո մուտքի բանալին auth: apply_for_account: Հրաւէրի հարցում change_password: Գաղտնաբառ - checkbox_agreement_html: Ես համաձայն եմ սպասարկչի կայանքներին և ծառայությունների պայմաններին + checkbox_agreement_html: Ես համաձայն եմ սպասարկիչի կանոններին և ծառայութեան պայմաններին checkbox_agreement_without_rules_html: Ես համաձայն եմ ծառայությունների պայմաններին delete_account: Ջնջել հաշիվը description: prefix_sign_up: Գրանցուի՛ր Մաստոդոնում հենց այսօր + didnt_get_confirmation: Չե՞ս ստացել հաստատման ուղեցոյց։ + dont_have_your_security_key: Չունե՞ս անվտանգութեան բանալի։ forgot_password: Մոռացե՞լ ես գաղտնաբառդ login: Մտնել logout: Դուրս գալ @@ -583,8 +590,12 @@ hy: status: account_status: Հաշուի կարգավիճակ pending: Դիմումը պէտք է քննուի մեր անձնակազմի կողմից, ինչը կարող է մի փոքր ժամանակ խլել։ Դիմումի հաստատուելու դէպքում, կտեղեկացնենք նամակով։ + trouble_logging_in: Մուտք գործելու խնդիրնե՞ր կան։ authorize_follow: + already_following: Դու արդէն հետեւում ես այս հաշուին + already_requested: Դու արդէն ուղարկել ես հետեւմանն յայտ այս հաշուին follow: Հետևել + follow_request: Դու ուղարկել ես հետեւելու հայց՝ following: Յաջողութի՜ւն։ Դու այժմ հետեւում ես․ post_follow: close: Կամ, կարող ես պարզապէս փակել այս պատուհանը։ @@ -601,6 +612,7 @@ hy: invalid_signature: անվաւեր Ed25519 բանալի date: formats: + default: "%b %d, %Y" with_month_name: "%d %B %Y" datetime: distance_in_words: @@ -619,11 +631,15 @@ hy: deletes: challenge_not_passed: Մուտքագրուած տեղեկութիւնը ստոյգ չէ confirm_password: Նոյնականացման համար մուտքագրիր ծածկագիրդ + confirm_username: Մուտքագրիր օգտանունդ գործողութիւնը հաստատելու համար proceed: Ջնջել հաշիվը success_msg: Հաշիւդ բարեյաջող ջնջուեց + warning: + username_available: Քո օգտանունը կրկին հասանելի կը դառնայ directories: directory: Հաշուի մատեան - explore_mastodon: Բացայայտել %{title} + explanation: Բացայայտիր մարդկանց ըստ նրանց հետաքրքրութիւնների + explore_mastodon: Ուսումնասիրիր «%{title}»-ը domain_validator: invalid_domain: անվաւէր տիրոյթի անուն errors: @@ -665,6 +681,7 @@ hy: title: Խմբագրել զտիչը index: delete: Ջնջել + empty: Դու ֆիլտրեր չունես։ title: Ֆիլտրեր new: title: Ավելացնել ֆիլտր @@ -687,7 +704,7 @@ hy: i_am_html: Ես %{username}ն եմ %{service}ում։ identity: Ինքնութիւն inactive: Ոչ ակտիւ - publicize_checkbox: Թթել սա․ + publicize_checkbox: Հրապարակել սա՝ publicize_toot: 'Ապացուցուա՜ծ է․ Ես%{username} եմ %{service}ում․ %{url} ' remove: Հաշուից հեռացնել ապացոյցը removed: Ապացոյցը բարեյաջող հեռացուեց հաշուից @@ -704,6 +721,7 @@ hy: bookmarks: Էջանիշեր domain_blocking: Տիրոյթի արգելափակումների ցուցակ following: Հետեւումների ցանկ + muting: Լռեցման ցանկ upload: Վերբեռնել invites: delete: Ապաակտիւացնել @@ -717,6 +735,7 @@ hy: '86400': 1 օր expires_in_prompt: Երբեք generate: Գեներացնել հրաւէրի յղում + invited_by: Ձեզ հրաւիրել է՝ max_uses: one: "%{count} կիրառում" other: "%{count} կիրառում" @@ -725,34 +744,57 @@ hy: expires_at: Սպառւում է uses: Կիրառում title: Հրաւիրել մարդկանց + login_activities: + authentication_methods: + otp: երկքայլ նոյնականացման յաւելուած + password: գաղտնաբառ media_attachments: validations: too_many: 4-ից աւել ֆայլ չի կարող կցուել migrations: acct: Տեղափոխել դեպի + cancel: Չեղարկել վերահասցեաորումը errors: + move_to_self: չի կարող լինել ներկայիս հաշիւը not_found: չգտնուեց past_migrations: Նախոդ միգրացիաները proceed_with_move: Տեղափոխել հետեւորդներին redirecting_to: Քո հաշիւը վերահասցեաորում է %{acct}-ին warning: followers: Այս քայլով քո բոլոր հետեւորդներին այս հաշուից կը տեղափոխես դէպի նորը + only_redirect_html: Որպէս այլընտրանք, կարող ես ուղղակի վերահասցէաւորել քո հաշիւը + other_data: Մնացեալ տուեալները ինքնուրոյն չեն փոխադրուի moderation: title: Մոդերացիա notification_mailer: digest: + action: Դիտել բոլոր ծանուցումները title: Երբ բացակայ էիր... favourite: + body: Քո գրառումը հաւանել է %{name}-ը։ + subject: "%{name} հաւանեց գրառումդ" title: Նոր հաւանում follow: body: "%{name}ը հետեւում է քեզ!" subject: "%{name}ը հետեւում է քեզ" title: Նոր հետևորդներ follow_request: + action: Կառավարել հետեւելու հայցերը + subject: "%{name} ցանկանում է հետեւել ձեզ" title: Նոր հետեւելու հայցեր mention: action: Պատասխանել + body: "%{name} յիշատակել է ձեզ գրառման մէջ՝" + subject: Ձեզ յիշատակել է %{name} + title: Նոր յիշատակում + reblog: + body: Քո գրառումը տարածել է %{name}-ը։ + subject: "%{name} տարածեց գրառումդ" + title: Նոր տարածում + status: + subject: "%{name}-ը հենց նոր գրառում արեց" notifications: + email_events_hint: Ընտրիր իրադարձութիւնները, որոնց վերաբերեալ ցանկանում ես ստանալ ծանուցումներ․ other_settings: Ծանուցումների այլ կարգաւորումներ number: human: @@ -765,6 +807,8 @@ hy: thousand: Հազ trillion: Տրլ otp_authentication: + code_hint: Մուտքագրիր քո նոյնականացման յաւելուածով գեներացուած կոդը՝ հաստատման համար + description_html: Եթէ միացնես 2F նոյնականացումը՝ օգտագործելով նոյնականացնող յաւելուած, մուտք գործելիս կը պահանջուի հեռախօս, որով կը ստեղծես մուտքագրման կտրոններ։ enable: Միացնել setup: Կարգաւորել pagination: @@ -774,14 +818,23 @@ hy: prev: Նախորդ polls: errors: + already_voted: Դու արդէն մասնակցել ես այս հարցմանը + duplicate_options: պարունակում է կրկնուող ընտրանքներ duration_too_short: շատ կարճ է + expired: Հարցումն արդէն աւարտուել է + too_few_options: ընտրանքները պէտք է լինեն մէկից աւել + too_many_options: չի կարող պարունակել աւելի քան %{max} ընտրանք preferences: other: Այլ posting_defaults: Կանխադիր կարգաւորումներ public_timelines: Հանրային հոսք + reactions: + errors: + unrecognized_emoji: ճանաչուած էմոջի չէ relationships: activity: Հաշուի ակտիւութիւնը dormant: Չգօրծող + follow_selected_followers: Հետեւել նշուած հետեւորդներին followers: Հետեւորդներ following: Հետեւում ես invited: Հրաւիրուած է @@ -793,25 +846,57 @@ hy: relationship: Կապ remove_selected_domains: Հեռացնել բոլոր հետեւորդներին նշուած դոմեյններից remove_selected_followers: Հեռացնել նշուած հետեւորդներին + remove_selected_follows: Ապահետեւել նշուած օգտատէրերին status: Հաշուի կարգավիճակ + remote_follow: + acct: Մուտքագրիր քո օգտանուն@տիրոյթ, որի անունից ցանկանում ես գործել + prompt: Դու պատրաստուում ես հետևել՝ scheduled_statuses: too_soon: Նախադրուած ամսաթիւը պէտք է լինի ապագայում sessions: - activity: Վերջին թութը + activity: Վերջին Ակտիւութիւնը browser: Դիտարկիչ browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox generic: Անհայտ դիտարկիչ + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Nokia S40 Ovi Browser + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UCBrowser + weibo: Weibo + current_session: Ընթացիկ սեսսիա description: "%{browser}, %{platform}" + ip: IP platforms: + adobe_air: Adobe Air android: Անդրոիդ + blackberry: Blackberry + chrome_os: Chrome OS + firefox_os: Firefox OS + ios: iOS linux: Լինուքս + mac: macOS other: անհայտ հարթակ + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone revoke: Չեղարկել title: Սեսսիա settings: account: Հաշիվ account_settings: Հաշուի կարգաւորումներ appearance: Տեսք + authorized_apps: Լիազօրուած յաւելուածներ back: Ետ գնալ մաստադոն delete: Հաշուի ջնջում development: Ծրագրավորում @@ -839,6 +924,7 @@ hy: video: one: "%{count} վիդեո" other: "%{count} վիդեո" + content_warning: Նախազգուշացում։ %{warning} language_detection: Ինքնուրոյն ճանաչել լեզուն open_in_web: Բացել վէբում over_character_limit: "%{max} նիշի սահմանը գերազանցուած է" @@ -851,17 +937,31 @@ hy: other: "%{count} ձայներ" vote: Քուէարկել show_more: Աւելին + show_newer: Ցուցադրել նորերը + show_older: Ցուցադրել հները show_thread: Բացել շղթան sign_in_to_participate: Մուտք գործէք՝ զրոյցին միանալու համար + title: '%{name}: "%{quote}"' visibilities: + direct: Հասցէագրուած private: Միայն հետեւողներին private_long: Հասանելի միայն հետեւորդներին public: Հրապարակային public_long: Տեսանելի բոլորին unlisted: Ծածուկ unlisted_long: Տեսանելի է բոլորին, բայց չի յայտնւում հանրային հոսքերում + statuses_cleanup: + exceptions: Բացառություններ + min_age: + '1209600': 2 շաբաթ + '15778476': 6 ամիս + '2629746': 1 ամիս + '31556952': 1 տարի + '5259492': 2 ամիս + '63113904': 2 տարի + '7889238': 3 ամիս stream_entries: - pinned: Ամրացուած թութ + pinned: Ամրացուած գրառում reblogged: տարածուած sensitive_content: Կասկածելի բովանդակութիւն terms: @@ -871,29 +971,29 @@ hy:

    Ինչ անձնական տեղեկութիւններ ենք մենք հաւաքում

      -
    • Առաջնային հաւաքվող տւալներ: Եթե դուք գրանցվեք էք այս սերւերում, ձեզանից կարող են պահանջել մուտքագրել օգտուողի անուն, էլփոստի հասցէ և գաղտնաբառ։ Դուք կարող էք նաև մուտքագրել հավելյալ տվյալներ, ինչպիսիք են օրինակ՝ ցուցադրուող անունը եւ կենսագրութիւնը, նաև վերբեռնել գլխանկար և ետնանակար։ Օգտուողի անունը, կենսագրութիւնը, գլխանկարը և ետնանկարը համարվում են հանրային տեղեկատուութիւն։
    • -
    • Գրառումները, հետեւումները և այլ հանրային տեղեկատուութիւնը։ : Ձեր հետևած մարդկանց ցուցակը ներկայացուած է հանրայնորեն, նոյնը ճշմարիտ է նաև հետևորդների համար։ Երբ դուք ուղարկում եք հաղորդագրութիւն, հաղորդագրութեան ուղարկման ամսաթիւը և ժամանակը, ինչպէս նաև հավելվածը որից այն ուղարկուել է, պահւում է։ Հաղորդագրութիւնները կարող են պարունակել մեդիա կցումներ, ինչպիսիք են նկարները և տեսանիւթերը։ Հանրային և ծածուկ գրառումները հանրայնորեն հասանելի են։ Անձնական էջում կցուած գրառումները նույնպես հանրայնորեն հասանելի տեղեկատուութիւն է։ Ձեր գրառումները ուղարկւում են ձեր հետևորդներին, ինչը նշանակում է, որ որոշ դէպքերում դրանք ուղարկւում են այլ սերվերներ և պատճեները պահւում են այնտեղ։ Երբ դուք ջնջում էք ձեր գրառումները, սա նույնպես ուղարկւում է ձեր հետևորդներին։ Մեկ այլ գրառման տարածումը կամ հաւանումը միշտ հանրային է։
    • -
    • Հասցէագրած և միայն հետևորդներին գրառումները: Բոլոր գրառումները պահւում և մշակւում են սերվերի վրայ։ Միայն հետևորդներին գրառումները ուղարկւում են միայն ձեր հետևորդներին և այն օգտատերերին ովքեր նշուած են գրառման մէջ, իսկ հասցէագրեցուած գրառումները ուղարկւում են միայն դրանում նշուած օգտատերերին։ Որոշ դէպքերում դա նշանակում է, որ այդ գրառումները ուղարկւում են այլ սերվերներ և պատճեները պահւում այնտեղ։ Մենք բարեխիղճ ջանք են գործադրում սահմանափակելու այդ գրառումների մուտքը միայն լիազօրուած անձանց, բայց այլ սերվերներ կարող են ձախողել դրա կատարումը։ Այդ պատճառով կարևոր է վերանայել այն սերվերները որին ձեր հետևորդները պատկանում են։ Դուք կարող էք կարգաւորումներից միացնել նոր հետևորդներին ինքնուրոյն ընդունելու և մերժելու ընտրանքը։ Խնդրում ենք յիշել, որ սերվերի գործարկուն և ցանկացած ստացող սերվեր կարող է դիտել այդ տեսակ հաղորդագրութիւնները, իսկ ստացողները կարող են էկրանահանել, պատճէնել և այլ կերպ վերատարածել դրանք։Մաստադոնով մի կիսվեք որևէ վտանգաւոր տեղեկատուութեամբ։
    • -
    • IP հասցէներ և այլ մետատվյալներ: Երբ դուք մուտք էք գործում, մենք պահում են ձեր մուտք գործելու IP հասցէն, ինչպէս նաև զննարկիչի տեսակը։ Կարգավորումենում հասանելի է մուտքի բոլոր սեսսիաների վերանայման և մարման հնարաւորութիւնը։ Վերջին օգտագործուած IP հասցէն պահւում է մինչև 12 ամիս ժամկէտով։ Մենք կարող ենք նաև պահել սերվերի մատեանի նիշքերը, որը պարունակում է սերվերին արուած իւրաքանչիւր հարցման IP հասցէն։
    • +
    • Առաջնային հաւաքուող տուեալներ: Եթե դուք գրանցուէք էք այս սերուերում, ձեզանից կարող են պահանջել մուտքագրել օգտուողի անուն, էլ-փոստի հասցէ և գաղտնաբառ։ Դուք կարող էք նաև մուտքագրել յաւելեալ տուեալներ, ինչպիսիք են օրինակ՝ ցուցադրուող անունը եւ կենսագրութիւնը, նաև վերբեռնել գլխանկար և ետնանակար։ Օգտուողի անունը, կենսագրութիւնը, գլխանկարը և ետնանկարը համարվում են հանրային տեղեկատուութիւն։
    • +
    • Գրառումները, հետեւումները և այլ հանրային տեղեկատուութիւնը։ Ձեր հետևած մարդկանց ցուցակը ներկայացուած է հանրայնօրէն, նոյնը ճշմարիտ է նաև հետևորդների համար։ Երբ դուք ուղարկում էք հաղորդագրութիւն, հաղորդագրութեան ուղարկման ամսաթիւը և ժամանակը, ինչպէս նաև յաւելուածը որից այն ուղարկուել է, պահւում է։ Հաղորդագրութիւնները կարող են պարունակել մեդիա կցումներ, ինչպիսիք են նկարները և տեսանիւթերը։ Հանրային և ծածուկ գրառումները հանրայնօրէն հասանելի են։ Անձնական էջում կցուած գրառումները նոյնպես հանրայնօրէն հասանելի տեղեկատուութիւն է։ Ձեր գրառումները ուղարկւում են ձեր հետևորդներին, ինչը նշանակում է, որ որոշ դէպքերում դրանք ուղարկւում են այլ սերուերներ և պատճէները պահւում են այնտեղ։ Երբ դուք ջնջում էք ձեր գրառումները, սա նոյնպէս ուղարկւում է ձեր հետևորդներին։ Մէկ այլ գրառման տարածումը կամ հաւանումը միշտ հանրային է։
    • +
    • Հասցէագրած և միայն հետևորդներին գրառումները: Բոլոր գրառումները պահւում և մշակւում են սերուերի վրայ։ Միայն հետևորդներին գրառումները ուղարկւում են միայն ձեր հետևորդներին և այն օգտատէրերին ովքեր նշուած են գրառման մէջ, իսկ հասցէագրեցուած գրառումները ուղարկւում են միայն դրանում նշուած օգտատէրերին։ Որոշ դէպքերում դա նշանակում է, որ այդ գրառումները ուղարկւում են այլ սերուերներ և պատճէները պահւում այնտեղ։ Մենք բարեխիղճ ջանք են գործադրում սահմանափակելու այդ գրառումների մուտքը միայն լիազօրուած անձանց, բայց այլ սերուերներ կարող են ձախողել դրա կատարումը։ Այդ պատճառով կարևոր է վերանայել այն սերուերները որին ձեր հետևորդները պատկանում են։ Դուք կարող էք կարգաւորումներից միացնել նոր հետևորդներին ինքնուրոյն ընդունելու և մերժելու ընտրանքը։ Խնդրում ենք յիշել, որ սերուերի գործարկուն և ցանկացած ստացող սերուեր կարող է դիտել այդ տեսակ հաղորդագրութիւնները, իսկ ստացողները կարող են էկրանահանել, պատճէնել և այլ կերպ վերատարածել դրանք։Մաստադոնով մի կիսուէք որևէ վտանգաւոր տեղեկատուութեամբ։
    • +
    • IP հասցէներ և այլ մետատուեալներ: Երբ դուք մուտք էք գործում, մենք պահում են ձեր մուտք գործելու IP հասցէն, ինչպէս նաև զննարկիչի տեսակը։ Կարգաւորումներում հասանելի է մուտքի բոլոր սեսիաների վերանայման և մարման հնարաւորութիւնը։ Վերջին օգտագործուած IP հասցէն պահւում է մինչև 12 ամիս ժամկէտով։ Մենք կարող ենք նաև պահել սերուերի մատեանի նիշքերը, որը պարունակում է սերուերին արուած իւրաքանչիւր հարցման IP հասցէն։

    Ինչպէս ենք օգտագործում ձեր անձնական տեղեկութիւնները

    -

    Ցանկացած տուեալ, որը մենք հաւաքում ենք ձեզնից կարող է օգտագործուել հետևայլ նպատակներով՝

    +

    Ցանկացած տուեալ, որը մենք հաւաքում ենք ձեզնից կարող է օգտագործուել հետեւեալ նպատակներով՝

      -
    • Մատուցելու Մաստադոնի հիմնական գործառութիւնները։ Դուք կարող եք փոխգործակցել այլ մարդկանց բովանդակութեան հետ և տեղադրել ձեր սեփական բովանդակութիւնը միայն մուտք գործելուց յետոյ։ Օրինակ՝ դուք կարող էք հետեւել այլ մարդկանց նրանց համակցուած գրառումները ձեր անձնական հոսքում տեսնելու համար ։
    • -
    • Նպաստելու համայնքի մոդերացիային։ Օրինակ՝ համեմատելու ձեր IP հասցէն այլ արդեն յայտնի հասցէի հետ՝ բացայայտելու արգելափակումից խուսափելու կամ այլ խախտումների դեպքերը ։
    • -
    • Ձեր տրամադրած էլփոստի հասցէն կարող է օգտագործուել ձեզ տեղեկատուութիւն տրամադրելու, այլ մարդկանց՝ ձեր բովանդակութեան հետ փոխգործակցութեան կամ ձեզ հասցէագրած նամակի մասին ծանուցելու, ինչպէս նաև հայցումներին կամ այլ յայտերին ու հարցերին պատասխանելու համար։
    • +
    • Մատուցելու Մաստադոնի հիմնական գործառութիւնները։ Դուք կարող էք փոխգործակցել այլ մարդկանց բովանդակութեան հետ և տեղադրել ձեր սեփական բովանդակութիւնը միայն մուտք գործելուց յետոյ։ Օրինակ՝ դուք կարող էք հետեւել այլ մարդկանց նրանց համակցուած գրառումները ձեր անձնական հոսքում տեսնելու համար ։
    • +
    • Նպաստելու համայնքի մոդերացիային։ Օրինակ՝ համեմատելու ձեր IP հասցէն այլ արդեն յայտնի հասցէի հետ՝ բացայայտելու արգելափակումից խուսափելու կամ այլ խախտումների դէպքերը ։
    • +
    • Ձեր տրամադրած էլ-փոստի հասցէն կարող է օգտագործուել ձեզ տեղեկատուութիւն տրամադրելու, այլ մարդկանց՝ ձեր բովանդակութեան հետ փոխգործակցութեան կամ ձեզ հասցէագրած նամակի մասին ծանուցելու, ինչպէս նաև հայցումներին կամ այլ յայտերին ու հարցերին պատասխանելու համար։

    -

    Ինչպես ենք պաշտպանում ձեր անձնական

    +

    Ինչպէս ենք պաշտպանում ձեր անձնական

    -

    Մենք կիրառում ենք տարբեր անվտանգութեան միջոցների պահպանելու ձեր անձնական տվյալների անվտանգութիւնը, երբ դուք մուտքագրում, ուղարկում կամ դիտում էգ ձեր անձնական տեղեկութիւնները։ Ի թիւս մնացած բաների, ձեր դիտարկչի սեսսիան, ինչպէս նաև ձեր հավելվածի և API միջև տրաֆիկը պաշտպանուած են SSL-ով, իսկ ձեր գաղտնաբառը պատահականացված է միակողմանի ալգորիթմով։ Դուք կարող էք միացնել երկաստիճան ինքնորոշումը, ձեր հաշուի մուտքը աւելի պաշտպանուած դարձնելու համար։

    +

    Մենք կիրառում ենք տարբեր անվտանգութեան միջոցների պահպանելու ձեր անձնական տուեալների անվտանգութիւնը, երբ դուք մուտքագրում, ուղարկում կամ դիտում էգ ձեր անձնական տեղեկութիւնները։ Ի թիւս մնացած բաների, ձեր դիտարկչի սեսիան, ինչպէս նաև ձեր յաւելուածի և API միջև տրաֆիկը պաշտպանուած են SSL-ով, իսկ ձեր գաղտնաբառը պատահականացուած է միակողմանի ալգորիթմով։ Դուք կարող էք միացնել երկաստիճան ինքնորոշումը, ձեր հաշուի մուտքը աւելի պաշտպանուած դարձնելու համար։


    @@ -902,8 +1002,8 @@ hy:

    Մենք գործադրում ենք բարեխիղճ ջանք՝

      -
    • պահպանելու սերվերի մատեանի նիշքերը՝ այս սերվերին արուած բոլոր հարցումների IP հասցէներով, այնքանով որքանով նման նիշքերը պահւում են, ոչ աւել քան 90 օր ժամկէտով։
    • -
    • պահպանելու գրանցուած օգտատերի հաշուի հետ կապակցուած IP հասցէները, ոչ աւել քան 12 ամիս ժամկէտով։
    • +
    • պահպանելու սերուերի մատեանի նիշքերը՝ այս սերուերին արուած բոլոր հարցումների IP հասցէներով, այնքանով որքանով նման նիշքերը պահւում են, ոչ աւել քան 90 օր ժամկէտով։
    • +
    • պահպանելու գրանցուած օգտատէրի հաշուի հետ կապակցուած IP հասցէները, ոչ աւել քան 12 ամիս ժամկէտով։

    Դուք կարող էք ուղարկել հայց ներբեռնելու ձեր բովանդակութեան պատճէն՝ ներառեալ ձեր գրառումները, մեդիա կցումները, գլխանկարը և ետնանկարը։

    @@ -912,7 +1012,7 @@ hy:
    -

    Օգտագործում էք արդյո՞ք թխուկներ

    +

    Օգտագործում էք արդեօ՞ք թխուկներ

    Այո։ Թխուկները փոքր ֆայլեր են որը կայքը կամ նրան ծառայութեան մատուցողը փոխանցում է ձեր համակարգչի կոշտ սկաւառակին դիտարկչի միջոցով (ձեր թոյլատուութիւն)։ Թխուկները հնարաւորութիւն են տալիս կայքին ճանաչելու ձեր դիտարկիչը, և գրանցուած հաշուի դէպքում՝ նոյնացնելու այն ձեր հաշուի հետ։ @@ -922,19 +1022,19 @@ hy:

    Բացայայտում երրորդ կողմերին

    -

    Մենք չենք վաճառում, փոխանակում, կամ այլ կերպ փոխանցում անձնական նոյնացնող տեղեկատուութիւն երրորդ կողմերին։ Սա չի ներառում վստահելի երրորդ կողմերին որոնք օգտնում են կայքի գործարկման, մեր գործունեության ծավալման, կամ ձեզ ծառայելու համար, այնքան ժամանակ որքան այդ երրորդ կողմերը համաձայն են գաղտնի պահել այդ տվյալները։ Մենք կարող ենք նաև հանրայնացնել ձեր տեղեկատուութիւնը երբ հաւատացած ենք որ դրա հանրայնացումը անհրաժեշտ է օրէնքի պահանջների կատարման, կամ կայքի քաղաքականութեան կիրառման համար, կամ պաշտպանելու մեր կամ այլոց իրաւունքները, սեփականութիւնը կամ անվտանգութիւնը։

    +

    Մենք չենք վաճառում, փոխանակում, կամ այլ կերպ փոխանցում անձնական նոյնացնող տեղեկատուութիւն երրորդ կողմերին։ Սա չի ներառում վստահելի երրորդ կողմերին որոնք օգնում են կայքի գործարկման, մեր գործունէութեան ծավալման, կամ ձեզ ծառայելու համար, այնքան ժամանակ որքան այդ երրորդ կողմերը համաձայն են գաղտնի պահել այդ տուեալները։ Մենք կարող ենք նաև հանրայնացնել ձեր տեղեկատուութիւնը երբ հաւատացած ենք որ դրա հանրայնացումը անհրաժեշտ է օրէնքի պահանջների կատարման, կամ կայքի քաղաքականութեան կիրառման համար, կամ պաշտպանելու մեր կամ այլոց իրաւունքները, սեփականութիւնը կամ անվտանգութիւնը։

    -

    Ձեր հանրային բովանդակութիւնը կարող է բեռնուել ցանցի միւս սերվերների կողմից։ Ձեր հանրային և միայն հետևորդներին գրառումները ուղարկւում են այն սերվերներին որտեղ գրանցած են ձեր հետևորդները, և հասցեական հաղորդագրութիւնները ուղարկւում են հասցէատէրերի սերվերներին, այն դէպքում երբ այդ հետևորդները կամ հասցէատէրերը գտնւում են այս սերվերից տարբեր սերվերի վրայ։

    +

    Ձեր հանրային բովանդակութիւնը կարող է բեռնուել ցանցի միւս սերուերների կողմից։ Ձեր հանրային և միայն հետևորդներին գրառումները ուղարկւում են այն սերուերներին որտեղ գրանցած են ձեր հետևորդները, և հասցէական հաղորդագրութիւնները ուղարկւում են հասցէատէրերի սերուերներին, այն դէպքում երբ այդ հետևորդները կամ հասցէատէրերը գտնւում են այս սերուերից տարբեր սերուերի վրայ։

    -

    Երբ դուք թոյլատրում էք հավելվածի օգտագործել ձեր հաշիւը, կախուած թույլտվությունների շրջանակից, այն կարող է մուտք ունենալ ձեր հաշիւ հանրային տեղեկատվությանը, ձեր հետևողների ցանկին, ձեր հետևորդներից ցանկին, ցանկերին, ձեր բոլոր գրառումներին, և ձեր հաւանումներին։ Հավելվածները երբեք չենք կարող մուտք ունենալ ձեր էլփոստի հասցէին կամ գաղտնաբառին։

    +

    Երբ դուք թոյլատրում էք յաւելուածի օգտագործել ձեր հաշիւը, կախուած թոյլտւութիւնների շրջանակից, այն կարող է մուտք ունենալ ձեր հաշիւ հանրային տեղեկատւութեանը, ձեր հետևողների ցանկին, ձեր հետևորդներից ցանկին, ցանկերին, ձեր բոլոր գրառումներին, և ձեր հաւանումներին։ Յաւելուածները երբեք չենք կարող մուտք ունենալ ձեր էլ-փոստի հասցէին կամ գաղտնաբառին։


    Կայքի օգտագործումը երեխաների կողմից

    -

    Եթէ այս սերվերը գտնում է ԵՄ-ում կամ ԵՏԳ-ում. Մեր կայքը, արտադրանքները և ծառայութիւնները նախատեսուած են 16 տարին լրացած անձանց համար: Եթէ ձեր 16 տարեկանը չի լրացել, ապա հետևելով GDPR (General Data Protection Regulation) պահանջներին՝ մի օգտագործէք այս կայքը։

    +

    Եթէ այս սերուերը գտնում է ԵՄ-ում կամ ԵՏԳ-ում. Մեր կայքը, արտադրանքները և ծառայութիւնները նախատեսուած են 16 տարին լրացած անձանց համար: Եթէ ձեր 16 տարեկանը չի լրացել, ապա հետևելով GDPR (General Data Protection Regulation) պահանջներին՝ մի օգտագործէք այս կայքը։

    -

    Եթէ այս սերվերը գտնւում է ԱՄՆ-ում. Մեր կայքը, արտադրանքները և ծառայութիւնները նախատեսուած են 13 տարին լրացած անձանց համար: Եթէ ձեր 16 տարեկանը չի լրացել, ապա հետևելով COPPA (Children's Online Privacy Protection Act) պահանջներին՝ մի օգտագործէք այս կայքը։ +

    Եթէ այս սերուերը գտնւում է ԱՄՆ-ում. Մեր կայքը, արտադրանքները և ծառայութիւնները նախատեսուած են 13 տարին լրացած անձանց համար: Եթէ ձեր 16 տարեկանը չի լրացել, ապա հետևելով COPPA (Children's Online Privacy Protection Act) պահանջներին՝ մի օգտագործէք այս կայքը։

    Այլ երկրների իրաւասութիւն շրջաններում օրէնքի պահանջները կարող են տարբերուել։

    @@ -953,6 +1053,10 @@ hy: contrast: Mastodon (բարձր կոնտրաստով) default: Mastodon (Մուգ) mastodon-light: Mastodon (Լուսավոր) + time: + formats: + default: "%b %d, %Y, %H:%M" + month: "%b %Y" two_factor_authentication: add: Ավելացնել disable: Անջատել @@ -973,20 +1077,26 @@ hy: warning: get_in_touch: Կարող էք կապուել %{instance} հանգոյցի անձնակազմի հետ պատասխանելով այս նամակին։ statuses: Մասնաւորապէս, միայն՝ + subject: + disable: Քո %{acct} հաշիւը սառեցուել է + none: Նախազգուշացուեմ %{acct}-ին title: + disable: Հաշիւը սառեցուած է none: Զգուշացում sensitive: Մեդիաֆայլը պիտակուել է որպէս զգայուն։ + silence: Հաշիւը սահմանափակուած է suspend: Հաշիւը արգելափակուած է welcome: edit_profile_action: Կարգաւորել հաշիւը - final_action: Սկսել թթել - final_step: 'Սկսիր թթե՛լ։ Անգամ առանց հետեւորդների քո հանրային գրառումներ կարող են երևալ ուրիշների մօտ, օրինակ՝ տեղական հոսում կամ հեշթեգերում։ Թէ ցանկանաս, կարող ես յայտնել քո մասին օգտագործելով #եսնորեկեմ հեշթեգը։' + final_action: Սկսել գրել + final_step: 'Սկսիր գրել։ Անգամ առանց հետեւորդների քո հանրային գրառումներ կարող են երևալ ուրիշների մօտ, օրինակ՝ տեղական հոսում կամ հեշթեգերում։ Թէ ցանկանաս, կարող ես յայտնել քո մասին օգտագործելով #եսնորեկեմ հեշթեգը։' review_preferences_action: Փոփոխել կարգաւորումները subject: Բարի գալուստ Մաստոդոն tip_federated_timeline: Դաշնային հոսքում երևում է ամբողջ Մաստոդոնի ցանցը։ Բայց այն ներառում է միայն այն օգտատերերին որոնց բաժանորդագրուած են ձեր հարևաններ, այդ պատճառով այն կարող է լինել ոչ ամբողջական։ tip_following: Դու հետեւում էս քո հանգոյցի ադմին(ներ)ին լռելայն։ Այլ հետաքրքիր անձանց գտնելու համար՝ թերթիր տեղական և դաշնային հոսքերը։ tip_local_timeline: Տեղական հոսքում երևում են %{instance} հանգոյցի օգտատերի գրառումները։ Նրանք քո հանգոյցի հարևաններն են։ tips: Հուշումներ + title: Բարի գալուստ նաւամատոյց, %{name} users: invalid_otp_token: Անվաւեր 2F կոդ invalid_sign_in_token: Անվաւեր անվտանգութեան կոդ @@ -997,4 +1107,5 @@ hy: webauthn_credentials: delete: Ջնջել not_enabled: WebAuthn-ը դեռ միացուած չէ + not_supported: Այս դիտարկիչը չի աջակցում անվտանգութեան բանալիներ registered_on: Գրանցուել է %{date} diff --git a/config/locales/id.yml b/config/locales/id.yml index 31f2ae62f..d3987ceb7 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -113,6 +113,7 @@ id: demote: Turunkan destroyed_msg: Data %{username} masuk antrean untuk dihapus segera disable: Nonaktifkan + disable_sign_in_token_auth: Nonaktifkan otentikasi token email disable_two_factor_authentication: Nonaktifkan 2FA disabled: Dinonaktifkan display_name: Nama @@ -121,6 +122,7 @@ id: email: Email email_status: Status Email enable: Aktifkan + enable_sign_in_token_auth: Aktifkan otentikasi token email enabled: Diaktifkan enabled_msg: Berhasil mencairkan akun %{username} followers: Pengikut @@ -185,6 +187,10 @@ id: search: Cari search_same_email_domain: Pengguna lain dengan domain email yang sama search_same_ip: Pengguna lain dengan IP yang sama + security_measures: + only_password: Hanya kata sandi + password_and_2fa: Kata sandi dan 2FA + password_and_sign_in_token: Kata sandi dan token email sensitive: Sensitif sensitized: ditandai sebagai sensitif shared_inbox_url: URL kotak masuk bersama @@ -236,8 +242,10 @@ id: destroy_unavailable_domain: Hapus Domain yang Tidak Tersedia disable_2fa_user: Nonaktifkan 2FA disable_custom_emoji: Nonaktifkan Emoji Khusus + disable_sign_in_token_auth_user: Nonaktifkan Otentikasi Token Email untuk Pengguna disable_user: Nonaktifkan Pengguna enable_custom_emoji: Aktifkan Emoji Khusus + enable_sign_in_token_auth_user: Aktifkan Otentikasi Token Email untuk Pengguna enable_user: Aktifkan Pengguna memorialize_account: Kenang Akun promote_user: Promosikan Pengguna @@ -279,8 +287,10 @@ id: destroy_unavailable_domain_html: "%{name} melanjutkan pengiriman ke domain %{target}" disable_2fa_user_html: "%{name} mematikan syarat dua faktor utk pengguna %{target}" disable_custom_emoji_html: "%{name} mematikan emoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} menonaktifkan otentikasi token email untuk %{target}" disable_user_html: "%{name} mematikan login untuk pengguna %{target}" enable_custom_emoji_html: "%{name} mengaktifkan emoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} mengaktifkan otentikasi token email untuk %{target}" enable_user_html: "%{name} mengaktifkan login untuk pengguna %{target}" memorialize_account_html: "%{name} mengubah akun %{target} jadi halaman memorial" promote_user_html: "%{name} mempromosikan pengguna %{target}" @@ -355,32 +365,25 @@ id: updated_msg: Emoji berhasil diperbarui! upload: Unggah dashboard: - authorized_fetch_mode: Mode aman - backlog: pekerjaan di-backlog - config: Konfigurasi - feature_deletions: Penghapusan akun - feature_invites: Tautan undangan - feature_profile_directory: Direktori profil - feature_registrations: Registrasi - feature_relay: Relai federasi - feature_timeline_preview: Pratinjau linimasa - features: Fitur - hidden_service: Federasi dengan layanan tersembunyi - open_reports: buka laporan - pending_tags: tagar menunggu ditinjau - pending_users: pengguna menunggu ditinjau - recent_users: Pengguna terbaru - search: Pencarian teks lengkap - single_user_mode: Mode pengguna tunggal + active_users: pengguna aktif + interactions: interaksi + media_storage: Penyimpanan media + new_users: pengguna baru + opened_reports: laporan dibuka + pending_reports_html: + other: "%{count} laporan ditunda" + pending_tags_html: + other: "%{count} tagar ditunda" + pending_users_html: + other: "%{count} pengguna ditunda" + resolved_reports: laporan sudah diselesaikan software: Perangkat lunak + sources: Sumber pendaftaran space: Penggunaan ruang title: Dasbor - total_users: total pengguna - trends: Tren - week_interactions: interaksi minggu ini - week_users_active: aktif minggu ini - week_users_new: pengguna minggu ini - whitelist_mode: Mode daftar putih + top_languages: Bahasa aktif teratas + top_servers: Server aktif teratas + website: Situs web domain_allows: add_new: Daftar putihkan domain created_msg: Domain berhasil masuk daftar putih @@ -558,6 +561,7 @@ id: resolved: Terseleseikan resolved_msg: Laporan berhasil diselesaikan! status: Status + target_origin: Akun asal yang dilaporkan title: Laporan unassign: Bebas Tugas unresolved: Belum Terseleseikan @@ -991,6 +995,17 @@ id: lists: errors: limit: Daftar Anda telah mencapai jumlah maksimum + login_activities: + authentication_methods: + otp: aplikasi otentikasi dua-faktor + password: kata sandi + sign_in_token: kode keamanan email + webauthn: kunci keamanan + description_html: Jika Anda melihat aktivitas tidak dikenal, pertimbangkan untuk mengubah kata sandi dan mengaktifkan otentikasi dua-faktor. + empty: Riwayat otentikasi tidak tersedia + failed_sign_in_html: Upaya gagal masuk dengan %{method} dari %{ip} (%{browser}) + successful_sign_in_html: Berhasil masuk dengan %{method} dari %{ip} (%{browser}) + title: Riwayat otentikasi media_attachments: validations: images_and_video: Tidak bisa melampirkan video pada status yang telah memiliki gambar @@ -1195,6 +1210,7 @@ id: revoke: Cabut izin revoke_success: Sesi berhasil dicabut title: Sesi + view_authentication_history: Lihat riwayat otentikasi akun Anda settings: account: Akun account_settings: Pengaturan akun @@ -1215,6 +1231,7 @@ id: preferences: Pilihan profile: Profil relationships: Ikuti dan pengikut + statuses_cleanup: Hapus kiriman otomatis two_factor_authentication: Autentikasi Two-factor webauthn_authentication: Kunci keamanan statuses: @@ -1260,6 +1277,40 @@ id: public_long: Bisa dilihat semua orang unlisted: Bisa dilihat semua orang, tapi tidak ditampilkan di linimasa publik unlisted_long: Tidak terdaftar di linimasa publik tetapi siapapun dapat melihat + statuses_cleanup: + enabled: Otomatis hapus kiriman lama + enabled_hint: "Otomatis menghapus kiriman Anda saat sudah mencapai batasan usia, kecuali yang cocok \nsesuai di bawah ini" + exceptions: Pengecualian + explanation: Karena menghapus kiriman adalah operasi dengan sumber daya besar, ini akan dilakukan perlahan ketika server tidak sedang sibuk. Karena alasan ini, kiriman akan dihapus setelah mencapai batas waktu. + ignore_favs: Abaikan favorit + ignore_reblogs: Abaikan boost + interaction_exceptions: Pengecualian berdasar interaksi + interaction_exceptions_explanation: Perlu diingat tidak ada jaminan kiriman akan dihapus jika ia di bawah batas favorit atau boost setelah sebelumnya berhasil melewatinya. + keep_direct: Simpan pesan langsung + keep_direct_hint: Tidak mengapus pesan langsung Anda + keep_media: Simpan kiriman dengan lampiran media + keep_media_hint: Tidak menghapus kiriman Anda dengan lampiran media + keep_pinned: Simpan kiriman tersemat + keep_pinned_hint: Tidak menghapus kiriman tersemat Anda + keep_polls: Simpan japat + keep_polls_hint: Tidak menghapus japat Anda + keep_self_bookmark: Simpan kiriman yang Anda markahi + keep_self_bookmark_hint: Tidak menghapus kiriman Anda sendiri jika Anda telah memasukkannya ke markah + keep_self_fav: Simpan kiriman favorit Anda + keep_self_fav_hint: Tidak menghapus kiriman Anda yang Anda favoritkan + min_age: + '1209600': 2 minggu + '15778476': 6 bulan + '2629746': 1 bulan + '31556952': 1 tahun + '5259492': 2 bulan + '63113904': 2 tahun + '7889238': 3 bulan + min_age_label: Batas usia + min_favs: Simpan kiriman favorit lebih dari + min_favs_hint: Tidak menghapus kiriman Anda yang mendapatkan sekian favorit. Kosongkan bila ingin menghapus kiriman tanpa peduli jumlah favoritnya + min_reblogs: Simpan kiriman yang di-boost lebih dari + min_reblogs_hint: Tidak menghapus kiriman Anda yang di-boost lebih dari sekian kali. Kosongkan bila ingin menghapus kiriman tanpa peduli jumlah boost-nya stream_entries: pinned: Toot tersemat reblogged: di-boost-kan diff --git a/config/locales/is.yml b/config/locales/is.yml index 01c87b598..f17977aa9 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -119,6 +119,7 @@ is: demote: Lækka í tign destroyed_msg: Gögn notandans %{username} eru núna í bið eftir að vera endanlega eytt disable: Gera óvirkt + disable_sign_in_token_auth: Gera óvirka auðkenningu með teikni í tölvupósti disable_two_factor_authentication: Gera tveggja-þátta auðkenningu óvirka disabled: Óvirkt display_name: Birtingarnafn @@ -127,6 +128,7 @@ is: email: Tölvupóstfang email_status: Staða tölvupósts enable: Virkja + enable_sign_in_token_auth: Virkja auðkenningu með teikni í tölvupósti enabled: Virkt enabled_msg: Tókst að affrysta aðgang notandans %{username} followers: Fylgjendur @@ -191,6 +193,10 @@ is: search: Leita search_same_email_domain: Aðra notendur með sama tölvupóstlén search_same_ip: Aðrir notendur með sama IP-vistfang + security_measures: + only_password: Aðeins lykilorð + password_and_2fa: Lykilorð og 2-þátta auðkenning + password_and_sign_in_token: Lykilorð og teikn í tölvupósti sensitive: Viðkvæmt sensitized: merkt sem viðkvæmt shared_inbox_url: Slóð á sameiginlegt innhólf @@ -242,8 +248,10 @@ is: destroy_unavailable_domain: Eyða léni sem ekki er tiltækt disable_2fa_user: Gera tveggja-þátta auðkenningu óvirka disable_custom_emoji: Gera sérsniðið tjáningartákn óvirkt + disable_sign_in_token_auth_user: Gera óvirka auðkenningu með teikni í tölvupósti fyrir notandann disable_user: Gera notanda óvirkan enable_custom_emoji: Virkja sérsniðið tjáningartákn + enable_sign_in_token_auth_user: Gera virka auðkenningu með teikni í tölvupósti fyrir notandann enable_user: Virkja notanda memorialize_account: Gera aðgang að minningargrein promote_user: Hækka notanda í tign @@ -285,8 +293,10 @@ is: destroy_unavailable_domain_html: "%{name} hóf aftur afhendingu til lénsins %{target}" disable_2fa_user_html: "%{name} gerði kröfu um tveggja-þátta innskráningu óvirka fyrir notandann %{target}" disable_custom_emoji_html: "%{name} gerði tjáningartáknið %{target} óvirkt" + disable_sign_in_token_auth_user_html: "%{name} gerði óvirka auðkenningu með teikni í tölvupósti fyrir %{target}" disable_user_html: "%{name} gerði innskráningu óvirka fyrir notandann %{target}" enable_custom_emoji_html: "%{name} gerði tjáningartáknið %{target} virkt" + enable_sign_in_token_auth_user_html: "%{name} gerði virka auðkenningu með teikni í tölvupósti fyrir %{target}" enable_user_html: "%{name} gerði innskráningu virka fyrir notandann %{target}" memorialize_account_html: "%{name} breytti notandaaðgangnum %{target} í minningargreinarsíðu" promote_user_html: "%{name} hækkaði notandann %{target} í tign" @@ -361,32 +371,9 @@ is: updated_msg: Tókst að uppfæra tjáningartákn! upload: Senda inn dashboard: - authorized_fetch_mode: Öruggur hamur - backlog: bakskráð verk - config: Stillingar - feature_deletions: Eyðingar notandaaðganga - feature_invites: Boðstenglar - feature_profile_directory: Notandasniðamappa - feature_registrations: Nýskráningar - feature_relay: Sambandsendurvarpi - feature_timeline_preview: Forskoðun tímalínu - features: Eiginleikar - hidden_service: Skýjasamband með faldar þjónustur - open_reports: opnar kærur - pending_tags: myllumerki bíða eftir yfirferð - pending_users: notendur bíða eftir yfirferð - recent_users: Nýlegir notendur - search: Leit í öllum texta - single_user_mode: Eins-notandahamur software: Hugbúnaður space: Notkun geymslurýmis title: Stjórnborð - total_users: notendur alls - trends: Tilhneiging - week_interactions: aðgerðir í þessari viku - week_users_active: virkir í þessari viku - week_users_new: notendur þessari viku - whitelist_mode: Hamur til að leyfa (whitelist) domain_allows: add_new: Setja lén á lista yfir leyft created_msg: Það tókst að setja lénið á lista yfir leyft @@ -569,6 +556,7 @@ is: resolved: Leyst resolved_msg: Það tókst að leysa kæruna! status: Staða + target_origin: Uppruni kærða notandaaðgangsins title: Kærur unassign: Aftengja úthlutun unresolved: Óleyst @@ -1004,6 +992,17 @@ is: lists: errors: limit: Þú hefur náð hámarksfjölda lista + login_activities: + authentication_methods: + otp: tveggja-þátta auðkenningarforrit + password: lykilorð + sign_in_token: öryggiskóði í tölvupósti + webauthn: öryggislyklar + description_html: Ef þú sérð einhverja virkni sem þú kannast ekki við, skaltu íhuga að skipta um lykilorð og að virkja tveggja-þátta auðkenningu. + empty: Enginn aðkenningarferill tiltækur + failed_sign_in_html: Misheppnuð tilraun til innskráningar með %{method} frá %{ip} (%{browser}) + successful_sign_in_html: Vel heppnuð tilraun til innskráningar með %{method} frá %{ip} (%{browser}) + title: Auðkenningarferill media_attachments: validations: images_and_video: Ekki er hægt að hengja myndskeið við stöðufærslu sem þegar inniheldur myndir @@ -1210,6 +1209,7 @@ is: revoke: Afturkalla revoke_success: Tókst að afturkalla setu title: Setur + view_authentication_history: Skoða aðkenningarferil aðgangsins þíns settings: account: Notandaaðgangur account_settings: Stillingar notandaaðgangs @@ -1230,6 +1230,7 @@ is: preferences: Kjörstillingar profile: Notandasnið relationships: Fylgist með og fylgjendur + statuses_cleanup: Sjálfvirk eyðing færslna two_factor_authentication: Tveggja-þátta auðkenning webauthn_authentication: Öryggislyklar statuses: @@ -1281,6 +1282,40 @@ is: public_long: Allir geta séð unlisted: Óskráð unlisted_long: Allir geta skoðað, en er ekki talið upp á opinberum tímalínum + statuses_cleanup: + enabled: Sjálfkrafa eyða eldri færslum + enabled_hint: Eyðir sjálfkrafa færslum þínum um leið og þær ná tilteknum aldursmörkum, nema ef þær samsvara einni af undantekningunum hér fyrir neðan + exceptions: Undantekningar + explanation: Þar sem eyðing færslna gerir talsverðar kröfur til kerfisins, er þetta gert smátt og smátt þegar netþjónninn er ekki upptekinn við annað. Að þessum sökum má vera að færslunum þínum sé eytt einhverjum tíma eftir að þær ná skilgreindum aldursmörkum. + ignore_favs: Hunsa eftirlæti + ignore_reblogs: Hunsa endurbirtingar + interaction_exceptions: Undantekningar byggðar á gagnvirkni + interaction_exceptions_explanation: Athugaðu að ekki er öruggt að færslum sé eytt við að fara niður fyrir skilgreind mörk eftirlæta eða endurbirtinga ef þær hafa einu sinni farið upp fyrir þessi mörk. + keep_direct: Halda beinum skilaboðum + keep_direct_hint: Eyðir ekki neinum af beinu skilaboðunum þínum + keep_media: Halda færslum með myndaviðhengjum + keep_media_hint: Eyðir ekki neinum af færslunum þínum sem eru með myndaviðhengi + keep_pinned: Halda festum færslum + keep_pinned_hint: Eyðir ekki neinum af festu færslunum þínum + keep_polls: Halda könnunum + keep_polls_hint: Eyðir ekki neinum af könnununum þínum + keep_self_bookmark: Halda bókamerktum færslum + keep_self_bookmark_hint: Eyðir ekki þínum eigin færslum ef þú hefur bókamerkt þær + keep_self_fav: Halda eftirlætisfærslum + keep_self_fav_hint: Eyðir ekki þínum eigin færslum ef þú hefur sett þær í eftirlæti + min_age: + '1209600': 2 vikur + '15778476': 6 mánuðir + '2629746': 1 mánuður + '31556952': 1 ár + '5259492': 2 mánuðir + '63113904': 2 ár + '7889238': 3 mánuðir + min_age_label: Aldursmörk + min_favs: Halda færslum sem eru í eftirlætum oftar en + min_favs_hint: Eyðir ekki þínum eigin færslum sem settar hafa verið í eftirlæti þetta oft. Skildu þetta eftir autt til að eyða færslum burtséð frá fjölda eftirlæta + min_reblogs: Halda færslum sem eru endurbirtar oftar en + min_reblogs_hint: Eyðir ekki þínum eigin færslum sem endurbirtar hafa verið þetta oft. Skildu þetta eftir autt til að eyða færslum burtséð frá fjölda endurbirtinga stream_entries: pinned: Fest tíst reblogged: endurbirt diff --git a/config/locales/it.yml b/config/locales/it.yml index b6f482737..8194e4a2c 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -119,6 +119,7 @@ it: demote: Declassa destroyed_msg: I dati di %{username} sono ora in coda per essere eliminati tra poco disable: Disabilita + disable_sign_in_token_auth: Disabilita autenticazione con token email disable_two_factor_authentication: Disabilita l'autenticazione a due fattori disabled: Disabilitato display_name: Nome visualizzato @@ -127,6 +128,7 @@ it: email: Email email_status: Stato email enable: Abilita + enable_sign_in_token_auth: Abilita autenticazione con token email enabled: Abilitato enabled_msg: L'account di %{username} è stato scongelato followers: Follower @@ -191,6 +193,10 @@ it: search: Cerca search_same_email_domain: Altri utenti con lo stesso dominio e-mail search_same_ip: Altri utenti con lo stesso IP + security_measures: + only_password: Solo password + password_and_2fa: Password e autenticazione a due fattori + password_and_sign_in_token: Password e codice via email sensitive: Sensibile sensitized: contrassegnato come sensibile shared_inbox_url: URL Inbox Condiviso @@ -242,8 +248,10 @@ it: destroy_unavailable_domain: Elimina dominio non disponibile disable_2fa_user: Disabilita l'autenticazione a due fattori disable_custom_emoji: Disabilita emoji personalizzata + disable_sign_in_token_auth_user: Disabilita autenticazione con codice via email per l'utente disable_user: Disabilita utente enable_custom_emoji: Abilita emoji personalizzata + enable_sign_in_token_auth_user: Abilita autenticazione con codice via email per l'utente enable_user: Abilita utente memorialize_account: Trasforma in account commemorativo promote_user: Promuovi utente @@ -285,8 +293,10 @@ it: destroy_unavailable_domain_html: "%{name} ha ripreso la consegna al dominio %{target}" disable_2fa_user_html: "%{name} ha disabilitato l'autenticazione a due fattori per l'utente %{target}" disable_custom_emoji_html: "%{name} ha disabilitato emoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} ha disabilitato l'autenticazione con codice via email per %{target}" disable_user_html: "%{name} ha disabilitato il login per l'utente %{target}" enable_custom_emoji_html: "%{name} ha abilitato emoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} ha abilitato l'autenticazione con codice via email per %{target}" enable_user_html: "%{name} ha abilitato il login per l'utente %{target}" memorialize_account_html: "%{name} ha trasformato l'account di %{target} in una pagina in memoriam" promote_user_html: "%{name} ha promosso l'utente %{target}" @@ -361,32 +371,25 @@ it: updated_msg: Emoji aggiornata con successo! upload: Carica dashboard: - authorized_fetch_mode: Modalità sicura - backlog: lavori arretrati - config: Configurazione - feature_deletions: Cancellazioni di account - feature_invites: Link di invito - feature_profile_directory: Directory dei profili - feature_registrations: Registrazioni - feature_relay: Ripetitore di federazione - feature_timeline_preview: Anteprima timeline - features: Funzionalità - hidden_service: Federazione con servizi nascosti - open_reports: apri report - pending_tags: hashtag in attesa di essere esaminati - pending_users: utenti in attesa di essere esaminati - recent_users: Utenti Recenti - search: Ricerca testo intero - single_user_mode: Modalita utente singolo + active_users: utenti attivi + interactions: interazioni + media_storage: Archiviazione media + new_users: nuovi utenti + opened_reports: rapporti aperti + pending_reports_html: + one: "1 rapporto in attesa" + other: "%{count} rapporti in attesa" + pending_users_html: + one: "1 utente in attesa" + other: "%{count} utenti in attesa" + resolved_reports: segnalazioni risolte software: Software + sources: Sorgenti di registrazione space: Utilizzo dello spazio title: Cruscotto - total_users: utenti totali - trends: Tendenze - week_interactions: interazioni per questa settimana - week_users_active: attivi questa settimana - week_users_new: utenti questa settimana - whitelist_mode: Modalità whitelist + top_languages: Lingue più attive + top_servers: Server più attivi + website: Sito web domain_allows: add_new: Dominio nella whitelist created_msg: Il dominio è stato inserito nella whitelist @@ -569,6 +572,7 @@ it: resolved: Risolto resolved_msg: Rapporto risolto! status: Stato + target_origin: Origine dell'account segnalato title: Rapporti unassign: Non assegnare unresolved: Non risolto @@ -1006,6 +1010,17 @@ it: lists: errors: limit: Hai raggiunto il numero massimo di liste + login_activities: + authentication_methods: + otp: app per autenticazione a due fattori + password: password + sign_in_token: codice di sicurezza via e-mail + webauthn: chiavi di sicurezza + description_html: Se vedi attività non riconosciuta, considera di cambiare la tua password e di abilitare l'autenticazione a due fattori. + empty: Cronologia di autenticazione non disponibile + failed_sign_in_html: Tentativo di accesso fallito con %{method} da %{ip} (%{browser}) + successful_sign_in_html: Accesso riuscito con %{method} da %{ip} (%{browser}) + title: Cronologia delle autenticazioni media_attachments: validations: images_and_video: Impossibile allegare video a un post che contiene già immagini @@ -1212,6 +1227,7 @@ it: revoke: Revoca revoke_success: Sessione revocata con successo title: Sessioni + view_authentication_history: Visualizza la cronologia di autenticazione del tuo account settings: account: Account account_settings: Impostazioni dell'account @@ -1232,6 +1248,7 @@ it: preferences: Preferenze profile: Profilo relationships: Follows e followers + statuses_cleanup: Cancellazione automatica dei post two_factor_authentication: Autenticazione a due fattori webauthn_authentication: Chiavi di sicurezza statuses: @@ -1283,6 +1300,40 @@ it: public_long: Tutti lo possono vedere unlisted: Pubblico, ma non visibile sulla timeline pubblica unlisted_long: Tutti lo possono vedere, ma non compare nelle timeline pubbliche + statuses_cleanup: + enabled: Cancella automaticamente i vecchi post + enabled_hint: Cancella automaticamente i tuoi post quando diventano più vecchi di una soglia di età specificata, a meno che non corrispondano a una delle eccezioni sotto + exceptions: Eccezioni + explanation: Poiché l'eliminazione dei post è un'operazione che richiede molte risorse, questa viene eseguita quando il server non è occupato da altre operazioni. Per questo motivo, i tuoi post possono essere cancellati un po' dopo che raggiungono la soglia di età. + ignore_favs: Ignora preferiti + ignore_reblogs: Ignora condivisioni + interaction_exceptions: Eccezioni basate sulle interazioni + interaction_exceptions_explanation: Tieni conto che non c'è garanzia che i post vengano cancellati se vanno al di sotto della soglia per i preferiti o i condivisi dopo averla superata. + keep_direct: Conserva messaggi diretti + keep_direct_hint: Non cancella nessuno dei tuoi messaggi diretti + keep_media: Conserva post con media allegati + keep_media_hint: Non cancella nessuno dei tuoi post che hanno media allegati + keep_pinned: Conserva post fissati in cima + keep_pinned_hint: Non cancella nessuno dei tuoi post fissati in cima + keep_polls: Conserva sondaggi + keep_polls_hint: Non cancella nessuno dei tuoi sondaggi + keep_self_bookmark: Conserva post che hai marcato con segnalibro + keep_self_bookmark_hint: Non cancella i tuoi post se li hai marcati con segnalibro + keep_self_fav: Conserva post che hai marcato come apprezzato + keep_self_fav_hint: Non cancella i tuoi post se li hai marcati come apprezzati + min_age: + '1209600': 2 settimane + '15778476': 6 mesi + '2629746': 1 mese + '31556952': 1 anno + '5259492': 2 mesi + '63113904': 2 anni + '7889238': 3 mesi + min_age_label: Soglia di età + min_favs: Conserva i post preferiti più di + min_favs_hint: Non cancella nessuno dei tuoi post che ha ricevuto più di questo numero di preferiti. Lascia vuoto per cancellare i post indipendentemente dal loro numero di preferiti + min_reblogs: Conserva i post condivisi più di + min_reblogs_hint: Non cancella nessuno dei tuoi post che è stato condiviso più di questo numero di volte. Lascia vuoto per cancellare i post indipendentemente dal loro numero di condivisioni stream_entries: pinned: Toot fissato in cima reblogged: condiviso @@ -1414,7 +1465,7 @@ it: disable: Mentre il tuo account è congelato, i tuoi dati dell'account rimangono intatti, ma non potrai eseguire nessuna azione fintanto che non viene sbloccato. sensitive: I tuoi file multimediali caricati e multimedia collegati saranno trattati come sensibili. silence: Mentre il tuo account è limitato, solo le persone che già ti seguono possono vedere i tuoi toot su questo server, e potresti essere escluso da vari elenchi pubblici. Comunque, altri possono manualmente seguirti. - suspend: Il tuo account è stato sospeso, e tutti i tuoi toot ed i tuoi file media caricati sono stati irreversibilmente rimossi da questo server, e dai server dove avevi dei seguaci. + suspend: Non puoi più utilizzare il tuo account, e il tuo profilo e altri dati non sono più accessibili. È ancora possibile effettuare il login per richiedere un backup dei dati fino a quando i dati non vengono completamente rimossi, ma conserveremo alcuni dati per impedirti di eludere la sospensione. get_in_touch: Puoi rispondere a questa email per entrare in contatto con lo staff di %{instance}. review_server_policies: Rivedi regole del server statuses: 'Nello specifico, per:' diff --git a/config/locales/ja.yml b/config/locales/ja.yml index ebc1ec822..85c22a0f4 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -25,7 +25,7 @@ ja: learn_more: もっと詳しく privacy_policy: プライバシーポリシー rules: サーバーのルール - rules_html: 'このMastodonサーバーにアカウントをお持ちの場合は、以下のルールの概要を確認してください:' + rules_html: 'このMastodonサーバーには、アカウントの所持にあたって従うべきルールが設定されています。概要は以下の通りです:' see_whats_happening: やりとりを見てみる server_stats: 'サーバー統計:' source_code: ソースコード @@ -185,6 +185,8 @@ ja: search: 検索 search_same_email_domain: 同じドメインのメールアドレスを使用しているユーザー search_same_ip: 同じ IP のユーザーを検索 + security_measures: + password_and_2fa: パスワードと 2FA sensitive: 閲覧注意 sensitized: 閲覧注意済み shared_inbox_url: Shared inbox URL @@ -355,32 +357,9 @@ ja: updated_msg: 絵文字の更新に成功しました! upload: アップロード dashboard: - authorized_fetch_mode: セキュアモード - backlog: 未処理のジョブ - config: 構成 - feature_deletions: アカウント削除 - feature_invites: 招待リンク - feature_profile_directory: ディレクトリ - feature_registrations: 新規登録 - feature_relay: 連合リレー - feature_timeline_preview: タイムラインプレビュー - features: 機能 - hidden_service: 秘匿サービスとの連合 - open_reports: 未解決の通報 - pending_tags: 審査待ちのハッシュタグ - pending_users: 承認待ちの人数 - recent_users: 最近登録したユーザー - search: 全文検索 - single_user_mode: シングルユーザーモード software: ソフトウェア space: ディスク使用量 title: ダッシュボード - total_users: 全ユーザー - trends: トレンドタグ - week_interactions: 今週交流のあった回数 - week_users_active: 今週活動した人数 - week_users_new: 今週登録した人数 - whitelist_mode: 連合制限モード domain_allows: add_new: 連合を許可 created_msg: 連合を許可しました @@ -991,6 +970,11 @@ ja: lists: errors: limit: リストの上限に達しました + login_activities: + authentication_methods: + password: パスワード + sign_in_token: 電子メールセキュリティコード + webauthn: セキュリティキー media_attachments: validations: images_and_video: 既に画像が追加されているため、動画を追加することはできません @@ -1215,6 +1199,7 @@ ja: preferences: ユーザー設定 profile: プロフィール relationships: フォロー・フォロワー + statuses_cleanup: 投稿の自動削除 two_factor_authentication: 二段階認証 webauthn_authentication: セキュリティキー statuses: @@ -1260,6 +1245,40 @@ ja: public_long: 誰でも見ることができ、かつ公開タイムラインに表示されます unlisted: 未収載 unlisted_long: 誰でも見ることができますが、公開タイムラインには表示されません + statuses_cleanup: + enabled: 古い投稿を自動的に削除する + enabled_hint: 設定した期間を過ぎた投稿は、以下の例外に該当しない限り、自動的に削除されます + exceptions: 例外 + explanation: 投稿の削除はサーバーに負荷がかかるため、サーバーが混み合っていないときに時間をかけて行われます。 + ignore_favs: お気に入りされた数を無視 + ignore_reblogs: ブーストされた数を無視 + interaction_exceptions: インタラクションに基づく例外 + interaction_exceptions_explanation: お気に入りやブーストの基準値を一度超えてしまった投稿は、基準値を下回った後であっても、削除される保証はありません。 + keep_direct: ダイレクトメッセージを保持 + keep_direct_hint: ダイレクトメッセージを削除せずに残します + keep_media: メディア付きの投稿を保持 + keep_media_hint: メディア付きの投稿を削除せずに残します + keep_pinned: ピン留めされた投稿を保持 + keep_pinned_hint: ピン留めされた投稿を削除せずに残します + keep_polls: アンケート付きの投稿を保持 + keep_polls_hint: アンケート付きの投稿を削除せずに残します + keep_self_bookmark: ブックマークした投稿を保持 + keep_self_bookmark_hint: 自分自身でブックマークした投稿を削除せずに残します + keep_self_fav: お気に入りに登録した投稿を保持 + keep_self_fav_hint: 自分自身でお気に入りに登録した投稿を削除せずに残します + min_age: + '1209600': 2週間 + '15778476': 6ヶ月 + '2629746': 1ヶ月 + '31556952': 1年 + '5259492': 2ヶ月 + '63113904': 2年 + '7889238': 3ヶ月 + min_age_label: 投稿を保持する期間 + min_favs: これ以上お気に入りに登録された投稿を無視する + min_favs_hint: この数以上、お気に入りに登録された投稿を削除しません。空白にしておくと、お気に入りに登録された数に関わらず投稿を削除します。 + min_reblogs: これ以上ブーストされた投稿を無視する + min_reblogs_hint: この数以上、ブーストされた投稿を削除しません。空白にしておくと、ブーストされた数に関わらず投稿を削除します。 stream_entries: pinned: 固定された投稿 reblogged: さんがブースト diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 80c738b26..02f0986f4 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -154,26 +154,9 @@ ka: updated_msg: ემოჯი წარმატებით განახლდა! upload: ატვირთვა dashboard: - backlog: დაუსრულებელი საქმეები - config: კონფიგურაცია - feature_deletions: ანგარიშის გაუქმებები - feature_invites: მოწვევის ბმულები - feature_registrations: რეგისტრაციები - feature_relay: ფედერაციის რილეი - features: ფუნქციები - hidden_service: ფედერაცია დამალულ სერვისებთან - open_reports: ღია რეპორტები - recent_users: ახალი მომხმარებლები - search: სრული-ტექსტის ძიება - single_user_mode: ერთ-მომხმარებლიანი რეჟიმი software: პროგრამა space: მოცულობის მოხმარება title: დაფა - total_users: სულ მომხმარებლები - trends: ტრენდები - week_interactions: ამ კვირის ინტერაქციები - week_users_active: აქტიური ამ კვირას - week_users_new: ამ კვირის მომხმარებლები domain_blocks: add_new: ახლის დამატება created_msg: დომენის ბლოკი ახლა პროცესირების ქვეშაა diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 366f66d71..341466510 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -7,6 +7,7 @@ kab: active_count_after: d urmid active_footnote: Imseqdacen yekkren s wayyur (MAU) administered_by: 'Yettwadbel sɣur:' + api: API apps: Isnasen izirazen apps_platforms: Seqdec Maṣṭudun deg iOS, Android d tɣeṛγṛin-nniḍen browse_directory: Qelleb deg ukaram n imaɣnuten teǧǧeḍ-d gar-asen widak tebɣiḍ @@ -20,6 +21,7 @@ kab: hosted_on: Maṣṭudun yersen deg %{domain} learn_more: Issin ugar privacy_policy: Tasertit tabaḍnit + rules: Ilugan n uqeddac see_whats_happening: Ẓer d acu i iḍerrun server_stats: 'Tidaddanin n uqeddac:' source_code: Tangalt Taɣbalut @@ -76,6 +78,7 @@ kab: create: Eǧǧ tazmilt delete: Kkes accounts: + add_email_domain_block: Sewḥel taɣult n yimayl approve: Qbel approve_all: Qbel kullec are_you_sure: Tetḥeqqeḍ? @@ -95,6 +98,7 @@ kab: deleted: Yettwakkes demote: Sider s weswir disable: Gdel + disable_sign_in_token_auth: Sens asesteb yebnan ɣef ujiṭun s yimayl disable_two_factor_authentication: Gdel 2FA disabled: Yensa display_name: Isem ara d-yettwaskanen @@ -103,6 +107,7 @@ kab: email: Imayl email_status: Addad n imayl enable: Rmed + enable_sign_in_token_auth: Rmed asesteb yebnan ɣef ujiṭun s yimayl enabled: Yermed followers: Imeḍfaṛen follows: Yeṭafaṛ @@ -118,13 +123,17 @@ kab: remote: Ameccaq title: Amḍiq login_status: Addad n tuqqna + media_attachments: Imeddayen n umidya memorialize: Err amiḍan d asebter n usmekti + memorialized_msg: Yuɣal %{username} d amiḍan n usmekti akken iwata moderation: active: Yermed all: Akk pending: Yettraǧu silenced: Yettwasgugem suspended: Yeḥbes + title: Aseɣyed + moderation_notes: Tamawin n useɣyed most_recent_activity: Armud aneggaru most_recent_ip: Tansa IP taneggarut no_account_selected: Ula yiwen n umiḍan ur yettwabeddel acku ula yiwen ur yettwafren @@ -135,6 +144,7 @@ kab: promote: Ali s uswir protocol: Aneggaf public: Azayez + push_subscription_expires: Ajerred PuSH ad ifakk redownload: Smiren amaɣnu reject: Aggi reject_all: Aggi-ten akk @@ -154,7 +164,12 @@ kab: staff: Tarbaɛt user: Amseqdac search: Nadi + search_same_email_domain: Iseqdacen-nniḍen s yiwet n taɣult n yimayl search_same_ip: Imseqdacen-nniḍen s tansa IP am tinn-ik + security_measures: + only_password: Awal uffir kan + password_and_2fa: Awal uffir d 2FA + password_and_sign_in_token: Ajiṭun n wawal uffir d yimayl shared_inbox_url: Bḍu URL n tbewwaḍt show: created_reports: Eg ineqqisen @@ -170,25 +185,91 @@ kab: undo_silenced: Kkes asgugem unsubscribe: Ur ṭafar ara username: Isem n useqdac + view_domain: Sken-d agzul n taɣult + warn: Alɣu + web: Web whitelisted: Deg tebdert tamellalt action_logs: action_types: change_email_user: Beddel imayl i useqdac confirm_user: Sentem aseqdac + create_announcement: Rnu-d ulɣu create_custom_emoji: Rnu imujit udmawan + create_domain_allow: Rnu-d taɣult yettusirgen + create_domain_block: Rnu-d asewḥel n taɣult + create_email_domain_block: Rnu-d asewḥel n taɣult n yimayl create_ip_block: Rnu alugen n IP + create_unavailable_domain: Rnu-d taɣult ur nelli ara + destroy_announcement: Kkes ulɣu + destroy_custom_emoji: Kkes imujit udmawan + destroy_domain_allow: Kkes taɣult yettusirgen + destroy_domain_block: Kkes asewḥel n taɣult + destroy_email_domain_block: Kkes asewḥel n taɣult n yimayl destroy_ip_block: Kkes alugen n IP + destroy_status: Kkes tasufeɣt + destroy_unavailable_domain: Kkes taɣult ur nelli ara disable_2fa_user: Gdel 2FA + disable_custom_emoji: Sens imujit udmawan + disable_sign_in_token_auth_user: Sens asesteb yebnan ɣef ujiṭun s yimayl i useqdac + disable_user: Sens aseqdac + enable_custom_emoji: Rmed imujit udmawan + enable_sign_in_token_auth_user: Rmed asesteb yebnan ɣef ujiṭun s yimayl i useqdac enable_user: Rmed aseqdac + promote_user: Aseqdac anmeggag remove_avatar_user: Kkes avaṭar + reopen_report: Allus n ulday n uneqqis reset_password_user: Ales awennez n wawal n uffir + resolve_report: Ferru n uneqqis silence_account: Sgugem amiḍan + update_announcement: Leqqem ulɣu + update_custom_emoji: Leqqem imuji udmawan update_domain_block: Leqqem iḥder n taɣult + update_status: Leqqem tasufeɣt + actions: + assigned_to_self_report_html: "%{name} imudd aneqqis %{target} i yiman-nsen" + change_email_user_html: "%{name} ibeddel tansa imayl n useqdac %{target}" + confirm_user_html: "%{name} isentem tansa imayl n useqdac %{target}" + create_account_warning_html: "%{name} yuzen alɣu i %{target}" + create_announcement_html: "%{name} yerna taselɣut tamaynut %{target}" + create_custom_emoji_html: "%{name} yessuli-d imujiten imaynuten %{target}" + create_domain_allow_html: "%{name} yerna taɣult %{target} ɣer tebdart tamellalt" + create_domain_block_html: "%{name} yessewḥel taɣult %{target}" + create_email_domain_block_html: "%{name} yessewḥel taɣult n yimayl %{target}" + create_ip_block_html: "%{name} yerna alugen i IP %{target}" + create_unavailable_domain_html: "%{name} iseḥbes asiweḍ ɣer taɣult %{target}" + demote_user_html: "%{name} iṣubb-d deg usellun aseqdac %{target}" + destroy_announcement_html: "%{name} yekkes taselɣut %{target}" + destroy_custom_emoji_html: "%{name} ihudd imuji %{target}" + destroy_domain_allow_html: "%{name} yekkes taɣult %{target} seg tebdart tamellalt" + destroy_domain_block_html: "%{name} yekkes aseḥbes n taɣult %{target}" + destroy_email_domain_block_html: "%{name} yekkes asewḥel i taɣult n imayl %{target}" + destroy_ip_block_html: "%{name} yekkes alugen i IP %{target}" + destroy_status_html: "%{name} yekkes tasufeɣt n %{target}" + destroy_unavailable_domain_html: "%{name} yerra-d asiweḍ ɣer taɣult %{target}" + disable_2fa_user_html: "%{name} yssens asesteb s snat n tarrayin i useqdac %{target}" + disable_custom_emoji_html: "%{name} yessens imuji %{target}" + disable_sign_in_token_auth_user_html: "%{name} yessens asesteb yebnan ɣef ujiṭun s yimayl i %{target}" + disable_user_html: "%{name} yessens tuqqna i useqdac %{target}" + enable_custom_emoji_html: "%{name} yermed imuji %{target}" + enable_sign_in_token_auth_user_html: "%{name} yermed asesteb yebnan ɣef ujiṭun s yimayl i %{target}" + enable_user_html: "%{name} yermed tuqqna i useqdac %{target}" + memorialize_account_html: "%{name} yerra amiḍan n %{target} d asebter n usmekti" + promote_user_html: "%{name} yerna deg usellun n useqdac %{target}" + remove_avatar_user_html: "%{name} yekkes avaṭar n %{target}" + reopen_report_html: "%{name} yules alday n uneqqis %{target}" + reset_password_user_html: "%{name} iwennez awal uffir n useqdac %{target}" + resolve_report_html: "%{name} yefra aneqqis %{target}" + update_announcement_html: "%{name} ileqqem taselɣut %{target}" + update_custom_emoji_html: "%{name} ileqqem imuji %{target}" + update_domain_block_html: "%{name} ileqqem iḥder n taɣult i %{target}" + update_status_html: "%{name} ileqqem tasufeɣt n %{target}" deleted_status: "(tasuffeɣt tettwakkes)" empty: Ulac iɣmisen i yellan. + filter_by_action: Fren s tigawt filter_by_user: Sizdeg s useqdac title: Aɣmis n usenqed announcements: + destroyed_msg: Tamselɣut tettwakkes akken iwata! edit: title: Ẓreg ulγu empty: Ulac kra n ulγuyen. @@ -196,6 +277,10 @@ kab: new: create: Rnu-d ulγu title: Ulγu amaynut + publish: Sufeɣ + published_msg: Tamselɣut tettwasufeɣ-d akken iwata! + scheduled_for: Yettusɣiwsen i %{time} + scheduled_msg: Tamselɣut tettusɣiwes i usufeɣ! title: Ulγuyen custom_emojis: assign_category: Efk taggayt @@ -225,21 +310,9 @@ kab: update_failed_msg: Ur izmir ara ad-issali umuji-a upload: Sali dashboard: - config: Tawila - feature_deletions: Imiḍan yettwaksen - feature_invites: Iseɣwan n iɛaṛuḍen - feature_profile_directory: Akaram n imaɣnuten - feature_registrations: Ajerred - feature_relay: Anmegli n tfidiṛalitt - features: Timahaltin - open_reports: yeldin d ineqqisen - pending_users: imseqdacen ttrajun aɛiwed n tmuɣli - recent_users: Iseqdacen n memli kan software: Aseɣẓan + space: Tallunt yettwasqedcen title: Tafelwit - total_users: igellan akk d iseqdacen - week_users_active: urmiden deg yimalas-agi - week_users_new: imseqdacen deg yimalas-agi domain_allows: add_new: Timerna n taɣult ɣer tabdert tamellalt created_msg: Taγult-a tettwarna γer wumuγ amellal mebla ugur @@ -249,17 +322,25 @@ kab: add_new: Rni iḥder amaynut n taɣult domain: Taγult new: + create: Rnu-d iḥder severity: noop: Ula yiwen silence: Sgugem suspend: Ḥbes di leεḍil + title: Iḥder amaynut n taɣult private_comment: Awennit uslig public_comment: Awennit azayez + reject_media: Agi ifuyla n umidya + reject_reports: Agi ineqqisen + rejecting_media: agami n yifuyla n umidya + rejecting_reports: agami n yineqqisen severity: silence: yettwasgugem suspend: yeḥbes show: undo: Sefsex + undo: Sefsex iḥder n taɣult + view: Sken-d iḥder n taɣult email_domain_blocks: add_new: Rnu amaynut delete: Kkes @@ -269,9 +350,25 @@ kab: create: Rnu taγult title: Timerna n taɣult tamaynut n imayl ɣer tebdart taberkant title: Tabdart taberkant n imayl + follow_recommendations: + language: I tutlayt + status: Addad + suppressed: Yettwakkes instances: + back_to_all: Akk + back_to_limited: Ɣur-s talast by_domain: Taγult + delivery: + all: Akk + clear: Sfeḍ tuccḍiwin n usiweḍ + restart: Ales asiweḍ + stop: Seḥbes asiweḍ + title: Asiweḍ + unavailable: Ur yelli ara + unavailable_message: Asiweḍ ur yelli ara + warning: Aneddeh delivery_available: Yella usiweḍ + delivery_error_days: Ussan n tuccḍiwin n usiweḍ empty: Ulac taɣultin yettwafen. known_accounts: one: "%{count} n umiḍan i yettwasnen" @@ -279,13 +376,17 @@ kab: moderation: all: Akk limited: Yettwasgugem + title: Aseɣyed private_comment: Awennit uslig public_comment: Awennit azayez title: Tamatut total_blocked_by_us: Ttwasḥebsen sγur-neγ total_followed_by_them: Ṭtafaṛen-t total_followed_by_us: Neṭṭafaṛ-it + total_reported: Ineqqisen fell-asen + total_storage: Imeddayen n umidya invites: + deactivate_all: Sens kullec filter: all: Akk available: Yella @@ -338,13 +439,23 @@ kab: mark_as_unresolved: Creḍ-it ur yefra ara notes: create: Rnu tazmilt + create_and_resolve: Fru s tamawt + create_and_unresolve: Alew alday s tamawt delete: Kkes + reopen: Allus n ulday n uneqqis report: 'Aneqqis #%{id}' + reported_account: Amiḍan yettumlen resolved: Fran status: Addad title: Ineqqisen unresolved: Ur yefra ara updated_at: Yettwaleqqem + rules: + add_new: Rnu alugen + delete: Kkes + edit: Ẓreg alugen + empty: Mazal ur ttwasbadun ara yilugan n uqeddac. + title: Ilugan n uqeddac settings: custom_css: desc_html: Beddel aγan s CSS ara d-yettwasalayen deg yal asebter @@ -405,6 +516,7 @@ kab: view_status: Ssken-d tasuffiɣt applications: token_regenerated: Ajuṭu n unekcum yettusirew i tikkelt-nniḍen akken iwata + your_token: Ajiṭun-ik·im n unekcum auth: apply_for_account: Suter asnebgi change_password: Awal uffir @@ -525,6 +637,8 @@ kab: merge: Smezdi overwrite: Semselsi types: + blocking: Tabdart n yimiḍanen iweḥlen + bookmarks: Ticraḍ following: Tabdert n wid teṭṭafareḍ muting: Tabdert n wid tesgugmeḍ upload: Sali @@ -547,6 +661,11 @@ kab: table: expires_at: Ad ifat di title: Ɛreḍ-d kra n yimdanen + login_activities: + authentication_methods: + password: awal uffir + sign_in_token: tangalt n tɣellist n tansa imayl + webauthn: tisura n tɣellist migrations: acct: Ibeddel γer incoming_migrations: Tusiḍ-d seg umiḍan nniḍen @@ -617,10 +736,38 @@ kab: activity: Armud aneggaru browser: Iminig browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox generic: Iminig arusin + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Iminig Nokia S40 Ovi + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: Iminig QQ + safari: Safari + uc_browser: UCBrowser + weibo: Weibo current_session: Tiγimit tamirant description: "%{browser} s %{platform}" + ip: IP platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: Chrome OS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: macOS + other: anagraw arussin + windows: Windows + windows_mobile: Windows Mobile windows_phone: Tiliγri Windows Phone revoke: Ḥwi title: Tiɣimiyin @@ -641,6 +788,7 @@ kab: preferences: Imenyafen profile: Ameγnu relationships: Imeḍfaṛen akked wid i teṭṭafaṛeḍ + two_factor_authentication: Asesteb s snat n tarrayin webauthn_authentication: Tisura n teɣlist statuses: attached: @@ -672,6 +820,15 @@ kab: public: Azayez public_long: Yal yiwen·t yezmer at iwali unlisted: War tabdert + statuses_cleanup: + min_age: + '1209600': 2 n yimalasen + '15778476': 6 n wayyuren + '2629746': 1 n wayyur + '31556952': 1 n useggas + '5259492': 2 n wayyuren + '63113904': 2 n yiseggasen + '7889238': 3 n wayyuren stream_entries: pinned: Tijewwiqt yettwasentḍen sensitive_content: Agbur amḥulfu @@ -686,6 +843,8 @@ kab: disable: Gdel disabled_success: Asesteb s snat n tarrayin yensa akken iwata edit: Ẓreg + enabled: Asesteb s snat n tarrayin yermed + enabled_success: Asesteb s snat n tarrayin yermed akken iwata otp: Asnas n usesteb webauthn: Tisura n teɣlist user_mailer: diff --git a/config/locales/kk.yml b/config/locales/kk.yml index 34262650f..1c4445ee9 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -233,32 +233,9 @@ kk: updated_msg: Эмодзи сәтті жаңартылды! upload: Жүктеу dashboard: - authorized_fetch_mode: Қауіпсіз режим - backlog: босатылған тапсырмалар - config: Конфигурация - feature_deletions: Аккаунттарды жою - feature_invites: Шақыру сілтемелері - feature_profile_directory: Профиль каталогы - feature_registrations: Тіркелулер - feature_relay: Федерация релесі - feature_timeline_preview: Таймлайн превьюі - features: Мүмкіндіктер - hidden_service: Жасырын қызметтер федерациясы - open_reports: ашық шағымдар - pending_tags: хештегтер күтілуде - pending_users: қолданушылар күтілуде - recent_users: Соңғы қолданушылар - search: Толық мәтінмен іздеу - single_user_mode: Жалғыз пайдаланушы режимі software: Бағдарлама space: Пайдаланылған кеңістік title: Басқару тақтасы - total_users: барлық қолданушы - trends: Трендтер - week_interactions: осы аптадағы әрекеттер - week_users_active: осы аптадағы белсенділік - week_users_new: осы аптадағы қолданушылар - whitelist_mode: Рұқсат тізімі domain_allows: add_new: Рұқсат етілген домендер created_msg: Доменге рұқсат берілді diff --git a/config/locales/kmr.yml b/config/locales/kmr.yml new file mode 100644 index 000000000..5a275b4c9 --- /dev/null +++ b/config/locales/kmr.yml @@ -0,0 +1,1527 @@ +--- +kmr: + about: + about_hashtag_html: Ev şandiyeke gelemperî ye bi #%{hashtag} re nîşankirî ye. Tu dikarî pê re çalak bibî heke ajimêreke te heye li ser fediverse. + about_mastodon_html: 'Tora civakî ya pêşerojê: Ne reklam, ne çavdêriya pargîdanî, sêwirana exlaqî, û desentralîzasyon! Bi Mastodon re bibe xwediyê daneyên xwe!' + about_this: Derbar + active_count_after: çalak + active_footnote: Mehane bikarhênerên çalak (MBÇ) + administered_by: 'Tê bi rêvebirin ji aliyê:' + api: API + apps: Sepana mobîl + apps_platforms: Mastodon ji iOS, Android û platformên din bi kar bîne + browse_directory: Li riya profîlê bigere û li gorî berjewendiyan parzûn bike + browse_local_posts: Ji vî rajekarê weşaneke zindî ya şandiyên giştî bigere + browse_public_posts: Weşaneke zindî ya şandiyên giştî bigere li ser Mastodon + contact: Têkilî + contact_missing: Nehate sazkirin + contact_unavailable: N/A + discover_users: Bikarhêneran keşf bike + documentation: Pelbend + federation_hint_html: Bi ajimêrê xwe %{instance} re tu dikarî kesên rajekar û li derveyî mastodonê bişopînî. + get_apps: Sepaneke mobîl bicerbîne + hosted_on: Mastodon li ser%{domain} tê hildanê + instance_actor_flash: Ev ajimêr aktorekî aşopî ye ji bo rajekar were temsîl kirin tê bikaranîn ne ajimêra kesî ye. Ji bo armanca federasyonê dixebite û divê ney asteng kirin heta ku te xwest hemû nimûneyan asteng bikî, di vir de ger tu blogek navper bikarbînî. + learn_more: Bêtir fêr bibe + privacy_policy: Polîtikaya nihêniyê + rules: Rêbazên rajekar + rules_html: 'Heger tu bixwazî ajimêrekî li ser rajekarê mastodon vebikî, li jêrê de kurtasî ya qaîdeyên ku tu guh bidî heye:' + see_whats_happening: Binêre ka çi diqewime + server_stats: 'Statîstîkên rajekar:' + source_code: Çavkaniya Kodî + status_count_after: + one: şandî + other: şandî + status_count_before: Hatin weşan + tagline: Hevalên xwe bişopîne û yên nû bibîne + terms: Peyama mercan + unavailable_content: Rajekarên li hev kirî + unavailable_content_description: + domain: Rajekar + reason: Sedem + rejecting_media: 'Pelên medyayê yên ji van rajekaran nayên pêvajoyî kirin an tomarkirin, û tu dîmenek nayên xuyakirin, ku pêdivî ye ku bi desta pêlêkirina pelika rasteqîn hebe:' + rejecting_media_title: Medyayên parzûnkirî + silenced: 'Şandiyên ji van rajekaran dê di demnameyên û axaftinên gelemperî de bêne veşartin, û heya ku tu wan neşopînî dê ji çalakiyên bikarhênerên wan agahdariyek çênebe:' + silenced_title: Rajekarên sînor kirî + suspended: 'Dê tu daneya ji van rajekaran neyê berhev kirin, tomarkirin an jî guhertin, ku têkilî an danûstendinek bi bikarhênerên van rajekaran re tune dike:' + suspended_title: Rajekarên rawestî + unavailable_content_html: Mastodon bi gelemperî dihêle ku tu naverokê bibînî û bi bikarhênerên ji rajekareke din a li fendiverse re têkilî dayne. Ev awaretyên ku li ser vê rajekara taybetî hatine çêkirin ev in. + user_count_after: + one: bikarhêner + other: bikarhêner + user_count_before: Serrûpel + what_is_mastodon: Mastodon çi ye? + accounts: + choices_html: 'Hilbijartina %{name}:' + endorsements_hint: Tu dikarî kesên ku di navrûyê wep de dişopînî bipejirînî û ew li vir were nîşan kirin. + featured_tags_hint: Tu dikarî hashtagên teybetî li vir tê nîşan kirin di pê de derxî. + follow: Bişopîne + followers: + one: Şopîner + other: Şopîner + following: Dişopîne + instance_actor_flash: Ev ajimêr listikvaneke rastkî ye ku ji bo wek nûnerê rajekar bixwe tê bikaranîn û ne bikarhênerek kesane. Ew ji bo mebestên yekbûyî tê bikaranîn û divê neyê rawestandin. + joined: Di %{date} de tevlî bû + last_active: çalakiya dawî + link_verified_on: Xwedaniya li vê girêdanê di %{date} de hatiye kontrolkirin + media: Medya + moved_html: "%{name} bar kire %{new_profile_link}:" + network_hidden: Ev zanyarî berdest nîne + never_active: Tu car + nothing_here: Li vir tiştek tune ye! + people_followed_by: Kesên ku%{name} wan dişopîne + people_who_follow: Kesên%{name} dişopîne + pin_errors: + following: Kesê ku tu dixwazî bipejirînî jixwe tu vê dişopînî + posts: + one: Şandî + other: Şandî + posts_tab_heading: Şandî + posts_with_replies: Şandî û bersiv + roles: + admin: Rêvebir + bot: Bot + group: Kom + moderator: Moderator + unavailable: Profîl nay bikaranîn + unfollow: Neşopîne + admin: + account_actions: + action: Çalakî yê bike + title: Li ser %{acct} çalakiyên li hev hatî pêk bîne + account_moderation_notes: + create: Nîşeyekê bihêle + created_msg: Nîşeyê moderator bi awayekî serkeftî hate afirandin! + delete: Jê bibe + destroyed_msg: Nîşeyê moderator bi awayekî serkeftî hate tinne kirin! + accounts: + add_email_domain_block: Navparê e-nameyê asteng bike + approve: Bipejirîne + approve_all: Hemûyan bipejirîne + approved_msg: Tomarkirina %{username} bi awayekî serkeftî hate pejirandin + are_you_sure: Ma tu bawerî? + avatar: Wêne + by_domain: Navper + change_email: + changed_msg: E-nameya ajimêr bi awayekî serkeftî hate guhertin! + current_email: E-nameya heyî + label: E-nameyê biguherîne + new_email: E-nameya nû + submit: E-nameyê biguherîne + title: E-nameyê biguherîne bo %{username} + confirm: Bipejirîne + confirmed: Hate pejirandin + confirming: Tê pejirandin + delete: Daneyan jê bibe + deleted: Hate jêbirin + demote: Ast daxistin + destroyed_msg: Daneyên %{username} niha ket rêzê da yê demek nêz da were jêbirin + disable: Qerisî ye + disable_sign_in_token_auth: E-name ya rastandina token neçalak bike + disable_two_factor_authentication: 2FA ne çalak bike + disabled: Qerisî ye + display_name: Navê xuyangê + domain: Navper + edit: Serrast bike + email: E-name + email_status: Rewşa E-nameyê + enable: Çalak bike + enable_sign_in_token_auth: E-name ya rastandina token çalak bike + enabled: Çalakkirî + enabled_msg: Ajimêra %{username} bi serkeftî hat çalak kirin + followers: Şopîner + follows: Dişopînê + header: Jormalper + inbox_url: Peyamên hatî URl + invite_request_text: Sedemên tevlêbûnê + invited_by: Bi vexwendinê + ip: IP + joined: Tevlî bû + location: + all: Hemû + local: Herêmî + remote: Ji dûr ve + title: Cih + login_status: Rewşa têketinê + media_attachments: Pêvekên medya + memorialize: Vegerîne bîranînê + memorialized: Bû bîranîn + memorialized_msg: "%{username} bi serkeftî veguherî ajimêra bîranînê" + moderation: + active: Çalak + all: Hemû + pending: Tê nirxandin + silenced: Sînorkirî + suspended: Sekinandî + title: Çavdêrî + moderation_notes: Nîşeyên Rêvebirinê + most_recent_activity: Çalakîyên dawî + most_recent_ip: IP' a dawî + no_account_selected: Tu ajimêr nehat hilbijartin ji ber vê tu ajimêr nehat guhertin + no_limits_imposed: Sînor nay danîn + not_subscribed: Beşdar nebû + pending: Li benda nirxandinê ye + perform_full_suspension: Sekinî + promote: Derbasê asteke bilind be + protocol: Protokol + public: Gelemperî + push_subscription_expires: Beşdarbûna PuSH diqede + redownload: Profîl nûve bike + redownloaded_msg: Bi serkeftî profîla %{username} ji kokê va hat nûve kirin + reject: Nepejirîne + reject_all: Hemûyan red bike + rejected_msg: Tomarkirina %{username} bi awayekî serkeftî nehate pejirandin + remove_avatar: Avatarê rake + remove_header: Sernavê rake + removed_avatar_msg: Wêneyê %{username} bi awayekî serkeftî hate rakirin + removed_header_msg: Wêneyê dîwar ê %{username} bi awayekî serkeftî hate rakirin + resend_confirmation: + already_confirmed: Ev bikarhêner jixwe hatiye pejirandin + send: E-nameya pejirandinê dîsa bişîne + success: E-nameya pejirandinê bi awayekî serkeftî hate şandin! + reset: Ji nû ve saz bike + reset_password: Pêborînê ji nû ve saz bike + resubscribe: Dîsa beşdar bibe + role: Maf + roles: + admin: Rêvebir + moderator: Çavdêr + staff: Xebatkar + user: Bikarhêner + search: Bigere + search_same_email_domain: Bikarhênerên din ên bi heman navpera e-nameyê + search_same_ip: Bikarhênerên din ên xwedî heman IP + security_measures: + only_password: Têne pêborîn + password_and_2fa: Pêborîn û 2FA + password_and_sign_in_token: Pêborîn û navnîşana e-nameyê + sensitive: Hêz-hestiyar + sensitized: Wek hestiyar hatiye nîşankirin + shared_inbox_url: URLya wergirtiyên parvekirî + show: + created_reports: Ragihandinên ku çêkiriye + targeted_reports: Ji aliyê kesên din ve hatiye ragihandin + silence: Sînor + silenced: Bêdeng kirî + statuses: Şandî + subscribe: Bibe kiryar + suspended: Hatiye rawestandin + suspension_irreversible: Daneyên vê ajimêrê bêveger hatine jêbirin. Tu dikarî ajimêra xwe ji rawestandinê vegerinî da ku ew bi kar bînî lê ew ê tu daneya ku berê hebû venegere. + suspension_reversible_hint_html: Ajimêr hat qerisandin, û daneyên di %{date} de hemû were rakirin. Hetta vê demê, ajimêr bê bandorên nebaş dikare dîsa vegere. Heke tu dixwazî hemû daneyan ajimêrê niha rakî, tu dikarî li jêrê bikî. + time_in_queue: Di dorê de sekinandin %{time} + title: Ajimêr + unconfirmed_email: E-nameya nepejirandî + undo_sensitized: Hestiyariyê vegerîne + undo_silenced: Sînorê vegerîne + undo_suspension: Dûrxistinê paşve vegerîne + unsilenced_msg: Ajimêra %{username} bi awayekî serkeftî bêsînor çêbû + unsubscribe: Dev ji beşdarbûnê berde + unsuspended_msg: Bi awayekî serkeftî beşdarbûna bi ajimêra %{username} hate berdan + username: Navê bikarhêneriyê + view_domain: Kurte ji bo navperê bide nîşan + warn: Hişyarî + web: Tevn + whitelisted: Ji bona yekbûyînê maf tê dayîn + action_logs: + action_types: + assigned_to_self_report: Ragihandinê diyar bike + change_email_user: E-nameya bikarhêner biguherîne + confirm_user: Bikarhêner bipejirîne + create_account_warning: Hişyariyekê çê bike + create_announcement: Daxûyaniyekê çê bike + create_custom_emoji: Emojiyên kesanekirî çê bike + create_domain_allow: Navpera ku destûr standiye peyda bike + create_domain_block: Navpera ku asteng bûye ava bike + create_email_domain_block: Navpera e-name yê de asteng kirinê peyda bike + create_ip_block: Rêziknameya IPyê saz bike + create_unavailable_domain: Navpera ku nayê bikaranîn pêk bîne + demote_user: Bikarhênerê kaşê jêr bike + destroy_announcement: Daxûyanîyê jê bibe + destroy_custom_emoji: Emojîya kesanekirî jê bibe + destroy_domain_allow: Navperên mafdayî jê bibe + destroy_domain_block: Navperên astengkirî jê bibe + destroy_email_domain_block: Navperên e-nameyê yên astengkirî jê bibe + destroy_ip_block: Tomara IPyê jêbibe + destroy_status: Şandiyê jê bibe + destroy_unavailable_domain: Navperên tuneyî jê bibe + disable_2fa_user: 2FA neçalak bike + disable_custom_emoji: Emojîya kesanekirî neçalak bike + disable_sign_in_token_auth_user: Ji bo bikarhênerê piştrastkirina navnîşana e-name yê ya token neçalak bike + disable_user: Bikarhêner neçalak bike + enable_custom_emoji: Emojîya kesanekirî çalak bike + enable_sign_in_token_auth_user: Ji bo bikarhênerê piştrastkirina navnîşana e-name yê ya token çalak bike + enable_user: Bikarhêner çalak bike + memorialize_account: Ajimêrê bike bîranînek + promote_user: Bikarhêner pêş bixe + remove_avatar_user: Avatarê rake + reopen_report: Ragihandina ji nû ve veke + reset_password_user: Pêborînê ji nû ve saz bike + resolve_report: Ragihandinê çareser bike + sensitive_account: Ajimêra hêz-hestiyar + silence_account: Ajimêrê bi sînor bike + suspend_account: Ajimêr rawestîne + unassigned_report: Ragihandinê diyar neke + unsensitive_account: Medyayên di ajimêrê te de wek hestyarî nepejirîne + unsilence_account: Ajimêra sînorkirî vegerîne + unsuspend_account: Ajimêrê xwe ji rewestandinê rake + update_announcement: Daxûyaniyê rojane bike + update_custom_emoji: Emojîya kesanekirî rojane bike + update_domain_block: Navperên astengkirî rojane bike + update_status: Şandiyê rojane bike + actions: + assigned_to_self_report_html: "%{name} ji xwe re ragihandinek %{target} hilda" + change_email_user_html: "%{name} navnîşana e-nameya bikarhêner %{target} guherand" + confirm_user_html: "%{name} navnîşana e-nameya bikarhêner %{target} piştrast kir" + create_account_warning_html: "%{name} ji bo %{target} hişyariyek şand" + create_announcement_html: "%{name} agahdarkirineke nû çêkir %{target}" + create_custom_emoji_html: "%{name} emojîyeke nû ya %{target} bar kir" + create_domain_allow_html: "%{name} bi navperê %{target} re maf da federeyê" + create_domain_block_html: "%{name} ji navperê %{target} asteng kir" + create_email_domain_block_html: "%{name} e-name ya navperê %{target} asteng kir" + create_ip_block_html: "%{name} ji bo IPya %{target} rêzikname saz kir" + create_unavailable_domain_html: "%{name} bi navperê %{target} re gihandinê rawestand" + demote_user_html: "%{name} bikarhênerê %{target} kaşê jêr kir" + destroy_announcement_html: "%{name} daxûyaniyeke %{target} jê bir" + destroy_custom_emoji_html: "%{name} emojiya %{target} tune kir" + destroy_domain_allow_html: "%{name} bi navperê %{target} re maf neda federeyê" + destroy_domain_block_html: "%{name} navpera astengkirî %{target}" + destroy_email_domain_block_html: "%{name} e-name yê navpera %{target} asteng kirinê rakir" + destroy_ip_block_html: "%{name}, ji bo IPya %{target} rêziknameyê jêbir" + destroy_status_html: "%{name} ji alîyê %{target} ve şandiyê rakir" + destroy_unavailable_domain_html: "%{name} bi navperê %{target} re gihandinê berdewam kir" + disable_2fa_user_html: "%{name} ji bo bikarhênerê %{target} du faktorî neçalak kir" + disable_custom_emoji_html: "%{name} emojiya %{target} neçalak kir" + disable_sign_in_token_auth_user_html: "%{name} ji bo %{target} biştraskirina e-name ya token ne çalak kir" + disable_user_html: "%{name}, ji bo bikarhênerê %{target} têketinê neçalak kir" + enable_custom_emoji_html: "%{name} emojiya %{target} çalak kir" + enable_sign_in_token_auth_user_html: "%{name} ji bo %{target} biştraskirina e-name ya token çalak kir" + enable_user_html: "%{name}, ji bo bikarhênerê %{target} têketinê çalak kir" + memorialize_account_html: "%{name} ajimêra %{target} veguherand rûpeleke bîranînê" + promote_user_html: "%{name}, bikarhêner %{target} bilind kir" + remove_avatar_user_html: "%{name} avatara bikarhêner %{target} rakir" + reopen_report_html: "%{name} gilîyê %{target} ji nû ve vekir" + reset_password_user_html: "%{name} şifre ya bikarhênerê %{target} ji nû ve saz kir" + resolve_report_html: "%{name} gilîya %{target} çareser kir" + sensitive_account_html: "%{name} medyayê %{target} ê wek hestiyarî nîşan kir" + silence_account_html: "%{name} ajimêrê %{target} ê sînor kir" + suspend_account_html: "%{name} ajimêrê %{target} ê hilda rawestandinê" + unassigned_report_html: "%{name} gilîkirina %{target} rakir" + unsensitive_account_html: "%{name} medyayê %{target} ê nîşandana hestiyarî rakir" + unsilence_account_html: "%{name} bêdengiya ajimêrê %{target} ê rakir" + unsuspend_account_html: "%{name} ajimêrê %{target} ê de rawestandinê rakir" + update_announcement_html: "%{name} agahdarî ya%{target} rojane kir" + update_custom_emoji_html: "%{name} emojiyê %{target} rojane kir" + update_domain_block_html: "%{name} ji bo navperê %{target} asteng kirinê rojane kir" + update_status_html: "%{name} şandiya bikarhêner %{target} rojanekir" + deleted_status: "(şandiyeke jêbirî)" + empty: Tomarkirin nehate dîtin. + filter_by_action: Li gorî çalakiyê biparzinîne + filter_by_user: Li gorî bikarhênerê biparzinîne + title: Tomarê çavdêriyê + announcements: + destroyed_msg: Daxûyanî bi awayekî serkeftî hate jêbirin! + edit: + title: Daxûyaniyê serrast bike + empty: Daxûyanî nehat dîtin. + live: Zindî + new: + create: Daxûyaniyekê çê bike + title: Daxûyaniya nû + publish: Biweşîne + published_msg: Daxûyanî bi awayekî serkeftî hate weşan! + scheduled_for: Bo %{time} hatiye demsazkirin + scheduled_msg: Daxûyanî hate demsazkirin bo weşanê! + title: Daxuyanî + unpublish: Neweşîne + unpublished_msg: Daxûyanî bi awayekî serkeftî weşan pûç kir! + updated_msg: Daxûyanî bi awayekî serkeftî hate rojanekirin! + custom_emojis: + assign_category: Diyarkirina beşê + by_domain: Navper + copied_msg: Jêgirtiyê emojî ya herêmî bi serkeftî hate afirandin + copy: Jê bigire + copy_failed_msg: Jêgirtiyêke emojî ya herêmî nehate afirandin + create_new_category: Beşêke nû biafirîne + created_msg: Hestok bi serkeftî hate çêkirin! + delete: Jê bibe + destroyed_msg: Hestok bi serkeftî hate rûxandin! + disable: Neçalak bike + disabled: Neçalakkirî + disabled_msg: Ev hestok bi serkeftî hate neçalak kirin + emoji: Emoji + enable: Çalak bike + enabled: Çalakkirî + enabled_msg: Ev hestok bi serkeftî hate çalak kirin + image_hint: Mezinahiya pelê PNG heya 50Kb te + list: Rêzok + listed: Rêzokkirî + new: + title: Hestokên kesane yên nû lê zêde bike + not_permitted: Mafê te tune ku tu vê çalakiyê bikî + overwrite: Bi ser de binivsîne + shortcode: Kurtekod + shortcode_hint: Herê kêm 2 tîp, tenê tîpên alfahejmarî û yên bin xêzkirî + title: Hestokên kesane + uncategorized: Bêbeş + unlist: Dervî rêzokê + unlisted: Nerêzokkirî + update_failed_msg: Ev hestok nehate rojanekirin + updated_msg: Emojî bi awayekî serkeftî hate rojanekirin! + upload: Bar bike + dashboard: + active_users: bikarhênerên çalak + interactions: têgerîn + media_storage: Bîrdanaka medyayê + new_users: bikarhênerên nû + opened_reports: ragihandin hatin vekirin + pending_reports_html: + one: "1 ragihandin benda nirxandinê" + other: "%{count} ragihandin benda nirxandinê" + pending_tags_html: + one: "1 hashtag benda nirxandinê" + other: "%{count} hashtag benda nirxandinê" + pending_users_html: + one: "1 bikarhêner benda nirxandinê" + other: "%{count} bikarhêner benda nirxandinê" + resolved_reports: ragihandinên çareserkirî + software: Nermalav + sources: Çavkaniyên tomarkirî + space: Bikaranîna cîh + title: Destgeha venasînê + top_languages: Zimanên herî çalak + top_servers: Rajekarên herî çalak + website: Malpera tevnê + domain_allows: + add_new: Maf bide navpera federasyonê + created_msg: Ji bo federasyonê maf dayîna navperê bi serkeftî hate dayîn + destroyed_msg: Ji bo federasyonê maf dayîna navperê nehat dayîn + undo: Maf nede navpera federasyonê + domain_blocks: + add_new: Astengkirina navpera nû + created_msg: Navpera asteng kirinê nû hat şixulandin + destroyed_msg: Navpera asteng kirinê hat rakirin + domain: Navper + edit: Astengkirina navperê serrast bike + existing_domain_block_html: Te bi bandorê mezin sînor danî ser %{name}, Divê tu asteng kirinê rabikî, pêşî ya . + new: + create: Astengkirinekê çê bike + hint: Navpera asteng kirî pêşî li çê kirina têketinên ajimêra ên di danegehê da negire, lê dê bi paş ve bizivirin û bi xweberî va ji ajimêran bi teybetî kontrola rêbazan bikin. + severity: + desc_html: |- + Bêdeng kirî ajimêrên wusa çêkirine xêncî şopînerên vê kes nikare şandîyên vê bibîne. + rawestî ajimêrên wusa çêkirine hemî naveroka, medya û daneyên profîlê jê bibe. Heke tu bixwazî pelên medyayê red bikîyek ji wanbi kar bîne. + noop: Ne yek + silence: Bêdengî + suspend: Dur bike + title: Astengkirina navpera nû + obfuscate: Navê navperê biveşêre + obfuscate_hint: Heke rêzoka sînorên navperê were çalakkirin navê navperê di rêzokê de bi qismî veşêre + private_comment: Şîroveya taybet + private_comment_hint: Derbarê sînorkirina vê navperê da ji bo bikaranîna hundirîn a moderatoran şîrove bikin. + public_comment: Şîroveya gelemperî + public_comment_hint: Heke reklamkirina rêzoka sînorên navperê çalak be, derbarê sînorkirina vê navperê da ji bo raya giştî şîrove bikin. + reject_media: Pelên medyayê red bike + reject_media_hint: Pelên medyayê herêmî hatine tomarkirin radike û di pêşerojê de daxistinê red dike. Ji bo rawstandinê ne girîng e + reject_reports: Ragihandinan red bike + reject_reports_hint: Ragihandinên ku ji vê navperê tê paşguh bike. Ji bo dûrbûnê re ne guncav e + rejecting_media: pelên medyayê red bike + rejecting_reports: ragihandinê red bike + severity: + silence: sînorkirî + suspend: hatiye rawestandin + show: + affected_accounts: + one: Yek ajimêr di danegehê de bandor kir + other: "%{count} ajimêr di danegehê de bandor kir" + retroactive: + silence: Vê navperê de sînorê li ser hemî ajimêran rabike + suspend: Vê navperê de rawestandinê li ser hemî ajimêran rabike + title: Ji bo navperê %{domain} asteng kirinê hilde + undo: Vegerîne + undo: Astengkirina navperê vegerîne + view: Astengkirina navperê nîşan bike + email_domain_blocks: + add_new: Nû tevlî bike + created_msg: Bi serkeftî navpera e-name hat asteng kirin + delete: Jê bibe + destroyed_msg: Bi serkeftî navpera e-name yê ji asteng kirinê derket + domain: Navper + empty: Tu navperên e-nameyê astengkirî bo niha tune ne. + from_html: ji %{domain} + new: + create: Navper tevlî bike + title: Navparê e-nameyê nû asteng bike + title: Navparên e-nameyê astengkirî + follow_recommendations: + description_html: "Şopandina pêşniyaran ji bo bikarhênerên nû re dibe alîkar ku zû naveroka balkêş bibînin. Gava ku bikarhênerek têra xwe bi kesên din re têkildar nebê da ku pêşnîyarên şopandina yên kesane bo xwe çêbike, li şûna van ajimêran têne pêşniyarkirin. Ew her roj ji tevliheviya ajimêrên bi tevlêbûnên herî dawîn ên herî bilind û jimara şopdarên herêmî yên herî pir ji bo zimaneke diyarkirî ji nû ve têne pêşniyarkirin." + language: Bo zimanê + status: Rewş + suppress: Bi bandorek mezin pêşniyara şopandinê bike + suppressed: Bandoreke mezin dibe + title: Pêşniyarên şopandinê + unsuppress: Pêşniyara şopandinê paşve vegerîne + instances: + back_to_all: Hemû + back_to_limited: Sînorkirî + back_to_warning: Hişyarî + by_domain: Navper + delivery: + all: Hemû + clear: Çewtiyên gihandinê paqij bike + restart: Gihandinê nû va bike + stop: Gehandinê rawestîne + title: Gihiştin + unavailable: Nederbasdar + unavailable_message: Gihandin berdest nîne + warning: Hişyarî + warning_message: + one: Sernekeftina radestkirinê %{count} roj + other: Sernekeftina radestkirinê %{count} roj + delivery_available: Gihandin berdest e + delivery_error_days: Rojên çewtiyên gehandinê + delivery_error_hint: Ger gehandin %{count} rojan ne pêkan be ewê wek bixweber wê nayê gehandin were nîşandan. + empty: Tu navper nehatine dîtin. + known_accounts: + one: "%{count} ajimêra naskirî" + other: "%{count} ajimêrên naskirî" + moderation: + all: Hemû + limited: Sînorkirî + title: Çavdêrî + private_comment: Şîroveya taybet + public_comment: Şîroveya ji hemû kesî re vekirî + title: Giştî + total_blocked_by_us: Ji aliyê me ve hatiye astengkirin + total_followed_by_them: Ji aliyê wan ve hatiye şopandin + total_followed_by_us: Ji aliyê ve me hate şopandin + total_reported: Giliyên derheqê wan de + total_storage: Pêvekên medyayê + invites: + deactivate_all: Hemûyan neçalak bike + filter: + all: Hemû + available: Heye + expired: Dema wê qediya + title: Parzûn + title: Vexwendin + ip_blocks: + add_new: Rêbaz çê bike + created_msg: Rêzika nû a IPyê bi awayekî serkeftî hat tevlêkirin + delete: Jê bibe + expires_in: + '1209600': 2 hefte + '15778476': 6 meh + '2629746': 1 meh + '31556952': 1 sal + '86400': 1 roj + '94670856': 3 sal + new: + title: Rêzika nû a IPyê çêbike + no_ip_block_selected: Ji ber ku tu ajimêr nehat hilbijartin tu rêzika IPyê nehate guhertin + title: Rêbazên IP + pending_accounts: + title: Ajimêrên di dorê de ne (%{count}) + relationships: + title: Têkiliyên %{acct} + relays: + add_new: Guhêrkerê nû tevlê bike + delete: Jê bibe + description_html: "Guhêrkerê giştî rajekareke navberkar e ku hejmareke mezin ji şandiyan di navbera rajekaran ku jê re dibin endam û weşanê dikin diguherîne. Ew dikare ji rajekarên piçûk û navîn re bibe alîkar ku naveroka ji fendiverse ê bibîne, ku bi rengeke din pêdivî dike ku bikarhênerên herêmî bi desta li dû kesên din ên li rajekarên ji dûr be bişopînin." + disable: Neçalak bike + disabled: Neçalakkirî + enable: Çalak bike + enable_hint: Gava were çalakkirin, rajekara te dê ji hemî şandiyên giştî yên vê guhêrkerê re bibe endam, û dê dest bi şandina şandiyên giştî yên vê rajekarê bike. + enabled: Çalakkirî + inbox_url: URLa guhêrker + pending: Li benda pêjirandina guhêrker e + save_and_enable: Tomar û çalak bike + setup: Girêdanekê guhêrker saz bike + signatures_not_enabled: Dema ku moda ewle ya jî moda rêzoka spî çalak be guhêrker wê birêkûpêk nexebite + status: Rewş + title: Guhêrker + report_notes: + created_msg: Nîşeyê ragihandinê bi awayekî serkeftî pêk hat! + destroyed_msg: Nîşeyê ragihandinê bi awayekî serkeftî hate jêbirin! + reports: + account: + notes: + one: "%{count} nîşe" + other: "%{count} nîşe" + reports: + one: "%{count} gilî" + other: "%{count} gilî" + action_taken_by: Çalakî hate kirin ji aliyê + are_you_sure: Gelo tu bawerî? + assign_to_self: Bo min diyar bike + assigned: Çavdêrê diyarkirî + by_target_domain: Navperê ya ajimêrê ragihandî + comment: + none: Ne yek + created_at: Hate ragihandin + forwarded: Beralîkirî + forwarded_to: Beralîkirî bo %{domain} + mark_as_resolved: Wekî çareserkirî nîşan bide + mark_as_unresolved: Wekî neçareserkirî nîşan bide + notes: + create: Nîşe tevlî bike + create_and_resolve: Bi nîşe re çareser bike + create_and_unresolve: Bi nîşe re dîsa veke + delete: Jê bibe + placeholder: Bide nasîn ka çi çalakî hatine kirin, an jî heman rojanekirinên din ên têkildar... + reopen: Ragihandina ji nû ve veke + report: "@%{id} Ragihîne" + reported_account: Ajimêra ragihandî + reported_by: Ragihandî ji aliyê + resolved: Çareserkirî + resolved_msg: Ragihandin bi awayekî serkeftî hate çareserkirin! + status: Rewş + target_origin: Jêdera ajimêrê ragihandî + title: Ragihandinên + unassign: Diyar neke + unresolved: Neçareserkirî + updated_at: Rojanekirî + rules: + add_new: Rêbazekê tevlî bike + delete: Jê bibe + description_html: Dema ku piranîya dibêjin ku wan merçên karanînê xwendine û dipejirînin jî, bi gelemperî mirov heta ku pirsgirêkek dernekeve holê naxwîne. Bi peydakirina wan di navnîşek xala guleya rast de hêsantir bike ku tu rêbazên rajekera xwe li ser çavekî bibîne. Hewl bide ku rêbazênn yekkesî kurt û hêsan bihêlî, lê hewl bide ku wan tênexî gelek hêmanên cuda jî. + edit: Rêbazê serrast bike + empty: Tu rêbazên rajekar hê nehatine dîyarkirin. + title: Rêbazên rajekar + settings: + activity_api_enabled: + desc_html: Hejmara şandiyên weşandî yên herêmî, bikarhênerên çalak, û tomarkirin ên nû heftane + title: Tevahî amarên ên di derbarê çalakiya bikarhêneran de biweşîne + bootstrap_timeline_accounts: + desc_html: Navên bikarhênerên pir bi xalîçê veqetîne. Dê van ajimêran di pêşnîyarên jêrîn de werin xuyakirin + title: Van ajimêran ji bikarhênerên nû re pêşniyar bike + contact_information: + email: E-nameya karsazî + username: Bi bikarhêner re têkeve têkiliyê + custom_css: + desc_html: Bi CSS a ku li her rûpelê hatiye barkirin, awayê dîmenê biguherîne + title: CSS a kesanekirî + default_noindex: + desc_html: Hemû bikarhênerên ku ev sazkarî bi xwe neguhertiye bandor dike + title: Pêlrêçkirna bikarhêneran ji motorê lêgerînê dûr bixe + domain_blocks: + all: Bo herkesî + disabled: Bo tu kesî + title: Astengkirinên navperê nîşan bide + users: Ji bo bikarhênerên herêmî yên xwe tomar kirine + domain_blocks_rationale: + title: Sedemê nîşan bike + hero: + desc_html: Li ser rûpela pêşîn tê xuyakirin. Bi kêmanî 600x100px tê pêşniyarkirin. Dema ku neyê sazkirin, vedigere ser dîmena wêneya piçûk a rajekar + title: Wêneya lehengê + mascot: + desc_html: Li ser rûpela pêşîn tê xuyakirin. Bi kêmanî 293×205px tê pêşniyarkirin. Dema ku neyê sazkirin, vedigere ser dîmena wêneya piçûk a maskot ya heyî + title: Wêneya maskot + peers_api_enabled: + desc_html: Navê navperên ku ev rajekar di fendiverse de rastî wan hatiye + title: Rêzoka rajekarên hatiye dîtin di API-yê de biweşîne + preview_sensitive_media: + desc_html: Pêşdîtinên girêdanê yên li ser malperên din tevlî ku medya wekî hestyar hatiye nîşandan wê wekî wêneyekî piçûk nîşan bide + title: Medyayê hestyar nîşan bide di pêşdîtinên OpenGraph de + profile_directory: + desc_html: Mafê bide bikarhêneran ku bêne vedîtin + title: Pelrêçên profilê çalak bike + registrations: + closed_message: + desc_html: Gava ku tomarkirin têne girtin li ser rûpelê pêşîn têne xuyang kirin. Tu dikarî nîşanên HTML-ê bi kar bîne + title: Tomarkirinê girtî ya peyaman + deletion: + desc_html: Maf bide ku herkes bikaribe ajimêrê te jê bibe + title: Jê birina ajimêrê vekek + min_invite_role: + disabled: Ne yek + title: Maf bide vexwendinên ji alîyê + require_invite_text: + desc_html: Gava ku tomarkirin pêdiviya pejirandina destan dike, Têketina nivîsê "Tu çima dixwazî beşdar bibî?" Bibe sereke ji devla vebijêrkî be + title: Ji bo bikarhênerên nû divê ku sedemek tevlêbûnê binivîsinin + registrations_mode: + modes: + approved: Ji bo têketinê erêkirin pêwîste + none: Kesek nikare tomar bibe + open: Herkes dikare tomar bibe + title: Awayê tomarkirinê + show_known_fediverse_at_about_page: + desc_html: Dema ku neçalak be, demnameya gerdûnî ya ku ji rûpela zeviyê ve hatî girêdan tenê bi nîşandana naveroka herêmî tên sînorkirin + title: Li ser rûpela demnameya ne naskirî naveroka giştî nîşan bide + show_staff_badge: + desc_html: Di rûpela bikarhêner da rozeta xebatkaran nîşan bike + title: Rozeta xebatkara nîşan bike + site_description: + desc_html: Paragrafa destpêkê li ser API. Dide nasîn ka çi ev rajekarê Mastodon taybet dike û tiştên din ên girîn. Tu dikarî hashtagên HTML-ê, bi kar bîne di <a> û <em> de. + title: Danasîna rajekar + site_description_extended: + desc_html: Ji bo kodê perwerdetî, rêzik, rêbername û tiştên din ên ku rajekara te ji hev cihê dike cîhekî baş e. Tu dikarî hashtagên HTML-ê bi kar bîne + title: Zanyarên berfirehkirî ya rajekar + site_short_description: + desc_html: Ew di alavdanka kêlekê û tagên meta de tên xuyakirin. Di yek paragrafê de rave bike ka Mastodon çi ye û ya ku ev rajekar taybetî dike. + title: Danasîna rajekarê kurt + site_terms: + desc_html: Tu dikarî polîtika nihêniyê xwe, mercên karûbar an nameyên din binvisîne. Tu dikarî nîşanên HTML-ê bi kar bîne + title: Mercên bikaranîn a kesanekirî + site_title: Navê rajekar + thumbnail: + desc_html: Ji bo pêşdîtinên bi riya OpenGraph û API-yê têne bikaranîn. 1200x630px tê pêşniyar kirin + title: Wêneya piçûk a rajekar + timeline_preview: + desc_html: Girêdana demnameya gelemperî li ser rûpela daxistinê nîşan bide û mafê bide ku API bêyî rastandinê bigihîje damnameya gelemperî + title: Mafê bide gihîştina ne naskirî bo demnameya gelemperî + title: Sazkariyên malperê + trendable_by_default: + desc_html: Hashtagên ku berê hatibûn qedexekirin bandor dike + title: Bihêle ku hashtag bêyî nirxandinek pêşîn bibe rojev + trends: + desc_html: Hashtagên ku berê hatibûn nirxandin ên ku niha rojev in bi gelemperî bide xuyakirin + title: Hashtagên rojevê + site_uploads: + delete: Pela barkirî jê bibe + destroyed_msg: Barkirina malperê bi serkeftî hate jêbirin! + statuses: + back_to_account: Vegere bo rûpela ajimêr + batch: + delete: Jê bibe + nsfw_off: Wekî ne hestiyar nîşan bide + nsfw_on: Wekî hestiyar nîşan bide + deleted: Hate jêbirin + failed_to_execute: Bi ser neket + media: + title: Medya + no_media: Medya nîne + no_status_selected: Tu şandî nehat hilbijartin ji ber vê tu şandî jî nehat guhertin + title: Şandiyên ajimêr + with_media: Bi medya yê re + system_checks: + database_schema_check: + message_html: Koçberiyên databasê yên li bendê hene. Ji kerema xwe wan bişopîne da ku bicîh bikî ku sepan wekî ku tê hêvî kirin tevbigere + rules_check: + action: Rêzikên rajekara bi rê ve bibe + message_html: Te qet rêzikên rajekara diyar nekiriye. + sidekiq_process_check: + message_html: Pêvajoyên Sidekiq ên heyî ji bo %{value} di rêz (an) de tune ne. Ji kerema xwe sazkariyên Sidekiq a xwe binirxîne + tags: + accounts_today: Bikaranînên bêhempa yên îro + accounts_week: Bikaranînên bêhempa yên vê heftê + breakdown: Dabeşkirina bikaranîn yên îro li gorî çavkaniyan ve + last_active: Çalakiyên dawî + most_popular: Herî navdar + most_recent: Çalakiyên herî nû + name: Hashtag + review: Binêre rewşê + reviewed: Hate vekolandin + title: Hashtag + trending_right_now: Niha di rojevê de + unique_uses_today: "%{count} şandiyên îro" + unreviewed: Nehatiye nirxandin + updated_msg: Sazkariyên hashtag bi awayekî serkeftî hate rojanekirin + title: Rêvebirî + warning_presets: + add_new: Yeka nû tevlî bike + delete: Jê bibe + edit_preset: Hişyariyên pêşsazkirî serrast bike + empty: Te hin tu hişyariyên pêşsazkirî destnîşan nekirine. + title: Hişyariyên pêşsazkirî bi rêve bibe + admin_mailer: + new_pending_account: + body: Zanyariyênn ajimêra nû li jêr in. Tu dikarî vê serîlêdanê bipejirîne an pûç bike. + subject: "(%{username}) ajimêrê nû ji bo vekolandina li ser %{instance}" + new_report: + body: "%{reporter} ji %{target} ê ragihand" + body_remote: Kesekî bi navê %{domain} ji %{target} ê ragihand + subject: Ragihandinek nû ji bo %{instance} (#%{id}) + new_trending_tag: + body: 'Hashtaga #%{name} îro rojev e, lê berê nehatibû nirxandin. Heya ku tu mafê nedît, ew ê bi gelemperî neyê xuyang kirin, an jî tenê formê tomar bike ku ew e ku tu careke din li ser wê tiştekî nebîne.' + subject: "(#%{name}) Hashtagek nû ji bo vekolandina li ser%{instance}" + aliases: + add_new: Naveke sexte çê bike + created_msg: Bi serkeftî nûçikê nû hat çêkirin. Tu niha dikarî di ajimêrê xwe kevn bar bikî. + deleted_msg: Nûçik bi serkeftî hat rakirin. Êdî nepêkan e vê ajimêrê de barkirina ajimêrek din. + empty: Nûçikên te tune ne. + hint_html: Heke tu dixwazî ji ajimêreke din bar bike bo yekî din, li vir tu dikarî bernavekê biafirîne, ku pêdivî ye berî ku tu bi şopandina şopînerên xwe ji ajimêra kevn ber bi vê yekê biçe. Ev çalakî bi serê xwe bê ziyan û vegere.Koçberiya ajimêr ji ajimêreke kevin dest pê dike. + remove: Girêdana nûçikê rake + appearance: + advanced_web_interface: Navrûya tevnê yê pêşketî + advanced_web_interface_hint: 'Heke tu bixwazin tevahiya ferehiya dîmendera xwe bi kar bînî, navrûya pêşketî ya tevnê dihêle ku tu gelek stûnên cihêreng saz bikî da ku di heman demê de bi qasî ku tu dixwazî zanyariyan bibînî: Serrûpel, agahdarî, demnameya giştî, her hejmarek ji rêzik û hashtagan.' + animations_and_accessibility: Anîmasyon û gihînî + confirmation_dialogs: Gotûbêjên piştrastkirî + discovery: Vedîtin + localization: + body: Mastodon ji aliyê xêrxwazan tê wergerandin. + guide_link: https://crowdin.com/project/mastodon + guide_link_text: Herkes dikare beşdar bibe. + sensitive_content: Naveroka hestiyarî + toot_layout: Xêzkirina şandîya + application_mailer: + notification_preferences: Hevyazên e-name yê biguherîne + salutation: "%{name}," + settings: 'Hevyazên e-name yê biguherîne: %{link}' + view: 'Nîşan bide:' + view_profile: Profîlê nîşan bide + view_status: Şandiyê nîşan bide + applications: + created: Sepan bi awayekî serkeftî hat çêkirin + destroyed: Sepan bi awayekî serkeftî hat jêbirin + invalid_url: URL ya hatiye dayîn ne derbasdar e + regenerate_token: Nîşandera gihandinê bi nûve çêbike + token_regenerated: Nîşandera gihandinê bi serkeftî nû ve hat çêkirin + warning: Bi van daneyan re pir baldar be. Tu caran bi kesî re parve neke! + your_token: Nîşana gihîştina te + auth: + apply_for_account: Daxwaza vexwendinekê bike + change_password: Pêborîn + checkbox_agreement_html: Ez rêbazên rajeker û hêmanên karûbaran dipejirînim + checkbox_agreement_without_rules_html: Ez hêmanên karûbaran rêbazên rajeker dipejirînim + delete_account: Ajimêr jê bibe + delete_account_html: Heke tu dixwazî ajimêra xwe jê bibe, tu dikarî li vir bidomîne. Ji te tê xwestin ku were pejirandin. + description: + prefix_invited_by_user: "@%{name} te vedixwîne ku tu beşdarî vê rajekara Mastodon-ê bibî!" + prefix_sign_up: Îro li Mastodonê tomar bibe! + suffix: Bi ajimêrekê, tu yê karibî kesan bişopînî, rojanekirinan bişînî û bi bikarhênerên ji her rajekarê Mastodon re peyaman bişînî û bêhtir! + didnt_get_confirmation: Te rêwerzên pejirandinê wernegirt? + dont_have_your_security_key: Kilîda te ya ewlehiyê tune ye? + forgot_password: Te pêborîna xwe jibîrkir? + invalid_reset_password_token: Ji nû ve sazkirina pêborînê nederbasdar e an jî qediya ye. Jkx daxwaza yeka nû bike. + link_to_otp: Ji têlefona xwe an jî ji kodeke rizgarkirinê kodeke du-gavî binivîsine + link_to_webauth: Amûra kilîta ewlehiya xwe bi kar bîne + login: Têkeve + logout: Derkeve + migrate_account: Derbasî ajimêreke din bibe + migrate_account_html: Heke tu dixwazî ev ajimêr li ajimêreke cuda beralî bikî, tu dikarî ji vir de saz bike. + or_log_in_with: An têketinê bike bi riya + providers: + cas: CAS + saml: SAML + register: Tomar bibe + registration_closed: "%{instance} endamên nû napejirîne" + resend_confirmation: Rêwerên pejirandinê ji nû ve bişîne + reset_password: Pêborînê ji nû ve saz bike + security: Ewlehî + set_new_password: Pêborîneke nû ji nû ve saz bike + setup: + email_below_hint_html: Heke navnîşana e-nameya jêrîn ne rast be, tu dikarî wê li vir biguherîne û e-nameyeke pejirandinê ya nû bistîne. + email_settings_hint_html: E-nameya pejirandinê ji %{email} re hate şandin. Heke ew navnîşana e-nameyê ne rast be, tu dikarî wê di sazkariyên ajimêr de biguherîne. + title: Damezirandin + status: + account_status: Rewşa ajimêr + confirming: Li benda pejirandina e-nameyê ne da ku biqede. + functional: Ajimêra te êdî amade ye. + pending: Daxwaza te li benda vekolînê ji hêla xebatkarên me ye. Ev dibe ku hinek dem bigire. Heke daxwaza te were pejirandin tu yê e-nameyekê bistîne. + redirecting_to: Ajimêra te neçalak e ji ber ku niha ber bi %{acct} ve tê beralîkirin. + too_fast: Form pir zû hat şandin, dîsa biceribîne. + trouble_logging_in: Têketina te de pirsgirêk çêdibe? + use_security_key: Kilîteke ewlehiyê bikar bîne + authorize_follow: + already_following: Jixwe tu vê ajimêrê dişopînî + already_requested: Jixwe te ji vê ajimêrê re daxwazîya şopandinê şandi bû + error: Mixabin, dema ajimêr hat gerandin çewtiyek çêbû + follow: Bişopîne + follow_request: 'Te ji vê kesê re daxwazîya şopandinê şand:' + following: 'Serkeftin! Tu êdî dikarî bişopînî:' + post_follow: + close: An jî, tu dikarî tenê ev çarçoveyê bigirî. + return: Profîla vê bikarhênerê nîşan bike + web: Biçe tevneyê + title: Bişopîne %{acct} + challenge: + confirm: Bidomîne + hint_html: "Nîşe:Ji bo demjimêreke din em ê pêborîna te careke din ji te nexwazin." + invalid_password: Pêborîna nederbasdar + prompt: Ji bo bidomî lêborînê bipejirîne + crypto: + errors: + invalid_key: ed25519 ne derbasdare ne jî Curve25519 kilîta + invalid_signature: Ed25519 ne îmzeyek derbasdar e + date: + formats: + default: "%b%d%Y" + with_month_name: "%B %d, %Y" + datetime: + distance_in_words: + about_x_hours: "%{count}d" + about_x_months: "%{count}meh" + about_x_years: "%{count}sal" + almost_x_years: "%{count}sal" + half_a_minute: Hema niha + less_than_x_minutes: "%{count}xulek" + less_than_x_seconds: Hema niha + over_x_years: "%{count}sal" + x_days: "%{count}roj" + x_minutes: "%{count}xulek" + x_months: "%{count}meh" + x_seconds: "%{count}çirke" + deletes: + challenge_not_passed: Zanyariyên ku te nivîsandî ne rast in + confirm_password: Pêborîna xwe ya heyî binivîsine da ku nasnameya xwe piştrast bikî + confirm_username: Navê bikarhêneriyê xwe binivîse da ku prosedurê piştrast bike + proceed: Ajimêr jê bibe + success_msg: Ajimêra te bi serkeftî hate jêbirin + warning: + before: 'Berî ku tu pêşve biçî, jkx nvan nîşeyan bi baldarî bixwîne:' + caches: Naveroka ku ji hêla rajekarên din ve hatiye pêşbîrkirin dibe ku bimîne + data_removal: Şandiyên te û daneyên din wê bi awayekî dawî bêne rakirin + email_change_html: Tu dikarî navnîşana e-nameya xwe biguherînî bêyî ku tu ajimêra xwe jê bibî + email_contact_html: Heke ew hîn jî negihîştiye, tu dikarî ji bo alîkariyê %{email} e-nameyê bişînî + email_reconfirmation_html: Heke te e-nameya pejirandinê nesitand, tu dikarî dîsa daxwaz bike + irreversible: Tu yê nikaribe ajimêra xwe serrast bike an ji nû ve çalak bike + more_details_html: Bo bêhtir zanyarî, polîtika nihêniyê binêre. + username_available: Navê bikarhêneriyê te wê dîsa peyda bibe + username_unavailable: Navê bikarhêneriyê ye wê tuneyî bimîne + directories: + directory: Rêgeha profîlê + explanation: Bikarhêneran li gorî berjewendiyên wan bibîne + explore_mastodon: Vekole %{title} + domain_validator: + invalid_domain: ne naveke navper a derbasdar e + errors: + '400': Daxwaza ku te şand nederbasdar an çewt bû. + '403': Ji bo dîtina vê rûpelê mafê te nîn e. + '404': Rûpela ku tu lê digerî ne li vir e. + '406': Ev rûpel di awayê ku tê xwestin de peyda nabe. + '410': Ew rûpela ku tu lê digeriya êdî li vir nîne. + '422': + content: Rastekirina ewlehiyê têk çû. Ma tu kiloran asteng dikî? + title: Rastekirina ewlehiyê têk çû + '429': Gelek daxwazî + '500': + content: Em xemgîn in, lê tiştek di aliyê me de şaş çû. + title: Ev rûpel ne rast e + '503': Ji ber têkçûna rajekar a demkî rûpel nayê bikaranîn. + noscript_html: Ji bo ku tu sepanaa Mastodon a tevnê bi kar bîne, jkx JavaScript-ê çalak bike. Wekî din, yek ji sepanên xwemalî ji bo Mastodon ji bo platforma xwe biceribîne. + existing_username_validator: + not_found: nikaribû bikarhênerek herêmî bi wê navê bikarhêner bibîne + not_found_multiple: "%{usernames} nehat dîtin" + exports: + archive_takeout: + date: Dem + download: Arşîva xwe daxîne + hint_html: Tu dikarî arşîvek ji weşanên xwe û medyayên barkirî re bixwaze. Daneyên derxistî dê di forma ActivityPub de bin, ku ji hêla nermalava ku vê formê ve têne xwendin. Tu dikarî her 7 rojan arşîvekê bixwaze. + in_progress: Arşîve te tê berhev kirin... + request: Daxwaza arşîva ajimêra xwe bike + size: Mezinahî + blocks: Yên te astengkirî + bookmarks: Şûnpel + csv: CSV + domain_blocks: Navperên astengkirî + lists: Rêzok + mutes: Te bêdeng kir + storage: Bîrdanaka medyayê + featured_tags: + add_new: Yeka nû tevlî bike + errors: + limit: Te jixwe berê pirtirîn hashtag destnîşan kiriye + hint_html: " Hashtagên destnîşankirî çi ne? Ew bi eşkere li ser profîla te ya gelemperî têne xuyakirin û dihêlin ku mirov bi taybetî di binê wan hashtagan de li şandiyên te yên gelemperî bigere. Ew ji bo şopandina karên afirîner an projeyên demdirêj amûrek girîng in." + filters: + contexts: + account: Profîl + home: Serrûpel û rêzok + notifications: Agahdarî + public: Demnameya gelemperî + thread: Axaftin + edit: + title: Parzûnê serrast bike + errors: + invalid_context: Naverok tune ye yan jî nederbasdar tê peydakirin + invalid_irreversible: Tenê qadên agahdarkirinê û serrûpel bi parzûna bêveger re dixebitin + index: + delete: Jê bibe + empty: Parzûnên te tune ne. + title: Parzûn + new: + title: Parzûnek nû li zêde bike + footer: + developers: Pêşdebir + more: Bêtir… + resources: Çavkanî + trending_now: Niha rojevê de + generic: + all: Hemû + changes_saved_msg: Guhertin bi serkeftî tomar bû! + copy: Jê bigire + delete: Jê bibe + no_batch_actions_available: Di vê rûpelê da tu çalakîyên tevahî tune ne + order_by: Rêz bike bi + save_changes: Guhertinan tomar bike + validation_errors: + one: Tiştek hîn ne rast e! Ji kerema xwe çewtiya li jêr di ber çavan re derbas bike + other: Tiştek hîn ne rast e! Ji kerema xwe %{count} çewtî li jêr di ber çavan re derbas bike + html_validator: + invalid_markup: 'di nav de nîşana HTML a nederbasdar heye: %{error}' + identity_proofs: + active: Çalak + authorize: Erê, bide rastandin + authorize_connection_prompt: Tu dixwazî ev girêdana şîfrekirinê bidî rastandin? + errors: + failed: Girêdana şîfrekirinê têk çû. Ji kerema xwe dîsa biceribîne ji%{provider}. + keybase: + invalid_token: Nîşanên Keybase beşek ji îmzeyan in û divê 66 tîpên hex bin + verification_failed: Keybase vê wekî îmzeya bikarhênerê %{kb_username} nas nake. Ji kerema xwe ji Keybase dîsa biceribîne. + wrong_user: Dema ku wekî %{current} têketin dikî, ji bo %{proving} delîl nayê çêkirin. Wekî %{proving} têkeve û dîsa biceribîne. + explanation_html: Li vir tu dikarî nasnameyên xwe yên din ji platformên din, wek Keybase, bi şîfrekî ve girê bidî. Ev dihêle mirovên din ji te re peyamên şîfrekirî li ser wan platforman bişînin û dihêle ew pê bawer bin ku naveroka ku tu ji wan re dişînin ji te tê. + i_am_html: Ez %{username} li ser %{service}. + identity: Nasname + inactive: Neçalak e + publicize_checkbox: 'Û vê toot bike:' + publicize_toot: 'Hat eşkerekirin! Ez %{username} li ser %{service}: %{url}' + remove: Di ajimêrê de delîla rabike + removed: Delîl di ajimêrê de bi serkeftî hat rakirin + status: Piştrastkirina rewşê + view_proof: Delîlan nîşan bike + imports: + errors: + over_rows_processing_limit: ji %{count} zêdetir rêzok hene + modes: + merge: Bi hev re bike + merge_long: Tomarên heyî bigire û yên nû lê zêde bike + overwrite: Bi ser de binivsîne + overwrite_long: Tomarkirinên heyî bi yên nû re biguherîne + preface: Tu dikarî têxistin ê daneyên bike ku te ji rajekareke din derxistî ye wek rêzoka kesên ku tu dişopîne an jî asteng dike. + success: Daneyên te bi serkeftî hat barkirin û di dema xwe de were pêvajotin + types: + blocking: Rêzoka astengkirinê + bookmarks: Şûnpel + domain_blocking: Rêzoka navperên astengkirî + following: Rêzoka yên tên şopandin + muting: Rêzoka bêdengiyê + upload: Bar bike + in_memoriam_html: Di bîranînê de. + invites: + delete: Neçalak bike + expired: Dema wê qediya + expires_in: + '1800': 30 xulek + '21600': 6 demjimêr + '3600': 1 demjimêr + '43200': 12 demjimêr + '604800': 1 hefte + '86400': 1 roj + expires_in_prompt: Tu car + generate: Girêdana vexwendinê çê bike + invited_by: 'Tu hatî vexwendin ji hêla:' + max_uses: + one: 1 bikaranîn + other: "%{count} bikaranîn" + max_uses_prompt: Bê sînor + prompt: Girêdanan bi kesên din re çê bike û parve bike da ku bigihîjin vê rajekarê + table: + expires_at: Diqede + uses: Bikaranîn + title: Mirovan vexwîne + lists: + errors: + limit: Tu gihîştî hejmara rêzika a herî zêde + login_activities: + authentication_methods: + otp: sepandina rastandina du-gavî + password: pêborîn + sign_in_token: koda ewlehiyê bo e-nameyê + webauthn: kilîtên ewlehiyê + description_html: Heke çalakiya ku nas nakî dibînî, çêtir dibe ku pêborîna xwe biguherînî û rastandina du-gavî çalak bikî. + empty: Dîroka piştrastkirinê tune ye + failed_sign_in_html: Hewldana têketinê ser neket bi%{method} ji %{ip} (%{browser}) de + successful_sign_in_html: Bi serkeftî têketin bi %{method} ji %{ip}(%{browser}) çêbû + title: Dîroka piştrastkirinê + media_attachments: + validations: + images_and_video: Nikare vîdyoyekê tevlî şandiyê ku berê wêne tê de heye bike + not_ready: Nikare pelên ku pêvajo neqedandî ve girêbide. Di demekê de dîsa biceribîne! + too_many: Zedetirî 4 pelan nayê tevlêkirin + migrations: + acct: Hate lîvandin bo + cancel: Beralîkirinê red bike + cancel_explanation: Dev berdan ji beralîkirinê dê ajimêra te ya heyî ji nû ve çalak bike, lê şopgerên ku li wê ajimêrê hatine livandin venagerêne. + cancelled_msg: Beralîkirin bi serkeftî hate betal kirin. + errors: + already_moved: heman ajimêr e ku te berê lê bar kiriye ye + missing_also_known_as: ne nasnavê vê ajimêrê ye + move_to_self: nikare bibe ajimêra heyî + not_found: nehate dîtin + on_cooldown: Tu li ser sarbûnê yî + followers_count: Di dema tevgerê de şopîner + incoming_migrations: Derbasî ajimêreke din bibe + incoming_migrations_html: Ji bo ku tu ji ajimêrek din bar bikî vê yekê, pêşî divê tu ajimêreke bi bernaveke çê bike . + moved_msg: Ajimêrate niha li %{acct} tê rêve kirin (beralîkirin) û şopînerên te têne livandin bo wê. + not_redirecting: Ajimêra te niha bo ajimêreke din nayê beralîkirin. + on_cooldown: Te herî dawî dev ji ajimêra xwe berda. Ev fonksiyon dê di %{count} rojan de dîsa peyda bibe. + past_migrations: Koçên berê + proceed_with_move: Şopîneran bilivîne + redirected_msg: Ajimêra te niha bo %{acct} tê beralîkirin. + redirecting_to: Ajimêra te niha bo %{acct} tê beralîkirin. + set_redirect: Beralîkirin saz bike + warning: + backreference_required: Pêdivî ye ku ajimêra nû wekî referanseke paşîn a vê ajimêrê were sazkirin + before: 'Berî ku tu berdewam bikî, ji kerema xwe re van nîşaneyan bi baldarî bixwîne:' + cooldown: Piştî livandin demek heye ku di wê navberê de tu yê nikaribe dîsa bilive + disabled_account: Ajimêra te ya heyî dê paşê bi tevahî neyê bikaranîn. Lê belê, tu dikarî bigihîje derxistinê daneyan û hem jî ji nû ve çalakkirinê. + followers: Ev çalakî dê hemî şopînerên ji ajimêra heyî bar bike ajimêra nû + only_redirect_html: Wekî din, tu dikarî tenê beralîkirinekê li ser profîla xwe bicîh bike . + other_data: Daneyên din dê bi xweberî neyên livandin + redirect: Profîla ajimêra te ya heyî dê bi nîşeyeke beralîkirinê were nûve kirin û ji lêgerînan were bi dûrxistin + moderation: + title: Çavdêrî + move_handler: + carry_blocks_over_text: Ev bikarhêner ji %{acct}, ku te astengkirî bû, bar kir. + carry_mutes_over_text: Ev bikarhêner ji %{acct}, ku te bê deng kirbû, bar kir. + copy_account_note_text: 'Ev bikarhêner ji %{acct} livî ye, li vir nîşeyên te yên berê ku te di derbarê wî/ê de nivîsandiye:' + notification_mailer: + digest: + action: Hemû agahdariyan nîşan bide + body: Li vir kurteyeke peyamên ku li te derbasbûnd ji serdana te ya dawîn di %{since} de + mention: "%{name} behsa te kir:" + new_followers_summary: + one: Herwiha, dema tu dûr bûyî te şopînerek nû bi dest xist! Bijî! + other: Herwiha, dema tu dûr bûyî te %{count} şopînerek nû bi dest xist! Bijî! + subject: + one: "1 agahdarî ji serdana te ya herî dawî ji \U0001F418" + other: "%{count} agahdarî ji serdana te ya herî dawî ji \U0001F418" + title: Di tunebûna te de... + favourite: + body: 'Şandiya te hate bijartin ji alî %{name} ve:' + subject: "%{name} şandiya te hez kir" + title: Bijarteyek nû + follow: + body: "%{name} niha te dişopîne!" + subject: "%{name} niha te dişopîne" + title: Şopînereke nû + follow_request: + action: Daxwazên şopandinê bi rê ve bibe + body: "%{name} daxwaza şopandina te kir" + subject: Şopîner li bendê ye:%{name} + title: Daxwazeke şopandinê ya nû + mention: + action: Bersivê bide + body: 'Tu hatiyî qalkirin ji aliyê %{name}:' + subject: Tu hatiye qalkirin ji aliyê %{name} + title: Qalkirina nû + poll: + subject: Rapirsî ji hêla %{name} ve qediya + reblog: + body: 'Şandiye te hate bilindkirin ji hêla %{name} ve:' + subject: "%{name} şandiya te bilind kir" + title: Bilindkirinên nû + status: + subject: "%{name} niha şand" + notifications: + email_events: Bûyer bo agahdariyên e-nameyê + email_events_hint: 'Bûyera ku tu dixwazî agahdariyan jê wergerî hilbijêre:' + other_settings: Sazkariya agahdariyên din + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: Hezar + trillion: Trîlyon + otp_authentication: + code_hint: Ji bo pejirandinê têkeve koda te ya ku ji alîyê sepana piştraskirinê va hatiye çê kirin + description_html: Heke tubi piştrastkirina du-faktorî re sepana piştrastkirinê çalak bikî, ji bo têketinê hewceye telefona te li ba te be, ji bona têketinê te ra nîşaneyan çê bike. + enable: Çalak bike + instructions_html: "Vê kodê QR kontrol bike bi riya Google Authenticator an jî sepanekeTOTP li ser têlefona xwe . Ji niha û pê ve, ew sepan dê nîşanên ku divê tu binivîsîne dema têketinê de biafirîne." + manual_instructions: 'Heke tu nikarî bî koda QR venêrî û pêwîst be bi dest bikevî, ev nivîsê hêsan ê veşartî:' + setup: Saz bike + wrong_code: Koda têketinê betal e! Dema rajekarê û dema amûrê raste? + pagination: + newer: Nûtir + next: Pêş + older: Kevntir + prev: Paş + truncate: "…" + polls: + errors: + already_voted: Te berê deng dabû vê rapirsîyê + duplicate_options: tiştên dubare tê de hene + duration_too_long: di pêşerojê de pir dûr e + duration_too_short: gelek zû ye + expired: Jixwe rapirsî dawî bû + invalid_choice: Vebijarka dengdanê ya bijartî tune + over_character_limit: her yek ji %{max} karakterê dirêjtirîn nabe + too_few_options: divê ji yekî zêdetir tişt hebin + too_many_options: nikare ji %{max} hêmanan bêhtir pêk bê + preferences: + other: Yên din + posting_defaults: Berdestên şandiyê + public_timelines: Demnameya gelemperî + reactions: + errors: + limit_reached: Sînorê reaksiyonên cihêrengî gihîşte asta dawî + unrecognized_emoji: emojîyeke ne naskirî ye + relationships: + activity: Çalakiya ajimêrê + dormant: Xewok + follow_selected_followers: Şopînerên hilbijartî bişopîne + followers: Şopîner + following: Dişopîne + invited: Vexwendî + last_active: Çalakiya dawî + most_recent: Herî dawî + moved: Barkirî + mutual: Hevpar + primary: Sereke + relationship: Pêwendî + remove_selected_domains: Hemû şopînerên ji navpera hilbijartî rake + remove_selected_followers: Şopînerên hilbijartî rake + remove_selected_follows: Bikarhênerên hilbijartî neşopîne + status: Rewşa ajimêr + remote_follow: + acct: Navnîşana ajimêra xwe username@domain yê ku tu yê jê çalakî bikî binvsîne + missing_resource: Ji bona ajimêra te pêwistiya beralîkirina URLyê nehate dîtin + no_account_html: Ajimêra te tune? Tu dikarîli vir tomar bibe + proceed: Şopandinê bidomîne + prompt: 'Tu yê bişopînî:' + reason_html: "Ev gav ji bona çi pêwîst e?%{instance}rajekerên ku tu tomarkiriyî dibe ku tunebe, ji bona vê divê pêşî te beralîyê rajekera te bi xwe bikin." + remote_interaction: + favourite: + proceed: Ber bi bijarê ve biçe + prompt: 'Tu dixwazî vê şandiyê bibijêrî:' + reblog: + proceed: Bo bilindkirinê bidomîne + prompt: 'Tu dixwazî vê şandî ye rabikî:' + reply: + proceed: Bersivandinê bidomîne + prompt: 'Tu dixwazî bersiva vê şandiyê bidî:' + scheduled_statuses: + over_daily_limit: Te sînorê %{limit} şandiyên demsazkirî yên ji bo îro derbas kir + over_total_limit: Te sînorê %{limit} şandiyên demsazkirî derbas kir + too_soon: Dîroka bernamesazkirinê divê dîrokeke ji îro pêşvetir be + sessions: + activity: Çalakiya dawî + browser: Gerok + browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox + generic: Gerokeke nenas + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Nokia S40 Ovi Browser + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: Geroka QQ + safari: Safari + uc_browser: Geroka UCB + weibo: Weibo + current_session: Danişîna heyî + description: "%{platform} ser %{browser}" + explanation: Gerokên tevnê di dema heyî de hene ku têketin kirine di ajimêra te ya Mastodon. + ip: IP + platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: Chrome OS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: macOS + other: platforma nenas + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone + revoke: Rake + revoke_success: Danişîn bi serkeftî hate rakirin + title: Danîştin + view_authentication_history: Dîroka rastekirina ajimêra xwe bibîne + settings: + account: Ajimêr + account_settings: Sazkariyên ajimêr + aliases: Nûçikên ajimêra + appearance: Xuyang + authorized_apps: Rayedarê sepanan + back: Vegere bo Mastodon + delete: Jêbirina ajimêr + development: Pêşdebir + edit_profile: Profîlê serrast bike + export: Derxistinê daneyan + featured_tags: Hashtagên bijarte + identity_proofs: Delîlên nasnameyê + import: Têxistin + import_and_export: Têxistin û derxistin + migrate: Barkirina ajimêrê + notifications: Agahdarî + preferences: Hilbijarte + profile: Profîl + relationships: Yên tê şopandin û şopîner + statuses_cleanup: Bi xweberî va jê birina şandiya + two_factor_authentication: Piştrastkirinê du-faktorî + webauthn_authentication: Kilîdên ewlehiyê + statuses: + attached: + audio: + one: "%{count} deng" + other: "%{count} deng" + description: 'Pêvek: %{attached}' + image: + one: "%{count} wêne" + other: "%{count} wêne" + video: + one: "%{count} vîdyo" + other: "%{count} vîdyo" + boosted_from_html: Bilindkirî ji alî %{acct_link} ve + content_warning: 'Hişyariya naverokê: %{warning}' + disallowed_hashtags: + one: 'hashtagek bê maf tê de hebû: %{tags}' + other: 'hashtagek bê maf tê de hebû: %{tags}' + errors: + in_reply_not_found: Ew şandiya ku tu dikî nakî bersivê bide xuya nake an jî hatiye jêbirin. + language_detection: Bi xweberî ziman nas bike + open_in_web: Di tevnê de veke + over_character_limit: sînorê karakterê %{max} derbas kir + pin_errors: + limit: Jixwe te mezintirîn hejmara şandîyên xwe derzî kir + ownership: Şandiya kesekî din nay derzî kirin + private: Şandiyên negelemperî nayên daliqandin + reblog: Ev şandî nayê derzî kirin + poll: + total_people: + one: "%{count} kes" + other: "%{count} kes" + total_votes: + one: "%{count} deng" + other: "%{count} deng" + vote: Deng bide + show_more: Bêtir nîşan bide + show_newer: Nûtirîn nîşan bide + show_older: Kevntirîn nîşan bide + show_thread: Mijarê nîşan bide + sign_in_to_participate: Ji bo tevlî sohbetê bibî xwe tomar bike + title: "%{name}%{quote}" + visibilities: + direct: Rasterast + private: Tenê şopîneran + private_long: Tenê bo şopîneran nîşan bide + public: Gelemperî + public_long: Herkes dikare bibîne + unlisted: Nerêzokkirî + unlisted_long: Herkes dikare bibîne, lê di demnameya gelemperî de nayê rêz kirin + statuses_cleanup: + enabled: Şandiyên berê bi xweberî va jê bibe + enabled_hint: Gava ku ew gihîştibe sînorê temenê diyarkirî, şandiyên te bi xweberî jê dibe, ji bilî van awareteyên jêrîn + exceptions: Awarte + explanation: Ji ber ku jêbirina şandiyan pêvajoyeke biha ye, ev hêdî hêdî bi demê re tê kirin dema ku rajekar wekî din mijûl nebe. Ji ber vê sedemê, dibe ku şandiyên te demek şûnda ku bigihîjin sînorê temenê wê werin jêbirin. + ignore_favs: Ecibandinan paşguh bike + ignore_reblogs: Rakirina piştguh bike + interaction_exceptions: Awarteyên li ser bingehên têkiliyan + interaction_exceptions_explanation: Bizanibe ku heke şandiyeke ku ji binî ve têkeve jêrî bijare an bilindkirin ê piştî ku carek din di ser wan re derbas bibe, garantiyek tune ku werin jêbirin. + keep_direct: Peyamên rasterast veşêre + keep_direct_hint: Tu peyamên te yekcar jê naçe + keep_media: Peyamên bi pêvekên medyayê ve ne biveşêre + keep_media_hint: Yek ji peyamên te yê ku bi pêvekên medyayê ve ne jê nabe + keep_pinned: Peyamên xwe yên ku hatine derzîkirî veşêre + keep_pinned_hint: Yek ji peyamên te yê derzîkirî jê nabe + keep_polls: Rapirsîyan veşêre + keep_polls_hint: Yek ji rapirsiyên te jê nabe + keep_self_bookmark: Şandiyên ku wek şûnpel hatine tevlêkirin veşêre + keep_self_bookmark_hint: Şandî heke te wek şûnpel tomar kiriye we neyê jêbirin + keep_self_fav: Şandiyên ku te eciband veşêre + keep_self_fav_hint: Ger te şandiyên xwe ecibandibe jê nabe + min_age: + '1209600': 2 hefte + '15778476': 6 meh + '2629746': 1 meh + '31556952': 1 sal + '5259492': 2 meh + '63113904': 2 sal + '7889238': 3 meh + min_age_label: Şêmûga demê + min_favs: Peyamên ku ji wê zêdetir hatine ecibandin veşêre + min_favs_hint: Şandî ku ji evqas hezkirin wergirtibe nayê jêbirin. Vala bihêle da ku şandiyan jê bibî tevlî ku çiqas hezkirin wergirtibe + min_reblogs: Şandiyên ku zêdetir hatine rakirin veşêre + min_reblogs_hint: Şandî ku ji ji vê hejmarê bêtir bilindkirin wergirtibe nayê jêbirin. Vala bihêle da ku şandiyan jê bibî tevlî ku çiqas hezkirin wergirtibe + stream_entries: + pinned: Şandiya derzîkirî + reblogged: bilindkirî + sensitive_content: Naveroka hestiyarî + tags: + does_not_match_previous_name: bi navê berê re li hev nayê + terms: + body_html: | +

    Privacy Policy

    +

    What information do we collect?

    + +
      +
    • Basic account information: If you register on this server, you may be asked to enter a username, an e-mail address and a password. You may also enter additional profile information such as a display name and biography, and upload a profile picture and header image. The username, display name, biography, profile picture and header image are always listed publicly.
    • +
    • Posts, following and other public information: The list of people you follow is listed publicly, the same is true for your followers. When you submit a message, the date and time is stored as well as the application you submitted the message from. Messages may contain media attachments, such as pictures and videos. Public and unlisted posts are available publicly. When you feature a post on your profile, that is also publicly available information. Your posts are delivered to your followers, in some cases it means they are delivered to different servers and copies are stored there. When you delete posts, this is likewise delivered to your followers. The action of reblogging or favouriting another post is always public.
    • +
    • Direct and followers-only posts: All posts are stored and processed on the server. Followers-only posts are delivered to your followers and users who are mentioned in them, and direct posts are delivered only to users mentioned in them. In some cases it means they are delivered to different servers and copies are stored there. We make a good faith effort to limit the access to those posts only to authorized persons, but other servers may fail to do so. Therefore it's important to review servers your followers belong to. You may toggle an option to approve and reject new followers manually in the settings. Please keep in mind that the operators of the server and any receiving server may view such messages, and that recipients may screenshot, copy or otherwise re-share them. Do not share any dangerous information over Mastodon.
    • +
    • IPs and other metadata: When you log in, we record the IP address you log in from, as well as the name of your browser application. All the logged in sessions are available for your review and revocation in the settings. The latest IP address used is stored for up to 12 months. We also may retain server logs which include the IP address of every request to our server.
    • +
    + +
    + +

    What do we use your information for?

    + +

    Any of the information we collect from you may be used in the following ways:

    + +
      +
    • To provide the core functionality of Mastodon. You can only interact with other people's content and post your own content when you are logged in. For example, you may follow other people to view their combined posts in your own personalized home timeline.
    • +
    • To aid moderation of the community, for example comparing your IP address with other known ones to determine ban evasion or other violations.
    • +
    • The email address you provide may be used to send you information, notifications about other people interacting with your content or sending you messages, and to respond to inquiries, and/or other requests or questions.
    • +
    + +
    + +

    How do we protect your information?

    + +

    We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL, and your password is hashed using a strong one-way algorithm. You may enable two-factor authentication to further secure access to your account.

    + +
    + +

    What is our data retention policy?

    + +

    We will make a good faith effort to:

    + +
      +
    • Retain server logs containing the IP address of all requests to this server, in so far as such logs are kept, no more than 90 days.
    • +
    • Retain the IP addresses associated with registered users no more than 12 months.
    • +
    + +

    You can request and download an archive of your content, including your posts, media attachments, profile picture, and header image.

    + +

    You may irreversibly delete your account at any time.

    + +
    + +

    Do we use cookies?

    + +

    Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow). These cookies enable the site to recognize your browser and, if you have a registered account, associate it with your registered account.

    + +

    We use cookies to understand and save your preferences for future visits.

    + +
    + +

    Do we disclose any information to outside parties?

    + +

    We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety.

    + +

    Your public content may be downloaded by other servers in the network. Your public and followers-only posts are delivered to the servers where your followers reside, and direct messages are delivered to the servers of the recipients, in so far as those followers or recipients reside on a different server than this.

    + +

    When you authorize an application to use your account, depending on the scope of permissions you approve, it may access your public profile information, your following list, your followers, your lists, all your posts, and your favourites. Applications can never access your e-mail address or password.

    + +
    + +

    Site usage by children

    + +

    If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (General Data Protection Regulation) do not use this site.

    + +

    If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (Children's Online Privacy Protection Act) do not use this site.

    + +

    Law requirements can be different if this server is in another jurisdiction.

    + +
    + +

    Changes to our Privacy Policy

    + +

    If we decide to change our privacy policy, we will post those changes on this page.

    + +

    This document is CC-BY-SA. It was last updated March 7, 2018.

    + +

    Originally adapted from the Discourse privacy policy.

    + title: "%{instance} mercên bikaranîn û politîkayên nehêniyê" + themes: + contrast: Mastodon (dijberiya bilind) + default: Mastodon (Tarî) + mastodon-light: Mastodon (Ronahî) + time: + formats: + default: "%b %d, %Y, %H:%M" + month: "%b %Y" + two_factor_authentication: + add: Tevlî bike + disable: 2FA neçalak bike + disabled_success: Rastandina du-gavî bi serfirazî hate sekinandin + edit: Serrast bike + enabled: Rastandina du-gavî bi serfirazî hate çalak kirin + enabled_success: Rastandina du-gavî bi serfirazî hate çalak kirin + generate_recovery_codes: Kodên xilaskirinê çêbike + lost_recovery_codes: Ku telefon winda bibe kodên xilaskirinê derfet dide ku tu bigihijî ajimêra xwe. Heke te kodên xwe yê xilaskirinê winda kiribe tu dikarî ji vê derê dîsa ava bikî. Kodên te yê xilaskirinê ên kevin wê nederbasdar bibe. + methods: Rêbazên du-gavî + otp: Sepana Authenticator + recovery_codes: Kilîtên rizgarbûna hilanînê + recovery_codes_regenerated: Kilîtên rizgarbûna bi serkeftî hate nûvkirin + recovery_instructions_html: Heke gava te têlefona xwe winda kir, tu dikarî yek ji kodên rizgarkirinê yên jêrîn bi kar bîne da ku tu bigihîjî ajimêra xwe. Kodên rizgarkirinê li cihekî ewle biparêze . Mînakî, tu dikarî wan çap bikî û wan bi peldandkên din ên girîng re tomar bike. + webauthn: Kilîdên ewlehiyê + user_mailer: + 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 + sign_in_token: + details: 'Li vir hûrgiliyên hewldanê hene:' + explanation: 'Me hewildanek têketina ajimêra te ji navnîşana IPya nenas nas kir. Ger ev tu bî, ji kerema xwe koda ewlehiyê ya jêr têkeve rûpela jêpirsînê:' + further_actions: 'Ger ev ne tu bî, ji kerema xwe re şîfreya xwe biguherîne û li ser hesaba xwe rastkirina du-gavî çalak bike. Tu dikarî wê ji vê derê çêkî:' + subject: Ji kerema xwe re hewldanên têketinê piştrast bike + title: Hewldanên têketinê + warning: + explanation: + disable: Tu êdî nikarî têkevî ajimêra xwe an wê bi rengeke din bi kar bînî, lê profîla te û daneyên din saxlem dimînin. + sensitive: Pelên te yê medyayê a barkirî û girêdanên te yên medyayê wek hestiyarî wê bihê nirxandin. + silence: Gava ajimêra te sînorkirî be dîsa jî tu dikarî ajimêra xwe bi kar bînî lê tenê kesên ku berê te dişopînin dê şandiyên te li ser vê rajekarê bibînin, û dibe ku tu ji navnîşên cihêreng ên gelemperî bêne awaretkirin. Lêbelê, dibe ku yên din hîn te bişopînin bi destan. + suspend: Tu êdî nikarî têkevî ajimêra xwe, û profîla te û daneyên din êdî nayên gihîştin. Dîsa jî tu dikarî têkevî da ku hilanîna daneyên xwe daxwaz bikî heya ku dane bi tevahî werin rakirin, lê em ê hin daneyan biparêzin da ku tu ji rawestandinê rizgar bikin. + get_in_touch: Ji bo bi xebatkarên %{instance} têkilî deynî tu dikarî vê e-nameyê bibersivînî. + review_server_policies: Rêbazên rajeker lêkolîn bike + statuses: 'Bi taybetî, ji bo wê:' + subject: + disable: Ajimêra te a %{acct} hat qerisandin + none: Hişyarî bo %{acct} + sensitive: Ajimêra te %{acct} medyaya ku wek hestyar hatiye nîşandin weşandiye + silence: Ajimêra te ya %{acct} hate bisînorkirin + suspend: Ajimêra te %{acct} hate rawestandin + title: + disable: Ajimêr hate qerisandin + none: Hişyarî + sensitive: Medyayê te wekî hestyar hate nîşandan + silence: Ajimêr sînor kiriye + suspend: Ajimêr hatiye rawestandin + welcome: + edit_profile_action: Profîlê saz bike + edit_profile_step: Tu dikarî profîla xwe bi barkirina wêne, sernav, guherandina navê xuyangê xwe û bêhtir ve xweş bikî. Heke tu dixwazî şagirtên nû binirxînî berî ku mafê bidî ku ew te bişopînê, tu dikarî ajimêra xwe kilît bike. + explanation: Li vir çend serişte hene ku tu dest pê bike + final_action: Dest bi weşandinê bike + final_step: 'Dest bi weşandinê bike! Bêyî şopîneran jî dibe ku şandiyên te yên gelemperî ji hêla kesên din ve werin dîtin, mînakî li ser demjimêra herêmî û di hashtagan de. Dibe ku tu bixwazî xwe li ser hashtagê #nasname bidî nasandin.' + full_handle: Hemî destikê te + full_handle_hint: Ji hevalên xwe re, ji bona ji rajekarekê din peyam bişîne an jî ji bona ku te bikaribe bişopîne tişta ku tu bibêjî ev e. + review_preferences_action: Bijartinan biguherîne + review_preferences_step: Pê bawer be ku vebijêrkên xwe saz bikî, wek mînak kîjan e-nameyên ku tu dixwaziî wergirîne, an tu dixwazî weşanên te ji kîjan astê nehêniyê de kesanekirî bin. Heke nexweşiya te ya tevgerê tune be, tu dikarî hilbijêrî ku GIF ya xweser çalak bibe. + subject: Tu bi xêr hatî Mastodon + tip_federated_timeline: Demnameya giştî dimenêke gelemperî a Mastodon e. Lê tenê kesên ku ciranên te endamên wê ne dihewîne, ji ber vê yekê ew hemû nîne. + tip_following: Tu rêvebir (ên) rajeker wek berdest dişopînî. Ji bo mirovên balkêştir bibînî, demnameya herêmî û federasyonî kontrol bike. + tip_local_timeline: Demnameya herêmî, dimenêke bi giştî ye li ser %{instance} e. Ev ciranên te yên herî nêzik in! + tip_mobile_webapp: Ger geroka te ya desta pêşkêşî te bike ku tu Mastodon li ser ekrana xwe ya malê lê zêde bikî, tu dikarî agahdariyên push bistînî. Ew bi gelek awayan mîna serîlêdanek xwemalî tevdigere! + tips: Serbend + title: Bi xêr hatî, %{name}! + users: + follow_limit_reached: Tu nikarî zêdetirî %{limit} kesan bişopînî + generic_access_help_html: Di gihîştina ajimêrê te de pirsgirêk heye? Tu dikarî ji bo alîkariyê bi %{email} re têkilî deyne + invalid_otp_token: Koda du-gavî ya nelê + invalid_sign_in_token: Kilîda ewlehiyê a nelê + otp_lost_help_html: Heke te gihîştina herduyan ji dest da, dibe ku tu bi %{email} re têkilî deyne + seamless_external_login: Te bi servîsekî biyanî re têketina xwe kir, ji ber vê yekê şîfre û e-name nayê bikaranîn. + signed_in_as: 'Têketin wekî:' + suspicious_sign_in_confirmation: Xuya dike ku te berê têketin ji vê amûrê nekiriye, ji ber vê yekê em kodeke ewlehiyê ji navnîşana e-nameya te re dişînin da ku piştrast bikî ku tu ye an na. + verification: + explanation_html: 'Tu dikarî xwe wekî xwediyê girêdanên li daneyê meta profîla xwe piştrast bikî. Ji bo vê, hewceye girêda malperê di nav profîla te ya mastodonê de girêdanekî paş hebe. Girêdana paşhewceye taybetîyek rel="me"hebe. Naveroka nivîsa girêdanê ne girîng e. Ev jî mînakek e:' + verification: Piştrastkirin + webauthn_credentials: + add: Kilîteke ewlehiyê nû tevlî bike + create: + error: Gava Kilîteke ewlehiyê nû dihat tevlîkirin pirsgirêkek derket. Jkx dîsa biceribîne. + success: Tevlîkirina kilîteke ewlehiyê nû bi awayekî serkeftî qediya. + delete: Jê bibe + delete_confirmation: Ma tu bi rastî dixwazî ku ev kilîta ewlehiyê jê bibe? + description_html: Heker tu piştrastkirina kilîta ewlehiyê çalak bikî, Ji bo têketinê ger tu kilîtekî ewlehiyê bikarbînî. + destroy: + error: Dema kilîda ewlehiyê hate jêbirin pirsgirêkek peyda bû. Ji kerema xwe re careke din biceribîne. + success: Kilîda ewlehiyê bi awayekî serkeftî hatê jêbirin. + invalid_credential: Kilîda ewlehiyê a nelê + nickname_hint: Bernavka kilîda te ya ewlehiyê a nû têkevê + not_enabled: Te hê WebAuthn çalak nekiriye + not_supported: Ev gerok piştgiriya kilîtên ewlehiyê nakê + otp_required: Ji bo ku tu kilîtên ewlehiyê bikar bînî, ji kerema xwe re pêşî piştrastkirina du-gavî çalak bike. + registered_on: Di %{date} dîrokê de tomar bû diff --git a/config/locales/ko.yml b/config/locales/ko.yml index d23133198..c9d5238ee 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -113,8 +113,9 @@ ko: delete: 데이터 삭제 deleted: 삭제됨 demote: 강등 - destroyed_msg: "%{username}의 데이터는 곧 삭제되도록 큐에 들어갔습니다" + destroyed_msg: "%{username}의 데이터는 곧 삭제되도록 대기열에 들어갔습니다" disable: 비활성화 + disable_sign_in_token_auth: 이메일 토큰 인증 비활성화 disable_two_factor_authentication: 2단계 인증을 비활성화 disabled: 비활성화된 display_name: 이름 @@ -123,6 +124,7 @@ ko: email: 이메일 email_status: 이메일 상태 enable: 활성화 + enable_sign_in_token_auth: 이메일 토큰 인증 활성화 enabled: 활성 enabled_msg: "%{username}의 계정을 성공적으로 얼리기 해제하였습니다" followers: 팔로워 수 @@ -140,9 +142,9 @@ ko: title: 위치 login_status: 로그인 상태 media_attachments: 첨부된 미디어 - memorialize: 메모리엄으로 전환 - memorialized: 기념비화 됨 - memorialized_msg: 성공적으로 %{username}를 기념비 계정으로 전환하였습니다 + memorialize: 추모비로 전환 + memorialized: 추모비화 됨 + memorialized_msg: 성공적으로 %{username}를 추모비 계정으로 전환하였습니다 moderation: active: 활동 all: 전체 @@ -160,7 +162,7 @@ ko: perform_full_suspension: 정지시키기 promote: 승급 protocol: 프로토콜 - public: 전체 공개 + public: 공개 push_subscription_expires: PuSH 구독 기간 만료 redownload: 프로필 업데이트 redownloaded_msg: 성공적으로 %{username}의 프로필을 원본으로부터 업데이트 하였습니다 @@ -187,6 +189,10 @@ ko: search: 검색 search_same_email_domain: 같은 이메일 도메인을 가진 다른 사용자들 search_same_ip: 같은 IP의 다른 사용자들 + security_measures: + only_password: 암호만 + password_and_2fa: 암호와 2단계 인증 + password_and_sign_in_token: 암호와 이메일 토큰 sensitive: 민감함 sensitized: 민감함으로 설정됨 shared_inbox_url: 공유된 inbox URL @@ -195,10 +201,10 @@ ko: targeted_reports: 이 계정에 대한 신고 silence: 침묵 silenced: 침묵 됨 - statuses: 게시물 수 + statuses: 게시물 subscribe: 구독하기 suspended: 정지 됨 - suspension_irreversible: 이 계정의 데이터는 복구할 수 없도록 삭제 됩니다. 계정을 정지 해제함으로서 계정을 다시 사용 가능하게 할 수 있지만 이전에 삭제한 어떤 데이터도 복구되지 않습니다. + suspension_irreversible: 이 계정의 데이터는 복구할 수 없도록 삭제되었습니다. 계정을 정지 해제함으로서 계정을 다시 사용 가능하게 할 수 있지만 이전에 삭제한 어떤 데이터도 복구되지 않습니다. suspension_reversible_hint_html: 계정이 정지되었습니다, 그리고 %{date}에 데이터가 완전히 삭제될 것입니다. 그 때까지는 어떤 안 좋은 효과 없이 계정이 복구 될 수 있습니다. 만약 지금 당장 계정의 모든 데이터를 삭제하고 싶다면, 아래에서 행할 수 있습니다. time_in_queue: "%{time}동안 기다림" title: 계정 @@ -238,10 +244,12 @@ ko: destroy_unavailable_domain: 사용 불가능한 도메인 제거 disable_2fa_user: 2단계 인증 비활성화 disable_custom_emoji: 커스텀 에모지 비활성화 + disable_sign_in_token_auth_user: 사용자에 대한 이메일 토큰 인증 비활성화 disable_user: 사용자 비활성화 enable_custom_emoji: 커스텀 에모지 활성화 + enable_sign_in_token_auth_user: 사용자에 대한 이메일 토큰 인증 활성화 enable_user: 사용자 활성화 - memorialize_account: 계정을 장기 저장 + memorialize_account: 추모계정으로 전환 promote_user: 사용자 승급 remove_avatar_user: 아바타 지우기 reopen_report: 신고 다시 열기 @@ -281,10 +289,12 @@ ko: destroy_unavailable_domain_html: "%{name} 님이 도메인 %{target}에 대한 전달을 재개" disable_2fa_user_html: "%{name} 님이 사용자 %{target}의 2FA를 비활성화 했습니다" disable_custom_emoji_html: "%{name} 님이 에모지 %{target}를 비활성화 했습니다" + disable_sign_in_token_auth_user_html: "%{name} 님이 %{target} 님의 이메일 토큰 인증을 비활성화 했습니다" disable_user_html: "%{name} 님이 사용자 %{target}의 로그인을 비활성화 했습니다" enable_custom_emoji_html: "%{name} 님이 에모지 %{target}를 활성화 했습니다" + enable_sign_in_token_auth_user_html: "%{name} 님이 %{target} 님의 이메일 토큰 인증을 활성화 했습니다" enable_user_html: "%{name} 님이 사용자 %{target}의 로그인을 활성화 했습니다" - memorialize_account_html: "%{name} 님이 %{target}의 계정을 기념비 페이지로 전환했습니다" + memorialize_account_html: "%{name} 님이 %{target}의 계정을 추모비 페이지로 전환했습니다" promote_user_html: "%{name} 님이 사용자 %{target}를 승급시켰습니다" remove_avatar_user_html: "%{name} 님이 %{target}의 아바타를 지웠습니다" reopen_report_html: "%{name} 님이 신고 %{target}을 다시 열었습니다" @@ -341,7 +351,7 @@ ko: enabled: 활성됨 enabled_msg: 성공적으로 활성화하였습니다 image_hint: 50KB 이하의 PNG - list: 목록 + list: 목록에 추가 listed: 목록에 실림 new: title: 새 커스텀 에모지 추가 @@ -357,32 +367,9 @@ ko: updated_msg: 에모지가 성공적으로 업데이트 되었습니다! upload: 업로드 dashboard: - authorized_fetch_mode: 인증 된 페치 모드 - backlog: 미처리 된 작업 - config: 설정 - feature_deletions: 계정 삭제 - feature_invites: 초대 링크 - feature_profile_directory: 프로필 책자 - feature_registrations: 가입 - feature_relay: 연합 릴레이 - feature_timeline_preview: 타임라인 미리보기 - features: 기능 - hidden_service: 히든 서비스와의 연합 - open_reports: 미해결 신고 - pending_tags: 심사를 기다리는 해시태그 - pending_users: 심사를 기다리는 유저 - recent_users: 최근 가입 한 유저 - search: 전문 검색 - single_user_mode: 싱글 유저 모드 software: 소프트웨어 space: 디스크 사용량 title: 대시보드 - total_users: 총 유저 수 - trends: 트렌드 - week_interactions: 이번 주의 상호작용 - week_users_active: 이번 주의 활성 사용자 - week_users_new: 이번 주의 신규 유저 - whitelist_mode: 제한된 페더레이션 모드 domain_allows: add_new: 도메인 허용 created_msg: 도메인이 성공적으로 허용 목록에 추가되었습니다 @@ -400,7 +387,7 @@ ko: hint: 도메인 차단은 내부 데이터베이스에 계정이 생성되는 것까지는 막을 수 없지만, 그 도메인에서 생성된 계정에 자동적으로 특정한 중재 규칙을 적용하게 할 수 있습니다. severity: desc_html: |- - 침묵은 계정을 팔로우 하지 않고 있는 사람들에겐 계정의 툿을 보이지 않게 합니다. 정지는 계정의 컨텐츠, 미디어, 프로필 데이터를 삭제합니다. + 침묵은 계정을 팔로우 하지 않고 있는 사람들에겐 계정의 게시물을 보이지 않게 합니다. 정지는 계정의 컨텐츠, 미디어, 프로필 데이터를 삭제합니다. 미디어 파일만을 거부하고 싶다면 없음으로 두세요. noop: 없음 silence: 침묵 @@ -446,7 +433,7 @@ ko: follow_recommendations: description_html: "팔로우 추천은 새 사용자들이 관심 가는 콘텐트를 빠르게 찾을 수 있도록 도와줍니다. 사용자가 개인화 된 팔로우 추천이 만들어지기 위한 충분한 상호작용을 하지 않은 경우, 이 계정들이 대신 추천 됩니다. 이들은 해당 언어에 대해 많은 관심을 갖거나 많은 로컬 팔로워를 가지고 있는 계정들을 섞어서 날마다 다시 계산 됩니다." language: 할당할 언어 - status: 게시물 + status: 상태 suppress: 팔로우 추천 숨기기 suppressed: 숨겨짐 title: 팔로우 추천 @@ -519,7 +506,7 @@ ko: disable: 비활성화 disabled: 비활성화 됨 enable: 활성화 - enable_hint: 활성화 되면, 이 릴레이의 모든 공개 게시물을 구독하고 이 서버의 공개 툿을 전송하게 됩니다. + enable_hint: 활성화 되면, 이 릴레이의 모든 공개 게시물을 구독하고 이 서버의 공개 게시물을 전송하게 됩니다. enabled: 활성화 됨 inbox_url: 릴레이 URL pending: 릴레이의 승인 대기중 @@ -562,6 +549,7 @@ ko: resolved: 해결됨 resolved_msg: 리포트가 성공적으로 해결되었습니다! status: 상태 + target_origin: 신고된 계정의 소속 title: 신고 unassign: 할당 해제 unresolved: 미해결 @@ -631,7 +619,7 @@ ko: open: 누구나 가입 할 수 있음 title: 가입 모드 show_known_fediverse_at_about_page: - desc_html: 활성화 되면 프리뷰 페이지에서 페디버스의 모든 툿을 표시합니다. 비활성화시 로컬에 있는 툿만 표시 됩니다. + desc_html: 활성화 되면 프리뷰 페이지에서 페디버스의 모든 게시물을 표시합니다. 비활성화시 로컬에 있는 게시물만 표시 됩니다. title: 타임라인 프리뷰에 알려진 페디버스 표시하기 show_staff_badge: desc_html: 유저 페이지에 스태프 배지를 표시합니다 @@ -947,7 +935,7 @@ ko: i_am_html: 나는 %{service}의 %{username} 입니다. identity: 신원 inactive: 비활성 - publicize_checkbox: '그리고 이것을 툿 하세요:' + publicize_checkbox: '그리고 이것을 게시하세요:' publicize_toot: '증명되었습니다! 저는 %{service}에 있는 %{username}입니다: %{url}' remove: 계정증명 삭제 removed: 성공적으로 계정증명을 삭제했습니다 @@ -970,7 +958,7 @@ ko: following: 팔로우 중인 계정 목록 muting: 뮤트 중인 계정 목록 upload: 업로드 - in_memoriam_html: 메모리엄에 있음. + in_memoriam_html: 고인의 계정입니다. invites: delete: 비활성화 expired: 만료됨 @@ -995,6 +983,17 @@ ko: lists: errors: limit: 리스트 최대치에 도달했습니다 + login_activities: + authentication_methods: + otp: 2단계 인증 앱 + password: 암호 + sign_in_token: 이메일 보안 코드 + webauthn: 보안 키 + description_html: 확인되지 않은 활동이 보인다면, 암호를 바꾸거나 2단계 인증을 활성화 하는 것을 고려해 보세요. + empty: 인증 이력이 존재하지 않습니다 + failed_sign_in_html: 실패한 로그인 시도 %{method} %{ip} (%{browser}) + successful_sign_in_html: 성공한 로그인 시도 %{method} %{ip} (%{browser}) + title: 인증 이력 media_attachments: validations: images_and_video: 이미 사진이 첨부 된 게시물엔 동영상을 첨부 할 수 없습니다 @@ -1048,7 +1047,7 @@ ko: other: "%{count}건의 새로운 알림 \U0001F418" title: 당신이 없는 동안에... favourite: - body: "%{name} 님이 내 게시물을 즐겨찾기에 등록했습니다:" + body: '당신의 게시물을 %{name} 님이 즐겨찾기에 등록했습니다:' subject: "%{name} 님이 내 게시물을 즐겨찾기에 등록했습니다" title: 새 즐겨찾기 follow: @@ -1068,7 +1067,7 @@ ko: poll: subject: "%{name}의 투표가 종료되었습니다" reblog: - body: "%{name} 님이 내 게시물을 부스트 했습니다:" + body: '당신의 게시물을 %{name} 님이 부스트 했습니다:' subject: "%{name} 님이 내 게시물을 부스트 했습니다" title: 새 부스트 status: @@ -1199,6 +1198,7 @@ ko: revoke: 삭제 revoke_success: 세션이 성공적으로 삭제되었습니다 title: 세션 + view_authentication_history: 내 계정에 대한 인증 이력 보기 settings: account: 계정 account_settings: 계정 설정 @@ -1219,6 +1219,7 @@ ko: preferences: 사용자 설정 profile: 프로필 relationships: 팔로잉과 팔로워 + statuses_cleanup: 게시물 자동 삭제 two_factor_authentication: 2단계 인증 webauthn_authentication: 보안 키 statuses: @@ -1264,6 +1265,40 @@ ko: public_long: 누구나 볼 수 있으며, 공개 타임라인에 표시됩니다 unlisted: 공개 타임라인 비공개 unlisted_long: 누구나 볼 수 있지만, 공개 타임라인에는 표시되지 않습니다 + statuses_cleanup: + enabled: 오래된 게시물 자동 삭제 + enabled_hint: 아래의 예외 목록에 해당하지 않는다면, 명시된 기한 이후 당신의 게시물을 자동으로 삭제합니다 + exceptions: 예외 + explanation: 게시물 삭제는 많은 성능이 필요하기 때문에, 서버에서 바쁘지 않을 때 시간을 들여서 천천히 진행합니다. 이런 이유로, 당신의 게시물은 아마도 정해진 기간보다 좀 더 시간이 지난 이후에 삭제될 것입니다. + ignore_favs: 즐겨찾기 무시 + ignore_reblogs: 부스트 무시 + interaction_exceptions: 상호작용에 기반한 예외들 + interaction_exceptions_explanation: 즐겨찾기나 부스트 수가 설정한 값을 넘은 후 다시 낮아진 경우에는 게시물이 삭제되는 것을 보장하지 못합니다. + keep_direct: 다이렉트 메시지 유지 + keep_direct_hint: 다이렉트 메시지를 삭제하지 않습니다 + keep_media: 미디어가 있는 게시물 유지 + keep_media_hint: 미디어가 첨부된 게시물을 삭제하지 않습니다 + keep_pinned: 고정된 게시물 유지 + keep_pinned_hint: 고정 게시물을 삭제하지 않습니다 + keep_polls: 투표 유지 + keep_polls_hint: 투표를 삭제하지 않습니다 + keep_self_bookmark: 북마크된 게시물 유지 + keep_self_bookmark_hint: 내 스스로 북마크한 본인의 게시물을 삭제하지 않습니다 + keep_self_fav: 즐겨찾기한 게시물 유지 + keep_self_fav_hint: 내 스스로 즐겨찾기한 본인의 게시물을 삭제하지 않습니다 + min_age: + '1209600': 2 주 + '15778476': 6 개월 + '2629746': 1 개월 + '31556952': 1 년 + '5259492': 2 개월 + '63113904': 2 년 + '7889238': 3 개월 + min_age_label: 기한 + min_favs: 해당 횟수 이상 즐겨찾기된 게시물 유지 + min_favs_hint: 이 횟수 이상의 즐겨찾기가 된 게시물은 삭제하지 않습니다. 즐겨찾기 수와 관계없이 게시물을 지우고 싶다면 공백으로 두세요 + min_reblogs: 해당 횟수 이상 부스트된 게시물 유지 + min_reblogs_hint: 이 횟수 이상의 부스트가 된 게시물은 삭제하지 않습니다. 부스트 수와 관계없이 게시물을 지우고 싶다면 공백으로 두세요 stream_entries: pinned: 고정된 게시물 reblogged: 님이 부스트 했습니다 @@ -1276,7 +1311,7 @@ ko:

    우리가 어떤 정보를 수집하나요?

      -
    • 기본 계정 정보: 이 서버에 가입하실 때 유저네임, 이메일 주소, 패스워드 등을 입력 받게 됩니다. 추가적으로 디스플레이네임이나 자기소개, 프로필 이미지, 헤더 이미지 등의 프로필 정보를 입력하게 됩니다. 유저네임, 디스플레이네임, 자기소개, 프로필 이미지와 헤더 이미지는 언제나 공개적으로 게시됩니다.
    • +
    • 기본 계정 정보: 이 서버에 가입하실 때 사용자명, 이메일 주소, 패스워드 등을 입력 받게 됩니다. 추가적으로 표시되는 이름이나 자기소개, 프로필 이미지, 헤더 이미지 등의 프로필 정보를 입력하게 됩니다. 사용자명, 표시되는 이름, 자기소개, 프로필 이미지와 헤더 이미지는 언제나 공개적으로 게시됩니다.
    • 게시물, 팔로잉, 기타 공개된 정보: 당신이 팔로우 하는 사람들의 리스트는 공개됩니다. 당신을 팔로우 하는 사람들도 마찬가지입니다. 당신이 게시물을 작성하는 경우, 응용프로그램이 메시지를 받았을 때의 날짜와 시간이 기록 됩니다. 게시물은 그림이나 영상 등의 미디어를 포함할 수 있습니다. 퍼블릭과 미표시(unlisted) 게시물은 공개적으로 접근이 가능합니다. 프로필에 게시물을 고정하는 경우 마찬가지로 공개적으로 접근 가능한 정보가 됩니다. 당신의 게시물들은 당신의 팔로워들에게 전송 됩니다. 몇몇 경우 이것은 다른 서버에 전송되고 그곳에 사본이 저장 됩니다. 당신이 게시물을 삭제하는 경우 이 또한 당신의 팔로워들에게 전송 됩니다. 다른 게시물을 리블로깅 하거나 즐겨찾기 하는 경우 이는 언제나 공개적으로 제공 됩니다.
    • DM, 팔로워 공개 게시물: 모든 게시물들은 서버에서 처리되고 저장됩니다. 팔로워 공개 게시물은 당신의 팔로워와 멘션 된 사람들에게 전달이 됩니다. 다이렉트 메시지는 멘션 된 사람들에게만 전송 됩니다. 몇몇 경우 이것은 다른 서버에 전송 되고 그곳에 사본이 저장됨을 의미합니다. 우리는 이 게시물들이 권한을 가진 사람들만 열람이 가능하도록 노력을 할 것이지만 다른 서버에서는 이것이 실패할 수도 있습니다. 그러므로 당신의 팔로워들이 속한 서버를 재확인하는 것이 중요합니다. 당신은 새 팔로워를 수동으로 승인하거나 거절하도록 설정을 변경할 수 있습니다. 해당 서버의 운영자는 서버가 받는 메시지를 열람할 수 있다는 것을 항상 염두해 두세요, 그리고 수신자들은 스크린샷을 찍거나 복사하는 등의 방법으로 다시 공유할 수 있습니다. 위험한 정보를 마스토돈을 통해 공유하지 마세요.
    • IP와 기타 메타데이터: 당신이 로그인 하는 경우 IP 주소와 브라우저의 이름을 저장합니다. 모든 세션은 당신이 검토하고 취소할 수 있도록 설정에서 제공 됩니다. 마지막으로 사용 된 IP 주소는 최대 12개월 간 저장됩니다. 또한, 모든 요청에 대해 IP주소를 포함한 정보를 로그에 저장할 수 있습니다.
    • @@ -1308,7 +1343,7 @@ ko:
      • IP를 포함해 이 서버에 전송 되는 모든 요청에 대한 로그는 90일을 초과하여 저장되지 않습니다.
      • -
      • 가입 된 유저의 IP 정보는 12개월을 초과하여 저장 되지 않습니다.
      • +
      • 가입 된 사용자의 IP 정보는 12개월을 초과하여 저장 되지 않습니다.

      당신은 언제든지 게시물, 미디어 첨부, 프로필 이미지, 헤더 이미지를 포함한 당신의 컨텐트에 대한 아카이브를 요청하고 다운로드 할 수 있습니다.

      @@ -1392,7 +1427,7 @@ ko: disable: 당신의 계정이 동결 된 동안 당신의 계정은 유지 됩니다. 하지만 잠금이 풀릴 때까지 당신은 아무 것도 할 수 없습니다. sensitive: 당신의 업로드 한 미디어 파일들과 링크된 미디어들은 민감함으로 취급됩니다. silence: 당신의 계정이 제한 된 동안엔 당신의 팔로워 이외엔 게시물을 받아 볼 수 없고 공개 리스팅에서 제외 됩니다. 하지만 다른 사람들은 여전히 당신을 팔로우 가능합니다. - suspend: 당신의 계정은 정지 되었으며, 모든 툿과 업로드 한 미디어가 서버에서 삭제 되어 되돌릴 수 없습니다. + suspend: 당신의 계정은 정지 되었으며, 모든 게시물과 업로드 한 미디어가 서버에서 삭제 되어 되돌릴 수 없습니다. get_in_touch: 이 메일에 대해 답장해서 %{instance}의 스태프와 연락 할 수 있습니다. review_server_policies: 서버 정책 검토하기 statuses: '구체적으로:' diff --git a/config/locales/kw.yml b/config/locales/kw.yml index d34dc7529..62d535b1b 100644 --- a/config/locales/kw.yml +++ b/config/locales/kw.yml @@ -1,5 +1,15 @@ --- kw: + about: + about_this: A-dro dhe + accounts: + roles: + group: Bagas + admin: + accounts: + email: Ebost + followers: Holyoryon + title: Akontow errors: '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. @@ -10,3 +20,5 @@ kw: '429': Too many requests '500': '503': The page could not be served due to a temporary server failure. + settings: + account: Akont diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 1cf19c728..b0de04024 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -166,27 +166,9 @@ lt: updated_msg: Jaustukas sėkmingai pakeistas! upload: Įkelti dashboard: - backlog: Neatlikti darbai - config: Konfiguracija - feature_deletions: Paskyrų šalinimas - feature_invites: Pakivetimo nuorodos - feature_profile_directory: Profilio direktorija - feature_registrations: Registracijos - feature_relay: Federacijos perjungėjas - features: Išskirtinumai - hidden_service: Federacija su paslėptomis paslaugomis - open_reports: atidaryti skundai - recent_users: Neseni vartotojai - search: Pilno teksto paieška - single_user_mode: Vieno vartotojo būsena software: Programinė įranga space: Naudojama atmintis title: Pagrindinis puslapis - total_users: viso vartotoju - trends: Tendencijos - week_interactions: naudojimai šią savaitę - week_users_active: aktyvūs šią savaitę - week_users_new: vartotojai šią savaitę domain_blocks: add_new: Pridėti naują domeno bloką created_msg: Domeno užblokavimas nagrinėjamas diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 510458c5e..5b51b2bca 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1,5 +1,480 @@ --- lv: + about: + about_hashtag_html: Šīs ir publiskas ziņas, kas atzīmētas ar #%{hashtag} . Tu vari mijiedarboties ar viņiem, ja tev ir konts jebkurā federācijas vietnē. + about_mastodon_html: 'Nākotnes sociālais tīkls: bez reklāmām, bez korporatīvās uzraudzības, ētisks dizains un decentralizācija! Pārvaldi savus datus ar Mastodon!' + about_this: Par + active_count_after: aktīvs + active_footnote: Ikmēneša aktīvie lietotāji (IAL) + administered_by: 'Administrē:' + api: API + apps: Mobilās lietotnes + apps_platforms: Lieto Mastodon uz iOS, Android un citām platformām + browse_directory: Pārlūko profila direktoriju un atlasi pēc interesēm + browse_local_posts: Pārlūko publisko ziņu straumi no šī servera + browse_public_posts: Pārlūko publisko ziņu straumi no Mastodon + contact: Kontakts + contact_missing: Nav uzstādīts + contact_unavailable: N/A + discover_users: Atklāj lietotājus + documentation: Dokumentācija + federation_hint_html: Izmantojot kontu vietnē %{instance}, varēsi sekot cilvēkiem jebkurā Mastodon serverī un ārpus tā. + get_apps: Izmēģini mobilo lietotni + hosted_on: Mastodon mitināts %{domain} + instance_actor_flash: | + Šis konts ir virtuāls aktieris, ko izmanto, lai pārstāvētu pašu serveri, nevis atsevišķu lietotāju. + To izmanto apvienošanas nolūkos, un to nedrīkst bloķēt, ja vien nevēlies bloķēt visu instanci, un tādā gadījumā tev jāizmanto domēna bloķēšana. + learn_more: Uzzināt vairāk + privacy_policy: Privātuma politika + rules: Servera noteikumi + rules_html: 'Tālāk ir sniegts noteikumu kopsavilkums, kas jāievēro, ja vēlies izveidot kontu šajā Mastodon serverī:' + see_whats_happening: Redzēt, kas notiek + server_stats: 'Servera statistika:' + source_code: Pirmkods + status_count_after: + one: ziņa + other: ziņas + zero: nav + status_count_before: Kurš publicējis + tagline: Seko draugiem un atrodi jaunus + terms: Pakalpojuma noteikumi + unavailable_content: Moderētie serveri + unavailable_content_description: + domain: Serveris + reason: Iemesls + rejecting_media: 'Multivides faili no šiem serveriem netiks apstrādāti vai saglabāti, un netiks parādīti sīktēli, kuriem nepieciešama manuāla noklikšķināšana uz sākotnējā faila:' + rejecting_media_title: Filtrēts saturs + silenced: 'Ziņas no šiem serveriem tiks paslēptas publiskās ziņu lentās un sarunās, un no lietotāju mijiedarbības netiks ģenerēti paziņojumi, ja vien tu tiem nesekosi:' + silenced_title: Ierobežoti serveri + suspended: 'Nekādi dati no šiem serveriem netiks apstrādāti, uzglabāti vai apmainīti, padarot neiespējamu jebkādu mijiedarbību vai saziņu ar lietotājiem no šiem serveriem:' + suspended_title: Apturēti serveri + unavailable_content_html: Mastodon parasti ļauj apskatīt saturu un mijiedarboties ar lietotājiem no jebkura cita federācijas servera. Šie ir izņēmumi, kas veikti šajā konkrētajā serverī. + user_count_after: + one: lietotājs + other: lietotāji + zero: lietotājI + user_count_before: Mājās uz + what_is_mastodon: Kas ir Mastodon? + accounts: + choices_html: "%{name} izvēles:" + endorsements_hint: Jūs varat apstiprināt cilvēkus, kuriem sekojat no tīmekļa saskarnes, un viņi tiks parādīti šeit. + featured_tags_hint: Šeit vari norādīt īpašus tēmturus, kuri tiks parādīti šeit. + follow: Seko + following: Seko + instance_actor_flash: Šis konts ir virtuāls aktieris, ko izmanto, lai pārstāvētu pašu serveri, nevis atsevišķu lietotāju. To izmanto federācijas nolūkos, un to nevajadzētu apturēt. + joined: Pievienojās %{date} + last_active: pēdējā aktivitāte + link_verified_on: Šīs saites piederība tika pārbaudīta %{date} + media: Mediji + moved_html: "%{name} ir pārcēlies uz %{new_profile_link}:" + network_hidden: Šāda informācija nav pieejama + never_active: Nekad + nothing_here: Te nekā nav! + people_followed_by: Cilvēki, kuriem %{name} seko + people_who_follow: Cilvēki, kuri seko %{name} + pin_errors: + following: Tev jau ir jāseko personai, kuru vēlies apstiprināt + posts_tab_heading: Ziņas + posts_with_replies: Ziņas un atbildes + roles: + admin: Admins + bot: Bots + group: Grupa + moderator: Moder + unavailable: Profils nav pieejams + unfollow: Pārstāt sekot + admin: + account_actions: + action: Veikt darbību + title: Veikt moderācijas darbību %{acct} + account_moderation_notes: + create: Atstāt piezīmi + created_msg: Moderācijas piezīme ir veiksmīgi izveidota! + delete: Dzēst + destroyed_msg: Moderācijas piezīme ir veiksmīgi iznīcināta! + accounts: + add_email_domain_block: Bloķēt e-pasta domēnu + approve: Apstiprināt + approve_all: Apstiprināt visus + approved_msg: Veiksmīgi apstiprināts %{username} reģistrēšanās pieteikums + are_you_sure: Vai esi pārliecināts? + avatar: Avatars + by_domain: Domēns + change_email: + changed_msg: Konta e-pasts veiksmīgi nomainīts! + current_email: Pašreizējais e-pasts + label: Mainīt e-pastu + new_email: Jaunā e-pasta adrese + submit: Mainīt e-pastu + title: Mainīt e-pastu %{username} + confirm: Apstiprināt + confirmed: Apstiprināts + confirming: Apstiprina + delete: Dzēst datus + deleted: Dzēsts + demote: Pazemināt + destroyed_msg: Lietotāja %{username} dati tagad ievietoti rindā, lai tos nekavējoties izdzēstu + disable: Iesaldēt + disable_sign_in_token_auth: Atspējot autentifikāciju ar e-pasta marķieri + disable_two_factor_authentication: Atspējot 2FA + disabled: Iesaldēts + display_name: Parādāmais vārds + domain: Domēns + edit: Rediģēt + email: E-pasts + email_status: E-pasta statuss + enable: Atsaldēt + enable_sign_in_token_auth: Iespējot autentifikāciju ar e-pasta marķieri + enabled: Iespējots + enabled_msg: Veiksmīgi atsaldēts %{username} konts + followers: Sekotāji + follows: Seko + header: Galvene + inbox_url: Iesūtnes URL + invite_request_text: Pievienošanās iemesli + invited_by: Uzaicināja + ip: IP + joined: Pievienojies + location: + all: Visi + local: Vietējie + remote: Attālinātie + title: Atrašanās vieta + login_status: Pieteikšanās statuss + media_attachments: Mediju pielikumi + memorialize: Pārvērst atmiņās + memorialized: Piemiņa saglabāta + memorialized_msg: "%{username} veiksmīgi pārvērsts par piemiņas kontu" + moderation: + active: Aktīvie + all: Visi + pending: Gaida + silenced: Ierobežotie + suspended: Apturētie + title: Moderācija + moderation_notes: Moderācijas piezīmes + most_recent_activity: Pati pēdējā darbība + most_recent_ip: Pati pēdējā IP + no_account_selected: Neviens konts netika mainīts, jo neviens netika atlasīts + no_limits_imposed: Nav noteikti ierobežojumi + not_subscribed: Nav abonēts + pending: Gaida pārskatīšanu + perform_full_suspension: Apturēt + promote: Veicināt + protocol: Protokols + public: Publisks + push_subscription_expires: PuSH abonements beidzas + redownload: Atsvaidzināt profilu + redownloaded_msg: Veiksmīgi atsvaidzināts %{username} profils no izcelsmes + reject: Noraidīt + reject_all: Noraidīt visus + rejected_msg: Veiksmīgi noraidīts %{username} reģistrēšanās pieteikums + remove_avatar: Noņemt avatāru + remove_header: Noņemt galveni + removed_avatar_msg: Veiksmīgi noņemts %{username} avatāra attēls + removed_header_msg: Veiksmīgi noņemts %{username} galvenes attēls + resend_confirmation: + already_confirmed: Šis lietotājs jau ir apstiprināts + send: Atkārtoti nosūtīt apstiprinājuma e-pastu + success: Apstiprinājuma e-pasts veiksmīgi nosūtīts! + reset: Atiestatīt + reset_password: Atiestatīt paroli + resubscribe: Pieteikties vēlreiz + role: Privilēģijas + roles: + admin: Administrators + moderator: Moderators + user: Lietotājs + search: Meklēt + search_same_email_domain: Citi lietotāji ar tādu pašu e-pasta domēnu + search_same_ip: Citi lietotāji ar tādu pašu IP + security_measures: + only_password: Tikai parole + password_and_2fa: Parole un 2FA + password_and_sign_in_token: Parole un e-pasta marķieris + sensitive: Sensitīvs + sensitized: Atzīmēts kā sensitīvs + shared_inbox_url: Koplietotās iesūtnes URL + show: + created_reports: Sastādītie ziņojumi + targeted_reports: Ziņojuši citi + silence: Ierobežot + silenced: Ierobežots + statuses: Ziņas + subscribe: Abonēt + suspended: Apturēts + suspension_irreversible: Šī konta dati ir neatgriezeniski izdzēsti. Tu vari atcelt konta darbības apturēšanu, lai tas būtu izmantojams, taču tas neatjaunos iepriekšējos datus. + suspension_reversible_hint_html: Konta darbība ir apturēta, un dati tiks pilnībā noņemti %{date}. Līdz tam kontu var atjaunot bez jebkādām nelabvēlīgām sekām. Ja vēlies nekavējoties noņemt visus konta datus, to vari izdarīt zemāk. + time_in_queue: Gaida rindā %{time} + title: Konti + unconfirmed_email: Neapstiprināts e-pasts + undo_sensitized: Atcelt sensitivizēšanu + action_logs: + action_types: + unsuspend_account: Atcelt konta apturēšanu + update_announcement: Atjaunināt Paziņojumu + update_custom_emoji: Atjaunināt pielāgoto emocijzīmi + update_domain_block: Atjaunināt Domēna Bloku + update_status: Atjaunināt ziņu + actions: + assigned_to_self_report_html: "%{name} piešķīra pārskatu %{target} sev" + change_email_user_html: "%{name} nomainīja e-pasta adresi lietotājam %{target}" + confirm_user_html: "%{name} apstiprināja e-pasta adresi lietotājam %{target}" + create_account_warning_html: "%{name} nosūtīja brīdinājumu %{target}" + create_announcement_html: "%{name} izveidoja jaunu paziņojumu %{target}" + create_custom_emoji_html: "%{name} augšupielādēja jaunu emocijzīmi %{target}" + create_domain_allow_html: "%{name} atļāva federāciju ar domēnu %{target}" + create_domain_block_html: "%{name} bloķēja domēnu %{target}" + create_email_domain_block_html: "%{name} bloķēja e-pasta domēnu %{target}" + create_ip_block_html: "%{name} izveidoja nosacījumu priekš IP %{target}" + create_unavailable_domain_html: "%{name} apturēja piegādi uz domēnu %{target}" + demote_user_html: "%{name} pazemināja lietotāju %{target}" + destroy_announcement_html: "%{name} izdzēsa paziņojumu %{target}" + destroy_custom_emoji_html: "%{name} iznīcināja emocijzīmi %{target}" + destroy_domain_allow_html: "%{name} neatļāva federāciju ar domēnu %{target}" + destroy_domain_block_html: "%{name} atbloķēja domēnu %{target}" + destroy_email_domain_block_html: "%{name} atbloķēja e-pasta domēnu %{target}" + destroy_ip_block_html: "%{name} izdzēsa nosacījumu priekš IP %{target}" + destroy_status_html: "%{name} noņēma ziņu %{target}" + destroy_unavailable_domain_html: "%{name} atjaunoja piegādi uz domēnu %{target}" + disable_2fa_user_html: "%{name} atspējoja divfaktoru prasības lietotājam %{target}" + disable_custom_emoji_html: "%{name} atspējoja emocijzīmi %{target}" + disable_sign_in_token_auth_user_html: "%{name} atspējoja e-pasta marķiera autentifikāciju %{target}" + disable_user_html: "%{name} atspējoja pieteikšanos lietotājam %{target}" + enable_custom_emoji_html: "%{name} iespējoja emocijzīmi %{target}" + enable_sign_in_token_auth_user_html: "%{name} iespējoja e-pasta marķiera autentifikāciju %{target}" + enable_user_html: "%{name} iespējoja pieteikšanos lietotājam %{target}" + memorialize_account_html: "%{name} pārvērta %{target} kontu par atmiņas lapu" + promote_user_html: "%{name} paaugstināja lietotāju %{target}" + remove_avatar_user_html: "%{name} noņēma %{target} avatāru" + reopen_report_html: "%{name} atkārtoti atvēra ziņojumu %{target}" + reset_password_user_html: "%{name} atiestatīja paroli lietotājam %{target}" + resolve_report_html: "%{name} atrisināja ziņojumu %{target}" + sensitive_account_html: "%{name} atzīmēja %{target} mediju kā sensitīvu" + silence_account_html: "%{name} ierobežoja %{target} kontu" + suspend_account_html: "%{name} apturēja %{target} kontu" + unassigned_report_html: "%{name} nepiešķīra ziņojumu %{target}" + unsensitive_account_html: "%{name} atmarķēja %{target} mediju kā sensitīvu" + unsilence_account_html: "%{name} atcēla ierobežojumu %{target} kontam" + unsuspend_account_html: "%{name} neapturēja %{target} kontu" + update_announcement_html: "%{name} atjaunināja paziņojumu %{target}" + update_custom_emoji_html: "%{name} atjaunināja emocijzīmi %{target}" + update_domain_block_html: "%{name} atjaunināja domēna bloku %{target}" + update_status_html: "%{name} atjaunināja ziņu %{target}" + deleted_status: "(dzēsta ziņa)" + empty: Žurnāli nav atrasti. + filter_by_action: Filtrēt pēc darbības + filter_by_user: Filtrēt pēc lietotāja + title: Auditācijas pieraksti + announcements: + destroyed_msg: Paziņojums ir veiksmīgi izdzēsts! + edit: + title: Rediģēt paziņojumu + empty: Neviens paziņojums netika atrasts. + live: Dzīvajā + new: + create: Izveidot paziņojumu + title: Jauns paziņojums + publish: Publicēt + published_msg: Paziņojums ir veiksmīgi publicēts! + scheduled_for: Plānots uz %{time} + scheduled_msg: Paziņojums ieplānots publicēšanai! + title: Paziņojumi + unpublish: Atcelt publicēšanu + unpublished_msg: Paziņojuma publicēšana veiksmīgi atcelta! + updated_msg: Paziņojums ir veiksmīgi atjaunināts! + custom_emojis: + assign_category: Piešķirt kategoriju + by_domain: Domēns + copied_msg: Emocijas vietējā kopija ir veiksmīgi izveidota + copy: Kopēt + copy_failed_msg: Nevarēja izveidot šīs emocijzīmes vietējo kopiju + create_new_category: Izveidot jaunu kategoriju + created_msg: Emocijzīme veiksmīgi izveidota! + delete: Dzēst + destroyed_msg: Emocijzīme ir veiksmīgi iznīcināta! + disable: Atspējot + disabled: Atspējots + disabled_msg: Šī emocijzīme ir veiksmīgi atspējota + emoji: Emocijzīmes + enable: Iespējot + enabled: Iespējots + enabled_msg: Šī emocijzīme ir veiksmīgi iespējota + image_hint: PNG līdz 50 KB + list: Saraksts + listed: Uzrakstītas + new: + title: Pievienojiet jaunas pielāgotās emocijzīmes + not_permitted: Tev nav atļauts veikt šo darbību + overwrite: Pārrakstīt + shortcode: Īskods + shortcode_hint: Vismaz 2 rakstzīmes, tikai burtciparu rakstzīmes un pasvītrojumi + title: Pielāgotās emocijzīmes + uncategorized: Nekategorizētās + unlist: Izslēgt + unlisted: Neminētie + update_failed_msg: Nevarēja atjaunināt šo emocijzīmi + updated_msg: Emocijzīme veiksmīgi atjaunināta! + upload: Augšupielādēt + dashboard: + active_users: aktīvie lietotāji + software: Programmatūra + space: Vietas izmantošana + title: Panelis + domain_allows: + add_new: Atļaut federāciju ar domēnu + created_msg: Domēns ir veiksmīgi atļauts federācijai + destroyed_msg: Domēns ir aizliegts federācijai + undo: Aizliegt federāciju ar domēnu + domain_blocks: + add_new: Pievienot jaunu domēna bloku + created_msg: Domēna bloķēšana tagad tiek apstrādāta + destroyed_msg: Domēna bloķēšana ir atsaukta + domain: Domēns + edit: Rediģēt domēna bloķēšanu + email_domain_blocks: + title: Bloķētie e-pasta domēni + follow_recommendations: + description_html: "Sekošana rekomendācijām palīdz jaunajiem lietotājiem ātri atrast interesantu saturu. Ja lietotājs nav pietiekami mijiedarbojies ar citiem, lai izveidotu personalizētus ieteikumus, ieteicams izmantot šos kontus. Tie tiek pārrēķināti katru dienu, izmantojot vairākus kontus ar visaugstākajām pēdējā laika saistībām un vislielāko vietējo sekotāju skaitu noteiktā valodā." + language: Valodai + status: Statuss + suppress: Apspiest sekošanas rekomendāciju + suppressed: Apspiestie + title: Sekošanas rekomendācijas + unsuppress: Atjaunot sekošanas rekomendāciju + instances: + back_to_all: Visas + back_to_limited: Ierobežotās + back_to_warning: Brīdinājums + by_domain: Domēns + delivery: + all: Visas + clear: Notīrīt piegādes kļūdas + restart: Pārstartēt piegādi + stop: Apturēt piegādi + title: Piegāde + unavailable: Nav pieejams + unavailable_message: Piegāde nav iespējama + warning: Brīdinājums + delivery_available: Piegāde ir iespējama + delivery_error_days: Piegādes kļūdu dienas + delivery_error_hint: Ja piegāde nav iespējama %{count} dienas, tā tiks automātiski atzīmēta kā nepiegādājama. + empty: Domēni nav atrasti. + moderation: + all: Visas + limited: Ierobežotās + title: Moderācija + private_comment: Privāts komentārs + public_comment: Publisks komentārs + title: Federācija + total_blocked_by_us: Mūsu bloķēta + total_followed_by_them: Viņiem seko + total_followed_by_us: Mums seko + total_reported: Ziņojumi par viņiem + total_storage: Mediju pielikumi + invites: + deactivate_all: Deaktivēt visu + filter: + all: Visus + available: Pieejams + expired: Derīguma termiņš beidzies + title: Filtrēt + title: Uzaicinājumi + ip_blocks: + add_new: Izveidot noteikumu + created_msg: Veiksmīgi pievienots jauns IP noteikums + delete: Dzēst + expires_in: + '1209600': 2 nedēļas + '15778476': 6 mēneši + '2629746': 1 mēnesis + '31556952': 1 gads + '86400': 1 day + '94670856': 3 years + reports: + title: Ziņojumi + unassign: Atsaukt + unresolved: Neatrisinātie + updated_at: Atjaunināts + rules: + add_new: Pievienot noteikumu + delete: Dzēst + description_html: Lai gan lielākā daļa apgalvo, ka ir izlasījuši pakalpojumu sniegšanas noteikumus un piekrīt tiem, parasti cilvēki to izlasa tikai pēc problēmas rašanās. Padariet vienkāršāku sava servera noteikumu uztveršanu, veidojot tos vienkāršā sarakstā pa punktiem. Centieties, lai atsevišķi noteikumi būtu īsi un vienkārši, taču arī nesadaliet tos daudzos atsevišķos vienumos. + edit: Rediģēt noteikumu + empty: Servera noteikumi vēl nav definēti. + title: Servera noteikumi + settings: + activity_api_enabled: + desc_html: Vietēji publicēto ziņu, aktīvo lietotāju un jauno reģistrāciju skaits nedēļas kopās + title: Publicējiet apkopotu statistiku par lietotāju darbībām API + bootstrap_timeline_accounts: + desc_html: Atdaliet vairākus lietotājvārdus ar komatu. Tiks garantēts, ka šie konti tiks parādīti ieteikumos + title: Iesaki šos kontus jaunajiem lietotājiem + contact_information: + email: Lietišķais e-pasts + username: Saziņas lietotājvārds + custom_css: + desc_html: Maini izskatu, izmantojot CSS, kas ielādēta katrā lapā + title: Pielāgota CSS + default_noindex: + desc_html: Ietekmē visus lietotājus, kuri paši nav mainījuši šo iestatījumu + title: Pēc noklusējuma lietotāji būs atteikušies no meklētājprogrammu indeksēšanas + domain_blocks: + all: Visiem + disabled: Nevienam + title: Rādīt domēnu bloķēšanas + users: Vietējiem reģistrētiem lietotājiem + domain_blocks_rationale: + title: Rādīt pamatojumus + hero: + desc_html: Parādīts pirmajā lapā. Ieteicams vismaz 600x100 pikseļus. Ja tas nav iestatīts, atgriežas servera sīktēlā + title: Varoņa attēls + mascot: + desc_html: Parādīts vairākās lapās. Ieteicams vismaz 293 × 205 pikseļi. Ja tas nav iestatīts, tiek atgriezts noklusējuma talismans + title: Talismana attēls + peers_api_enabled: + desc_html: Domēna vārdi, ar kuriem šis serveris ir saskāries fediversā + title: Publicēt API atklāto serveru sarakstu + preview_sensitive_media: + desc_html: Saites priekšskatījumus citās vietnēs parādīs kā sīktēlu pat tad, ja medijs ir atzīmēts kā sensitīvs + title: Parādīt sensitīvos medijus OpenGraph priekšskatījumos + profile_directory: + desc_html: Atļaut lietotājiem būt atklājamiem + title: Iespējot profila direktoriju + registrations: + closed_message: + desc_html: Tiek parādīts sākumlapā, kad reģistrācija ir slēgta. Tu vari izmantot HTML tagus + title: Paziņojums par slēgtu reģistrāciju + deletion: + desc_html: Atļaut ikvienam dzēst savu kontu + title: Atvērt konta dzēšanu + min_invite_role: + disabled: Nevienam + title: Atļaut uzaicinājumus + require_invite_text: + desc_html: 'Ja reģistrācijai nepieciešama manuāla apstiprināšana, izdari, lai teksta: “Kāpēc vēlaties pievienoties?” ievade ir obligāta, nevis neobligāts' + title: Pieprasīt jauniem lietotājiem ievadīt pievienošanās iemeslu + registrations_mode: + modes: + approved: Reģistrācijai nepieciešams apstiprinājums + none: Neviens nevar reģistrēties + open: Jebkurš var reģistrēties + title: Reģistrācijas režīms + show_known_fediverse_at_about_page: + desc_html: Ja šī funkcija ir atspējota, tā ierobežo publisko ziņu lentu, kas ir saistīta ar galveno lapu, lai parādītu tikai vietējo saturu + title: Iekļaut federēto saturu neautentificētā publiskā ziņu lentas lapā + show_staff_badge: + desc_html: Parādiet personāla emblēmu lietotāja lapā + title: Administrēšana + warning_presets: + add_new: Pievienot jaunu + delete: Dzēst + edit_preset: Labot iepriekš iestatītus brīdinājumus + empty: Tu vēl neesi definējis iepriekš iestatītos brīdinājumus. + title: Pārvaldīt brīdinājuma iestatījumus + admin_mailer: + new_pending_account: + body: Sīkāka informācija par jauno kontu ir sniegta zemāk. Tu vari apstiprināt vai noraidīt šo pieteikumu. errors: '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. diff --git a/config/locales/ml.yml b/config/locales/ml.yml index a1eb360fc..1d6cbaf22 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -106,11 +106,7 @@ ml: delete: ഇല്ലാതാക്കുക emoji: ഇമോജി dashboard: - feature_profile_directory: പ്രൊഫൈൽ ഡയറക്ടറി - features: സവിശേഷതകൾ title: ഡാഷ്ബോർഡ് - total_users: മൊത്തം ഉപയോക്താക്കൾ - trends: ട്രെൻഡുകൾ email_domain_blocks: add_new: പുതിയത് ചേര്‍ക്കുക delete: ഇല്ലാതാക്കുക diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 8ef468b95..3305c17c9 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1,93 +1,138 @@ --- ms: about: - about_hashtag_html: Terdapat toot awam yang ditanda dengan #%{hashtag}. Anda boleh berinteraksi dengan mereka jika anda mempunyai akaun di mana-mana dunia persekutuan Mastodon. - about_mastodon_html: Mastodon ialah rangkaian sosial berasaskan protokol web terbuka dan perisian percuma bersumber terbuka. Ianya tak terpusat seperti emel. - about_this: Mengenai Kami + about_hashtag_html: Ini semua hantaran awam yang ditandakan dengan #%{hashtag}. Anda boleh berinteraksi dengan mereka jika anda mempunyai akaun di mana-mana dunia persekutuan. + about_mastodon_html: 'Rangkaian sosial masa hadapan: Tiada iklan, tiada pengawasan korporat, reka bentuk beretika, dan desentralisasi! Miliki data anda dengan Mastodon!' + about_this: Perihal + active_count_after: aktif + active_footnote: Pengguna Aktif Bulanan (MAU) administered_by: 'Ditadbir oleh:' + api: API apps: Aplikasi mudah alih + apps_platforms: Guna Mastodon daripada iOS, Android dan platform yang lain + browse_directory: Layari direktori profil dan tapis mengikut minat + browse_local_posts: Layari strim langsung hantaran awam daripada pelayan ini + browse_public_posts: Layari strim langsung hantaran awam di Mastodon contact: Hubungi kami contact_missing: Tidak ditetapkan contact_unavailable: Tidak tersedia + discover_users: Terokai pengguna documentation: Pendokumenan + federation_hint_html: Dengan akaun di %{instance} anda akan mampu mengikuti orang di mana-mana pelayan Mastodon dan lebih lagi. + get_apps: Cuba aplikasi mudah alih hosted_on: Mastodon dihoskan di %{domain} + instance_actor_flash: | + Akaun ini ialah pelaku maya yang digunakan untuk mewakili pelayan itu sendiri dan bukannya mana-mana pengguna individu. + Ia digunakan untuk tujuan persekutuan dan tidak patut disekat melainkan anda ingin menyekat keseluruhan tika, yang mana anda sepatutnya gunakan sekatan domain. learn_more: Ketahui lebih lanjut privacy_policy: Polisi privasi + rules: Peraturan pelayan + rules_html: 'Di bawah ini ringkasan peraturan yang anda perlu ikuti jika anda ingin mempunyai akaun di pelayan Mastodon yang ini:' + see_whats_happening: Lihat apa yang sedang berlaku + server_stats: 'Statistik pelayan:' source_code: Kod sumber status_count_after: - other: status - status_count_before: Telah menulis + other: hantaran + status_count_before: Siapa terbitkan + tagline: Ikuti rakan lama dan terokai rakan baharu terms: Terma perkhidmatan + unavailable_content: Pelayan disederhanakan + unavailable_content_description: + domain: Pelayan + reason: Sebab + rejecting_media: 'Fail-fail media daripada pelayan-pelayan ini tidak akan diproses atau disimpan, dan tiada gambar kecil yang akan dipaparkan, memerlukan anda untuk klik fail asal:' + rejecting_media_title: Media ditapis + silenced: 'Hantaran daripada pelayan-pelayan ini akan disembunyikan di garis masa dan perbualan awam, dan tiada pemberitahuan yang akan dijana daripada interaksi pengguna mereka, melainkan anda mengikuti mereka:' + silenced_title: Pelayan didiamkan + suspended: 'Tiada data daripada pelayan-pelayan ini yang akan diproses, disimpan atau ditukar, membuatkan sebarang interaksi atau perhubungan dengan pengguna daripada pelayan-pelayan ini menjadi mustahil:' + suspended_title: Pelayan digantung + unavailable_content_html: Mastodon secara amnya membenarkan anda melihat kandungan daripada dan berinteraksi dengan pengguna daripada mana-mana pelayan dalam dunia persekutuan. Ini pengecualian yang telah dilakukan di pelayan ini secara khususnya. user_count_after: other: pengguna - user_count_before: Rumah kepada + user_count_before: Rumah bagi what_is_mastodon: Apakah itu Mastodon? accounts: choices_html: 'Pilihan %{name}:' + endorsements_hint: Anda boleh syorkan orang yang anda ikuti menggunakan antara muka sesawang, dan mereka akan ditunjukkan di sini. + featured_tags_hint: Anda boleh mempromosikan tanda pagar khusus yang akan dipaparkan di sini. follow: Ikut followers: other: Pengikut following: Mengikuti + instance_actor_flash: Akaun ini ialah pelaku maya yang digunakan untuk mewakili pelayan itu sendiri dan bukan mana-mana pengguna individu. Ia digunakan untuk tujuan persekutuan dan tidak patut digantung. joined: Sertai pada %{date} + last_active: aktif terakhir link_verified_on: Pemilikan pautan ini diperiksa pada %{date} + media: Media moved_html: "%{name} telah berpindah ke %{new_profile_link}:" network_hidden: Maklumat ini tidak tersedia + never_active: Belum pernah nothing_here: Tiada apa-apa di sini! people_followed_by: Orang yang %{name} ikuti people_who_follow: Orang yang mengikut %{name} pin_errors: following: Anda mestilah sudah mengikuti orang yang anda ingin syorkan posts: - other: Toot - posts_tab_heading: Toot - posts_with_replies: Toot dan maklum balas + other: Hantaran + posts_tab_heading: Hantaran + posts_with_replies: Hantaran dan balasan roles: - moderator: Pengawal + admin: Pentadbir + bot: Bot + group: Kumpulan + moderator: Penyederhana + unavailable: Profil tidak tersedia unfollow: Nyahikut admin: + account_actions: + action: Ambil tindakan + title: Ambil tindakan penyederhanaan ke atas %{acct} account_moderation_notes: - create: Tinggalkan nota - created_msg: Nota kawalan telah berjaya dicipta! + create: Tinggalkan catatan + created_msg: Catatan penyederhanaan telah berjaya dicipta! delete: Padam - destroyed_msg: Nota kawalan telah berjaya dipadam! + destroyed_msg: Catatan penyederhanaan telah berjaya dipadam! accounts: + add_email_domain_block: Sekat domain e-mel + approve: Luluskan + approve_all: Luluskan semua approved_msg: Berjaya meluluskan permohonan pendaftaran %{username} - are_you_sure: Anda pasti? + are_you_sure: Adakah anda pasti? avatar: Avatar by_domain: Domain change_email: - changed_msg: Emel akaun telah berjaya ditukar! - current_email: Emel Semasa - label: Tukar Emel - new_email: Emel Baru - submit: Tukar Emel - title: Tukar Emel untuk %{username} + changed_msg: E-mel akaun telah berjaya ditukar! + current_email: E-mel semasa + label: Ubah e-mel + new_email: E-mel baharu + submit: Ubah e-mel + title: Ubah e-mel untuk %{username} confirm: Sahkan confirmed: Disahkan confirming: Mengesahkan delete: Padam data - deleted: Dipadam + deleted: Dipadamkan demote: Turunkan taraf - destroyed_msg: Data %{username} sekarang menunggu giliran untuk dipadam sebentar lagi - disable: Lumpuhkan + destroyed_msg: Data %{username} kini menunggu giliran untuk dipadam sebentar lagi + disable: Bekukan disable_two_factor_authentication: Lumpuhkan 2FA - disabled: Dilumpuhkan + disabled: Dibekukan display_name: Nama paparan domain: Domain - edit: Tukar - email: Emel - email_status: Status Emel - enable: Bolehkan - enabled: Dibolehkan + edit: Sunting + email: E-mel + email_status: Status e-mel + enable: Nyahbekukan + enabled: Didayakan enabled_msg: Berjaya menyahbekukan akaun %{username} followers: Pengikut follows: Mengikuti header: Pengepala inbox_url: URL mesej masuk - invite_request_text: Sebab menyertai - invited_by: Dijemput oleh + invite_request_text: Sebab untuk menyertai + invited_by: Diundang oleh ip: Alamat IP - joined: Sudah sertai + joined: Sertai pada location: all: Semua local: Tempatan @@ -95,79 +140,79 @@ ms: title: Kedudukan login_status: Status log masuk media_attachments: Lampiran media - memorialize: Tukarkan menjadi akaun peringatan + memorialize: Tukarkan menjadi akaun kenangan memorialized: Dikenang memorialized_msg: Berjaya mengubah %{username} menjadi akaun kenangan moderation: active: Aktif all: Semua pending: Menunggu - silenced: Disenyapkan + silenced: Didiamkan suspended: Digantungkan - title: Kawalan - moderation_notes: Nota kawalan + title: Penyederhanaan + moderation_notes: Catatan penyederhana most_recent_activity: Aktiviti terbaru - most_recent_ip: IP terbaru + most_recent_ip: Alamat IP terbaru no_account_selected: Tiada akaun diubah kerana tiada yang dipilih - no_limits_imposed: Tiada had dikuatkuasakan + no_limits_imposed: Tiada pengehadan dikenakan not_subscribed: Tiada langganan - pending: Menunggu penilaian semula + pending: Menunggu semak semula perform_full_suspension: Gantung promote: Naikkan taraf protocol: Protokol public: Awam push_subscription_expires: Langganan PuSH tamat tempoh - redownload: Segarkan semula avatar - redownloaded_msg: Berjaya memuat semula profil %{username} dari asalnya + redownload: Segarkan semula profil + redownloaded_msg: Berjaya segarkan semula profil %{username} daripada asalnya reject: Tolak reject_all: Tolak semua rejected_msg: Berjaya menolak permohonan pendaftaran %{username} remove_avatar: Buang avatar remove_header: Buang pengepala - removed_avatar_msg: Berjaya membuang gambar avatar %{username} - removed_header_msg: Berjaya membuang gambar pengepala %{username} + removed_avatar_msg: Berjaya membuang imej avatar %{username} + removed_header_msg: Berjaya membuang imej pengepala %{username} resend_confirmation: already_confirmed: Pengguna ini telah disahkan - send: Hantar semula emel pengesahan - success: Emel pengesahan telah berjaya dihantar! - reset: Set semula - reset_password: Set semula kata laluan + send: Hantar semula e-mel pengesahan + success: E-mel pengesahan telah berjaya dihantar! + reset: Tetapkan semula + reset_password: Tetapkan semula kata laluan resubscribe: Langgan semula role: Kebenaran roles: admin: Pentadbir - moderator: Pengawal + moderator: Penyederhana staff: Kakitangan user: Pengguna search: Cari search_same_email_domain: Pengguna lain dengan domain e-mel yang sama - search_same_ip: Pengguna lain dengan IP yang sama + search_same_ip: Pengguna lain dengan alamat IP yang sama sensitive: Sensitif - sensitized: tanda sebagai sensitif - shared_inbox_url: URL Peti Masuk Berkongsi + sensitized: ditandakan sebagai sensitif + shared_inbox_url: URL peti masuk berkongsi show: - created_reports: Laporan yang dicipta oleh akaun ini - targeted_reports: Laporan yang dicipta berkaitan akaun ini - silence: Senyap - silenced: Disenyapkan - statuses: Status + created_reports: Laporan dicipta oleh akaun ini + targeted_reports: Laporan dicipta berkaitan akaun ini + silence: Hadkan + silenced: Dihadkan + statuses: Hantaran subscribe: Langgan suspended: Digantung - suspension_irreversible: Data akaun ini telah dipadam secara kekal. Anda boleh nyahgantungkannya untuk menggunakannya, tetapi data lama tidak akan diperoleh. - suspension_reversible_hint_html: Akaun ini telah digantung, dan datanya akan dibuang pada %{date}. Sebelum tarikh itu, akaun ini boleh diaktif semula tanpa kesan buruk. Jika anda mahu memadamkan data akaun ini serta-merta, anda boleh melakukannya di bawah. + suspension_irreversible: Data akaun ini telah dipadam secara kekal. Anda boleh nyahgantungkannya untuk membuatkan akaun ini boleh digunakan semula tetapi data lama tidak akan diperolehi. + suspension_reversible_hint_html: Akaun ini telah digantung, dan datanya akan dibuang pada %{date}. Sebelum tarikh itu, akaun ini boleh diperoleh semula tanpa kesan buruk. Jika anda mahu memadamkan kesemua data akaun ini serta-merta, anda boleh melakukannya di bawah. time_in_queue: Menunggu giliran %{time} title: Akaun - unconfirmed_email: Emel Belum Disahkan + unconfirmed_email: E-mel belum disahkan undo_sensitized: Nyahtanda sensitif - undo_silenced: Buang senyap - undo_suspension: Buang penggantungan + undo_silenced: Nyahdiamkan + undo_suspension: Nyahgantungkan unsilenced_msg: Berjaya menjadikan akaun %{username} tidak terhad unsubscribe: Buang langganan unsuspended_msg: Berjaya menyahgantungkan akaun %{username} username: Nama pengguna - view_domain: Lihat ringkasan domain + view_domain: Lihat ringkasan untuk domain warn: Beri amaran - web: Web + web: Sesawang whitelisted: Dibenarkan untuk persekutuan action_logs: action_types: @@ -180,15 +225,17 @@ ms: create_domain_allow: Cipta Pelepasan Domain create_domain_block: Cipta Penyekatan Domain create_email_domain_block: Cipta Penyekatan Domain E-mel - create_ip_block: Cipta peraturan IP + create_ip_block: Cipta peraturan alamat IP + create_unavailable_domain: Cipta Domain Tidak Tersedia demote_user: Turunkan Taraf Pengguna destroy_announcement: Padam Pengumuman destroy_custom_emoji: Padam Emoji Tersendiri destroy_domain_allow: Padam Pelepasan Domain destroy_domain_block: Padam Penyekatan Domain - destroy_email_domain_block: Padam Penyekatan Domain E-mel - destroy_ip_block: Padam Peraturan IP - destroy_status: Padam Kiriman + destroy_email_domain_block: Padam penyekatan domain e-mel + destroy_ip_block: Padam peraturan alamat IP + destroy_status: Padam Hantaran + destroy_unavailable_domain: Padam Domain Tidak Tersedia disable_2fa_user: Nyahdayakan 2FA disable_custom_emoji: Nyahdayakan Emoji Tersendiri disable_user: Nyahdayakan Pengguna @@ -198,19 +245,19 @@ ms: promote_user: Naikkan Taraf Pengguna remove_avatar_user: Buang Avatar reopen_report: Buka Semula Laporan - reset_password_user: Tetap Semula Kata Laluan + reset_password_user: Tetapkan Semula Kata Laluan resolve_report: Buat Keputusan Laporan sensitive_account: Tandakan media di akaun anda sebagai sensitif - silence_account: Senyapkan Akaun - suspend_account: Gantung Akaun - unassigned_report: Batalkan Laporan + silence_account: Diamkan Akaun + suspend_account: Gantungkan Akaun + unassigned_report: Menyahtugaskan Laporan unsensitive_account: Nyahtanda media di akaun anda sebagai sensitif - unsilence_account: Nyahsenyapkan Akaun - unsuspend_account: Nyahgantung Akaun + unsilence_account: Nyahdiamkan Akaun + unsuspend_account: Nyahgantungkan Akaun update_announcement: Kemas Kini Pengumuman update_custom_emoji: Kemas Kini Emoji Tersendiri update_domain_block: Kemas Kini Penyekatan Domain - update_status: Kemas Kini Kiriman + update_status: Kemas Kini Hantaran actions: assigned_to_self_report_html: "%{name} menugaskan laporan %{target} kepada dirinya sendiri" change_email_user_html: "%{name} telah mengubah alamat e-mel pengguna %{target}" @@ -221,126 +268,158 @@ ms: create_domain_allow_html: "%{name} membenarkan persekutuan dengan domain %{target}" create_domain_block_html: "%{name} telah menyekat domain %{target}" create_email_domain_block_html: "%{name} telah menyekat domain e-mel %{target}" - create_ip_block_html: "%{name} telah mencipta peraturan IP %{target}" - demote_user_html: "%{name} menurunkan taraf pengguna %{target}" - destroy_announcement_html: "%{name} memadamkan pengumuman %{target}" - destroy_custom_emoji_html: "%{name} memusnahkan emoji %{target}" - destroy_domain_allow_html: "%{name} membuang keizinan persekutuan dengan domain %{target}" + create_ip_block_html: "%{name} telah mencipta peraturan alamat IP %{target}" + create_unavailable_domain_html: "%{name} telah menghentikan penghantaran ke domain %{target}" + demote_user_html: "%{name} telah menurunkan taraf pengguna %{target}" + destroy_announcement_html: "%{name} telah memadamkan pengumuman %{target}" + destroy_custom_emoji_html: "%{name} telah memusnahkan emoji %{target}" + destroy_domain_allow_html: "%{name} telah membuang kebenaran persekutuan dengan domain %{target}" destroy_domain_block_html: "%{name} telah menyahsekat domain %{target}" destroy_email_domain_block_html: "%{name} telah menyahsekat domain e-mel %{target}" - destroy_ip_block_html: "%{name} memadamkan peraturan untuk IP %{target}" - destroy_status_html: "%{name} membuang kiriman oleh %{target}" + destroy_ip_block_html: "%{name} telah memadamkan peraturan untuk alamat IP %{target}" + destroy_status_html: "%{name} telah membuang hantaran oleh %{target}" + destroy_unavailable_domain_html: "%{name} telah menyambung penghantaran ke domain %{target}" disable_2fa_user_html: "%{name} menyahdayakan keperluan dua faktor bagi pengguna %{target}" - disable_custom_emoji_html: "%{name} menyahdayakan emoji %{target}" - disable_user_html: "%{name} menyahdayakan log masuk bagi pengguna %{target}" - enable_custom_emoji_html: "%{name} mendayakan emoji %{target}" - enable_user_html: "%{name} mendayakan log masuk untuk pengguna %{target}" - memorialize_account_html: "%{name} mengubah akaun %{target} menjadi halaman kenangan" - promote_user_html: "%{name} menaikkan taraf pengguna %{target}" - deleted_status: "(status telah dipadam)" + disable_custom_emoji_html: "%{name} telah menyahdayakan emoji %{target}" + disable_user_html: "%{name} telah menyahdayakan log masuk bagi pengguna %{target}" + enable_custom_emoji_html: "%{name} telah mendayakan emoji %{target}" + enable_user_html: "%{name} telah mendayakan log masuk untuk pengguna %{target}" + memorialize_account_html: "%{name} telah mengubah akaun %{target} menjadi halaman kenangan" + promote_user_html: "%{name} telah menaikkan taraf pengguna %{target}" + remove_avatar_user_html: "%{name} telah membuang avatar %{target}" + reopen_report_html: "%{name} telah membuka semula laporan %{target}" + reset_password_user_html: "%{name} telah menetapkan semula kata laluan pengguna %{target}" + resolve_report_html: "%{name} telah menyelesaikan laporan %{target}" + sensitive_account_html: "%{name} telah menanda media %{target} sebagai sensitif" + silence_account_html: "%{name} telah mendiamkan akaun %{target}" + suspend_account_html: "%{name} telah menggantung akaun %{target}" + unassigned_report_html: "%{name} telah menyahtugaskan laporan %{target}" + unsensitive_account_html: "%{name} telah menyahtanda media %{target} sebagai sensitif" + unsilence_account_html: "%{name} telah menyahdiamkan akaun %{target}" + unsuspend_account_html: "%{name} telah menyahgantungkan akaun %{target}" + update_announcement_html: "%{name} telah mengemaskini pengumuman %{target}" + update_custom_emoji_html: "%{name} telah mengemaskini emoji %{target}" + update_domain_block_html: "%{name} telah mengemaskini penyekatan domain untuk %{target}" + update_status_html: "%{name} telah mengemaskini hantaran oleh %{target}" + deleted_status: "(hantaran telah dipadam)" + empty: Tiada log dijumpai. + filter_by_action: Tapis mengikut tindakan + filter_by_user: Tapis mengikut pengguna title: Log audit + announcements: + destroyed_msg: Pengumuman berjaya dipadam! + edit: + title: Sunting pengumuman + empty: Tiada pengumuman dijumpai. + live: Langsung + new: + create: Cipta pengumuman + title: Pengumuman baharu + publish: Terbitkan + published_msg: Pengumuman berjaya diterbitkan! + scheduled_for: Dijadualkan untuk %{time} + scheduled_msg: Pengumuman dijadualkan untuk terbitan! + title: Pengumuman + unpublish: Nyahterbit + unpublished_msg: Pengumuman berjaya dinyahterbitkan! + updated_msg: Pengumuman berjaya dikemaskini! custom_emojis: + assign_category: Menugaskan kategori + by_domain: Domain copied_msg: Telah berjaya mencipta salinan tempatan emoji copy: Salin copy_failed_msg: Tidak dapat membuat salinan tempatan emoji tersebut + create_new_category: Cipta kategori baharu created_msg: Emoji berjaya dicipta! delete: Padam - destroyed_msg: Emoji berjaya dipadam! - disable: Lumpuhkan - disabled_msg: Emoji tersebut berjaya dilumpuhkan - enable: Bolehkan - enabled_msg: Emoji tersebut berjaya dibolehkan + destroyed_msg: Emoji berjaya dimusnahkan! + disable: Nyahdayakan + disabled: Dinyahdayakan + disabled_msg: Emoji tersebut berjaya dinyahdayakan + emoji: Emoji + enable: Dayakan + enabled: Didayakan + enabled_msg: Emoji tersebut berjaya didayakan image_hint: PNG, maksimum 50KB + list: Senarai listed: Disenaraikan new: - title: Tambah emoji sendiri baru + title: Tambah emoji sendiri baharu + not_permitted: Anda tidak dibenarkan untuk membuat tindakan ini overwrite: Tulis ganti shortcode: Kod pendek shortcode_hint: Sekurang-kurangnya 2 aksara, hanya aksara angka abjad dan garis bawah title: Emoji sendiri - unlisted: Tidak disenaraikan + uncategorized: Tidak dikategorikan + unlist: Nyahsenaraikan + unlisted: Dinyahsenaraikan update_failed_msg: Tidak boleh mengemaskini emoji tersebut updated_msg: Emoji berjaya dikemaskini! upload: Muat naik dashboard: - backlog: tugasan tunggakan - config: Tatarajah - feature_deletions: Pemadaman akaun - feature_invites: Pautan undangan - feature_registrations: Pendaftaran - feature_relay: Geganti persekutuan - features: Ciri-ciri - hidden_service: Persekutuan dengan perkhidmatan tersembunyi - open_reports: laporan belum selesai - recent_users: Pengguna terbaru - search: Carian teks penuh - single_user_mode: Mod pengguna tunggal software: Perisian space: Kegunaan ruang title: Papan pemuka - total_users: pengguna keseluruhannya - trends: Trend - week_interactions: interaksi minggu ini - week_users_active: aktif minggu ini - week_users_new: pengguna minggu ini domain_allows: - destroyed_msg: Domain sudah tidak diizinkan dari persekutuan - undo: Nyahizin persekutuan dengan domain + add_new: Benarkan persekutuan dengan domain + created_msg: Domain telah berjaya dibenarkan untuk persekutuan + destroyed_msg: Domain telah dibuang kebenaran daripada persekutuan + undo: Buang kebenaran persekutuan dengan domain domain_blocks: - add_new: Tambah + add_new: Tambah penyekatan domain baharu created_msg: Sekatan domain sedang diproses - destroyed_msg: Sekatan domain telah dibatalkan + destroyed_msg: Sekatan domain telah diundurkan domain: Domain edit: Sunting penyekatan domain - existing_domain_block_html: Anda telah memberikan pembatasan yang lebih tegas ke atas %{name}, anda perlu menyahsekatinya dulu. + existing_domain_block_html: Anda telah mengenakan pengehadan yang lebih tegas ke atas %{name}, anda perlu menyahsekatinya dahulu. new: create: Cipta sekatan - hint: Sekatan domain tidak akan menghindarkan penciptaan entri akaun dalam pangkalan data, tetapi akan diberikan kaedah kawalan khusus tertentu pada akaun-akaun tersebut secara retroaktif dan automatik. + hint: Sekatan domain tidak akan menghindarkan penciptaan entri akaun dalam pangkalan data, tetapi akan dikenakan kaedah penyederhanaan khusus tertentu pada akaun-akaun tersebut secara retroaktif dan automatik. severity: - desc_html: "Senyapkan akan membuatkan hantaran akaun tidak kelihatan kepada sesiapa yang tidak mengikut mereka. Gantungkan akan membuang semua kandungan, media, dan data profil akaun tersebut. Gunakan Tiada jika anda hanya ingin menolak fail media." + desc_html: "Diamkan akan membuatkan hantaran akaun tidak kelihatan kepada sesiapa yang tidak mengikut mereka. Gantungkan akan membuang kesemua kandungan, media, dan data profil akaun tersebut. Gunakan Tiada jika anda hanya ingin menolak fail media." noop: Tiada - silence: Senyapkan + silence: Diamkan suspend: Gantungkan - title: Sekatan domain baru - obfuscate: Nama domain samar-samar - obfuscate_hint: Menjadikan nama domain samar-samar dalam senarai jika pengiklanan senarai pembatasan domain didayakan - private_comment: Komen peribadi - private_comment_hint: Komen tentang pembatasan domain ini bagi kegunaan dalaman para pengendali. - public_comment: Komen umum - public_comment_hint: Komen tentang pembatasan domain ini untuk khalayak umum, jika pengiklanan senarai pembatasan domain didayakan. + title: Sekatan domain baharu + obfuscate: Mengaburkan nama domain + obfuscate_hint: Mengaburkan nama domain secara separa dalam senarai sekiranya pengehadan pengiklanan senarai domain didayakan + private_comment: Ulasan peribadi + private_comment_hint: Ulasan mengenai pengehadan domain ini untuk kegunaan dalaman penyederhana. + public_comment: Ulasan awam + public_comment_hint: Ulasan mengenai pengehadan domain ini untuk orang awam, sekiranya pengehadan pengiklanan senarai domain didayakan. reject_media: Tolak fail media - reject_media_hint: Buang fail media yang disimpan di sini dan menolak sebarang muat turun pada masa depan. Tidak berkaitan dengan penggantungan + reject_media_hint: Buang fail media yang disimpan secara tempatan dan tolak sebarang muat turun pada masa hadapan. Tidak terpakai untuk penggantungan reject_reports: Tolak laporan - reject_reports_hint: Abaikan semua laporan daripada domain ini. Tidak dikira untuk penggantungan + reject_reports_hint: Abaikan semua laporan daripada domain ini. Tidak terpakai untuk penggantungan rejecting_media: menolak fail media rejecting_reports: menolak laporan severity: - silence: disenyapkan - suspend: digantung + silence: didiamkan + suspend: digantungkan show: affected_accounts: other: "%{count} akaun dalam pangkalan data menerima kesan" retroactive: - silence: Buang penyenyapan semua akaun sedia ada daripada domain ini - suspend: Buang penggantungan semua akaun sedia ada daripada domain ini - title: Buang sekatan domain %{domain} - undo: Buang - undo: Buang + silence: Nyahdiamkan akaun yang menerima kesan sedia ada daripada domain ini + suspend: Nyahgantungkan akaun yang menerima kesan sedia ada daripada domain ini + title: Undurkan sekatan domain untuk %{domain} + undo: Undurkan + undo: Undurkan penyekatan domain view: Lihat penyekatan domain email_domain_blocks: - add_new: Tambah - created_msg: Berjaya menambah domain emel ke dalam senarai hitam + add_new: Tambah baharu + created_msg: Telah berjaya menyekat domain e-mel delete: Padam - destroyed_msg: Berjaya memadam domain emel daripada senarai hitam + destroyed_msg: Telah berjaya menyahsekat domain e-mel domain: Domain empty: Tiada domain e-mel sedang disekat. from_html: dari %{domain} new: create: Tambah domain - title: Entri senarai hitam emel baru - title: Senarai hitam emel + title: Sekat domain e-mel baharu + title: Domain e-mel disekat follow_recommendations: - description_html: "Saranan ikutan membantu pengguna mencari kandungan menarik dengan cepat. Apabila pengguna belum cukup berhubung dengan akaun lain untuk membentuk saranan ikutan tersendiri, akaun-akaun inilah yang akan disarankan. Ia dinilai semula setiap hari dari gabungan keterlibatan tertinggi terkini dan juga jumlah pengikut tempatan tertinggi mengikut bahasa masing-masing." + description_html: "Saranan ikutan membantu pengguna baharu mencari kandungan menarik dengan cepat. Apabila pengguna belum cukup berinteraksi dengan akaun lain untuk membentuk saranan ikutan tersendiri, akaun-akaun inilah yang akan disarankan. Ia dinilai semula setiap hari dari gabungan keterlibatan tertinggi terkini dan juga jumlah pengikut tempatan tertinggi mengikut bahasa masing-masing." language: Untuk bahasa status: Status suppress: Hadkan saranan ikutan @@ -348,18 +427,34 @@ ms: title: Saranan ikutan unsuppress: Tetap semula saranan ikutan instances: + back_to_all: Semua + back_to_limited: Terhad + back_to_warning: Amaran by_domain: Domain + delivery: + all: Semua + clear: Buang ralat penghantaran + restart: Mulakan semula penghantaran + stop: Hentikan penghantaran + title: Penghantaran + unavailable: Tidak tersedia + unavailable_message: Penghantaran tidak tersedia + warning: Amaran + warning_message: + other: Penghantaran gagal selama %{count} hari delivery_available: Penghantaran tersedia - empty: Tiada domain ditemukan. + delivery_error_days: Hari ralat penghantaran + delivery_error_hint: Jika penghantaran tidak berjaya selama %{count} hari, ia akan ditanda sebagai tidak boleh dihantar. + empty: Tiada domain dijumpai. known_accounts: other: "%{count} akaun dikenali" moderation: all: Semua limited: Terhad title: Penyederhanaan - private_comment: Komen peribadi - public_comment: Komen umum - title: Tika diketahui + private_comment: Ulasan peribadi + public_comment: Ulasan awam + title: Persekutuan total_blocked_by_us: Disekati kami total_followed_by_them: Diikuti mereka total_followed_by_us: Diikuti kami @@ -375,7 +470,7 @@ ms: title: Undangan ip_blocks: add_new: Cipta peraturan - created_msg: Berjaya menambah peraturan IP baharu + created_msg: Telah berjaya menambah peraturan alamat IP baharu delete: Padam expires_in: '1209600': 2 minggu @@ -385,38 +480,74 @@ ms: '86400': 1 hari '94670856': 3 tahun new: - title: Cipta peraturan IP baharu + title: Cipta peraturan alamat IP baharu + no_ip_block_selected: Tiada peraturan alamat IP diubah kerana tiada yang dipilih + title: Peraturan alamat IP + pending_accounts: + title: Akaun sedang menunggu (%{count}) + relationships: + title: Hubungan %{acct} relays: - add_new: Tambah geganti baru + add_new: Tambah geganti baharu delete: Padam - description_html: "Geganti persekutuan ialah pelayan perantara yang saling menukar toot awam dalam jumlah yang banyak di antara pelayan yang melanggan ia dan menerbitkan kepada ia. Ia boleh bantu pelayan kecil dan sederhana untuk menemui kandungan daripada dunia persekutuan Mastodon, yang mana jika tidak digunakan akan memerlukan pengguna tempatan mengikut orang lain di pelayan jarak jauh secara manual." - disable: Lumpuhkan - disabled: Dilumpuhkan - enable: Bolehkan - enable_hint: Apabila dibolehkan, pelayan anda akan melanggan kesemua toot awam daripada geganti ini, dan akan mula menghantar toot awam pelayan ini kepada ia. - enabled: Dibolehkan + description_html: "Geganti persekutuan ialah pelayan perantara yang saling menukar hantaran awam dalam jumlah yang banyak di antara pelayan yang melanggan ia dan menerbitkan kepadanya. Ia boleh bantu pelayan kecil dan sederhana untuk menemui kandungan daripada dunia persekutuan, yang mana jika tidak digunakan akan memerlukan pengguna tempatan mengikut orang lain di pelayan jarak jauh secara manual." + disable: Nyahdayakan + disabled: Dinyahdayakan + enable: Dayakan + enable_hint: Apabila didayakan, pelayan anda akan melanggan kesemua hantaran awam daripada geganti ini, dan akan mula menghantar hantaran awam pelayan ini kepadanya. + enabled: Didayakan inbox_url: URL geganti - pending: Menunggu persetujuan geganti - save_and_enable: Simpan dan bolehkan + pending: Menunggu kelulusan geganti + save_and_enable: Simpan dan dayakan setup: Tetapkan sambungan geganti + signatures_not_enabled: Geganti tidak akan berfungsi dengan betul apabila mod selamat atau mod persekutuan terhad didayakan + status: Status title: Geganti report_notes: - created_msg: Nota laporan berjaya dicipta! - destroyed_msg: Nota laporan berjaya dipadam! + created_msg: Catatan laporan telah berjaya dicipta! + destroyed_msg: Catatan laporan telah berjaya dipadam! reports: - action_taken_by: Tindakan oleh - are_you_sure: Anda pasti? - assign_to_self: Berikan pada saya - assigned: Pengawal yang menerima + account: + notes: + other: "%{count} catatan" + reports: + other: "%{count} laporan" + action_taken_by: Tindakan diambil oleh + are_you_sure: Adakah anda pasti? + assign_to_self: Menugaskan kepada saya + assigned: Penyederhana yang ditugaskan + by_target_domain: Domain bagi akaun yang dilaporkan comment: none: Tiada created_at: Dilaporkan + forwarded: Dipanjangkan + forwarded_to: Dipanjangkan ke %{domain} mark_as_resolved: Tanda sebagai sudah selesai mark_as_unresolved: Tanda sebagai belum selesai notes: - create: Tambah nota - create_and_resolve: Selesaikan dengan nota + create: Tambah catatan + create_and_resolve: Selesaikan dengan catatan + create_and_unresolve: Buka semula dengan catatan + delete: Padam placeholder: Terangkan tindakan apa yang telah diambil, atau sebarang kemas kini lain yang berkaitan... + reopen: Buka semula laporan + report: 'Laporan #%{id}' + reported_account: Akaun yang dilaporkan + reported_by: Dilaporkan oleh + resolved: Diselesaikan + resolved_msg: Laporan berjaya diselesaikan! + status: Status + title: Laporan + unassign: Nyahtugaskan + unresolved: Nyahselesaikan + updated_at: Dikemaskini + rules: + add_new: Tambah peraturan + delete: Padam + description_html: Walaupun ramai yang berkata mereka telah membaca dan bersetuju dengan terma-terma perkhidmatan, selalunya orang tidak baca dengan teliti sehinggalah terjadinya sesuatu masalah. Buatkan peraturan pelayan anda lebih mudah dilihat dalam sekali pandang dengan menyediakannya dalam bentuk senarai titik peluru rata. Cuba untuk kekalkan setiap peraturan khusus itu pendek dan mudah, tetapi jangan pula terlalu pisahkannya menjadi terlalu banyak item yang berlainan. + edit: Sunting peraturan + empty: Masih belum ada peraturan pelayan yang ditakrifkan. + title: Peraturan pelayan settings: peers_api_enabled: title: Terbitkan senarai pelayan ditemukan dalam aplikasi diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 8eec6f38c..7a7773f46 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -359,32 +359,9 @@ nl: updated_msg: Bijwerken van emoji is geslaagd! upload: Uploaden dashboard: - authorized_fetch_mode: Veilige modus - backlog: achterstallige taken - config: Configuratie - feature_deletions: Verwijderen van account - feature_invites: Uitnodigingen - feature_profile_directory: Gebruikersgids - feature_registrations: Registraties - feature_relay: Federatierelay - feature_timeline_preview: Voorvertoning van tijdlijn - features: Functies - hidden_service: Federatie met verborgen diensten - open_reports: onopgeloste rapportages - pending_tags: hashtags die op een beoordeling wachten - pending_users: gebruikers die op een beoordeling wachten - recent_users: Recente gebruikers - search: In volledige tekst zoeken - single_user_mode: Modus voor één gebruiker software: Software space: Ruimtegebruik title: Dashboard - total_users: gebruikers in totaal - trends: Trends - week_interactions: interacties deze week - week_users_active: actieve gebruikers deze week - week_users_new: nieuwe gebruikers deze week - whitelist_mode: Beperkte federatiemodus domain_allows: add_new: Federatie met domein goedkeuren created_msg: Federatie met domein is succesvol goedgekeurd diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 7c2db24e6..005523a9f 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -7,6 +7,7 @@ nn: active_count_after: aktiv active_footnote: Månadlege aktive brukarar (MAB) administered_by: 'Administrert av:' + api: API apps: Mobilappar apps_platforms: Bruk Mastodon på iOS, Android og andre plattformer browse_directory: Bla gjennom en profilmappe og filtrer etter interesser @@ -23,9 +24,14 @@ nn: instance_actor_flash: "Denne brukeren er en virtuell aktør brukt til å representere selve serveren og ingen individuell bruker. Det brukes til foreningsformål og bør ikke blokkeres med mindre du vil blokkere hele instansen, hvor domeneblokkering bør brukes i stedet. \n" learn_more: Lær meir privacy_policy: Personvernsreglar + rules: Server regler + rules_html: 'Nedenfor er et sammendrag av reglene du må følge om du vil ha en konto på denne serveren av Mastodon:' see_whats_happening: Sjå kva som skjer server_stats: 'Tenarstatistikk:' source_code: Kjeldekode + status_count_after: + one: innlegg + other: statuser status_count_before: Som skreiv tagline: Fylg vener og oppdag nye terms: Brukarvilkår @@ -54,9 +60,11 @@ nn: one: Fylgjar other: Fylgjarar following: Fylgjer + instance_actor_flash: Denne kontoen er en virtuell figur som brukes til å representere selve serveren og ikke noen individuell bruker. Den brukes til forbundsformål og bør ikke oppheves. joined: Vart med %{date} last_active: sist aktiv link_verified_on: Eigarskap for denne lenkja vart sist sjekka %{date} + media: Media moved_html: "%{name} har flytta til %{new_profile_link}:" network_hidden: Denne informasjonen er ikkje tilgjengeleg never_active: Aldri @@ -90,6 +98,7 @@ nn: add_email_domain_block: Gøym e-postdomene approve: Godtak approve_all: Godtak alle + approved_msg: Godkjent %{username} sin registreringsapplikasjon are_you_sure: Er du sikker? avatar: Bilete by_domain: Domene @@ -106,7 +115,9 @@ nn: delete: Slett data deleted: Sletta demote: Degrader + destroyed_msg: "%{username} sine data er nå i kø for å bli slettet minimum" disable: Slå av + disable_sign_in_token_auth: Deaktiver e-post token autentisering disable_two_factor_authentication: Slå av 2FA disabled: Slege av display_name: Synleg namn @@ -115,11 +126,14 @@ nn: email: E-post email_status: E-poststatus enable: Slå på + enable_sign_in_token_auth: Aktiver godkjenning av e-post token enabled: Aktivert + enabled_msg: Frossent %{username} sin konto followers: Fylgjarar follows: Fylgje header: Overskrift inbox_url: Innbokslenkje + invite_request_text: Begrunnelse for å bli med invited_by: Innboden av ip: IP-adresse joined: Vart med @@ -131,6 +145,8 @@ nn: login_status: Innlogginsstatus media_attachments: Medievedlegg memorialize: Gjør om til et minne + memorialized: Minnet + memorialized_msg: Vellykket gjort av %{username} til en minnestedet moderation: active: Aktiv all: Alle @@ -151,10 +167,14 @@ nn: public: Offentleg push_subscription_expires: PuSH-abonnent utløper redownload: Last inn profil på nytt + redownloaded_msg: Oppdatert %{username} sin profil fra opprinnelse reject: Avvis reject_all: Avvis alle + rejected_msg: Vellykket avvist %{username} sin registreringsapplikasjon remove_avatar: Fjern bilete remove_header: Fjern overskrift + removed_avatar_msg: Fjernet %{username} sitt avatarbilde + removed_header_msg: Fjernet %{username} sin topptekst bilde resend_confirmation: already_confirmed: Denne brukaren er allereie stadfesta send: Send stadfestings-e-posten på nytt @@ -164,11 +184,18 @@ nn: resubscribe: Ting på nytt role: Løyve roles: + admin: Administrator + moderator: Ordstyrer staff: Personell user: Brukar search: Søk search_same_email_domain: Andre brukarar med same e-postdomene search_same_ip: Andre brukarar med same IP + security_measures: + only_password: Bare passord + password_and_2fa: Passord og 2FA + password_and_sign_in_token: Passord og e-post token + sensitized: Merket som følsom shared_inbox_url: Delt Innboks URL show: created_reports: Rapportar frå denne kontoen @@ -178,6 +205,8 @@ nn: statuses: Statusar subscribe: Ting suspended: Utvist + suspension_irreversible: Dataene fra denne kontoen har blitt ikke reverserbart slettet. Du kan oppheve suspenderingen av kontoen for å gjøre den brukbart, men den vil ikke gjenopprette alle data den tidligere har hatt. + suspension_reversible_hint_html: Kontoen har blitt suspendert, og dataene vil bli fullstendig fjernet den %{date}. Frem til da kan kontoen gjenopprettes uten negative effekter. Hvis du ønsker å fjerne alle kontoens data umiddelbart, kan du gjøre det nedenfor. time_in_queue: Ventar i kø %{time} title: Kontoar unconfirmed_email: E-post utan stadfesting @@ -227,6 +256,13 @@ nn: update_announcement: Oppdater kunngjøringen update_custom_emoji: Oppdater tilpassa emoji update_status: Oppdater tut + actions: + create_custom_emoji_html: "%{name} lastet opp ny emoji %{target}" + create_domain_allow_html: "%{name} tillatt føderasjon med domenet %{target}" + create_domain_block_html: "%{name} blokkert domene %{target}" + create_email_domain_block_html: "%{name} blokkert e-post domene %{target}" + create_ip_block_html: "%{name} opprettet regel for IP %{target}" + silence_account_html: "%{name} begrenset %{target} sin konto" deleted_status: "(sletta status)" empty: Ingen loggar funne. filter_by_action: Sorter etter handling @@ -241,10 +277,12 @@ nn: new: create: Lag kunngjøring title: Ny kunngjøring + publish: Publiser published_msg: Kunngjøring publisert! scheduled_for: Planlagt for %{time} scheduled_msg: Kunngjøring planlagt for publisering! title: Kunngjøringer + unpublish: Avpubliser unpublished_msg: Kunngjøring upublisert! updated_msg: Kunngjøringen er oppdatert! custom_emojis: @@ -260,6 +298,7 @@ nn: disable: Slå av disabled: Slege av disabled_msg: Deaktiverte emoji + emoji: Emoji enable: Slå på enabled: Slege på enabled_msg: Aktiverte kjensleteikn @@ -280,32 +319,9 @@ nn: updated_msg: Kjensleteiknet er oppdatert! upload: Last opp dashboard: - authorized_fetch_mode: Trygg modus - backlog: opphopsloggede jobber - config: Oppsett - feature_deletions: Kontoslettingar - feature_invites: Innbydingar - feature_profile_directory: Profilmappe - feature_registrations: Registreringar - feature_relay: Føderasjonsoverganger - feature_timeline_preview: Førehandsvisning av tidsline - features: Eigenskapar - hidden_service: Føderering med skjulte tjenester - open_reports: opne rapportar - pending_tags: emneknaggar som ventar på gjennomgang - pending_users: brukarar som ventar på gjennomgang - recent_users: Nylege brukarar - search: Fulltekstsøking - single_user_mode: Enkeltbrukarmodus software: Programvare space: Lagrinsplass nytta title: Dashbord - total_users: brukarar til saman - trends: Populært - week_interactions: samhandlingar denne veka - week_users_active: aktive denne veka - week_users_new: brukarar denne veka - whitelist_mode: Kvitlistemodus domain_allows: add_new: Kvitlist domene created_msg: Domene er vorte kvitlista @@ -327,6 +343,8 @@ nn: silence: Togn suspend: Utvis title: Ny domeneblokkering + obfuscate: Obfuskere domenenavn + obfuscate_hint: Delvis skjule domenenavnet i listen hvis det er aktivert for å annonsere listen over domenebegrensninger private_comment: Privat kommentar private_comment_hint: Kommenter angående denne domenebegrensningen for internt bruk av moderatorene. public_comment: Offentleg kommentar @@ -363,8 +381,27 @@ nn: create: Legg til domene title: Ny blokkeringsoppføring av e-postdomene title: Blokkerte e-postadresser + follow_recommendations: + description_html: "Følg anbefalinger hjelper nye brukere med å finne interessant innhold. Når en bruker ikke har kommunisert med andre nok til å danne personlig tilpassede følger anbefalinger, anbefales disse kontoene i stedet. De beregnes daglig på nytt fra en blanding av kontoer der de høyeste engasjementene er og med høyest lokal tilhenger for et gitt språk." + language: For språk + status: Status + suppress: Undertrykk anbefalte følger + suppressed: Dempet + title: Følg anbefalinger + unsuppress: Gjenopprett følg-anbefaling instances: + back_to_all: All + back_to_limited: Begrenset + back_to_warning: Advarsel by_domain: Domene + delivery: + all: All + clear: Feil ved fjerning + restart: Starte levering + stop: Stopp levering + title: Levering + unavailable: Ikke tilgjengelig + warning: Advarsel delivery_available: Levering er tilgjengelig known_accounts: one: "%{count} kjend konto" @@ -402,6 +439,7 @@ nn: '94670856': 3 år new: title: Opprett ny IP-regel + no_ip_block_selected: Ingen IP-regler ble endret da ingen ble valgt title: IP-regler pending_accounts: title: Kontoar som ventar (%{count}) @@ -421,6 +459,7 @@ nn: save_and_enable: Lagr og slå på setup: Sett opp en overgangsforbindelse signatures_not_enabled: Overganger vil ikke fungere riktig mens sikkermodus eller hvitelistingsmodus er skrudd på + status: Status title: Vidaresendingar report_notes: created_msg: Rapportmerknad laga! @@ -441,6 +480,8 @@ nn: comment: none: Ingen created_at: Rapportert + forwarded: Videresendt + forwarded_to: Videresendt til %{domain} mark_as_resolved: Merk som løyst mark_as_unresolved: Merk som uløyst notes: @@ -455,10 +496,19 @@ nn: reported_by: Rapportert av resolved: Oppløyst resolved_msg: Rapporten er løyst! + status: Status + target_origin: Opprinnelse for innrapportert konto title: Rapportar unassign: Avset unresolved: Uløyst updated_at: Oppdatert + rules: + add_new: Legg til et filter + delete: Slett + description_html: Mens de fleste hevder å ha lest og samtykket i tjenestevilkårene, leser de vanligvis ikke gjennom før etter et problem oppstår. Gjør det enklere å se serverens regler på et øyeblikk ved å gi dem i en flat kulepunktsliste. Prøv å holde individuelle regler korte og enkelt, men prøv å ikke dele dem opp i mange separate elementer heller. + edit: Rediger regel + empty: Ingen serverregler har blitt definert ennå. + title: Server regler settings: activity_api_enabled: desc_html: Antall lokale statusposter, aktive brukere og nye registreringer i ukentlige oppdelinger @@ -474,6 +524,7 @@ nn: title: Eigen CSS default_noindex: desc_html: Påverkar alle brukarar som ikkje har justert denne innstillinga sjølve + title: Velg brukere som er ute av søkemotoren indeksering som standard domain_blocks: all: Til alle disabled: Til ingen @@ -506,12 +557,17 @@ nn: min_invite_role: disabled: Ingen title: Tillat innbydingar frå + require_invite_text: + desc_html: Når registreringer krever manuell godkjenning, må du føye «Hvorfor vil du bli med?» tekstinput obligatoriske i stedet for valgfritt + title: Krev nye brukere for å oppgi en grunn for å delta registrations_mode: modes: approved: Godkjenning kreves for påmelding none: Ingen kan melda seg inn open: Kven som helst kan melda seg inn title: Registreringsmodus + show_known_fediverse_at_about_page: + desc_html: Begrenser den offentlige tidslinjen som er knyttet til landingssiden når den er deaktivert, og viser bare lokalt innhold show_staff_badge: desc_html: Vis personalmerke på ei brukarside title: Vis personalmerke @@ -551,10 +607,18 @@ nn: nsfw_on: NSFW PÅ deleted: Sletta failed_to_execute: Lét seg ikkje gjera + media: + title: Media no_media: Ingen media no_status_selected: Ingen statusar vart endra sidan ingen vart valde title: Kontostatusar with_media: Med media + system_checks: + database_schema_check: + message_html: Det venter på databaseoverføringer. Vennligst kjør disse for å sikre at applikasjonen oppfører seg som forventet + rules_check: + action: Behandle serverregler + message_html: Du har ikke definert noen serverregler. tags: accounts_today: Ulike brukarar i dag accounts_week: Unike brukstilfeller denne uken @@ -607,6 +671,7 @@ nn: toot_layout: Tutoppsett application_mailer: notification_preferences: Endr e-post-innstillingane + salutation: "%{name}," settings: 'Endr e-post-innstillingar: %{link}' view: 'Sjå:' view_profile: Sjå profil @@ -641,6 +706,9 @@ nn: migrate_account: Flytt til ein annan konto migrate_account_html: Hvis du ønsker å henvise denne kontoen til en annen, kan du konfigurere det her. or_log_in_with: Eller logg inn med + providers: + cas: CAS + saml: SAML register: Registrer deg registration_closed: "%{instance} tek ikkje imot nye medlemmar" resend_confirmation: Send stadfestingsinstruksjonar på nytt @@ -744,6 +812,8 @@ nn: request: Bed om arkivet ditt size: Storleik blocks: Du blokkerer + bookmarks: Bokmerker + csv: CSV domain_blocks: Domeneblokkeringer lists: Lister mutes: Du dempar @@ -816,6 +886,7 @@ nn: success: Dataa dine vart lasta opp og vert no handsama så fort som mogeleg types: blocking: Blokkeringsliste + bookmarks: Bokmerker domain_blocking: Liste over blokkerte domene following: Fylgjeliste muting: Dempeliste @@ -846,6 +917,10 @@ nn: lists: errors: limit: Du har nådd grensa for kor mange lister du kan ha + login_activities: + authentication_methods: + password: passord + title: Autentiseringshistorikk media_attachments: validations: images_and_video: Kan ikkje leggja ved video til status som allereie inneheld bilete @@ -921,6 +996,8 @@ nn: body: 'Statusen din vart framheva av %{name}:' subject: "%{name} framheva statusen din" title: Ny framheving + status: + subject: "%{name} postet nettopp" notifications: email_events: E-postvarslinger for hendelser email_events_hint: 'Velg hendelser som du vil motta varslinger for:' @@ -948,6 +1025,7 @@ nn: next: Neste older: Eldre prev: Førre + truncate: "…" polls: errors: already_voted: Du har allereie røysta i denne rundspørjinga @@ -970,6 +1048,7 @@ nn: relationships: activity: Kontoaktivitet dormant: I dvale + follow_selected_followers: Følg valgte tilhengere followers: Følgere following: Følginger invited: Invitert @@ -1010,24 +1089,42 @@ nn: browsers: alipay: AliPay blackberry: BlackBerry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox generic: Ukjend lesar + ie: Internet Explorer micro_messenger: Micromessenger nokia: Nokia S40 Ovi-lesar + opera: Opera + otter: Otter + phantom_js: PhantomJS qq: QQ-lesar + safari: Safari uc_browser: UC-lesar + weibo: Weibo current_session: Noverande økt description: "%{browser} på %{platform}" explanation: Desse nettlesarane er logga inn på Mastodon-kontoen din. ip: IP-adresse platforms: + adobe_air: Adobe Air + android: Android blackberry: BlackBerry chrome_os: Chrome OS + firefox_os: Firefox OS ios: IOS + linux: Linux mac: Mac other: ukjend plattform + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone revoke: Tilbakekall revoke_success: Økt tilbakekalt title: Økter + view_authentication_history: Vis autentiseringshistorikk for kontoen din settings: account: Konto account_settings: Kontoinnstillingar @@ -1059,6 +1156,9 @@ nn: image: one: "%{count} bilete" other: "%{count} bilete" + video: + one: "%{count} video" + other: "%{count} videoer" boosted_from_html: Framheva av %{acct_link} content_warning: 'Innhaldsåtvaring: %{warning}' disallowed_hashtags: @@ -1075,15 +1175,21 @@ nn: private: Du kan ikkje festa uoffentlege tut reblog: Ei framheving kan ikkje festast poll: + total_people: + one: "%{count} person" + other: "%{count} personer" total_votes: one: "%{count} røyst" other: "%{count} røyster" vote: Røyst show_more: Vis meir + show_newer: Vis nyere + show_older: Vis eldre show_thread: Vis tråden sign_in_to_participate: Logg inn for å verta med i samtalen title: "%{name}: «%{quote}»" visibilities: + direct: Direkte private: Berre fylgjarar private_long: Vis berre til fylgjarar public: Offentleg @@ -1186,6 +1292,7 @@ nn: time: formats: default: "%d.%b %Y, %H:%M" + month: "%b %Y" two_factor_authentication: add: Legg til disable: Slå av @@ -1207,12 +1314,14 @@ nn: subject: Arkivet ditt er klart til å lastes ned sign_in_token: details: 'Her er forsøksdetaljane:' + explanation: 'Vi oppdaget et forsøk på å logge på kontoen fra en ukjent IP-adresse. Hvis dette er deg, vennligst skriv inn sikkerhetskoden nedenfor på påloggingssiden:' further_actions: 'Om dette ikkje var deg, so venlegast endra passordet ditt og skruv på tostegsgodkjenning på kontoen din. Du kan gjera det her:' subject: Venlegast stadfest forsøket på å logga inn title: Forsøk på å logga inn warning: explanation: disable: Mens kontoen din er fryst, forblir dine kontodata intakt, men du kan ikke utføre noen handlinger før den har blitt tint opp. + sensitive: De opplastede mediefilene og linket vil bli behandlet som sensitive. silence: Mens kontoen din er begrenset, vil bare folk som allerede følger deg se dine tuter på denne tjeneren, og du kan bli ekskludert fra diverse offentlige oppføringer. Men andre kan fortsatt følge deg manuelt. suspend: Kontoen din har blitt suspendert, og alle dine tuter og opplastede media har blitt ugjenkallelig fjernet fra denne tjeneren, og fra tjenere der du hadde følgere. get_in_touch: Du kan svare på denne E-posten for å komme i kontakt med styret i %{instance}. @@ -1221,11 +1330,13 @@ nn: subject: disable: Kontoen din, %{acct}, har blitt fryst none: Åtvaring for %{acct} + sensitive: Din konto %{acct} medier har blitt merket som følsom silence: Kontoen din, %{acct}, er vorten avgrensa suspend: Kontoen din, %{acct}, er vorten utvist title: disable: Konto frosen none: Åtvaring + sensitive: Mediet ditt er markert som følsom silence: Konto avgrensa suspend: Konto utvist welcome: @@ -1243,6 +1354,7 @@ nn: tip_following: Du fylgjer automatisk tenaradministrator(ane). For å finna fleire forvitnelege folk kan du sjekka den lokale og fødererte tidslina. tip_local_timeline: Den lokale tidslinjen blir kontant matet med meldinger fra personer på %{instance}. Dette er dine nærmeste naboer! tip_mobile_webapp: Hvis din mobile nettleser tilbyr deg å legge Mastadon til din hjemmeskjerm kan du motta push-varslinger. Det er nesten som en integrert app på mange måter! + tips: Tips title: Velkomen om bord, %{name}! users: follow_limit_reached: Du kan ikkje fylgja fleire enn %{limit} folk @@ -1263,7 +1375,11 @@ nn: delete: Slett delete_confirmation: Er du sikker på at du vil slette denne sikkerhetsnøkkelen? destroy: + error: Det oppsto et problem med å slette sikkerhetsnøkkelen. Prøv igjen. success: Sikkerhetsnøkkelen din ble vellykket slettet. invalid_credential: Ugyldig sikkerhetsnøkkel + nickname_hint: Skriv inn kallenavnet til din nye sikkerhetsnøkkel + not_enabled: Du har ikke aktivert WebAuthn ennå not_supported: Denne nettleseren støtter ikke sikkerhetsnøkler + otp_required: For å bruke sikkerhetsnøkler, må du først aktivere to-faktor autentisering. registered_on: Registrert den %{date} diff --git a/config/locales/no.yml b/config/locales/no.yml index 4ad36f0ad..668efca9c 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -7,6 +7,7 @@ active_count_after: aktive active_footnote: Månedlige aktive brukere (MAU) administered_by: 'Administrert av:' + api: API apps: Mobilapper apps_platforms: Bruk Mastodon gjennom iOS, Android og andre plattformer browse_directory: Bla gjennom en profilmappe og filtrer etter interesser @@ -23,9 +24,14 @@ instance_actor_flash: "Denne brukeren er en virtuell aktør brukt til å representere selve serveren og ingen individuell bruker. Det brukes til foreningsformål og bør ikke blokkeres med mindre du vil blokkere hele instansen, hvor domeneblokkering bør brukes i stedet. \n" learn_more: Lær mer privacy_policy: Privatlivsretningslinjer + rules: Server regler + rules_html: 'Nedenfor er et sammendrag av reglene du må følge om du vil ha en konto på denne serveren av Mastodon:' see_whats_happening: Se hva som skjer server_stats: 'Tjenerstatistikker:' source_code: Kildekode + status_count_after: + one: innlegg + other: statuser status_count_before: Som skrev tagline: Følg venner og oppdag nye terms: Bruksvilkår @@ -54,9 +60,11 @@ one: Følger other: Følgere following: Følger + instance_actor_flash: Denne kontoen er en virtuell figur som brukes til å representere selve serveren og ikke noen individuell bruker. Den brukes til forbundsformål og bør ikke oppheves. joined: Ble med den %{date} last_active: sist aktiv link_verified_on: Eierskap av denne lenken ble sjekket %{date} + media: Media moved_html: "%{name} har flyttet til %{new_profile_link}:" network_hidden: Denne informasjonen er ikke tilgjengelig never_active: Aldri @@ -72,6 +80,7 @@ posts_with_replies: Tuter med svar roles: admin: Administrator + bot: Bot group: Gruppe moderator: Moderere unavailable: Profilen er utilgjengelig @@ -89,6 +98,7 @@ add_email_domain_block: Svartelist E-postdomenet approve: Godkjenn approve_all: Godkjenn alle + approved_msg: Godkjent %{username} sin registreringsapplikasjon are_you_sure: Er du sikker? avatar: Profilbilde by_domain: Domene @@ -105,7 +115,9 @@ delete: Slett data deleted: Slettet demote: Degrader + destroyed_msg: "%{username} sine data er nå i kø for å bli slettet minimum" disable: Deaktiver + disable_sign_in_token_auth: Deaktiver e-post token autentisering disable_two_factor_authentication: Skru av 2FA disabled: Deaktivert display_name: Visningsnavn @@ -114,11 +126,14 @@ email: E-post email_status: E-poststatus enable: Aktiver + enable_sign_in_token_auth: Aktiver godkjenning av e-post token enabled: Aktivert + enabled_msg: Frossent %{username} sin konto followers: Følgere follows: Følginger header: Overskrift inbox_url: Innboks URL + invite_request_text: Begrunnelse for å bli med invited_by: Invitert av ip: IP-adresse joined: Ble med den @@ -130,6 +145,8 @@ login_status: Innloggingsstatus media_attachments: Mediavedlegg memorialize: Gjør om til et minne + memorialized: Minnet + memorialized_msg: Vellykket gjort av %{username} til en minnestedet moderation: active: Aktive all: Alle @@ -150,10 +167,14 @@ public: Offentlig push_subscription_expires: PuSH-abonnent utløper redownload: Oppdater avatar + redownloaded_msg: Oppdatert %{username} sin profil fra opprinnelse reject: Avslå reject_all: Avslå alle + rejected_msg: Vellykket avvist %{username} sin registreringsapplikasjon remove_avatar: Fjern profilbilde remove_header: Fjern overskrift + removed_avatar_msg: Fjernet %{username} sitt avatarbilde + removed_header_msg: Fjernet %{username} sin topptekst bilde resend_confirmation: already_confirmed: Denne brukeren er allerede bekreftet send: Send bekreftelses-epost på nytt @@ -163,11 +184,18 @@ resubscribe: Abonner på nytt role: Rettigheter roles: + admin: Administrator + moderator: Ordstyrer staff: Personale user: Bruker search: Søk search_same_email_domain: Andre brukere med samme E-postdomene search_same_ip: Andre brukere med den samme IP-en + security_measures: + only_password: Bare passord + password_and_2fa: Passord og 2FA + password_and_sign_in_token: Passord og e-post token + sensitized: Merket som følsom shared_inbox_url: Delt Innboks URL show: created_reports: Rapporter laget av denne kontoen @@ -177,6 +205,8 @@ statuses: Statuser subscribe: Abonnere suspended: Suspendert + suspension_irreversible: Dataene fra denne kontoen har blitt ikke reverserbart slettet. Du kan oppheve suspenderingen av kontoen for å gjøre den brukbart, men den vil ikke gjenopprette alle data den tidligere har hatt. + suspension_reversible_hint_html: Kontoen har blitt suspendert, og dataene vil bli fullstendig fjernet den %{date}. Frem til da kan kontoen gjenopprettes uten negative effekter. Hvis du ønsker å fjerne alle kontoens data umiddelbart, kan du gjøre det nedenfor. time_in_queue: Venter i kø %{time} title: Kontoer unconfirmed_email: Ubekreftet E-postadresse @@ -223,6 +253,13 @@ update_announcement: Oppdater kunngjøringen update_custom_emoji: Oppdater tilpasset Emoji update_status: Oppdater statusen + actions: + create_custom_emoji_html: "%{name} lastet opp ny emoji %{target}" + create_domain_allow_html: "%{name} tillatt føderasjon med domenet %{target}" + create_domain_block_html: "%{name} blokkert domene %{target}" + create_email_domain_block_html: "%{name} blokkert e-post domene %{target}" + create_ip_block_html: "%{name} opprettet regel for IP %{target}" + silence_account_html: "%{name} begrenset %{target} sin konto" deleted_status: "(statusen er slettet)" empty: Ingen loggføringer ble funnet. filter_by_action: Sorter etter handling @@ -237,10 +274,12 @@ new: create: Lag kunngjøring title: Ny kunngjøring + publish: Publiser published_msg: Kunngjøring publisert! scheduled_for: Planlagt for %{time} scheduled_msg: Kunngjøring planlagt for publisering! title: Kunngjøringer + unpublish: Avpubliser unpublished_msg: Kunngjøring upublisert! updated_msg: Kunngjøringen er oppdatert! custom_emojis: @@ -256,6 +295,7 @@ disable: Deaktivere disabled: Skrudd av disabled_msg: Deaktiverte emoji uten problem + emoji: Emoji enable: Aktivere enabled: Skrudd på enabled_msg: Aktiverte emojien uten problem @@ -276,32 +316,28 @@ updated_msg: Emoji oppdatert uten problemer! upload: Last opp dashboard: - authorized_fetch_mode: Sikkermodus - backlog: opphopsloggede jobber - config: Oppsett - feature_deletions: Kontoslettinger - feature_invites: Invitasjonslenker - feature_profile_directory: Profilmappe - feature_registrations: Registreringer - feature_relay: Føderasjonsoverganger - feature_timeline_preview: Tidslinje-forhåndsvisning - features: Egenskaper - hidden_service: Føderering med skjulte tjenester - open_reports: åpne rapporter - pending_tags: emneknagger som venter gjennomgang - pending_users: brukere som venter gjennomgang - recent_users: Nylige brukere - search: Fulltekstsøk - single_user_mode: Enpersons-modus + active_users: aktive brukere + interactions: interaksjoner + media_storage: Medialagring + new_users: nye brukere + opened_reports: rapporter åpnet + pending_reports_html: + one: "1 ventende rapport" + other: "%{count} ventende rapporter" + pending_tags_html: + one: "1 ventende hashtag" + other: "%{count} ventende hashtags" + pending_users_html: + one: "1 ventende bruker" + other: "%{count} ventende brukere" + resolved_reports: rapporter løst software: Programvare + sources: Kilder for registreringer space: Plassbruk title: Kontrollpanel - total_users: brukere totalt - trends: Trender - week_interactions: samhandlinger denne uken - week_users_active: aktiv denne uken - week_users_new: brukere denne uken - whitelist_mode: Hvitelistemodus + top_languages: Mest aktive språk + top_servers: Mest aktive servere + website: Nettside domain_allows: add_new: Hvitelist domene created_msg: Domenet har blitt hvitelistet @@ -323,6 +359,8 @@ silence: Målbind suspend: Utvis title: Ny domeneblokkering + obfuscate: Obfuskere domenenavn + obfuscate_hint: Delvis skjule domenenavnet i listen hvis det er aktivert for å annonsere listen over domenebegrensninger private_comment: Privat kommentar private_comment_hint: Kommenter angående denne domenebegrensningen for internt bruk av moderatorene. public_comment: Offentlig kommentar @@ -359,8 +397,27 @@ create: Legg til domene title: Ny blokkeringsoppføring av e-postdomene title: Blokkering av e-postdomene + follow_recommendations: + description_html: "Følg anbefalinger hjelper nye brukere med å finne interessant innhold. Når en bruker ikke har kommunisert med andre nok til å danne personlig tilpassede følger anbefalinger, anbefales disse kontoene i stedet. De beregnes daglig på nytt fra en blanding av kontoer der de høyeste engasjementene er og med høyest lokal tilhenger for et gitt språk." + language: For språk + status: Status + suppress: Undertrykk anbefalte følger + suppressed: Dempet + title: Følg anbefalinger + unsuppress: Gjenopprett følg-anbefaling instances: + back_to_all: All + back_to_limited: Begrenset + back_to_warning: Advarsel by_domain: Domene + delivery: + all: All + clear: Feil ved fjerning + restart: Starte levering + stop: Stopp levering + title: Levering + unavailable: Ikke tilgjengelig + warning: Advarsel delivery_available: Levering er tilgjengelig known_accounts: one: "%{count} kjent konto" @@ -398,6 +455,7 @@ '94670856': 3 år new: title: Opprett ny IP-regel + no_ip_block_selected: Ingen IP-regler ble endret da ingen ble valgt title: IP-regler pending_accounts: title: Avventende brukere (%{count}) @@ -417,6 +475,7 @@ save_and_enable: Lagre og skru på setup: Sett opp en overgangsforbindelse signatures_not_enabled: Overganger vil ikke fungere riktig mens sikkermodus eller hvitelistingsmodus er skrudd på + status: Status title: Overganger report_notes: created_msg: Rapportnotat opprettet! @@ -437,6 +496,8 @@ comment: none: Ingen created_at: Rapportert + forwarded: Videresendt + forwarded_to: Videresendt til %{domain} mark_as_resolved: Merk som løst mark_as_unresolved: Merk som uoppklart notes: @@ -451,10 +512,19 @@ reported_by: Rapportert av resolved: Løst resolved_msg: Rapport løst! + status: Status + target_origin: Opprinnelse for innrapportert konto title: Rapporter unassign: Fjern tilegning unresolved: Uløst updated_at: Oppdatert + rules: + add_new: Legg til et filter + delete: Slett + description_html: Mens de fleste hevder å ha lest og samtykket i tjenestevilkårene, leser de vanligvis ikke gjennom før etter et problem oppstår. Gjør det enklere å se serverens regler på et øyeblikk ved å gi dem i en flat kulepunktsliste. Prøv å holde individuelle regler korte og enkelt, men prøv å ikke dele dem opp i mange separate elementer heller. + edit: Rediger regel + empty: Ingen serverregler har blitt definert ennå. + title: Server regler settings: activity_api_enabled: desc_html: Antall lokale statusposter, aktive brukere og nye registreringer i ukentlige oppdelinger @@ -470,6 +540,7 @@ title: Egendefinert CSS default_noindex: desc_html: Påvirker alle brukerne som ikke har justert denne innstillingen selv + title: Velg brukere som er ute av søkemotoren indeksering som standard domain_blocks: all: Til alle disabled: Til ingen @@ -502,12 +573,17 @@ min_invite_role: disabled: Ingen title: Tillat invitasjoner fra + require_invite_text: + desc_html: Når registreringer krever manuell godkjenning, må du føye «Hvorfor vil du bli med?» tekstinput obligatoriske i stedet for valgfritt + title: Krev nye brukere for å oppgi en grunn for å delta registrations_mode: modes: approved: Godkjenning kreves for påmelding none: Ingen kan melde seg inn open: Hvem som helst kan melde seg inn title: Registreringsmodus + show_known_fediverse_at_about_page: + desc_html: Begrenser den offentlige tidslinjen som er knyttet til landingssiden når den er deaktivert, og viser bare lokalt innhold show_staff_badge: desc_html: Vis personalemerke på brukersiden title: Vis personalemerke @@ -531,10 +607,14 @@ desc_html: Vis offentlig tidslinje på landingssiden title: Forhandsvis tidslinjen title: Nettstedsinnstillinger + trendable_by_default: + desc_html: Påvirker hashtags som ikke har blitt nektet tidligere + title: Tillat hashtags for trend uten foregående vurdering trends: title: Trendende emneknagger site_uploads: delete: Slett den opplastede filen + destroyed_msg: Vellykket sletting av sideopplasting! statuses: back_to_account: Tilbake til kontosiden batch: @@ -543,10 +623,18 @@ nsfw_on: NSFW PÅ deleted: Slettet failed_to_execute: Utføring mislyktes + media: + title: Media no_media: Ingen media no_status_selected: Ingen statuser ble endret da ingen ble valgt title: Kontostatuser with_media: Med media + system_checks: + database_schema_check: + message_html: Det venter på databaseoverføringer. Vennligst kjør disse for å sikre at applikasjonen oppfører seg som forventet + rules_check: + action: Behandle serverregler + message_html: Du har ikke definert noen serverregler. tags: accounts_today: Ulike brukere i dag accounts_week: Unike brukstilfeller denne uken @@ -592,6 +680,7 @@ toot_layout: Tut-utseende application_mailer: notification_preferences: Endre E-postinnstillingene + salutation: "%{name}," settings: 'Endre foretrukne e-postinnstillinger: %{link}' view: 'Se:' view_profile: Vis Profil @@ -626,6 +715,9 @@ migrate_account: Flytt til en annen konto migrate_account_html: Hvis du ønsker å henvise denne kontoen til en annen, kan du konfigurere det her. or_log_in_with: Eller logg på med + providers: + cas: CAS + saml: SAML register: Bli med registration_closed: "%{instance} godtar ikke nye medlemmer" resend_confirmation: Send bekreftelsesinstruksjoner på nytt @@ -728,6 +820,8 @@ request: Be om ditt arkiv size: Størrelse blocks: Du blokkerer + bookmarks: Bokmerker + csv: CSV domain_blocks: Domeneblokkeringer lists: Lister mutes: Du demper @@ -790,6 +884,7 @@ success: Dine data ble mottatt og vil bli behandlet så fort som mulig types: blocking: Blokkeringsliste + bookmarks: Bokmerker domain_blocking: Domeneblokkeringsliste following: Følgeliste muting: Dempeliste @@ -820,6 +915,10 @@ lists: errors: limit: Du har nådd det maksimale antall lister + login_activities: + authentication_methods: + password: passord + title: Autentiseringshistorikk media_attachments: validations: images_and_video: Kan ikke legge ved video på en status som allerede inneholder bilder @@ -895,6 +994,8 @@ body: 'Din status ble fremhevd av %{name}:' subject: "%{name} fremhevde din status" title: Ny fremheving + status: + subject: "%{name} postet nettopp" notifications: email_events: E-postvarslinger for hendelser email_events_hint: 'Velg hendelser som du vil motta varslinger for:' @@ -922,6 +1023,7 @@ next: Neste older: Eldre prev: Forrige + truncate: "…" polls: errors: already_voted: Du har allerede stemt i denne avstemningen @@ -944,6 +1046,7 @@ relationships: activity: Kontoaktivitet dormant: Dormende + follow_selected_followers: Følg valgte tilhengere followers: Følgere following: Følginger invited: Invitert @@ -984,20 +1087,42 @@ browsers: alipay: AliPay blackberry: BlackBerry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox generic: Ukjent nettleser + ie: Internet Explorer + micro_messenger: MicroMessenger nokia: Nokia S40 Ovi-nettleser + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari uc_browser: UC Browser + weibo: Weibo current_session: Nåværende økt description: "%{browser} på %{platform}" explanation: Dette er nettlesere som er pålogget på din Mastodon-konto akkurat nå. ip: IP-adresse platforms: + adobe_air: Adobe Air + android: Android blackberry: BlackBerry chrome_os: Chrome OS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: macOS other: ukjent plattform + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone revoke: Tilbakekall revoke_success: Økt tilbakekalt title: Økter + view_authentication_history: Vis autentiseringshistorikk for kontoen din settings: account: Konto account_settings: Kontoinnstillinger @@ -1029,7 +1154,13 @@ image: one: "%{count} bilde" other: "%{count} bilder" + video: + one: "%{count} video" + other: "%{count} videoer" + boosted_from_html: Boostet fra %{acct_link} content_warning: 'Innholdsadvarsel: %{warning}' + errors: + in_reply_not_found: Posten du prøver å svare ser ikke ut til eksisterer. language_detection: Oppdag språk automatisk open_in_web: Åpne i nettleser over_character_limit: grense på %{max} tegn overskredet @@ -1039,15 +1170,21 @@ private: Kun offentlige tuter kan festes reblog: En fremheving kan ikke festes poll: + total_people: + one: "%{count} person" + other: "%{count} personer" total_votes: one: "%{count} stemme" other: "%{count} stemmer" vote: Stem show_more: Vis mer + show_newer: Vis nyere + show_older: Vis eldre show_thread: Vis tråden sign_in_to_participate: Logg på for å delta i samtalen title: "%{name}: «%{quote}»" visibilities: + direct: Direkte private: Privat private_long: Synlig kun for følgere public: Offentlig @@ -1150,6 +1287,7 @@ time: formats: default: "%-d. %b %Y, %H:%M" + month: "%b %Y" two_factor_authentication: add: Legg til disable: Skru av @@ -1171,10 +1309,14 @@ subject: Arkivet ditt er klart til å lastes ned sign_in_token: details: 'Her er detaljene om forsøket:' + explanation: 'Vi oppdaget et forsøk på å logge på kontoen fra en ukjent IP-adresse. Hvis dette er deg, vennligst skriv inn sikkerhetskoden nedenfor på påloggingssiden:' + further_actions: 'Hvis dette ikke var deg, vennligst endre passordet ditt og aktivere to-faktor autentisering på kontoen din. Du kan gjøre det her:' + subject: Bekreft forsøk på å logge inn title: Påloggingsforsøk warning: explanation: disable: Mens kontoen din er fryst, forblir dine kontodata intakt, men du kan ikke utføre noen handlinger før den har blitt tint opp. + sensitive: De opplastede mediefilene og linket vil bli behandlet som sensitive. silence: Mens kontoen din er begrenset, vil bare folk som allerede følger deg se dine tuter på denne tjeneren, og du kan bli ekskludert fra diverse offentlige oppføringer. Men andre kan fortsatt følge deg manuelt. suspend: Kontoen din har blitt suspendert, og alle dine tuter og opplastede media har blitt ugjenkallelig fjernet fra denne tjeneren, og fra tjenere der du hadde følgere. get_in_touch: Du kan svare på denne E-posten for å komme i kontakt med styret i %{instance}. @@ -1183,11 +1325,13 @@ subject: disable: Kontoen din, %{acct}, har blitt fryst none: Advarsel for %{acct} + sensitive: Din konto %{acct} medier har blitt merket som følsom silence: Kontoen din, %{acct}, har blitt begrenset suspend: Kontoen din, %{acct}, har blitt suspendert title: disable: Kontoen er fryst none: Advarsel + sensitive: Mediet ditt er markert som følsom silence: Kontoen er begrenset suspend: Kontoen er suspendert welcome: @@ -1205,13 +1349,17 @@ tip_following: Du følger din tjeners administrator(er) som standard. For å finne mer interessante personer, sjekk den lokale og forente tidslinjen. tip_local_timeline: Den lokale tidslinjen blir kontant matet med meldinger fra personer på %{instance}. Dette er dine nærmeste naboer! tip_mobile_webapp: Hvis din mobile nettleser tilbyr deg å legge Mastadon til din hjemmeskjerm kan du motta push-varslinger. Det er nesten som en integrert app på mange måter! + tips: Tips title: Velkommen ombord, %{name}! users: follow_limit_reached: Du kan ikke følge mer enn %{limit} personer + generic_access_help_html: Problemer med å få tilgang til din konto? Du kan kontakte %{email} for assistanse invalid_otp_token: Ugyldig to-faktorkode invalid_sign_in_token: Ugyldig sikkerhetskode otp_lost_help_html: Hvis du mistet tilgangen til begge deler, kan du komme i kontakt med %{email} + seamless_external_login: Du er logget inn via en ekstern tjeneste, så passord og e-post innstillinger er ikke tilgjengelige. signed_in_as: 'Innlogget som:' + suspicious_sign_in_confirmation: Du ser ikke ut til å ha logget inn fra denne enheten før, og du har ikke logget inn en stund, så vi sender en sikkerhetskode til din e-postadresse for å bekrefte at det er deg. verification: explanation_html: 'Du kan bekrefte at du selv er eieren av lenkene i din profilmetadata. For å gjøre det, må det tillenkede nettstedet inneholde en lenke som fører tilbake til Mastodon-profilen din. Lenken tilbake ha en rel="me"-attributt. Tekstinnholdet til lenken er irrelevant. Her er et eksempel:' verification: Bekreftelse @@ -1222,7 +1370,11 @@ delete: Slett delete_confirmation: Er du sikker på at du vil slette denne sikkerhetsnøkkelen? destroy: + error: Det oppsto et problem med å slette sikkerhetsnøkkelen. Prøv igjen. success: Sikkerhetsnøkkelen din ble vellykket slettet. invalid_credential: Ugyldig sikkerhetsnøkkel + nickname_hint: Skriv inn kallenavnet til din nye sikkerhetsnøkkel + not_enabled: Du har ikke aktivert WebAuthn ennå not_supported: Denne nettleseren støtter ikke sikkerhetsnøkler + otp_required: For å bruke sikkerhetsnøkler, må du først aktivere to-faktor autentisering. registered_on: Registrert den %{date} diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 91eccd6ad..64035d34a 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -240,10 +240,12 @@ oc: new: create: Crear una anóncia title: Anóncia novèla + publish: Publicar published_msg: Anóncia corrèctament publicada ! scheduled_for: Programada per %{time} scheduled_msg: Anóncia programada per publicacion ! title: Anóncias + unpublish: Despublicar unpublished_msg: Anóncia corrèctament tirada ! updated_msg: Anóncia corrèctament actualizada ! custom_emojis: @@ -279,32 +281,26 @@ oc: updated_msg: Emoji ben mes a jorn ! upload: Enviar dashboard: - authorized_fetch_mode: Mòde recuperacion autorizat - backlog: Accions en retard - config: Configuracion - feature_deletions: Supressions de comptes - feature_invites: Ligams convidat - feature_profile_directory: Annuari de perfils - feature_registrations: Inscripcions - feature_relay: Relai de federacion - feature_timeline_preview: Apercebut del flux d’actualitats - features: Foncionalitats - hidden_service: Federacion amb servicis amagats - open_reports: Senhalaments dobèrts - pending_tags: etiquetas en espèra de validacion - pending_users: utilizaires en espèra de validacion - recent_users: Utilizaires recents - search: Recèrca tèxte complèt - single_user_mode: Mòde sol utilizaire + active_users: utilizaires actius + interactions: interraccions + media_storage: Emmagazinatge dels mèdias + new_users: utilizaire novèl + pending_reports_html: + one: "1 senhalament en espèra" + other: "%{count} senhalaments en espèra" + pending_tags_html: + one: "1 etiqueta en espèra" + other: "%{count} etiquetas en espèra" + pending_users_html: + one: "1 utilizaire en espèra" + other: "%{count} utilizaires en espèra" + resolved_reports: senhalament resolguts software: Logicial space: Utilizacion de l’espaci title: Tablèu de bòrd - total_users: total dels utilizaires - trends: Tendéncias - week_interactions: interaccions aquesta setmana - week_users_active: actius aquesta setmana - week_users_new: utilizaires aquesta setmana - whitelist_mode: Mòde lista blanca + top_languages: Lengas mai activas + top_servers: Servidors mai actius + website: Site web domain_allows: add_new: Plaçar en lista blanca created_msg: Lo domeni es corrèctament estat plaçat en lista blanca @@ -361,6 +357,9 @@ oc: create: Crear un blocatge title: Nòu blocatge de domeni de corrièl title: Blocatge de domeni de corrièl + follow_recommendations: + language: Per lenga + status: Estat instances: by_domain: Domeni delivery_available: Liurason disponibla @@ -901,6 +900,8 @@ oc: body: "%{name} a tornat partejar vòstre estatut :" subject: "%{name} a tornat partejar vòstre estatut" title: Novèl partatge + status: + subject: "%{name} ven de publicar" notifications: email_events: Eveniments per las notificacions per corrièl email_events_hint: 'Seleccionatz los eveniments que volètz recebre :' @@ -1082,6 +1083,11 @@ oc: public_long: Tot lo monde pòt veire unlisted: Pas listat unlisted_long: Tot lo monde pòt veire mai serà pas visible sul flux public + statuses_cleanup: + enabled: Supression automatica de publicacions ancianas + keep_direct: Gardar los messatges dirèctes + keep_media: Gardar las publicacions amb pèça-junta + keep_pinned: Gardar las publicacions penjadas stream_entries: pinned: Tut penjat reblogged: a partejat diff --git a/config/locales/pl.yml b/config/locales/pl.yml index c215ee1ca..8023251c9 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -127,6 +127,7 @@ pl: demote: Degraduj destroyed_msg: Dane %{username} są teraz w kolejce do natychmiastowego usunięcia disable: Dezaktywuj + disable_sign_in_token_auth: Wyłącz uwierzytelnianie tokenu e-mail disable_two_factor_authentication: Wyłącz uwierzytelnianie dwuetapowe disabled: Dezaktywowano display_name: Wyświetlana nazwa @@ -135,6 +136,7 @@ pl: email: Adres e-mail email_status: Stan e-maila enable: Aktywuj + enable_sign_in_token_auth: Włącz uwierzytelnianie tokenu e-mail enabled: Aktywowano enabled_msg: Pomyślnie odblokowano konto %{username} followers: Śledzący @@ -199,6 +201,10 @@ pl: search: Szukaj search_same_email_domain: Inni użytkownicy z e-mail w tej domenie search_same_ip: Inni użytkownicy z tym samym IP + security_measures: + only_password: Tylko hasło + password_and_2fa: Hasło i 2FA + password_and_sign_in_token: Hasło i token e-mail sensitive: Wrażliwe sensitized: oznaczono jako wrażliwe shared_inbox_url: Adres udostępnianej skrzynki @@ -250,8 +256,10 @@ pl: destroy_unavailable_domain: Usuń niedostępną domenę disable_2fa_user: Wyłącz 2FA disable_custom_emoji: Wyłącz niestandardowe emoji + disable_sign_in_token_auth_user: Wyłącz uwierzytelnianie tokenu e-mail dla użytkownika disable_user: Wyłącz użytkownika enable_custom_emoji: Włącz niestandardowe emoji + enable_sign_in_token_auth_user: Włącz uwierzytelnianie tokenu e-mail dla użytkownika enable_user: Włącz użytkownika memorialize_account: Upamiętnij konto promote_user: Podnieś uprawnienia @@ -293,8 +301,10 @@ pl: destroy_unavailable_domain_html: "%{name} wznowił(a) doręczanie do domeny %{target}" disable_2fa_user_html: "%{name} wyłączył(a) uwierzytelnianie dwustopniowe użytkownikowi %{target}" disable_custom_emoji_html: "%{name} wyłączył(a) emoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} wyłączył/a uwierzytelnianie tokenem e-mail dla %{target}" disable_user_html: "%{name} zablokował(a) możliwość logowania użytkownikowi %{target}" enable_custom_emoji_html: "%{name} włączył(a) emoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} włączył/a uwierzytelnianie tokenem e-mail dla %{target}" enable_user_html: "%{name} przywrócił(a) możliwość logowania użytkownikowi %{target}" memorialize_account_html: "%{name} nadał(a) kontu %{target} status in memoriam" promote_user_html: "%{name} podniósł(a) uprawnienia użytkownikowi %{target}" @@ -369,32 +379,34 @@ pl: updated_msg: Pomyślnie zaktualizowano emoji! upload: Dodaj dashboard: - authorized_fetch_mode: Tryb bezpieczny - backlog: zaległe zadania - config: Konfiguracja - feature_deletions: Usuwanie kont - feature_invites: Zaproszenia - feature_profile_directory: Katalog profilów - feature_registrations: Rejestracja - feature_relay: Przekazywanie federacji - feature_timeline_preview: Podgląd osi czasu - features: Możliwości - hidden_service: Federowanie z ukrytymi usługami - open_reports: otwarte zgłoszenia - pending_tags: hasztagi oczekujące na sprawdzenie - pending_users: użytkownicy oczekujący na sprawdzenie - recent_users: Ostatni użytkownicy - search: Wyszukiwanie pełnego tekstu - single_user_mode: Tryb jednego użytkownika + active_users: aktywni użytkownicy + interactions: interakcje + media_storage: Przechowywanie mediów + new_users: nowi użytkownicy + opened_reports: otwarte zgłoszenia + pending_reports_html: + few: "%{count} oczekujące raporty" + many: "%{count} oczekujących raportów" + one: "1 oczekujący raport" + other: "%{count} oczekujących raportów" + pending_tags_html: + few: "%{count} oczekujące hashtagi" + many: "%{count} oczekujących hashtagów" + one: "1 oczekujący hashtag" + other: "%{count} oczekujących hashtagów" + pending_users_html: + few: "%{count} oczekujących użytkowników" + many: "%{count} oczekujących użytkowników" + one: "1 oczekujący użytkownik" + other: "%{count} oczekujących użytkowników" + resolved_reports: zamkniętych zgłoszeń software: Oprogramowanie + sources: Źródła rejestracji space: Używana powierzchnia title: Panel administracyjny - total_users: łącznie użytkowników - trends: Na czasie - week_interactions: interakcje w tym tygodniu - week_users_active: aktywni w tym tygodniu - week_users_new: rejestracje w tym tygodniu - whitelist_mode: Tryb białej listy + top_languages: Najbardziej aktywne języki + top_servers: Najbardziej aktywne serwery + website: Strona domain_allows: add_new: Zatwierdź domenę created_msg: Domena dodana do białej listy @@ -587,6 +599,7 @@ pl: resolved: Rozwiązane resolved_msg: Pomyślnie rozwiązano zgłoszenie. status: Stan + target_origin: Pochodzenie zgłaszanego konta title: Zgłoszenia unassign: Cofnij przypisanie unresolved: Nierozwiązane @@ -1026,6 +1039,17 @@ pl: lists: errors: limit: Przekroczyłeś maksymalną liczbę utworzonych list + login_activities: + authentication_methods: + otp: aplikacja weryfikacji dwuetapowej + password: hasło + sign_in_token: kod bezpieczeństwa e-mail + webauthn: klucze bezpieczeństwa + description_html: Jeśli widzisz aktywność, której nie rozpoznajesz, rozważ zmianę hasła i włączenie weryfikacji dwuetapowej. + empty: Brak historii uwierzytelniania + failed_sign_in_html: Próba logowania zakończona niepowodzeniem przy pomocy %{method} z %{ip} (%{browser}) + successful_sign_in_html: Pomyślne logowanie przy pomocy %{method} z %{ip} (%{browser}) + title: Historia uwierzytelniania media_attachments: validations: images_and_video: Nie możesz załączyć pliku wideo do wpisu, który zawiera już zdjęcia @@ -1236,6 +1260,7 @@ pl: revoke: Unieważnij revoke_success: Pomyślnie unieważniono sesję title: Sesje + view_authentication_history: Zobacz historię uwierzytelniania swojego konta settings: account: Konto account_settings: Ustawienia konta @@ -1256,6 +1281,7 @@ pl: preferences: Preferencje profile: Profil relationships: Śledzeni i śledzący + statuses_cleanup: Automatyczne usuwanie posta two_factor_authentication: Uwierzytelnianie dwuetapowe webauthn_authentication: Klucze bezpieczeństwa statuses: @@ -1319,6 +1345,40 @@ pl: public_long: Widoczne dla wszystkich użytkowników unlisted: Niewypisane unlisted_long: Widoczne dla wszystkich, ale nie wyświetlane na publicznych osiach czasu + statuses_cleanup: + enabled: Automatycznie usuwaj stare wiadomości + enabled_hint: Automatycznie usuwa Twoje posty, gdy osiągną określony próg wiekowy, chyba że spełniają jeden z poniższych wyjątków + exceptions: Wyjątki + explanation: Ponieważ usuwanie postów jest kosztowną operacją, odbywa się to powoli, gdy serwer nie jest zajęty. Z tego powodu Twoje posty mogą zostać usunięte po pewnym czasie po osiągnięciu progu wiekowego. + ignore_favs: Ignoruj ulubione + ignore_reblogs: Ignoruj podbicia + interaction_exceptions: Wyjątki oparte na interakcjach + interaction_exceptions_explanation: Zauważ, że nie ma gwarancji usunięcia wpisów, jeśli ich wartość spadnie poniżej progu ulubionych lub podbić po tym, kiedy już były raz sprawdzone. + keep_direct: Zachowaj bezpośrednie wiadomości + keep_direct_hint: Nie usuwa żadnych bezpośrednich wiadomości + keep_media: Zachowaj posty z załącznikami multimedialnymi + keep_media_hint: Nie usuwa żadnych postów z załącznikami multimedialnymi + keep_pinned: Zachowaj przypięte posty + keep_pinned_hint: Nie usuwa żadnych przypiętych postów + keep_polls: Zachowaj ankiety + keep_polls_hint: Nie usuwa żadnej z ankiet + keep_self_bookmark: Zachowaj posty, które dodałeś do zakładek + keep_self_bookmark_hint: Nie usuwaj własnych postów, jeśli je dodałeś do zakładek + keep_self_fav: Zachowaj ulubione posty + keep_self_fav_hint: Nie usuwaj własnych postów, jeśli je polubiłeś + min_age: + '1209600': 2 tygodnie + '15778476': 6 miesięcy + '2629746': 1 miesiąc + '31556952': 1 rok + '5259492': 2 miesiące + '63113904': 2 lata + '7889238': 3 miesiące + min_age_label: Próg wieku + min_favs: Zachowaj ulubione posty więcej niż + min_favs_hint: Nie usuwa żadnego z Twoich wpisów, które otrzymały więcej niż tę liczbę ulubionych. Pozostaw puste, aby usunąć posty bez względu na ich liczbę ulubionych + min_reblogs: Utrzymuj posty wzmocnione więcej niż + min_reblogs_hint: Nie usuwa żadnego z Twoich wpisów, które zostały wzmocnione więcej niż tyle razy. Pozostaw puste, aby usunąć posty bez względu na ich liczbę wzmocnień stream_entries: pinned: Przypięty wpis reblogged: podbił diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 1cec6bec3..812972867 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -318,32 +318,9 @@ pt-BR: updated_msg: Emoji atualizado com sucesso! upload: Enviar dashboard: - authorized_fetch_mode: Modo seguro - backlog: tarefas na fila - config: Configuração - feature_deletions: Exclusão de contas - feature_invites: Convites - feature_profile_directory: Diretório de perfis - feature_registrations: Novas contas - feature_relay: Repetidor da federação - feature_timeline_preview: Prévia da linha - features: Funcionalidades - hidden_service: Federação com serviços onion - open_reports: Denúncias em aberto - pending_tags: hashtags pendentes - pending_users: usuários pendentes - recent_users: Usuários recentes - search: Pesquisa em texto - single_user_mode: Modo de usuário único software: Software space: Uso de espaço em disco title: Painel de controle - total_users: usuários no total - trends: Em alta - week_interactions: interações essa semana - week_users_active: ativos essa semana - week_users_new: usuários essa semana - whitelist_mode: Modo lista de permitidos domain_allows: add_new: Permitir domínio created_msg: Domínio foi permitido diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 1a903b96f..93b375c3d 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -97,7 +97,7 @@ pt-PT: delete: Eliminar destroyed_msg: Nota de moderação excluída com sucesso! accounts: - add_email_domain_block: Adicionar o domínio de email à lista negra + add_email_domain_block: Adicionar o domínio de e-mail à lista negra approve: Aprovar approve_all: Aprovar todos approved_msg: Inscrição de %{username} aprovada com sucesso @@ -106,7 +106,7 @@ pt-PT: by_domain: Domínio change_email: changed_msg: E-mail da conta alterado com sucesso! - current_email: E-mail actual + current_email: E-mail atual label: Alterar e-mail new_email: Novo e-mail submit: Alterar e-mail @@ -118,7 +118,8 @@ pt-PT: deleted: Eliminada demote: Despromoveu destroyed_msg: Os dados de %{username} estão agora em fila de espera para serem eliminados de imediato - disable: Desativar + disable: Congelar + disable_sign_in_token_auth: Desativar token de autenticação por e-mail disable_two_factor_authentication: Desativar 2FA disabled: Congelada display_name: Nome a mostrar @@ -126,7 +127,8 @@ pt-PT: edit: Editar email: E-mail email_status: Estado do e-mail - enable: Ativar + enable: Descongelar + enable_sign_in_token_auth: Ativar token de autenticação por e-mail enabled: Ativado enabled_msg: Descongelou com sucesso a conta %{username} followers: Seguidores @@ -177,8 +179,8 @@ pt-PT: removed_header_msg: Imagem de cabeçalho de %{username} removida com sucesso resend_confirmation: already_confirmed: Este utilizador já está confirmado - send: Reenviar um email de confirmação - success: Email de confirmação enviado com sucesso! + send: Reenviar um e-mail de confirmação + success: E-mail de confirmação enviado com sucesso! reset: Restaurar reset_password: Reset palavra-passe resubscribe: Reinscrever @@ -189,8 +191,12 @@ pt-PT: staff: Equipa user: Utilizador search: Pesquisar - search_same_email_domain: Outros utilizadores com o mesmo domínio de email + search_same_email_domain: Outros utilizadores com o mesmo domínio de e-mail search_same_ip: Outros utilizadores com o mesmo IP + security_measures: + only_password: Apenas palavra-passe + password_and_2fa: Palavra-passe e 2FA + password_and_sign_in_token: Palavra-passe e token por e-mail sensitive: Marcar como sensível sensitized: marcada como sensível shared_inbox_url: URL da caixa de entrada compartilhada @@ -242,8 +248,10 @@ pt-PT: destroy_unavailable_domain: Eliminar Domínio Indisponível disable_2fa_user: Desativar 2FA disable_custom_emoji: Desativar Emoji Personalizado + disable_sign_in_token_auth_user: Desativar token de autenticação por e-mail para Utilizador disable_user: Desativar Utilizador enable_custom_emoji: Ativar Emoji Personalizado + enable_sign_in_token_auth_user: Ativar token de autenticação por e-mail para Utilizador enable_user: Ativar Utilizador memorialize_account: Memorizar Conta promote_user: Promover Utilizador @@ -285,8 +293,10 @@ pt-PT: destroy_unavailable_domain_html: "%{name} retomou a entrega ao domínio %{target}" disable_2fa_user_html: "%{name} desativou o requerimento de autenticação em dois passos para o utilizador %{target}" disable_custom_emoji_html: "%{name} desabilitou o emoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} desativou token de autenticação por e-mail para %{target}" disable_user_html: "%{name} desativou o acesso para o utilizador %{target}" enable_custom_emoji_html: "%{name} habilitou o emoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} ativou token de autenticação por e-mail para %{target}" enable_user_html: "%{name} ativou o acesso para o utilizador %{target}" memorialize_account_html: "%{name} transformou a conta de %{target} em um memorial" promote_user_html: "%{name} promoveu o utilizador %{target}" @@ -361,32 +371,28 @@ pt-PT: updated_msg: Emoji atualizado com sucesso! upload: Enviar dashboard: - authorized_fetch_mode: Modo seguro - backlog: trabalhos atrasados - config: Configuração - feature_deletions: Eliminações da conta - feature_invites: Links de convites - feature_profile_directory: Diretório de perfis - feature_registrations: Registos - feature_relay: Repetidor da federação - feature_timeline_preview: Pré-visualização da cronologia - features: Componentes - hidden_service: Federação com serviços escondidos - open_reports: relatórios abertos - pending_tags: hashtags a aguardar revisão - pending_users: utilizadores a aguardar revisão - recent_users: Utilizadores recentes - search: Pesquisa com texto completo - single_user_mode: Modo de utilizador único + active_users: utilizadores activos + interactions: interações + media_storage: Armazenamento de media + new_users: novos utilizadores + opened_reports: relatórios abertos + pending_reports_html: + one: "1 relatório pendente" + other: "%{count} relatórios pendentes" + pending_tags_html: + one: "1 hashtag pendente" + other: "%{count} hashtags pendentes" + pending_users_html: + one: "1 utilizador pendente" + other: "%{count} utilizadores pendentes" + resolved_reports: relatórios resolvidos software: Software + sources: Origem de inscrições space: Utilização do espaço title: Painel de controlo - total_users: total de utilizadores - trends: Tendências - week_interactions: interacções desta semana - week_users_active: activo esta semana - week_users_new: utilizadores nesta semana - whitelist_mode: Modo lista branca + top_languages: Principais idiomas activos + top_servers: Servidores mais activos + website: Website domain_allows: add_new: Colocar domínio na lista branca created_msg: Domínio foi adicionado à lista branca com sucesso @@ -436,16 +442,16 @@ pt-PT: view: Ver domínios bloqueados email_domain_blocks: add_new: Adicionar novo - created_msg: Bloqueio de domínio de email criado com sucesso + created_msg: Bloqueio de domínio de e-mail criado com sucesso delete: Eliminar - destroyed_msg: Bloqueio de domínio de email excluído com sucesso + destroyed_msg: Bloqueio de domínio de e-mail excluído com sucesso domain: Domínio empty: Nenhum domínio de e-mail atualmente na lista negra. from_html: de %{domain} new: create: Adicionar domínio - title: Novo bloqueio de domínio de email - title: Bloqueio de Domínio de Email + title: Novo bloqueio de domínio de e-mail + title: Domínios de e-mail bloqueados follow_recommendations: description_html: "Recomendações de quem seguir ajudam novos utilizadores a encontrar conteúdo interessante rapidamente.. Quando um utilizador não interage com outros o suficiente para formar recomendações personalizadas, estas contas são recomendadas. Elas são recalculadas diariamente a partir de uma mistura de contas com mais atividade recente e maior número de seguidores locais para um determinado idioma." language: Para o idioma @@ -491,7 +497,7 @@ pt-PT: total_reported: Relatórios sobre eles total_storage: Anexos de media invites: - deactivate_all: Desactivar todos + deactivate_all: Desativar todos filter: all: Todos available: Disponíveis @@ -521,7 +527,7 @@ pt-PT: add_new: Adicionar novo repetidor delete: Eliminar description_html: Um repetidor de federação é um servidor intermediário que troca grandes volumes de publicações públicas entre instâncias que o subscrevem e publicam. Ele pode ajudar pequenas e medias instâncias a descobrir conteúdo do fediverso que, de outro modo, exigiria que os utilizadores locais seguissem manualmente outras pessoas em instâncias remotas. - disable: Desactivar + disable: Desativar disabled: Desactivado enable: Activar enable_hint: Uma vez ativado, a tua instância irá subscrever a todas as publicações deste repetidor e irá começar a enviar as suas publicações públicas para ele. @@ -569,6 +575,7 @@ pt-PT: resolved: Resolvido resolved_msg: Relatório resolvido com sucesso! status: Estado + target_origin: Origem da conta reportada title: Relatórios unassign: Não atribuir unresolved: Por resolver @@ -588,14 +595,14 @@ pt-PT: desc_html: Separa os nomes de utilizadores por vírgulas. Funciona apenas com contas locais e desbloqueadas. O padrão quando vazio são todos os administradores locais. title: Seguidores predefinidos para novas contas contact_information: - email: Inserir um endereço de email para tornar público + email: Inserir um endereço de e-mail para tornar público username: Insira um nome de utilizador custom_css: desc_html: Modificar a aparência com CSS carregado em cada página title: CSS personalizado default_noindex: desc_html: Afeta todos os utilizadores que não alteraram esta configuração - title: Desactivar, por omissão, a indexação de utilizadores por parte dos motores de pesquisa + title: Desativar, por omissão, a indexação de utilizadores por parte dos motores de pesquisa domain_blocks: all: Para toda a gente disabled: Para ninguém @@ -742,14 +749,14 @@ pt-PT: discovery: Descobrir localization: body: Mastodon é traduzido por voluntários. - guide_link: https://crowdin.com/project/mastodon/pt-PT + guide_link: https://pt.crowdin.com/project/mastodon/ guide_link_text: Todos podem contribuir. sensitive_content: Conteúdo sensível toot_layout: Disposição do Toot application_mailer: notification_preferences: Alterar preferências de e-mail salutation: "%{name}," - settings: 'Alterar preferências de email: %{link}' + settings: 'Alterar preferências de e-mail: %{link}' view: 'Ver:' view_profile: Ver perfil view_status: Ver publicação @@ -772,11 +779,11 @@ pt-PT: prefix_invited_by_user: "@%{name} convidou-o a juntar-se a esta instância do Mastodon!" prefix_sign_up: Inscreva-se hoje no Mastodon! suffix: Com uma conta, poderá seguir pessoas, publicar atualizações e trocar mensagens com utilizadores de qualquer instância Mastodon e muito mais! - didnt_get_confirmation: Não recebeu o email de confirmação? + didnt_get_confirmation: Não recebeu o e-mail de confirmação? dont_have_your_security_key: Não tem a sua chave de segurança? forgot_password: Esqueceste a palavra-passe? invalid_reset_password_token: Token de modificação da palavra-passe é inválido ou expirou. Por favor, solicita um novo. - link_to_otp: Insere um código de duas etapas do teu telemóvel ou um código de recuperação + link_to_otp: Insira um código de autenticação em duas etapas do seu telemóvel ou um código de recuperação link_to_webauth: Usa o teu dispositivo de chave de segurança login: Entrar logout: Sair @@ -794,7 +801,7 @@ pt-PT: set_new_password: Editar palavra-passe setup: email_below_hint_html: Se o endereço de e-mail abaixo estiver incorreto, pode alterá-lo aqui e receber um novo e-mail de confirmação. - email_settings_hint_html: O e-mail de confirmação foi enviado para %{email}. Se esse endereço de e-mail não estiver correcto, pode alterá-lo nas definições da conta. + email_settings_hint_html: O e-mail de confirmação foi enviado para %{email}. Se esse endereço de e-mail não estiver correto, pode alterá-lo nas definições da conta. title: Configuração status: account_status: Estado da conta @@ -819,9 +826,9 @@ pt-PT: title: Seguir %{acct} challenge: confirm: Continuar - hint_html: "Dica: Não vamos pedir novamente a sua senha durante a próxima hora." - invalid_password: Senha inválida - prompt: Confirme a sua senha para continuar + hint_html: "Dica: Não vamos pedir novamente a sua palavra-passe durante a próxima hora." + invalid_password: Palavra-passe inválida + prompt: Confirmar a sua palavra-passe para continuar crypto: errors: invalid_key: não é uma chave Ed25519 ou Curve25519 válida @@ -1004,6 +1011,17 @@ pt-PT: lists: errors: limit: Número máximo de listas alcançado + login_activities: + authentication_methods: + otp: aplicação de autenticação em duas etapas + password: palavra-passe + sign_in_token: código de segurança por e-mail + webauthn: chaves de segurança + description_html: Se vê atividade que não reconhece, considere alterar a sua palavra-passe e ativar a autenticação em duas etapas. + empty: Sem histórico de autenticação disponível + failed_sign_in_html: Tentativa falhada de início de sessão com %{method} de %{ip} (%{browser}) + successful_sign_in_html: Iniciada sessão com sucesso com %{method} de %{ip} (%{browser}) + title: Histórico de autenticação media_attachments: validations: images_and_video: Não é possível anexar um vídeo a uma publicação que já contém imagens @@ -1210,6 +1228,7 @@ pt-PT: revoke: Revogar revoke_success: Sessão revogada com sucesso title: Sessões + view_authentication_history: Ver histórico de autenticação da sua conta settings: account: Conta account_settings: Definições da conta @@ -1230,7 +1249,8 @@ pt-PT: preferences: Preferências profile: Perfil relationships: Seguindo e seguidores - two_factor_authentication: Autenticação em dois passos + statuses_cleanup: Remoção automática da publicação + two_factor_authentication: Autenticação em duas etapas webauthn_authentication: Chaves de segurança statuses: attached: @@ -1281,6 +1301,40 @@ pt-PT: public_long: Todos podem ver unlisted: Público, mas não mostre no timeline público unlisted_long: Todos podem ver, porém não será postado nas timelines públicas + statuses_cleanup: + enabled: Apagar publicações antigas automaticamente + enabled_hint: Apaga automaticamente as suas publicações assim que atingirem um limite de idade específico, a não ser que correspondam a uma das exceções abaixo + exceptions: Exceções + explanation: Como excluir publicações é uma operação cara, isto é realizado lentamente ao longo do tempo, quando o servidor não está ocupado de outra forma. Por esta razão, as suas publicações podem ser apagadas um pouco depois de atingirem o limite de idade. + ignore_favs: Ignorar favoritos + ignore_reblogs: Ignorar partilhas + interaction_exceptions: Exceções baseadas em interações + interaction_exceptions_explanation: Note que não há garantia de que as publicações sejam excluídas se ficarem abaixo do limite de favoritos ou partilhas após as ter verificado uma vez. + keep_direct: Manter mensagens diretas + keep_direct_hint: Não apaga nenhuma das suas mensagens diretas + keep_media: Manter publicações com anexos de multimédia + keep_media_hint: Não exclui nenhuma das suas publicações com multimédia anexada + keep_pinned: Manter publicações fixadas + keep_pinned_hint: Não apagar nenhuma das suas publicações fixadas + keep_polls: Manter enquetes + keep_polls_hint: Não apaga nenhuma das suas enquetes + keep_self_bookmark: Manter as publicações que guardou + keep_self_bookmark_hint: Não apaga as suas próprias publicações se as tiver guardado + keep_self_fav: Manter as publicações que gostou + keep_self_fav_hint: Não apaga as suas próprias publicações se as tiver favoritado + min_age: + '1209600': 2 semanas + '15778476': 6 meses + '2629746': 1 mês + '31556952': 1 ano + '5259492': 2 meses + '63113904': 2 anos + '7889238': 3 meses + min_age_label: Limite de idade + min_favs: Manter as publicações favoritas mais de + min_favs_hint: Não apaga nenhuma das suas publicações que tenha recebido mais do que esta quantidade de favoritos. Deixe em branco para apagar as publicações, independentemente do número de favoritos + min_reblogs: Manter as publicações partilhadas mais de + min_reblogs_hint: Não apaga nenhuma das suas publicações que tenha sido partilhada mais do que este número de vezes. Deixe em branco para apagar as publicações, independentemente do número de partilhas stream_entries: pinned: Toot fixado reblogged: partilhado @@ -1383,11 +1437,11 @@ pt-PT: disable: Desativar disabled_success: Autenticação em duas etapas desativada com sucesso edit: Editar - enabled: A autenticação em dois passos está ativada - enabled_success: Autenticação em dois passos ativada com sucesso + enabled: A autenticação em duas etapas está ativada + enabled_success: Autenticação em duas etapas ativada com sucesso generate_recovery_codes: Gerar códigos para recuperar conta lost_recovery_codes: Códigos de recuperação permite que você recupere o acesso a sua conta se você perder seu telefone. Se você perder os códigos de recuperação, você pode regera-los aqui. Seus códigos antigos serão invalidados. - methods: Métodos de duas etapas + methods: Métodos de autenticação em duas etapas otp: Aplicação de autenticação recovery_codes: Cópia de segurança dos códigos de recuperação recovery_codes_regenerated: Códigos de recuperação foram gerados com sucesso @@ -1401,7 +1455,7 @@ pt-PT: sign_in_token: details: 'Aqui estão os detalhes da tentativa:' explanation: 'Detectamos uma tentativa de entrar na sua conta a partir de um endereço IP não reconhecido. Se é você, por favor, insira o código de segurança abaixo na página de acesso:' - further_actions: 'Se não foi você, por favor altere sua senha e ative a autenticação de dois fatores na sua conta. Pode fazê-lo aqui:' + further_actions: 'Se não foi você, por favor altere a sua palavra-passe e ative a autenticação em duas etapzs na sua conta. Pode fazê-lo aqui:' subject: Por favor, confirme a tentativa de acesso title: Tentativa de acesso warning: @@ -1434,7 +1488,7 @@ pt-PT: full_handle: O teu nome completo full_handle_hint: Isto é o que você diria aos seus amigos para que eles lhe possam enviar mensagens ou seguir a partir de outra instância. review_preferences_action: Alterar preferências - review_preferences_step: Certifica-te de configurar as tuas preferências, tais como os e-mails que gostarias de receber ou o nível de privacidade que desejas que as tuas publicações tenham por defeito. Se não sofres de enjoo, podes ativar a opção de auto-iniciar GIFs. + review_preferences_step: Certifique-se de configurar as suas preferências, tais como os e-mails que gostaria de receber ou o nível de privacidade que deseja que as suas publicações tenham por defeito. Se não sofres de enjoo, podes ativar a opção de auto-iniciar GIFs. subject: Bem-vindo ao Mastodon tip_federated_timeline: A cronologia federativa é uma visão global da rede Mastodon. Mas só inclui pessoas que os teus vizinhos subscrevem, por isso não é uma visão completa. tip_following: Segues o(s) administrador(es) do teu servidor por defeito. Para encontrar mais pessoas interessantes, procura nas cronologias local e federada. @@ -1447,12 +1501,12 @@ pt-PT: generic_access_help_html: Problemas para aceder à sua conta? Pode entrar em contacto com %{email} para obter ajuda invalid_otp_token: Código de autenticação inválido invalid_sign_in_token: Cógido de segurança inválido - otp_lost_help_html: Se tu perdeste acesso a ambos, tu podes entrar em contacto com %{email} + otp_lost_help_html: Se perdeu acesso a ambos, pode entrar em contacto com %{email} seamless_external_login: Tu estás ligado via um serviço externo. Por isso, as configurações da palavra-passe e do e-mail não estão disponíveis. signed_in_as: 'Registado como:' suspicious_sign_in_confirmation: Parece que não iniciou sessão através deste dispositivo antes, e não acede à sua conta há algum tempo. Portanto, enviámos um código de segurança para o seu endereço de e-mail para confirmar que é você. verification: - explanation_html: 'Pode comprovar que é o dono dos links nos metadados do seu perfil. Para isso, o website para o qual o link aponta tem de conter um link para o seu perfil do Mastodon. Este link tem de ter um atributo rel="me". O conteúdo do texto não é relevante. Aqui está um exemplo:' + explanation_html: 'Pode comprovar que é o dono dos links nos metadados do seu perfil. Para isso, o website para o qual o link aponta tem de conter um link para o seu perfil do Mastodon. Esse link tem de ter um atributo rel="me". O conteúdo do texto não é relevante. Aqui está um exemplo:' verification: Verificação webauthn_credentials: add: Adicionar nova chave de segurança @@ -1469,5 +1523,5 @@ pt-PT: nickname_hint: Introduza o apelido da sua nova chave de segurança not_enabled: Ainda não ativou o WebAuthn not_supported: Este navegador não suporta chaves de segurança - otp_required: Para usar chaves de segurança, por favor ative primeiro a autenticação de duas etapas. + otp_required: Para usar chaves de segurança, por favor ative primeiro a autenticação em duas etapas. registered_on: Registado em %{date} diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 3ce3f610c..a5f71ae10 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -127,6 +127,7 @@ ru: demote: Разжаловать destroyed_msg: Данные %{username} поставлены в очередь на удаление disable: Заморозка + disable_sign_in_token_auth: Отключить аутентификацию по e-mail кодам disable_two_factor_authentication: Отключить 2FA disabled: Отключено display_name: Отображаемое имя @@ -135,6 +136,7 @@ ru: email: E-mail email_status: Статус e-mail enable: Включить + enable_sign_in_token_auth: Включить аутентификацию по e-mail кодам enabled: Включен enabled_msg: Учётная запись %{username} успешно разморожена followers: Подписчики @@ -199,6 +201,10 @@ ru: search: Поиск search_same_email_domain: Другие пользователи с тем же доменом электронной почты search_same_ip: Другие пользователи с таким же IP + security_measures: + only_password: Только пароль + password_and_2fa: Пароль и 2FA + password_and_sign_in_token: Пароль и e-mail код sensitive: Отметить как «деликатного содержания» sensitized: отмечено как «деликатного характера» shared_inbox_url: URL общих входящих @@ -250,8 +256,10 @@ ru: destroy_unavailable_domain: Исключение доменов из списка недоступных disable_2fa_user: Отключение 2FA disable_custom_emoji: Отключение эмодзи + disable_sign_in_token_auth_user: Отключение аутентификации по e-mail кодам у пользователей disable_user: Заморозка пользователей enable_custom_emoji: Включение эмодзи + enable_sign_in_token_auth_user: Включение аутентификации по e-mail кодам у пользователей enable_user: Разморозка пользователей memorialize_account: Присвоение пользователям статуса «мемориала» promote_user: Повышение пользователей @@ -293,8 +301,10 @@ ru: destroy_unavailable_domain_html: "%{name} возобновил доставку на узел %{target}" disable_2fa_user_html: "%{name} отключил(а) требование двухэтапной авторизации для пользователя %{target}" disable_custom_emoji_html: "%{name} отключил(а) эмодзи %{target}" + disable_sign_in_token_auth_user_html: "%{name} отключил(а) аутентификацию по e-mail кодам для %{target}" disable_user_html: "%{name} заморозил(а) пользователя %{target}" enable_custom_emoji_html: "%{name} включил(а) эмодзи %{target}" + enable_sign_in_token_auth_user_html: "%{name} включил(а) аутентификацию по e-mail кодам для %{target}" enable_user_html: "%{name} разморозил(а) пользователя %{target}" memorialize_account_html: "%{name} перевел(а) учётную запись пользователя %{target} в статус памятника" promote_user_html: "%{name} повысил(а) пользователя %{target}" @@ -369,32 +379,34 @@ ru: updated_msg: Эмодзи обновлён! upload: Загрузить dashboard: - authorized_fetch_mode: Защищённый режим - backlog: задачи - config: Конфигурация - feature_deletions: Удаление учётных записей - feature_invites: Пригласительные ссылки - feature_profile_directory: Каталог профилей - feature_registrations: Регистрация - feature_relay: Ретрансляторы - feature_timeline_preview: Предпросмотр ленты - features: Возможности - hidden_service: Федерация со скрытыми сервисами - open_reports: открытых жалоб - pending_tags: хэштеги, ожидающие проверки - pending_users: пользователи, ожидающие проверки - recent_users: Недавние пользователи - search: Полнотекстовый поиск - single_user_mode: Однопользовательский режим + active_users: активные пользователи + interactions: взаимодействия + media_storage: Медиа файлы + new_users: новые пользователи + opened_reports: жалоб открыто + pending_reports_html: + few: "%{count} жалобы к рассмотрению" + many: "%{count} жалоб к рассмотрению" + one: "%{count} жалоба к рассмотрению" + other: "%{count} жалобы к рассмотрению" + pending_tags_html: + few: "%{count} хэштега к рассмотрению" + many: "%{count} хэштегов к рассмотрению" + one: "%{count} хэштег к рассмотрению" + other: "%{count} хэштега к рассмотрению" + pending_users_html: + few: "%{count} регистрации к рассмотрению" + many: "%{count} регистраций к рассмотрению" + one: "%{count} регистрация к рассмотрению" + other: "%{count} регистрации к рассмотрению" + resolved_reports: жалоб решено software: Программное обеспечение + sources: Источники регистрации space: Использовано места title: Панель управления - total_users: всего пользователей - trends: Актуальное - week_interactions: взаимодействий на этой неделе - week_users_active: активно на этой неделе - week_users_new: пользователей на этой неделе - whitelist_mode: Белый список + top_languages: Самые активные языки + top_servers: Самые активные серверы + website: Веб-сайт domain_allows: add_new: Внести в белый список created_msg: Домен добавлен в белый список @@ -592,6 +604,7 @@ ru: resolved: Решённые resolved_msg: Жалоба обработана, спасибо! status: Статус + target_origin: Происхождение объекта жалобы title: Жалобы unassign: Снять назначение unresolved: Нерешённые @@ -794,7 +807,7 @@ ru: description: prefix_invited_by_user: "@%{name} приглашает вас присоединиться к этому узлу Mastodon." prefix_sign_up: Зарегистрируйтесь в Mastodon уже сегодня! - suffix: Имея учётную запись, вы можете подписываться на людей, постить обновления, обмениваться сообщениями с пользователями любых узлов Mastodon и не только! + suffix: С учётной записью вы сможете подписываться на людей, публиковать обновления, обмениваться сообщениями с пользователями любых сообществ Mastodon и не только! didnt_get_confirmation: Не получили инструкцию для подтверждения? dont_have_your_security_key: У вас нет ключа безопасности? forgot_password: Забыли пароль? @@ -1031,6 +1044,17 @@ ru: lists: errors: limit: Вы достигли максимального числа списков + login_activities: + authentication_methods: + otp: приложение двухфакторной аутентификации + password: пароль + sign_in_token: код безопасности из e-mail + webauthn: ключи безопасности + description_html: Если вы видите неопознанное действие, смените пароль и/или включите двухфакторную авторизацию. + empty: Нет доступной истории входов + failed_sign_in_html: Неудачная попытка входа используя %{method} через %{browser} (%{ip}) + successful_sign_in_html: Успешный вход используя %{method} через %{browser} (%{ip}) + title: История входов media_attachments: validations: images_and_video: Нельзя добавить видео к посту с изображениями @@ -1241,6 +1265,7 @@ ru: revoke: Завершить revoke_success: Сессия завершена title: Сессии + view_authentication_history: Посмотреть историю входов с учётной записью settings: account: Учётная запись account_settings: Управление учётной записью @@ -1261,6 +1286,7 @@ ru: preferences: Настройки profile: Профиль relationships: Подписки и подписчики + statuses_cleanup: Авто-удаление постов two_factor_authentication: Подтверждение входа webauthn_authentication: Ключи безопасности statuses: @@ -1324,6 +1350,40 @@ ru: public_long: Показывать всем unlisted: Скрывать из лент unlisted_long: Показывать всем, но не отображать в публичных лентах + statuses_cleanup: + enabled: Автоматически удалять устаревшие посты + enabled_hint: Автоматически удаляет ваши посты после того, как они достигли определённого возраста, за некоторыми исключениями ниже. + exceptions: Исключения + explanation: Из-за того, что удаление постов — это ресурсоёмкий процесс, оно производится медленно со временем, когда сервер менее всего занят. По этой причине, посты могут удаляться не сразу, а спустя определённое время, по достижению возрастного порога. + ignore_favs: Игнорировать отметки «избранного» + ignore_reblogs: Игнорировать продвижения + interaction_exceptions: Исключения на основе взаимодействий + interaction_exceptions_explanation: 'Обратите внимание: нет никаких гарантий, что посты будут удалены, после того, как они единожды перешли порог по отметкам «избранного» или продвижений.' + keep_direct: Не удалять адресованные посты + keep_direct_hint: Не удалять ваши посты с «адресованной» видимостью. + keep_media: Не удалять посты с вложениями + keep_media_hint: Не удалять ваши посты, содержащие любые медийные вложения + keep_pinned: Не удалять закреплённые посты + keep_pinned_hint: Не удалять ваши посты, которые закреплены в профиле. + keep_polls: Не удалять опросы + keep_polls_hint: Не удалять ваши посты с опросами. + keep_self_bookmark: Не удалять закладки + keep_self_bookmark_hint: Не удалять ваши посты с закладками + keep_self_fav: Оставить посты, отмеченные «избранными» + keep_self_fav_hint: Не удалять ваши посты, если вы отметили их как «избранные». + min_age: + '1209600': 2 недели + '15778476': 6 месяцев + '2629746': 1 месяц + '31556952': 1 год + '5259492': 2 месяца + '63113904': 2 года + '7889238': 3 месяца + min_age_label: Возрастной порог + min_favs: Порог отметок «избранного» + min_favs_hint: Не удаляет ваши посты, которые получили отметок «избранного» больше, чем указано выше. Оставьте поле пустым, чтобы удалять посты независимо от количества отметок. + min_reblogs: Порог продвижений + min_reblogs_hint: Не удаляет ваши посты, количество продвижений которых больше, чем указано выше. Оставьте поле пустым, чтобы удалять посты независимо от количества продвижений. stream_entries: pinned: Закреплённый пост reblogged: продвинул(а) diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 18142cb49..eeea2793d 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -21,9 +21,7 @@ sc: federation_hint_html: Cun unu contu in %{instance} as a pòdere sighire persones in cale si siat serbidore de Mastodon o de su fediversu. get_apps: Proa un'aplicatzione mòbile hosted_on: Mastodon allogiadu in %{domain} - instance_actor_flash: 'Custu contu est un''atore virtuale impreadu pro rapresentare su pròpiu serbidore, no est un''utente individuale. Benit impreadu pro punnas de federatzione e no ddu dias dèpere blocare si non boles blocare su domìniu intreu, e in cussu casu dias dèpere impreare unu blocu de domìniu. - - ' + instance_actor_flash: Custu contu est un'atore virtuale impreadu pro rapresentare su pròpiu serbidore, no est un'utente individuale. Benit impreadu pro punnas de federatzione e no ddu dias dèpere blocare si non boles blocare su domìniu intreu, e in cussu casu dias dèpere impreare unu blocu de domìniu. learn_more: Àteras informatziones privacy_policy: Polìtica de riservadesa rules: Règulas de su serbidore @@ -357,32 +355,9 @@ sc: updated_msg: Emoji atualizadu upload: Càrriga dashboard: - authorized_fetch_mode: Modalidade segura - backlog: tareas arretradas - config: Cunfiguratzione - feature_deletions: Eliminatzione de contos - feature_invites: Ligàmenes de invitu - feature_profile_directory: Diretòriu de profilos - feature_registrations: Registros - feature_relay: Ripetidore de federatzione - feature_timeline_preview: Pre-visualizatzione de sa lìnia de tempus - features: Caraterìsticas - hidden_service: Federatzione cun servìtzios cuados - open_reports: informes abertos - pending_tags: etichetas de revisionare - pending_users: persones de revisionare - recent_users: Persones reghentes - search: Chirca de testu cumpletu - single_user_mode: Modalidade de utente ùnicu software: Programmas space: Impreu de ispàtziu title: Pannellu - total_users: persones in totale - trends: Tendèntzias - week_interactions: interatziones de custa chida - week_users_active: persones ativas custa chida - week_users_new: persones noas de custa chida - whitelist_mode: Modalidade de federatzione limitada domain_allows: add_new: Permite sa federatzione cun domìniu created_msg: Sa federatzione cun su domìniu est istada permìtida @@ -1260,6 +1235,15 @@ sc: public_long: Podet èssere bidu dae chie si siat unlisted: Esclùidu de sa lista unlisted_long: Podet èssere bidu dae chie si siat, però non podet èssere ammustradu in lìnias de tempus pùblicas + statuses_cleanup: + min_age: + '1209600': 2 chidas + '15778476': 6 meses + '2629746': 1 mese + '31556952': 1 annu + '5259492': 2 meses + '63113904': 2 annos + '7889238': 3 meses stream_entries: pinned: Tut apicadu reblogged: cumpartzidu diff --git a/config/locales/si.yml b/config/locales/si.yml index 568a148dd..6fa12abec 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -3,11 +3,18 @@ si: about: about_this: පිලිබඳව active_count_after: සක්‍රීයයි + active_footnote: මාසික ක්‍රියාකාරී පරිශීලකයින් (මාක්‍රිප) api: යෙ.ක්‍ර. මු. (API) apps: ජංගම යෙදුම් + contact: සබඳතාව + contact_missing: සකසා නැත + contact_unavailable: අ/නොවේ + documentation: ප්‍රලේඛනය + get_apps: ජංගම යෙදුමක් උත්සාහ කරන්න learn_more: තව දැනගන්න privacy_policy: රහස්‍යතා ප්‍රතිපත්තිය rules: සේවාදායකයේ නීති + source_code: මූල කේතය status_count_after: one: තත්වය other: තත්වයන් @@ -15,21 +22,31 @@ si: unavailable_content_description: domain: සේවාදායකය reason: හේතුව + silenced_title: සීමාසහිත සේවාදායක suspended_title: අත්හිටවූ සේවාදායකයන් user_count_after: one: පරිශීලක other: පරිශීලකයින් + what_is_mastodon: මාස්ටඩන් යනු කුමක්ද? accounts: + joined: "%{date} එක් වී ඇත" media: මාධ්‍යය + nothing_here: මෙහි කිසිත් නැත! roles: admin: පරිපාලක bot: ස්වයං ක්‍රමලේඛය group: සමූහය admin: + account_moderation_notes: + create: සටහන හැරයන්න accounts: + add_email_domain_block: වි-තැපැල් වසම අවහිර කරන්න + approve: අනුමත කරන්න + approve_all: සියල්ල අනුමත කරන්න are_you_sure: ඔබට විශ්වාසද? by_domain: වසම change_email: + changed_msg: ගිණුමේ වි-තැපෑල සාර්ථකව වෙනස් කෙරිණි! current_email: වත්මන් වි-තැපෑල label: වි-තැපෑල වෙනස් කරන්න new_email: නව විද්‍යුත් තැපෑල @@ -43,7 +60,10 @@ si: email: විද්‍යුත් තැපෑල email_status: වි-තැපෑලෙහි තත්වය enabled: සබල කර ඇත + header: ශීර්ෂය + invite_request_text: එක්වීම සඳහා හේතුව ip: අ.ජා. කෙ. (IP) + joined: එක් වී ඇත location: all: සියල්ල local: ස්ථානීය @@ -54,27 +74,53 @@ si: moderation: active: සක්‍රීයයි all: සියල්ල + silenced: සීමාසහිත suspended: අත්හිටුවන ලදි + most_recent_ip: වඩා මෑත අ.ජා.කෙ.(IP) perform_full_suspension: අත්හිටුවන්න protocol: කෙටුම්පත + public: ප්‍රසිද්ධ + redownload: පැතිකඩ නැවුම්කරන්න reject: ප්‍රතික්ෂේප + remove_header: ශීර්ෂය ඉවත්කරන්න + reset: නැවත සකසන්න + reset_password: මුරපදය නැවතසකසන්න role: අවසරයන් roles: admin: පරිපාලක staff: කාර්ය මණ්ඩලය user: පරිශීලක search: සොයන්න + security_measures: + only_password: මුරපදය පමණි sensitive: සංවේදී silence: සීමාව + silenced: සීමාසහිත statuses: තත්වයන් suspended: අත්හිටුවන ලදි title: ගිණුම් + username: පරිශීලක නාමය + warn: අවවාද web: වියමන action_logs: action_types: + change_email_user: පරිශීලකට වි-තැපෑල වෙනස් කරන්න + create_account_warning: අවවාදයක් සාදන්න + create_announcement: නිවේදනය සාදන්න + create_domain_allow: වසම් ඉඩදීමක් සාදන්න + create_domain_block: වසම් අවහිරයක් සාදන්න create_ip_block: අ.ජා. කෙ. (IP) නීතියක් සාදන්න + disable_user: පරිශීලක අබල කරන්න enable_user: පරිශීලක සබල කරන්න + reopen_report: වාර්තාව නැවත විවෘත කරන්න + reset_password_user: මුරපදය නැවතසකසන්න + suspend_account: ගිණුම අත්හිටුවන්න + update_announcement: නිවේදනය යාවත්කාල කරන්න + filter_by_action: ක්‍රියාමාර්ගය අනුව පෙරන්න + filter_by_user: පරිශීලක අනුව පෙරන්න announcements: + edit: + title: නිවේදනය සංස්කරණය live: සජීවී new: create: නිවේදනය සාදන්න @@ -85,17 +131,21 @@ si: by_domain: වසම copy: පිටපත් create_new_category: නව ප්‍රවර්ගයක් සාදන්න + disable: අබල කරන්න + disabled: අබල කර ඇත + enable: සබල කරන්න + enabled: සබල කර ඇත list: ලැයිස්තුව + shortcode: කෙටිකේතය upload: උඩුගත කරන්න dashboard: - features: විශේෂාංග - open_reports: වාර්තා විවෘත කරන්න software: මෘදුකාංගය title: උපකරණ පුවරුව domain_blocks: domain: වසම new: severity: + noop: කිසිවක් නැත suspend: අත්හිටුවන්න private_comment: පුද්ගලික අදහස public_comment: ප්‍රසිද්ධ අදහස @@ -111,44 +161,99 @@ si: new: create: වසම එකතු කරන්න title: අවහිර කළ වි-තැපැල් වසම් + follow_recommendations: + language: භාෂාව සඳහා + status: තත්වය instances: + back_to_all: සියල්ල + back_to_warning: අවවාදයයි by_domain: වසම + delivery: + all: සියල්ල + warning: අවවාදයයි moderation: all: සියල්ල private_comment: පුද්ගලික අදහස public_comment: ප්‍රසිද්ධ අදහස + invites: + filter: + all: සියල්ල + expired: කල් ඉකුත් වී ඇත + title: පෙරහන + title: ඇරයුම් ip_blocks: + add_new: නීතිය සාදන්න + expires_in: + '1209600': සති 2 + '15778476': මාස 6 + '2629746': මාස 1 + '31556952': අවුරුදු 1 + '86400': දින 1 + '94670856': අවුරුදු 3 + new: + title: නව අ.ජා. කෙ.(IP) නීතියක් සාදන්න title: අ.ජා. කෙ. (IP) නීති relays: disable: අබල කරන්න + disabled: අබල කර ඇත enable: සබල කරන්න enabled: සබල කර ඇත status: තත්වය reports: are_you_sure: ඔබට විශ්වාසද? by_target_domain: වාර්තා කළ ගිණුමෙහි වසම + comment: + none: කිසිවක් නැත notes: create: සටහන එකතු කරන්න + reopen: වාර්තාව නැවත විවෘත කරන්න report: "@%{id} වාර්තා කරන්න" reported_account: වාර්තා කළ ගිණුම status: තත්වය title: වාර්තා + rules: + add_new: නීතිය එකතු කරන්න + edit: නීතිය සංස්කරණය කරන්න + title: සේවාදායකයේ නීති settings: + contact_information: + email: ව්‍යාපාරික වි-තැපෑල + site_description: + title: සේවාදායකයේ සවිස්තරය + site_short_description: + title: සේවාදායකයේ කෙටි සවිස්තරය site_title: සේවාදායකයේ නම + title: අඩවියේ සැකසුම් statuses: + back_to_account: ගිණුම් පිටුවට ආපසු යන්න media: title: මාධ්‍යය + no_media: මාධ්‍ය නැත + with_media: මාධ්‍ය සමඟ + title: පරිපාලනය + appearance: + advanced_web_interface: උසස් වියමන අතුරුමුහුණත + localization: + guide_link: https://crowdin.com/project/mastodon + sensitive_content: සංවේදී අන්තර්ගතයකි application_mailer: salutation: "%{name}," auth: change_password: මුර පදය login: පිවිසෙන්න logout: නික්මෙන්න + or_log_in_with: හෝ සමඟ පිවිසෙන්න + security: ආරක්ෂාව status: account_status: ගිණුමේ තත්වය authorize_follow: post_follow: + close: හෝ ඔබට මෙම කවුළුව වසාදැමිය හැකිය. + return: පරිශීලකගේ පැතිකඩ පෙන්වන්න web: වියමන ට යන්න + challenge: + confirm: ඉදිරියට + invalid_password: අවලංගු නොවන මුරපදයකි date: formats: default: "%b %d, %Y" @@ -169,13 +274,16 @@ si: exports: archive_takeout: date: දිනය + download: ඔබගේ සංරක්ෂිතය බාගන්න size: ප්‍රමාණය + bookmarks: පොත් යොමු lists: ලැයිස්තු storage: මාධ්‍ය ගබඩාව filters: contexts: account: පැතිකඩයන් notifications: දැනුම්දීම් + thread: සංවාද edit: title: පෙරහන සංස්කරණය index: @@ -186,9 +294,16 @@ si: developers: සංවර්ධකයින් more: තව… resources: සම්පත් + generic: + all: සියල්ල + copy: පිටපත් + save_changes: වෙනස්කම් සුරකින්න identity_proofs: + active: ක්‍රියාත්මකයි identity: අනන්‍යතාව imports: + types: + bookmarks: පොත් යොමු upload: උඩුගත කරන්න invites: expires_in: @@ -198,6 +313,28 @@ si: '43200': හෝරා 12 '604800': සති 1 '86400': දින 1 + title: මිනිසුන්ට ආරාධනා කරන්න + login_activities: + authentication_methods: + password: මුර පදය + notification_mailer: + mention: + action: පිළිතුර + title: නව සඳැහුම + notifications: + other_settings: වෙනත් දැනුම්දීම් සැකසුම් + number: + human: + decimal_units: + format: "%n%u" + otp_authentication: + enable: සබල කරන්න + pagination: + next: ඊළඟ + truncate: "…" + relationships: + activity: ගිණුමේ ක්‍රියාකාරකම් + status: ගිණුමේ තත්වය sessions: browser: අතිරික්සුව browsers: @@ -212,7 +349,9 @@ si: micro_messenger: මයික්‍රොමැසෙන්ජර් opera: ඔපෙරා otter: ඔටර් + qq: කියුකියු අතිරික්සුව safari: සෆාරි + uc_browser: යූසී අතිරික්සුව weibo: වෙයිබො ip: අ.ජා. කෙ. (IP) platforms: @@ -230,6 +369,19 @@ si: settings: account: ගිණුම account_settings: ගිණුමේ සැකසුම් + edit_profile: පැතිකඩ සංස්කරණය + export: දත්ත නිර්යාත + import: ආයාත කරන්න + import_and_export: ආයාත සහ නිර්යාත + notifications: දැනුම්දීම් + profile: පැතිකඩ + statuses: + show_more: තව පෙන්වන්න + title: '%{name}: "%{quote}"' + visibilities: + public: ප්‍රසිද්ධ + stream_entries: + sensitive_content: සංවේදී අන්තර්ගතයකි two_factor_authentication: edit: සංස්කරණය - webauthn: ආරක්ෂිත යතුරු + webauthn: ආරක්‍ෂණ යතුරු diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml index e02e87fcb..96620ed6c 100644 --- a/config/locales/simple_form.ar.yml +++ b/config/locales/simple_form.ar.yml @@ -36,6 +36,7 @@ ar: current_username: يرجى إدخال اسم المستخدم الخاص بالحساب الحالي قصد التأكيد digest: تُرسَل إليك بعد مُضيّ مدة مِن خمول نشاطك و فقط إذا ما تلقيت رسائل شخصية مباشِرة أثناء فترة غيابك مِن الشبكة discoverable: سِجل الملفات التعريفية للمستخدمين هو طريقة أخرى لبلوغ جمهور أوسع + discoverable_no_directory: السماح باكتشاف حسابك من قبل الغرباء من خلال التوصيات والميزات الأخرى email: سوف تتلقى رسالة إلكترونية للتأكيد fields: يُمكنك عرض 4 عناصر على شكل جدول في صفحتك التعريفية header: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير %{size}. سيتم تصغيره إلى %{dimensions}px diff --git a/config/locales/simple_form.br.yml b/config/locales/simple_form.br.yml index 8dd933869..8c490e952 100644 --- a/config/locales/simple_form.br.yml +++ b/config/locales/simple_form.br.yml @@ -1,32 +1,64 @@ --- br: simple_form: + hints: + defaults: + avatar: PNG, GIF pe JPG. Brasoc'h eget %{size}. A vo izelaet betek %{dimensions}px + header: PNG, GIF pe JPG. Brasoc'h eget %{size}. A vo izelaet betek %{dimensions}px + password: Implijit 8 lizherennoù d'an neubeutañ + setting_default_sensitive: Ar mediaoù kizidik a zo kuzhet dre ziouer ha gallout a reont bezañ diguzhet dre ur c'hlik + setting_display_media_default: Kuzhat mediaoù aroueziet evel kizidik + form_challenge: + current_password: Emaoc'h o tont-tre ul lec'h diogel labels: account_warning_preset: title: Titl admin_account_action: + type: Ober types: + disable: Skornañ + sensitive: Kizidik suspend: Astalañ announcement: + all_day: Darvoud a-hed an devezh + ends_at: Diwezh an darvoud + starts_at: Deroù an darvoud text: Kemenn defaults: + avatar: Avatar + chosen_languages: Silañ yezhoù + confirm_new_password: Kadarnaat ar ger-tremen nevez + confirm_password: Kadarnaat ar ger-tremen + context: Kadarnaat ar ger-tremen current_password: Ger-tremen a vremañ data: Roadennoù display_name: Anv diskouezet email: Chomlec'h postel + expires_in: Mont war e dermen goude header: Talbenn locale: Yezh ar c'hetal new_password: Ger-tremen nevez password: Ger-tremen + phrase: Ger-alc'hwez pe frazenn setting_display_media_default: Dre ziouer setting_display_media_hide_all: Kuzhat pep tra setting_display_media_show_all: Diskouez pep tra username: Anv + whole_word: Ger a-bezh featured_tag: name: Ger-klik invite: comment: Evezhiadenn + ip_block: + ip: IP + notification_emails: + follow: Heuliañ a ra {name} ac'hanoc'h tag: name: Ger-klik + trendable: Aotren an hashtag-mañ da zont war wel dindan tuadurioù 'no': Ket + recommended: Erbedet + required: + mark: "*" + text: rekis 'yes': Ya diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 9e647dafe..e82ac2f73 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -36,6 +36,7 @@ ca: current_username: Per a confirmar, si us plau entra el nom d'usuari del compte actual digest: Només s'envia després d'un llarg període d'inactivitat amb un resum de les mencions que has rebut en la teva absència discoverable: El directori de perfils és una altra manera per quin el teu compte pot assolir una audiència més àmplia + discoverable_no_directory: Permet que el teu compte sigui descobert per estranys grácies a les sugerències i altres característiques email: Se t'enviarà un correu electrònic de confirmació fields: Pots tenir fins a 4 elements que es mostren com a taula al teu perfil header: PNG, GIF o JPG. Màxim %{size}. S'escalarà a %{dimensions}px diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index 8403f2c16..3ba75acc9 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -35,7 +35,8 @@ cs: current_password: Z bezpečnostních důvodů prosím zadejte heslo současného účtu current_username: Potvrďte prosím tuto akci zadáním uživatelského jména aktuálního účtu digest: Odesíláno pouze po dlouhé době nečinnosti a pouze, pokud jste při své nepřítomnosti obdrželi osobní zprávy - discoverable: Umožnit, aby mohli váš účet objevit neznámí lidé pomocí doporučení a dalších funkcí + discoverable: Umožnit objevení vašeho účtu neznámými uživateli skrze doporučení, adresář profilů a další funkce + discoverable_no_directory: Umožnit objevení vašeho účtu neznámými uživateli skrze doporučení a další funkce email: Bude vám poslán potvrzovací e-mail fields: Na profilu můžete mít až 4 položky zobrazené jako tabulka header: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšen na %{dimensions} px diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index 93c57ee85..3492a41b9 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -36,6 +36,7 @@ da: current_username: For at bekræfte, angiv brugernavnet for den aktuelle konto digest: Sendes kun efter en lang inaktivitetsperiode, og kun hvis du har modtaget personlige beskeder i dit fravær discoverable: Tillad din konto at blive fundet af fremmede via anbefalinger og øvrige funktioner + discoverable_no_directory: Tillad din konto at blive fundet af fremmede via anbefalinger og øvrige funktioner email: Du tilsendes en bekræftelsese-mail fields: Du kan have op til 4 elementer vist som en tabel på din profil header: PNG, GIF eller JPG. Maks. %{size}. Auto-nedskaleres til %{dimensions}px diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index 562ba19cd..58ffab89a 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -36,6 +36,7 @@ de: current_username: Um das zu bestätigen, gib den Benutzernamen des aktuellen Kontos ein digest: Wenn du eine lange Zeit inaktiv bist, wird dir eine Zusammenfassung von Erwähnungen zugeschickt, die du in deiner Abwesenheit empfangen hast discoverable: Das Profilverzeichnis ist eine andere Möglichkeit, mit der dein Konto ein größeres Publikum erreichen kann + discoverable_no_directory: Erlaube deinem Konto durch Empfehlungen und andere Funktionen von Fremden entdeckt zu werden email: Du wirst eine Bestätigungs-E-Mail erhalten fields: Du kannst bis zu 4 Elemente auf deinem Profil anzeigen lassen, die als Tabelle dargestellt werden header: PNG, GIF oder JPG. Maximal %{size}. Wird auf %{dimensions} px herunterskaliert diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 113aef2d3..bf864748c 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -35,7 +35,8 @@ en: current_password: For security purposes please enter the password of the current account current_username: To confirm, please enter the username of the current account digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence - discoverable: Allow your account to be discovered by strangers through recommendations and other features + discoverable: Allow your account to be discovered by strangers through recommendations, profile directory and other features + discoverable_no_directory: Allow your account to be discovered by strangers through recommendations and other features email: You will be sent a confirmation e-mail fields: You can have up to 4 items displayed as a table on your profile header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index b810bac67..b00cc46f1 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -56,7 +56,7 @@ eo: sessions: otp: 'Enmetu la kodon de dufaktora aŭtentigo el via telefono aŭ uzu unu el viaj realiraj kodoj:' user: - chosen_languages: Kiam estas elekto, nur mesaĝoj en elektitaj lingvoj aperos en publikaj tempolinioj + chosen_languages: Kiam estas elekto, nur mesaĝoj en elektitaj lingvoj aperos en publikaj templinioj labels: account: fields: @@ -114,7 +114,7 @@ eo: password: Pasvorto phrase: Vorto aŭ frazo setting_advanced_layout: Ebligi altnivelan retpaĝan interfacon - setting_aggregate_reblogs: Grupigi diskonigojn en tempolinioj + setting_aggregate_reblogs: Grupigi diskonigojn en templinioj setting_auto_play_gif: Aŭtomate ekigi GIF-ojn setting_boost_modal: Montri konfirman fenestron antaŭ ol diskonigi mesaĝon setting_crop_images: Stuci bildojn en negrandigitaj mesaĝoj al 16x9 diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index ea918648e..bd6dbf98b 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -36,6 +36,7 @@ es-AR: current_username: Para confirmar, por favor, ingresá el nombre de usuario de la cuenta actual digest: Sólo enviado tras un largo periodo de inactividad, y sólo si recibiste mensajes personales en tu ausencia discoverable: Permití que tu cuenta sea descubierta por extraños a través de recomendaciones y otras funciones + discoverable_no_directory: Permití que tu cuenta sea descubierta por extraños a través de recomendaciones y otras funciones email: Se te enviará un correo electrónico de confirmación fields: Podés tener hasta 4 elementos mostrados en una tabla en tu perfil header: 'PNG, GIF o JPG. Máximo: %{size}. Será subescalado a %{dimensions} píxeles' diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 0bf72bac2..dc1bf65e6 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -120,7 +120,7 @@ es-MX: text: Anuncio defaults: autofollow: Invitar a seguir tu cuenta - avatar: Avatar + avatar: Foto de perfil bot: Esta es una cuenta bot chosen_languages: Filtrar idiomas confirm_new_password: Confirmar nueva contraseña diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index cc01cd179..286558854 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -36,6 +36,7 @@ es: current_username: Para confirmar, por favor ingrese el nombre de usuario de la cuenta actual digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia discoverable: Permite que tu cuenta sea encontrada por desconocidos por medio de recomendaciones y otras herramientas + discoverable_no_directory: Permite que tu cuenta sea encontrada por desconocidos por medio de recomendaciones y otras herramientas email: Se le enviará un correo de confirmación fields: Puedes tener hasta 4 elementos mostrándose como una tabla en tu perfil header: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index 5305a5394..50e7dd3f2 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -36,6 +36,7 @@ fa: current_username: برای تأیید، لطفاً نام کاربری حساب فعلی را وارد کنید digest: تنها وقتی فرستاده می‌شود که مدتی طولانی فعالیتی نداشته باشید و در این مدت برای شما پیغام خصوصی‌ای نوشته شده باشد discoverable: فهرست گزیدهٔ کاربران، راهی دیگر برای رسیدن به مخاطبان گسترده‌تری برای حسابتان است + discoverable_no_directory: اجازه دهید که حساب‌تان از طریق پیشنهادات و سایر قابلیت‌ها، توسط افراد غریبه قابل کشف باشد email: به شما ایمیل تأییدی فرستاده خواهد شد fields: شما می‌توانید تا چهار مورد را در یک جدول در نمایهٔ خود نمایش دهید header: یکی از قالب‌های PNG یا GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد @@ -79,6 +80,8 @@ fa: no_access: انسداد دسترسی به تمامی منابع sign_up_requires_approval: ثبت‌نام‌های جدید، نیازمند تأییدتان خواهند بود severity: بگزنید با درخواست‌ها از این آی‌پی چه شود + rule: + text: قائده یا نیازمندی‌هایی را برای کاربران این کارساز تشریح کنید. سعی کنید آن را ساده و کوتاه نگاه دارید sessions: otp: 'کد تأیید دومرحله‌ای که اپ روی تلفن شما ساخته را وارد کنید یا یکی از کدهای بازیابی را به کار ببرید:' webauthn: اگر کلید USB باشد ، از اتصاڵ آن مطمئن شوید و، اگر لازم باشد، به آن ضربه‌ایی بزنید. diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index 8296bed54..770c3e9e0 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -3,16 +3,25 @@ fi: simple_form: hints: account_alias: - acct: Määrittele käyttäjän käyttäjänimi@verkkotunnus mistä haluat siirtyä + acct: Määrittele käyttäjän käyttäjänimi@verkkotunnus, josta haluat siirtyä account_migration: - acct: Määrittele käyttäjän käyttäjänimi@verkkotunnus mihin haluat siirtyä + acct: Määrittele käyttäjän käyttäjänimi@verkkotunnus, johon haluat siirtyä account_warning_preset: title: Vapaaehtoinen. Ei näytetä vastaanottajalle admin_account_action: - include_statuses: Käyttäjä näkee mitkä tuuttaukset johtivat toimenpiteeseen tai varoitukseen + include_statuses: Käyttäjä näkee mitkä viestit johtivat toimenpiteeseen tai varoitukseen send_email_notification: Käyttäjä saa selityksen mitä tapahtui hänen tililleen + text_html: Valinnainen. Voit käyttää julkaisun syntaksia. Voit lisätä varoitusasetuksia säästääksesi aikaa type_html: Valitse mitä teet käyttäjälle %{acct} + types: + disable: Estä käyttäjää käyttämästä tiliään, mutta älä poista tai piilota sen sisältöä. + none: Käytä tätä lähettääksesi varoituksen käyttäjälle käynnistämättä mitään muita toimintoja. + sensitive: Pakota kaikki tämän käyttäjän mediatiedostot arkaluontoisiksi. + silence: Estä käyttäjää pystymästä julkaisemaan julkisessa näkyvyydessä, piilota käyttäjän viestit ja ilmoitukset ihmisiltä, jotka eivät seuraa käyttäjää. + suspend: Estä vuorovaikutus tililtä tai tilille ja poista sen sisältö. Palautettavissa 30 päivän kuluessa. + warning_preset_id: Valinnainen. Voit silti lisätä mukautetun tekstin esiasetuksen loppuun announcement: + all_day: Kun valittu, vain valittu aikaväli näytetään scheduled_at: Jätä tyhjäksi julkaistaksesi ilmoituksen välittömästi defaults: avatar: PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px @@ -27,7 +36,7 @@ fi: setting_display_media_hide_all: Piilota aina kaikki media setting_display_media_show_all: Näytä aina arkaluonteiseksi merkitty media setting_noindex: Vaikuttaa julkiseen profiiliisi ja tilasivuihisi - setting_show_application: Tuuttaamiseen käyttämäsi sovellus näkyy tuuttauksiesi yksityiskohtaisessa näkymässä + setting_show_application: Viestittelyyn käyttämäsi sovellus näkyy viestiesi yksityiskohtaisessa näkymässä setting_use_blurhash: Liukuvärit perustuvat piilotettujen kuvien väreihin, mutta sumentavat yksityiskohdat imports: data: Toisesta Mastodon-instanssista tuotu CSV-tiedosto @@ -83,7 +92,7 @@ fi: setting_default_language: Julkaisujen kieli setting_default_privacy: Julkaisun näkyvyys setting_default_sensitive: Merkitse media aina arkaluontoiseksi - setting_delete_modal: Kysy vahvistusta ennen tuuttauksen poistamista + setting_delete_modal: Kysy vahvistusta ennen viestin poistamista setting_display_media: Median näyttäminen setting_display_media_default: Oletus setting_display_media_hide_all: Piilota kaikki @@ -91,7 +100,7 @@ fi: setting_hide_network: Piilota verkkosi setting_noindex: Jättäydy pois hakukoneindeksoinnista setting_reduce_motion: Vähennä animaatioiden liikettä - setting_show_application: Näytä sovellus mistä lähetät tuuttauksia + setting_show_application: Näytä sovellus mistä lähetät viestejä setting_system_font_ui: Käytä järjestelmän oletusfonttia setting_theme: Sivuston teema setting_trends: Näytä päivän trendit @@ -126,7 +135,7 @@ fi: tag: name: Aihetunniste trendable: Salli tämän aihetunnisteen näkyä trendeissä - usable: Salli tuuttauksien käyttää tätä aihetunnistetta + usable: Salli postauksien käyttää tätä aihetunnistetta 'no': Ei recommended: Suositeltu required: diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index 4bc0a1a8f..419f28cb9 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -10,15 +10,15 @@ fr: text: Vous pouvez utiliser la syntaxe des messages, comme les URL, les hashtags et les mentions title: Facultatif. Invisible pour le destinataire admin_account_action: - include_statuses: L’utilisateur·rice verra quels messages sont la source de l’action de modération ou de l’avertissement + include_statuses: L’utilisateur verra quels messages sont la source de l’action de modération ou de l’avertissement send_email_notification: L’utilisateur recevra une explication de ce qu’il s’est passé avec son compte text_html: Optionnel. Vous pouvez utilisez la syntaxe des messages. Vous pouvez ajouter des modèles d’avertissement pour économiser du temps type_html: Choisir que faire avec %{acct} types: - disable: Empêcher l’utilisateur·rice d’utiliser son compte, mais ne pas supprimer ou masquer son contenu. - none: Utilisez ceci pour envoyer un avertissement à l’utilisateur·rice, sans déclencher aucune autre action. - sensitive: Forcer toutes les pièces jointes de cet·te utilisateur·rice à être signalées comme sensibles. - silence: Empêcher l’utilisateur·rice de poster avec une visibilité publique, cacher ses messages et ses notifications aux personnes qui ne les suivent pas. + disable: Empêcher l’utilisateur d’utiliser son compte, mais ne pas supprimer ou masquer son contenu. + none: Utilisez ceci pour envoyer un avertissement à l’utilisateur, sans déclencher aucune autre action. + sensitive: Forcer toutes les pièces jointes de cet utilisateur à être signalées comme sensibles. + silence: Empêcher l’utilisateur de poster avec une visibilité publique, cacher ses messages et ses notifications aux personnes qui ne les suivent pas. suspend: Empêcher toute interaction depuis ou vers ce compte et supprimer son contenu. Réversible dans les 30 jours. warning_preset_id: Optionnel. Vous pouvez toujours ajouter un texte personnalisé à la fin de la présélection announcement: @@ -26,7 +26,7 @@ fr: ends_at: Optionnel. L’annonce sera automatiquement dépubliée à ce moment scheduled_at: Laisser vide pour publier l’annonce immédiatement starts_at: Optionnel. Si votre annonce est liée à une période spécifique - text: Vous pouvez utiliser la syntaxe des messages. Veuillez prendre en compte l’espace que l'annonce prendra sur l’écran de l'utilisateur·rice + text: Vous pouvez utiliser la syntaxe des messages. Veuillez prendre en compte l’espace que l'annonce prendra sur l’écran de l'utilisateur defaults: autofollow: Les personnes qui s’inscrivent grâce à l’invitation vous suivront automatiquement avatar: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px @@ -36,13 +36,14 @@ fr: current_username: Pour confirmer, veuillez saisir le nom d'utilisateur du compte courant digest: Uniquement envoyé après une longue période d’inactivité et uniquement si vous avez reçu des messages personnels pendant votre absence discoverable: L’annuaire des profils est une autre façon pour votre compte d’atteindre une plus grande audience + discoverable_no_directory: Permettre à des inconnu·e·s de découvrir votre compte par le biais des recommandations et autres fonctionnalités email: Vous recevrez un courriel de confirmation fields: Vous pouvez avoir jusqu’à 4 éléments affichés en tant que tableau sur votre profil header: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px inbox_url: Copiez l’URL depuis la page d’accueil du relais que vous souhaitez utiliser irreversible: Les messages filtrés disparaîtront pour toujours, même si le filtre est supprimé plus tard locale: La langue de l’interface, des courriels et des notifications - locked: Nécessite que vous approuviez manuellement chaque abonné·e + locked: Nécessite que vous approuviez manuellement chaque abonné password: Utilisez au moins 8 caractères phrase: Sera filtré peu importe la casse ou l’avertissement de contenu du message scopes: À quelles APIs l’application sera autorisée à accéder. Si vous sélectionnez une permission générale, vous n’avez pas besoin de sélectionner les permissions plus précises. @@ -74,7 +75,7 @@ fr: ip_block: comment: Optionnel. Pour ne pas oublier pourquoi vous avez ajouté cette règle. expires_in: Les adresses IP sont une ressource finie, elles sont parfois partagées et changent souvent de mains. Pour cette raison, les blocages d’IP indéfiniment ne sont pas recommandés. - ip: Entrez une adresse IPv4 ou IPv6. Vous pouvez bloquer des plages entières en utilisant la syntaxe CIDR. Faites attention à ne pas vous bloquer vous-même ! + ip: Entrez une adresse IPv4 ou IPv6. Vous pouvez bloquer des plages entières en utilisant la syntaxe CIDR. Faites attention à ne pas vous bloquer vous-même! severities: no_access: Bloquer l’accès à toutes les ressources sign_up_requires_approval: Les nouvelles inscriptions nécessiteront votre approbation @@ -128,8 +129,8 @@ fr: context: Contextes du filtre current_password: Mot de passe actuel data: Données - discoverable: Inscrire ce compte dans l’annuaire - display_name: Nom public + discoverable: Proposer ce compte aux autres + display_name: Afficher le nom email: Adresse courriel expires_in: Expire après fields: Métadonnées du profil diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml index 64833d527..cf124c967 100644 --- a/config/locales/simple_form.gd.yml +++ b/config/locales/simple_form.gd.yml @@ -19,7 +19,7 @@ gd: none: Cleachd seo airson rabhadh a chur dhan chleachdaiche gun ghnìomh eile a ghabhail. sensitive: Èignich comharra gu bheil e frionasach air a h-uile ceanglachan meadhain a’ chleachdaiche seo. silence: Bac an cleachdaiche o phostadh le faicsinneachd poblach, falaich na postaichean is brathan aca o na daoine nach eil a’ leantainn air. - suspend: Bac eadar-ghnìomh sam bith leis a’ chunntas seo agus sguab às an t-susbaint aige. Gabhaidh seo a neo-dhèanamh am broinn 30 latha. + suspend: Bac conaltradh sam bith leis a’ chunntas seo agus sguab às an t-susbaint aige. Gabhaidh seo a neo-dhèanamh am broinn 30 latha. warning_preset_id: Roghainneil. ’S urrainn dhut teacsa gnàthaichte a chur ri deireadh an ro-sheata fhathast announcement: all_day: Nuair a bhios cromag ris, cha nochd ach cinn-latha na rainse-ama @@ -36,6 +36,7 @@ gd: current_username: Airson seo a dhearbhadh, cuir a-steach ainm-cleachdaiche a’ chunntais làithrich digest: Cha dèid seo a chur ach nuair a bhios tu air ùine mhòr gun ghnìomh a ghabhail agus ma fhuair thu teachdaireachd phearsanta fhad ’s a bha thu air falbh discoverable: Ceadaich gun lorg coigrich an cunntas agad le taic o mholaidhean is gleusan eile + discoverable_no_directory: Ceadaich gun lorg coigrich an cunntas agad le taic o mholaidhean is gleusan eile email: Thèid post-d dearbhaidh a chur thugad fields: Faodaidh tu suas ri 4 nithean a shealltainn mar chlàr air a’ phròifil agad header: PNG, GIF or JPG. %{size} air a char as motha. Thèid a sgèileadh sìos gu %{dimensions}px @@ -46,8 +47,8 @@ gd: password: Cleachd co-dhiù 8 caractaran phrase: Thèid a mhaidseadh gun aire air litrichean mòra ’s beaga no air rabhadh susbainte puist scopes: Na APIan a dh’fhaodas an aplacaid inntrigeadh. Ma thaghas tu sgòp air ìre as àirde, cha leig thu leas sgòpaichean fa leth a thaghadh. - setting_aggregate_reblogs: Na seall brosnachaidhean ùra do phostaichean a chaidh a bhrosnachadh o chionn ghoirid (cha doir seo buaidh ach air brosnachaidhean ùra o seo a-mach) - setting_default_sensitive: Thèid meadhanan frionasach fhalach o thùs is gabhaidh an nochdadh le briogadh orra + setting_aggregate_reblogs: Na seall brosnachaidhean ùra do phostaichean a chaidh a bhrosnachadh o chionn goirid (cha doir seo buaidh ach air brosnachaidhean ùra o seo a-mach) + setting_default_sensitive: Thèid meadhanan frionasach fhalach a ghnàth is gabhaidh an nochdadh le briogadh orra setting_display_media_default: Falaich meadhanan ris a bheil comharra gu bheil iad frionasach setting_display_media_hide_all: Falaich na meadhanan an-còmhnaidh setting_display_media_show_all: Seall na meadhanan an-còmhnaidh @@ -156,7 +157,7 @@ gd: setting_delete_modal: Seall còmhradh dearbhaidh mus sguab thu às post setting_disable_swiping: Cuir gluasadan grad-shlaighdidh à comas setting_display_media: Sealltainn nam meadhanan - setting_display_media_default: Tùsail + setting_display_media_default: Bun-roghainn setting_display_media_hide_all: Falaich na h-uile setting_display_media_show_all: Seall na h-uile setting_expand_spoilers: Leudaich postaichean ris a bheil rabhadh susbainte an-còmhnaidh @@ -164,7 +165,7 @@ gd: setting_noindex: Thoir air falbh an ro-aonta air inneacsadh le einnseanan-luirg setting_reduce_motion: Ìslich an gluasad sna beòthachaidhean setting_show_application: Foillsich dè an aplacaid a chleachdas tu airson postaichean a chur - setting_system_font_ui: Cleachd cruth-clò tùsail an t-siostaim + setting_system_font_ui: Cleachd cruth-clò bunaiteach an t-siostaim setting_theme: Ùrlar na làraich setting_trends: Seall na treandaichean an-diugh setting_unfollow_modal: Seall còmhradh dearbhaidh mus sguir thu de leantainn air cuideigin diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index 77380bbe0..e10067fd2 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -36,6 +36,7 @@ gl: current_username: Para confirmar, introduce o nome de usuaria da conta actual digest: Enviar só tras un longo período de inactividade e só se recibiches algunha mensaxe directa na tua ausencia discoverable: Permite que a túa conta poida ser descuberta por persoas descoñecidas a través de recomendacións e outras ferramentas + discoverable_no_directory: Permitir que a túa conta poida ser descuberta por extrañas a través das recomendacións e outras ferramentas email: Ímosche enviar un correo de confirmación fields: Podes ter ate 4 elementos no teu perfil mostrados como unha táboa header: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index 5434bc3b7..b328ea267 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -3,7 +3,7 @@ hu: simple_form: hints: account_alias: - acct: Adjad meg annak a fióknak a felhasználóneve@domainjét, ahonnan át szeretnéd mozgatni + acct: Add meg annak a fióknak a felhasználónév@domain párosát, ahonnan át szeretnéd mozgatni account_migration: acct: Add meg a fióknév@domain fiókot, melybe költözni szeretnél account_warning_preset: @@ -36,6 +36,7 @@ hu: current_username: A jóváhagyáshoz írd be a jelenlegi fiók felhasználói nevét digest: Csak hosszú távollét esetén küldődik és csak ha személyes üzenetet kaptál távollétedben discoverable: A profil adatbázis egy újabb mód, ahogyan a fiókod szélesebb tömegeket érhet el + discoverable_no_directory: Engedélyezzük, hogy a fiókod idegenek által megtalálható legyen javaslatokon és más funkciókon keresztül email: Kapsz egy megerősítő e-mailt fields: A profilodon legfeljebb 4 bejegyzés szerepelhet táblázatos formában header: PNG, GIF vagy JPG. Maximum %{size}. Átméretezzük %{dimensions} pixelre diff --git a/config/locales/simple_form.hy.yml b/config/locales/simple_form.hy.yml index df5995ac4..d468032ab 100644 --- a/config/locales/simple_form.hy.yml +++ b/config/locales/simple_form.hy.yml @@ -7,12 +7,12 @@ hy: account_migration: acct: նշէք նոր հաշուի օգտանուն@տիրոյթը account_warning_preset: - text: կարող էք օգտագործել թթելու ձեւերն, ինչպիսին էն URL֊ներ, պիտակներ եւ նշումներ + text: Գրառումներում կարող էք օգտագործել URL֊ներ, պիտակներ եւ նշումներ title: պարտադիր չէ։ չի երեւալու ստացողին։ admin_account_action: - include_statuses: օգտատէրը տեսնելու ա որ թթերն են առաջացրել մոդերացիայի գործողութիւն կամ զգուշացում։ + include_statuses: Օգտատէրը կը տեսնի, թե որ գրառումներն են առաջացրել մոդերացիայի գործողութիւն կամ զգուշացում։ send_email_notification: օգտատէրը կը ստանայ բացատրութիւն այն մասին թէ ինչ է պատահել իրենց հաշուի հետ։ - text_html: Պայմանական․ Դու կարող ես օգտագործել Թութի շարադասութիւնը։ Կարող ես օգտագործել աւելացնել զգուշացնող նախադիրներ ժամանակ խնայելու համար + text_html: Պայմանական․ Դու կարող ես օգտագործել գրառման շարադասութիւնը։ Կարող ես օգտագործել աւելացնել զգուշացնող նախդիրներ ժամանակ խնայելու համար type_html: Ընտրիր ինչ անել %{acct}ի հետ։ warning_preset_id: Պայմանական․ Կարող ես աւելացնել տեքստ նախդիրի վերջում announcement: @@ -20,7 +20,7 @@ hy: ends_at: Պայմանական․ Յայտարարութիւնն աւտօմատ կը հանուի այս ժամին scheduled_at: Եթէ դատարկ թողնես յայտարարութիւնը միանգամից կը հրապարակուի starts_at: Պայմանական․ այն դէպքում, երբ յայտարարութիւնդ սահմանափակուած է յստակ ժամանակացոյցով - text: Կարող ես օգտագործել թթի շարադասութիւնը։ Խնդրում ենք, եղիր խելամիտ յայտարարութեան տարածքն օգտագործելիս, այն յայտնուելու է օգտատիրոջ էկրանին + text: Կարող ես օգտագործել գրառման առանձնայատկութիւնը։ Խնդրում ենք, լինել խելամիտ յայտարարութեան տարածքն օգտագործելիս, այն յայտնուելու է օգտատիրոջ էկրանին defaults: autofollow: Հրաւէրի միջոցով գրանցուող մարդիկ կը հետեւեն քեզ avatar: PNG, GIF կամ JPG։ Առաւելագոյնը՝ %{size}։ Կը փոքրացուի մինչեւ %{dimensions} @@ -34,20 +34,20 @@ hy: fields: Կարող ես ունենալ մինչեւ 4 կէտ հաշուիդ աղիւսակում ցուցադրելու header: PNG, GIF կամ JPG։ Առաւելագոյնը՝ %{size}։ Կը փոքրացուի մինչեւ %{dimensions} inbox_url: Պատճէնիր URL այն շերտի դիմերեսից, որը ցանկանում ես օգտագործել - irreversible: Զտուած թթերը կորչելու են անդառնալիօրէն, նոյնիսկ եթէ զտիչը յետոյ հեռացնես + irreversible: Զտուած գրառումները կորչելու են անդառնալիօրէն, նոյնիսկ եթէ զտիչը յետոյ հեռացնես locale: Ինտերֆեյսի լեզուն, էլ. նամակները եւ push ծանուցումները locked: Անհրաժեշտ կը լինի ձեռքով հաստատել հետեւորդներին password: Օգտագործիր առնուազն 8 նիշ - phrase: Կը համընկնի անկախ տեքստի ձեւից կամ թթի զգուշացնող բովանդակութիւնից + phrase: Կը համընկնի անկախ տեքստի ձեւից կամ զգուշացնող բովանդակութիւնից scopes: Որ API֊ին յաւելուածն ունի հասանելիութիւն։ Եթէ ընտրել ես բարձր մակարդակի դաշտ, ապա անհատական ընտրելու կարիք չկայ։ - setting_aggregate_reblogs: Չցուցադրել տարածումներն այն թթերի համար, որոնք քիչ առաջ արդէն տարածուել են(վերաբերում է միայն վերջին տարածումներին) + setting_aggregate_reblogs: Չցուցադրել տարածումներն այն գրառումների համար, որոնք քիչ առաջ արդէն տարածուել են (վերաբերում է միայն վերջին տարածումներին) setting_default_sensitive: Կասկածելի բովանդակութիւնը լռելեայն փակ է եւ կարող է բացուել սեղմելով setting_display_media_default: Թաքցնել կասկածելի բովանդակութիւնը setting_display_media_hide_all: Երբեք մեդիա ցոյց չտալ setting_display_media_show_all: Մեդիա միշտ ցոյց տալ setting_hide_network: Ուրիշները չեն կարողանայ տեսնել ձեզ հետեւողներին եւ թե ում էք հետեւում դուք setting_noindex: Ազդում է քո հրապարակային հաշուի եւ գրառումների էջի վրայ - setting_show_application: Թութ մանրամասներում կերեւայ թէ որ ծրագրով ես հրապարակել այն + setting_show_application: Գրառման մանրամասներում կերեւայ թէ որ ծրագրով ես հրապարակել այն setting_use_blurhash: Կտորները հիմնուում են թաքցուած վիզուալի վրայ՝ խամրեցնելով դետալները setting_use_pending_items: Թաքցնել հոսքի թարմացումները կտտոի ետեւում՝ աւտօմատ թարմացուող հոսքի փոխարէն username: Քո օգտանունը պէտք է եզակի լինի %{domain}-ում։ @@ -79,7 +79,7 @@ hy: tag: name: Կարող ես միայն փոխել տառերի ձեւը, օրինակ, այն աւելի ընթեռնելի դարձնելու համար user: - chosen_languages: Նշուած ժամանակ հոսքում կերեւայ միայն ընտրուած լեզուով թութերը + chosen_languages: Նշուած ժամանակ, հոսքում կերեւայ միայն ընտրուած լեզուով գրառումները labels: account: fields: @@ -93,7 +93,7 @@ hy: text: Նախադրուած տեքստ title: Վերնագիր admin_account_action: - include_statuses: Ներառել բողոքարկուած թթերը իմակում + include_statuses: Ներառել բողոքարկուած գրառումները իմակում send_email_notification: Տեղեկացնել օգտատիրոջը իմակի միջոցով text: Նախազգուշացում type: Գործողություն @@ -141,7 +141,7 @@ hy: setting_aggregate_reblogs: Տարծածները խմբաւորել հոսքում setting_auto_play_gif: Աւտոմատ մեկնարկել GIFs անիմացիաները setting_boost_modal: Ցուցադրել հաստատման պատուհանը տարածելուց առաջ - setting_crop_images: Ցոյց տալ թութի նկարը 16x9 համամասնութեամբ + setting_crop_images: Ցոյց տալ գրառման նկարը 16x9 համամասնութեամբ setting_default_language: Հրապարակման լեզու setting_default_privacy: Հրապարակման գաղտնիութիւն setting_default_sensitive: Միշտ նշել մեդիան որպէս դիւրազգաց @@ -151,11 +151,11 @@ hy: setting_display_media_default: Լռելեայն setting_display_media_hide_all: Թաքցնել բոլորը setting_display_media_show_all: Ցուցադրել բոլորը - setting_expand_spoilers: Միշտ բացել բովանդակութեան զգուշացմամբ թթերը + setting_expand_spoilers: Միշտ բացել բովանդակութեան զգուշացմամբ գրառումները setting_hide_network: Թաքցնել ցանցդ setting_noindex: Խուսափել որոնողական համակարգերի ինդէքսաւորումից setting_reduce_motion: Կրճատել անիմացիաների շարժումը - setting_show_application: Բացայայտել յաւելուած, որն օգտագործուում է թթելու համար + setting_show_application: Բացայայտել գրառման համար օգտագործուած յաւելուածը setting_system_font_ui: Օգտագործել համակարգի լռելեայն տառատեսակը setting_theme: Կայքի թեման setting_trends: Ցուցադրել օրուայ թրենդները @@ -182,6 +182,7 @@ hy: text: Ինչո՞ւ ես ցանկանում միանալ ip_block: comment: Մեկնաբանություն + ip: IP severities: no_access: Մուտքը արգելել sign_up_requires_approval: Սահմանափակել գրանցումները @@ -193,17 +194,20 @@ hy: follow_request: Որեւէ մէկը քեզ հետեւելու հայց է ուղարկել mention: Որեւէ մեկը նշեց քեզ pending_account: Վերանայման կարիք ունեցող նոր հաշիւ - reblog: Ինչ֊որ մէկը թութդ տարածեց + reblog: Ինչ֊որ մէկը գրառումդ տարածեց report: Նոր բողոք է ուղարկուել trending_tag: Չվերանայուած պիտակը թրենդի մէջ է + rule: + text: Կանոն tag: listable: Թոյլատրել, որ այս պիտակը յայտնուի որոնումների եւ հաշուի մատեանում name: Պիտակ trendable: Թոյլատրել, որ այս պիտակը յայտնուի թրենդներում - usable: Թոյլատրել թթերին օգտագործել այս պիտակը + usable: Թոյլատրել գրառումներին օգտագործել այս պիտակը 'no': Ոչ recommended: Խորհուրդ է տրվում required: + mark: "*" text: պարտադիր title: sessions: diff --git a/config/locales/simple_form.id.yml b/config/locales/simple_form.id.yml index fe0fca5f9..8d870dc61 100644 --- a/config/locales/simple_form.id.yml +++ b/config/locales/simple_form.id.yml @@ -36,6 +36,7 @@ id: current_username: Untuk konfirmasi, mohon masukkan nama pengguna akun ini digest: Hanya kirim setelah lama tidak aktif dan hanya jika Anda menerima pesan personal atas absensi Anda discoverable: Direktori profil adalah cara lain agar akun Anda menyentuh audiens yang lebih luas + discoverable_no_directory: Izinkan akun Anda ditemukan orang lain lewat rekomendasi dan fitur lain email: Anda akan dikirimi email konfirmasi fields: Anda bisa memiliki hingga 4 item utk ditampilkan sebagai tabel di profil Anda header: PNG, GIF atau JPG. Maksimal %{size}. Ukuran dikecilkan menjadi %{dimensions}px diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index c05d645ab..c10fe28b1 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -36,6 +36,7 @@ is: current_username: Til að staðfesta skaltu setja inn notandanafnið fyrir þennan notandaaðgang digest: Er aðeins sent eftir lengri tímabil án virkni og þá aðeins ef þú hefur fengið persónuleg skilaboð á meðan þú hefur ekki verið á línunni discoverable: Persónusniðamappan er önnur leið til að láta notandaaðganginn þinn ná til fleiri lesenda + discoverable_no_directory: Gerðu öðrum kleift að finna aðganginn þinn í gegnum meðmæli og annað slíkt email: Þú munt fá sendan staðfestingarpóst fields: Þú getur birt allt að 4 atriði sem töflu á notandasniðinu þínu header: PNG, GIF eða JPG. Mest %{size}. Verður smækkað í %{dimensions}px diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index 3067a287a..147a5eea4 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -36,6 +36,7 @@ it: current_username: Per confermare, inserisci il nome utente dell'account attuale digest: Inviata solo dopo un lungo periodo di inattività e solo se hai ricevuto qualche messaggio personale in tua assenza discoverable: La directory dei profili è un altro modo in cui il tuo account può raggiungere un pubblico più ampio + discoverable_no_directory: Consenti al tuo profilo di esser scoperto da sconosciuti tramite consigli e altre funzionalità email: Ti manderemo una email di conferma fields: Puoi avere fino a 4 voci visualizzate come una tabella sul tuo profilo header: PNG, GIF o JPG. Al massimo %{size}. Verranno scalate a %{dimensions}px diff --git a/config/locales/simple_form.kab.yml b/config/locales/simple_form.kab.yml index a6242951f..4327fcc8e 100644 --- a/config/locales/simple_form.kab.yml +++ b/config/locales/simple_form.kab.yml @@ -78,6 +78,7 @@ kab: setting_theme: Asental n wesmel setting_use_pending_items: Askar aleγwayan sign_in_token_attempt: Tangalt n tɣellist + type: Anaw n uktar username: Isem n useqdac username_or_email: Isem n useqdac neγ imal whole_word: Awal akk @@ -89,12 +90,15 @@ kab: text: Acimi tebγiḍ ad ternuḍ iman-ik? ip_block: comment: Awennit + ip: IP severities: no_access: Sewḥel anekcum severity: Alugen notification_emails: mention: Yuder-ik·em-id walbɛaḍ reblog: Yella win yesselhan adda-dik·im + rule: + text: Alugen tag: name: Ahacṭag 'no': Ala diff --git a/config/locales/simple_form.kmr.yml b/config/locales/simple_form.kmr.yml new file mode 100644 index 000000000..015dfcbf4 --- /dev/null +++ b/config/locales/simple_form.kmr.yml @@ -0,0 +1,226 @@ +--- +kmr: + simple_form: + hints: + account_alias: + acct: Ajimêrê ku tu dixwazî bar bikî navê bikarhêner@domain diyar bike + account_migration: + acct: Ajimêrê ku tu dixwazî bar bikî navê bikarhêner@domain diyar bike + account_warning_preset: + text: Tu dikarî wek URLyan, hashtagan û şîroveyan, tootê ristesazî jî bikarbînî + title: Bi dilê xwe ye. Ji wergir re nay xûyakirin + admin_account_action: + include_statuses: Bikarhênerê bibîne kîjan toot dibin sedemê çalakî an jî agahdarî + send_email_notification: Bikarhêner dê ravekirinê tiştê ku bi ajimêra wan re qewimî bistîne + text_html: Bi dili xwe ye. Tu dikarî hevoksazî ye toot bikarbînî. Tu dikarî pêşsazîyên hişyariyê lê zêde bikî ji bo ku demê derbas nekî + type_html: Hilbijêre ka tu yê çi bikî bi %{acct} re + types: + disable: Nehêle bila bikarhêner ajimêrê xwe bikar bîne lê naverokan jê nebe an jî veneşêre. + none: Ji bo ku tu hişyariyekê ji bikarhêner re bişînî vê bi kar bîne, bêyî ku çalakiyeke din dest lê neda. + sensitive: Neçar bihêle ku ev bikarhêner hemû pêvekên medyayê hestiyar nîşan bike. + silence: Pêşî li bikarhêneran bigire ku bikarhêner bi herkesî ra xûyabarî neşîne, post û agahdarîyên xwe ji mirovên ku wan naşopîne veşêre. + suspend: Pêşîya hevbandorîya vî ajimêrê bigire û naveroka wê jê bibe. Di nava 30 rojan de tê vegerandin. + warning_preset_id: Bi dilê xwe ye. Tu hîn jî dikarî dawîya pêşsazkirî de nivîsek teybet li zêde bikî + announcement: + all_day: Dema were nîşankirin, tenê dîrokên navbera demê dê werin nîşan kirin + ends_at: Bi dilê xwe ye. Daxuyanî di vê demê de bi xweberî ji weşanê de rabe + scheduled_at: Vala bihêle ku yekcar daxûyanî were weşandin + starts_at: Bi dilê xwe ye. Heke daxûyanî ya te di demeke diyar ve girêdayî be + text: Tu dikarî hevoksazî yên toot bikarbînî. Ji kerema xwe cihê ku ev daxuyanî li ser dîmenderê bikarhêner bigire baldar be + defaults: + autofollow: Mirovên ku bi rêya vexwendinê xwe tomar kirine ew ên bi xweberî te bişopînin + avatar: PNG, GIF an jî JPG. Herî zêde %{size} dê ber bi %{dimensions}px ve were kêmkirin + bot: Ji yên din re nîşan bike ku ajimêr bi piranî kiryarên xweberî dike û dibe ku neyê çavdêrî kirin + context: Yek an jî zêdetir girêdan divê parzûn were sepandin + current_password: Ji bo ewlehiyê ji kerema xwe şîfreya ajimêrê xwe niha têkevin + current_username: Ji bo piştrastkirinê, ji kerema xwe navê bikarhêner ya ajimêrê niha binvîse + digest: Tenê piştî demek dirêj neçalakiyê de û tenê di nebûna te da peyamên teybetî standî be tê şandin + discoverable: Mafê biden ku ajimêra te bi pêşniyar, peldanka profîlê û taybetmendiyên din ji aliyê bîyaniyan ve bê vedîtin + discoverable_no_directory: Mafê biden ku ajimêra te bi pêşniyar û taybetmendiyên din ji aliyê bîyaniyan ve bê vedîtin + email: Ji te re e-name ya pejirandinê were + fields: Tu dikarî heya 4 hêmanan wekî tabloyek li ser profîla xwe nîşan bidî + header: PNG, GIF an jî JPG. Herî zêde %{size} ber bi %{dimensions}px ve were kêmkirin + inbox_url: URLyê di rûpela pêşî de guhêrkerê ku tu dixwazî bi kar bînî jê bigire + irreversible: Tootên parzûnkirî êdî bê veger wenda bibe, heger parzûn paşê were rakirin jî nabe + locale: Zimanê navrûyê bikarhêner, agahdarîyên e-name û pêl kirin + locked: Bi destan daxwazên şopê hilbijêrîne da ku kî bikaribe te bişopîne + password: Herî kêm 8 karakter bikar bîne + phrase: Ji rewşa nivîsê tîpên girdek/hûrdek an jî ji hişyariya naveroka ya şandiyê wek serbixwe wê were hevbeş kirin + scopes: |- + Sepana ku dê kîjan maf bide bigihije APIyan. + Ger te asteke jor hilbijartibe, ne pêwîste ku tu yên berfirehî a kesane hilbijêrî. + setting_aggregate_reblogs: Bilindkirinên ku nû hatine weşan ji şandiyên di dema dawî de nîşan nede (tenê li ser bilindkirinên nû wergirtî bandor dike) + setting_default_sensitive: Medyaya hestiyar berdestî ve tê veşartin û bi tikandin dikare were eşkere kirin + setting_display_media_default: Medyaya wekî hestyarî hatiye nîşankirî ye veşêre + setting_display_media_hide_all: Medyayê tim veşêre + setting_display_media_show_all: Medyayê tim nîşan bike + setting_hide_network: Kesên ku te dişopîne û kesên tu dişopînî ev ên profîla te de were veşartin + setting_noindex: Bandor li hemî profîla te û tootên rûpela te dike + setting_show_application: Navê sepana ku tu ji bo şandinê wê bi kar tîne dê di dîtinê berferh ên di şandiyên te de were xuyakirin + setting_use_blurhash: Gradyen xwe bi rengên dîtbarîyên veşartî ve radigire, lê belê hûrgilîyan diveşêre + setting_use_pending_items: Li şûna ku herkê wek bixweber bizivirînî nûvekirina demnameyê li paş tikandinekî veşêre + username: Navê te yê bikarhênerî li ser %{domain} de bêhempa be + whole_word: Dema peyvkilîd an jî hevok bi tenê alfahejmarî çêbe, bi tenê hemû bêjeyê re li hev bike wê pêk bê + domain_allow: + domain: Ev navê navperê, ji vê rajekarê wê daneyan bistîne û daneyên ku jê bê wê were sazkirin û veşartin + email_domain_block: + domain: Ev navê qada yê ku di navnîşana e-maîlê da xuya dibe, tomara MXê ya ku qada vê çareser dike an jî iPya rajekara ku MX tomar dike. Ev ên bi tomarê bikarhêneran bên kontrolkirin û tomarê were redkirin. + with_dns_records: Hewl tê dayîn ku tomarên DNSê yên li qada jê re hatine dayîn were çareserkirin û encamên wê jî were astengkirin + featured_tag: + name: 'Belkî tu yekê bi kar bînî çi van:' + form_challenge: + current_password: Tu dikevî qadeke ewledar + imports: + data: Pelê CSV-ê ji rajekareke din a Mastodon hate derxistin + invite_request: + text: Ev ê alikariya me bikê bo nirxandina sepanê te + ip_block: + comment: Bi dilê xwe ye. Ji bîr neke te çima ev bîranînê lê zêde kiriye. + expires_in: Navnîşanên IPyan çavkaniyên bi sînor in, carinan dihê parvekirin lê pirî caran dest diguherîne. Ji bo vê blokên IP ên nediyar nayê pêşniyarkirin. + ip: Têkeve navnîşana IPv4 an jî IPv6'yek. Tu dikarî bi hevoksazî ya CIDR re hemî valahîyan asteng bikî. Hay ji xwe hebe ku xwe derve nehêle! + severities: + no_access: Gihîştina hemî çavkaniyan asteng bike + sign_up_requires_approval: Tomarkirinên nû de pejirandina te pêwîste + severity: Daxwazên ku ji vê IPyê tên dê çi bibe hilbijêre + rule: + text: Ji bo bikarhênerên li ser vê rajekarê rêzikek an jî pêdivîyê pênase bike. Hewl bide ku rêzikê kin û xwerû bigire + sessions: + otp: 'Koda du-gavî a telefona xwe têkevê an jî yek ji wan kodên xilaskirinê têkevê:' + webauthn: Heke kilîta USB-yê be, jê ewle be ku wê têxinê û heke pêdivî be, pê li wê bike. + tag: + name: Tîpan, mînak ji bo ku bêhtir paknivîs bibe, tenê rewşa tîpên girdek/hûrdek dikarî biguherînî + user: + chosen_languages: Dema were nîşankirin, tenê parvekirinên bi zimanên hilbijartî dê di rêzikên giştî de werin nîşandan + labels: + account: + fields: + name: Nîşan + value: Naverok + account_alias: + acct: Destika ajimêrê te yê kevn + account_migration: + acct: Destika ajimêrê te yê nû + account_warning_preset: + text: Nivîsa pêşsazkirî + title: Sernav + admin_account_action: + include_statuses: Şandiyên hatine ragihandinê jî têxe nav e-name yê + send_email_notification: Bikarhênerê bi e-name yê agahdar bike + text: Agahdarî ya kesane + type: Çalakî + types: + disable: Qerisî ye + none: Hişyariyek bişîne + sensitive: Hestiyar + silence: Bi sînor bike + suspend: Hatiye rawestandin + warning_preset_id: Hişyariyeke pêşsazkirî bi kar bîne + announcement: + all_day: Çalakiya tevahiya rojê + ends_at: Dawiya bûyerê + scheduled_at: Weşanê demsaz bike + starts_at: Destpêka bûyerê + text: Daxuyanî + defaults: + autofollow: Ji bo şopandina ajimêra xwe vexwîne + avatar: Wêne + bot: Ev ajimêrekî bot e + chosen_languages: Parzûnê zimanan + confirm_new_password: Peborîna nû bipejirîne + confirm_password: Peborîn bipejirîne + context: Parzûnê naverokan + current_password: Pêborîna heyî + data: Dane + discoverable: Ji yên din re ajimêrê pêşniyar bike + display_name: Navê nîşandanê + email: Navnîşana E-nameyê + expires_in: Dîroka xilasbûyînê + fields: Profîla daneyên meta + header: Jormalper + honeypot: "%{label} (tijî neke)" + inbox_url: URLya guhêzkera wergirtî + irreversible: Li şûna veşartinê jê bibe + locale: Zimanê navrûyê + locked: Ajimêr qefl bike + max_uses: Hejmara bikaranîna herî zêde + new_password: Pêborîna nû + note: Jiyanname + otp_attempt: Koda du faktoran + password: Pêborîn + phrase: Peyvkilîd an jî hevok + setting_advanced_layout: Navrûya tevnê yê pêşketî çalak bike + setting_aggregate_reblogs: Di demnameyê de tootên bilindkirî kom bike + setting_auto_play_gif: GIF ên livok bi xweber bilîzine + setting_boost_modal: Gotûbêja pejirandinê nîşan bide berî ku şandî werê bilindkirin + setting_crop_images: Wêneyên di nav şandiyên ku nehatine berfireh kirin wek 16×9 jê bike + setting_default_language: Zimanê weşanê + setting_default_privacy: Ewlehiya weşanê + setting_default_sensitive: Her dem medya wek hestyar bide nîşan + setting_delete_modal: Berî ku peyamek were jêbirin, gotûbêja pejirandinê nîşan bide + setting_disable_swiping: Tevgerên dişiqite ne çalak bike + setting_display_media: Nîşandana medyayê + setting_display_media_default: Berdest + setting_display_media_hide_all: Hemûyan veşêre + setting_display_media_show_all: Hemûyan nîşan bide + setting_expand_spoilers: Şandîyên ku bi agahdarîyên naverokê va hatine nîşankirin her dem berfireh bike + setting_hide_network: Grafîka xwe ya civakî veşêre + setting_noindex: Bes e nexe di nav rêzên lêgerîna gerokan + setting_reduce_motion: Lîstikên livoka kêm bike + setting_show_application: Sepana ku ji bo şandina toot'a tê bikaranîn diyar bike + setting_system_font_ui: Curenivîsa berdest a pergalê bi kar bîne + setting_theme: Rûkarê malperê + setting_trends: Rojeva îro nîşan bide + setting_unfollow_modal: Gotûbêja pejirandinê nîşan bide berî ku dev ji şopa kesekî tê berdan + setting_use_blurhash: Ji bo medyaya veşartî de gradyanên rengîn nîşan bike + setting_use_pending_items: Awayê hêdî + severity: Asta girîngiyê + sign_in_token_attempt: Koda ewlehiyê + type: Cureya têxistinê + username: Navê bikarhêneriyê + username_or_email: Navê bikarhêner an jî e-name + whole_word: Hemû peyv + email_domain_block: + with_dns_records: Tomarên MX û IP yên hundirê navper lê zêde bike + featured_tag: + name: Hashtag + interactions: + must_be_follower: Danezanên ji kesên ku ne şopînerên min tên asteng bike + must_be_following: Agahdariyan asteng bike ji kesên ku tu wan naşopînî + must_be_following_dm: Peyamên rasterast asteng bike ji kesên ku tu wan naşopînî + invite: + comment: Şîrove + invite_request: + text: Tu çima dixwazî beşdar bibî? + ip_block: + comment: Şîrove + ip: IP + severities: + no_access: Gihîştinê asteng bike + sign_up_requires_approval: Tomaran sînordar bike + severity: Rêbaz + notification_emails: + digest: Kurte e-name bişîne + favourite: Kesekî şandiya te hez kir + follow: Kesekî te şopand + follow_request: Kesekî daxwaz kir bo şopandina te + mention: Kesekî qale te kir + pending_account: Pewîste ku ajimêra nû bihê lêkolînkirin + reblog: Kesekî şandiya te bilind kir + report: Ragihandinek nû hate şandin + trending_tag: Hashtageke nenirxandî bûye rojev + rule: + text: Rêbaz + tag: + listable: Bihêle ku ev hashtag werê xuyakirin di lêgerîn û pêşniyaran de + name: Hashtag + trendable: Bihêle ku ev hashtag werê xuyakirin di bin rojevê de + usable: Bihêle ku şandî ev hashtag bi kar bînin + 'no': Na + recommended: Pêşniyarkirî + required: + mark: "*" + text: pêdivî ye + title: + sessions: + webauthn: Yek ji kilîtên ewlehiyê yên xwe bi kar bîne bo têketinê + 'yes': Erê diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index 7fb7506f9..106b36121 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -36,6 +36,7 @@ ko: current_username: 확인을 위해, 현재 계정의 사용자명을 입력해주세요 digest: 오랫동안 활동하지 않았을 때 받은 멘션들에 대한 요약 받기 discoverable: 당신의 계정을 추천과 기타 기능들에 의해 다른 사람들이 발견할 수 있게 허용합니다 + discoverable_no_directory: 당신의 계정을 추천과 기타 기능들에 의해 다른 사람들이 발견할 수 있도록 허용합니다 email: 당신은 확인 메일을 받게 됩니다 fields: 당신의 프로파일에 최대 4개까지 표 형식으로 나타낼 수 있습니다 header: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소 됨 @@ -52,8 +53,8 @@ ko: setting_display_media_hide_all: 항상 모든 미디어를 가리기 setting_display_media_show_all: 민감함으로 설정 된 미디어를 항상 보이기 setting_hide_network: 나를 팔로우 하는 사람들과 내가 팔로우 하는 사람들을 내 프로필에서 숨깁니다 - setting_noindex: 공개 프로필 및 각 툿페이지에 영향을 미칩니다 - setting_show_application: 당신이 게시물을 작성하는데에 사용한 앱이 툿의 상세정보에 표시 됩니다 + setting_noindex: 공개 프로필 및 각 게시물 페이지에 영향을 미칩니다 + setting_show_application: 당신이 게시물을 작성하는데에 사용한 앱이 게시물의 상세정보에 표시 됩니다 setting_use_blurhash: 그라디언트는 숨겨진 내용의 색상을 기반으로 하지만 상세 내용은 보이지 않게 합니다 setting_use_pending_items: 타임라인의 새 게시물을 자동으로 보여 주는 대신, 클릭해서 나타내도록 합니다 username: 당신의 유저네임은 %{domain} 안에서 유일해야 합니다 @@ -151,7 +152,7 @@ ko: setting_boost_modal: 부스트 전 확인 창을 표시 setting_crop_images: 확장되지 않은 게시물의 이미지를 16x9로 자르기 setting_default_language: 게시물 언어 - setting_default_privacy: 툿 프라이버시 + setting_default_privacy: 게시물 프라이버시 setting_default_sensitive: 미디어를 언제나 민감한 컨텐츠로 설정 setting_delete_modal: 게시물 삭제 전 확인 창을 표시 setting_disable_swiping: 스와이프 모션 비활성화 diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index 1be0eabc0..36695fa3c 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -1 +1,224 @@ +--- lv: + simple_form: + hints: + account_alias: + acct: Norādi konta lietotājvārdu@domēnu, no kura vēlies pārvākties + account_migration: + acct: Norādi konta lietotājvārdu@domēnu, uz kuru vēlies pārvākties + account_warning_preset: + text: Vari izmantot ziņu sintaksi, piemēram, URL, atsauces un pieminējumus + title: Neobligāts. Saņēmējam nav redzams + admin_account_action: + include_statuses: Lietotājs redzēs, kuras ziņas izraisījušas moderācijas darbību vai brīdinājumu + send_email_notification: Lietotājs saņems paskaidrojumu par to, kas notika ar viņa kontu + text_html: Neobligāts. Tu vari lietot ziņu sintaksi. Lai ietaupītu laiku, tu vari pievienot brīdinājuma sākotnējos iestatījumus + type_html: Izvēlies, ko darīt ar %{acct} + types: + disable: Neļauj lietotājam izmantot savu kontu, bet neizdzēs vai neslēp tā saturu. + none: Izmanto šo, lai nosūtītu lietotājam brīdinājumu, neradot nekādas citas darbības. + sensitive: Piespiest visus šī lietotāja multivides pielikumus atzīmēt kā sensitīvus. + silence: Neļauj lietotājam publicēt ziņas publiski redzamā veidā, paslēp viņu ziņas un paziņojumus no cilvēkiem, kuri viņiem neseko. + suspend: Novērst jebkādu mijiedarbību ar šo kontu vai ar to un dzēst tā saturu. Atgriežams 30 dienu laikā. + warning_preset_id: Neobligāts. Tu joprojām vari pievienot pielāgotu tekstu sākotnējās iestatīšanas beigās + announcement: + all_day: Atzīmējot šo opciju, tiks parādīti tikai laika diapazona datumi + ends_at: Neobligāts. Paziņojums šoreiz tiks automātiski atcelts + scheduled_at: Lai nekavējoties publicētu paziņojumu, atstāj tukšu + starts_at: Neobligāts. Ja tavs paziņojums ir saistīts ar noteiktu laika diapazonu + text: Varari izmantot ziņu sintaksi. Lūdzu, apdomā lauku, ko paziņojums aizņems lietotāja ekrānā + defaults: + autofollow: Cilvēki, kuri reģistrējas, izmantojot uzaicinājumu, automātiski sekos tev + avatar: PNG, GIF vai JPG. Ne vairāk kā %{size}. Tiks samazināts līdz %{dimensions} px + bot: Paziņo citiem, ka kontā galvenokārt tiek veiktas automatizētas darbības un tas var netikt uzraudzīts + context: Viens vai vairāki konteksti, kur jāpiemēro filtrs + current_password: Drošības nolūkos, lūdzu, ievadi pašreizējā konta paroli + current_username: Lai apstiprinātu, lūdzu, ievadi pašreizējā konta paroli + digest: Sūta tikai pēc ilgstošas neaktivitātes un tikai tad, ja savas prombūtnes laikā neesi saņēmis personiskas ziņas + discoverable: Ļauj svešiniekiem atklāt savu kontu caur ieteikumiem, profila direktoriju un citām iespējām + discoverable_no_directory: Ļauj svešiniekiem atklāt savu kontu caur ieteikumiem un citām iespējām + email: Tev tiks nosūtīts apstiprinājuma e-pasts + fields: Savā profilā kā tabulu vari parādīt līdz 4 vienumiem + header: PNG, GIF vai JPG. Ne vairāk kā %{size}. Tiks samazināts līdz %{dimensions}px + inbox_url: Nokopē URL no tā releja sākumlapas, kuru vēlies izmantot + irreversible: Filtrētās ziņas neatgriezeniski pazudīs, pat ja filtrs vēlāk tiks noņemts + locale: Lietotāja saskarnes, e-pasta ziņojumu un push paziņojumu valoda + locked: Manuāli kontrolē, kas var tev sekot, apstiprinot sekošanas pieprasījumus + password: Izmanto vismaz 8 rakstzīmes + phrase: Tiks saskaņots neatkarīgi no ziņas teksta reģistra vai satura brīdinājuma + scopes: Kuriem API lietojumprogrammai būs atļauta piekļuve. Ja izvēlies augstākā līmeņa tvērumu, tev nav jāatlasa atsevišķi vienumi. + setting_aggregate_reblogs: Nerādīt jaunus palielinājumus ziņām, kas nesen tika palielinātas (ietekmē tikai nesen saņemtos palielinājumus) + setting_default_sensitive: Sensitīvi mediji pēc noklusējuma ir paslēpti, un tos var atklāt, noklikšķinot + setting_display_media_default: Paslēpt mediju, kas atzīmēts kā sensitīvs + setting_display_media_hide_all: Vienmēr slēpt medijus + setting_display_media_show_all: Vienmēr rādīt medijus + setting_hide_network: Kam tu seko un kurš seko tev, tavā profilā tiks paslēps + setting_noindex: Ietekmē tavu publisko profilu un ziņu lapas + setting_show_application: Lietojumprogramma, ko tu izmanto publicēšanai, tiks parādīta tavu ziņu detalizētajā skatā + setting_use_blurhash: Gradientu pamatā ir paslēpto vizuālo attēlu krāsas, bet neskaidras visas detaļas + setting_use_pending_items: Paslēpt laika skalas atjauninājumus aiz klikšķa, nevis automātiski ritini plūsmu + username: Tavs lietotājvārds %{domain} būs unikāls + whole_word: Ja atslēgvārds vai frāze ir tikai burtciparu, tas tiks lietots tikai tad, ja tas atbilst visam vārdam + domain_allow: + domain: Šis domēns varēs izgūt datus no šī servera, un no tā ienākošie dati tiks apstrādāti un saglabāti + email_domain_block: + domain: Tas var būt domēna nosaukums, kas redzams e-pasta adresē, MX ieraksts, kuru domēns atrisina, vai servera IP, uz kuru tiek atrisināts MX ieraksts. Tie tiks pārbaudīti, reģistrējoties lietotājam, un reģistrācija tiks noraidīta. + with_dns_records: Tiks mēģināts atrisināt dotā domēna DNS ierakstus, un rezultāti arī tiks bloķēti + featured_tag: + name: 'Iespējams, vēlēsies izmantot kādu no šīm:' + form_challenge: + current_password: Tu ieej drošā zonā + imports: + data: CSV fails, eksportēts no cita Mastodon servera + invite_request: + text: Tas palīdzēs mums pārskatīt tavu lietojumprogrammu + ip_block: + comment: Neobligāts. Atceries, kādēļ tu pievienoji šo nosacījumu. + expires_in: IP adreses ir ierobežots resurss, tās dažreiz tiek koplietotas un bieži maina turētāju. Šī iemesla dēļ nedefinēti IP bloki nav ieteicami. + ip: Ievadi IPv4 vai IPv6 adresi. Izmantojot CIDR sintaksi, tu vari bloķēt visus diapazonus. Esi piesardzīgs un neizslēdz pats sevi! + severities: + no_access: Bloķēt piekļuvi visiem resursiem + sign_up_requires_approval: Jaunām reģistrācijām būs nepieciešams tavs apstiprinājums + severity: Izvēlies, kas notiks ar pieprasījumiem no šīs IP adreses + rule: + text: Apraksti nosacījumus vai prasības šī servera lietotājiem. Centies, lai tas būtu īss un vienkāršs + sessions: + otp: 'Ievadi divfaktoru kodu, ko ģenerējusi tava tālruņa lietotne, vai izmanto kādu no atkopšanas kodiem:' + webauthn: Ja tā ir USB atslēga, noteikti ievieto to un, ja nepieciešams, pieskaries tai. + tag: + name: Tu vari mainīt tikai burtu lielumu, piemēram, lai tie būtu vieglāk lasāmi + user: + chosen_languages: Ja ieķeksēts, publiskos laika grafikos tiks parādītas tikai ziņas noteiktajās valodās + labels: + account: + fields: + name: Marķējums + value: Saturs + account_alias: + acct: Vecā konta rokturis + account_migration: + acct: Jaunā konta rokturis + account_warning_preset: + text: Iestatītais teksts + title: Virsraksts + admin_account_action: + include_statuses: Iekļaut ziņotās ziņas e-pastā + send_email_notification: Paziņot lietotājam pa e-pastu + text: Pielāgots brīdinājums + type: Darbība + types: + disable: Iesaldēt + none: Nosūtīt brīdinājumu + sensitive: Sensitīvs + silence: Ierobežot + suspend: Apturēt + warning_preset_id: Lietot iepriekš iestatītus brīdinājumus + announcement: + all_day: Visas dienas pasākums + ends_at: Pasākuma noslēgums + scheduled_at: Ieplānot publikāciju + starts_at: Pasākuma sākums + text: Paziņojums + defaults: + autofollow: Uzaicini sekot tavam kontam + avatar: Avatars + bot: Šis ir bot konts + chosen_languages: Filtrēt valodas + confirm_new_password: Apstiprināt jauno paroli + confirm_password: Apstiprināt paroli + context: Filtrēt kontekstus + current_password: Pašreizējā parole + data: Dati + discoverable: Ieteikt kontu citiem + display_name: Parādāmais vārds + email: E-pasta adrese + expires_in: Beidzas pēc + fields: Profila metadati + header: Galvene + honeypot: "%{label} (neaizpildi)" + inbox_url: URL vai releja pastkaste + irreversible: Nomest, nevis paslēpt + locale: Interfeisa valoda + locked: Pieprasīt sekotāju pieprasījumus + max_uses: Maksimālais lietojumu skaits + new_password: Jauna parole + note: Par sevi + otp_attempt: Divfaktoru kods + password: Parole + phrase: Atslēgvārds vai frāze + setting_advanced_layout: Iespējot paplašināto web interfeisu + setting_aggregate_reblogs: Grupēt paaugstinājumus ziņu lentās + setting_auto_play_gif: Automātiski atskaņot animētos GIF + setting_boost_modal: Parādīt apstiprinājuma dialogu pirms paaugstināšanas + setting_crop_images: Apgrieziet attēlus neizvērstajās ziņās līdz 16x9 + setting_default_language: Publicēšanas valoda + setting_default_privacy: Publicēšanas privātums + setting_default_sensitive: Atļaut atzīmēt medijus kā sensitīvus + setting_delete_modal: Parādīt apstiprinājuma dialogu pirms ziņas dzēšanas + setting_disable_swiping: Atspējot vilkšanas kustības + setting_display_media: Mediju bibliotēka + setting_display_media_default: Noklusējums + setting_display_media_hide_all: Paslēpt visu + setting_display_media_show_all: Parādīt visu + setting_expand_spoilers: Vienmēr izvērst ziņas, kas apzīmētas ar brīdinājumiem par saturu + setting_hide_network: Slēpt savu sociālo diagrammu + setting_noindex: Atteikties no meklētājprogrammu indeksēšanas + setting_reduce_motion: Ierobežot kustību animācijās + setting_show_application: Atklāt lietojumprogrammu, ko izmanto ziņu nosūtīšanai + setting_system_font_ui: Lietot sistēmas noklusējuma fontu + setting_theme: Vietnes motīvs + setting_trends: Parādīt šodienas tendences + setting_unfollow_modal: Parādīt apstiprinājuma dialogu pirms atsekoties no kāda + setting_use_blurhash: Rādīt krāsainos gradientus slēptajiem medijiem + setting_use_pending_items: Lēnais režīms + severity: Smagums + sign_in_token_attempt: Drošības kods + type: Importa veids + username: Lietotājvārds + username_or_email: Lietotājvārds vai e-pasts + whole_word: Pilns vārds + email_domain_block: + with_dns_records: Ietvert domēna MX ierakstus un IP adreses + featured_tag: + name: Tēmturis + interactions: + must_be_follower: Bloķēt paziņojumus no ne-sekotājiem + must_be_following: Bloķēt paziņojumus no cilvēkiem, kuriem tu neseko + must_be_following_dm: Bloķēt tiešos ziņojumus no cilvēkiem, kuriem tu neseko + invite: + comment: Komentēt + invite_request: + text: Kāpēc tu vēlies pievienoties? + ip_block: + comment: Komentēt + ip: IP + severities: + no_access: Bloķēt piekļuvi + sign_up_requires_approval: Ierobežot reģistrēšanos + severity: Noteikumi + notification_emails: + digest: Sūtīt kopsavilkumu e-pastus + favourite: Kāds izcēla tavu ziņu + follow: Kāds uzsāka tev sekot + follow_request: Kāds vēlas tev sekot + mention: Kāds pieminēja tevi + pending_account: Jāpārskata jaunu kontu + reblog: Kāds paaugstināja tavu ziņu + report: Tika iesniegts jauns ziņojums + trending_tag: Kļūst populārs nepārskatīts tēmturis + rule: + text: Noteikumi + tag: + listable: Atļaut šim tēmturim parādīties meklējumos un ieteikumos + name: Tēmturis + trendable: Atļaut šim tēmturim parādīties zem tendencēm + usable: Atļaut lietot ziņās šo tēmturi + 'no': Nē + recommended: Ieteicams + required: + mark: "*" + text: nepieciešams + title: + sessions: + webauthn: Lai pierakstītos, izmanto vienu no savām drošības atslēgām + 'yes': Jā diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml index 04f8c2b28..97ce17415 100644 --- a/config/locales/simple_form.nn.yml +++ b/config/locales/simple_form.nn.yml @@ -14,6 +14,12 @@ nn: send_email_notification: Brukaren får ei forklåring av kva som har hendt med kontoen sin text_html: Valfritt. Du kan bruka tut-syntaks. Du kan leggja til åtvaringsførehandsinnstillingar for å spara tid type_html: Vel det du vil gjera med %{acct} + types: + disable: Forhindre brukeren å bruke kontoen sin, men ikke slett eller skjule innholdet deres. + none: Bruk dette for å sende en advarsel til brukeren uten å utløse noen andre handlinger. + sensitive: Tving alle denne brukerens medievedlegg til å bli markert som følsom. + silence: Hindre brukeren i å kunne skrive offentlig synlighet, skjule sine innlegg og varsler for personer som ikke kan følge dem. + suspend: Forhindre interaksjon fra eller til denne kontoen og slett innholdet der. Reversibel innen 30 dager. warning_preset_id: Valfritt. Du kan leggja inn eigen tekst på enden av føreoppsettet announcement: all_day: Når merka, vil berre datoane til tidsramma synast @@ -66,8 +72,15 @@ nn: invite_request: text: Dette kjem til å hjelpa oss med å gå gjennom søknaden din ip_block: + comment: Valgfritt. Husk hvorfor du la til denne regelen. + expires_in: IP-adressene er en helt begrenset ressurs, de deles og endres ofte hender. Ubestemte IP-blokker anbefales ikke. + ip: Skriv inn en IPv4 eller IPv6-adresse. Du kan blokkere alle områder ved å bruke CIDR-syntaksen. Pass på å ikke låse deg selv! severities: no_access: Blokker tilgang til alle ressurser + sign_up_requires_approval: Nye registreringer vil kreve din godkjenning + severity: Velg hva som vil skje med forespørsler fra denne IP + rule: + text: Beskriv en regel eller krav til brukere på denne serveren. Prøv å holde den kort og enkelt sessions: otp: Angi tofaktorkoden fra din telefon eller bruk en av dine gjenopprettingskoder. tag: @@ -94,6 +107,7 @@ nn: types: disable: Slå av innlogging none: Gjer inkje + sensitive: Sensitiv silence: Togn suspend: Utvis og slett kontodata for godt warning_preset_id: Bruk åtvaringsoppsett diff --git a/config/locales/simple_form.no.yml b/config/locales/simple_form.no.yml index 81913086e..789777936 100644 --- a/config/locales/simple_form.no.yml +++ b/config/locales/simple_form.no.yml @@ -14,6 +14,12 @@ send_email_notification: Brukeren vil motta en forklaring på hva som har skjedd med deres bruker text_html: Valgfritt. Du kan bruke tut syntaks. Du kan legge til advarsels-forhåndsinnstillinger for å spare tid type_html: Velg hva du vil gjøre med %{acct} + types: + disable: Forhindre brukeren å bruke kontoen sin, men ikke slett eller skjule innholdet deres. + none: Bruk dette for å sende en advarsel til brukeren uten å utløse noen andre handlinger. + sensitive: Tving alle denne brukerens medievedlegg til å bli markert som følsom. + silence: Hindre brukeren i å kunne skrive offentlig synlighet, skjule sine innlegg og varsler for personer som ikke kan følge dem. + suspend: Forhindre interaksjon fra eller til denne kontoen og slett innholdet der. Reversibel innen 30 dager. warning_preset_id: Valgfritt. Du kan fortsatt legge til tilpasset tekst til slutten av forhåndsinnstillingen announcement: all_day: Hvis noen av dem er valgt, vil kun datoene av tidsrammen bli vist @@ -66,8 +72,15 @@ invite_request: text: Dette vil hjelpe oss med å gjennomgå din søknad ip_block: + comment: Valgfritt. Husk hvorfor du la til denne regelen. + expires_in: IP-adressene er en helt begrenset ressurs, de deles og endres ofte hender. Ubestemte IP-blokker anbefales ikke. + ip: Skriv inn en IPv4 eller IPv6-adresse. Du kan blokkere alle områder ved å bruke CIDR-syntaksen. Pass på å ikke låse deg selv! severities: no_access: Blokker tilgang til alle ressurser + sign_up_requires_approval: Nye registreringer vil kreve din godkjenning + severity: Velg hva som vil skje med forespørsler fra denne IP + rule: + text: Beskriv en regel eller krav til brukere på denne serveren. Prøv å holde den kort og enkelt sessions: otp: Angi tofaktorkoden fra din telefon eller bruk en av dine gjenopprettingskoder. tag: @@ -94,6 +107,7 @@ types: disable: Deaktiver pålogging none: Ikke gjør noe + sensitive: Sensitiv silence: Stilne suspend: Suspender og ugjenkallelig slett brukerdata warning_preset_id: Bruk en advarsels-forhåndsinnstilling diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index b217cd738..a82bbb8da 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -36,6 +36,7 @@ pl: current_username: Aby potwierdzić, wprowadź nazwę użytkownika obecnego konta digest: Wysyłane tylko po długiej nieaktywności, jeżeli w tym czasie otrzymaleś jakąś wiadomość bezpośrednią discoverable: Katalog profilu jest jednym ze sposobów, dzięki którym Twoje konto dotrze do szerszego grona + discoverable_no_directory: Pozwól na odkrywanie Twojego konta przez nieznajomych poprzez rekomendacje i inne funkcje email: Otrzymasz e-mail potwierdzający fields: Możesz ustawić maksymalnie 4 niestandardowe pola wyświetlane jako tabela na Twoim profilu header: PNG, GIF lub JPG. Maksymalnie %{size}. Zostanie zmniejszony do %{dimensions}px diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index 358e054f6..b1bb020dd 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -3,27 +3,30 @@ pt-BR: simple_form: hints: account_alias: - acct: Especifique o usuário@domínio da conta da qual você deseja se mudar + acct: Especifique o usuário@domínio de onde veio account_migration: - acct: Especifique o usuário@domínio da conta para a qual você deseja se mudar + acct: Especifique o usuário@domínio para onde vai account_warning_preset: text: Você pode usar a sintaxe do toot, como links, hashtags e menções title: Opcional. Não visível para o destinatário admin_account_action: - include_statuses: O usuário verá quais toots causaram o aviso ou ação da moderação + include_statuses: O usuário verá quais toots causaram a advertência ou ação da moderação send_email_notification: O usuário receberá uma explicação do que aconteceu com a própria conta - text_html: Opcional. Você pode usar a sintaxe do toot e também pode adicionar avisos pré-definidos para poupar tempo + text_html: Opcional. Você pode usar a sintaxe do toot ou pode poupar tempo adicionando advertências pré-definidas type_html: Decida o que fazer com %{acct} types: - disable: Impedir o usuário de usar sua conta, porém sem deletá-la ou escondê-la. + disable: Impede o usuário de usar a conta, porém sem excluí-la ou suspendê-la. none: Use isto para enviar uma advertência ao usuário, sem nenhuma outra ação. - warning_preset_id: Opcional. Você ainda pode adicionar texto personalizado no final do aviso pré-definido + sensitive: Marca todas as mídias do usuário como sensível. + silence: Impede o usuário de tootar publicamente, e oculta toots e notificações dos que não o seguem. + suspend: Impede interações e exclui conteúdo da conta. Reversível apenas dentro de 30 dias. + warning_preset_id: Opcional. Você pode adicionar texto personalizado no final da advertência pré-definida announcement: all_day: Quando marcada, apenas as datas do período serão mostradas - ends_at: Opcional. O anúncio será automaticamente não publicado no momento - scheduled_at: Deixe em branco para publicar o anúncio imediatamente - starts_at: Opcional. Caso seu anúncio esteja vinculado a um período específico - text: Você pode usar a sintaxe toot. Esteja ciente do espaço que o anúncio ocupará na tela do usuário + ends_at: Opcional. O comunicado sairá do ar automaticamente + scheduled_at: Deixe em branco para publicar o comunicado agora + starts_at: Opcional. Caso o comunicado esteja vinculado a um período específico + text: Você pode usar a sintaxe do toot. Considere o espaço que o comunicado ocupará na tela do usuário defaults: autofollow: Pessoas que criarem conta através de seu convite te seguirão automaticamente avatar: PNG, GIF or JPG. Arquivos de até %{size}. Serão redimensionados para %{dimensions}px @@ -41,7 +44,7 @@ pt-BR: locale: O idioma da interface do usuário, e-mails e notificações locked: Requer aprovação manual de seguidores password: Use pelo menos 8 caracteres - phrase: Corresponderá independente de maiúsculas ou minúsculas, no texto ou no aviso de conteúdo de um toot + phrase: Corresponderá independente de maiúsculas ou minúsculas, no texto ou no Aviso de Conteúdo de um toot scopes: Quais APIs o aplicativo vai ter permissão de acessar. Se você selecionar uma autorização de alto nível, você não precisa selecionar individualmente os outros. setting_aggregate_reblogs: Não mostra novos boosts para toots que receberam boost recentemente (afeta somente os boosts mais recentes) setting_default_sensitive: Mídia sensível está oculta por padrão e pode ser revelada com um clique @@ -95,30 +98,30 @@ pt-BR: account_migration: acct: Nome de usuário da nova conta account_warning_preset: - text: Aviso pré-definido + text: Advertência pré-definida title: Título admin_account_action: include_statuses: Incluir toots denunciados no e-mail send_email_notification: Notificar o usuário por e-mail - text: Aviso personalizado + text: Advertência personalizada type: Ação types: disable: Congelar none: Não fazer nada sensitive: Sensível - silence: Silenciar - suspend: Banir e excluir irreversivelmente dados da conta - warning_preset_id: Usar um aviso pré-definido + silence: Suspender + suspend: Banir e excluir conta + warning_preset_id: Usar advertência pré-definida announcement: all_day: Evento o dia inteiro ends_at: Fim do evento scheduled_at: Agendar publicação starts_at: Início do evento - text: Anúncio + text: Comunicados defaults: autofollow: Convite para seguir a sua conta avatar: Imagem de perfil - bot: Esta é uma conta-robô + bot: Robô chosen_languages: Filtro de idiomas confirm_new_password: Confirmar nova senha confirm_password: Confirmar senha @@ -127,16 +130,16 @@ pt-BR: data: Dados discoverable: Mostrar conta no diretório de perfis display_name: Nome de exibição - email: Endereço de e-mail + email: E-mail expires_in: Expira em fields: Metadados do perfil - header: Cabeçalho + header: Capa honeypot: "%{label} (não preencher)" inbox_url: Link da caixa de entrada do repetidor irreversible: Ignorar ao invés de ocultar locale: Idioma da interface - locked: Trancar conta - max_uses: Número máximo de usos + locked: Trancar perfil + max_uses: Limite de uso new_password: Nova senha note: Biografia otp_attempt: Código de autenticação de dois fatores @@ -165,7 +168,7 @@ pt-BR: setting_theme: Tema do site setting_trends: Mostrar em alta hoje setting_unfollow_modal: Solicitar confirmação antes de deixar de seguir alguém - setting_use_blurhash: Mostrar blur em mídias ocultas + setting_use_blurhash: Mostrar blur em mídias sensíveis setting_use_pending_items: Modo lento severity: Gravidade sign_in_token_attempt: Código de segurança @@ -175,39 +178,44 @@ pt-BR: whole_word: Palavra inteira email_domain_block: with_dns_records: Incluir registros MX e IPs do domínio + featured_tag: + name: Hashtag interactions: must_be_follower: Bloquear notificações de não-seguidores - must_be_following: Bloquear notificações de pessoas que você não segue - must_be_following_dm: Bloquear mensagens diretas de pessoas que você não segue + must_be_following: Bloquear notificações de não-seguidos + must_be_following_dm: Bloquear toots diretos de não-seguidos invite: comment: Comentário invite_request: text: Por que você deseja criar uma conta aqui? ip_block: comment: Comentário + ip: IP severities: no_access: Bloquear acesso - sign_up_requires_approval: Limitar registros + sign_up_requires_approval: Limitar novas contas severity: Regra notification_emails: digest: Enviar e-mails de resumo - favourite: Enviar e-mail quando alguém favoritar seus toots + favourite: Enviar e-mail quando alguém favoritar teus toots follow: Enviar e-mail quando alguém te seguir - follow_request: Enviar e-mail quando alguém solicitar ser seu seguidor + follow_request: Enviar e-mail quando alguém quiser te seguir mention: Enviar e-mail quando alguém te mencionar - pending_account: Enviar e-mail quando uma nova conta precisar ser revisada - reblog: Enviar e-mail quando alguém der boost nos seus toots + pending_account: Enviar e-mail quando uma nova conta precisa ser revisada + reblog: Enviar e-mail quando alguém der boost nos teus toots report: Enviar e-mail quando uma nova denúncia for enviada - trending_tag: Uma hashtag não-revisada está em alta + trending_tag: Enviar e-mail quando uma hashtag não-revisada está em alta rule: text: Regra tag: - listable: Permitir que esta hashtag apareça em pesquisas e no diretório de perfis + listable: Permitir que esta hashtag apareça em pesquisas e sugestões + name: Hashtag trendable: Permitir que esta hashtag fique em alta usable: Permitir que toots usem esta hashtag 'no': Não recommended: Recomendado required: + mark: "*" text: obrigatório title: sessions: diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml index 4d0d5291f..9519ee35a 100644 --- a/config/locales/simple_form.pt-PT.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -32,10 +32,11 @@ pt-PT: avatar: PNG, GIF or JPG. Arquivos até %{size}. Vão ser reduzidos para %{dimensions}px bot: Esta conta executa essencialmente ações automatizadas e pode não ser monitorizada context: Um ou múltiplos contextos nos quais o filtro deve ser aplicado - current_password: Para fins de segurança, por favor, digite a senha da conta atual + current_password: Para fins de segurança, por favor, introduza a palavra-passe da conta atual current_username: Para confirmar, por favor, introduza o nome de utilizador da conta atual digest: Enviado após um longo período de inatividade e apenas se foste mencionado na tua ausência discoverable: O diretório de perfis é outra maneira da sua conta alcançar um público mais vasto + discoverable_no_directory: Permitir que a sua conta seja descoberta por estranhos através de recomendações e outras funções email: Será enviado um e-mail de confirmação fields: Pode ter até 4 itens expostos, em forma de tabela, no seu perfil header: PNG, GIF or JPG. Arquivos até %{size}. Vão ser reduzidos para %{dimensions}px @@ -61,8 +62,8 @@ pt-PT: domain_allow: domain: Este domínio será capaz de obter dados desta instância e os dados dele recebidos serão processados e armazenados email_domain_block: - domain: Este pode ser o nome de domínio que aparece no endereço de email, o registro MX para o qual o domínio resolve, ou o IP do servidor para o qual o registro MX resolve. Estes serão verificados no momento da inscrição do utilizador e a inscrição será rejeitada. - with_dns_records: Será feita uma tentativa de resolver os registros DNS do domínio em questão e os resultados também serão colocados na lista negra + domain: Este pode ser o nome de domínio que aparece no endereço de e-mail, o registo MX para o qual o domínio resolve, ou o IP do servidor para o qual o registo MX resolve. Estes serão verificados no momento da inscrição do utilizador e a inscrição será rejeitada. + with_dns_records: Será feita uma tentativa de resolver os registos DNS do domínio em questão e os resultados também serão colocados na lista negra featured_tag: name: 'Poderás querer usar um destes:' form_challenge: @@ -82,7 +83,7 @@ pt-PT: rule: text: Descreva uma regra ou requisito para os utilizadores nesta instância. Tente mantê-la curta e simples sessions: - otp: 'Insere o código de autenticação em dois passos gerado pelo teu telemóvel ou usa um dos teus códigos de recuperação:' + otp: 'Insira o código de autenticação em duas etapas gerado pelo seu telemóvel ou use um dos seus códigos de recuperação:' webauthn: Se for uma chave USB tenha certeza de inseri-la e, se necessário, toque nela. tag: name: Só pode alterar a capitalização das letras, por exemplo, para torná-las mais legíveis @@ -106,7 +107,7 @@ pt-PT: text: Aviso personalizado type: Acção types: - disable: Desactivar + disable: Congelar none: Não fazer algo sensitive: Sensível silence: Silenciar @@ -142,7 +143,7 @@ pt-PT: max_uses: Número máximo de utilizações new_password: Nova palavra-passe note: Biografia - otp_attempt: Código de autenticação em dois passos + otp_attempt: Código de autenticação em duas etapas password: Palavra-passe phrase: Palavra ou expressão-chave setting_advanced_layout: Ativar interface web avançada @@ -154,7 +155,7 @@ pt-PT: setting_default_privacy: Privacidade da publicação setting_default_sensitive: Sempre marcar media como sensível setting_delete_modal: Solicitar confirmação antes de eliminar uma publicação - setting_disable_swiping: Desactivar os movimentos de deslize + setting_disable_swiping: Desativar os movimentos de deslize setting_display_media: Visualização de media setting_display_media_default: Pré-definição setting_display_media_hide_all: Esconder todos @@ -177,7 +178,7 @@ pt-PT: username_or_email: Nome de utilizador ou e-mail whole_word: Palavra completa email_domain_block: - with_dns_records: Incluir registros MX e IPs do domínio + with_dns_records: Incluir registos MX e IPs do domínio featured_tag: name: Hashtag interactions: @@ -197,14 +198,14 @@ pt-PT: severity: Regra notification_emails: digest: Enviar e-mails de resumo - favourite: Enviar e-mail quando alguém adiciona uma publicação tua aos favoritos - follow: Enviar e-mail quando alguém te segue - follow_request: Enviar e-mail quando alguém solicita ser teu seguidor - mention: Enviar e-mail quando alguém te menciona - pending_account: Enviar e-mail quando uma nova conta aguarda aprovação - reblog: Enviar e-mail quando alguém partilha uma publicação tua - report: Enviar um e-mail quando um novo relatório é submetido - trending_tag: Enviar e-mail quando uma hashtag não aprovada anteriormente estiver em destaque + favourite: Quando alguém adiciona uma publicação sua aos favoritos + follow: Quando alguém começar a segui-lo + follow_request: Quando alguém solicitar ser seu seguidor + mention: Quando alguém o mencionar + pending_account: Quando uma nova conta aguarda aprovação + reblog: Quando alguém partilhar uma publicação sua + report: Quando um novo relatório é submetido + trending_tag: Quando uma hashtag não aprovada anteriormente estiver em destaque rule: text: Regra tag: diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index f704f6e5a..356f9f2b9 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -36,6 +36,7 @@ ru: current_username: Для подтверждения, пожалуйста, введите имя пользователя текущей учётной записи digest: Если вы долго не заглядывали, отправим вам дайджест событий, которые происходили в период вашего отсутствия. discoverable: Каталог профилей это один из способов получить охват вашего профиля более обширной аудиторией. + discoverable_no_directory: Разрешить сторонним людям находить ваш профиль через рекомендации и прочие функции email: Вам будет отправлено электронное письмо с подтверждением. fields: В профиле можно отобразить до 4 пунктов в виде таблицы. header: Поддерживается PNG, GIF и JPG. Максимальный размер — %{size}. Будет уменьшена до %{dimensions}px. @@ -52,7 +53,7 @@ ru: setting_display_media_hide_all: Всегда скрывать любые медиафайлы setting_display_media_show_all: Всегда показывать любые медиафайлы setting_hide_network: Другие не смогут видеть ни ваши подписки, ни ваших подписчиков. - setting_noindex: Ваш публичный профиль и страницы постов будут скрыты из поисковых движков. + setting_noindex: Ваш публичный профиль и публикации будут скрыты от поисковых систем. setting_show_application: При просмотре поста будет видно из какого приложения он отправлен. setting_use_blurhash: Градиенты основаны на цветах скрытых медиа, но скрывают любые детали. setting_use_pending_items: Показывать обновления в ленте только после клика вместо автоматической прокрутки. @@ -147,10 +148,10 @@ ru: phrase: Слово или фраза setting_advanced_layout: Включить многоколоночный интерфейс setting_aggregate_reblogs: Группировать продвижения в лентах - setting_auto_play_gif: Автоматически проигрывать анимированные GIF + setting_auto_play_gif: Автоматически проигрывать GIF анимации setting_boost_modal: Всегда спрашивать перед продвижением setting_crop_images: Кадрировать изображения в нераскрытых постах до 16:9 - setting_default_language: Язык отправляемых постов + setting_default_language: Язык публикуемых постов setting_default_privacy: Видимость постов setting_default_sensitive: Всегда отмечать медиафайлы как «деликатного характера» setting_delete_modal: Всегда спрашивать перед удалении поста diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml index 7235ac0fb..9f2e0ee31 100644 --- a/config/locales/simple_form.si.yml +++ b/config/locales/simple_form.si.yml @@ -19,6 +19,7 @@ si: setting_display_media_show_all: සියල්ල පෙන්වන්න setting_hide_network: ඔබගේ ජාලය සඟවන්න setting_theme: අඩවියේ තේමාව + sign_in_token_attempt: ආරක්‍ෂණ කේතය username: පරිශීලක නාමය username_or_email: පරිශීලක නාමය හෝ වි-තැපෑල whole_word: සමස්ත වචනය diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml index 99d7d42e3..01995011e 100644 --- a/config/locales/simple_form.sk.yml +++ b/config/locales/simple_form.sk.yml @@ -35,9 +35,9 @@ sk: scopes: Ktoré API budú povolené aplikácii pre prístup. Ak vyberieš vrcholný stupeň, nemusíš už potom vyberať po jednom. setting_aggregate_reblogs: Nezobrazuj nové vyzdvihnutia pre príspevky, ktoré už boli len nedávno povýšené (týka sa iba nanovo získaných povýšení) setting_default_sensitive: Chúlostivé médiá sú štandardne ukryté, a môžu byť zobrazené kliknutím - setting_display_media_default: Ukry médiá označené ako citlivé + setting_display_media_default: Ukry médiá označené ako chúlostivé setting_display_media_hide_all: Vždy ukry všetky médiá - setting_display_media_show_all: Stále zobrazuj médiá označené ako citlivé + setting_display_media_show_all: Vždy zobrazuj médiá setting_hide_network: Koho následuješ, a kto následuje teba, nebude zobrazené na tvojom profile setting_noindex: Ovplyvňuje verejný profil a stránky s príspevkami setting_show_application: Aplikácia, ktorú používaš na písanie príspevkov, bude zobrazená v podrobnom náhľade jednotlivých tvojích príspevkov diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index 2a97725cb..80bab0e04 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -36,6 +36,7 @@ sq: current_username: Që ta ripohoni, ju lutemi, jepni emrin e përdoruesit të llogarisë së tanishme digest: I dërguar vetëm pas një periudhe të gjatë pasiviteti dhe vetëm nëse keni marrë ndonjë mesazh personal gjatë mungesës tuaj discoverable: Drejtoria e profileve është një rrugë tjetër përmes së cilës llogaria juaj mund të mbërrijë te një publik më i gjerë + discoverable_no_directory: Lejojeni llogarinë tuaj të zbulohet nga të panjohur përmes rekomandimesh dhe veçorish të tjera email: Do t’ju dërgohet një email ripohimi fields: Te profili juaj mund të keni deri në 4 objekte të shfaqur si tabelë header: PNG, GIF ose JPG. E shumta %{size}. Do të ripërmasohet në %{dimensions}px diff --git a/config/locales/simple_form.sr.yml b/config/locales/simple_form.sr.yml index 6901b842c..4210b0a99 100644 --- a/config/locales/simple_form.sr.yml +++ b/config/locales/simple_form.sr.yml @@ -16,7 +16,7 @@ sr: context: Један или више контекста у којима треба да се примени филтер digest: Послато после дужег периода неактивности са прегледом свих битних ствари које сте добили док сте били одсутни email: Биће вам послата е-пошта са потврдом - fields: Можете имати до 4 ставке приказане као табела на вашем профилу + fields: Можете имати до 4 ставке приказане као табела на вашем налогу header: PNG, GIF или JPG. Највише %{size}. Биће смањена на %{dimensions}px inbox_url: Копирајте URL са насловне стране релеја који желите користити irreversible: Филтриранe трубе ће нестати неповратно, чак и ако је филтер касније уклоњен @@ -29,8 +29,8 @@ sr: setting_display_media_default: Сакриј медије означене као осетљиве setting_display_media_hide_all: Увек сакриј све медије setting_display_media_show_all: Увек прикажи медије означене као осетљиве - setting_hide_network: Кога пратите и ко вас прати неће бити приказано на вашем профилу - setting_noindex: Утиче на Ваш јавни профил и статусне стране + setting_hide_network: Кога пратите и ко вас прати неће бити приказано на вашем налогу + setting_noindex: Утиче на Ваш јавни налог и статусне стране username: Ваш надимак ће бити јединствен на %{domain} whole_word: Када је кључна реч или фраза искључиво алфанумеричка, биће примењена само ако се подудара са целом речи imports: @@ -70,7 +70,7 @@ sr: display_name: Име за приказ email: Адреса е-поште expires_in: Истиче након - fields: Профилирај метаподатке + fields: Метаподаци налога header: Заглавље inbox_url: URL од релејног пријемног сандучета irreversible: Испустити уместо сакрити diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index 92d826bbc..12ddc9547 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -27,6 +27,7 @@ sv: avatar: PNG, GIF eller JPG. Högst %{size}. Kommer att skalas ner till %{dimensions}px bot: Detta konto utför huvudsakligen automatiserade åtgärder och kanske inte övervakas digest: Skickas endast efter en lång period av inaktivitet och endast om du har fått några personliga meddelanden i din frånvaro + discoverable_no_directory: Tillåt att ditt konto kan ses genom rekommendationer och andra funktioner email: Du kommer att få ett bekräftelsemeddelande via e-post fields: Du kan ha upp till 4 objekt visade som en tabell på din profil header: PNG, GIF eller JPG. Högst %{size}. Kommer att skalas ner till %{dimensions}px diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index 35045e9c3..8311e1d12 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -14,6 +14,12 @@ th: send_email_notification: ผู้ใช้จะได้รับคำอธิบายว่าเกิดอะไรขึ้นกับบัญชีของเขา text_html: ไม่จำเป็น คุณสามารถใช้ไวยากรณ์โพสต์ คุณสามารถ เพิ่มคำเตือนที่ตั้งไว้ล่วงหน้า เพื่อประหยัดเวลา type_html: เลือกสิ่งที่จะทำกับ %{acct} + types: + disable: ป้องกันไม่ให้ผู้ใช้ใช้บัญชีของเขา แต่ไม่ลบหรือซ่อนเนื้อหาของเขา + none: ใช้สิ่งนี้เพื่อส่งคำเตือนไปยังผู้ใช้ โดยไม่ทริกเกอร์การกระทำอื่นใด + sensitive: บังคับให้ทำเครื่องหมายไฟล์แนบสื่อของผู้ใช้นี้ทั้งหมดว่าละเอียดอ่อน + silence: ป้องกันไม่ให้ผู้ใช้สามารถโพสต์โดยมีการมองเห็นเป็นสาธารณะ ซ่อนโพสต์และการแจ้งเตือนของเขาจากผู้คนที่ไม่ได้กำลังติดตามผู้ใช้ + suspend: ป้องกันไม่ให้มีการโต้ตอบใด ๆ จากหรือไปยังบัญชีนี้และลบเนื้อหาของบัญชี แปลงกลับได้ภายใน 30 วัน warning_preset_id: ไม่จำเป็น คุณยังสามารถเพิ่มข้อความที่กำหนดเองที่จุดสิ้นสุดของค่าที่ตั้งไว้ล่วงหน้า announcement: all_day: เมื่อกาเครื่องหมาย จะแสดงเฉพาะวันที่ของช่วงเวลาเท่านั้น @@ -29,20 +35,21 @@ th: current_password: เพื่อวัตถุประสงค์ด้านความปลอดภัย โปรดป้อนรหัสผ่านของบัญชีปัจจุบัน current_username: เพื่อยืนยัน โปรดป้อนชื่อผู้ใช้ของบัญชีปัจจุบัน digest: ส่งเฉพาะหลังจากไม่มีการใช้งานเป็นเวลานานและในกรณีที่คุณได้รับข้อความส่วนบุคคลใด ๆ เมื่อคุณไม่อยู่เท่านั้น - discoverable: อนุญาตให้คนแปลกหน้าค้นพบบัญชีของคุณผ่านคำแนะนำและคุณลักษณะอื่น ๆ + discoverable: อนุญาตให้คนแปลกหน้าค้นพบบัญชีของคุณได้ผ่านคำแนะนำและคุณลักษณะอื่น ๆ + discoverable_no_directory: อนุญาตให้คนแปลกหน้าค้นพบบัญชีของคุณได้ผ่านคำแนะนำและคุณลักษณะอื่น ๆ email: คุณจะได้รับอีเมลยืนยัน fields: คุณสามารถมีได้มากถึง 4 รายการแสดงเป็นตารางในโปรไฟล์ของคุณ header: PNG, GIF หรือ JPG สูงสุด %{size} จะถูกย่อขนาดเป็น %{dimensions}px inbox_url: คัดลอก URL จากหน้าแรกของรีเลย์ที่คุณต้องการใช้ irreversible: โพสต์ที่กรองจะหายไปอย่างถาวร แม้ว่าจะเอาตัวกรองออกในภายหลัง locale: ภาษาของส่วนติดต่อผู้ใช้, อีเมล และการแจ้งเตือนแบบผลัก - locked: ควบคุมผู้ที่สามารถติดตามคุณด้วยตนเองโดยอนุมัติคำขอติดตาม + locked: ควบคุมผู้ที่สามารถติดตามคุณด้วยตนเองได้โดยอนุมัติคำขอติดตาม password: ใช้อย่างน้อย 8 ตัวอักษร phrase: จะถูกจับคู่โดยไม่คำนึงถึงตัวพิมพ์ใหญ่เล็กในข้อความหรือคำเตือนเนื้อหาของโพสต์ scopes: API ใดที่แอปพลิเคชันจะได้รับอนุญาตให้เข้าถึง หากคุณเลือกขอบเขตระดับบนสุด คุณไม่จำเป็นต้องเลือกแต่ละขอบเขต setting_aggregate_reblogs: ไม่แสดงการดันใหม่สำหรับโพสต์ที่เพิ่งดัน (มีผลต่อการดันที่ได้รับใหม่เท่านั้น) setting_default_sensitive: ซ่อนสื่อที่ละเอียดอ่อนเป็นค่าเริ่มต้นและสามารถเปิดเผยได้ด้วยการคลิก - setting_display_media_default: ซ่อนสื่อที่ถูกทำเครื่องหมายว่าละเอียดอ่อน + setting_display_media_default: ซ่อนสื่อที่มีการทำเครื่องหมายว่าละเอียดอ่อน setting_display_media_hide_all: ซ่อนสื่อเสมอ setting_display_media_show_all: แสดงสื่อเสมอ setting_hide_network: จะซ่อนผู้ที่คุณติดตามและผู้ที่ติดตามคุณในโปรไฟล์ของคุณ @@ -146,7 +153,7 @@ th: setting_display_media_default: ค่าเริ่มต้น setting_display_media_hide_all: ซ่อนทั้งหมด setting_display_media_show_all: แสดงทั้งหมด - setting_expand_spoilers: ขยายโพสต์ที่ทำเครื่องหมายด้วยคำเตือนเนื้อหาเสมอ + setting_expand_spoilers: ขยายโพสต์ที่มีการทำเครื่องหมายด้วยคำเตือนเนื้อหาเสมอ setting_hide_network: ซ่อนกราฟทางสังคมของคุณ setting_noindex: เลือกไม่รับการทำดัชนีโดยเครื่องมือค้นหา setting_reduce_motion: ลดการเคลื่อนไหวในภาพเคลื่อนไหว diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index 5e26da732..88c96896c 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -36,7 +36,8 @@ tr: current_username: Onaylamak için lütfen şu anki hesabın kullanıcı adını girin digest: Sadece uzun bir süre hareketsiz kaldıktan sonra ve yalnızca yokluğunuzda herhangi bir kişisel mesaj aldıysanız gönderilir discoverable: Profil dizini, hesabınızın daha geniş bir kitleye ulaşmasının başka bir yoludur - email: Onay e-postası gönderilecek + discoverable_no_directory: Hesabınızın, öneriler ve diğer özellikler aracılığıyla yabancılar tarafından keşfedilmesine izin verin + email: Onay e-postası gönderilir fields: Profilinizde tablo olarak görüntülenen en fazla 4 ögeye sahip olabilirsiniz header: PNG, GIF ya da JPG. En fazla %{size}. %{dimensions}px boyutuna küçültülecek inbox_url: Kullanmak istediğiniz aktarıcının ön sayfasından URL'yi kopyalayın @@ -146,7 +147,7 @@ tr: password: Şifre phrase: Anahtar kelime veya kelime öbeği setting_advanced_layout: Gelişmiş web arayüzünü etkinleştir - setting_aggregate_reblogs: Zaman çizelgesinde grup boostları + setting_aggregate_reblogs: Zaman çizelgesindeki boostları grupla setting_auto_play_gif: Hareketli GIF'leri otomatik oynat setting_boost_modal: Boostlamadan önce onay iletişim kutusu göster setting_crop_images: Genişletilmemiş tootlardaki resimleri 16x9 olarak kırp @@ -160,7 +161,7 @@ tr: setting_display_media_hide_all: Tümünü gizle setting_display_media_show_all: Tümünü göster setting_expand_spoilers: İçerik uyarılarıyla işaretli tootları her zaman genişlet - setting_hide_network: Ağınızı gizleyin + setting_hide_network: Sosyal grafiğini gizle setting_noindex: Arama motoru dizinine eklemeyi iptal et setting_reduce_motion: Animasyonlarda hareketi azalt setting_show_application: Tootları göndermek için kullanılan uygulamayı belirt @@ -197,12 +198,12 @@ tr: severity: Kural notification_emails: digest: Özet e-postaları gönder - favourite: Birisi durumunuzu beğendi + favourite: Birisi gönderinizi beğendi follow: Biri seni takip etti follow_request: Biri seni takip etmek istedi - mention: Biri senden bahsetti + mention: Birisi senden bahsetti pending_account: Yeni hesabın incelenmesi gerekiyor - reblog: Biri durumunuzu boostladı + reblog: Birisi gönderini boostladı report: Yeni rapor gönderildi trending_tag: İncelenmemiş bir etiket gündem oluyor rule: diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index 2153d6091..2ff7bd0b3 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -36,6 +36,7 @@ uk: current_username: Для підтвердження, будь ласка, введіть ім'я користувача поточного облікового запису digest: Буде послано тільки після довгого періоду неактивності, та тільки якщо ви отримаєте персональне повідомлення у цей період discoverable: Ще один шлях, за яким про вас можуть дізнатися користувачі — каталог профілів + discoverable_no_directory: Дозволити знаходити ваш обліковий запис стороннім людям за допомогою рекомендацій та інших можливостей email: Вам надійде електронний лист з підтвердженням fields: До 4 елементів може бути відображено як таблиця у вашому профілі header: PNG, GIF, або JPG. Максимум - %{size}. Буде зменшено до %{dimensions}px diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index a934cc174..d85de10ea 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -36,6 +36,7 @@ vi: current_username: Để xác nhận, vui lòng nhập tên người dùng của tài khoản hiện tại digest: Chỉ gửi sau một thời gian dài không hoạt động hoặc khi bạn nhận được tin nhắn (trong thời gian vắng mặt) discoverable: Cho phép tài khoản của bạn xuất hiện trong gợi ý theo dõi và những tính năng khác + discoverable_no_directory: Cho phép mọi người tìm thấy tài khoản của bạn thông qua gợi ý theo dõi và các tính năng khác email: Bạn sẽ được gửi một email xác nhận fields: Được phép tạo tối đa 4 mục trên trang cá nhân của bạn header: PNG, GIF hoặc JPG. Kích cỡ tối đa %{size}. Sẽ bị nén xuống %{dimensions}px @@ -55,7 +56,7 @@ vi: setting_noindex: Ảnh hưởng đến trang cá nhân và tút của bạn setting_show_application: Tên ứng dụng bạn dùng để đăng tút sẽ hiện trong chi tiết bài đăng setting_use_blurhash: Lớp phủ mờ dựa trên màu sắc của hình ảnh nhạy cảm - setting_use_pending_items: Dồn lại toàn bộ tút mới và chỉ hiển thị khi nào nhấp chuột vào + setting_use_pending_items: Dồn lại toàn bộ tút mới và chỉ hiển thị khi nhấp chuột vào username: Tên người dùng của bạn sẽ là duy nhất trên %{domain} whole_word: Khi từ khóa hoặc cụm từ là chữ và số, nó sẽ chỉ hiện ra những từ chính xác như vậy domain_allow: @@ -187,7 +188,7 @@ vi: invite: comment: Bình luận invite_request: - text: Tại sao bạn muốn tham gia? + text: Vì sao bạn muốn tham gia? ip_block: comment: Mô tả ip: IP diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index d9c990de2..b578b331c 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -36,6 +36,7 @@ zh-CN: current_username: 请输入当前账号的用户名以确认 digest: 仅在你长时间未登录,且收到了私信时发送 discoverable: 用户目录能够让你的帐号广为人知 + discoverable_no_directory: 允许别人通过推荐和其他途径发现你的账户 email: 我们会向你发送一封确认邮件 fields: 这将会在个人资料页上以表格的形式展示,最多 4 个项目 header: 文件大小限制 %{size},只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 %{dimensions}px @@ -74,7 +75,7 @@ zh-CN: ip_block: comment: 可选。请记住为什么你添加了此规则。 expires_in: IP 地址是一种有限的资源,它们有时是共享的,并且常常变化。因此,不推荐无限期的 IP 封禁。 - ip: 输入 IPv4 或 IPv6 地址。你可以使用CIDR语法屏蔽IP段。小心不要屏蔽自己! + ip: 输入 IPv4 或 IPv6 地址。你可以使用 CIDR 语法屏蔽 IP 段。小心不要屏蔽自己! severities: no_access: 阻止访问所有资源 sign_up_requires_approval: 新注册需要你的批准 @@ -145,7 +146,7 @@ zh-CN: otp_attempt: 双重认证代码 password: 密码 phrase: 关键词 - setting_advanced_layout: 启用高级web界面 + setting_advanced_layout: 启用高级 Web 界面 setting_aggregate_reblogs: 在时间轴中合并转嘟 setting_auto_play_gif: 自动播放 GIF 动画 setting_boost_modal: 在转嘟前询问我 diff --git a/config/locales/simple_form.zh-HK.yml b/config/locales/simple_form.zh-HK.yml index c9359bfd0..2f65e5213 100644 --- a/config/locales/simple_form.zh-HK.yml +++ b/config/locales/simple_form.zh-HK.yml @@ -36,6 +36,7 @@ zh-HK: current_username: 請輸入目前帳戶的使用者名稱以確認 digest: 僅在你長時間未登錄,且收到了私信時發送 discoverable: 個人資料目錄可以讓你的帳號更廣為人知 + discoverable_no_directory: 允許他人通過推薦與其他功能探索你的賬號 email: 你將收到一封確認電郵 fields: 個人資料頁可顯示多至 4 個項目 header: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會縮裁成 %{dimensions}px diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index b815f42c7..8b4440013 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -23,7 +23,10 @@ zh-TW: warning_preset_id: 選用。您仍可在預設的結尾新增自訂文字 announcement: all_day: 核取後,只會顯示出時間範圍中的日期部分 + ends_at: 可選的,公告會在該時間點自動取消發布 scheduled_at: 空白則立即發布公告 + starts_at: 可選的,讓公告在特定時間範圍內顯示 + text: 您可以使用嘟文語法,但請小心別讓公告太鴨霸而佔據使用者的整個版面。 defaults: autofollow: 通過邀請網址註冊的使用者將自動關注你 avatar: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會等比例縮減成 %{dimensions} 像素 @@ -33,6 +36,7 @@ zh-TW: current_username: 請輸入目前帳戶的使用者名稱以確認 digest: 僅在你長時間未登入且在未登入期間收到私訊時傳送 discoverable: 加入個人資料目錄能接觸更多閱聽眾 + discoverable_no_directory: 允許陌生人透過推薦與其他功能探索您的帳號 email: 您將收到一封確認電子郵件 fields: 您可在個人資料上有至多 4 個以表格形式顯示的項目 header: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會按比例縮小成 %{dimensions} 像素 @@ -51,8 +55,15 @@ zh-TW: setting_hide_network: 你關注的人與關注你的人將不會在你的個人資料頁上顯示 setting_noindex: 會影響您的公開個人資料與嘟文頁面 setting_show_application: 您用來發嘟文的應用程式將會在您嘟文的詳細檢視顯示 + setting_use_blurhash: 漸層圖樣是基於隱藏媒體內容顏色產生,所有細節會變得模糊 + setting_use_pending_items: 關閉自動捲動更新,時間軸只會在點擊後更新 username: 您的使用者名稱將在 %{domain} 是獨一無二的 whole_word: 如果關鍵字或詞組僅有字母與數字,則其將只在符合整個單字的時候才會套用 + domain_allow: + domain: 此域名將能夠攫取本站資料,而自域名該發出的資料也會於本站處理和留存。 + email_domain_block: + domain: 這裡可以是電子郵件地址中的域名、域名解析到的 MX 記錄、或 MX 記錄解析到的伺服器 IP 地址。新使用者註冊時會比對上述資料,如果相符時將拒絕相關註冊。 + with_dns_records: Mastodon 會嘗試解析所給域名的 DNS 記錄,解析結果一致者將一併封鎖 featured_tag: name: 您可能想使用其中一個: form_challenge: @@ -61,10 +72,19 @@ zh-TW: data: 從其他 Mastodon 伺服器匯出的 CSV 檔案 invite_request: text: 這會協助我們審核您的應用程式 + ip_block: + comment: 可選的,但請記得您為何添加這項規則。 + expires_in: IP 位址是經常共用或轉手的有限資源,不建議無限期地封鎖特定 IP 位址。 + ip: 請輸入 IPv4 或 IPv6 位址,亦可以用 CIDR 語法以封鎖整個 IP 區段。小心不要把自己給一併封鎖掉囉! + severities: + no_access: 封鎖對所有資源存取 + sign_up_requires_approval: 新註冊申請需要先經過您的審核 + severity: 請選擇將如何處理來自這個 IP 位址的請求 rule: text: 說明使用者在此伺服器上需遵守的規則或條款。試著維持各項條款簡短而明瞭。 sessions: otp: 請輸入產生自您手機 App 的兩步驟驗證碼,或輸入其中一個復原代碼: + webauthn: 如果它是 USB 安全金鑰的話,請確認已正確插入,如有需要請觸擊。 tag: name: 您只能變更大小寫,例如,以使其更易讀。 user: @@ -74,6 +94,10 @@ zh-TW: fields: name: 標籤 value: 內容 + account_alias: + acct: 舊帳號名稱 + account_migration: + acct: 新帳號名稱 account_warning_preset: text: 預設文字 title: 標題 @@ -111,6 +135,7 @@ zh-TW: expires_in: 失效時間 fields: 個人資料中繼資料 header: 頁面頂端 + honeypot: "%{label} (請勿填寫)" inbox_url: 中繼收件匣的 URL irreversible: 放棄而非隱藏 locale: 介面語言 @@ -125,6 +150,7 @@ zh-TW: setting_aggregate_reblogs: 時間軸中的群組轉嘟 setting_auto_play_gif: 自動播放 GIF 動畫 setting_boost_modal: 在轉嘟前先詢問我 + setting_crop_images: 將未展開嘟文中的圖片裁剪至 16x9 setting_default_language: 嘟文語言 setting_default_privacy: 嘟文可見範圍 setting_default_sensitive: 總是將媒體標記為敏感內容 @@ -179,6 +205,7 @@ zh-TW: pending_account: 需要審核的新帳戶 reblog: 當有使用者轉嘟你的嘟文時,傳送電子信件通知 report: 當提交新檢舉時傳送電子郵件 + trending_tag: 未經審核的標籤正在炎上中 rule: text: 規則 tag: @@ -189,6 +216,7 @@ zh-TW: 'no': 否 recommended: 建議 required: + mark: "*" text: 必須填寫 title: sessions: diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 51c856b4d..0be6d3bfa 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -25,6 +25,7 @@ sk: Je využívaný pre potreby federovania a nemal by byť blokovaný, pokiaľ nechceš zablokovať celý server, čo ide lepšie dosiahnúť cez blokovanie domény. learn_more: Zisti viac privacy_policy: Zásady súkromia + rules: Serverové pravidlá see_whats_happening: Pozoruj, čo sa deje server_stats: 'Serverové štatistiky:' source_code: Zdrojový kód @@ -43,6 +44,8 @@ sk: rejecting_media_title: Triedené médiá silenced: 'Príspevky z týchto serverov budú skryté z verejných osí a z konverzácií, a nebudú vytvorené žiadné oboznámena ohľadom aktivity ich užívateľov, pokiaľ ich nenásleduješ:' silenced_title: Utíšené servery + suspended: 'Z týchto serverov nebudú spracovávané, ukladané, alebo vymieňané žiadne dáta, čo urobí nemožnou akúkoľvek interakciu, alebo komunikáciu s užívateľmi z týchto serverov:' + suspended_title: Vylúčené servery unavailable_content_html: Vo všeobecnosti, Mastodon ti dovoľuje vidieť obsah, a komunikovať s užívateľmi akéhokoľvek iného serveru v rámci fediversa. Toto sú výnimky, ktoré boli vytvorené na tomto konkrétnom serveri. user_count_after: few: užívateľov @@ -113,6 +116,7 @@ sk: confirm: Potvrď confirmed: Potvrdený confirming: Potvrdzujúci + delete: Vymaž dáta deleted: Vymazané demote: Degraduj disable: Zablokuj @@ -128,6 +132,7 @@ sk: follows: Sledovania header: Záhlavie inbox_url: URL adresa prijatých správ + invite_request_text: Dôvody pre prijatie invited_by: Pozvaný/á užívateľom ip: IP adresa joined: Pridal/a sa @@ -179,6 +184,10 @@ sk: search: Hľadaj search_same_email_domain: Iní užívatelia s tou istou emailovou doménou search_same_ip: Ostatní užívatelia s rovnakou IP adresou + security_measures: + only_password: Iba heslo + password_and_2fa: Heslo a dvoj-faktorové overovanie + sensitized: Označený ako chúlostivý shared_inbox_url: URL zdieľanej schránky show: created_reports: Vytvorené hlásenia @@ -195,6 +204,7 @@ sk: undo_suspension: Zruš blokovanie unsubscribe: Prestaň odoberať username: Prezývka + view_domain: Ukáž súhrn pre doménu warn: Varuj whitelisted: Na bielej listine action_logs: @@ -205,21 +215,39 @@ sk: create_account_warning: Vytvor výstrahu create_announcement: Vytvor oboznámenie create_domain_allow: Vytvor povolenie pre doménu - create_domain_block: Vytvor doménovú blokádu + create_domain_block: Vytvor zákaz domény + create_email_domain_block: Vytvor zákaz emailovej domény + create_ip_block: Vytvor IP pravidlo demote_user: Zniž užívateľskú rolu destroy_announcement: Vymaž oboznámenie destroy_domain_allow: Zmaž povolenie pre doménu destroy_domain_block: Zruš blokovanie domény + destroy_ip_block: Vymaž IP pravidlo destroy_status: Vymaž príspevok + destroy_unavailable_domain: Vymaž nedostupnú doménu disable_2fa_user: Vypni dvoj-faktorové overovanie + disable_custom_emoji: Vypni vlastné emotikony disable_user: Deaktivuj užívateľa + enable_custom_emoji: Povoľ vlastné emotikony enable_user: Povoľ užívateľa + promote_user: Povýš užívateľskú rolu remove_avatar_user: Vymaž avatar reopen_report: Znovu otvor hlásenie reset_password_user: Obnov heslo + resolve_report: Vyrieš nahlásený problém + sensitive_account: Vynúť všetky médiá na účte ako chúlostivé silence_account: Utíš účet suspend_account: Vylúč účet + unsilence_account: Zvráť obmedzenie účtu + unsuspend_account: Odblokuj účet + update_announcement: Aktualizuj oboznámenie + update_domain_block: Aktualizuj zákaz domény update_status: Aktualizuj stav + actions: + assigned_to_self_report_html: "%{name} pridelil/a hlásenie užívateľa %{target} sebe" + change_email_user_html: "%{name} zmenil/a emailovú adresu užívateľa %{target}" + confirm_user_html: "%{name} potvrdil/a emailovú adresu používateľa %{target}" + create_account_warning_html: "%{name} poslal/a upozornenie užívateľovi %{target}" deleted_status: "(zmazaný príspevok)" filter_by_action: Filtruj podľa úkonu filter_by_user: Trieď podľa užívateľa @@ -233,6 +261,7 @@ sk: new: create: Vytvor oznam title: Nové oznámenie + publish: Zverejni published_msg: Oboznámenie úspešne zverejnené! scheduled_for: Načasované na %{time} scheduled_msg: Oboznámenie bolo naplánované na zverejnenie! @@ -270,32 +299,9 @@ sk: updated_msg: Emoji bolo úspešne aktualizované! upload: Nahraj dashboard: - authorized_fetch_mode: Autorizovaný režim - backlog: odložené aktivity - config: Nastavenia - feature_deletions: Vymazanie účtov - feature_invites: Pozvánky - feature_profile_directory: Katalóg profilov - feature_registrations: Registrácie - feature_relay: Federovací mostík - feature_timeline_preview: Náhľad časovej osi - features: Vymoženosti - hidden_service: Federácia so skrytými službami - open_reports: otvorené hlásenia - pending_tags: haštagy čakajúce na posúdenie - pending_users: užívatelia čakajúci na posúdenie - recent_users: Nedávni užívatelia - search: Celofrázové vyhľadávanie - single_user_mode: Jednouživateľské rozhranie software: Softvér space: Využitie miesta title: Spravovacie rozhranie - total_users: užívateľov celkovo - trends: Trendy - week_interactions: Tohto-týždňové interakcie - week_users_active: aktívni tento týždeň - week_users_new: užívateľov počas tohto týždňa - whitelist_mode: Režim povolených domain_allows: add_new: Povolená doména created_msg: Doména bola úspešne povolená @@ -317,6 +323,7 @@ sk: silence: Stíš suspend: Vylúč title: Nové blokovanie domény + obfuscate: Zatemniť názov domény private_comment: Súkromný komentár private_comment_hint: Odôvodni toto doménové obmedzenie, pre vnútorné vyrozumenie moderátorov. public_comment: Verejný komentár @@ -354,8 +361,22 @@ sk: create: Pridaj doménu title: Nový email na zablokovanie title: Blokované emailové adresy + follow_recommendations: + description_html: "Odporúčania na sledovanie pomáhaju novým užívateľom rýchlo nájsť zaujímavý obsah. Ak užívateľ zatiaľ nedostatočne interagoval s ostatnými aby si vyformoval personalizované odporúčania na sledovanie, tak mu budú odporúčané tieto účty. Sú prepočítavané na dennej báze z mixu účtov s nedávnym najvyšším záujmom a najvyšším počtom lokálnych sledujúcich pre daný jazyk." + language: Pre jazyk + status: Stav + suppress: Utlmiť oporúčanie na sledovanie + suppressed: Utlmené + title: Odporáčania na sledovanie + unsuppress: Obnoviť odporúčanie na sledovanie instances: + back_to_all: Všetko + back_to_limited: Obmedzené + back_to_warning: Upozornenie by_domain: Doména + delivery: + all: Všetko + warning: Upozornenie delivery_available: Je v dosahu doručovania known_accounts: few: "%{count} známych účtov" @@ -382,6 +403,18 @@ sk: expired: Vypršalo title: Filtruj title: Pozvánky + ip_blocks: + add_new: Vytvor pravidlo + delete: Vymaž + expires_in: + '1209600': 2 týždne + '15778476': 6 mesiacov + '2629746': 1 mesiac + '31556952': 1 rok + '86400': 1 deň + '94670856': 3 roky + new: + title: Vytvor nové IP pravidlo pending_accounts: title: Čakajúcich účtov (%{count}) relationships: @@ -444,7 +477,7 @@ sk: desc_html: Sčítanie miestne uverejnených príspevkov, aktívnych užívateľov, a nových registrácii, v týždenných intervaloch title: Vydať hromadné štatistiky o užívateľskej aktivite bootstrap_timeline_accounts: - desc_html: Ak je prezývok viacero, každú oddeľ čiarkou. Je možné zadať iba miestne, odomknuté účty. Pokiaľ necháš prázdne, je to pre všetkých miestnych správcov. + desc_html: Ak je prezývok viacero, každú oddeľ čiarkou. Tieto účty budú zobrazené v odporúčaniach na sledovanie title: Štandardní následovníci nových užívateľov contact_information: email: Pracovný email @@ -472,7 +505,7 @@ sk: desc_html: Domény, na ktoré tento server už v rámci fediversa natrafil title: Zverejni zoznam objavených serverov preview_sensitive_media: - desc_html: Náhľad odkazov z iných serverov, bude zobrazený aj vtedy, keď sú médiá označené ako citlivé + desc_html: Náhľad odkazov z iných serverov, bude zobrazený aj vtedy, keď sú médiá označené ako chúlostivé title: Ukazuj aj chúlostivé médiá v náhľadoch OpenGraph profile_directory: desc_html: Povoľ užívateľom, aby mohli byť nájdení @@ -542,6 +575,10 @@ sk: no_status_selected: Žiadne príspevky neboli zmenené, keďže si žiadne nemal/a zvolené title: Príspevky na účte with_media: S médiami + system_checks: + rules_check: + action: Spravuj serverové pravidlá + message_html: Neurčil/a si žiadne serverové pravidlá. tags: accounts_today: Jedinečných užívateľov za dnešok accounts_week: Jedinečných užívateľov tento týždeň @@ -639,6 +676,7 @@ sk: pending: Tvoja žiadosť čaká na schvílenie od nášho týmu. Môže to chviľu potrvať. Ak bude tvoja žiadosť schválená, dostaneš o tom email. redirecting_to: Tvoj účet je neaktívny, lebo v súčasnosti presmerováva na %{acct}. trouble_logging_in: Problém s prihlásením? + use_security_key: Použi bezpečnostný kľúč authorize_follow: already_following: Tento účet už následuješ error: Naneštastie nastala chyba pri hľadaní vzdialeného účtu @@ -719,6 +757,7 @@ sk: request: Vyžiadaj si tvoj archív size: Veľkosť blocks: Blokujete + bookmarks: Záložky domain_blocks: Blokované domény lists: Zoznamy mutes: Stíšil/a si @@ -783,9 +822,13 @@ sk: inactive: Neaktívne publicize_checkbox: 'A poslať toto:' publicize_toot: 'Je to dokázané! Na %{service} som %{username}: %{url}' + remove: Odstrániť z účtu dôkaz + removed: Dôkaz z účtu úspešne odstránený status: Stav overenia view_proof: Ukáž overenie imports: + errors: + over_rows_processing_limit: obsahuje viac než %{count} riadkov modes: merge: Spoj dohromady merge_long: Ponechaj existujúce záznamy a pridaj k nim nové @@ -795,6 +838,7 @@ sk: success: Tvoje dáta boli nahraté úspešne, a teraz budú spracované v danom čase types: blocking: Zoznam blokovaných + bookmarks: Záložky domain_blocking: Zoznam blokovaných domén following: Zoznam sledovaných muting: Zoznam ignorovaných @@ -827,6 +871,12 @@ sk: lists: errors: limit: Dosiahli ste maximálny možný počet zoznamov + login_activities: + authentication_methods: + password: heslom + sign_in_token: emailovým bezpečtnostným kódom + webauthn: bezpečnostnými kľúčmi + title: História overení media_attachments: validations: images_and_video: K príspevku ktorý už obsahuje obrázky nemôžeš priložiť video @@ -850,6 +900,7 @@ sk: on_cooldown: Účet si si presunul/a len nedávno. Táto vymoženosť bude znovu sprístupnená za %{count} dní. past_migrations: Predošlé presuny proceed_with_move: Presuň sledovateľov + redirected_msg: Tvoj účet teraz presmerováva na %{acct}. redirecting_to: Tvoj účet presmerováva na %{acct}. set_redirect: Nastav presmerovanie warning: @@ -863,6 +914,9 @@ sk: redirect: Tvoj súčastný účet bude aktualizovaný s oznamom o presunutí a bude vylúčený z vyhľadávania moderation: title: Moderovanie + move_handler: + carry_blocks_over_text: Tento užívateľ sa presunul z účtu %{acct}, ktorý si mal/a zablokovaný. + carry_mutes_over_text: Tento užívateľ sa presunul z účtu %{acct}, ktorý si mal/a stíšený. notification_mailer: digest: action: Zobraziť všetky notifikácie @@ -897,10 +951,14 @@ sk: body: "%{name} ťa spomenul/a v:" subject: Bol/a si spomenutý/á užívateľom %{name} title: Novo spomenutý/á + poll: + subject: Anketa od %{name} skončila reblog: body: 'Tvoj príspevok bol vyzdvihnutý užívateľom %{name}:' subject: "%{name} vyzdvihli tvoj príspevok" title: Novo vyzdvyhnuté + status: + subject: "%{name} práve prispel/a" notifications: email_events: Udalosti oznamované emailom email_events_hint: 'Vyber si udalosti, pre ktoré chceš dostávať oboznámenia:' @@ -932,6 +990,7 @@ sk: relationships: activity: Aktivita účtu dormant: Spiace + follow_selected_followers: Následuj označených sledovatelov followers: Následovatelia following: Následovaní invited: Pozvaný/á @@ -1064,7 +1123,7 @@ sk: unlisted_long: Všetci môžu vidieť, ale nieje zaradené do verejnej osi stream_entries: pinned: Pripnutý príspevok - reblogged: vyzdvihnutý + reblogged: vyzdvihli sensitive_content: Senzitívny obsah tags: does_not_match_previous_name: nezhoduje sa s predošlým názvom @@ -1076,7 +1135,7 @@ sk:
      • Základné informácie o účte: Ak sa na tomto serveri zaregistruješ, budeš môcť byť požiadaný/á zadať prezývku, emailovú adresu a heslo. Budeš tiež môcť zadať aj ďalšie profilové údaje, ako napríklad meno a životopis, a nahrať profilovú fotku aj obrázok v záhlaví. Tvoja prezývka, meno, životopis, profilová fotka a obrázok v záhlaví sú vždy zobrazené verejne.
      • Príspevky, sledovania a iné verejné informácie: - Zoznam ľudí, ktorých sleduješ je zobrazený verejne, a to isté platí aj pre zoznam tvojích následovateľov. Keď pošleš správu, ukladá sa jej dátum a čas, ale aj z akej aplikácie bola poslaná. Správy môžu obsahovať mediálne prílohy, ako obrázky a videá. Verejné, a nezaradené príspevky sú verejne prístupné. Keď si pripneš príspevok na svoj profil, toto je tiež verejne dostupnou informáciou. Tvoje príspevky sú takisto doručené tvojím sledovateľom, a to aj v rámci iných serverov, kde je potom uložená kópia tvojho príspevku. Ak vymažeš príspevok, táto akcia bude takisto doručená tvojím sledovateľom. Vyzdvihnutie, alebo obľúbenie iného príspevku je vždy verejne viditeľné.
      • + Zoznam ľudí, ktorých sleduješ je zobrazený verejne, a to isté platí aj pre zoznam tvojích nasledovateľov. Keď pošleš správu, ukladá sa jej dátum a čas, ale aj z akej aplikácie bola poslaná. Správy môžu obsahovať mediálne prílohy, ako obrázky a videá. Verejné, a nezaradené príspevky sú verejne prístupné. Keď si pripneš príspevok na svoj profil, toto je tiež verejne dostupnou informáciou. Tvoje príspevky sú takisto doručené tvojím sledovateľom, a to aj v rámci iných serverov, kde je potom uložená kópia tvojho príspevku. Ak vymažeš príspevok, táto akcia bude takisto doručená tvojím sledovateľom. Vyzdvihnutie, alebo obľúbenie iného príspevku je vždy verejne viditeľné.
      • Priame príspevky, a príspevky určené iba pre sledovateľov: Všetky príspevky sú uložené a spracované na serveri. Príspevky iba pre sledovateľov sú doručené tvojím sledovateľom a užívateľom ktorí sú v nich spomenutí, pričom priame príspevky sú doručené iba tím užívateľom ktorí sú v nich spomenutí. V niektorých prípadoch to môže znamenať, že tieto príspevkz sú doručené aj v rámci iných serverov, a kópie príspevkov sú na nich uložené. V dobrej viere robíme všetko preto, aby bol prístup k tímto príspevkom vymedzený iba pre oprávnených používateľov, ale môže sa stať, že iné servery v tomto ohľade zlyhajú. Preto je dôležité prezrieť si a zhodnotiť, na aké servery patria tvoji následovatelia. V nastaveniach si môžeš zapnúť voľbu ručne povoľovať a odmietať nových následovateľov. @@ -1091,7 +1150,7 @@ sk:

        Hociktorá z informácií, ktoré sú o tebe zozbierané, môže byť použité následujúcimi spôsobmi:

          -
        • Pre zabezpečenie základného fungovania Mastodonu. Narábať s užívateľským obsahom iných, ako aj prispievať svoj vlastný obsah, možeš len keď si prihlásený/á. Môžeš napríklad následovať iných ľudí, aby si potom videl/a ich príspevky v rámci svojej osobne prispôsobenej domácej osi.
        • +
        • Pre zabezpečenie základného fungovania Mastodonu. Narábať s užívateľským obsahom iných, ako aj prispievať svoj vlastný obsah, možeš len keď si prihlásený/á. Môžeš napríklad nasledovať iných ľudí, aby si potom videl/a ich príspevky v rámci svojej osobne prispôsobenej domácej osi.
        • Pre lepšie moderovanie komunity sa napríklad môže tvoja IP adresa porovnať s ostatnými už známimi adresami, aby bolo možné zistiť, či nedochádza napríklad k obchádzaniu pravidiel vylúčenia, aleb k iným porušeniam zásad.
        • Emailová adresa, ktorú poskytneš, môže byť použitá na zasielanie informácií, oboznámení keď ostatní užívatelia interaktujú s tvojím obsahom, alebo na posielanie správ, odpovedí na otázky a iné požiadavky.
        @@ -1161,6 +1220,7 @@ sk: otp_lost_help_html: Pokiaľ si stratil/a prístup k obom, môžeš dať vedieť %{email} seamless_external_login: Si prihlásená/ý cez externú službu, takže nastavenia hesla a emailu ti niesú prístupné. signed_in_as: 'Prihlásená/ý ako:' + suspicious_sign_in_confirmation: Vyzerá to, že si sa predtým z tohto zariadenia ešte neprihlasoval/a, takže ti na tvoju emailovú adresu pošleme bezpečnostný kód, aby sa potvrdilo, že si to ty. verification: explanation_html: 'Môžeš sa overiť ako majiteľ odkazov v metadátach tvojho profilu. Na to ale musí odkazovaná stránka obsahovať odkaz späť na tvoj Mastodon profil. Tento spätný odkaz musí mať prívlastok rel="me". Na texte odkazu nezáleží. Tu je príklad:' verification: Overenie diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 8d9e6d8e5..05420b18c 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -211,28 +211,9 @@ sl: updated_msg: Emotikon je uspešno posodobljen! upload: Pošlji dashboard: - backlog: zaostala opravila - config: Nastavitve - feature_deletions: Brisanje računov - feature_invites: Povezave povabil - feature_profile_directory: Imenik profilov - feature_registrations: Registracije - feature_relay: Rele federacije - feature_timeline_preview: Predogled časovnice - features: Zmožnosti - hidden_service: Federacija s skritimi storitvami - open_reports: odprte prijave - recent_users: Nedavni uporabniki - search: Iskanje po celotnem besedilu - single_user_mode: Način enega uporabnika software: Programska oprema space: Uporaba prostora title: Nadzorna plošča - total_users: skupaj uporabnikov - trends: Trendi - week_interactions: interakcije ta teden - week_users_active: aktivni ta teden - week_users_new: uporabniki ta teden domain_allows: add_new: Dodaj domeno na beli seznam created_msg: Domena je bila uspešno dodana na beli seznam diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 76e3a1d30..5c7e9c3fe 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -119,6 +119,7 @@ sq: demote: Zhgradoje destroyed_msg: Të dhënat e %{username} tani janë vënë në radhë për fshirje të menjëhershme disable: Çaktivizoje + disable_sign_in_token_auth: Çaktivizo mirëfilltësim me token email-i disable_two_factor_authentication: Çaktivizoni 2FA-në disabled: E çaktivizuar display_name: Emër në ekran @@ -127,6 +128,7 @@ sq: email: Email email_status: Gjendje email-i enable: Shkrije + enable_sign_in_token_auth: Aktivizo mirëfilltësim me token email-i enabled: E aktivizuar enabled_msg: U hoq me sukses ngrirja për llogarinë e %{username} followers: Ndjekës @@ -191,6 +193,10 @@ sq: search: Kërkoni search_same_email_domain: Të tjerë përdorues me të njëjtën përkatësi email-i search_same_ip: Të tjerë përdorues me të njëjtën IP + security_measures: + only_password: Vetëm fjalëkalim + password_and_2fa: Fjalëkalim dhe 2FA + password_and_sign_in_token: Fjalëkalim dhe token email-i sensitive: Rezervat sensitized: iu vu shenjë si rezervat shared_inbox_url: URL kutie të përbashkët mesazhesh @@ -230,6 +236,7 @@ sq: create_domain_block: Krijo Bllokim Përkatësie create_email_domain_block: Krijo Bllokim Përkatësie Email-esh create_ip_block: Krijoni Rregull IP + create_unavailable_domain: Krijo Përkatësi të Papërdorshme demote_user: Zhgradoje Përdoruesin destroy_announcement: Fshije Lajmërimin destroy_custom_emoji: Fshi Emotikon Vetjak @@ -238,10 +245,13 @@ sq: destroy_email_domain_block: Fshi bllokim përkatësie email-esh destroy_ip_block: Fshini Rregull IP destroy_status: Fshi Gjendje + destroy_unavailable_domain: Fshi Përkatësi të Papërdorshme disable_2fa_user: Çaktivizo 2FA-në disable_custom_emoji: Çaktivizo Emotikon Vetjak + disable_sign_in_token_auth_user: Çaktivizo Mirëfilltësim me Token Email-i për Përdoruesin disable_user: Çaktivizo Përdorues enable_custom_emoji: Aktivizo Emotikon Vetjak + enable_sign_in_token_auth_user: Aktivizo Mirëfilltësim me Token Email-i për Përdoruesin enable_user: Aktivizo Përdorues memorialize_account: Bëje Llogari Përkujtimore promote_user: Promovojeni Përdoruesin @@ -283,8 +293,10 @@ sq: destroy_unavailable_domain_html: "%{name} rinisi dërgimin drejt përkatësisë %{target}" disable_2fa_user_html: "%{name} çaktivizoi domosdoshmërinë për dyfaktorësh për përdoruesin %{target}" disable_custom_emoji_html: "%{name} çaktivizoi emoxhin %{target}" + disable_sign_in_token_auth_user_html: "%{name} çaktivizo mirëfilltësim me token email-i për %{target}" disable_user_html: "%{name} çaktivizoi hyrje për përdoruesin %{target}" enable_custom_emoji_html: "%{name} aktivizoi emoxhin %{target}" + enable_sign_in_token_auth_user_html: "%{name} aktivizo mirëfilltësim me token email-i përdoruesi për %{target}" enable_user_html: "%{name} aktivizoi hyrje për përdoruesin %{target}" memorialize_account_html: "%{name} e shndërroi llogarinë e %{target} në një faqe përkujtimore" promote_user_html: "%{name} gradoi përdoruesin %{target}" @@ -359,32 +371,19 @@ sq: updated_msg: Emoji u përditësua me sukses! upload: Ngarkoje dashboard: - authorized_fetch_mode: Mënyrë e sigurt - backlog: punë të prapambetura - config: Formësim - feature_deletions: Fshirje llogarish - feature_invites: Lidhje ftesash - feature_profile_directory: Drejtori profilesh - feature_registrations: Regjistrime - feature_relay: Rele federimi - feature_timeline_preview: Paraparje rrjedhjeje kohore - features: Veçori - hidden_service: Federim me shërbime të fshehura - open_reports: raportime të hapur - pending_tags: hashtag-ë në pritje të shqyrtimit - pending_users: përdorues në pritje për rishikim - recent_users: Përdorues së fundi - search: Kërko tekstin e plotë - single_user_mode: Mënyrë me përdorues të vetëm + active_users: përdorues aktivë + interactions: ndërveprime + media_storage: Depozitë media + new_users: përdorues të rinj + opened_reports: raportime të hapur + resolved_reports: raportime të zgjidhur software: Software + sources: Burime regjistrimi space: Përdorim hapësire title: Pult - total_users: përdorues gjithsej - trends: Tendenca - week_interactions: ndërveprime këtë javë - week_users_active: aktivë këtë javë - week_users_new: përdorues këtë javë - whitelist_mode: Mënyrë liste lejimesh + top_languages: Gjuhët aktive kryesuese + top_servers: Shërbyesit aktivë kryesues + website: Sajt domain_allows: add_new: Shtoje përkatësinë në listë lejimesh created_msg: Përkatësia u shtua me sukses në listë lejimesh @@ -463,6 +462,8 @@ sq: restart: Rinis dërgimin stop: Ndale dërgimin title: Dërgim + unavailable: Jo i passhëm + unavailable_message: Dërgim jo i passhëm warning: Kujdes warning_message: one: Dështim dërgimi %{count} ditë @@ -565,6 +566,7 @@ sq: resolved: I zgjidhur resolved_msg: Raportimi u zgjidh me sukses! status: Gjendje + target_origin: Origjinë e llogarisë së raportuar title: Raportime unassign: Hiqja unresolved: Të pazgjidhur @@ -1000,6 +1002,17 @@ sq: lists: errors: limit: Keni mbërritur në numrin maksimum të sasisë së listave + login_activities: + authentication_methods: + otp: aplikacion mirëfilltësimi dyfaktorësh + password: fjalëkalim + sign_in_token: kod sigurie përmes email-i + webauthn: kyçe sigurie + description_html: Nëse shihni veprimtari që nuk e njihni, shihni mundësinë e ndryshimit të fjalëkalimit tuaj dhe të aktivizimit të mirëfilltësimit dyfaktorësh. + empty: S’ka historik mirëfilltësimesh + failed_sign_in_html: Dështoi përpjekje hyrjeje me %{method} nga %{ip} (%{browser}) + successful_sign_in_html: Hyrje e suksesshme me %{method} nga %{ip} (%{browser}) + title: Historik mirëfilltësimesh media_attachments: validations: images_and_video: S’mund të bashkëngjitet video te një gjendje që përmban figura tashmë @@ -1206,6 +1219,7 @@ sq: revoke: Shfuqizoje revoke_success: Sesioni u shfuqizua me sukses title: Sesione + view_authentication_history: Shihni historik mirëfilltësimesh të llogarisë tuaj settings: account: Llogari account_settings: Rregullime llogarie @@ -1226,6 +1240,7 @@ sq: preferences: Parapëlqime profile: Profil relationships: Ndjekje dhe ndjekës + statuses_cleanup: Fshirje e automatizuar postimesh two_factor_authentication: Mirëfilltësim Dyfaktorësh webauthn_authentication: Kyçe sigurie statuses: @@ -1277,6 +1292,40 @@ sq: public_long: Mund ta shohë kushdo unlisted: Jo në listë unlisted_long: Mund ta shohë gjithkush, por s’gjendet në rrjedha publike kohore + statuses_cleanup: + enabled: Fshi automatikisht postime të vjetra + enabled_hint: Fshin automatikisht postimet tuaja, pasi mbërrijnë një prag të caktuar moshe, hiq rastin kur ka përputhje me një nga përjashtimet më poshtë + exceptions: Përjashtime + explanation: Ngaqë fshirja e postimeve është një veprim i shtrenjtë, kjo bëhet ngadalë, gjatë kohës kur shërbyesi s’është i zënë. Për këtë arsye, postimet tuaja mund të fshihen pas ca kohësh pasi të ketë mbërritur pragun e moshës për to. + ignore_favs: Shpërfilli të parapëlqyerit + ignore_reblogs: Shpërfilli përforcimet + interaction_exceptions: Përjashtime bazuar në ndërveprime + interaction_exceptions_explanation: Kini parasysh se nuk ka garanci se postimet do të fshihen, nëse kalojnë nën pragun për të parapëlqyerat ose përforcimet, pasi kanë kaluar një herë në to. + keep_direct: Mbaj mesazhet e drejtpërdrejtë + keep_direct_hint: S’fshihet ndonjë nga mesazhet tuaj të drejtpërdrejtë + keep_media: Mbaj postime me bashkëngjitje media + keep_media_hint: S’fshihet ndonjë nga postimet tuaj që kanë bashkëngjitje media + keep_pinned: Mbaj postimet e fiksuara + keep_pinned_hint: S’fshihet ndonjë nga postimet tuaj të fiksuara + keep_polls: Mbaj pyetësorë + keep_polls_hint: S’fshihet ndonjë nga pyetësorët tuaj + keep_self_bookmark: Mbaj postime që keni faqeruajtur + keep_self_bookmark_hint: S’fshihen postimet tuaja, nëse i keni faqeruajtur + keep_self_fav: Mbaji postimet që keni parapëlqyer + keep_self_fav_hint: Nuk fshihen postimet tuaja, nëse i keni parapëlqyer + min_age: + '1209600': 2 javë + '15778476': 6 muaj + '2629746': 1 muaj + '31556952': 1 vit + '5259492': 2 muaj + '63113904': 2 vjet + '7889238': 3 muaj + min_age_label: Prag moshe + min_favs: Mbaji postimet e parapëlqyera më shumë se + min_favs_hint: Nuk fshihet ndonjë nga postimet tuaja që kanë marrë më shumë se sa ky numër parapëlqimesh. Lëreni të zbrazët për të fshirë postimet, pavarësisht të numrit të parapëlqimeve për to + min_reblogs: Mbaji postimet e përforcuara më shumë se + min_reblogs_hint: Nuk fshihet ndonjë nga postimet tuaja që kanë marrë më shumë se sa ky numër përforcimesh. Lëreni të zbrazët për të fshirë postimet, pavarësisht të numrit të përforcimeve për to stream_entries: pinned: Mesazh i fiksuar reblogged: të përforcuara diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 8f7639cda..b6c92976a 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -6,6 +6,7 @@ sr: about_this: О инстанци administered_by: 'Администрирано од стране:' apps: Мобилне апликације + browse_directory: Прегледајте директоријум налога и филтрирајте према интересовањима contact: Контакт contact_missing: Није постављено documentation: Документација @@ -54,6 +55,7 @@ sr: admin: Администратор bot: Бот moderator: Модератор + unavailable: Налог је недоступан unfollow: Отпрати admin: account_actions: @@ -120,7 +122,7 @@ sr: protocol: Протокол public: Јавно push_subscription_expires: PuSH претплата истиче - redownload: Освежи профил + redownload: Освежи налог remove_avatar: Уклони аватар remove_header: Одстрани заглавље resend_confirmation: @@ -183,27 +185,9 @@ sr: updated_msg: Емоџи успешно ажуриран! upload: Отпреми dashboard: - backlog: Позадински записи - config: Конфигурација - feature_deletions: Брисање налога - feature_invites: Позивнице - feature_profile_directory: Фасцикла профила - feature_registrations: Регистрација - feature_relay: Федеративни релеј - features: Карактеристике - hidden_service: Федерација са скривеним услугама - open_reports: отворене пријаве - recent_users: Недавни корисници - search: Потпуна претрага текста - single_user_mode: Појединачни корисник software: Софтвер space: Коришћење простора title: Командна табла - total_users: укупан број корисника - trends: Трендови - week_interactions: интеракције ове недеље - week_users_active: активно ове недеље - week_users_new: корисника ове недеље domain_blocks: add_new: Додај нови блок домена created_msg: Блокирање домена се обрађује @@ -213,7 +197,7 @@ sr: create: Направи блокаду hint: Блокирање домена неће спречити прављење налога у бази, али ће ретроактивно и аутоматски применити одређене модераторске методе над тим налозима. severity: - desc_html: "Ућуткавање ће све статусе овог налога учинити невидљивим за све, осим за оне који већ прате налог. Суспензија ће уклонити сав садржај налога, сву мултимедију, и профилне податке. Користите Ништа само ако желите да одбаците мултимедијалне фајлове." + desc_html: "Ућуткавање ће све статусе овог налога учинити невидљивим за све, осим за оне који их већ прате. Суспензија ће уклонити сав садржај налога, сву мултимедију и податке налога. Користите Ништа само ако желите да одбаците мултимедијалне фајлове." noop: Ништа silence: Ућуткавање suspend: Суспензија @@ -343,7 +327,7 @@ sr: title: Покажи осетљив медиј у ОпенГраф прегледу profile_directory: desc_html: Дозволи корисницима да буду откривени - title: Омогући профил фасцикле + title: Омогући директоријум налога registrations: closed_message: desc_html: Приказује се на главној страни када је инстанца затворена за регистрације. Можете користити HTML тагове @@ -410,7 +394,7 @@ sr: notification_preferences: Промени преференце Е-поште settings: 'Промени подешавања е-поште: %{link}' view: 'Погледај:' - view_profile: Погледај профил + view_profile: Погледај налог view_status: Погледај статус applications: created: Апликација успешно направљена @@ -448,7 +432,7 @@ sr: following: 'Сјајно! Сада пратите:' post_follow: close: Или можете затворити овај прозор. - return: Врати се на профил овог корисника + return: Врати се на налог овог корисника web: Иди на веб title: Запрати %{acct} datetime: @@ -466,7 +450,7 @@ sr: proceed: Обриши налог success_msg: Ваш налог је успешно обрисан directories: - directory: Профил фасцикле + directory: Директоријум налога explanation: Откријте кориснике на основу њихових интереса explore_mastodon: Истражи %{title} errors: @@ -603,6 +587,8 @@ sr: body: "%{name} Вам је подржао/ла статус:" subject: "%{name} је подржао/ла Ваш статус" title: Нова подршка + notifications: + email_events_hint: 'Изаберите дешавања за која желите да примате обавештења:' pagination: newer: Новије next: Следеће @@ -673,12 +659,14 @@ sr: back: Назад на Мастодон delete: Брисање налога development: Развој - edit_profile: Измена профила + edit_profile: Измена налога export: Извоз података import: Увоз migrate: Пребацивање налога notifications: Обавештења preferences: Подешавања + profile: Налог + relationships: Праћења и пратиоци two_factor_authentication: Двофакторска идентификација statuses: attached: @@ -755,8 +743,8 @@ sr: silence: Налог ограничен suspend: Налог суспендован welcome: - edit_profile_action: Подеси профил - edit_profile_step: Профил можете прилагодити постављањем аватара, заглавља, променом имена и још много тога. Ако желите да прегледате нове пратиоце пре него што буду дозвољени да вас прате, можете закључати свој налог. + edit_profile_action: Подеси налог + edit_profile_step: Налог можете прилагодити постављањем аватара, заглавља, променом имена и још много тога. Ако желите да прегледате нове пратиоце пре него што буду дозвољени да вас прате, можете закључати свој налог. explanation: Ево неколико савета за почетак final_action: Почните објављивати final_step: 'Почните објављивати! Чак и без пратиоца ваше јавне поруке ће бити виђене од стране других, нпр. на локалној јавног линији и у тараба за означавање. Можда бисте желели да се представите у #увод тараби за означавање.' @@ -778,5 +766,5 @@ sr: seamless_external_login: Пријављени сте путем спољашње услуге, тако да лозинка и подешавања Е-поште нису доступни. signed_in_as: 'Пријављен/а као:' verification: - explanation_html: 'Можете извршити проверу да сте Ви власник веза у Вашем профилу. Да би то радило, повезани веб сајт мора да садржи везу назад ка Вашем Мастодон профилу. Веза назад мора да има rel="me" атрибут. Текстуелни садржај везе није битан. Ево примера:' + explanation_html: 'Можете извршити проверу да сте Ви власник веза на Вашем налогу. Да би то радило, повезани веб сајт мора да садржи везу назад ка Вашем Мастодон налогу. Веза назад мора да има rel="me" атрибут. Текстуелни садржај везе није битан. Ево примера:' verification: Провера diff --git a/config/locales/sv.yml b/config/locales/sv.yml index c00d1915c..44c794833 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -179,6 +179,9 @@ sv: search: Sök search_same_email_domain: Andra användare med samma e-postdomän search_same_ip: Annan användare med samma IP-adress + security_measures: + only_password: Endast lösenord + password_and_2fa: Lösenord och 2FA sensitive: Känsligt sensitized: markerad som känsligt shared_inbox_url: Delad inkorg URL @@ -197,6 +200,7 @@ sv: undo_suspension: Ångra avstängning unsubscribe: Avsluta prenumeration username: Användarnamn + view_domain: Visa sammanfattning för domän warn: Varna web: Webb whitelisted: Vitlistad @@ -211,6 +215,7 @@ sv: create_domain_allow: Skapa tillåten domän create_domain_block: Skapa blockerad domän create_ip_block: Skapa IP-regel + create_unavailable_domain: Skapa otillgänglig domän demote_user: Degradera användare destroy_announcement: Ta bort anslag destroy_custom_emoji: Radera egen emoji @@ -218,6 +223,7 @@ sv: destroy_domain_block: Ta bort blockerad domän destroy_ip_block: Radera IP-regel destroy_status: Ta bort status + destroy_unavailable_domain: Ta bort otillgänglig domän disable_2fa_user: Inaktivera 2FA disable_custom_emoji: Inaktivera egna emojis disable_user: Inaktivera användare @@ -237,15 +243,55 @@ sv: update_custom_emoji: Uppdatera egna emojis update_domain_block: Uppdatera blockerad domän update_status: Uppdatera status + actions: + create_account_warning_html: "%{name} skickade en varning till %{target}" + create_announcement_html: "%{name} skapade tillkännagivande %{target}" + create_custom_emoji_html: "%{name} laddade upp ny emoji %{target}" + destroy_custom_emoji_html: "%{name} förstörde emoji %{target}" + destroy_domain_block_html: "%{name} avblockerade domänen %{target}" + destroy_email_domain_block_html: "%{name} avblockerade e-postdomän %{target}" + destroy_ip_block_html: "%{name} tog bort regel för IP %{target}" + destroy_status_html: "%{name} tog bort inlägget av %{target}" + disable_custom_emoji_html: "%{name} inaktiverade emoji %{target}" + disable_user_html: "%{name} stängde av inloggning för användaren %{target}" + enable_custom_emoji_html: "%{name} aktiverade emoji %{target}" + enable_user_html: "%{name} aktiverade inloggning för användaren %{target}" + memorialize_account_html: "%{name} gjorde %{target}'s konto till en minnessida" + promote_user_html: "%{name} befordrade användaren %{target}" + remove_avatar_user_html: "%{name} tog bort %{target}'s avatar" + reopen_report_html: "%{name} öppnade rapporten igen %{target}" + reset_password_user_html: "%{name} återställ användarens lösenord %{target}" + resolve_report_html: "%{name} löste rapporten %{target}" + sensitive_account_html: "%{name} markerade %{target}'s media som känsligt" + silence_account_html: "%{name} begränsade %{target}'s konto" + suspend_account_html: "%{name} stängde av %{target}'s konto" + unsensitive_account_html: "%{name} avmarkerade %{target}'s media som känsligt" + unsuspend_account_html: "%{name} tog bort avstängningen av %{target}'s konto" + update_announcement_html: "%{name} uppdaterade tillkännagivandet %{target}" + update_custom_emoji_html: "%{name} uppdaterade emoji %{target}" + update_domain_block_html: "%{name} uppdaterade domän-block för %{target}" + update_status_html: "%{name} uppdaterade inlägget av %{target}" deleted_status: "(raderad status)" empty: Inga loggar hittades. filter_by_action: Filtrera efter åtgärd filter_by_user: Filtrera efter användare title: Revisionslogg announcements: + destroyed_msg: Borttagning av tillkännagivandet lyckades! + edit: + title: Redigera tillkännagivande + empty: Inga tillkännagivanden hittades. live: Direkt + new: + create: Skapa tillkännagivande + title: Nytt tillkännagivande publish: Publicera + published_msg: Publiceringen av tillkännagivandet lyckades! scheduled_for: Schemalagd för %{time} + scheduled_msg: Tillkännagivandet schemalades för publicering! + title: Tillkännagivanden + unpublish: Avpublicera + updated_msg: Uppdatering av tillkännagivandet lyckades! custom_emojis: assign_category: Tilldela kategori by_domain: Domän @@ -280,32 +326,9 @@ sv: updated_msg: Emoji uppdaterades utan problem! upload: Ladda upp dashboard: - authorized_fetch_mode: Säkert läge - backlog: återstående jobb - config: Konfiguration - feature_deletions: Kontoraderingar - feature_invites: Inbjudningslänkar - feature_profile_directory: Profilkatalog - feature_registrations: Registreringar - feature_relay: Förbundsmöte - feature_timeline_preview: Förhandsgranskning av tidslinje - features: Funktioner - hidden_service: Sammanslutning med gömda tjänster - open_reports: öppna rapporter - pending_tags: hashtags som inväntar granskning - pending_users: användare som inväntar granskning - recent_users: Senaste användare - search: Fulltextsökning - single_user_mode: Enanvändarläge software: Programvara space: Utrymmesutnyttjande / Utrymmesanvändning title: Kontrollpanel - total_users: totalt antal användare - trends: Trender - week_interactions: kommunikation denna vecka / interaktioner denna vecka - week_users_active: aktiv(a) denna vecka - week_users_new: användare denna vecka - whitelist_mode: Vitlisteläge domain_allows: add_new: Vitlistedomän created_msg: Domänen har vitlistats @@ -334,6 +357,10 @@ sv: public_comment: Offentlig kommentar reject_media: Avvisa mediafiler reject_media_hint: Raderar lokalt lagrade mediefiler och förhindrar möjligheten att ladda ner något i framtiden. Irrelevant för suspensioner + reject_reports: Avvisa rapporter + reject_reports_hint: Ignorera alla rapporter som kommer från den här domänen. Gäller inte för avstängningar + rejecting_media: avvisar media-filer + rejecting_reports: avvisar rapporter severity: silence: tystad suspend: avstängd @@ -347,6 +374,7 @@ sv: title: Ångra domänblockering för %{domain} undo: Ångra undo: Ångra + view: Visa domänblock email_domain_blocks: add_new: Lägg till ny created_msg: E-postdomän har lagts till i domänblockslistan utan problem @@ -360,16 +388,28 @@ sv: title: Ny E-postdomänblocklistningsinmatning title: E-postdomänblock follow_recommendations: + language: För språket status: Status + title: Följ rekommendationer instances: back_to_all: Alla + back_to_limited: Begränsat back_to_warning: Varning by_domain: Domän delivery: all: Alla + clear: Rensa leverans-fel + restart: Starta om leverans + stop: Stoppa leverans + title: Leverans unavailable: Ej tillgänglig + unavailable_message: Leverans otillgängligt warning: Varning + delivery_available: Leverans är tillgängligt empty: Inga domäner hittades. + known_accounts: + one: "%{count} känt konto" + other: "%{count} kända konton" moderation: all: Alla limited: Begränsad @@ -380,6 +420,8 @@ sv: total_blocked_by_us: Blockerad av oss total_followed_by_them: Följs av dem total_followed_by_us: Följs av oss + total_reported: Rapporter om dem + total_storage: Media-bilagor invites: deactivate_all: Inaktivera alla filter: @@ -390,6 +432,7 @@ sv: title: Inbjudningar ip_blocks: add_new: Skapa regel + created_msg: Ny IP-regel lades framgångsrikt till delete: Radera expires_in: '1209600': 2 veckor @@ -400,10 +443,14 @@ sv: '94670856': 3 år new: title: Skapa ny IP-regel + no_ip_block_selected: Inga IP-regler ändrades då inga var valda title: IP-regler pending_accounts: title: Väntande konton (%{count}) + relationships: + title: "%{acct}'s relationer" relays: + add_new: Lägg till nytt relä delete: Radera disable: Inaktivera disabled: Inaktiverad @@ -411,12 +458,17 @@ sv: enable_hint: När den är aktiverad kommer din server att prenumerera på alla publika toots från detta relay, och kommer att börja skicka serverns publika toots till den. enabled: Aktivera save_and_enable: Spara och aktivera + setup: Konfigurera en relä-anslutning status: Status + title: Relä report_notes: created_msg: Anmälningsanteckning har skapats! destroyed_msg: Anmälningsanteckning har raderats! reports: account: + notes: + one: "%{count} anteckning" + other: "%{count} anteckningar" reports: one: "%{count} rapport" other: "%{count} rapporter" @@ -444,6 +496,8 @@ sv: reported_by: Anmäld av resolved: Löst resolved_msg: Anmälan har lösts framgångsrikt! + status: Status + target_origin: Ursprung för anmält konto title: Anmälningar unassign: Otilldela unresolved: Olösta @@ -484,6 +538,11 @@ sv: peers_api_enabled: desc_html: Domännamn denna instans har påträffat i fediverse title: Publicera lista över upptäckta instanser + preview_sensitive_media: + title: Visa känsligt media i OpenGraph-förhandsvisningar + profile_directory: + desc_html: Tillåt användare att upptäckas + title: Aktivera profil-mapp registrations: closed_message: desc_html: Visas på framsidan när registreringen är stängd. Du kan använda HTML-taggar @@ -497,6 +556,12 @@ sv: require_invite_text: desc_html: När nyregistrering kräver manuellt godkännande, gör det obligatoriskt att fylla i text i fältet "Varför vill du gå med?" title: Kräv att nya användare fyller i en inbjudningsförfrågan + registrations_mode: + modes: + approved: Godkännande krävs för registrering + none: Ingen kan registrera + open: Alla kan registrera + title: Registreringsläge show_known_fediverse_at_about_page: desc_html: När den växlas, kommer toots från hela fediverse visas på förhandsvisning. Annars visas bara lokala toots. title: Visa det kända fediverse på tidslinjens förhandsgranskning @@ -509,6 +574,8 @@ sv: site_description_extended: desc_html: Ett bra ställe för din uppförandekod, regler, riktlinjer och andra saker som stämmer med din instans. Du kan använda HTML-taggar title: Egentillverkad utökad information + site_short_description: + title: Kort beskrivning av servern site_terms: desc_html: Du kan skriva din egen integritetspolicy, användarvillkor eller andra regler. Du kan använda HTML-taggar title: Egentillverkad villkor för tjänster @@ -532,14 +599,23 @@ sv: nsfw_on: Markera som känslig deleted: Raderad failed_to_execute: Misslyckades att utföra + media: + title: Media no_media: Ingen media title: Kontostatus with_media: med media + system_checks: + rules_check: + action: Hantera serverregler + message_html: Du har inte definierat några serverregler. tags: accounts_today: Unika användare idag accounts_week: Unika användare den här veckan last_active: Senast aktiv + most_popular: Mest populära + most_recent: Nyligen skapade name: Hashtag + reviewed: Granskad title: Hashtaggar trending_right_now: Trenderar just nu unreviewed: Ej granskad @@ -582,14 +658,17 @@ sv: auth: apply_for_account: Be om en inbjudan change_password: Lösenord + checkbox_agreement_html: Jag accepterar serverreglerna och villkoren för användning delete_account: Radera konto delete_account_html: Om du vill radera ditt konto kan du fortsätta här. Du kommer att bli ombedd att bekräfta. description: prefix_invited_by_user: "@%{name} bjuder in dig att gå med i en Mastodon-server!" prefix_sign_up: Registrera dig på Mastodon idag! didnt_get_confirmation: Fick du inte instruktioner om bekräftelse? + dont_have_your_security_key: Har du inte din säkerhetsnyckel? forgot_password: Glömt ditt lösenord? invalid_reset_password_token: Lösenordsåterställningstoken är ogiltig eller utgått. Vänligen be om en ny. + link_to_otp: Ange en tvåfaktor-kod från din telefon eller en återställningskod login: Logga in logout: Logga ut migrate_account: Flytta till ett annat konto @@ -599,6 +678,7 @@ sv: cas: CAS saml: SAML register: Registrera + registration_closed: "%{instance} accepterar inte nya medlemmar" resend_confirmation: Skicka instruktionerna om bekräftelse igen reset_password: Återställ lösenord security: Säkerhet @@ -609,6 +689,8 @@ sv: account_status: Kontostatus redirecting_to: Ditt konto är inaktivt eftersom det för närvarande dirigeras om till %{acct}. too_fast: Formuläret har skickats för snabbt, försök igen. + trouble_logging_in: Har du problem med att logga in? + use_security_key: Använd säkerhetsnyckel authorize_follow: already_following: Du följer redan detta konto already_requested: Du har redan skickat en vänförfrågan till det kontot @@ -623,12 +705,17 @@ sv: title: Följ %{acct} challenge: confirm: Fortsätt + hint_html: "Tips: Vi frågar dig inte efter ditt lösenord igen under nästkommande timme." invalid_password: Ogiltigt lösenord prompt: Bekräfta lösenord för att fortsätta crypto: errors: invalid_key: är inte en giltig Ed25519 eller Curve25519 nyckel invalid_signature: är inte en giltig Ed25519 signatur + date: + formats: + default: "%b %d, %Y" + with_month_name: "%B %d, %Y" datetime: distance_in_words: about_x_hours: "%{count}tim" @@ -639,17 +726,24 @@ sv: less_than_x_minutes: "%{count}min" less_than_x_seconds: Just nu over_x_years: "%{count}år" + x_days: "%{count}d" x_minutes: "%{count}min" x_months: "%{count}mån" x_seconds: "%{count}sek" deletes: + challenge_not_passed: Informationen som du angav var inte korrekt confirm_password: Ange ditt lösenord för att verifiera din identitet + confirm_username: Fyll i ditt användarnamn för att bekräfta proceduren proceed: Radera konto success_msg: Ditt konto har raderats warning: email_change_html: Du kan ändra din e-postadress utan att radera ditt konto irreversible: Du kan inte återställa eller återaktivera ditt konto + username_available: Ditt användarnamn kommer att bli tillgängligt igen + username_unavailable: Ditt användarnamn kommer att fortsätta vara otillgängligt directories: + directory: Profil-mapp + explanation: Upptäck användare baserat på deras intressen explore_mastodon: Utforska %{title} domain_validator: invalid_domain: är inte ett giltigt domännamn @@ -657,7 +751,7 @@ sv: '400': The request you submitted was invalid or malformed. '403': Du har inte behörighet att visa den här sidan. '404': Sidan du letade efter existerar inte. - '406': This page is not available in the requested format. + '406': Den här sidan är inte tillgänglig i det förfrågade formatet. '410': Sidan du letade efter existerar inte längre. '422': content: Säkerhetsverifiering misslyckades Blockerar du cookies? @@ -668,6 +762,8 @@ sv: title: Den här sidan är inte korrekt '503': The page could not be served due to a temporary server failure. noscript_html: För att använda Mastodon webbapplikationen, vänligen aktivera JavaScript. Alternativt kan du prova en av inhemska appar för Mastodon för din plattform. + existing_username_validator: + not_found_multiple: kunde inte hitta %{usernames} exports: archive_takeout: date: Datum @@ -679,6 +775,7 @@ sv: blocks: Du blockerar bookmarks: Bokmärken csv: CSV + domain_blocks: Domän-blockeringar lists: Listor mutes: Du tystar storage: Medialagring @@ -687,7 +784,9 @@ sv: filters: contexts: account: Profiler + home: Hem och listor notifications: Aviseringar + public: Publika tidslinjer thread: Konversationer edit: title: Redigera filter @@ -714,12 +813,23 @@ sv: other: Något är inte riktigt rätt ännu! Kontrollera dom %{count} felen nedan identity_proofs: active: Aktiv + authorize: Ja, autentisera + authorize_connection_prompt: Autentisera den här kryptografiska anslutningen? + errors: + failed: Den kryptografiska anslutningen misslyckades. Vänligen försök igen från %{provider}. i_am_html: Jag är %{username} på %{service}. identity: Identitet inactive: Inaktiv + publicize_checkbox: 'Och tuta det här:' + publicize_toot: 'Det är bevisat! Jag är %{username} på %{service}: %{url}' + remove: Ta bort bevis från konto + status: Bekräftelse-status + view_proof: Visa bevis imports: errors: over_rows_processing_limit: innehåller fler än %{count} rader + modes: + overwrite: Skriv över preface: Du kan importera data som du exporterat från en annan instans, till exempel en lista över personer du följer eller blockerar. success: Dina uppgifter har laddats upp och kommer nu att behandlas snarast types: @@ -754,18 +864,45 @@ sv: lists: errors: limit: Du har nått det maximala antalet listor + login_activities: + authentication_methods: + password: lösenord + webauthn: säkerhetsnycklar + description_html: Om du ser aktivitet som du inte känner igen, överväg att byta ditt lösenord och aktivera tvåfaktor-autentisering. media_attachments: validations: images_and_video: Det går inte att bifoga en video till en status som redan innehåller bilder too_many: Det går inte att bifoga mer än 4 filer migrations: acct: användarnamn@domän av det nya kontot + cancel: Avbryt omdirigering cancel_explanation: Avstängning av omdirigeringen kommer att återaktivera ditt nuvarande konto, men kommer inte att återskapa följare som har flyttats till det kontot. + errors: + already_moved: är samma konto som du redan har flyttat till + missing_also_known_as: är inte ett alias för det här kontot + move_to_self: kan inte vara nuvarande konto + not_found: kunde inte hittas + on_cooldown: Du är på nerkylning incoming_migrations: Flyttar från ett annat konto + incoming_migrations_html: För att flytta från ett annat konto till det här så behöver du först skapa ett konto-alias. + moved_msg: Ditt konto omdirigerar nu till %{acct} och dina följare flyttas över. + not_redirecting: Ditt konto omdirigerar inte till något annat konto för tillfället. + on_cooldown: Du har nyss migrerat ditt konto. Den här funktionen kommer att vara tillgänglig igen om %{count} dagar. + past_migrations: Föregående migreringar proceed_with_move: Flytta följare redirected_msg: Ditt konto dirigeras om till %{acct}. + redirecting_to: Ditt konto omdirigerar till %{acct}. + set_redirect: Konfigurera omdirigering + warning: + before: 'Vänligen läs dessa anteckningar noggrant innan du fortsätter:' + followers: Den här åtgärden kommer att flytta alla följare från det nuvarande kontot till det nya kontot + other_data: Ingen annan data kommer att flyttas automatiskt moderation: title: Moderera + move_handler: + carry_blocks_over_text: Den här användaren flyttades från %{acct} som du hade blockerat. + carry_mutes_over_text: Den här användaren flyttade från %{acct} som du hade tystat. + copy_account_note_text: 'Den här användaren flyttade från %{acct}, här var dina föregående anteckningar om dem:' notification_mailer: digest: action: Visa alla aviseringar @@ -796,6 +933,8 @@ sv: body: 'Du nämndes av %{name} in:' subject: Du nämndes av %{name} title: Ny omnämning + poll: + subject: En undersökning av %{name} har avslutats reblog: body: 'Din status knuffades av %{name}:' subject: "%{name} knuffade din status" @@ -803,9 +942,22 @@ sv: status: subject: "%{name} publicerade nyss" notifications: + email_events: Händelser för e-postaviseringar + email_events_hint: 'Välj händelser som du vill ta emot aviseringar för:' other_settings: Andra aviseringsinställningar + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T otp_authentication: enable: Aktivera + setup: Konfigurera pagination: newer: Nyare next: Nästa @@ -814,16 +966,35 @@ sv: truncate: "…" polls: errors: + already_voted: Du har redan röstat på den här undersökningen + duration_too_long: är för långt in i framtiden + duration_too_short: är för tidigt + expired: Undersökningen har redan avslutats invalid_choice: Det valda röstalternativet finns inte + too_few_options: måste ha mer än ett objekt + too_many_options: kan inte innehålla mer än %{max} objekt preferences: other: Annat + public_timelines: Publika tidslinjer + reactions: + errors: + unrecognized_emoji: är inte en igenkänd emoji relationships: activity: Kontoaktivitet + dormant: Vilande follow_selected_followers: Följ valda personer followers: Följare following: Följer invited: Inbjuden last_active: Senast aktiv + most_recent: Senaste + moved: Flyttad + mutual: Ömsesidig + primary: Primära + relationship: Samband + remove_selected_domains: Ta bort alla följare från de valda domänerna + remove_selected_followers: Ta bort valda följare + remove_selected_follows: Sluta följ valda användare status: Kontostatus remote_follow: acct: Ange ditt användarnamn@domän du vill följa från @@ -832,6 +1003,13 @@ sv: proceed: Fortsätt för att följa prompt: 'Du kommer att följa:' reason_html: "Varför är det här steget nödvändigt? %{instance} är kanske inte den server du är registrerad vid, så vi behöver dirigera dig till din hemserver först." + remote_interaction: + favourite: + proceed: Fortsätt till favorit + prompt: 'Du vill favorit-markera det här inlägget:' + reply: + proceed: Fortsätt till svar + prompt: 'Du vill svara på det här inlägget:' sessions: activity: Senaste aktivitet browser: Webbläsare @@ -844,12 +1022,19 @@ sv: firefox: Firefox generic: Okänd browser ie: Internet Explorer + micro_messenger: MicroMessenger opera: Opera + otter: Otter + phantom_js: PhantomJS safari: Safari + uc_browser: UCBrowser + weibo: Weibo current_session: Nuvarande session description: "%{browser} på %{platform}" explanation: Detta är inloggade webbläsare på Mastodon just nu. + ip: IP platforms: + adobe_air: Adobe Air android: Android blackberry: Blackberry chrome_os: Chrome OS @@ -859,6 +1044,8 @@ sv: mac: Mac other: okänd plattform windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone revoke: Återkalla revoke_success: Sessionen återkallas framgångsrikt title: Sessioner @@ -873,20 +1060,29 @@ sv: development: Utveckling edit_profile: Redigera profil export: Exportera data + identity_proofs: Identifiera bevisen + import: Importera import_and_export: Import och export migrate: Kontoflytt notifications: Aviseringar preferences: Inställningar profile: Profil relationships: Följer och följare + statuses_cleanup: Automatisk borttagning av inlägg two_factor_authentication: Tvåfaktorsautentisering webauthn_authentication: Säkerhetsnycklar statuses: attached: + audio: + one: "%{count} ljud" + other: "%{count} ljud" description: 'Bifogad: %{attached}' image: one: "%{count} bild" other: "%{count} bilder" + video: + one: "%{count} video" + other: "%{count} videor" boosted_from_html: Boosted från %{acct_link} content_warning: 'Innehållsvarning: %{warning}' disallowed_hashtags: @@ -911,20 +1107,49 @@ sv: other: "%{count} röster" vote: Rösta show_more: Visa mer + show_newer: Visa nyare + show_older: Visa äldre show_thread: Visa tråd sign_in_to_participate: Logga in för att delta i konversationen title: '%{name}: "%{quote}"' visibilities: + direct: Direkt private: Endast följare private_long: Visa endast till följare public: Offentlig public_long: Alla kan se unlisted: Olistade unlisted_long: Alla kan se, men listas inte på offentliga tidslinjer + statuses_cleanup: + enabled: Ta automatiskt bort gamla inlägg + exceptions: Undantag + ignore_favs: Bortse från favoriter + keep_direct: Behåll direktmeddelanden + keep_direct_hint: Tar inte bort någon av dina direktmeddelanden + keep_media: Behåll inlägg med media-bilagor + keep_media_hint: Tar inte bort någon av dina inlägg som har media-bilagor + keep_pinned: Behåll fästade inlägg + keep_pinned_hint: Tar inte bort någon av dina fästade inlägg + keep_polls: Behåll undersökningar + keep_polls_hint: Tar inte bort någon av dina undersökningar + keep_self_bookmark: Behåller inlägg som du har bokmärkt + keep_self_bookmark_hint: Tar inte bort dina egna inlägg om du har bokmärkt dem + keep_self_fav: Behåll inlägg som du har favorit-märkt + min_age: + '1209600': 2 veckor + '15778476': 6 månader + '2629746': 1 månad + '31556952': 1 år + '5259492': 2 månader + '63113904': 2 år + '7889238': 3 månader + min_age_label: Åldersgräns stream_entries: pinned: Fäst toot reblogged: boostad sensitive_content: Känsligt innehåll + tags: + does_not_match_previous_name: matchar inte det föregående namnet terms: body_html: |

        Integritetspolicy

        @@ -1012,6 +1237,10 @@ sv: contrast: Hög kontrast default: Mastodon mastodon-light: Mastodon (ljust) + time: + formats: + default: "%b %d, %Y, %H:%M" + month: "%b %Y" two_factor_authentication: add: Lägg till disable: Inaktivera @@ -1020,6 +1249,8 @@ sv: enabled_success: Tvåfaktorsautentisering aktiverad generate_recovery_codes: Generera återställningskoder lost_recovery_codes: Återställningskoder tillåter dig att få tillgång till ditt konto om du förlorar din telefon. Om du har förlorat dina återställningskoder kan du regenerera dem här. Dina gamla återställningskoder kommer att ogiltigförklaras. + methods: Två-faktormetoder + otp: Autentiseringsapp recovery_codes: Backup återställningskod recovery_codes_regenerated: Återställningskoder genererades på nytt recovery_instructions_html: Om du någonsin tappar åtkomst till din telefon kan du använda någon av återställningskoderna nedan för att återställa åtkomst till ditt konto. Håll återställningskoderna säkra . Du kan till exempel skriva ut dem och lagra dem med andra viktiga dokument. @@ -1029,9 +1260,23 @@ sv: explanation: Du begärde en fullständig säkerhetskopiering av ditt Mastodon-konto. Det är nu klart för nedladdning! subject: Ditt arkiv är klart för nedladdning title: Arkivuttagning + sign_in_token: + details: 'Här är detaljerna för försöket:' + further_actions: 'Om det inte var du, vänligen ändra ditt lösenord och aktivera tvåfaktor-autentisering i ditt konto. Du kan göra det här:' + title: Inloggningsförsök warning: + statuses: 'Specifikt för:' + subject: + disable: Ditt konto %{acct} har blivit fruset + none: Varning för %{acct} + silence: Ditt konto %{acct} har blivit begränsat + suspend: Ditt konto %{acct} har stängts av title: + disable: Kontot fruset none: Varning + sensitive: Ditt media har blivit markerat som känsligt + silence: Kontot begränsat + suspend: Kontot avstängt welcome: edit_profile_action: Profilinställning edit_profile_step: Du kan anpassa din profil genom att ladda upp en avatar, bakgrundsbild, ändra ditt visningsnamn och mer. Om du vill granska nya följare innan de får följa dig kan du låsa ditt konto. @@ -1047,13 +1292,18 @@ sv: tip_following: Du följer din servers administratör(er) som standard. För att hitta fler intressanta personer, kolla de lokala och förenade tidslinjerna. tip_local_timeline: Den lokala tidslinjen är en störtflodsvy av personer på %{instance}. Det här är dina närmaste grannar! tip_mobile_webapp: Om din mobila webbläsare erbjuder dig att lägga till Mastodon på din hemskärm kan du få push-aviseringar. Det fungerar som en inbyggd app på många sätt! + tips: Tips title: Välkommen ombord, %{name}! users: follow_limit_reached: Du kan inte följa fler än %{limit} personer + generic_access_help_html: Har du problem med att komma åt ditt konto? Du kan komma i kontakt med %{email} för assistans invalid_otp_token: Ogiltig tvåfaktorskod + invalid_sign_in_token: Ogiltig säkerhetskod otp_lost_help_html: Om du förlorat åtkomst till båda kan du komma i kontakt med %{email} seamless_external_login: Du är inloggad via en extern tjänst, så lösenord och e-postinställningar är inte tillgängliga. signed_in_as: 'Inloggad som:' + verification: + verification: Bekräftelse webauthn_credentials: add: Lägg till ny säkerhetsnyckel delete: Radera diff --git a/config/locales/ta.yml b/config/locales/ta.yml index a382bf6f7..5c220a1af 100644 --- a/config/locales/ta.yml +++ b/config/locales/ta.yml @@ -225,12 +225,6 @@ ta: unlist: பட்டியலில் இருந்து அகற்றுக unlisted: பட்டியலிடப்படாத upload: பதிவேற்றம் - dashboard: - feature_registrations: பதிவுகள் - features: அம்சங்கள் - recent_users: அண்மை பயனாளர்கள் - total_users: மொத்த பயனாளர் தொகை - trends: போக்குகள் domain_blocks: new: severity: diff --git a/config/locales/th.yml b/config/locales/th.yml index 89a553c46..8ef8cfda4 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1,11 +1,11 @@ --- th: about: - about_hashtag_html: มีการแท็กโพสต์สาธารณะเหล่านี้ด้วย #%{hashtag} คุณสามารถโต้ตอบกับโพสต์หากคุณมีบัญชีที่ใดก็ตามในเฟดิเวิร์ส + about_hashtag_html: มีการแท็กโพสต์สาธารณะเหล่านี้ด้วย #%{hashtag} คุณสามารถโต้ตอบกับโพสต์ได้หากคุณมีบัญชีที่ใดก็ตามในเฟดิเวิร์ส about_mastodon_html: 'เครือข่ายสังคมแห่งอนาคต: ไม่มีโฆษณา ไม่มีการสอดแนมโดยองค์กร การออกแบบตามหลักจริยธรรม และการกระจายศูนย์! เป็นเจ้าของข้อมูลของคุณด้วย Mastodon!' about_this: เกี่ยวกับ active_count_after: ใช้งานอยู่ - active_footnote: ผู้ใช้งานรายเดือน (MAU) + active_footnote: ผู้ใช้ที่ใช้งานอยู่รายเดือน (MAU) administered_by: 'ดูแลโดย:' api: API apps: แอปมือถือ @@ -39,7 +39,7 @@ th: rejecting_media: 'จะไม่ประมวลผลหรือจัดเก็บไฟล์สื่อจากเซิร์ฟเวอร์เหล่านี้ และจะไม่แสดงภาพขนาดย่อ ต้องมีการคลิกไปยังไฟล์ต้นฉบับด้วยตนเอง:' rejecting_media_title: สื่อที่กรองอยู่ silenced: 'จะซ่อนโพสต์จากเซิร์ฟเวอร์เหล่านี้ในเส้นเวลาสาธารณะและการสนทนา และจะไม่สร้างการแจ้งเตือนจากการโต้ตอบของผู้ใช้ เว้นแต่คุณกำลังติดตามผู้ใช้:' - silenced_title: เซิร์ฟเวอร์ที่เงียบอยู่ + silenced_title: เซิร์ฟเวอร์ที่จำกัดอยู่ suspended: 'จะไม่ประมวลผล จัดเก็บ หรือแลกเปลี่ยนข้อมูลจากเซิร์ฟเวอร์เหล่านี้ ทำให้การโต้ตอบหรือการสื่อสารใด ๆ กับผู้ใช้จากเซิร์ฟเวอร์เหล่านี้เป็นไปไม่ได้:' suspended_title: เซิร์ฟเวอร์ที่ระงับอยู่ user_count_after: @@ -71,7 +71,7 @@ th: bot: บอต group: กลุ่ม moderator: ผู้ควบคุม - unavailable: ไม่มีโปรไฟล์ + unavailable: โปรไฟล์ไม่พร้อมใช้งาน unfollow: เลิกติดตาม admin: account_actions: @@ -104,6 +104,7 @@ th: deleted: ลบแล้ว demote: ลดขั้น disable: อายัด + disable_sign_in_token_auth: ปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมล disable_two_factor_authentication: ปิดใช้งาน 2FA disabled: อายัดอยู่ display_name: ชื่อที่แสดง @@ -112,6 +113,7 @@ th: email: อีเมล email_status: สถานะอีเมล enable: เลิกอายัด + enable_sign_in_token_auth: เปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมล enabled: เปิดใช้งานอยู่ enabled_msg: เลิกอายัดบัญชีของ %{username} สำเร็จ followers: ผู้ติดตาม @@ -136,13 +138,13 @@ th: active: ใช้งานอยู่ all: ทั้งหมด pending: รอดำเนินการ - silenced: เงียบอยู่ + silenced: จำกัดอยู่ suspended: ระงับอยู่ title: การควบคุม moderation_notes: หมายเหตุการควบคุม most_recent_activity: กิจกรรมล่าสุด most_recent_ip: IP ล่าสุด - no_limits_imposed: ไม่มีขีดจำกัดที่กำหนด + no_limits_imposed: ไม่ได้กำหนดขีดจำกัด not_subscribed: ไม่ได้บอกรับ pending: การตรวจทานที่รอดำเนินการ perform_full_suspension: ระงับ @@ -151,6 +153,7 @@ th: public: สาธารณะ push_subscription_expires: การบอกรับ PuSH หมดอายุเมื่อ redownload: รีเฟรชโปรไฟล์ + redownloaded_msg: รีเฟรชโปรไฟล์ของ %{username} จากจุดเริ่มต้นสำเร็จ reject: ปฏิเสธ reject_all: ปฏิเสธทั้งหมด rejected_msg: ปฏิเสธใบสมัครลงทะเบียนของ %{username} สำเร็จ @@ -160,7 +163,7 @@ th: removed_header_msg: เอาภาพส่วนหัวของ %{username} ออกสำเร็จ resend_confirmation: already_confirmed: ผู้ใช้นี้ได้รับการยืนยันอยู่แล้ว - send: ส่งอีเมลยืนยันอีกครั้ง + send: ส่งอีเมลยืนยันใหม่ success: ส่งอีเมลยืนยันสำเร็จ! reset_password: ตั้งรหัสผ่านใหม่ resubscribe: บอกรับใหม่ @@ -173,7 +176,11 @@ th: search: ค้นหา search_same_email_domain: ผู้ใช้อื่น ๆ ที่มีโดเมนอีเมลเดียวกัน search_same_ip: ผู้ใช้อื่น ๆ ที่มี IP เดียวกัน - sensitive: ละเอียดอ่อน + security_measures: + only_password: รหัสผ่านเท่านั้น + password_and_2fa: รหัสผ่านและ 2FA + password_and_sign_in_token: รหัสผ่านและโทเคนอีเมล + sensitive: บังคับให้ละเอียดอ่อน sensitized: ทำเครื่องหมายว่าละเอียดอ่อนแล้ว shared_inbox_url: URL กล่องขาเข้าที่แบ่งปัน show: @@ -187,13 +194,14 @@ th: time_in_queue: กำลังรออยู่ในคิว %{time} title: บัญชี unconfirmed_email: อีเมลที่ยังไม่ได้ยืนยัน - undo_sensitized: เลิกทำการละเอียดอ่อน - undo_silenced: เลิกทำการทำให้เงียบ + undo_sensitized: เลิกทำการบังคับให้ละเอียดอ่อน + undo_silenced: เลิกทำการจำกัด undo_suspension: เลิกทำการระงับ unsilenced_msg: เลิกจำกัดบัญชีของ %{username} สำเร็จ unsubscribe: เลิกบอกรับ unsuspended_msg: เลิกระงับบัญชีของ %{username} สำเร็จ username: ชื่อผู้ใช้ + view_domain: ดูข้อมูลสรุปสำหรับโดเมน warn: เตือน web: เว็บ whitelisted: อนุญาตการติดต่อกับภายนอกแล้ว @@ -209,6 +217,7 @@ th: create_domain_block: สร้างการปิดกั้นโดเมน create_email_domain_block: สร้างการปิดกั้นโดเมนอีเมล create_ip_block: สร้างกฎ IP + create_unavailable_domain: สร้างโดเมนที่ไม่พร้อมใช้งาน demote_user: ลดขั้นผู้ใช้ destroy_announcement: ลบประกาศ destroy_custom_emoji: ลบอีโมจิที่กำหนดเอง @@ -217,10 +226,13 @@ th: destroy_email_domain_block: ลบการปิดกั้นโดเมนอีเมล destroy_ip_block: ลบกฎ IP destroy_status: ลบโพสต์ + destroy_unavailable_domain: ลบโดเมนที่ไม่พร้อมใช้งาน disable_2fa_user: ปิดใช้งาน 2FA disable_custom_emoji: ปิดใช้งานอีโมจิที่กำหนดเอง + disable_sign_in_token_auth_user: ปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมลสำหรับผู้ใช้ disable_user: ปิดใช้งานผู้ใช้ enable_custom_emoji: เปิดใช้งานอีโมจิที่กำหนดเอง + enable_sign_in_token_auth_user: เปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมลสำหรับผู้ใช้ enable_user: เปิดใช้งานผู้ใช้ memorialize_account: ทำให้บัญชีเป็นอนุสรณ์ promote_user: เลื่อนขั้นผู้ใช้ @@ -228,12 +240,12 @@ th: reopen_report: เปิดรายงานใหม่ reset_password_user: ตั้งรหัสผ่านใหม่ resolve_report: แก้ปัญหารายงาน - sensitive_account: ทำเครื่องหมายสื่อในบัญชีของคุณว่าละเอียดอ่อน - silence_account: ทำให้บัญชีเงียบ + sensitive_account: บังคับให้บัญชีละเอียดอ่อน + silence_account: จำกัดบัญชี suspend_account: ระงับบัญชี unassigned_report: เลิกมอบหมายรายงาน - unsensitive_account: เลิกทำเครื่องหมายสื่อในบัญชีของคุณว่าละเอียดอ่อน - unsilence_account: เลิกทำให้บัญชีเงียบ + unsensitive_account: เลิกทำการบังคับให้บัญชีละเอียดอ่อน + unsilence_account: เลิกทำการจำกัดบัญชี unsuspend_account: เลิกระงับบัญชี update_announcement: อัปเดตประกาศ update_custom_emoji: อัปเดตอีโมจิที่กำหนดเอง @@ -250,6 +262,7 @@ th: create_domain_block_html: "%{name} ได้ปิดกั้นโดเมน %{target}" create_email_domain_block_html: "%{name} ได้ปิดกั้นโดเมนอีเมล %{target}" create_ip_block_html: "%{name} ได้สร้างกฎสำหรับ IP %{target}" + create_unavailable_domain_html: "%{name} ได้หยุดการจัดส่งไปยังโดเมน %{target}" demote_user_html: "%{name} ได้ลดขั้นผู้ใช้ %{target}" destroy_announcement_html: "%{name} ได้ลบประกาศ %{target}" destroy_custom_emoji_html: "%{name} ได้ทำลายอีโมจิ %{target}" @@ -260,8 +273,10 @@ th: destroy_status_html: "%{name} ได้เอาโพสต์โดย %{target} ออก" disable_2fa_user_html: "%{name} ได้ปิดใช้งานความต้องการสองปัจจัยสำหรับผู้ใช้ %{target}" disable_custom_emoji_html: "%{name} ได้ปิดใช้งานอีโมจิ %{target}" + disable_sign_in_token_auth_user_html: "%{name} ได้ปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมลสำหรับ %{target}" disable_user_html: "%{name} ได้ปิดใช้งานการเข้าสู่ระบบสำหรับผู้ใช้ %{target}" enable_custom_emoji_html: "%{name} ได้เปิดใช้งานอีโมจิ %{target}" + enable_sign_in_token_auth_user_html: "%{name} ได้เปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมลสำหรับ %{target}" enable_user_html: "%{name} ได้เปิดใช้งานการเข้าสู่ระบบสำหรับผู้ใช้ %{target}" memorialize_account_html: "%{name} ได้เปลี่ยนบัญชีของ %{target} เป็นหน้าอนุสรณ์" promote_user_html: "%{name} ได้เลื่อนขั้นผู้ใช้ %{target}" @@ -270,11 +285,11 @@ th: reset_password_user_html: "%{name} ได้ตั้งรหัสผ่านของผู้ใช้ %{target} ใหม่" resolve_report_html: "%{name} ได้แก้ปัญหารายงาน %{target}" sensitive_account_html: "%{name} ได้ทำเครื่องหมายสื่อของ %{target} ว่าละเอียดอ่อน" - silence_account_html: "%{name} ได้ทำให้บัญชีของ %{target} เงียบ" + silence_account_html: "%{name} ได้จำกัดบัญชีของ %{target}" suspend_account_html: "%{name} ได้ระงับบัญชีของ %{target}" unassigned_report_html: "%{name} ได้เลิกมอบหมายรายงาน %{target}" unsensitive_account_html: "%{name} ได้เลิกทำเครื่องหมายสื่อของ %{target} ว่าละเอียดอ่อน" - unsilence_account_html: "%{name} ได้เลิกทำให้บัญชีของ %{target} เงียบ" + unsilence_account_html: "%{name} ได้เลิกจำกัดบัญชีของ %{target}" unsuspend_account_html: "%{name} ได้เลิกระงับบัญชีของ %{target}" update_announcement_html: "%{name} ได้อัปเดตประกาศ %{target}" update_custom_emoji_html: "%{name} ได้อัปเดตอีโมจิ %{target}" @@ -327,6 +342,7 @@ th: not_permitted: คุณไม่ได้รับอนุญาตให้ทำการกระทำนี้ overwrite: เขียนทับ shortcode: รหัสย่อ + shortcode_hint: อย่างน้อย 2 ตัวอักษร เฉพาะตัวอักษรและตัวเลขและขีดล่างเท่านั้น title: อีโมจิที่กำหนดเอง uncategorized: ไม่มีหมวดหมู่ unlist: เลิกแสดงรายการ @@ -335,32 +351,9 @@ th: updated_msg: อัปเดตอีโมจิสำเร็จ! upload: อัปโหลด dashboard: - authorized_fetch_mode: โหมดปลอดภัย - backlog: งานคงค้าง - config: การกำหนดค่า - feature_deletions: การลบบัญชี - feature_invites: ลิงก์เชิญ - feature_profile_directory: ไดเรกทอรีโปรไฟล์ - feature_registrations: การลงทะเบียน - feature_relay: รีเลย์การติดต่อกับภายนอก - feature_timeline_preview: ตัวอย่างเส้นเวลา - features: คุณลักษณะ - hidden_service: การติดต่อกับภายนอกกับบริการที่ซ่อนอยู่ - open_reports: รายงานที่เปิด - pending_tags: แฮชแท็กที่กำลังรอการตรวจทาน - pending_users: ผู้ใช้ที่กำลังรอการตรวจทาน - recent_users: ผู้ใช้ล่าสุด - search: การค้นหาข้อความแบบเต็ม - single_user_mode: โหมดผู้ใช้เดี่ยว software: ซอฟต์แวร์ space: การใช้พื้นที่ title: แดชบอร์ด - total_users: ผู้ใช้ทั้งหมด - trends: แนวโน้ม - week_interactions: การโต้ตอบในสัปดาห์นี้ - week_users_active: ใช้งานอยู่ในสัปดาห์นี้ - week_users_new: ผู้ใช้ในสัปดาห์นี้ - whitelist_mode: โหมดการติดต่อกับภายนอกแบบจำกัด domain_allows: add_new: อนุญาตการติดต่อกับภายนอกกับโดเมน created_msg: อนุญาตการติดต่อกับภายนอกกับโดเมนสำเร็จ @@ -390,14 +383,14 @@ th: rejecting_media: กำลังปฏิเสธไฟล์สื่อ rejecting_reports: กำลังปฏิเสธรายงาน severity: - silence: เงียบอยู่ + silence: จำกัดอยู่ suspend: ระงับอยู่ show: affected_accounts: other: มีผลต่อ %{count} บัญชีในฐานข้อมูล retroactive: - silence: เลิกทำให้บัญชีที่มีอยู่ทั้งหมดจากโดเมนนี้เงียบ - suspend: เลิกระงับบัญชีที่มีอยู่ทั้งหมดจากโดเมนนี้ + silence: เลิกทำการจำกัดบัญชีที่มีผลที่มีอยู่จากโดเมนนี้ + suspend: เลิกระงับบัญชีที่มีผลที่มีอยู่จากโดเมนนี้ title: เลิกทำการปิดกั้นโดเมนสำหรับ %{domain} undo: เลิกทำ undo: เลิกทำการปิดกั้นโดเมน @@ -422,7 +415,21 @@ th: title: คำแนะนำการติดตาม unsuppress: คืนค่าคำแนะนำการติดตาม instances: + back_to_all: ทั้งหมด + back_to_limited: จำกัดอยู่ + back_to_warning: คำเตือน by_domain: โดเมน + delivery: + all: ทั้งหมด + clear: ล้างข้อผิดพลาดการจัดส่ง + restart: เริ่มการจัดส่งใหม่ + stop: หยุดการจัดส่ง + title: การจัดส่ง + unavailable: ไม่พร้อมใช้งาน + unavailable_message: การจัดส่งไม่พร้อมใช้งาน + warning: คำเตือน + delivery_available: มีการจัดส่ง + delivery_error_days: วันที่มีข้อผิดพลาดการจัดส่ง empty: ไม่พบโดเมน known_accounts: other: "%{count} บัญชีที่รู้จัก" @@ -470,6 +477,7 @@ th: disable: ปิดใช้งาน disabled: ปิดใช้งานอยู่ enable: เปิดใช้งาน + enable_hint: เมื่อเปิดใช้งาน เซิร์ฟเวอร์ของคุณจะบอกรับโพสต์สาธารณะทั้งหมดจากรีเลย์นี้ และจะเริ่มส่งโพสต์สาธารณะของเซิร์ฟเวอร์นี้ไปยังรีเลย์ enabled: เปิดใช้งานอยู่ inbox_url: URL รีเลย์ pending: กำลังรอการอนุมัติของรีเลย์ @@ -509,6 +517,7 @@ th: resolved: แก้ปัญหาแล้ว resolved_msg: แก้ปัญหารายงานสำเร็จ! status: สถานะ + target_origin: จุดเริ่มต้นของบัญชีที่ได้รับการรายงาน title: รายงาน unassign: เลิกมอบหมาย unresolved: ยังไม่ได้แก้ปัญหา @@ -517,8 +526,12 @@ th: add_new: เพิ่มกฎ delete: ลบ edit: แก้ไขกฎ + empty: ยังไม่ได้กำหนดกฎของเซิร์ฟเวอร์ title: กฎของเซิร์ฟเวอร์ settings: + activity_api_enabled: + desc_html: จำนวนโพสต์ที่เผยแพร่ในเซิร์ฟเวอร์, ผู้ใช้ที่ใช้งานอยู่ และการลงทะเบียนใหม่ในบักเก็ตรายสัปดาห์ + title: เผยแพร่สถิติรวมเกี่ยวกับกิจกรรมผู้ใช้ใน API bootstrap_timeline_accounts: title: แนะนำบัญชีเหล่านี้ให้กับผู้ใช้ใหม่ contact_information: @@ -529,6 +542,7 @@ th: title: CSS ที่กำหนดเอง default_noindex: desc_html: มีผลต่อผู้ใช้ทั้งหมดที่ไม่ได้เปลี่ยนการตั้งค่านี้ด้วยตนเอง + title: เลือกให้ผู้ใช้ไม่รับการทำดัชนีโดยเครื่องมือค้นหาเป็นค่าเริ่มต้น domain_blocks: all: ให้กับทุกคน disabled: ให้กับไม่มีใคร @@ -546,7 +560,8 @@ th: desc_html: ชื่อโดเมนที่เซิร์ฟเวอร์นี้ได้พบในเฟดิเวิร์ส title: เผยแพร่รายการเซิร์ฟเวอร์ที่ค้นพบใน API preview_sensitive_media: - title: แสดงสื่อที่ละเอียดอ่อนในตัวอย่าง OpenGraph + desc_html: การแสดงตัวอย่างลิงก์ในเว็บไซต์อื่น ๆ จะแสดงภาพขนาดย่อแม้ว่าจะมีการทำเครื่องหมายสื่อว่าละเอียดอ่อน + title: แสดงสื่อที่ละเอียดอ่อนในการแสดงตัวอย่าง OpenGraph profile_directory: desc_html: อนุญาตให้ผู้ใช้สามารถค้นพบได้ title: เปิดใช้งานไดเรกทอรีโปรไฟล์ @@ -560,6 +575,8 @@ th: min_invite_role: disabled: ไม่มีใคร title: อนุญาตคำเชิญโดย + require_invite_text: + title: ต้องให้ผู้ใช้ใหม่ป้อนเหตุผลที่จะเข้าร่วม registrations_mode: modes: approved: ต้องมีการอนุมัติสำหรับการลงทะเบียน @@ -567,6 +584,7 @@ th: open: ใครก็ตามสามารถลงทะเบียน title: โหมดการลงทะเบียน show_known_fediverse_at_about_page: + desc_html: เมื่อปิดใช้งาน จำกัดเส้นเวลาสาธารณะที่เชื่อมโยงจากหน้าเริ่มต้นให้แสดงเฉพาะเนื้อหาในเซิร์ฟเวอร์เท่านั้น title: รวมเนื้อหาที่ติดต่อกับภายนอกไว้ในหน้าเส้นเวลาสาธารณะที่ไม่ได้รับรองความถูกต้อง show_staff_badge: desc_html: แสดงป้ายพนักงานในหน้าผู้ใช้ @@ -585,7 +603,7 @@ th: title: เงื่อนไขการให้บริการที่กำหนดเอง site_title: ชื่อเซิร์ฟเวอร์ thumbnail: - desc_html: ใช้สำหรับตัวอย่างผ่าน OpenGraph และ API 1200x630px ที่แนะนำ + desc_html: ใช้สำหรับการแสดงตัวอย่างผ่าน OpenGraph และ API 1200x630px ที่แนะนำ title: ภาพขนาดย่อเซิร์ฟเวอร์ timeline_preview: desc_html: แสดงลิงก์ไปยังเส้นเวลาสาธารณะในหน้าเริ่มต้นและอนุญาตการเข้าถึง API ไปยังเส้นเวลาสาธารณะโดยไม่มีการรับรองความถูกต้อง @@ -593,7 +611,9 @@ th: title: การตั้งค่าไซต์ trendable_by_default: desc_html: มีผลต่อแฮชแท็กที่ไม่ได้ไม่อนุญาตก่อนหน้านี้ + title: อนุญาตให้แฮชแท็กขึ้นแนวโน้มโดยไม่มีการตรวจทานล่วงหน้า trends: + desc_html: แสดงแฮชแท็กที่ตรวจทานแล้วก่อนหน้านี้ที่กำลังนิยมเป็นสาธารณะ title: แฮชแท็กที่กำลังนิยม site_uploads: delete: ลบไฟล์ที่อัปโหลด @@ -615,9 +635,12 @@ th: rules_check: action: จัดการกฎของเซิร์ฟเวอร์ message_html: คุณไม่ได้กำหนดกฎของเซิร์ฟเวอร์ใด ๆ + sidekiq_process_check: + message_html: ไม่มีกระบวนการ Sidekiq ที่กำลังทำงานสำหรับคิว %{value} โปรดตรวจทานการกำหนดค่า Sidekiq ของคุณ tags: accounts_today: การใช้งานที่ไม่ซ้ำกันในวันนี้ accounts_week: การใช้งานที่ไม่ซ้ำกันในสัปดาห์นี้ + breakdown: การแบ่งการใช้งานของวันนี้ตามแหล่งที่มา last_active: ใช้งานล่าสุด most_popular: ยอดนิยม most_recent: สร้างล่าสุด @@ -634,6 +657,7 @@ th: add_new: เพิ่มใหม่ delete: ลบ edit_preset: แก้ไขคำเตือนที่ตั้งไว้ล่วงหน้า + empty: คุณยังไม่ได้กำหนดคำเตือนที่ตั้งไว้ล่วงหน้าใด ๆ title: จัดการคำเตือนที่ตั้งไว้ล่วงหน้า admin_mailer: new_pending_account: @@ -660,6 +684,7 @@ th: toot_layout: เค้าโครงโพสต์ application_mailer: notification_preferences: เปลี่ยนการกำหนดลักษณะอีเมล + salutation: "%{name}," settings: 'เปลี่ยนการกำหนดลักษณะอีเมล: %{link}' view: 'มุมมอง:' view_profile: ดูโปรไฟล์ @@ -674,8 +699,8 @@ th: auth: apply_for_account: ขอคำเชิญ change_password: รหัสผ่าน - checkbox_agreement_html: ฉันยอมรับ กฎของเซิร์ฟเวอร์ และ เงื่อนไขการให้บริการ - checkbox_agreement_without_rules_html: ฉันยอมรับ เงื่อนไขการให้บริการ + checkbox_agreement_html: ฉันเห็นด้วยกับ กฎของเซิร์ฟเวอร์ และ เงื่อนไขการให้บริการ + checkbox_agreement_without_rules_html: ฉันเห็นด้วยกับ เงื่อนไขการให้บริการ delete_account: ลบบัญชี delete_account_html: หากคุณต้องการลบบัญชีของคุณ คุณสามารถ ดำเนินการต่อที่นี่ คุณจะได้รับการถามเพื่อการยืนยัน description: @@ -704,7 +729,7 @@ th: set_new_password: ตั้งรหัสผ่านใหม่ setup: email_below_hint_html: หากที่อยู่อีเมลด้านล่างไม่ถูกต้อง คุณสามารถเปลี่ยนที่อยู่อีเมลที่นี่และรับอีเมลยืนยันใหม่ - email_settings_hint_html: ส่งอีเมลยืนยันไปยัง %{email} แล้ว หากที่อยู่อีเมลนั้นไม่ถูกต้อง คุณสามารถเปลี่ยนที่อยู่อีเมลในการตั้งค่าบัญชี + email_settings_hint_html: ส่งอีเมลยืนยันไปยัง %{email} แล้ว หากที่อยู่อีเมลนั้นไม่ถูกต้อง คุณสามารถเปลี่ยนที่อยู่อีเมลได้ในการตั้งค่าบัญชี status: account_status: สถานะบัญชี confirming: กำลังรอการยืนยันอีเมลให้เสร็จสมบูรณ์ @@ -758,7 +783,7 @@ th: warning: caches: เนื้อหาที่ได้รับการแคชโดยเซิร์ฟเวอร์อื่น ๆ อาจยังคงอยู่ data_removal: จะเอาโพสต์และข้อมูลอื่น ๆ ของคุณออกโดยถาวร - email_change_html: คุณสามารถ เปลี่ยนที่อยู่อีเมลของคุณ โดยไม่ต้องลบบัญชีของคุณ + email_change_html: คุณสามารถ เปลี่ยนที่อยู่อีเมลของคุณ ได้โดยไม่ต้องลบบัญชีของคุณ email_reconfirmation_html: หากคุณไม่ได้รับอีเมลยืนยัน คุณสามารถ ขออีเมลอีกครั้ง irreversible: คุณจะไม่สามารถคืนค่าหรือเปิดใช้งานบัญชีของคุณใหม่ more_details_html: สำหรับรายละเอียดเพิ่มเติม ดู นโยบายความเป็นส่วนตัว @@ -771,7 +796,7 @@ th: domain_validator: invalid_domain: ไม่ใช่ชื่อโดเมนที่ถูกต้อง errors: - '400': The request you submitted was invalid or malformed. + '400': คำขอที่คุณได้ส่งไม่ถูกต้องหรือผิดรูปแบบ '403': คุณไม่มีสิทธิอนุญาตเพื่อดูหน้านี้ '404': หน้าที่คุณกำลังมองหาไม่ได้อยู่ที่นี่ '406': This page is not available in the requested format. @@ -791,6 +816,7 @@ th: archive_takeout: date: วันที่ download: ดาวน์โหลดการเก็บถาวรของคุณ + hint_html: คุณสามารถขอการเก็บถาวรของ โพสต์และสื่อที่อัปโหลด ของคุณ ข้อมูลที่ส่งออกจะอยู่ในรูปแบบ ActivityPub อ่านได้โดยซอฟต์แวร์ใด ๆ ที่ตรงตามมาตรฐาน คุณสามารถขอการเก็บถาวรได้ทุก 7 วัน in_progress: กำลังคอมไพล์การเก็บถาวรของคุณ... request: ขอการเก็บถาวรของคุณ size: ขนาด @@ -835,6 +861,9 @@ th: identity_proofs: active: ใช้งานอยู่ authorize: ใช่ อนุญาต + authorize_connection_prompt: อนุญาตการเชื่อมต่อการเข้ารหัสนี้? + errors: + failed: การเชื่อมต่อการเข้ารหัสล้มเหลว โปรดลองอีกครั้งจาก %{provider} i_am_html: ฉันคือ %{username} ใน %{service} identity: ตัวตน inactive: ไม่ได้ใช้งาน @@ -852,6 +881,7 @@ th: merge_long: เก็บระเบียนที่มีอยู่และเพิ่มระเบียนใหม่ overwrite: เขียนทับ overwrite_long: แทนที่ระเบียนปัจจุบันด้วยระเบียนใหม่ + preface: คุณสามารถนำเข้าข้อมูลที่คุณได้ส่งออกจากเซิร์ฟเวอร์อื่น เช่น รายการผู้คนที่คุณกำลังติดตามหรือกำลังปิดกั้น types: blocking: รายการปิดกั้น bookmarks: ที่คั่นหน้า @@ -881,9 +911,21 @@ th: expires_at: หมดอายุเมื่อ uses: การใช้ title: เชิญผู้คน + login_activities: + authentication_methods: + otp: แอปการรับรองความถูกต้องด้วยสองปัจจัย + password: รหัสผ่าน + sign_in_token: รหัสความปลอดภัยอีเมล + webauthn: กุญแจความปลอดภัย + description_html: หากคุณเห็นกิจกรรมที่คุณไม่รู้จัก พิจารณาเปลี่ยนรหัสผ่านของคุณและเปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัย + empty: ไม่มีประวัติการรับรองความถูกต้อง + failed_sign_in_html: ความพยายามลงชื่อเข้าด้วย %{method} จาก %{ip} (%{browser}) ล้มเหลว + successful_sign_in_html: ลงชื่อเข้าด้วย %{method} จาก %{ip} (%{browser}) สำเร็จ + title: ประวัติการรับรองความถูกต้อง media_attachments: validations: images_and_video: ไม่สามารถแนบวิดีโอกับโพสต์ที่มีภาพอยู่แล้ว + not_ready: ไม่สามารถแนบไฟล์ที่ยังประมวลผลไม่เสร็จ ลองอีกครั้งในอีกสักครู่! too_many: ไม่สามารถแนบมากกว่า 4 ไฟล์ migrations: acct: ย้ายไปยัง @@ -893,8 +935,12 @@ th: missing_also_known_as: ไม่ใช่นามแฝงของบัญชีนี้ move_to_self: ไม่สามารถเป็นบัญชีปัจจุบัน not_found: ไม่พบ + on_cooldown: คุณอยู่ในช่วงพัก followers_count: ผู้ติดตาม ณ เวลาที่ย้าย incoming_migrations: การย้ายจากบัญชีอื่น + incoming_migrations_html: เพื่อย้ายจากบัญชีอื่นไปยังบัญชีนี้ ก่อนอื่นคุณจำเป็นต้อง สร้างนามแฝงบัญชี + on_cooldown: คุณเพิ่งโยกย้ายบัญชีของคุณ ฟังก์ชันนี้จะพร้อมใช้งานอีกครั้งในอีก %{count} วัน + past_migrations: การโยกย้ายที่ผ่านมา proceed_with_move: ย้ายผู้ติดตาม redirected_msg: บัญชีของคุณกำลังเปลี่ยนเส้นทางไปยัง %{acct} redirecting_to: บัญชีของคุณกำลังเปลี่ยนเส้นทางไปยัง %{acct} @@ -944,9 +990,21 @@ th: email_events: เหตุการณ์สำหรับการแจ้งเตือนอีเมล email_events_hint: 'เลือกเหตุการณ์ที่คุณต้องการรับการแจ้งเตือน:' other_settings: การตั้งค่าการแจ้งเตือนอื่น ๆ + number: + human: + decimal_units: + format: "%n %u" + units: + billion: พันล้าน + million: ล้าน + quadrillion: พันล้านล้าน + thousand: พัน + trillion: ล้านล้าน otp_authentication: code_hint: ป้อนรหัสที่สร้างโดยแอปตัวรับรองความถูกต้องของคุณเพื่อยืนยัน enable: เปิดใช้งาน + manual_instructions: 'หากคุณไม่สามารถสแกนรหัส QR และจำเป็นต้องป้อนรหัสด้วยตนเอง นี่คือรหัสลับแบบข้อความธรรมดา:' + setup: ตั้งค่า wrong_code: รหัสที่ป้อนไม่ถูกต้อง! เวลาเซิร์ฟเวอร์และเวลาอุปกรณ์ถูกต้องหรือไม่? pagination: newer: ใหม่กว่า @@ -958,6 +1016,8 @@ th: errors: already_voted: คุณได้ลงคะแนนในการสำรวจความคิดเห็นนี้ไปแล้ว duplicate_options: มีรายการที่ซ้ำกัน + duration_too_long: อยู่ไกลเกินไปในอนาคต + duration_too_short: อยู่เร็วเกินไป expired: การสำรวจความคิดเห็นได้สิ้นสุดไปแล้ว invalid_choice: ไม่มีตัวเลือกการลงคะแนนที่เลือกอยู่ too_few_options: ต้องมีมากกว่าหนึ่งรายการ @@ -1014,7 +1074,12 @@ th: firefox: Firefox generic: เบราว์เซอร์ที่ไม่รู้จัก ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: เบราว์เซอร์ Nokia S40 Ovi opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: เบราว์เซอร์ QQ safari: Safari weibo: Weibo current_session: เซสชันปัจจุบัน @@ -1035,6 +1100,7 @@ th: revoke: เพิกถอน revoke_success: เพิกถอนเซสชันสำเร็จ title: เซสชัน + view_authentication_history: ดูประวัติการรับรองความถูกต้องบัญชีของคุณ settings: account: บัญชี account_settings: การตั้งค่าบัญชี @@ -1055,6 +1121,7 @@ th: preferences: การกำหนดลักษณะ profile: โปรไฟล์ relationships: การติดตามและผู้ติดตาม + statuses_cleanup: การลบโพสต์แบบอัตโนมัติ two_factor_authentication: การรับรองความถูกต้องด้วยสองปัจจัย webauthn_authentication: กุญแจความปลอดภัย statuses: @@ -1096,8 +1163,35 @@ th: public_long: ทุกคนสามารถเห็น unlisted: ไม่อยู่ในรายการ unlisted_long: ทุกคนสามารถเห็น แต่ไม่แสดงรายการในเส้นเวลาสาธารณะ + statuses_cleanup: + enabled: ลบโพสต์เก่าโดยอัตโนมัติ + exceptions: ข้อยกเว้น + ignore_favs: เพิกเฉยรายการโปรด + ignore_reblogs: เพิกเฉยการดัน + interaction_exceptions: ข้อยกเว้นตามการโต้ตอบ + keep_direct: เก็บข้อความโดยตรง + keep_direct_hint: ไม่ลบข้อความโดยตรงใดก็ตามของคุณ + keep_media: เก็บโพสต์ที่มีไฟล์แนบสื่อ + keep_media_hint: ไม่ลบโพสต์ที่มีไฟล์แนบสื่อใดก็ตามของคุณ + keep_pinned: เก็บโพสต์ที่ปักหมุด + keep_pinned_hint: ไม่ลบโพสต์ที่ปักหมุดใดก็ตามของคุณ + keep_polls: เก็บการสำรวจความคิดเห็น + keep_polls_hint: ไม่ลบการสำรวจความคิดเห็นใดก็ตามของคุณ + keep_self_bookmark: เก็บโพสต์ที่คุณได้เพิ่มที่คั่นหน้า + keep_self_bookmark_hint: ไม่ลบโพสต์ของคุณเองหากคุณได้เพิ่มที่คั่นหน้าโพสต์ไว้ + keep_self_fav: เก็บโพสต์ที่คุณได้ชื่นชอบ + keep_self_fav_hint: ไม่ลบโพสต์ของคุณเองหากคุณได้ชื่นชอบโพสต์ไว้ + min_age: + '1209600': 2 สัปดาห์ + '15778476': 6 เดือน + '2629746': 1 เดือน + '31556952': 1 ปี + '5259492': 2 เดือน + '63113904': 2 ปี + '7889238': 3 เดือน stream_entries: pinned: โพสต์ที่ปักหมุด + reblogged: ดันแล้ว sensitive_content: เนื้อหาที่ละเอียดอ่อน tags: does_not_match_previous_name: ไม่ตรงกับชื่อก่อนหน้า @@ -1134,16 +1228,26 @@ th: subject: โปรดยืนยันการลงชื่อเข้าที่พยายาม title: ความพยายามลงชื่อเข้า warning: + get_in_touch: คุณสามารถตอบกลับอีเมลนี้เพื่อติดต่อกับพนักงานของ %{instance} review_server_policies: ตรวจทานนโยบายของเซิร์ฟเวอร์ + statuses: 'โดยเฉพาะสำหรับ:' subject: + disable: บัญชีของคุณ %{acct} ถูกอายัด none: คำเตือนสำหรับ %{acct} + silence: บัญชีของคุณ %{acct} ถูกจำกัด + suspend: บัญชีของคุณ %{acct} ถูกระงับ title: disable: อายัดบัญชีอยู่ none: คำเตือน + sensitive: มีการทำเครื่องหมายสื่อของคุณว่าละเอียดอ่อน silence: จำกัดบัญชีอยู่ suspend: ระงับบัญชีอยู่ welcome: edit_profile_action: ตั้งค่าโปรไฟล์ + final_action: เริ่มโพสต์ + final_step: 'เริ่มโพสต์! แม้ว่าไม่มีผู้ติดตาม โพสต์สาธารณะของคุณอาจเห็นโดยผู้อื่น ตัวอย่างเช่น ในเส้นเวลาในเซิร์ฟเวอร์และในแฮชแท็ก คุณอาจต้องการแนะนำตัวเองในแฮชแท็ก #introductions' + full_handle: นามเต็มของคุณ + full_handle_hint: นี่คือสิ่งที่คุณจะบอกเพื่อน ๆ ของคุณ เพื่อให้เขาสามารถส่งข้อความหรือติดตามคุณจากเซิร์ฟเวอร์อื่น review_preferences_action: เปลี่ยนการกำหนดลักษณะ subject: ยินดีต้อนรับสู่ Mastodon tip_following: คุณติดตามผู้ดูแลเซิร์ฟเวอร์ของคุณเป็นค่าเริ่มต้น เพื่อค้นหาผู้คนที่น่าสนใจเพิ่มเติม ตรวจสอบเส้นเวลาในเซิร์ฟเวอร์และที่ติดต่อกับภายนอก @@ -1166,6 +1270,7 @@ th: success: เพิ่มกุญแจความปลอดภัยของคุณสำเร็จ delete: ลบ delete_confirmation: คุณแน่ใจหรือไม่ว่าต้องการลบกุญแจความปลอดภัยนี้? + description_html: หากคุณเปิดใช้งาน การรับรองความถูกต้องด้วยกุญแจความปลอดภัย การเข้าสู่ระบบจะต้องการให้คุณใช้หนึ่งในกุญแจความปลอดภัยของคุณ destroy: error: มีปัญหาในการลบกุญแจความปลอดภัยของคุณ โปรดลองอีกครั้ง success: ลบกุญแจความปลอดภัยของคุณสำเร็จ diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 9e65a7c62..f78550a19 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -76,7 +76,7 @@ tr: pin_errors: following: Onaylamak istediğiniz kişiyi zaten takip ediyor olmalısınız posts: - one: Toot + one: Gönderi other: Toot posts_tab_heading: Tootlar posts_with_replies: Tootlar ve yanıtlar @@ -119,6 +119,7 @@ tr: demote: Düşür destroyed_msg: "%{username} verilerinin hemen silinmesi için kuyruğa alındı" disable: Devre dışı + disable_sign_in_token_auth: E-posta token doğrulamayı devre dışı bırak disable_two_factor_authentication: 2AD kapat disabled: Kapalı display_name: Görünen isim @@ -127,6 +128,7 @@ tr: email: E-posta email_status: E-posta durumu enable: Etkinleştir + enable_sign_in_token_auth: E-posta token doğrulamayı etkinleştir enabled: Etkin enabled_msg: "%{username} hesabı başarıyla çözüldü" followers: Takipçiler @@ -191,8 +193,12 @@ tr: search: Ara search_same_email_domain: Aynı e-posta alan adına sahip diğer kullanıcılar search_same_ip: Aynı IP adresine sahip diğer kullanıcılar + security_measures: + only_password: Sadece parola + password_and_2fa: Parola ve İki aşamalı doğrulama + password_and_sign_in_token: Parola ve e-posta tokeni sensitive: Hassas - sensitized: hassas olarak işaretlendi + sensitized: Hassas olarak işaretlendi shared_inbox_url: Paylaşılan gelen kutusu bağlantısı show: created_reports: Yapılan şikayetler @@ -242,8 +248,10 @@ tr: destroy_unavailable_domain: Mevcut Olmayan Alan Adı Sil disable_2fa_user: 2AD Kapat disable_custom_emoji: Özel İfadeyi Devre Dışı Bırak + disable_sign_in_token_auth_user: Kullanıcı için E-posta Token Doğrulamayı devre dışı bırak disable_user: Kullanıcıyı Devre Dışı Bırak enable_custom_emoji: Özel İfadeyi Etkinleştir + enable_sign_in_token_auth_user: Kullanıcı için E-posta Token Doğrulamayı etkinleştir enable_user: Kullanıcıyı Etkinleştir memorialize_account: Hesabı Anıtlaştır promote_user: Kullanıcıyı Yükselt @@ -285,8 +293,10 @@ tr: destroy_unavailable_domain_html: "%{name}, %{target} alan adına teslimatı sürdürdü" disable_2fa_user_html: "%{name}, %{target} kullanıcısının iki aşamalı doğrulama gereksinimini kapattı" disable_custom_emoji_html: "%{name}, %{target} emojisini devre dışı bıraktı" + disable_sign_in_token_auth_user_html: "%{name}, %{target} için e-posta token doğrulamayı devre dışı bıraktı" disable_user_html: "%{name}, %{target} kullanıcısı için oturum açmayı devre dışı bıraktı" enable_custom_emoji_html: "%{name}, %{target} emojisini etkinleştirdi" + enable_sign_in_token_auth_user_html: "%{name}, %{target} için e-posta token doğrulamayı etkinleştirdi" enable_user_html: "%{name}, %{target} kullanıcısı için oturum açmayı etkinleştirdi" memorialize_account_html: "%{name}, %{target} kullanıcısının hesabını bir anıt sayfaya dönüştürdü" promote_user_html: "%{name}, %{target} kullanıcısını yükseltti" @@ -361,32 +371,28 @@ tr: updated_msg: Emoji başarıyla güncellendi! upload: Yükle dashboard: - authorized_fetch_mode: Güvenli mod - backlog: bekleyen işler - config: Yapılandırma - feature_deletions: Hesap silme - feature_invites: Davet bağlantıları - feature_profile_directory: Profil Dizini - feature_registrations: Kayıtlar - feature_relay: Federasyon aktarıcısı - feature_timeline_preview: Zaman çizelgesi önizlemesi - features: Özellikler - hidden_service: Gizli servislere sahip federasyon - open_reports: raporları aç - pending_tags: inceleme için bekleyen hashtag'ler - pending_users: inceleme için bekleyen kullanıcılar - recent_users: Son kullanıcılar - search: Tam metin araması - single_user_mode: Tek kullanıcı modu + active_users: aktif kullanıcılar + interactions: etkileşimler + media_storage: Medya deposu + new_users: yeni kullanıcılar + opened_reports: açılan bildirimler + pending_reports_html: + one: "1 bekleyen bildirim" + other: "%{count} bekleyen bildirim" + pending_tags_html: + one: "1 bekleyen etiket" + other: "%{count} bekleyen etiket" + pending_users_html: + one: "1 bekleyen kullanıcı" + other: "%{count} bekleyen kullanıcı" + resolved_reports: çözülmüş bildirimler software: Yazılım + sources: Kayıt kaynakları space: Alan kullanımı title: Kontrol Paneli - total_users: toplam kullanıcı - trends: Gündemler - week_interactions: bu haftaki etkileşimler - week_users_active: bu hafta aktif - week_users_new: bu hafta kullanıcılar - whitelist_mode: Beyaz liste modu + top_languages: En aktif diller + top_servers: En aktif sunucular + website: Web sitesi domain_allows: add_new: Alan adını beyaz listeye al created_msg: Alan adı başarıyla beyaz listeye alındı @@ -569,6 +575,7 @@ tr: resolved: Giderildi resolved_msg: Şikayet başarıyla çözümlendi! status: Durum + target_origin: Şikayet edilen hesabın kökeni title: Şikayetler unassign: Atamayı geri al unresolved: Giderilmedi @@ -767,7 +774,7 @@ tr: checkbox_agreement_html: Sunucu kurallarını ve hizmet şartlarını kabul ediyorum checkbox_agreement_without_rules_html: Hizmet şartlarını kabul ediyorum delete_account: Hesabı sil - delete_account_html: Hesabınızı silmek isterseniz, buradan devam edebilirsiniz . Onaylamanız istenecektir. + delete_account_html: Hesabını silmek istersen, buradan devam edebilirsin. Onay istenir. description: prefix_invited_by_user: "@%{name} sizi bu Mastodon sunucusuna katılmaya davet ediyor!" prefix_sign_up: Bugün Mastodon'a kaydolun! @@ -781,7 +788,7 @@ tr: login: Oturum aç logout: Oturumu kapat migrate_account: Farklı bir hesaba taşıyın - migrate_account_html: Bu hesabı başka bir hesaba yönlendirmek istiyorsanız, buradan yapılandırabilirsiniz. + migrate_account_html: Bu hesabı başka bir hesaba yönlendirmek istiyorsan, buradan yapılandırabilirsin. or_log_in_with: 'Veya şununla oturum açın:' providers: cas: CAS @@ -1004,6 +1011,17 @@ tr: lists: errors: limit: En yüksek liste sayısına ulaştınız + login_activities: + authentication_methods: + otp: iki aşamalı kimlik doğrulama uygulaması + password: parola + sign_in_token: e-posta güvenlik kodu + webauthn: güvenlik anahtarları + description_html: Eğer tanımadığınız bir faaliyet görüyorsanız, parolanızı değiştirmeyi ve iki aşamalı kimlik doğrulamayı etkinleştirmeyi düşünün. + empty: Kimlik doğrulama geçmişi yok + failed_sign_in_html: "%{method} yöntemiyle %{ip} (%{browser}) adresinden başarısız oturum açma girişimi" + successful_sign_in_html: "%{method} yöntemiyle %{ip} (%{browser}) adresinden başarılı oturum açma" + title: Kimlik doğrulama geçmişi media_attachments: validations: images_and_video: Zaten resim içeren bir duruma video eklenemez @@ -1210,6 +1228,7 @@ tr: revoke: İptal Et revoke_success: Oturum başarıyla iptal edildi title: Oturumlar + view_authentication_history: Hesabınızın kimlik doğrulama geçmişini görüntüle settings: account: Hesap account_settings: Hesap ayarları @@ -1230,6 +1249,7 @@ tr: preferences: Tercihler profile: Profil relationships: Takip edilenler ve takipçiler + statuses_cleanup: Otomatik gönderi silme two_factor_authentication: İki adımlı doğrulama webauthn_authentication: Güvenlik anahtarları statuses: @@ -1281,6 +1301,40 @@ tr: public_long: Herkese açık zaman tüneline gönder unlisted: Listelenmemiş unlisted_long: Herkes görebilir fakat herkese açık zaman tünellerinde listelenmez + statuses_cleanup: + enabled: Eski gönderileri otomatik olarak sil + enabled_hint: Belirli bir zaman eşiğine ulaşan eski gönderilerinizi, aşağıdaki istisnalara uymadıkları sürece otomatik olarak siler + exceptions: İstisnalar + explanation: Gönderi silme maliyetli bir iş olduğu için, sunucu çok yoğun olmadığında yavaş yavaş yapılmaktadır. Bu nedenle, gönderilerinizin zaman eşiği geldiğinde silinmesi belirli bir süre alabilir. + ignore_favs: Beğenileri yoksay + ignore_reblogs: Teşvikleri yoksay + interaction_exceptions: Etkileşimlere dayalı istisnalar + interaction_exceptions_explanation: Bir kere değerlendirmeye alındıktan sonra, belirtilen beğeni veya teşvik eşiğinin altında düşünce gönderilerin silinmesinin bir güvencesi yok. + keep_direct: Doğrudan iletileri sakla + keep_direct_hint: Herhangi bir doğrudan iletinizi silmez + keep_media: Görüntü eki olan gönderileri sakla + keep_media_hint: Herhangi bir medya eki olan gönderinizi silmez + keep_pinned: Sabitlenmiş gönderileri sakla + keep_pinned_hint: Herhangi bir sabitlenmiş gönderinizi silmez + keep_polls: Anketleri sakla + keep_polls_hint: Herhangi bir anketinizi silmez + keep_self_bookmark: Yer imi olarak eklenmiş gönderileri sakla + keep_self_bookmark_hint: Herhangi bir yer imi olarak eklenmiş gönderinizi silmez + keep_self_fav: Beğendiğiniz gönderileri sakla + keep_self_fav_hint: Kendi gönderilerinizi beğenmişseniz silmez + min_age: + '1209600': 2 hafta + '15778476': 6 ay + '2629746': 1 ay + '31556952': 1 yıl + '5259492': 2 ay + '63113904': 2 yıl + '7889238': 3 ay + min_age_label: Zaman eşiği + min_favs: Şundan daha fazla beğenilen gönderileri sakla + min_favs_hint: Bu belirtilenden daha fazla beğeni alan gönderilerinizin herhangi birini silmez. Beğeni sayısından bağımsız olarak gönderilerin silinmesi için burayı boş bırakın + min_reblogs: Şundan daha fazla teşvik edilen gönderileri sakla + min_reblogs_hint: Bu belirtilenden daha fazla teşvik edilen gönderilerinizin herhangi birini silmez. Teşvik sayısından bağımsız olarak gönderilerin silinmesi için burayı boş bırakın stream_entries: pinned: Sabitlenmiş toot reblogged: boostladı diff --git a/config/locales/tt.yml b/config/locales/tt.yml index d9f99a9b2..b9fc1b868 100644 --- a/config/locales/tt.yml +++ b/config/locales/tt.yml @@ -59,8 +59,6 @@ tt: enable: Кабызу list: Исемлек upload: Йөкләү - dashboard: - features: Үзенчәлекләр domain_blocks: domain: Домен new: diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 6bbd67621..f4e60f921 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -125,6 +125,7 @@ uk: demote: Усунути destroyed_msg: Дані %{username} тепер в черзі на негайне видалення disable: Вимкнути + disable_sign_in_token_auth: Вимкнути автентифікацію за допомогою е-пошти disable_two_factor_authentication: Вимкнути двофакторну авторизацію disabled: Вимкнено display_name: Відображуване ім'я @@ -133,6 +134,7 @@ uk: email: Електронна пошта email_status: Статус електронної пошти enable: Увімкнути + enable_sign_in_token_auth: Увімкнути автентифікацію за допомогою е-пошти enabled: Увімкнено enabled_msg: Обліковий запис %{username} успішно розморожено followers: Підписники @@ -197,6 +199,10 @@ uk: search: Пошук search_same_email_domain: Інші користувачі з тим самим поштовим доменом search_same_ip: Інші користувачі з тим самим IP + security_measures: + only_password: Лише пароль + password_and_2fa: Пароль та 2FA + password_and_sign_in_token: Пароль та токен з е-пошти sensitive: Делікатне sensitized: позначено делікатним shared_inbox_url: URL спільного вхідного кошика @@ -248,8 +254,10 @@ uk: destroy_unavailable_domain: Видалити недоступний домен disable_2fa_user: Вимкнути 2FA disable_custom_emoji: Вимкнути користувацькі емодзі + disable_sign_in_token_auth_user: Вимкнути автентифікацію за допомогою е-пошти для користувача disable_user: Відключити користувача enable_custom_emoji: Увімкнути користувацькі емодзі + enable_sign_in_token_auth_user: Увімкнути автентифікацію за допомогою е-пошти для користувача enable_user: Активувати користувача memorialize_account: Зробити обліковий запис меморіалом promote_user: Підвищити користувача @@ -291,8 +299,10 @@ uk: destroy_unavailable_domain_html: "%{name} відновлює доставляння на домен %{target}" disable_2fa_user_html: "%{name} вимикає двоетапну перевірку для користувача %{target}" disable_custom_emoji_html: "%{name} вимикає емодзі %{target}" + disable_sign_in_token_auth_user_html: "%{name} вимикає автентифікацію через е-пошту для %{target}" disable_user_html: "%{name} вимикає вхід для користувача %{target}" enable_custom_emoji_html: "%{name} вмикає емодзі %{target}" + enable_sign_in_token_auth_user_html: "%{name} вмикає автентифікацію через е-пошту для %{target}" enable_user_html: "%{name} вмикає вхід для користувача %{target}" memorialize_account_html: "%{name} перетворює обліковий запис %{target} на сторінку пам'яті" promote_user_html: "%{name} підвищує користувача %{target}" @@ -367,32 +377,34 @@ uk: updated_msg: Емодзі успішно оновлене! upload: Вивантажити dashboard: - authorized_fetch_mode: Безпечний режим - backlog: відкладені завдання - config: Налаштування - feature_deletions: Видалення облікових записів - feature_invites: Посилання-запрошення - feature_profile_directory: Каталог профілів - feature_registrations: Реєстрації - feature_relay: Ретранслятор дмухів між серверами - feature_timeline_preview: Передпоказ стрічки - features: Можливості - hidden_service: Федерація з прихованими сервісами - open_reports: відкриті скарги - pending_tags: хештеги, що очікують на перегляд - pending_users: користувачі, що очікують на перегляд - recent_users: Останні користувачі - search: Повнотекстовий пошук - single_user_mode: Режим одного користувача + active_users: активні користувачі + interactions: взаємодії + media_storage: Медіасховище + new_users: нові користувачі + opened_reports: звітів відкрито + pending_reports_html: + few: "%{count} звіти у черзі" + many: "%{count} звітів у черзі" + one: "1 звіт у черзі" + other: "%{count} звіти у черзі" + pending_tags_html: + few: "%{count} хештеґи у черзі" + many: "%{count} хештеґів у черзі" + one: "1 хештеґ у черзі" + other: "%{count} хештеґи у черзі" + pending_users_html: + few: "%{count} користувачі у черзі" + many: "%{count} користувачів у черзі" + one: "1 користувач у черзі" + other: "%{count} користувача у черзі" + resolved_reports: розв'язані звіти software: Програмне забезпечення + sources: Джерела реєстрації space: Використання дискового простору title: Приборна панель - total_users: користувачів загалом - trends: Тренди - week_interactions: дій за цей тиждень - week_users_active: активно протягом тижня - week_users_new: користувачів цього тижня - whitelist_mode: Режим білого списку + top_languages: Найактивніші мови + top_servers: Найактивніші сервери + website: Вебсайт domain_allows: add_new: Додати домен до білого списку created_msg: Домен було успішно додано до білого списку @@ -585,6 +597,7 @@ uk: resolved: Вирішено resolved_msg: Скаргу успішно вирішено! status: Статус + target_origin: Походження облікового запису, на який скаржаться title: Скарги unassign: Зняти призначення unresolved: Невирішені @@ -1026,6 +1039,17 @@ uk: lists: errors: limit: Ви досягли максимальної кількості списків + login_activities: + authentication_methods: + otp: застосунок двофакторної автентифікації + password: пароль + sign_in_token: код безпеки е-поштою + webauthn: ключі безпеки + description_html: Якщо ви помітили невідомі вам дії, тоді подумайте про зміну свого пароля та можливість увімкнення двофакторної автентифікації. + empty: Немає історії входів + failed_sign_in_html: Не вдалося увійти з %{method} з %{ip} (%{browser}) + successful_sign_in_html: Успішний вхід з %{method} з %{ip} (%{browser}) + title: Історія входів media_attachments: validations: images_and_video: Не можна додати відео до статусу з зображеннями @@ -1236,6 +1260,7 @@ uk: revoke: Закінчити revoke_success: Сесія успішно закінчена title: Сесії + view_authentication_history: Переглянути історію входів вашого облікового запису settings: account: Обліковий запис account_settings: Налаштування облікового запису @@ -1256,6 +1281,7 @@ uk: preferences: Налаштування profile: Профіль relationships: Підписки та підписники + statuses_cleanup: Автовидалення допису two_factor_authentication: Двофакторна авторизація webauthn_authentication: Ключі безпеки statuses: @@ -1319,6 +1345,40 @@ uk: public_long: Показувати всім unlisted: Приховувати зі стрічок unlisted_long: Показувати всім, але не відображати в публічних стрічках + statuses_cleanup: + enabled: Автовидалення давніх дописів + enabled_hint: Автоматично видаляє ваші дописи після досягнення вказаного вікового порогу, якщо вони не є одним з наведених винятків + exceptions: Винятки + explanation: Оскільки видалення дописів є складною операцією, то це відбувається повільно, коли сервер не дуже завантажено. З цієї причини ваші дописи можуть бути видалені через деякий час після досягнення вікового порогу. + ignore_favs: Ігнорувати обране + ignore_reblogs: Ігнорувати передмухнуті + interaction_exceptions: Винятки базуються на взаємодії + interaction_exceptions_explanation: Зверніть увагу, що немає гарантії, щоб дописи були видалені, якщо вони йдуть нижче улюблених або підсилювачів після того, як вони перейшли за них. + keep_direct: Зберігати приватні повідомлення + keep_direct_hint: Не видаляти ваших особистих повідомлень + keep_media: Зберігати повідомлення з вкладеними мультимедійними файлами + keep_media_hint: Не видаляти ваших дописів, у яких є вкладення медіа + keep_pinned: Зберігати закріплені дописи + keep_pinned_hint: Не вилучати прикріплені дописи + keep_polls: Залишити опитування + keep_polls_hint: Не видаляти опитувань + keep_self_bookmark: Не зберігати дописи, які ви додали до закладок + keep_self_bookmark_hint: Не видаляти ваші власні дописи, якщо ви їх додали до закладок + keep_self_fav: Залишати обрані дописи + keep_self_fav_hint: Не видаляти ваші власні дописи, якщо ви їх додали до обраних + min_age: + '1209600': 2 тижні + '15778476': 6 місяців + '2629746': 1 місяць + '31556952': 1 рік + '5259492': 2 місяці + '63113904': 2 роки + '7889238': 3 місяці + min_age_label: Поріг давності + min_favs: Залишати дописи в обраному більше ніж + min_favs_hint: Не видаляти ваших дописів, що отримали більше вказаної кількості додавання до закладок. Залиште порожнім, щоб видаляти дописи незалежно від кількості їхнього додавання до обраних + min_reblogs: Залишати дописи передмухнуті більше ніж + min_reblogs_hint: Не видаляти ваших дописів, що були передмухнуті більш ніж вказану кількість разів. Залиште порожнім, щоб видаляти дописи, попри кількість їхніх передмухів stream_entries: pinned: Закріплений пост reblogged: передмухнув(-ла) diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 34cc2988d..01caf1ab0 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -21,7 +21,7 @@ vi: federation_hint_html: Đăng ký tài khoản %{instance} là bạn có thể giao tiếp với bất cứ ai trên bất kỳ máy chủ Mastodon nào và còn hơn thế nữa. get_apps: Ứng dụng di động hosted_on: "%{domain} vận hành nhờ Mastodon" - instance_actor_flash: "Đây là một tài khoản ảo được sử dụng để đại diện cho máy chủ chứ không phải bất kỳ người dùng cá nhân nào. Nó được sử dụng cho mục đích liên kết và không nên chặn trừ khi bạn muốn chặn toàn bộ máy chủ. \n" + instance_actor_flash: Đây là một tài khoản ảo được sử dụng để đại diện cho máy chủ chứ không phải bất kỳ người dùng cá nhân nào. Nó được sử dụng cho mục đích liên kết và không nên chặn trừ khi bạn muốn chặn toàn bộ máy chủ. learn_more: Tìm hiểu privacy_policy: Chính sách bảo mật rules: Quy tắc máy chủ @@ -41,7 +41,7 @@ vi: rejecting_media: 'Ảnh và video từ những máy chủ sau sẽ không được xử lý, lưu trữ và hiển thị hình thu nhỏ. Bắt buộc nhấp thủ công vào tệp gốc để xem:' rejecting_media_title: Ảnh và video silenced: 'Tút từ những máy chủ sau sẽ bị ẩn trên bảng tin, trong tin nhắn và không có thông báo nào được tạo từ các tương tác của người dùng của họ, trừ khi bạn có theo dõi người dùng của họ:' - silenced_title: Những máy chủ bị ẩn + silenced_title: Những máy chủ bị hạn chế suspended: 'Những máy chủ sau sẽ không được xử lý, lưu trữ hoặc trao đổi nội dung. Mọi tương tác hoặc giao tiếp với người dùng từ các máy chủ này đều bị cấm:' suspended_title: Những máy chủ bị vô hiệu hóa unavailable_content_html: Mastodon cho phép bạn tương tác nội dung và giao tiếp với người dùng từ bất kỳ máy chủ nào khác trong mạng liên hợp. Còn máy chủ này có những ngoại lệ riêng. @@ -62,7 +62,7 @@ vi: last_active: online link_verified_on: Liên kết này đã được xác thực quyền sở hữu vào %{date} media: Media - moved_html: "%{name} đã dời sang %{new_profile_link}:" + moved_html: "%{name} đã đổi thành %{new_profile_link}:" network_hidden: Dữ liệu đã bị ẩn never_active: Chưa có nothing_here: Trống trơn! @@ -113,14 +113,16 @@ vi: demote: Xóa chức vụ destroyed_msg: Dữ liệu %{username} sẽ được lên lịch xóa ngay bây giờ disable: Tạm khóa + disable_sign_in_token_auth: Tắt xác thực bằng email disable_two_factor_authentication: Vô hiệu hóa xác thực hai bước disabled: Đã vô hiệu hóa display_name: Tên hiển thị domain: Máy chủ edit: Chỉnh sửa email: Email - email_status: Trạng thái email + email_status: Trạng thái enable: Mở lại + enable_sign_in_token_auth: Bật xác thực bằng email enabled: Đã duyệt enabled_msg: Đã kích hoạt lại tài khoản %{username} thành công followers: Người theo dõi @@ -145,7 +147,7 @@ vi: active: Hoạt động all: Toàn bộ pending: Chờ xử lý - silenced: Tạm ẩn + silenced: Hạn chế suspended: Vô hiệu hóa title: Trạng thái moderation_notes: Nhật ký kiểm duyệt @@ -185,26 +187,30 @@ vi: search: Tìm kiếm search_same_email_domain: Tra cứu email search_same_ip: Tra cứu IP + security_measures: + only_password: Chỉ mật khẩu + password_and_2fa: Mật khẩu và 2FA + password_and_sign_in_token: Mật khẩu và email sensitive: Nhạy cảm - sensitized: đánh dấu nhạy cảm + sensitized: Đánh dấu nhạy cảm shared_inbox_url: Hộp thư của máy chủ người này show: created_reports: Lượt báo cáo targeted_reports: Báo cáo bởi người khác silence: Ẩn - silenced: Đã ẩn + silenced: Hạn chế statuses: Tút subscribe: Đăng ký - suspended: Đã vô hiệu hóa + suspended: Vô hiệu hóa suspension_irreversible: Toàn bộ dữ liệu của người dùng này sẽ bị xóa hết. Bạn vẫn có thể ngừng vô hiệu hóa nhưng dữ liệu sẽ không thể phục hồi. suspension_reversible_hint_html: Mọi dữ liệu của người này sẽ bị xóa sạch vào %{date}. Trước thời hạn này, dữ liệu vẫn có thể phục hồi. Nếu bạn muốn xóa dữ liệu của người này ngay lập tức, hãy tiếp tục. time_in_queue: Đang chờ cách đây %{time} title: Tài khoản unconfirmed_email: Email chưa được xác thực undo_sensitized: Đánh dấu bình thường - undo_silenced: Bỏ ẩn + undo_silenced: Bỏ hạn chế undo_suspension: Bỏ vô hiệu hóa - unsilenced_msg: Bỏ ẩn %{username} thành công + unsilenced_msg: Bỏ hạn chế %{username} thành công unsubscribe: Hủy đăng ký unsuspended_msg: Đã kích hoạt lại %{username} thành công username: Tài khoản @@ -216,41 +222,43 @@ vi: action_types: assigned_to_self_report: Tự xử lý báo cáo change_email_user: Đổi email - confirm_user: Xác nhận người dùng - create_account_warning: Gửi cảnh cáo - create_announcement: Tạo thông báo - create_custom_emoji: Tạo Emoji mới - create_domain_allow: Cho phép máy chủ - create_domain_block: Chặn máy chủ - create_email_domain_block: Chặn tên miền email - create_ip_block: Chặn IP + confirm_user: Xác thực + create_account_warning: Cảnh cáo + create_announcement: Tạo thông báo mới + create_custom_emoji: Tạo emoji mới + create_domain_allow: Tạo cho phép máy chủ mới + create_domain_block: Tạo chặn máy chủ mới + create_email_domain_block: Tạo chặn tên miền email mới + create_ip_block: Tạo chặn IP mới create_unavailable_domain: Tạo máy chủ không khả dụng demote_user: Xóa chức vụ destroy_announcement: Xóa thông báo - destroy_custom_emoji: Xóa Emoji - destroy_domain_allow: Bỏ máy chủ cho phép - destroy_domain_block: Bỏ chặn máy chủ - destroy_email_domain_block: Bỏ chặn email - destroy_ip_block: Bỏ chặn IP + destroy_custom_emoji: Xóa emoji + destroy_domain_allow: Xóa máy chủ cho phép + destroy_domain_block: Xóa máy chủ đã chặn + destroy_email_domain_block: Xóa tên miền email đã chặn + destroy_ip_block: Xóa IP đã chặn destroy_status: Xóa tút destroy_unavailable_domain: Xóa máy chủ không khả dụng - disable_2fa_user: Xóa xác thực hai bước - disable_custom_emoji: Vô hiệu hóa Emoji + disable_2fa_user: Vô hiệu hóa 2FA + disable_custom_emoji: Vô hiệu hóa emoji + disable_sign_in_token_auth_user: Tắt xác thực bằng email cho người dùng disable_user: Tạm khóa người dùng - enable_custom_emoji: Cho phép Emoji - enable_user: Mở khóa - memorialize_account: Tài khoản tưởng niệm + enable_custom_emoji: Kích hoạt Emoji + enable_sign_in_token_auth_user: Bật xác thực bằng email cho người dùng + enable_user: Kích hoạt lại người dùng + memorialize_account: Đánh dấu tưởng niệm promote_user: Chỉ định chức vụ remove_avatar_user: Xóa ảnh đại diện reopen_report: Mở lại báo cáo reset_password_user: Đặt lại mật khẩu resolve_report: Xử lý báo cáo - sensitive_account: Đánh dấu nhạy cảm cho tài khoản - silence_account: Ẩn - suspend_account: Vô hiệu hóa + sensitive_account: Đánh dấu nhạy cảm + silence_account: Đánh dấu hạn chế + suspend_account: Đánh dấu vô hiệu hóa unassigned_report: Báo cáo chưa xử lý - unsensitive_account: Đánh dấu bình thường - unsilence_account: Bỏ ẩn + unsensitive_account: Bỏ nhạy cảm + unsilence_account: Bỏ hạn chế unsuspend_account: Bỏ vô hiệu hóa update_announcement: Cập nhật thông báo update_custom_emoji: Cập nhật Emoji mới @@ -279,11 +287,13 @@ vi: destroy_unavailable_domain_html: "%{name} tiếp tục phân phối với máy chủ %{target}" disable_2fa_user_html: "%{name} đã vô hiệu hóa xác thực hai bước của %{target}" disable_custom_emoji_html: "%{name} đã ẩn emoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} tắt xác thực email của %{target}" disable_user_html: "%{name} vô hiệu hóa đăng nhập %{target}" enable_custom_emoji_html: "%{name} cho phép Emoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} bật xác thực email của %{target}" enable_user_html: "%{name} mở khóa cho người dùng %{target}" memorialize_account_html: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm" - promote_user_html: "%{name} đã chỉ định chức vụ cho %{target}" + promote_user_html: "%{name} chỉ định chức vụ cho %{target}" remove_avatar_user_html: "%{name} đã xóa ảnh đại diện của %{target}" reopen_report_html: "%{name} mở lại báo cáo %{target}" reset_password_user_html: "%{name} đặt lại mật khẩu của người dùng %{target}" @@ -355,32 +365,9 @@ vi: updated_msg: Cập nhật thành công Emoji! upload: Tải lên dashboard: - authorized_fetch_mode: Xác thực cao cấp - backlog: công việc tồn đọng - config: Thiết lập - feature_deletions: Xóa tài khoản - feature_invites: Mời đăng ký - feature_profile_directory: Danh sách thành viên - feature_registrations: Đăng ký - feature_relay: Mạng liên hợp - feature_timeline_preview: Xem trước bảng tin - features: Tính năng - hidden_service: Liên kết với các dịch vụ ẩn - open_reports: báo cáo - pending_tags: hashtag chờ duyệt - pending_users: người dùng chờ duyệt - recent_users: Người dùng mới nhất - search: Tìm kiếm nội dung - single_user_mode: Máy chủ chỉ có 1 người software: Phần mềm space: Dung lượng lưu trữ title: Thống kê - total_users: tổng số người dùng - trends: Xu hướng - week_interactions: tương tác trong tuần này - week_users_active: hoạt động trong tuần này - week_users_new: đăng ký mới trong tuần - whitelist_mode: Giới hạn mạng liên hợp domain_allows: add_new: Cho phép liên hợp với máy chủ created_msg: Máy chủ đã được kích hoạt liên hợp thành công @@ -415,13 +402,13 @@ vi: rejecting_media: từ chối các tập tin phương tiện truyền thông rejecting_reports: từ chối báo cáo severity: - silence: bị ẩn + silence: bị hạn chế suspend: bị vô hiệu hóa show: affected_accounts: other: "%{count} tài khoản trong cơ sở dữ liệu bị ảnh hưởng" retroactive: - silence: Những tài khoản bị ẩn ở máy chủ này + silence: Bỏ hạn chế những tài khoản ở máy chủ này suspend: Ngưng vô hiệu hóa các tài khoản ở máy chủ này title: Hủy chặn máy chủ %{domain} undo: Hủy bỏ @@ -558,6 +545,7 @@ vi: resolved: Đã xử lý xong resolved_msg: Đã xử lý báo cáo xong! status: Trạng thái + target_origin: Nguồn đã báo cáo người dùng title: Báo cáo unassign: Bỏ qua unresolved: Chờ xử lý @@ -657,7 +645,7 @@ vi: title: Cho phép hashtags theo xu hướng mà không cần xem xét trước trends: desc_html: Hiển thị công khai các hashtag được xem xét trước đây hiện đang là xu hướng - title: Xu hướng hashtags + title: Hashtag xu hướng site_uploads: delete: Xóa tập tin đã tải lên destroyed_msg: Đã xóa tập tin tải lên thành công! @@ -719,7 +707,7 @@ vi: aliases: add_new: Kết nối tài khoản created_msg: Tạo thành công một tên hiển thị mới. Bây giờ bạn có thể bắt đầu di chuyển từ tài khoản cũ. - deleted_msg: Xóa thành công tên hiển thị. Chuyển từ tài khoản này sang tài khoản này sẽ không còn có thể. + deleted_msg: Xóa thành công kết nối tài khoản. Bạn sẽ không thể chuyển từ tài khoản đó sang tài khoản này được. empty: Bạn không có tài khoản cũ nào. hint_html: Nếu bạn muốn chuyển từ máy chủ khác sang máy chủ này, bắt buộc bạn phải tạo tên người dùng mới thì mới có thể tiến hành chuyển được người theo dõi. Hành động này không ảnh hưởng gì và có thể đảo ngược. Việc di chuyển tài khoản được bắt đầu từ tài khoản cũ. remove: Bỏ liên kết bí danh @@ -731,7 +719,7 @@ vi: discovery: Khám phá localization: body: Mastodon Tiếng Việt được dịch bởi Hồ Nhất Duy. - guide_link: https://mas.to/@duy + guide_link: https://crowdin.com/project/mastodon guide_link_text: Đây là trang cá nhân của anh ấy. sensitive_content: Nội dung nhạy cảm toot_layout: Tút @@ -800,11 +788,11 @@ vi: error: Rất tiếc, đã xảy ra lỗi khi tìm kiếm tài khoản từ nơi khác follow: Theo dõi follow_request: Bạn đã gửi yêu cầu theo dõi tới - following: Chúc mừng! Bạn đã trở thành người theo dõi của + following: Chúc mừng! Bạn đã trở thành người theo dõi post_follow: - close: Bạn có muốn đóng cửa sổ này? - return: Hiện trên trang cá nhân - web: Truy cập web + close: Bạn có thể đóng cửa sổ này rồi. + return: Xem trang cá nhân + web: Mở trong Mastodon title: Theo dõi %{acct} challenge: confirm: Tiếp tục @@ -893,7 +881,7 @@ vi: add_new: Thêm mới errors: limit: Bạn đã đạt tới số lượng hashtag tối đa - hint_html: "Hashtags thường dùng là gì? Chúng là những hashtag sẽ được hiển thị nổi bật trên trang cá nhân của bạn, cho phép mọi người tìm kiếm các bài đăng công khai của bạn có chứa các hashtag đó. Tính năng này có thể dùng để đánh dấu chuỗi tác phẩm sáng tạo hoặc dự án dài hạn." + hint_html: "Hashtag thường dùng là gì? Chúng là những hashtag sẽ được hiển thị nổi bật trên trang cá nhân của bạn, cho phép mọi người tìm kiếm các bài đăng công khai của bạn có chứa các hashtag đó. Tính năng này có thể dùng để đánh dấu chuỗi tác phẩm sáng tạo hoặc dự án dài hạn." filters: contexts: account: Trang cá nhân @@ -991,6 +979,17 @@ vi: lists: errors: limit: Bạn đã đạt đến số lượng danh sách tối đa + login_activities: + authentication_methods: + otp: xác thực 2 bước + password: mật khẩu + sign_in_token: mã an toàn email + webauthn: khóa bảo mật + description_html: Nếu có lần đăng nhập đáng ngờ, hãy đổi ngay mật khẩu và bật xác thực hai bước. + empty: Không có lịch sử đăng nhập + failed_sign_in_html: Đăng nhập thất bại bằng %{method} từ %{ip} (%{browser}) + successful_sign_in_html: Đăng nhập thành công bằng %{method} từ %{ip} (%{browser}) + title: Lịch sử đăng nhập media_attachments: validations: images_and_video: Không thể đính kèm video vào tút đã chứa hình ảnh @@ -1002,7 +1001,7 @@ vi: cancel_explanation: Hủy chuyển hướng sẽ kích hoạt lại tài khoản hiện tại của bạn, nhưng sẽ không chuyển được những người theo dõi ở tài khoản mới. cancelled_msg: Đã hủy chuyển hướng xong. errors: - already_moved: là tài khoản bạn đã dời sang rồi + already_moved: là tài khoản bạn đã chuyển sang rồi missing_also_known_as: chưa kết nối với tài khoản này move_to_self: không thể là tài khoản hiện tại not_found: không thể tìm thấy @@ -1151,7 +1150,7 @@ vi: proceed: Tiếp tục trả lời prompt: Bạn có muốn trả lời tút này? scheduled_statuses: - over_daily_limit: Bạn đã vượt quá giới hạn của các tút được lên lịch %{limit} cho ngày hôm đó + over_daily_limit: Bạn đã vượt qua giới hạn được lên lịch đăng tút %{limit} hôm nay over_total_limit: Bạn đã vượt quá giới hạn %{limit} của các tút được lên lịch too_soon: Ngày lên lịch phải trong tương lai sessions: @@ -1183,7 +1182,7 @@ vi: adobe_air: Adobe Air android: Android blackberry: Blackberry - chrome_os: ChromeOS + chrome_os: Chrome OS firefox_os: Hệ điều hành Firefox ios: iOS linux: Linux @@ -1195,6 +1194,7 @@ vi: revoke: Gỡ revoke_success: Gỡ phiên thành công title: Phiên + view_authentication_history: Xem lại lịch sử đăng nhập tài khoản của bạn settings: account: Bảo mật account_settings: Cài đặt tài khoản @@ -1206,7 +1206,7 @@ vi: development: Lập trình edit_profile: Trang cá nhân export: Xuất dữ liệu - featured_tags: Hashtags thường dùng + featured_tags: Hashtag thường dùng identity_proofs: Bằng chứng nhận dạng import: Nhập dữ liệu import_and_export: Dữ liệu @@ -1215,6 +1215,7 @@ vi: preferences: Chung profile: Trang cá nhân relationships: Quan hệ + statuses_cleanup: Tự động xóa tút cũ two_factor_authentication: Xác thực hai bước webauthn_authentication: Khóa bảo mật statuses: @@ -1254,12 +1255,46 @@ vi: title: '%{name}: "%{quote}"' visibilities: direct: Nhắn tin - private: Người theo dõi + private: Riêng tư private_long: Chỉ người theo dõi mới được xem public: Công khai public_long: Ai cũng có thể thấy - unlisted: Riêng tư + unlisted: Hạn chế unlisted_long: Không hiện trên bảng tin máy chủ + statuses_cleanup: + enabled: Tự động xóa những tút cũ + enabled_hint: Tự động xóa các tút của bạn khi chúng tới thời điểm nhất định, trừ những trường hợp ngoại lệ bên dưới + exceptions: Ngoại trừ + explanation: Việc xóa tút rất tốn thời gian vì tút của bạn sẽ tăng dần theo năm tháng. Bởi lý do này, bạn nên xóa những tút cũ khi chúng đã đạt tới thời điểm nhất định. + ignore_favs: Bỏ qua số luợt thích + ignore_reblogs: Bỏ qua số lượt chia sẻ + interaction_exceptions: Ngoại lệ dựa trên tương tác + interaction_exceptions_explanation: Lưu ý rằng không có gì đảm bảo rằng các bài đăng sẽ bị xóa nếu chúng xuống dưới ngưỡng mức yêu thích hoặc chia sẻ sau khi đã từng vượt qua. + keep_direct: Giữ lại tin nhắn + keep_direct_hint: Không xóa tin nhắn của bạn + keep_media: Giữ lại những tút có đính kèm media + keep_media_hint: Không xóa những tút có đính kèm media của bạn + keep_pinned: Giữ lại những tút đã ghim + keep_pinned_hint: Không xóa những tút đã ghim của bạn + keep_polls: Giữ lại những cuộc bình chọn + keep_polls_hint: Không xóa những tút dạng bình chọn + keep_self_bookmark: Giữ lại những tút đã lưu + keep_self_bookmark_hint: Không xóa những tút của bạn nếu bạn có lưu chúng + keep_self_fav: Giữ lại những tút yêu thích + keep_self_fav_hint: Không xóa những tút của bạn nếu bạn có thích chúng + min_age: + '1209600': 2 tuần + '15778476': 6 tháng + '2629746': 1 tháng + '31556952': 1 năm + '5259492': 2 tháng + '63113904': 2 năm + '7889238': 3 tháng + min_age_label: Thời điểm + min_favs: Giữ những tút yêu thích lâu hơn + min_favs_hint: Những tút có lượt thích nhiều hơn số này sẽ không bị xóa. Để trống nếu bạn muốn xóa hết + min_reblogs: Giữ những tút đã chia sẻ lâu hơn + min_reblogs_hint: Những tút có lượt chia sẻ nhiều hơn số này sẽ không bị xóa. Để trống nếu bạn muốn xóa hết stream_entries: pinned: Tút được ghim reblogged: chia sẻ @@ -1363,13 +1398,13 @@ vi: disable: Tài khoản %{acct} của bạn đã bị vô hiệu hóa none: Cảnh báo cho %{acct} sensitive: Ảnh và video tải lên của %{acct} sẽ bị đánh dấu là nhạy cảm - silence: Tài khoản %{acct} của bạn đã bị tạm ẩn + silence: Tài khoản %{acct} của bạn đã bị hạn chế suspend: Tài khoản %{acct} của bạn đã bị vô hiệu hóa title: disable: Tài khoản bị đóng băng none: Cảnh báo sensitive: Ảnh và video của bạn sẽ bị đánh dấu nhạy cảm - silence: Tài khoản bị tạm ẩn + silence: Tài khoản bị hạn chế suspend: Toài khoản bị vô hiệu hóa welcome: edit_profile_action: Cài đặt trang cá nhân @@ -1406,7 +1441,7 @@ vi: error: Có vấn đề khi thêm khóa bảo mật. Xin thử lại. success: Đã thêm khóa bảo mật mới thành công. delete: Xóa - delete_confirmation: Bạn có chắc chắn muốn xóa khóa bảo mật này? + delete_confirmation: Bạn thật sự muốn xóa khóa bảo mật này? description_html: Nếu bạn kích hoạt khóa bảo mật, bạn sẽ cần dùng một trong những khóa bảo mật đó mỗi khi đăng nhập. destroy: error: Có vấn đề khi xóa khóa bảo mật. Xin thử lại. diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index b9c07bd29..5fefb96f9 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -4,7 +4,7 @@ zh-CN: about_hashtag_html: 这里展示的是带有话题标签 #%{hashtag} 的公开嘟文。如果你想与他们互动,你需要在任意一个 Mastodon 站点或与其兼容的网站上拥有一个帐户。 about_mastodon_html: Mastodon 是一个建立在开放式网络协议和自由、开源软件之上的社交网络,有着类似于电子邮件的分布式设计。 about_this: 关于本站 - active_count_after: 活跃 + active_count_after: 活跃用户 active_footnote: 每月活跃用户 administered_by: 本站管理员: api: API @@ -28,7 +28,7 @@ zh-CN: rules_html: 如果你想要在此Mastodon服务器上拥有一个账户,你必须遵守相应的规则,摘要如下: see_whats_happening: 看一看现在在发生什么 server_stats: 服务器统计数据: - source_code: 源代码 + source_code: 源码 status_count_after: other: 条嘟文 status_count_before: 他们共嘟出了 @@ -77,7 +77,7 @@ zh-CN: roles: admin: 管理员 bot: 机器人 - group: 群组 + group: 组 moderator: 监察员 unavailable: 个人资料不可用 unfollow: 取消关注 @@ -93,18 +93,18 @@ zh-CN: accounts: add_email_domain_block: 封禁电子邮箱域名 approve: 批准 - approve_all: 批准全部 + approve_all: 全部批准 approved_msg: 成功批准 %{username} 的注册申请 are_you_sure: 你确定吗? avatar: 头像 by_domain: 域名 change_email: - changed_msg: 帐户电子邮件地址更改成功! - current_email: 当前的电子邮件地址 - label: 更改电子邮件地址 - new_email: 新的电子邮件地址 + changed_msg: 已成功更改账号的电子邮箱! + current_email: 当前的电子邮箱 + label: 更改电子邮箱 + new_email: 新的电子邮箱 submit: 更改电子邮件地址 - title: 为 %{username} 更改电子邮件地址 + title: 为 %{username} 更改电子邮箱 confirm: 确认 confirmed: 已确认 confirming: 确认中 @@ -113,6 +113,7 @@ zh-CN: demote: 降任 destroyed_msg: "%{username} 的数据已进入等待队列,即将被删除" disable: 冻结 + disable_sign_in_token_auth: 禁用电子邮件令牌认证 disable_two_factor_authentication: 停用双重认证 disabled: 已冻结 display_name: 昵称 @@ -121,6 +122,7 @@ zh-CN: email: 电子邮件地址 email_status: 电子邮件地址状态 enable: 解冻 + enable_sign_in_token_auth: 启用电子邮件令牌认证 enabled: 已启用 enabled_msg: 成功解冻 %{username} 的帐号 followers: 关注者 @@ -185,6 +187,10 @@ zh-CN: search: 搜索 search_same_email_domain: 其他具有相同电子邮箱域名的用户 search_same_ip: 具有相同IP的其他用户 + security_measures: + only_password: 仅密码 + password_and_2fa: 密码和双重认证 + password_and_sign_in_token: 密码和电子邮件令牌 sensitive: 敏感内容 sensitized: 已标记为敏感内容 shared_inbox_url: 公用收件箱(Shared Inbox)URL @@ -204,7 +210,7 @@ zh-CN: undo_sensitized: 去除敏感内容标记 undo_silenced: 解除隐藏 undo_suspension: 解除封禁 - unsilenced_msg: 成功解除对 %{username} 的隐藏 + unsilenced_msg: 成功解除 %{username} 的帐号限制 unsubscribe: 取消订阅 unsuspended_msg: 已成功取消封禁 %{username} 的帐号 username: 用户名 @@ -234,10 +240,12 @@ zh-CN: destroy_ip_block: 删除 IP 规则 destroy_status: 删除嘟文 destroy_unavailable_domain: 删除不可用域名 - disable_2fa_user: 禁用双重认证 + disable_2fa_user: 停用双重认证 disable_custom_emoji: 禁用自定义表情符号 + disable_sign_in_token_auth_user: 为用户禁用电子邮件令牌认证 disable_user: 禁用用户 enable_custom_emoji: 启用自定义表情符号 + enable_sign_in_token_auth_user: 为用户启用电子邮件令牌认证 enable_user: 启用用户 memorialize_account: 将账户设为追悼模式 promote_user: 给用户升任 @@ -279,8 +287,10 @@ zh-CN: destroy_unavailable_domain_html: "%{name} 恢复了向域名 %{target} 的投递" disable_2fa_user_html: "%{name} 停用了用户 %{target} 的双重认证" disable_custom_emoji_html: "%{name} 停用了自定义表情 %{target}" + disable_sign_in_token_auth_user_html: "%{name} 已为 %{target} 禁用电子邮件令牌认证" disable_user_html: "%{name} 将用户 %{target} 设置为禁止登录" enable_custom_emoji_html: "%{name} 启用了自定义表情 %{target}" + enable_sign_in_token_auth_user_html: "%{name} 已为 %{target} 启用电子邮件令牌认证" enable_user_html: "%{name} 将用户 %{target} 设置为允许登录" memorialize_account_html: "%{name} 将 %{target} 设置为追悼帐户" promote_user_html: "%{name} 对用户 %{target} 进行了升任操作" @@ -355,32 +365,9 @@ zh-CN: updated_msg: 表情更新成功! upload: 上传新表情 dashboard: - authorized_fetch_mode: 安全模式 - backlog: 未处理任务数 - config: 服务器配置 - feature_deletions: 帐户删除 - feature_invites: 邀请链接 - feature_profile_directory: 用户目录 - feature_registrations: 公开注册 - feature_relay: 联邦中继站 - feature_timeline_preview: 时间轴预览 - features: 功能 - hidden_service: 匿名服务连通性 - open_reports: 待处理举报数 - pending_tags: 等待审核的标签 - pending_users: 等待审核的用户 - recent_users: 新用户 - search: 全文搜索 - single_user_mode: 单用户模式 software: 软件 space: 存储使用情况 title: 信息面板 - total_users: 总用户数 - trends: 趋势 - week_interactions: 本周互动数 - week_users_active: 本周活跃用户数 - week_users_new: 本周新用户数 - whitelist_mode: 限联模式 domain_allows: add_new: 允许和域名跨站交互 created_msg: 域名已被允许跨站交互 @@ -558,6 +545,7 @@ zh-CN: resolved: 已处理 resolved_msg: 举报处理成功! status: 状态 + target_origin: 被举报账号的来源 title: 举报 unassign: 取消接管 unresolved: 未处理 @@ -724,7 +712,7 @@ zh-CN: hint_html: 如果你想把另一个帐号迁移到这里,你可以先在这里创建一个别名。如果你想把关注者迁移过来,这一步是必须的。设置别名的操作时无害而且可以恢复的帐号迁移的操作会从旧帐号开始。 remove: 取消关联别名 appearance: - advanced_web_interface: 高级web界面 + advanced_web_interface: 高级 Web 界面 advanced_web_interface_hint: 如果你想使用整个屏幕宽度,高级 web 界面允许您配置多个不同的栏目,可以同时看到更多的信息:主页、通知、跨站时间轴、任意数量的列表和话题标签。 animations_and_accessibility: 动画和访问选项 confirmation_dialogs: 确认对话框 @@ -991,6 +979,17 @@ zh-CN: lists: errors: limit: 你所建立的列表数量已经达到上限 + login_activities: + authentication_methods: + otp: 双因素认证应用 + password: 密码 + sign_in_token: 电子邮件安全代码 + webauthn: 安全密钥 + description_html: 如有您无法识别的活动,请考虑更改密码并启用双因素认证。 + empty: 没有可用的认证记录 + failed_sign_in_html: 失败的 %{method} 登录尝试,来自 %{ip} (%{browser}) + successful_sign_in_html: 通过 %{method} 成功登录,来自 %{ip} (%{browser}) + title: 认证历史 media_attachments: validations: images_and_video: 无法在嘟文中同时插入视频和图片 @@ -1195,6 +1194,7 @@ zh-CN: revoke: 注销 revoke_success: 会话注销成功 title: 会话 + view_authentication_history: 查看账户的认证历史 settings: account: 帐号 account_settings: 帐户设置 @@ -1215,6 +1215,7 @@ zh-CN: preferences: 首选项 profile: 个人资料 relationships: 关注管理 + statuses_cleanup: 自动删除嘟文 two_factor_authentication: 双重认证 webauthn_authentication: 安全密钥 statuses: @@ -1260,6 +1261,40 @@ zh-CN: public_long: 所有人可见,并会出现在公共时间轴上 unlisted: 不公开 unlisted_long: 所有人可见,但不会出现在公共时间轴上 + statuses_cleanup: + enabled: 自动删除旧嘟文 + enabled_hint: 当您的嘟文达到指定的过期时间后自动删除,除非它们与下面的例外之一相匹配 + exceptions: 例外 + explanation: 因为删除帖子是一个昂贵的操作,所以这个操作会随着时间的推移而缓慢地完成,当服务器没有其他忙碌的时候。 为此原因,您的帖子可能会在达到年龄界限后被删除。 + ignore_favs: 取消喜欢 + ignore_reblogs: 忽略转嘟 + interaction_exceptions: 基于互动的例外 + interaction_exceptions_explanation: 请注意,如果嘟文超出转嘟和喜欢的阈值之后,又降到阈值以下,不能保证会被删除。 + keep_direct: 保留私信 + keep_direct_hint: 没有删除你的任何私信 + keep_media: 保留带媒体附件的嘟文 + keep_media_hint: 没有删除任何包含媒体附件的嘟文 + keep_pinned: 保留置顶嘟文 + keep_pinned_hint: 没有删除你的任何置顶嘟文 + keep_polls: 保留投票 + keep_polls_hint: 没有删除你的任何投票 + keep_self_bookmark: 保存被你加入书签的嘟文 + keep_self_bookmark_hint: 如果你已将自己的嘟文添加书签,就不会删除这些嘟文 + keep_self_fav: 保留你喜欢的嘟文 + keep_self_fav_hint: 如果你喜欢了自己的嘟文,则不会删除这些嘟文 + min_age: + '1209600': 2周 + '15778476': 6个月 + '2629746': 1个月 + '31556952': 1年 + '5259492': 2个月 + '63113904': 两年 + '7889238': 3个月 + min_age_label: 过期阈值 + min_favs: 保留如下嘟文:喜欢数超过 + min_favs_hint: 喜欢数超过该阈值的的嘟文不被删除。如果留空,则无视喜欢数,直接删除。 + min_reblogs: 保留如下嘟文:转嘟属超过 + min_reblogs_hint: 转嘟数超过该阈值的的嘟文不被删除。如果留空,则无视被转嘟的数量,直接删除。 stream_entries: pinned: 置顶嘟文 reblogged: 转嘟 @@ -1359,7 +1394,7 @@ zh-CN: month: "%Y年%m月" two_factor_authentication: add: 添加 - disable: 停用 + disable: 停用双重认证 disabled_success: 双重身份验证成功禁用 edit: 编辑 enabled: 双重认证已启用 diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index ad9bc2ceb..185b88b51 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -2,8 +2,8 @@ zh-HK: about: about_hashtag_html: 這些是包含「#%{hashtag}」標籤的公開文章。只要你是任何聯盟網站的用戶,便可以與他們互動。 - about_mastodon_html: Mastodon(萬象)是屬於未來的社交網絡︰無廣告煩擾、無企業監控、設計講道義、分散無大台!立即重奪個人資料的控制權,使用 Mastodon 吧! - about_this: 關於本服務站 + about_mastodon_html: Mastodon(萬象)是屬於未來的社交網路︰無廣告煩擾、無企業監控、設計講道義、分散無大台!立即重奪個人資料的控制權,使用 Mastodon 吧! + about_this: 關於本伺服器 active_count_after: 活躍 active_footnote: 每月活躍使用者 (MAU) administered_by: 管理者: @@ -115,6 +115,7 @@ zh-HK: demote: 降權 destroyed_msg: 即將刪除 %{username} 的數據 disable: 停用 + disable_sign_in_token_auth: 停用 e-mail 驗證碼 disable_two_factor_authentication: 關閉雙重認證 disabled: 已凍結 display_name: 顯示名稱 @@ -123,6 +124,7 @@ zh-HK: email: 電郵地址 email_status: 電郵狀態 enable: 解除凍結 + enable_sign_in_token_auth: 啟用 e-mail 驗證碼 enabled: 已啟用 enabled_msg: 成功解除 %{username} 帳號的凍結 followers: 關注者 @@ -187,6 +189,10 @@ zh-HK: search: 搜尋 search_same_email_domain: 其他有相同電郵網域的使用者 search_same_ip: 其他有相同 IP 位址的使用者 + security_measures: + only_password: 僅密碼 + password_and_2fa: 密碼和兩步認證 + password_and_sign_in_token: 密碼與 e-mail 驗證碼 sensitive: 敏感内容 sensitized: 已標記為敏感內容 shared_inbox_url: 公共收件箱(Shared Inbox)URL @@ -226,6 +232,7 @@ zh-HK: create_domain_block: 封鎖域名 create_email_domain_block: 封鎖電郵域名 create_ip_block: 新增IP規則 + create_unavailable_domain: 創建無效域名 demote_user: 將帳號降級 destroy_announcement: 刪除公告 destroy_custom_emoji: 刪除自定的 Emoji 表情符號 @@ -234,10 +241,13 @@ zh-HK: destroy_email_domain_block: 刪除已封鎖的電郵城名 destroy_ip_block: 刪除 IP 規則 destroy_status: 刪除文章 + destroy_unavailable_domain: 刪除無效域名 disable_2fa_user: 停用兩步驟驗證 disable_custom_emoji: 停用自定的 Emoji 表情符號 + disable_sign_in_token_auth_user: 停用該使用者之 e-mail 驗證碼 disable_user: 停用帳號 enable_custom_emoji: 啟用自定的 Emoji 表情符號 + enable_sign_in_token_auth_user: 啟用該使用者之 e-mail 驗證碼 enable_user: 啟用帳號 memorialize_account: 把帳號設定為悼念帳號 promote_user: 提升帳號權限 @@ -256,6 +266,51 @@ zh-HK: update_custom_emoji: 更新自定的 Emoji 表情符號 update_domain_block: 更新域名阻隔 update_status: 更新文章 + actions: + assigned_to_self_report_html: "%{name} 指派了 %{target} 的檢舉給自己" + change_email_user_html: "%{name} 更改了使用者 %{target} 的 e-mail 地址" + confirm_user_html: "%{name} 已確認使用者 %{target} 的 e-mail 地址" + create_account_warning_html: "%{name} 已警告了 %{target}" + create_announcement_html: "%{name} 新增了公告 %{target}" + create_custom_emoji_html: "%{name} 加入了新的 Emoji %{target}" + create_domain_allow_html: "%{name} 允許網域 %{target} 加入聯邦宇宙" + create_domain_block_html: "%{name} 封鎖了網域 %{target}" + create_email_domain_block_html: "%{name} 封鎖了 e-mail 網域 %{target}" + create_ip_block_html: "%{name} 已經設定了針對 IP %{target} 的規則" + create_unavailable_domain_html: "%{name} 停止了對網域 %{target} 的更新通知" + demote_user_html: "%{name} 降權了 %{target}" + destroy_announcement_html: "%{name} 刪除了公告 %{target}" + destroy_custom_emoji_html: "%{name} 刪除了 Emoji %{target}" + destroy_domain_allow_html: "%{name} 禁止網域 %{target} 加入聯邦宇宙" + destroy_domain_block_html: "%{name} 封鎖了網域 %{target}" + destroy_email_domain_block_html: "%{name} 解除封鎖 e-mail 網域 %{target}" + destroy_ip_block_html: "%{name} 已經刪除了 IP %{target} 的規則" + destroy_status_html: "%{name} 刪除了 %{target} 的嘟文" + destroy_unavailable_domain_html: "%{name} 恢復了對網域 %{target} 的更新通知" + disable_2fa_user_html: "%{name} 停用了使用者 %{target} 的雙重認證" + disable_custom_emoji_html: "%{name} 停用了 Emoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} 停用了使用者 %{target} 的 e-mail 驗證碼" + disable_user_html: "%{name} 把使用者 %{target} 設定為禁止登入" + enable_custom_emoji_html: "%{name} 啟用了 Emoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} 啟用了使用者 %{target} 的 e-mail 驗證碼" + enable_user_html: "%{name} 把使用者 %{target} 設定為允許登入" + memorialize_account_html: "%{name} 把 %{target} 設定為追悼帳號" + promote_user_html: "%{name} 提升了使用者 %{target} 的權限" + remove_avatar_user_html: "%{name} 移除了 %{target} 的大頭貼" + reopen_report_html: "%{name} 重新開啟 %{target} 的檢舉案例" + reset_password_user_html: "%{name} 重設了使用者 %{target} 的密碼" + resolve_report_html: "%{name} 處理了 %{target} 的檢舉案例" + sensitive_account_html: "%{name} 將 %{target} 的媒體標記為敏感內容" + silence_account_html: "%{name} 限制了帳號 %{target}" + suspend_account_html: "%{name} 將帳號 %{target} 停權" + unassigned_report_html: "%{name} 取消指派 %{target} 的檢舉" + unsensitive_account_html: "%{name} 將 %{target} 的媒體取消標記為敏感內容" + unsilence_account_html: "%{name} 取消了用戶 %{target} 的限制狀態" + unsuspend_account_html: "%{name} 將帳號 %{target} 解除停權" + update_announcement_html: "%{name} 更新了公告 %{target}" + update_custom_emoji_html: "%{name} 更新了 Emoji 表情符號 %{target}" + update_domain_block_html: "%{name} 更新了對 %{target} 的網域封鎖" + update_status_html: "%{name} 更新了 %{target} 的嘟文" deleted_status: "(已刪除文章)" empty: 找不到任何日誌。 filter_by_action: 按動作篩選 @@ -270,10 +325,12 @@ zh-HK: new: create: 建立公告 title: 新增公告 + publish: 已發佈 published_msg: 成功發布公告! scheduled_for: 排定 %{time} scheduled_msg: 公告已排程! title: 公告 + unpublish: 未發佈 unpublished_msg: 成功取消發布公告! updated_msg: 成功更新公告! custom_emojis: @@ -310,32 +367,9 @@ zh-HK: updated_msg: 已更新表情符號 upload: 上傳新的表情符號 dashboard: - authorized_fetch_mode: 安全模式 - backlog: 未處理工作數 - config: 設定 - feature_deletions: 刪除帳號功能 - feature_invites: 邀請連結 - feature_profile_directory: 個人資料目錄 - feature_registrations: 註冊 - feature_relay: 聯網中繼站 - feature_timeline_preview: 時間軸預覽 - features: 功能 - hidden_service: 與隱密服務互連 - open_reports: 未處理的舉報個案數 - pending_tags: 等待審核的主題標籤 - pending_users: 等待審核的使用者 - recent_users: 最近加入的使用者 - search: 全文搜尋 - single_user_mode: 單一使用者模式 software: 軟件 space: 儲存空間用量 title: 儀表板 - total_users: 總使用者數 - trends: 近期流行 - week_interactions: 本週互動次數 - week_users_active: 本週活躍使用者數 - week_users_new: 本週新使用者數 - whitelist_mode: 白名單模式 domain_allows: add_new: 將網域加入白名單 created_msg: 網域已成功加入白名單 @@ -394,9 +428,33 @@ zh-HK: create: 新增網域 title: 新增電郵網域阻隔 title: 電郵網域阻隔 + follow_recommendations: + description_html: "跟隨建議幫助新使用者快速找到有趣內容。 當使用者尚未和其他帳號足夠多的互動以產生個人化建議時,以下帳號將被推荐。這些是一句指定語言的近期參與度和本地粉絲數最高之帳戶組合每日重新計算。" + language: 按語言 + status: 狀態 + suppress: 隱藏跟隨建議 + suppressed: 已隱藏 + title: 跟隨建議 + unsuppress: 還原跟隨建議 instances: + back_to_all: 全部 + back_to_limited: 已靜音 + back_to_warning: 警告 by_domain: 域名 + delivery: + all: 全部 + clear: 清除遞送錯誤 + restart: 重新啟動遞送 + stop: 停止遞送 + title: 遞送 + unavailable: 離線 + unavailable_message: 無法遞送 + warning: 警告 + warning_message: + other: 遞送失敗 %{count} 天 delivery_available: 可傳送 + delivery_error_days: 遞送失敗天數 + delivery_error_hint: 若 %{count} 天皆無法達成遞送,將會被自動標記為離線。 empty: 找不到域名。 known_accounts: other: "%{count} 已知的帳號" @@ -489,13 +547,17 @@ zh-HK: resolved: 已處理 resolved_msg: 舉報個案已被處理! status: 狀態 + target_origin: 被檢舉帳號來源 title: 舉報 unassign: 取消指派 unresolved: 未處理 updated_at: 更新 rules: add_new: 新增規則 + delete: 刪除 + description_html: 通常大部份宣稱已經閱讀並同意服務條款的人,在出現事故之前都沒有仔細閱讀條款內文。為了讓人方便閱讀服務條款,請以條列的形式將伺服器規則盡可能地寫得簡短一點。嘗試把每一項規則寫得簡短易明,但又不要把它們拆得過份瑣碎。 edit: 編輯規則 + empty: 尚未定義伺服器規則 title: 伺服器守則 settings: activity_api_enabled: @@ -603,6 +665,14 @@ zh-HK: no_status_selected: 因未選擇嘟文而未變更。 title: 帳戶文章 with_media: 含有媒體檔案 + system_checks: + database_schema_check: + message_html: 有待處理的資料庫轉移 (database migration) 。請執行以確保應用程式行為合乎預期 + rules_check: + action: 管理伺服器規則 + message_html: 您尚未定義任何伺服器規則 + sidekiq_process_check: + message_html: 沒有 %{value} 佇列的 Sidekiq 處理程序。請檢查 Sidekiq 設定檔案 tags: accounts_today: 今日特殊使用 accounts_week: 今週特殊使用 @@ -623,6 +693,7 @@ zh-HK: add_new: 新增 delete: 刪除 edit_preset: 設定警告預設 + empty: 您尚未定義任何預設警告 title: 管理警告預設 admin_mailer: new_pending_account: @@ -910,6 +981,17 @@ zh-HK: lists: errors: limit: 你所建立的列表數量已經達到上限 + login_activities: + authentication_methods: + otp: 兩步認證軟體 + password: 密碼 + sign_in_token: 電子郵件安全碼 + webauthn: 安全密鑰 + description_html: 若發現有無法辨識的帳號動態,請考慮更改密碼以及啟用雙重階段驗證。 + empty: 沒有驗證歷史 + failed_sign_in_html: 以 %{method} 從 %{ip} (%{browser}) 登入失敗 + successful_sign_in_html: 以 %{method} 從 %{ip} (%{browser}) 成功登入 + title: 驗證操作歷史 media_attachments: validations: images_and_video: 不能在已有圖片的文章上加入影片 @@ -980,10 +1062,14 @@ zh-HK: body: "%{name} 在文章中提及你︰" subject: "%{name} 在文章中提及你" title: 新的提及 + poll: + subject: "%{name} 發起的投票已截止" reblog: body: 你的文章被 %{name} 轉推: subject: "%{name} 轉推了你的文章" title: 新的轉推 + status: + subject: "%{name} 剛發表了文章" notifications: email_events: 電郵通知活動 email_events_hint: 選擇你想接收通知的活動: @@ -1110,6 +1196,7 @@ zh-HK: revoke: 取消 revoke_success: 作業階段成功取消 title: 作業階段 + view_authentication_history: 檢視帳號驗證紀錄 settings: account: 帳戶 account_settings: 帳戶設定 @@ -1130,6 +1217,7 @@ zh-HK: preferences: 偏好設定 profile: 個人資料 relationships: 關注及追隨者 + statuses_cleanup: 自動嘟文刪除 two_factor_authentication: 雙重認證 webauthn_authentication: 安全鑰匙 statuses: @@ -1168,12 +1256,47 @@ zh-HK: sign_in_to_participate: 登入以加入討論 title: "%{name}:「%{quote}」" visibilities: + direct: 私人訊息 private: 關注者觀看 private_long: 只有關注你的人能看到 public: 公開 public_long: 所有人都能看到 unlisted: 公開,但不在公共時間軸顯示 unlisted_long: 所有人都能看到,但不在公共時間軸(本站時間軸、跨站時間軸)顯示 + statuses_cleanup: + enabled: 自動刪除舊嘟文 + enabled_hint: 當您的嘟文達到指定的時間門檻後,自動刪除嘟文,除非他們符合其中以下例外條件之一 + exceptions: 例外 + explanation: 由於刪除嘟文對伺服器而言是相當耗費資源的操作,將僅於伺服器不繁忙時慢慢執行。由此緣故,您的嘟文將可能超過設定之時間門檻一會兒後才被刪除。 + ignore_favs: 忽略最愛 + ignore_reblogs: 忽略轉嘟 + interaction_exceptions: 根據互動的例外 + interaction_exceptions_explanation: 請注意嘟文是無法保證被刪除的,如果在一次處理過後嘟文低於最愛或轉嘟的門檻。 + keep_direct: 保留私訊 + keep_direct_hint: 不會刪除任何您的私訊 + keep_media: 保留包含媒體內容的嘟文 + keep_media_hint: 不會刪除您包含媒體內容的嘟文 + keep_pinned: 保留釘選嘟文 + keep_pinned_hint: 不會刪除您的釘選嘟文 + keep_polls: 保留投票 + keep_polls_hint: 不會刪除您的投票 + keep_self_bookmark: 保留您已標記為書簽之嘟文 + keep_self_bookmark_hint: 不會刪除您已標記為書簽之嘟文 + keep_self_fav: 保留您已標記為最愛之嘟文 + keep_self_fav_hint: 不會刪除您已標記為最愛之嘟文 + min_age: + '1209600': 2 週 + '15778476': 6 個月 + '2629746': 1 個月 + '31556952': 1 年 + '5259492': 2 個月 + '63113904': 2 年 + '7889238': 3 個月 + min_age_label: 按時間篩選 + min_favs: 保留超過嘟文最愛門檻 + min_favs_hint: 如果您嘟文已收到超過最愛門檻則不會刪除。留白表示不論最愛數量皆刪除嘟文。 + min_reblogs: 保留超過嘟文轉嘟門檻 + min_reblogs_hint: 如果您嘟文已收到超過轉嘟門檻則不會刪除。留白表示不論轉嘟數量皆刪除嘟文。 stream_entries: pinned: 置頂文章 reblogged: 轉推 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 852c333ca..b2cfeafac 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -113,6 +113,7 @@ zh-TW: demote: 降級 destroyed_msg: 即將刪除 %{username} 的數據 disable: 停用 + disable_sign_in_token_auth: 停用電子信箱 token 驗證 disable_two_factor_authentication: 停用兩階段認證 disabled: 已停用 display_name: 暱稱 @@ -121,6 +122,7 @@ zh-TW: email: 電子信箱地址 email_status: 電子信箱狀態 enable: 啟用 + enable_sign_in_token_auth: 啟用電子信箱 token 驗證 enabled: 已啟用 enabled_msg: 成功解除 %{username} 帳戶的凍結 followers: 關注者 @@ -185,6 +187,10 @@ zh-TW: search: 搜尋 search_same_email_domain: 其他有同個電子郵件網域的使用者 search_same_ip: 其他有同個 IP 的使用者 + security_measures: + only_password: 僅使用密碼 + password_and_2fa: 密碼及二重因素驗證 + password_and_sign_in_token: 密碼及電子信箱 token 驗證 sensitive: 敏感内容 sensitized: 已標記為敏感內容 shared_inbox_url: 共享收件箱網址 @@ -224,6 +230,7 @@ zh-TW: create_domain_block: 建立阻擋網域 create_email_domain_block: 封鎖電子郵件站台 create_ip_block: 新增IP規則 + create_unavailable_domain: 新增無法存取的網域 demote_user: 把用戶降級 destroy_announcement: 刪除公告 destroy_custom_emoji: 刪除自訂顏文字 @@ -232,10 +239,13 @@ zh-TW: destroy_email_domain_block: 刪除阻擋電郵網域 destroy_ip_block: 刪除 IP 規則 destroy_status: 刪除狀態 + destroy_unavailable_domain: 刪除無法存取的網域 disable_2fa_user: 停用兩階段認證 disable_custom_emoji: 停用自訂顏文字 + disable_sign_in_token_auth_user: 停用使用者電子信箱 token 驗證 disable_user: 停用帳戶 enable_custom_emoji: 啓用自訂顏文字 + enable_sign_in_token_auth_user: 啟用使用者電子信箱 token 驗證 enable_user: 啓用帳戶 memorialize_account: 設定成紀念帳戶 promote_user: 把用戶升級 @@ -254,6 +264,51 @@ zh-TW: update_custom_emoji: 更新自訂顏文字 update_domain_block: 更新封鎖網域 update_status: 更新狀態 + actions: + assigned_to_self_report_html: "%{name} 將報告 %{target} 指派給自己" + change_email_user_html: "%{name} 變更了使用者 %{target} 的電子信箱地址" + confirm_user_html: "%{name} 確認了使用者 %{target} 的電子信箱位址" + create_account_warning_html: "%{name} 已對 %{target} 送出警告" + create_announcement_html: "%{name} 新增了公告 %{target}" + create_custom_emoji_html: "%{name} 上傳了新自訂表情符號 %{target}" + create_domain_allow_html: "%{name} 允許 %{target} 網域加入站點聯盟" + create_domain_block_html: "%{name} 封鎖了網域 %{target}" + create_email_domain_block_html: "%{name} 封鎖了電子信箱網域 %{target}" + create_ip_block_html: "%{name} 已經設定了IP %{target} 的規則" + create_unavailable_domain_html: "%{name} 停止發送至網域 %{target}" + demote_user_html: "%{name} 將使用者 %{target} 降級" + destroy_announcement_html: "%{name} 刪除了公告 %{target}" + destroy_custom_emoji_html: "%{name} 停用了自訂表情符號 %{target}" + destroy_domain_allow_html: "%{name} 不允許與網域 %{target} 加入站點聯盟" + destroy_domain_block_html: "%{name} 取消了對網域 %{target} 的封鎖" + destroy_email_domain_block_html: "%{name} 取消了對電子信箱網域 %{target} 的封鎖" + destroy_ip_block_html: "%{name} 刪除了 IP %{target} 的規則" + destroy_status_html: "%{name} 刪除了 %{target} 的嘟文" + destroy_unavailable_domain_html: "%{name} 恢復了對網域 %{target} 的發送" + disable_2fa_user_html: "%{name} 停用了使用者 %{target} 的兩階段認證" + disable_custom_emoji_html: "%{name} 停用了自訂表情符號 %{target}" + disable_sign_in_token_auth_user_html: "%{name} 停用了 %{target} 之使用者電子信箱 token 驗證" + disable_user_html: "%{name} 將使用者 %{target} 設定為禁止登入" + enable_custom_emoji_html: "%{name} 啟用了自訂表情符號 %{target}" + enable_sign_in_token_auth_user_html: "%{name} 啟用了 %{target} 之使用者電子信箱 token 驗證" + enable_user_html: "%{name} 將使用者 %{target} 設定為允許登入" + memorialize_account_html: "%{name} 將 %{target} 設定為追悼帳戶" + promote_user_html: "%{name} 對使用者 %{target} 進行了晉級操作" + remove_avatar_user_html: "%{name} 移除了 %{target} 的大頭貼" + reopen_report_html: "%{name} 重新開啟 %{target} 的檢舉" + reset_password_user_html: "%{name} 重新設定了使用者 %{target} 的密碼" + resolve_report_html: "%{name} 處理了 %{target} 的檢舉" + sensitive_account_html: "%{name} 將 %{target} 的媒體檔案標記為敏感內容" + silence_account_html: "%{name} 靜音了使用者 %{target}" + suspend_account_html: "%{name} 停權了使用者 %{target}" + unassigned_report_html: "%{name} 取消指派 %{target} 的檢舉" + unsensitive_account_html: "%{name} 將 %{target} 的媒體檔案的敏感狀態取消" + unsilence_account_html: "%{name} 取消了使用者 %{target} 的靜音狀態" + unsuspend_account_html: "%{name} 取消了使用者 %{target} 的停權狀態" + update_announcement_html: "%{name} 更新了公告 %{target}" + update_custom_emoji_html: "%{name} 更新了自訂表情符號 %{target}" + update_domain_block_html: "%{name} 更新了 %{target} 之網域封鎖" + update_status_html: "%{name} 更新了 %{target} 的嘟文" deleted_status: "(已刪除嘟文)" empty: 找不到 log filter_by_action: 按動作篩選 @@ -268,10 +323,12 @@ zh-TW: new: create: 建立公告 title: 新增公告 + publish: 發佈 published_msg: 成功發布公告! scheduled_for: 排定 %{time} scheduled_msg: 公告已排定公開! title: 公告 + unpublish: 取消發佈 unpublished_msg: 成功取消發布公告! updated_msg: 成功更新公告! custom_emojis: @@ -308,32 +365,25 @@ zh-TW: updated_msg: 已更新表情符號! upload: 上傳新的表情符號 dashboard: - authorized_fetch_mode: 安全模式 - backlog: 未處理工作數 - config: 設定 - feature_deletions: 帳戶刪除 - feature_invites: 邀請連結 - feature_profile_directory: 個人資料目錄 - feature_registrations: 註冊 - feature_relay: 聯邦中繼站 - feature_timeline_preview: 時間軸預覽 - features: 功能 - hidden_service: 與隱密服務互連 - open_reports: 待處理檢舉數 - pending_tags: 等待審核的主題標籤 - pending_users: 等待審核的使用者 - recent_users: 最近加入的使用者 - search: 全文搜尋 - single_user_mode: 單一使用者模式 + active_users: 活躍使用者 + interactions: 互動 + media_storage: 媒體儲存空間 + new_users: 新使用者 + opened_reports: 開啟的報告 + pending_reports_html: + other: "%{count} 份待處理報告" + pending_tags_html: + other: "%{count} 個待處理主題標籤" + pending_users_html: + other: "%{count} 位待處理使用者" + resolved_reports: 解決的報告 software: 軟體 + sources: 註冊來源 space: 儲存空間用量 title: 儀表板 - total_users: 總使用者數 - trends: 趨勢 - week_interactions: 本週互動次數 - week_users_active: 本週活躍使用者數 - week_users_new: 本週新使用者數 - whitelist_mode: 白名單模式 + top_languages: 最活躍語言 + top_servers: 最活躍伺服器 + website: 網站 domain_allows: add_new: 將網域加入白名單 created_msg: 網域已成功加入白名單 @@ -392,14 +442,35 @@ zh-TW: create: 新增站點 title: 新增電子信箱黑名單項目 title: 電子信箱黑名單 + follow_recommendations: + description_html: |- + 跟隨建議幫助新使用者們快速找到有趣的內容. 當使用者沒有與其他帳號有足夠多的互動以建立個人化跟隨建議時,這些帳號將會被推荐。這些帳號將基於某選定語言之高互動和高本地跟隨者數量帳號而 + 每日重新更新。 + language: 對於語言 + status: 狀態 + suppress: 取消跟隨建議 + suppressed: 取消 + title: 跟隨建議 + unsuppress: 回復跟隨建議 instances: back_to_all: 所有 + back_to_limited: 受限制的 back_to_warning: 警告 by_domain: 站台 delivery: all: 所有 + clear: 清除遞送錯誤 + restart: 重新啟動遞送 + stop: 停止遞送 + title: 遞送 + unavailable: 無法使用 + unavailable_message: 無法使用遞送 warning: 警告 + warning_message: + other: 遞送失敗 %{count} 天 delivery_available: 可傳送 + delivery_error_days: 遞送失敗天數 + delivery_error_hint: 若 %{count} 日皆無法遞送 ,則會自動標記無法遞送。 empty: 找不到網域 known_accounts: other: "%{count} 已知的帳戶" @@ -492,6 +563,7 @@ zh-TW: resolved: 已解決 resolved_msg: 檢舉已處理! status: 嘟文 + target_origin: 檢舉帳戶之來源 title: 檢舉 unassign: 取消指派 unresolved: 未解決 @@ -499,7 +571,9 @@ zh-TW: rules: add_new: 新增規則 delete: 刪除 + description_html: 雖然大多數人皆宣稱已閱讀並同意服務條款,通常直到某些問題發生時人們從未讀過。以透過提供條列式規則的方式讓您的伺服器規則可以一目了然。試著維持各項條款簡短而明瞭,但也試著不要將條款切割為許多分開的項目。 edit: 編輯規則 + empty: 未曾定義任何伺服器規則 title: 伺服器規則 settings: activity_api_enabled: @@ -635,6 +709,7 @@ zh-TW: add_new: 新增 delete: 刪除 edit_preset: 編輯預設警告 + empty: 您未曾定義任何預設警告 title: 管理預設警告 admin_mailer: new_pending_account: @@ -922,6 +997,17 @@ zh-TW: lists: errors: limit: 你所建立的列表數量已經達到上限 + login_activities: + authentication_methods: + otp: 兩步驟驗證應用程式 + password: 密碼 + sign_in_token: 電子郵件安全碼 + webauthn: 安全金鑰 + description_html: 若您看到您不認識的活動,請考慮變更您的密碼或啟用兩步驟驗證。 + empty: 沒有可用的驗證歷史紀錄 + failed_sign_in_html: 使用來自 %{ip} (%{browser}) 的 %{method} 登入嘗試失敗 + successful_sign_in_html: 使用來自 %{ip} (%{browser}) 的 %{method} 登入成功 + title: 認證歷史紀錄 media_attachments: validations: images_and_video: 無法在已有圖片的文章上加入影片 @@ -940,16 +1026,39 @@ zh-TW: on_cooldown: 你正在處於冷卻(CD)狀態 followers_count: 轉移時的追隨者 incoming_migrations: 自另一個帳戶轉移 + incoming_migrations_html: 要從其他帳號移動到此帳號的話,首先您必須建立帳號別名。 + moved_msg: 您的帳號正被重新導向到 %{acct},您的追蹤者也會同步轉移至該帳號。 + not_redirecting: 您的帳號目前尚未重新導向到任何其他帳號。 + on_cooldown: 您最近已轉移過您的帳號。此功能將在 %{count} 天後可再度使用。 + past_migrations: 以往的轉移紀錄 proceed_with_move: 移動關注者 redirected_msg: 您的帳戶現在指向 %{acct} + redirecting_to: 您的帳號目前正被重新導向到 %{acct} set_redirect: 設定重新導向 + warning: + backreference_required: 新的帳號必須先設定為反向參照到目前帳號 + before: 在進行下一步驟之前,請詳細閱讀以下説明: + cooldown: 在轉移帳號後會有一段等待時間,在等待時間內您將無法再次轉移 + disabled_account: 之後您的目前帳號將完全無法使用。但您可以存取資料匯出與重新啟用。 + followers: 此動作將會把目前帳號的所有追蹤者轉移至新帳號 + only_redirect_html: 或者,您也可以僅在您的個人資料中放置重新導向。 + other_data: 其他資料並不會自動轉移 + redirect: 您目前的帳號將會在個人資料頁面新增重新導向公告,並會被排除在搜尋結果之外 moderation: title: 營運 + move_handler: + carry_blocks_over_text: 此使用者轉移自被您封鎖的 %{acct}。 + carry_mutes_over_text: 此使用者轉移自被您靜音的 %{acct}。 + copy_account_note_text: 此使用者轉移自 %{acct},以下是您之前關於他們的備註: notification_mailer: digest: action: 閱覽所有通知 body: 以下是自%{since}你最後一次登入以來錯過的訊息摘要 mention: "%{name} 在此提及了你:" + new_followers_summary: + other: 此外,您在離開時獲得了 %{count} 位新的追蹤者!超棒的! + subject: + other: "從您上次造訪以來有 %{count} 個新通知 \U0001F418" title: 你不在的時候... favourite: body: '你的嘟文被 %{name} 加入了最愛:' @@ -969,29 +1078,99 @@ zh-TW: body: "%{name} 在嘟文中提及你:" subject: "%{name} 在嘟文中提及你" title: 新的提及 + poll: + subject: 由 %{name} 發起的投票已結束 reblog: body: '你的嘟文被 %{name} 轉嘟:' subject: "%{name} 轉嘟了你的嘟文" title: 新的轉嘟 + status: + subject: "%{name} 剛剛嘟文" notifications: email_events: 電子郵件通知設定 email_events_hint: 選取你想接收通知的事件: other_settings: 其他通知設定 + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + otp_authentication: + code_hint: 請輸入您驗證應用程式所產生的代碼以確認 + description_html: 若您啟用使用驗證應用程式的兩步驟驗證,您每次登入都需要輸入由您的手機所產生的權杖。 + enable: 啟用 + instructions_html: "請用您手機上的 Google Authenticator 或類似的 TOTP 應用程式掃描此 QR code。從現在開始,該應用程式將會產生您每次登入都必須輸入的權杖。" + manual_instructions: 如果您無法掃描 QR code,則必須手動輸入此明文密碼: + setup: 設定 + wrong_code: 您輸入的驗證碼無效!伺服器時間或是裝置時間無誤嗎? pagination: newer: 較新 next: 下一頁 older: 較舊 prev: 上一頁 + truncate: "…" + polls: + errors: + already_voted: 您已經投過票了 + duplicate_options: 包含重複項目 + duration_too_long: 太久了! + duration_too_short: 車速太快了! + expired: 投票已結束 + invalid_choice: 您所選的投票選項並不存在 + over_character_limit: 不能多於 %{max} 個字元 + too_few_options: 必須包含至少一個項目 + too_many_options: 不能包含多於 %{max} 個項目 preferences: other: 其他 + posting_defaults: 嘟文預設值 + public_timelines: 公開時間軸 + reactions: + errors: + limit_reached: 達到可回應之上限 + unrecognized_emoji: 並非一個可識別的 emoji relationships: + activity: 帳號動態 + dormant: 潛水中 + follow_selected_followers: 跟隨所選的跟隨者 + followers: 跟隨者 + following: 跟隨中 + invited: 已邀請 + last_active: 最後上線 + most_recent: 最近 moved: 已轉移 + mutual: 共同 + primary: 主要 + relationship: 關係 + remove_selected_domains: 從所選網域中移除所有追隨者 + remove_selected_followers: 移除所選的跟隨者 + remove_selected_follows: 取消跟隨所選使用者 status: 帳戶狀態 remote_follow: acct: 請輸入您的使用者名稱@站點網域 missing_resource: 無法找到資源 + no_account_html: 還沒有帳號?您可以於這裡註冊 proceed: 下一步 prompt: '您希望關注:' + reason_html: "為什麼要經過這個步驟?因為%{instance}未必是您註冊的伺服器,我們需要先將您帶回您駐在的伺服器。" + remote_interaction: + favourite: + proceed: 加入到最愛 + prompt: 您欲將此嘟文加入最愛 + reblog: + proceed: 確認轉嘟 + prompt: 您想轉嘟此嘟文: + reply: + proceed: 確認回覆 + prompt: 您想回覆此嘟文 + scheduled_statuses: + over_daily_limit: 您已經超過了本日排定發嘟的限額 (%{limit}) + over_total_limit: 您已經超過了排定發嘟的限額 (%{limit}) + too_soon: 嘟文不可以改變過去哦,只能預定未來 (咦) sessions: activity: 最近活動 browser: 瀏覽器 @@ -1033,6 +1212,7 @@ zh-TW: revoke: 取消 revoke_success: Session 取消成功 title: 作業階段 + view_authentication_history: 檢視您帳號的身份驗證歷史紀錄 settings: account: 帳戶 account_settings: 帳戶設定 @@ -1052,12 +1232,23 @@ zh-TW: notifications: 通知 preferences: 偏好設定 profile: 使用者資訊 + relationships: 跟隨中與跟隨者 + statuses_cleanup: 自動貼文刪除 two_factor_authentication: 兩階段認證 + webauthn_authentication: 安全金鑰 statuses: attached: + audio: + other: "%{count} 則音訊" description: 附件: %{attached} + image: + other: "%{count} 張圖片" + video: + other: "%{count} 段影片" boosted_from_html: 轉嘟自 %{acct_link} content_warning: 內容警告: %{warning} + disallowed_hashtags: + other: 含有不得使用的標籤: %{tags} errors: in_reply_not_found: 您嘗試回覆的嘟文看起來不存在。 language_detection: 自動偵測語言 @@ -1069,41 +1260,201 @@ zh-TW: private: 不能置頂非公開的嘟文 reblog: 不能置頂轉嘟 poll: + total_people: + other: "%{count} 個人" + total_votes: + other: "%{count} 票" vote: 投票 show_more: 顯示更多 + show_newer: 顯示較新嘟文 + show_older: 顯示較舊嘟文 + show_thread: 顯示討論串 + sign_in_to_participate: 登入以加入討論 + title: "%{name}:「%{quote}」" visibilities: + direct: 私訊 private: 僅關注者 private_long: 只有關注你的人能看到 public: 公開 public_long: 所有人都能看到 unlisted: 公開,但不在公共時間軸顯示 unlisted_long: 所有人都能看到,但不會出現在公共時間軸上 + statuses_cleanup: + enabled: 自動刪除舊貼文 + enabled_hint: 一旦達到指定的保存期限,就會自動刪除您的貼文,除非貼文符合下列例外 + exceptions: 例外 + explanation: 因為刪除貼文是昂貴的動作,所以當伺服器不那麼忙碌的時候才會慢慢完成。因此,您的貼文會在到達保存期限後一段時間才會被刪除。 + ignore_favs: 忽略最愛 + ignore_reblogs: 忽略轉嘟 + interaction_exceptions: 以互動為基礎的例外 + interaction_exceptions_explanation: 請注意嘟文是無法保證被刪除的,如果在一次處理過後嘟文低於最愛或轉嘟的門檻。 + keep_direct: 保留私訊 + keep_direct_hint: 不會刪除任何您的私訊 + keep_media: 保留包含媒體內容的嘟文 + keep_media_hint: 不會刪除您包含媒體內容的嘟文 + keep_pinned: 保留釘選嘟文 + keep_pinned_hint: 不會刪除您的釘選嘟文 + keep_polls: 保留投票 + keep_polls_hint: 不會刪除您的投票 + keep_self_bookmark: 保留您已標記為書簽之嘟文 + keep_self_bookmark_hint: 不會刪除您已標記為書簽之嘟文 + keep_self_fav: 保留您已標記為最愛之嘟文 + keep_self_fav_hint: 不會刪除您已標記為最愛之嘟文 + min_age: + '1209600': 2 週 + '15778476': 6 個月 + '2629746': 1 個月 + '31556952': 1 年 + '5259492': 2 個月 + '63113904': 2 年 + '7889238': 3 個月 + min_age_label: 按時間篩選 + min_favs: 保留超過嘟文最愛門檻 + min_favs_hint: 如果您嘟文已收到超過最愛門檻則不會刪除。留白表示不論最愛數量皆刪除嘟文。 + min_reblogs: 保留超過嘟文轉嘟門檻 + min_reblogs_hint: 如果您嘟文已收到超過轉嘟門檻則不會刪除。留白表示不論轉嘟數量皆刪除嘟文。 stream_entries: pinned: 置頂嘟文 reblogged: 轉嘟 sensitive_content: 敏感內容 + tags: + does_not_match_previous_name: 與先前的名稱不吻合 terms: + body_html: | +

        隱私權政策

        +

        我們會蒐集哪些資訊?

        + +
          +
        • 基本帳號資訊:若您在此伺服氣上註冊,您可能會被要求輸入使用者名稱、電子郵件地址與密碼。您也可能會輸入額外的個人檔案資訊,如顯示名稱或簡介等,以及上傳個人資料圖片與封面圖片。使用者名稱、顯示名稱、簡介、個人檔案名稱與封面圖片一律都會公開陳列。
        • +
        • 貼文、追蹤與其他資訊:您追蹤的人的清單會是公開陳列的,您的追蹤者同樣如此。當您地交了一條訊息,日期與時間,以及您從哪個應用程式遞交訊息也同樣會被儲存。訊息可能會包含多媒體附件,如圖片或影片。公開或未列出的貼文都可公開使用。當您在您的個人資料上特別突顯了某篇貼文,那麼這也會是公開資訊。您的貼文會被遞送給您的追蹤者,在某些情況下,這代表了它們會被遞送到其他伺服器,並儲存在那邊。當您刪除貼文時,同樣會遞送給您的追蹤者。轉發或收藏其他貼文的動作也同樣是公開的。
        • +
        • 直接與僅限追蹤者的貼文:所有貼文都由伺服器儲存並處理。僅限追蹤者的貼文會被遞送給您的追蹤者,以及其中所提及的使用者,而直接貼文則僅會遞送給其中提到的使用者。在某些情況下,這代表了它們會被遞送到其他伺服器,並儲存在那邊。我們非常努力地讓這些貼文的存取僅供被授權的人使用,但其他伺服器可能沒有這樣做。因此審閱您的追蹤者屬於的伺服器也很重要。您可以在設定中切換批准與回絕新追蹤者的選項。請注意,伺服器的營運者與任何接收的伺服器都可以檢視這輛的訊息,且接收者可能會螢幕截圖、複製或以其他方式轉分享這類訊息。所以請不要透過 Mastodon 分享任何危險的資訊。
        • +
        • IP 與詮釋資料:當您登入時,我們會紀錄從登入的 IP 位置,以及您瀏覽器應用程式的名稱。您可以在設定中審閱並撤銷所有已登入的工作階段。最新使用的 IP 位置會儲存長達 12 個月。我們也可能會保留伺服器紀錄檔,其中包含了每個請求存取我們的伺服器的 IP 位置。
        + +
        + +

        我們會將您的資訊用於何種目的?

        + +

        我們從您那裡蒐集而來的資訊都可能作為以下用途:

        + +
          +
        • 提供 Mastodon 的核心功能。您只能在登入後與其他人的內容互動,並張貼您自己的內容。舉例來說,您可能會追蹤其他人,以在您個人化的家時間軸中檢視各種貼文的結合。
        • +
        • 協助社群管理,例如比較您的 IP 位置與其他已知的 IP 位置進行比較,以確定是否有逃避禁令或其他違規行為。
        • +
        • 您提供的電子郵件地址可能會用於傳送關於其他人與您的內容互動的資訊、通知或是訊息給您,以及回覆查詢,及/或其他請求或問題。
        • +
        + +
        + +

        我們如何保護您的資訊?

        + +

        當您輸入、遞交或存取您的個人資訊時,我們會實施各種安全措施來維護您個人資訊的安全。除此之外,您的瀏覽器工作階段與您應用程式及 API 間的流量都以 SSL 進行保護,您的密碼也使用了相當強的單向演算法來雜湊。您可以啟用兩步驟驗證來進一步強化您帳號的安全程度。

        + +
        + +

        我們的資料保留政策是什麼?

        + +

        我們將努力:

        + +
          +
        • 保留包含所有對此伺服器請求的 IP 位置的伺服器紀錄檔,只要此類紀錄檔不保留超過 90 天。
        • +
        • 保留與註冊使用者相關的 IP 位置不超過 12 個月。
        • +
        + +

        您可以請求並下載您內容的封存檔案,包含了您的貼文、多媒體附件、個人檔案圖片與封面圖片。

        + +

        您隨時都可以不可逆地刪除您的帳號。

        + +
        + +

        我們會使用 cookies 嗎?

        +

        是的。Cookies 是網站或其服務提供者透過您的網路瀏覽器(若您允許)傳送到您電腦硬碟的小檔案。這些 cookies 讓網站可以識別您的瀏覽器,以及如果您有註冊帳號的話,同時關聯到您已註冊的帳號。

        + +

        我們使用 cookies 來了解並儲存您的偏好設定以供未來存取。

        + +
        + +

        我們會向外界揭露任何資訊嗎?

        + +

        我們不會出售、交易或是以其他方式向外界傳輸您的個人身份資料。這不包含協助我們營運網站、開展業務或是服務您的可信第三方,只要這些第三方同意對這些資訊保密。當我們認為發佈您的資訊是為了遵守法律、執行我們網站的政策、或是保護我們或其他人的權利、財產或安全時,我們也可能會發佈您的資訊。

        + +

        您的公開內容可能會網路中其他伺服器下載。您的公開與僅追蹤者貼文將會遞送到您的追蹤者所在的伺服器,直接訊息則會遞送到接收者所在的伺服器,前提是這些追蹤者或接收者在不同的伺服器上。

        + +

        當您授權應用程式使用您的帳號時,根據您所批准的授權範圍,其可能會存取您的公開個人檔案資訊、您的追蹤清單、您的追蹤者、您的清單、您所有的貼文以及您的收藏。應用程式永遠無法存取您的電子郵件地址或密碼。

        + +
        + +

        兒童使用網站

        + +

        如果伺服器位於歐盟或歐洲經濟區中:我們的網站、產品與服務均供至少 16 歲的人使用。如果您小於 16 歲,根據 GDPR(一般資料保護規範)的要求,請勿使用此網站。

        + +

        若此伺服器位於美國:我們的網站、產品與服務均供至少 13 歲的人使用。如果您小於 13 歲,根據 COPPA(兒童線上隱私保護法)的要求,請勿使用此忘站。

        + +

        如果此伺服器位於其他司法管轄區,則法律要求可能會有所不同。

        + +
        + +

        我們隱私權政策的變更

        + +

        若我們決定變更我們的隱私權政策,我們將會在此頁面張貼那些變更。

        + +

        此文件以 CC-BY-SA 授權。最後更新時間為2018年3月7日。

        + +

        最初改編自 Discourse 隱私權政策

        title: "%{instance} 使用條款和隱私權政策" themes: contrast: Mastodon(高對比) + default: Mastodon(深色) mastodon-light: Mastodon(亮色主題) time: formats: default: "%Y年%-m月%d日 %H:%M" + month: "%b %Y" two_factor_authentication: + add: 新增 disable: 停用 + disabled_success: 已成功啟用兩步驟驗證 + edit: 編輯 enabled: 兩階段認證已啟用 enabled_success: 已成功啟用兩階段認證 generate_recovery_codes: 產生備用驗證碼 lost_recovery_codes: 讓你可以在遺失手機時,使用備用驗證碼登入。如果你遺失了備用驗證碼,可以在這裏產生一批新的,舊有的備用驗證碼將會失效。 + methods: 兩步驟方式 + otp: 驗證應用程式 recovery_codes: 備份備用驗證碼 recovery_codes_regenerated: 成功產生新的備用驗證碼 recovery_instructions_html: 如果你的手機無法使用,你可以使用下列任意一個備用驗證碼來重新獲得帳戶的訪問權。請妥善保管好你的備用驗證碼(例如,你可以將它們列印出來,與你的其他重要文件放在一起)。 + webauthn: 安全金鑰 user_mailer: backup_ready: explanation: 你要求的 Mastodon 帳戶完整備份檔案現已就緒,可供下載! subject: 你的備份檔已可供下載 title: 檔案匯出 + sign_in_token: + details: 以下是嘗試登入的詳細資訊: + explanation: 我們偵測到有人試圖從陌生的 IP 位置登入您的帳號。如果這是您,請在「登入確認」頁面輸入安全碼: + further_actions: 如果這不是你,請立即到這裡變更你的密碼,並啟用兩步驟驗證: + subject: 請確認登入嘗試 + title: 登入嘗試 + warning: + explanation: + disable: 您將無法以任何方式登入或使用您的帳號,但您的個人資料頁面和其他資料仍保持完整。 + sensitive: 您上傳的媒體檔案或連結的媒體將會被標記為敏感。 + silence: 您仍然可以使用您的帳號,但僅有已追蹤您的人才能看到您在此伺服器的貼文,您也可能會從公開清單中被排除。但其他人仍可手動追蹤您。 + suspend: 您將不能使用您的帳號,您的個人資料頁面及其他資料將不再能被取得。您仍可在資料被完全刪除前要求下載你的資料,但我們仍會保留一部份資料,以防止有人規避停權處罰。 + get_in_touch: 您可以回覆此電子郵件並與 %{instance} 的工作人員們聯絡。 + review_server_policies: 檢視伺服器政策 + statuses: 特別是: + subject: + disable: 您的帳號 %{acct} 已被凍結 + none: 對 %{acct} 的警告 + sensitive: 您帳號 %{acct} 張貼的媒體已被標記為敏感內容 + silence: 您的帳號 %{acct} 已被限制 + suspend: 您的帳號 %{acct} 已被停權 + title: + disable: 帳號已被涷結 + none: 警告 + sensitive: 您的媒體已被標記為敏感內容 + silence: 帳號已被限制 + suspend: 帳號己被停用 welcome: edit_profile_action: 設定個人資料 edit_profile_step: 你可以設定你的個人資料,包括上傳頭像、橫幅圖片、變更顯示名稱等等。如果你想在新的關注者關注你之前對他們進行審核,你也可以選擇為你的帳戶設為「私人」。 @@ -1122,12 +1473,31 @@ zh-TW: tips: 小幫手 title: "%{name} 歡迎你的加入!" users: + follow_limit_reached: 您無法追蹤多於 %{limit} 個人 + generic_access_help_html: 存取您的帳號時遇到困難?您可以透過 %{email} 取得協助 invalid_otp_token: 兩階段認證碼不正確 + invalid_sign_in_token: 安全碼無效 otp_lost_help_html: 如果你無法訪問這兩者,可以通過 %{email} 與我們聯繫 seamless_external_login: 由於你是從外部系統登入,所以不能設定密碼與電子郵件。 signed_in_as: 目前登入的帳戶: + suspicious_sign_in_confirmation: 您之前似乎未從此裝置登入過,再加上您也有一段時間沒有登入了,因此我們剛剛傳送了安全碼到您的電子郵件地址以確認真的是您。 verification: explanation_html: 您在 Mastodon 個人資料頁上所列出的連結,可以用此方式驗證您確實掌控該連結網頁的內容。您可以在連結的網頁上加上一個連回 Mastodon 個人資料頁的連結,該連結的原始碼 必須包含rel="me"屬性。連結的顯示文字可自由發揮,以下為範例: verification: 驗證連結 webauthn_credentials: + add: 新增安全金鑰 + create: + error: 新增安全金鑰時出現了問題。請再試一次。 + success: 你已成功加入安全金鑰。 + delete: 刪除 + delete_confirmation: 您確定要移除這把安全金鑰嗎? + description_html: 如果您啟用安全金鑰驗證的話,您將在登入時需要使用其中一把安全金鑰。 + destroy: + error: 移除安全金鑰時出現了問題。請再試一次。 + success: 您已成功將安全金鑰移除。 + invalid_credential: 無效的安全金鑰 + nickname_hint: 輸入您新安全金鑰的暱稱 + not_enabled: 您尚未啟用 WebAuthn + not_supported: 此瀏覽器並不支援安全金鑰 + otp_required: 請先啟用兩步驟驗證以使用安全金鑰。 registered_on: 註冊於 %{date} diff --git a/config/navigation.rb b/config/navigation.rb index b3462c48d..37bfd7549 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -18,9 +18,10 @@ SimpleNavigation::Configuration.run do |navigation| n.item :relationships, safe_join([fa_icon('users fw'), t('settings.relationships')]), relationships_url, if: -> { current_user.functional? } n.item :filters, safe_join([fa_icon('filter fw'), t('filters.index.title')]), filters_path, highlights_on: %r{/filters}, if: -> { current_user.functional? } + n.item :statuses_cleanup, safe_join([fa_icon('history fw'), t('settings.statuses_cleanup')]), statuses_cleanup_url, if: -> { current_user.functional? } n.item :security, safe_join([fa_icon('lock fw'), t('settings.account')]), edit_user_registration_url do |s| - s.item :password, safe_join([fa_icon('lock fw'), t('settings.account_settings')]), edit_user_registration_url, highlights_on: %r{/auth/edit|/settings/delete|/settings/migration|/settings/aliases} + s.item :password, safe_join([fa_icon('lock fw'), t('settings.account_settings')]), edit_user_registration_url, highlights_on: %r{/auth/edit|/settings/delete|/settings/migration|/settings/aliases|/settings/login_activities} s.item :two_factor_authentication, safe_join([fa_icon('mobile fw'), t('settings.two_factor_authentication')]), settings_two_factor_authentication_methods_url, highlights_on: %r{/settings/two_factor_authentication|/settings/otp_authentication|/settings/security_keys} s.item :authorized_apps, safe_join([fa_icon('list fw'), t('settings.authorized_apps')]), oauth_authorized_applications_url end diff --git a/config/routes.rb b/config/routes.rb index 2373d8a51..86f699516 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -164,6 +164,7 @@ Rails.application.routes.draw do resources :aliases, only: [:index, :create, :destroy] resources :sessions, only: [:destroy] resources :featured_tags, only: [:index, :create, :destroy] + resources :login_activities, only: [:index] end resources :media, only: [:show] do @@ -175,6 +176,7 @@ Rails.application.routes.draw do resources :invites, only: [:index, :create, :destroy] resources :filters, except: [:show] resource :relationships, only: [:show, :update] + resource :statuses_cleanup, controller: :statuses_cleanup, only: [:show, :update] get '/public', to: 'public_timelines#show', as: :public_timeline get '/media_proxy/:id/(*any)', to: 'media_proxy#show', as: :media_proxy @@ -222,7 +224,7 @@ Rails.application.routes.draw do post :stop_delivery end end - + resources :rules resources :reports, only: [:index, :show] do @@ -282,6 +284,7 @@ Rails.application.routes.draw do resources :users, only: [] do resource :two_factor_authentication, only: [:destroy] + resource :sign_in_token_authentication, only: [:create, :destroy] end resources :custom_emojis, only: [:index, :new, :create] do @@ -456,6 +459,7 @@ Rails.application.routes.draw do member do post :follow post :unfollow + post :remove_from_followers post :block post :unblock post :mute @@ -507,6 +511,12 @@ Rails.application.routes.draw do post :resolve end end + + resources :trends, only: [:index] + + post :measures, to: 'measures#create' + post :dimensions, to: 'dimensions#create' + post :retention, to: 'retention#create' end end diff --git a/config/sidekiq.yml b/config/sidekiq.yml index a8e4c7feb..eab74338e 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -57,3 +57,7 @@ cron: '0 * * * *' class: Scheduler::InstanceRefreshScheduler queue: scheduler + accounts_statuses_cleanup_scheduler: + interval: 1 minute + class: Scheduler::AccountsStatusesCleanupScheduler + queue: scheduler diff --git a/config/webpack/production.js b/config/webpack/production.js index f1d0dabae..cd3d01035 100644 --- a/config/webpack/production.js +++ b/config/webpack/production.js @@ -43,7 +43,7 @@ module.exports = merge(sharedConfig, { plugins: [ new CompressionPlugin({ - filename: '[path].gz[query]', + filename: '[path][base].gz[query]', cache: true, test: /\.(js|css|html|json|ico|svg|eot|otf|ttf|map)$/, }), diff --git a/config/webpack/tests.js b/config/webpack/tests.js index f9d39f1b8..84f008eac 100644 --- a/config/webpack/tests.js +++ b/config/webpack/tests.js @@ -1,7 +1,7 @@ // Note: You must restart bin/webpack-dev-server for changes to take effect const { merge } = require('webpack-merge'); -const sharedConfig = require('./shared.js'); +const sharedConfig = require('./shared'); module.exports = merge(sharedConfig, { mode: 'development', diff --git a/db/migrate/20200508212852_reset_unique_jobs_locks.rb b/db/migrate/20200508212852_reset_unique_jobs_locks.rb index 304e49322..d717ffc54 100644 --- a/db/migrate/20200508212852_reset_unique_jobs_locks.rb +++ b/db/migrate/20200508212852_reset_unique_jobs_locks.rb @@ -3,7 +3,7 @@ class ResetUniqueJobsLocks < ActiveRecord::Migration[5.2] def up # We do this to clean up unique job digests that were not properly - # disposed of prior to https://github.com/tootsuite/mastodon/pull/13361 + # disposed of prior to https://github.com/mastodon/mastodon/pull/13361 until SidekiqUniqueJobs::Digests.new.delete_by_pattern('*').nil?; end end diff --git a/db/migrate/20210416200740_create_canonical_email_blocks.rb b/db/migrate/20210416200740_create_canonical_email_blocks.rb index a1f1660bf..32c44646c 100644 --- a/db/migrate/20210416200740_create_canonical_email_blocks.rb +++ b/db/migrate/20210416200740_create_canonical_email_blocks.rb @@ -2,7 +2,7 @@ class CreateCanonicalEmailBlocks < ActiveRecord::Migration[6.1] def change create_table :canonical_email_blocks do |t| t.string :canonical_email_hash, null: false, default: '', index: { unique: true } - t.belongs_to :reference_account, null: false, foreign_key: { on_cascade: :delete, to_table: 'accounts' } + t.belongs_to :reference_account, null: false, foreign_key: { to_table: 'accounts' } t.timestamps end diff --git a/db/migrate/20210609202149_create_login_activities.rb b/db/migrate/20210609202149_create_login_activities.rb new file mode 100644 index 000000000..38e147c32 --- /dev/null +++ b/db/migrate/20210609202149_create_login_activities.rb @@ -0,0 +1,14 @@ +class CreateLoginActivities < ActiveRecord::Migration[6.1] + def change + create_table :login_activities do |t| + t.belongs_to :user, null: false, foreign_key: { on_delete: :cascade } + t.string :authentication_method + t.string :provider + t.boolean :success + t.string :failure_reason + t.inet :ip + t.string :user_agent + t.datetime :created_at + end + end +end diff --git a/db/migrate/20210621221010_add_skip_sign_in_token_to_users.rb b/db/migrate/20210621221010_add_skip_sign_in_token_to_users.rb new file mode 100644 index 000000000..43ad9b954 --- /dev/null +++ b/db/migrate/20210621221010_add_skip_sign_in_token_to_users.rb @@ -0,0 +1,5 @@ +class AddSkipSignInTokenToUsers < ActiveRecord::Migration[6.1] + def change + add_column :users, :skip_sign_in_token, :boolean + end +end diff --git a/db/migrate/20210630000137_fix_canonical_email_blocks_foreign_key.rb b/db/migrate/20210630000137_fix_canonical_email_blocks_foreign_key.rb new file mode 100644 index 000000000..64cf84448 --- /dev/null +++ b/db/migrate/20210630000137_fix_canonical_email_blocks_foreign_key.rb @@ -0,0 +1,13 @@ +class FixCanonicalEmailBlocksForeignKey < ActiveRecord::Migration[6.1] + def up + safety_assured do + execute 'ALTER TABLE canonical_email_blocks DROP CONSTRAINT fk_rails_1ecb262096, ADD CONSTRAINT fk_rails_1ecb262096 FOREIGN KEY (reference_account_id) REFERENCES accounts(id) ON DELETE CASCADE;' + end + end + + def down + safety_assured do + execute 'ALTER TABLE canonical_email_blocks DROP CONSTRAINT fk_rails_1ecb262096, ADD CONSTRAINT fk_rails_1ecb262096 FOREIGN KEY (reference_account_id) REFERENCES accounts(id);' + end + end +end diff --git a/db/migrate/20210722120340_create_account_statuses_cleanup_policies.rb b/db/migrate/20210722120340_create_account_statuses_cleanup_policies.rb new file mode 100644 index 000000000..28cfb6ef5 --- /dev/null +++ b/db/migrate/20210722120340_create_account_statuses_cleanup_policies.rb @@ -0,0 +1,20 @@ +class CreateAccountStatusesCleanupPolicies < ActiveRecord::Migration[6.1] + def change + create_table :account_statuses_cleanup_policies do |t| + t.belongs_to :account, null: false, foreign_key: { on_delete: :cascade } + t.boolean :enabled, null: false, default: true + t.integer :min_status_age, null: false, default: 2.weeks.seconds + t.boolean :keep_direct, null: false, default: true + t.boolean :keep_pinned, null: false, default: true + t.boolean :keep_polls, null: false, default: false + t.boolean :keep_media, null: false, default: false + t.boolean :keep_self_fav, null: false, default: true + t.boolean :keep_self_bookmark, null: false, default: true + t.integer :min_favs, null: true + t.integer :min_reblogs, null: true + + t.timestamps + end + end +end + diff --git a/db/post_migrate/20210808071221_clear_orphaned_account_notes.rb b/db/post_migrate/20210808071221_clear_orphaned_account_notes.rb new file mode 100644 index 000000000..71171658a --- /dev/null +++ b/db/post_migrate/20210808071221_clear_orphaned_account_notes.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +class ClearOrphanedAccountNotes < ActiveRecord::Migration[5.2] + class Account < ApplicationRecord + # Dummy class, to make migration possible across version changes + end + + class AccountNote < ApplicationRecord + # Dummy class, to make migration possible across version changes + belongs_to :account + belongs_to :target_account, class_name: 'Account' + end + + def up + AccountNote.where('NOT EXISTS (SELECT * FROM users u WHERE u.account_id = account_notes.account_id)').in_batches.delete_all + end + + def down + # nothing to do + end +end diff --git a/db/schema.rb b/db/schema.rb index dfd230d0c..621647033 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.define(version: 2021_05_26_193025) do +ActiveRecord::Schema.define(version: 2021_08_08_071221) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -114,6 +114,23 @@ ActiveRecord::Schema.define(version: 2021_05_26_193025) do t.index ["account_id"], name: "index_account_stats_on_account_id", unique: true end + create_table "account_statuses_cleanup_policies", force: :cascade do |t| + t.bigint "account_id", null: false + t.boolean "enabled", default: true, null: false + t.integer "min_status_age", default: 1209600, null: false + t.boolean "keep_direct", default: true, null: false + t.boolean "keep_pinned", default: true, null: false + t.boolean "keep_polls", default: false, null: false + t.boolean "keep_media", default: false, null: false + t.boolean "keep_self_fav", default: true, null: false + t.boolean "keep_self_bookmark", default: true, null: false + t.integer "min_favs" + t.integer "min_reblogs" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["account_id"], name: "index_account_statuses_cleanup_policies_on_account_id" + end + create_table "account_warning_presets", force: :cascade do |t| t.text "text", default: "", null: false t.datetime "created_at", null: false @@ -501,6 +518,18 @@ ActiveRecord::Schema.define(version: 2021_05_26_193025) do t.index ["account_id"], name: "index_lists_on_account_id" end + create_table "login_activities", force: :cascade do |t| + t.bigint "user_id", null: false + t.string "authentication_method" + t.string "provider" + t.boolean "success" + t.string "failure_reason" + t.inet "ip" + t.string "user_agent" + t.datetime "created_at" + t.index ["user_id"], name: "index_login_activities_on_user_id" + end + create_table "markers", force: :cascade do |t| t.bigint "user_id" t.string "timeline", default: "", null: false @@ -933,6 +962,7 @@ ActiveRecord::Schema.define(version: 2021_05_26_193025) do t.datetime "sign_in_token_sent_at" t.string "webauthn_id" t.inet "sign_up_ip" + t.boolean "skip_sign_in_token" t.index ["account_id"], name: "index_users_on_account_id" t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true t.index ["created_by_application_id"], name: "index_users_on_created_by_application_id" @@ -989,6 +1019,7 @@ ActiveRecord::Schema.define(version: 2021_05_26_193025) do add_foreign_key "account_pins", "accounts", column: "target_account_id", on_delete: :cascade add_foreign_key "account_pins", "accounts", on_delete: :cascade add_foreign_key "account_stats", "accounts", on_delete: :cascade + add_foreign_key "account_statuses_cleanup_policies", "accounts", on_delete: :cascade add_foreign_key "account_warnings", "accounts", column: "target_account_id", on_delete: :cascade add_foreign_key "account_warnings", "accounts", on_delete: :nullify add_foreign_key "accounts", "accounts", column: "moved_to_account_id", on_delete: :nullify @@ -1003,7 +1034,7 @@ ActiveRecord::Schema.define(version: 2021_05_26_193025) do add_foreign_key "blocks", "accounts", name: "fk_4269e03e65", on_delete: :cascade add_foreign_key "bookmarks", "accounts", on_delete: :cascade add_foreign_key "bookmarks", "statuses", on_delete: :cascade - add_foreign_key "canonical_email_blocks", "accounts", column: "reference_account_id" + add_foreign_key "canonical_email_blocks", "accounts", column: "reference_account_id", on_delete: :cascade add_foreign_key "conversation_mutes", "accounts", name: "fk_225b4212bb", on_delete: :cascade add_foreign_key "conversation_mutes", "conversations", on_delete: :cascade add_foreign_key "custom_filters", "accounts", on_delete: :cascade @@ -1028,6 +1059,7 @@ ActiveRecord::Schema.define(version: 2021_05_26_193025) do add_foreign_key "list_accounts", "follows", on_delete: :cascade add_foreign_key "list_accounts", "lists", on_delete: :cascade add_foreign_key "lists", "accounts", on_delete: :cascade + add_foreign_key "login_activities", "users", on_delete: :cascade add_foreign_key "markers", "users", on_delete: :cascade add_foreign_key "media_attachments", "accounts", name: "fk_96dd81e81b", on_delete: :nullify add_foreign_key "media_attachments", "scheduled_statuses", on_delete: :nullify diff --git a/dist/mastodon-sidekiq.service b/dist/mastodon-sidekiq.service index 9dd21b8a0..35b121cd7 100644 --- a/dist/mastodon-sidekiq.service +++ b/dist/mastodon-sidekiq.service @@ -9,6 +9,7 @@ WorkingDirectory=/home/mastodon/live Environment="RAILS_ENV=production" Environment="DB_POOL=25" Environment="MALLOC_ARENA_MAX=2" +Environment="LD_PRELOAD=libjemalloc.so" ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -c 25 TimeoutSec=15 Restart=always diff --git a/dist/mastodon-web.service b/dist/mastodon-web.service index c106a4860..f41efd2b0 100644 --- a/dist/mastodon-web.service +++ b/dist/mastodon-web.service @@ -8,6 +8,7 @@ User=mastodon WorkingDirectory=/home/mastodon/live Environment="RAILS_ENV=production" Environment="PORT=3000" +Environment="LD_PRELOAD=libjemalloc.so" ExecStart=/home/mastodon/.rbenv/shims/bundle exec puma -C config/puma.rb ExecReload=/bin/kill -SIGUSR1 $MAINPID TimeoutSec=15 diff --git a/dist/nginx.conf b/dist/nginx.conf index a0429d2aa..27ca868ab 100644 --- a/dist/nginx.conf +++ b/dist/nginx.conf @@ -31,6 +31,7 @@ server { ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; + ssl_session_tickets off; # Uncomment these lines once you acquire a certificate: # ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; @@ -51,7 +52,7 @@ server { gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; - add_header Strict-Transport-Security "max-age=31536000"; + add_header Strict-Transport-Security "max-age=31536000" always; location / { try_files $uri @proxy; @@ -59,13 +60,13 @@ server { location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) { add_header Cache-Control "public, max-age=31536000, immutable"; - add_header Strict-Transport-Security "max-age=31536000"; + add_header Strict-Transport-Security "max-age=31536000" always; try_files $uri @proxy; } location /sw.js { add_header Cache-Control "public, max-age=0"; - add_header Strict-Transport-Security "max-age=31536000"; + add_header Strict-Transport-Security "max-age=31536000" always; try_files $uri @proxy; } @@ -89,7 +90,7 @@ server { proxy_cache_valid 410 24h; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; add_header X-Cached $upstream_cache_status; - add_header Strict-Transport-Security "max-age=31536000"; + add_header Strict-Transport-Security "max-age=31536000" always; tcp_nodelay on; } diff --git a/docker-compose.yml b/docker-compose.yml index 52eea7a74..459813b3f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,7 +14,7 @@ services: redis: restart: always - image: redis:6.0-alpine + image: redis:6-alpine networks: - internal_network healthcheck: diff --git a/lib/cli.rb b/lib/cli.rb index 3f1658566..8815e137a 100644 --- a/lib/cli.rb +++ b/lib/cli.rb @@ -94,17 +94,22 @@ module Mastodon exit(1) unless prompt.ask('Type in the domain of the server to confirm:', required: true) == Rails.configuration.x.local_domain - prompt.warn('This operation WILL NOT be reversible. It can also take a long time.') - prompt.warn('While the data won\'t be erased locally, the server will be in a BROKEN STATE afterwards.') - prompt.warn('A running Sidekiq process is required. Do not shut it down until queues clear.') + unless options[:dry_run] + prompt.warn('This operation WILL NOT be reversible. It can also take a long time.') + prompt.warn('While the data won\'t be erased locally, the server will be in a BROKEN STATE afterwards.') + prompt.warn('A running Sidekiq process is required. Do not shut it down until queues clear.') - exit(1) if prompt.no?('Are you sure you want to proceed?') + exit(1) if prompt.no?('Are you sure you want to proceed?') + end inboxes = Account.inboxes processed = 0 dry_run = options[:dry_run] ? ' (DRY RUN)' : '' + Setting.registrations_mode = 'none' unless options[:dry_run] + if inboxes.empty? + Account.local.without_suspended.in_batches.update_all(suspended_at: Time.now.utc, suspension_origin: :local) unless options[:dry_run] prompt.ok('It seems like your server has not federated with anything') prompt.ok('You can shut it down and delete it any time') return @@ -112,9 +117,7 @@ module Mastodon prompt.warn('Do NOT interrupt this process...') - Setting.registrations_mode = 'none' - - Account.local.without_suspended.find_each do |account| + delete_account = ->(account) do payload = ActiveModelSerializers::SerializableResource.new( account, serializer: ActivityPub::DeleteActorSerializer, @@ -128,12 +131,15 @@ module Mastodon [json, account.id, inbox_url] end - account.suspend! + account.suspend!(block_email: false) end processed += 1 end + Account.local.without_suspended.find_each { |account| delete_account.call(account) } + Account.local.suspended.joins(:deletion_request).find_each { |account| delete_account.call(account) } + prompt.ok("Queued #{inboxes.size * processed} items into Sidekiq for #{processed} accounts#{dry_run}") prompt.ok('Wait until Sidekiq processes all items, then you can shut everything down and delete the data') rescue TTY::Reader::InputInterrupt diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb index 74162256f..2ef85d0a9 100644 --- a/lib/mastodon/accounts_cli.rb +++ b/lib/mastodon/accounts_cli.rb @@ -54,7 +54,8 @@ module Mastodon option :email, required: true option :confirmed, type: :boolean - option :role, default: 'user' + option :role, default: 'user', enum: %w(user moderator admin) + option :skip_sign_in_token, type: :boolean option :reattach, type: :boolean option :force, type: :boolean desc 'create USERNAME', 'Create a new user' @@ -68,6 +69,9 @@ module Mastodon With the --role option one of "user", "admin" or "moderator" can be supplied. Defaults to "user" + With the --skip-sign-in-token option, you can ensure that + the user is never asked for an e-mailed security code. + With the --reattach option, the new user will be reattached to a given existing username of an old account. If the old account is still in use by someone else, you can supply @@ -77,7 +81,7 @@ module Mastodon def create(username) account = Account.new(username: username) password = SecureRandom.hex - user = User.new(email: options[:email], password: password, agreement: true, approved: true, admin: options[:role] == 'admin', moderator: options[:role] == 'moderator', confirmed_at: options[:confirmed] ? Time.now.utc : nil, bypass_invite_request_check: true) + user = User.new(email: options[:email], password: password, agreement: true, approved: true, admin: options[:role] == 'admin', moderator: options[:role] == 'moderator', confirmed_at: options[:confirmed] ? Time.now.utc : nil, bypass_invite_request_check: true, skip_sign_in_token: options[:skip_sign_in_token]) if options[:reattach] account = Account.find_local(username) || Account.new(username: username) @@ -113,7 +117,7 @@ module Mastodon end end - option :role + option :role, enum: %w(user moderator admin) option :email option :confirm, type: :boolean option :enable, type: :boolean @@ -121,6 +125,7 @@ module Mastodon option :disable_2fa, type: :boolean option :approve, type: :boolean option :reset_password, type: :boolean + option :skip_sign_in_token, type: :boolean desc 'modify USERNAME', 'Modify a user' long_desc <<-LONG_DESC Modify a user account. @@ -142,6 +147,9 @@ module Mastodon With the --reset-password option, the user's password is replaced by a randomly-generated one, printed in the output. + + With the --skip-sign-in-token option, you can ensure that + the user is never asked for an e-mailed security code. LONG_DESC def modify(username) user = Account.find_local(username)&.user @@ -163,6 +171,7 @@ module Mastodon user.disabled = true if options[:disable] user.approved = true if options[:approve] user.otp_required_for_login = false if options[:disable_2fa] + user.skip_sign_in_token = options[:skip_sign_in_token] unless options[:skip_sign_in_token].nil? user.confirm if options[:confirm] if user.save @@ -278,7 +287,7 @@ module Mastodon option :concurrency, type: :numeric, default: 5, aliases: [:c] option :dry_run, type: :boolean - desc 'cull', 'Remove remote accounts that no longer exist' + desc 'cull [DOMAIN...]', 'Remove remote accounts that no longer exist' long_desc <<-LONG_DESC Query every single remote account in the database to determine if it still exists on the origin server, and if it doesn't, @@ -287,19 +296,22 @@ module Mastodon Accounts that have had confirmed activity within the last week are excluded from the checks. LONG_DESC - def cull + def cull(*domains) skip_threshold = 7.days.ago dry_run = options[:dry_run] ? ' (DRY RUN)' : '' skip_domains = Concurrent::Set.new - processed, culled = parallelize_with_progress(Account.remote.where(protocol: :activitypub).partitioned) do |account| + query = Account.remote.where(protocol: :activitypub) + query = query.where(domain: domains) unless domains.empty? + + processed, culled = parallelize_with_progress(query.partitioned) do |account| next if account.updated_at >= skip_threshold || (account.last_webfingered_at.present? && account.last_webfingered_at >= skip_threshold) || skip_domains.include?(account.domain) code = 0 begin code = Request.new(:head, account.uri).perform(&:code) - rescue HTTP::ConnectionError + rescue HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError skip_domains << account.domain end diff --git a/lib/mastodon/domains_cli.rb b/lib/mastodon/domains_cli.rb index 4ebd8a1e2..a7c78c4a7 100644 --- a/lib/mastodon/domains_cli.rb +++ b/lib/mastodon/domains_cli.rb @@ -17,6 +17,7 @@ module Mastodon option :verbose, type: :boolean, aliases: [:v] option :dry_run, type: :boolean option :limited_federation_mode, type: :boolean + option :by_uri, type: :boolean desc 'purge [DOMAIN...]', 'Remove accounts from a DOMAIN without a trace' long_desc <<-LONG_DESC Remove all accounts from a given DOMAIN without leaving behind any @@ -26,6 +27,12 @@ module Mastodon When the --limited-federation-mode option is given, instead of purging accounts from a single domain, all accounts from domains that have not been explicitly allowed are removed from the database. + + When the --by-uri option is given, DOMAIN is used to match the domain part of actor + URIs rather than the domain part of the webfinger handle. For instance, an account + that has the handle `foo@bar.com` but whose profile is at the URL + `https://mastodon-bar.com/users/foo`, would be purged by either + `tootctl domains purge bar.com` or `tootctl domains purge --by-uri mastodon-bar.com`. LONG_DESC def purge(*domains) dry_run = options[:dry_run] ? ' (DRY RUN)' : '' @@ -34,7 +41,11 @@ module Mastodon if options[:limited_federation_mode] Account.remote.where.not(domain: DomainAllow.pluck(:domain)) elsif !domains.empty? - Account.remote.where(domain: domains) + if options[:by_uri] + domains.map { |domain| Account.remote.where(Account.arel_table[:uri].matches("https://#{domain}/%", false, true)) }.reduce(:or) + else + Account.remote.where(domain: domains) + end else say('No domain(s) given', :red) exit(1) diff --git a/lib/mastodon/snowflake.rb b/lib/mastodon/snowflake.rb index 9e5bc7383..8e2d82a97 100644 --- a/lib/mastodon/snowflake.rb +++ b/lib/mastodon/snowflake.rb @@ -138,10 +138,11 @@ module Mastodon::Snowflake end end - def id_at(timestamp) - id = timestamp.to_i * 1000 + rand(1000) + def id_at(timestamp, with_random: true) + id = timestamp.to_i * 1000 + id += rand(1000) if with_random id = id << 16 - id += rand(2**16) + id += rand(2**16) if with_random id end diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 287cdc7fd..478d5a43d 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -33,7 +33,7 @@ module Mastodon end def repository - ENV.fetch('GITHUB_REPOSITORY', 'tootsuite/mastodon') + ENV.fetch('GITHUB_REPOSITORY', 'mastodon/mastodon') end def source_base_url diff --git a/lib/paperclip/attachment_extensions.rb b/lib/paperclip/attachment_extensions.rb index 271f8b603..786f558e9 100644 --- a/lib/paperclip/attachment_extensions.rb +++ b/lib/paperclip/attachment_extensions.rb @@ -6,6 +6,35 @@ module Paperclip instance_read(:meta) end + # monkey-patch to avoid unlinking too avoid unlinking source file too early + # see https://github.com/kreeti/kt-paperclip/issues/64 + def post_process_style(name, style) #:nodoc: + raise "Style #{name} has no processors defined." if style.processors.blank? + + intermediate_files = [] + original = @queued_for_write[:original] + # if we're processing the original, close + unlink the source tempfile + intermediate_files << original if name == :original + + @queued_for_write[name] = style.processors. + inject(original) do |file, processor| + file = Paperclip.processor(processor).make(file, style.processor_options, self) + intermediate_files << file unless file == original + file + end + + unadapted_file = @queued_for_write[name] + @queued_for_write[name] = Paperclip.io_adapters. + for(@queued_for_write[name], @options[:adapter_options]) + unadapted_file.close if unadapted_file.respond_to?(:close) + @queued_for_write[name] + rescue Paperclip::Errors::NotIdentifiedByImageMagickError => e + log("An error was received while processing: #{e.inspect}") + (@errors[:processing] ||= []) << e.message if @options[:whiny] + ensure + unlink_files(intermediate_files) + end + # We overwrite this method to support delayed processing in # Sidekiq. Since we process the original file to reduce disk # usage, and we still want to generate thumbnails straight diff --git a/lib/paperclip/media_type_spoof_detector_extensions.rb b/lib/paperclip/media_type_spoof_detector_extensions.rb deleted file mode 100644 index 43337cc68..000000000 --- a/lib/paperclip/media_type_spoof_detector_extensions.rb +++ /dev/null @@ -1,35 +0,0 @@ -# frozen_string_literal: true - -module Paperclip - module MediaTypeSpoofDetectorExtensions - def mapping_override_mismatch? - !Array(mapped_content_type).include?(calculated_content_type) && !Array(mapped_content_type).include?(type_from_mime_magic) - end - - def calculated_media_type_from_mime_magic - @calculated_media_type_from_mime_magic ||= type_from_mime_magic.split('/').first - end - - def calculated_type_mismatch? - !media_types_from_name.include?(calculated_media_type) && !media_types_from_name.include?(calculated_media_type_from_mime_magic) - end - - def type_from_mime_magic - @type_from_mime_magic ||= begin - begin - File.open(@file.path) do |file| - MimeMagic.by_magic(file)&.type || '' - end - rescue Errno::ENOENT - '' - end - end - end - - def type_from_file_command - @type_from_file_command ||= FileCommandContentTypeDetector.new(@file.path).detect - end - end -end - -Paperclip::MediaTypeSpoofDetector.prepend(Paperclip::MediaTypeSpoofDetectorExtensions) diff --git a/lib/paperclip/schema_extensions.rb b/lib/paperclip/schema_extensions.rb deleted file mode 100644 index 8d065676a..000000000 --- a/lib/paperclip/schema_extensions.rb +++ /dev/null @@ -1,37 +0,0 @@ -# frozen_string_literal: true - -# Monkey-patch various Paperclip methods for Ruby 3.0 compatibility - -module Paperclip - module Schema - module StatementsExtensions - def add_attachment(table_name, *attachment_names) - raise ArgumentError, 'Please specify attachment name in your add_attachment call in your migration.' if attachment_names.empty? - - options = attachment_names.extract_options! - - attachment_names.each do |attachment_name| - COLUMNS.each_pair do |column_name, column_type| - column_options = options.merge(options[column_name.to_sym] || {}) - add_column(table_name, "#{attachment_name}_#{column_name}", column_type, **column_options) - end - end - end - end - - module TableDefinitionExtensions - def attachment(*attachment_names) - options = attachment_names.extract_options! - attachment_names.each do |attachment_name| - COLUMNS.each_pair do |column_name, column_type| - column_options = options.merge(options[column_name.to_sym] || {}) - column("#{attachment_name}_#{column_name}", column_type, **column_options) - end - end - end - end - end -end - -Paperclip::Schema::Statements.prepend(Paperclip::Schema::StatementsExtensions) -Paperclip::Schema::TableDefinition.prepend(Paperclip::Schema::TableDefinitionExtensions) diff --git a/lib/paperclip/storage_extensions.rb b/lib/paperclip/storage_extensions.rb new file mode 100644 index 000000000..95c35641e --- /dev/null +++ b/lib/paperclip/storage_extensions.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +# Some S3-compatible providers might not actually be compatible with some APIs +# used by kt-paperclip, see https://github.com/mastodon/mastodon/issues/16822 +if ENV['S3_ENABLED'] == 'true' && ENV['S3_FORCE_SINGLE_REQUEST'] == 'true' + module Paperclip + module Storage + module S3Extensions + def copy_to_local_file(style, local_dest_path) + log("copying #{path(style)} to local file #{local_dest_path}") + s3_object(style).download_file(local_dest_path, { mode: 'single_request' }) + rescue Aws::Errors::ServiceError => e + warn("#{e} - cannot copy #{path(style)} to local file #{local_dest_path}") + false + end + end + end + end + + Paperclip::Storage::S3.prepend(Paperclip::Storage::S3Extensions) +end diff --git a/lib/paperclip/transcoder.rb b/lib/paperclip/transcoder.rb index e99704086..ec1305038 100644 --- a/lib/paperclip/transcoder.rb +++ b/lib/paperclip/transcoder.rb @@ -19,7 +19,7 @@ module Paperclip metadata = VideoMetadataExtractor.new(@file.path) unless metadata.valid? - log("Unsupported file #{@file.path}") + Paperclip.log("Unsupported file #{@file.path}") return File.open(@file.path) end diff --git a/lib/paperclip/url_generator_extensions.rb b/lib/paperclip/url_generator_extensions.rb index e1d6df2c2..a2cf5929a 100644 --- a/lib/paperclip/url_generator_extensions.rb +++ b/lib/paperclip/url_generator_extensions.rb @@ -2,16 +2,6 @@ module Paperclip module UrlGeneratorExtensions - # Monkey-patch Paperclip to use Addressable::URI's normalization instead - # of the long-deprecated URI.esacpe - def escape_url(url) - if url.respond_to?(:escape) - url.escape - else - Addressable::URI.parse(url).normalize.to_str.gsub(escape_regex) { |m| "%#{m.ord.to_s(16).upcase}" } - end - end - def for_as_default(style_name) attachment_options[:interpolator].interpolate(default_url, @attachment, style_name) end diff --git a/lib/paperclip/validation_extensions.rb b/lib/paperclip/validation_extensions.rb deleted file mode 100644 index 0df0434f6..000000000 --- a/lib/paperclip/validation_extensions.rb +++ /dev/null @@ -1,58 +0,0 @@ -# frozen_string_literal: true - -# Monkey-patch various Paperclip validators for Ruby 3.0 compatibility - -module Paperclip - module Validators - module AttachmentSizeValidatorExtensions - def validate_each(record, attr_name, _value) - base_attr_name = attr_name - attr_name = "#{attr_name}_file_size".to_sym - value = record.send(:read_attribute_for_validation, attr_name) - - if value.present? - options.slice(*Paperclip::Validators::AttachmentSizeValidator::AVAILABLE_CHECKS).each do |option, option_value| - option_value = option_value.call(record) if option_value.is_a?(Proc) - option_value = extract_option_value(option, option_value) - - next if value.send(Paperclip::Validators::AttachmentSizeValidator::CHECKS[option], option_value) - - error_message_key = options[:in] ? :in_between : option - [attr_name, base_attr_name].each do |error_attr_name| - record.errors.add(error_attr_name, error_message_key, **filtered_options(value).merge( - min: min_value_in_human_size(record), - max: max_value_in_human_size(record), - count: human_size(option_value) - )) - end - end - end - end - end - - module AttachmentContentTypeValidatorExtensions - def mark_invalid(record, attribute, types) - record.errors.add attribute, :invalid, **options.merge({ types: types.join(', ') }) - end - end - - module AttachmentPresenceValidatorExtensions - def validate_each(record, attribute, _value) - if record.send("#{attribute}_file_name").blank? - record.errors.add(attribute, :blank, **options) - end - end - end - - module AttachmentFileNameValidatorExtensions - def mark_invalid(record, attribute, patterns) - record.errors.add attribute, :invalid, options.merge({ names: patterns.join(', ') }) - end - end - end -end - -Paperclip::Validators::AttachmentSizeValidator.prepend(Paperclip::Validators::AttachmentSizeValidatorExtensions) -Paperclip::Validators::AttachmentContentTypeValidator.prepend(Paperclip::Validators::AttachmentContentTypeValidatorExtensions) -Paperclip::Validators::AttachmentPresenceValidator.prepend(Paperclip::Validators::AttachmentPresenceValidatorExtensions) -Paperclip::Validators::AttachmentFileNameValidator.prepend(Paperclip::Validators::AttachmentFileNameValidatorExtensions) diff --git a/lib/tasks/emojis.rake b/lib/tasks/emojis.rake index a373e7652..8faa48a95 100644 --- a/lib/tasks/emojis.rake +++ b/lib/tasks/emojis.rake @@ -45,7 +45,7 @@ end namespace :emojis do desc 'Generate a unicode to filename mapping' task :generate do - source = 'http://www.unicode.org/Public/emoji/12.0/emoji-test.txt' + source = 'http://www.unicode.org/Public/emoji/13.1/emoji-test.txt' codes = [] dest = Rails.root.join('app', 'javascript', 'mastodon', 'features', 'emoji', 'emoji_map.json') diff --git a/lib/tasks/repo.rake b/lib/tasks/repo.rake index 86c358a94..d004c5751 100644 --- a/lib/tasks/repo.rake +++ b/lib/tasks/repo.rake @@ -1,6 +1,6 @@ # frozen_string_literal: true -REPOSITORY_NAME = 'tootsuite/mastodon' +REPOSITORY_NAME = 'mastodon/mastodon' namespace :repo do desc 'Generate the AUTHORS.md file' @@ -34,7 +34,7 @@ namespace :repo do file << <<~FOOTER - This document is provided for informational purposes only. Since it is only updated once per release, the version you are looking at may be currently out of date. To see the full list of contributors, consider looking at the [git history](https://github.com/tootsuite/mastodon/graphs/contributors) instead. + This document is provided for informational purposes only. Since it is only updated once per release, the version you are looking at may be currently out of date. To see the full list of contributors, consider looking at the [git history](https://github.com/mastodon/mastodon/graphs/contributors) instead. FOOTER end diff --git a/package.json b/package.json index f14725889..4caf359b4 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "@tootsuite/mastodon", + "name": "@mastodon/mastodon", "license": "AGPL-3.0-or-later", "engines": { "node": ">=12" @@ -14,11 +14,11 @@ "test:lint": "${npm_execpath} run test:lint:js && ${npm_execpath} run test:lint:sass", "test:lint:js": "eslint --ext=js . --cache", "test:lint:sass": "sass-lint -v", - "test:jest": "cross-env NODE_ENV=test jest --coverage" + "test:jest": "cross-env NODE_ENV=test jest" }, "repository": { "type": "git", - "url": "https://github.com/tootsuite/mastodon.git" + "url": "https://github.com/mastodon/mastodon.git" }, "browserslist": [ "last 2 versions", @@ -27,6 +27,7 @@ "not dead" ], "jest": { + "testEnvironment": "jsdom", "projects": [ "/app/javascript/mastodon" ], @@ -59,35 +60,35 @@ }, "private": true, "dependencies": { - "@babel/core": "^7.14.3", - "@babel/plugin-proposal-decorators": "^7.14.2", - "@babel/plugin-transform-react-inline-elements": "^7.12.13", - "@babel/plugin-transform-runtime": "^7.14.3", - "@babel/preset-env": "^7.14.4", - "@babel/preset-react": "^7.13.13", - "@babel/runtime": "^7.14.0", + "@babel/core": "^7.15.8", + "@babel/plugin-proposal-decorators": "^7.15.8", + "@babel/plugin-transform-react-inline-elements": "^7.14.5", + "@babel/plugin-transform-runtime": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "@babel/preset-react": "^7.14.5", + "@babel/runtime": "^7.15.4", "@gamestdio/websocket": "^0.3.2", "@github/webauthn-json": "^0.5.7", - "@rails/ujs": "^6.1.3", - "array-includes": "^3.1.3", + "@rails/ujs": "^6.1.4", + "array-includes": "^3.1.4", "arrow-key-navigation": "^1.2.0", - "autoprefixer": "^9.8.6", - "axios": "^0.21.1", + "autoprefixer": "^9.8.8", + "axios": "^0.23.0", "babel-loader": "^8.2.2", "babel-plugin-lodash": "^3.3.4", "babel-plugin-preval": "^5.0.0", "babel-plugin-react-intl": "^6.2.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "babel-runtime": "^6.26.0", - "blurhash": "^1.1.3", + "blurhash": "^1.1.4", "classnames": "^2.3.1", "color-blend": "^3.0.1", "compression-webpack-plugin": "^6.1.1", "cross-env": "^7.0.3", - "css-loader": "^5.2.6", + "css-loader": "^5.2.7", "cssnano": "^4.1.11", "detect-passive-events": "^2.0.3", - "dotenv": "^9.0.2", + "dotenv": "^10.0.0", "emoji-mart": "^3.0.1", "es6-symbol": "^3.1.3", "escape-html": "^1.0.3", @@ -95,10 +96,10 @@ "express": "^4.17.1", "file-loader": "^6.2.0", "font-awesome": "^4.7.0", - "glob": "^7.1.7", + "glob": "^7.2.0", "history": "^4.10.1", "http-link-header": "^1.0.3", - "immutable": "^3.8.2", + "immutable": "^4.0.0", "imports-loader": "^1.2.0", "intersection-observer": "^0.12.0", "intl": "^1.2.5", @@ -109,22 +110,18 @@ "lodash": "^4.17.21", "mark-loader": "^0.1.6", "marky": "^1.2.2", - "mini-css-extract-plugin": "^1.6.0", + "mini-css-extract-plugin": "^1.6.2", "mkdirp": "^1.0.4", - "npmlog": "^4.1.2", + "npmlog": "^5.0.1", "object-assign": "^4.1.1", "object-fit-images": "^3.2.3", - "object.values": "^1.1.3", + "object.values": "^1.1.5", "offline-plugin": "^5.0.7", "path-complete-extname": "^1.0.0", "pg": "^8.5.0", - "postcss": "^8.3.0", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-import": "^14.0.2", "postcss-loader": "^3.0.0", "postcss-object-fit-images": "^1.1.2", - "postcss-preset-env": "^6.7.0", - "promise.prototype.finally": "^3.1.2", + "promise.prototype.finally": "^3.1.3", "prop-types": "^15.5.10", "punycode": "^2.1.0", "react": "^16.14.0", @@ -137,25 +134,25 @@ "react-motion": "^0.5.2", "react-notification": "^6.8.5", "react-overlays": "^0.9.3", - "react-redux": "^7.2.4", + "react-redux": "^7.2.5", "react-redux-loading-bar": "^4.0.8", "react-router-dom": "^4.1.1", "react-router-scroll-4": "^1.0.0-beta.1", - "react-select": "^4.3.1", + "react-select": "^5.1.0", "react-sparklines": "^1.7.0", "react-swipeable-views": "^0.14.0", - "react-textarea-autosize": "^8.3.2", + "react-textarea-autosize": "^8.3.3", "react-toggle": "^4.1.2", "redis": "^3.1.2", - "redux": "^4.1.0", + "redux": "^4.1.1", "redux-immutable": "^4.0.0", "redux-thunk": "^2.2.0", - "regenerator-runtime": "^0.13.7", + "regenerator-runtime": "^0.13.9", "rellax": "^1.12.1", "requestidlecallback": "^0.3.0", "reselect": "^4.0.0", "rimraf": "^3.0.2", - "sass": "^1.34.0", + "sass": "^1.43.2", "sass-loader": "^10.2.0", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", @@ -168,35 +165,35 @@ "uuid": "^8.3.1", "webpack": "^4.46.0", "webpack-assets-manifest": "^4.0.6", - "webpack-bundle-analyzer": "^4.4.2", + "webpack-bundle-analyzer": "^4.5.0", "webpack-cli": "^3.3.12", - "webpack-merge": "^5.7.3", + "webpack-merge": "^5.8.0", "wicg-inert": "^3.1.1", - "ws": "^7.4.6" + "ws": "^8.2.3" }, "devDependencies": { - "@testing-library/jest-dom": "^5.12.0", - "@testing-library/react": "^11.2.7", + "@testing-library/jest-dom": "^5.14.1", + "@testing-library/react": "^12.1.2", "babel-eslint": "^10.1.0", - "babel-jest": "^27.0.2", - "eslint": "^7.27.0", - "eslint-plugin-import": "~2.23.4", + "babel-jest": "^27.3.1", + "eslint": "^7.32.0", + "eslint-plugin-import": "~2.25.2", "eslint-plugin-jsx-a11y": "~6.4.1", "eslint-plugin-promise": "~5.1.0", - "eslint-plugin-react": "~7.24.0", - "jest": "^26.6.3", + "eslint-plugin-react": "~7.26.1", + "jest": "^27.3.1", "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", "react-test-renderer": "^16.14.0", "sass-lint": "^1.13.1", "webpack-dev-server": "^3.11.2", - "yargs": "^17.0.1" + "yargs": "^17.2.1" }, "resolutions": { "kind-of": "^6.0.3" }, "optionalDependencies": { - "bufferutil": "^4.0.3", - "utf-8-validate": "^5.0.5" + "bufferutil": "^4.0.5", + "utf-8-validate": "^5.0.7" } } diff --git a/scalingo.json b/scalingo.json index 324356df0..51d9b5b9f 100644 --- a/scalingo.json +++ b/scalingo.json @@ -1,8 +1,8 @@ { "name": "Mastodon", "description": "A GNU Social-compatible microblogging server", - "repository": "https://github.com/tootsuite/mastodon", - "logo": "https://github.com/tootsuite.png", + "repository": "https://github.com/mastodon/mastodon", + "logo": "https://github.com/mastodon.png", "env": { "LOCAL_DOMAIN": { "description": "The domain that your Mastodon instance will run on (this can be appname.scalingo.io or a custom domain)", diff --git a/spec/controllers/activitypub/followers_synchronizations_controller_spec.rb b/spec/controllers/activitypub/followers_synchronizations_controller_spec.rb index d373f56bd..3a382ff27 100644 --- a/spec/controllers/activitypub/followers_synchronizations_controller_spec.rb +++ b/spec/controllers/activitypub/followers_synchronizations_controller_spec.rb @@ -5,11 +5,13 @@ RSpec.describe ActivityPub::FollowersSynchronizationsController, type: :controll let!(:follower_1) { Fabricate(:account, domain: 'example.com', uri: 'https://example.com/users/a') } let!(:follower_2) { Fabricate(:account, domain: 'example.com', uri: 'https://example.com/users/b') } let!(:follower_3) { Fabricate(:account, domain: 'foo.com', uri: 'https://foo.com/users/a') } + let!(:follower_4) { Fabricate(:account, username: 'instance-actor', domain: 'example.com', uri: 'https://example.com') } before do follower_1.follow!(account) follower_2.follow!(account) follower_3.follow!(account) + follower_4.follow!(account) end before do @@ -45,7 +47,7 @@ RSpec.describe ActivityPub::FollowersSynchronizationsController, type: :controll it 'returns orderedItems with followers from example.com' do expect(body[:orderedItems]).to be_an Array - expect(body[:orderedItems].sort).to eq [follower_1.uri, follower_2.uri] + expect(body[:orderedItems].sort).to eq [follower_4.uri, follower_1.uri, follower_2.uri] end it 'returns private Cache-Control header' do diff --git a/spec/controllers/activitypub/outboxes_controller_spec.rb b/spec/controllers/activitypub/outboxes_controller_spec.rb index d23f2c17c..1722690db 100644 --- a/spec/controllers/activitypub/outboxes_controller_spec.rb +++ b/spec/controllers/activitypub/outboxes_controller_spec.rb @@ -55,6 +55,10 @@ RSpec.describe ActivityPub::OutboxesController, type: :controller do it_behaves_like 'cachable response' + it 'does not have a Vary header' do + expect(response.headers['Vary']).to be_nil + end + context 'when account is permanently suspended' do before do account.suspend! @@ -96,6 +100,10 @@ RSpec.describe ActivityPub::OutboxesController, type: :controller do it_behaves_like 'cachable response' + it 'returns Vary header with Signature' do + expect(response.headers['Vary']).to include 'Signature' + end + context 'when account is permanently suspended' do before do account.suspend! @@ -144,7 +152,7 @@ RSpec.describe ActivityPub::OutboxesController, type: :controller do end it 'returns private Cache-Control header' do - expect(response.headers['Cache-Control']).to eq 'max-age=0, private' + expect(response.headers['Cache-Control']).to eq 'max-age=60, private' end end @@ -170,7 +178,7 @@ RSpec.describe ActivityPub::OutboxesController, type: :controller do end it 'returns private Cache-Control header' do - expect(response.headers['Cache-Control']).to eq 'max-age=0, private' + expect(response.headers['Cache-Control']).to eq 'max-age=60, private' end end @@ -195,7 +203,7 @@ RSpec.describe ActivityPub::OutboxesController, type: :controller do end it 'returns private Cache-Control header' do - expect(response.headers['Cache-Control']).to eq 'max-age=0, private' + expect(response.headers['Cache-Control']).to eq 'max-age=60, private' end end @@ -220,7 +228,7 @@ RSpec.describe ActivityPub::OutboxesController, type: :controller do end it 'returns private Cache-Control header' do - expect(response.headers['Cache-Control']).to eq 'max-age=0, private' + expect(response.headers['Cache-Control']).to eq 'max-age=60, private' end end end diff --git a/spec/controllers/admin/resets_controller_spec.rb b/spec/controllers/admin/resets_controller_spec.rb index a20a460bd..c1e34b7f9 100644 --- a/spec/controllers/admin/resets_controller_spec.rb +++ b/spec/controllers/admin/resets_controller_spec.rb @@ -16,7 +16,7 @@ describe Admin::ResetsController do post :create, params: { account_id: account.id } - expect(response).to redirect_to(admin_accounts_path) + expect(response).to redirect_to(admin_account_path(account.id)) end end end diff --git a/spec/controllers/admin/two_factor_authentications_controller_spec.rb b/spec/controllers/admin/two_factor_authentications_controller_spec.rb index b0e82d3d6..c65095729 100644 --- a/spec/controllers/admin/two_factor_authentications_controller_spec.rb +++ b/spec/controllers/admin/two_factor_authentications_controller_spec.rb @@ -15,12 +15,12 @@ describe Admin::TwoFactorAuthenticationsController do user.update(otp_required_for_login: true) end - it 'redirects to admin accounts page' do + it 'redirects to admin account page' do delete :destroy, params: { user_id: user.id } user.reload expect(user.otp_enabled?).to eq false - expect(response).to redirect_to(admin_accounts_path) + expect(response).to redirect_to(admin_account_path(user.account_id)) end end @@ -38,13 +38,13 @@ describe Admin::TwoFactorAuthenticationsController do nickname: 'Security Key') end - it 'redirects to admin accounts page' do + it 'redirects to admin account page' do delete :destroy, params: { user_id: user.id } user.reload expect(user.otp_enabled?).to eq false expect(user.webauthn_enabled?).to eq false - expect(response).to redirect_to(admin_accounts_path) + expect(response).to redirect_to(admin_account_path(user.account_id)) end end end diff --git a/spec/controllers/api/v1/accounts_controller_spec.rb b/spec/controllers/api/v1/accounts_controller_spec.rb index d9ee37ffa..9a5a7c72a 100644 --- a/spec/controllers/api/v1/accounts_controller_spec.rb +++ b/spec/controllers/api/v1/accounts_controller_spec.rb @@ -168,6 +168,26 @@ RSpec.describe Api::V1::AccountsController, type: :controller do it_behaves_like 'forbidden for wrong scope', 'read:accounts' end + describe 'POST #remove_from_followers' do + let(:scopes) { 'write:follows' } + let(:other_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } + + before do + other_account.follow!(user.account) + post :remove_from_followers, params: { id: other_account.id } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'removes the followed relation between user and target user' do + expect(user.account.followed_by?(other_account)).to be false + end + + it_behaves_like 'forbidden for wrong scope', 'read:accounts' + end + describe 'POST #block' do let(:scopes) { 'write:blocks' } let(:other_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } diff --git a/spec/controllers/auth/sessions_controller_spec.rb b/spec/controllers/auth/sessions_controller_spec.rb index d03ae51e8..f718f5dd9 100644 --- a/spec/controllers/auth/sessions_controller_spec.rb +++ b/spec/controllers/auth/sessions_controller_spec.rb @@ -206,6 +206,38 @@ RSpec.describe Auth::SessionsController, type: :controller do end end + context 'using email and password after an unfinished log-in attempt to a 2FA-protected account' do + let!(:other_user) do + Fabricate(:user, email: 'z@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) + end + + before do + post :create, params: { user: { email: other_user.email, password: other_user.password } } + post :create, params: { user: { email: user.email, password: user.password } } + end + + it 'renders two factor authentication page' do + expect(controller).to render_template("two_factor") + expect(controller).to render_template(partial: "_otp_authentication_form") + end + end + + context 'using email and password after an unfinished log-in attempt with a sign-in token challenge' do + let!(:other_user) do + Fabricate(:user, email: 'z@y.com', password: 'abcdefgh', otp_required_for_login: false, current_sign_in_at: 1.month.ago) + end + + before do + post :create, params: { user: { email: other_user.email, password: other_user.password } } + post :create, params: { user: { email: user.email, password: user.password } } + end + + it 'renders two factor authentication page' do + expect(controller).to render_template("two_factor") + expect(controller).to render_template(partial: "_otp_authentication_form") + end + end + context 'using upcase email and password' do before do post :create, params: { user: { email: user.email.upcase, password: user.password } } @@ -231,6 +263,21 @@ RSpec.describe Auth::SessionsController, type: :controller do end end + context 'using a valid OTP, attempting to leverage previous half-login to bypass password auth' do + let!(:other_user) do + Fabricate(:user, email: 'z@y.com', password: 'abcdefgh', otp_required_for_login: false, current_sign_in_at: 1.month.ago) + end + + before do + post :create, params: { user: { email: other_user.email, password: other_user.password } } + post :create, params: { user: { email: user.email, otp_attempt: user.current_otp } }, session: { attempt_user_updated_at: user.updated_at.to_s } + end + + it "doesn't log the user in" do + expect(controller.current_user).to be_nil + end + end + context 'when the server has an decryption error' do before do allow_any_instance_of(User).to receive(:validate_and_consume_otp!).and_raise(OpenSSL::Cipher::CipherError) @@ -380,6 +427,52 @@ RSpec.describe Auth::SessionsController, type: :controller do end end + context 'using email and password after an unfinished log-in attempt to a 2FA-protected account' do + let!(:other_user) do + Fabricate(:user, email: 'z@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) + end + + before do + post :create, params: { user: { email: other_user.email, password: other_user.password } } + post :create, params: { user: { email: user.email, password: user.password } } + end + + it 'renders sign in token authentication page' do + expect(controller).to render_template("sign_in_token") + end + + it 'generates sign in token' do + expect(user.reload.sign_in_token).to_not be_nil + end + + it 'sends sign in token e-mail' do + expect(UserMailer).to have_received(:sign_in_token) + end + end + + context 'using email and password after an unfinished log-in attempt with a sign-in token challenge' do + let!(:other_user) do + Fabricate(:user, email: 'z@y.com', password: 'abcdefgh', otp_required_for_login: false, current_sign_in_at: 1.month.ago) + end + + before do + post :create, params: { user: { email: other_user.email, password: other_user.password } } + post :create, params: { user: { email: user.email, password: user.password } } + end + + it 'renders sign in token authentication page' do + expect(controller).to render_template("sign_in_token") + end + + it 'generates sign in token' do + expect(user.reload.sign_in_token).to_not be_nil + end + + it 'sends sign in token e-mail' do + expect(UserMailer).to have_received(:sign_in_token).with(user, any_args) + end + end + context 'using a valid sign in token' do before do user.generate_sign_in_token && user.save @@ -395,6 +488,22 @@ RSpec.describe Auth::SessionsController, type: :controller do end end + context 'using a valid sign in token, attempting to leverage previous half-login to bypass password auth' do + let!(:other_user) do + Fabricate(:user, email: 'z@y.com', password: 'abcdefgh', otp_required_for_login: false, current_sign_in_at: 1.month.ago) + end + + before do + user.generate_sign_in_token && user.save + post :create, params: { user: { email: other_user.email, password: other_user.password } } + post :create, params: { user: { email: user.email, sign_in_token_attempt: user.sign_in_token } }, session: { attempt_user_updated_at: user.updated_at.to_s } + end + + it "doesn't log the user in" do + expect(controller.current_user).to be_nil + end + end + context 'using an invalid sign in token' do before do post :create, params: { user: { sign_in_token_attempt: 'wrongotp' } }, session: { attempt_user_id: user.id, attempt_user_updated_at: user.updated_at.to_s } @@ -410,4 +519,33 @@ RSpec.describe Auth::SessionsController, type: :controller do end end end + + describe 'GET #webauthn_options' do + context 'with WebAuthn and OTP enabled as second factor' do + let(:domain) { "#{Rails.configuration.x.use_https ? 'https' : 'http' }://#{Rails.configuration.x.web_domain}" } + + let(:fake_client) { WebAuthn::FakeClient.new(domain) } + + let!(:user) do + Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) + end + + before do + user.update(webauthn_id: WebAuthn.generate_user_id) + public_key_credential = WebAuthn::Credential.from_create(fake_client.create) + user.webauthn_credentials.create( + nickname: 'SecurityKeyNickname', + external_id: public_key_credential.id, + public_key: public_key_credential.public_key, + sign_count: '1000' + ) + post :create, params: { user: { email: user.email, password: user.password } } + end + + it 'returns http success' do + get :webauthn_options + expect(response).to have_http_status :ok + end + end + end end diff --git a/spec/controllers/follower_accounts_controller_spec.rb b/spec/controllers/follower_accounts_controller_spec.rb index f6d55f693..006274169 100644 --- a/spec/controllers/follower_accounts_controller_spec.rb +++ b/spec/controllers/follower_accounts_controller_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe FollowerAccountsController do render_views - let(:alice) { Fabricate(:account, username: 'alice') } + let(:alice) { Fabricate(:user).account } let(:follower0) { Fabricate(:account) } let(:follower1) { Fabricate(:account) } @@ -101,6 +101,23 @@ describe FollowerAccountsController do expect(body['partOf']).to be_blank end + context 'when account hides their network' do + before do + alice.user.settings.hide_network = true + end + + it 'returns followers count' do + expect(body['totalItems']).to eq 2 + end + + it 'does not return items' do + expect(body['items']).to be_blank + expect(body['orderedItems']).to be_blank + expect(body['first']).to be_blank + expect(body['last']).to be_blank + end + end + context 'when account is permanently suspended' do before do alice.suspend! diff --git a/spec/controllers/following_accounts_controller_spec.rb b/spec/controllers/following_accounts_controller_spec.rb index 0fc0967a6..7ec0e3d06 100644 --- a/spec/controllers/following_accounts_controller_spec.rb +++ b/spec/controllers/following_accounts_controller_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe FollowingAccountsController do render_views - let(:alice) { Fabricate(:account, username: 'alice') } + let(:alice) { Fabricate(:user).account } let(:followee0) { Fabricate(:account) } let(:followee1) { Fabricate(:account) } @@ -101,6 +101,23 @@ describe FollowingAccountsController do expect(body['partOf']).to be_blank end + context 'when account hides their network' do + before do + alice.user.settings.hide_network = true + end + + it 'returns followers count' do + expect(body['totalItems']).to eq 2 + end + + it 'does not return items' do + expect(body['items']).to be_blank + expect(body['orderedItems']).to be_blank + expect(body['first']).to be_blank + expect(body['last']).to be_blank + end + end + context 'when account is permanently suspended' do before do alice.suspend! diff --git a/spec/controllers/home_controller_spec.rb b/spec/controllers/home_controller_spec.rb index 941f1dd91..70c5c42c5 100644 --- a/spec/controllers/home_controller_spec.rb +++ b/spec/controllers/home_controller_spec.rb @@ -8,8 +8,10 @@ RSpec.describe HomeController, type: :controller do context 'when not signed in' do context 'when requested path is tag timeline' do - before { @request.path = '/web/timelines/tag/name' } - it { is_expected.to redirect_to '/tags/name' } + it 'redirects to the tag\'s permalink' do + @request.path = '/web/timelines/tag/name' + is_expected.to redirect_to '/tags/name' + end end it 'redirects to about page' do diff --git a/spec/controllers/media_controller_spec.rb b/spec/controllers/media_controller_spec.rb index 2925aed59..efd15b5b4 100644 --- a/spec/controllers/media_controller_spec.rb +++ b/spec/controllers/media_controller_spec.rb @@ -6,33 +6,60 @@ describe MediaController do render_views describe '#show' do - it 'redirects to the file url when attached to a status' do - status = Fabricate(:status) - media_attachment = Fabricate(:media_attachment, status: status) - get :show, params: { id: media_attachment.to_param } - - expect(response).to redirect_to(media_attachment.file.url(:original)) - end - - it 'responds with missing when there is not an attached status' do - media_attachment = Fabricate(:media_attachment, status: nil) - get :show, params: { id: media_attachment.to_param } - - expect(response).to have_http_status(404) - end - it 'raises when shortcode cant be found' do get :show, params: { id: 'missing' } expect(response).to have_http_status(404) end - it 'raises when not permitted to view' do - status = Fabricate(:status, visibility: :direct) - media_attachment = Fabricate(:media_attachment, status: status) - get :show, params: { id: media_attachment.to_param } + context 'when the media attachment has a shortcode' do + it 'redirects to the file url when attached to a status' do + status = Fabricate(:status) + media_attachment = Fabricate(:media_attachment, status: status, shortcode: 'OI6IgDzG-nYTqvDQ994') + get :show, params: { id: media_attachment.to_param } - expect(response).to have_http_status(404) + expect(response).to redirect_to(media_attachment.file.url(:original)) + end + + it 'responds with missing when there is not an attached status' do + media_attachment = Fabricate(:media_attachment, status: nil, shortcode: 'OI6IgDzG-nYTqvDQ994') + get :show, params: { id: media_attachment.to_param } + + expect(response).to have_http_status(404) + end + + it 'raises when not permitted to view' do + status = Fabricate(:status, visibility: :direct) + media_attachment = Fabricate(:media_attachment, status: status, shortcode: 'OI6IgDzG-nYTqvDQ994') + get :show, params: { id: media_attachment.to_param } + + expect(response).to have_http_status(404) + end + end + + context 'when the media attachment has no shortcode' do + it 'redirects to the file url when attached to a status' do + status = Fabricate(:status) + media_attachment = Fabricate(:media_attachment, status: status) + get :show, params: { id: media_attachment.to_param } + + expect(response).to redirect_to(media_attachment.file.url(:original)) + end + + it 'responds with missing when there is not an attached status' do + media_attachment = Fabricate(:media_attachment, status: nil) + get :show, params: { id: media_attachment.to_param } + + expect(response).to have_http_status(404) + end + + it 'raises when not permitted to view' do + status = Fabricate(:status, visibility: :direct) + media_attachment = Fabricate(:media_attachment, status: status) + get :show, params: { id: media_attachment.to_param } + + expect(response).to have_http_status(404) + end end end end diff --git a/spec/controllers/settings/deletes_controller_spec.rb b/spec/controllers/settings/deletes_controller_spec.rb index 8d5c4774f..92ab401c9 100644 --- a/spec/controllers/settings/deletes_controller_spec.rb +++ b/spec/controllers/settings/deletes_controller_spec.rb @@ -59,6 +59,10 @@ describe Settings::DeletesController do expect(user.account.reload).to be_suspended end + it 'does not create an email block' do + expect(CanonicalEmailBlock.block?(user.email)).to be false + end + context 'when suspended' do let(:user) { Fabricate(:user, account_attributes: { username: 'alice', suspended_at: Time.now.utc }) } diff --git a/spec/controllers/statuses_cleanup_controller_spec.rb b/spec/controllers/statuses_cleanup_controller_spec.rb new file mode 100644 index 000000000..924709260 --- /dev/null +++ b/spec/controllers/statuses_cleanup_controller_spec.rb @@ -0,0 +1,27 @@ +require 'rails_helper' + +RSpec.describe StatusesCleanupController, type: :controller do + render_views + + before do + @user = Fabricate(:user) + sign_in @user, scope: :user + end + + describe "GET #show" do + it "returns http success" do + get :show + expect(response).to have_http_status(200) + end + end + + describe 'PUT #update' do + it 'updates the account status cleanup policy' do + put :update, params: { account_statuses_cleanup_policy: { enabled: true, min_status_age: 2.weeks.seconds, keep_direct: false, keep_polls: true } } + expect(response).to redirect_to(statuses_cleanup_path) + expect(@user.account.statuses_cleanup_policy.enabled).to eq true + expect(@user.account.statuses_cleanup_policy.keep_direct).to eq false + expect(@user.account.statuses_cleanup_policy.keep_polls).to eq true + end + end +end diff --git a/spec/controllers/well_known/webfinger_controller_spec.rb b/spec/controllers/well_known/webfinger_controller_spec.rb index 1075456f3..8574d369d 100644 --- a/spec/controllers/well_known/webfinger_controller_spec.rb +++ b/spec/controllers/well_known/webfinger_controller_spec.rb @@ -24,6 +24,10 @@ describe WellKnown::WebfingerController, type: :controller do expect(response).to have_http_status(200) end + it 'does not set a Vary header' do + expect(response.headers['Vary']).to be_nil + end + it 'returns application/jrd+json' do expect(response.media_type).to eq 'application/jrd+json' end diff --git a/spec/fabricators/account_statuses_cleanup_policy_fabricator.rb b/spec/fabricators/account_statuses_cleanup_policy_fabricator.rb new file mode 100644 index 000000000..29cf1d133 --- /dev/null +++ b/spec/fabricators/account_statuses_cleanup_policy_fabricator.rb @@ -0,0 +1,3 @@ +Fabricator(:account_statuses_cleanup_policy) do + account +end diff --git a/spec/fabricators/login_activity_fabricator.rb b/spec/fabricators/login_activity_fabricator.rb new file mode 100644 index 000000000..931d3082c --- /dev/null +++ b/spec/fabricators/login_activity_fabricator.rb @@ -0,0 +1,8 @@ +Fabricator(:login_activity) do + user + strategy 'password' + success true + failure_reason nil + ip { Faker::Internet.ip_v4_address } + user_agent { Faker::Internet.user_agent } +end diff --git a/spec/fixtures/files/boop.ogg b/spec/fixtures/files/boop.ogg new file mode 100644 index 000000000..23cbbedb1 Binary files /dev/null and b/spec/fixtures/files/boop.ogg differ diff --git a/spec/fixtures/requests/oembed_youtube.html b/spec/fixtures/requests/oembed_youtube.html new file mode 100644 index 000000000..1508e4dd9 --- /dev/null +++ b/spec/fixtures/requests/oembed_youtube.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/spec/fixtures/xml/mastodon.atom b/spec/fixtures/xml/mastodon.atom deleted file mode 100644 index 92921a938..000000000 --- a/spec/fixtures/xml/mastodon.atom +++ /dev/null @@ -1,261 +0,0 @@ - - - http://kickass.zone/users/localhost.atom - ::1 - 2016-10-10T13:29:56Z - http://kickass.zone/system/accounts/avatars/000/000/001/medium/eris.png - - http://activitystrea.ms/schema/1.0/person - http://kickass.zone/users/localhost - localhost - localhost@kickass.zone - - - - - localhost - ::1 - - - - - - - tag:kickass.zone,2016-10-10:objectId=7:objectType=Follow - 2016-10-10T13:29:56Z - 2016-10-10T13:29:56Z - localhost started following kat@mastodon.social - localhost started following kat@mastodon.social - http://activitystrea.ms/schema/1.0/follow - - - http://activitystrea.ms/schema/1.0/activity - - http://activitystrea.ms/schema/1.0/person - https://mastodon.social/users/kat - kat - kat@mastodon.social - #trans #queer - - - - - kat - Kat - #trans #queer - - - - tag:kickass.zone,2016-10-10:objectId=3:objectType=Favourite - 2016-10-10T13:29:26Z - 2016-10-10T13:29:26Z - localhost favourited a status by kat@mastodon.social - localhost favourited a status by kat@mastodon.social - http://activitystrea.ms/schema/1.0/favorite - - - http://activitystrea.ms/schema/1.0/activity - - - http://activitystrea.ms/schema/1.0/comment - tag:mastodon.social,2016-10-10:objectId=22833:objectType=Status - @localhost oooh more mastodons ❤ - - <p><a href="http://kickass.zone/users/localhost">@localhost</a> oooh more mastodons ❤</p> - http://activitystrea.ms/schema/1.0/post - 2016-10-10T13:23:35Z - 2016-10-10T13:23:35Z - - http://activitystrea.ms/schema/1.0/person - https://mastodon.social/users/kat - kat - kat@mastodon.social - #trans #queer - - - - - kat - Kat - #trans #queer - - - - - - tag:kickass.zone,2016-10-10:objectId=2:objectType=Favourite - 2016-10-10T13:13:15Z - 2016-10-10T13:13:15Z - localhost favourited a status by Gargron@mastodon.social - localhost favourited a status by Gargron@mastodon.social - http://activitystrea.ms/schema/1.0/favorite - - - http://activitystrea.ms/schema/1.0/activity - - - http://activitystrea.ms/schema/1.0/note - tag:mastodon.social,2016-10-10:objectId=22825:objectType=Status - Deployed some fixes - - <p>Deployed some fixes</p> - http://activitystrea.ms/schema/1.0/post - 2016-10-10T13:10:37Z - 2016-10-10T13:10:37Z - - http://activitystrea.ms/schema/1.0/person - https://mastodon.social/users/Gargron - Gargron - Gargron@mastodon.social - Developer of Mastodon, a GNU social alternative: https://github.com/tootsuite/mastodon - - - - - Gargron - Eugen - Developer of Mastodon, a GNU social alternative: https://github.com/tootsuite/mastodon - - - - - tag:kickass.zone,2016-10-10:objectId=17:objectType=Status - 2016-10-10T00:41:31Z - 2016-10-10T00:41:31Z - Social media needs MOAR cats! http://kickass.zone/media/3 - <p>Social media needs MOAR cats! <a rel="nofollow noopener noreferrer" href="http://kickass.zone/media/3">http://kickass.zone/media/3</a></p> - http://activitystrea.ms/schema/1.0/post - - - http://activitystrea.ms/schema/1.0/note - - - - tag:kickass.zone,2016-10-10:objectId=14:objectType=Status - 2016-10-10T00:38:39Z - 2016-10-10T00:38:39Z - http://kickass.zone/media/2 - <p><a rel="nofollow noopener noreferrer" href="http://kickass.zone/media/2">http://kickass.zone/media/2</a></p> - http://activitystrea.ms/schema/1.0/post - - - http://activitystrea.ms/schema/1.0/note - - - - tag:kickass.zone,2016-10-10:objectId=12:objectType=Status - 2016-10-10T00:37:49Z - 2016-10-10T00:37:49Z - - <activity:verb>http://activitystrea.ms/schema/1.0/delete</activity:verb> - <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost/updates/7.atom"/> - <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost/updates/7"/> - <activity:object-type>http://activitystrea.ms/schema/1.0/activity</activity:object-type> - </entry> - <entry> - <id>tag:kickass.zone,2016-10-10:objectId=4:objectType=Follow</id> - <published>2016-10-10T00:23:07Z</published> - <updated>2016-10-10T00:23:07Z</updated> - <title>localhost started following bignimbus@mastodon.social - localhost started following bignimbus@mastodon.social - http://activitystrea.ms/schema/1.0/follow - - - http://activitystrea.ms/schema/1.0/activity - - http://activitystrea.ms/schema/1.0/person - https://mastodon.social/users/bignimbus - bignimbus - bignimbus@mastodon.social - jdauriemma.com - - - - - bignimbus - Jeff Auriemma - jdauriemma.com - - - - tag:kickass.zone,2016-10-10:objectId=2:objectType=Follow - 2016-10-10T00:14:18Z - 2016-10-10T00:14:18Z - localhost started following Gargron@mastodon.social - localhost started following Gargron@mastodon.social - http://activitystrea.ms/schema/1.0/follow - - - http://activitystrea.ms/schema/1.0/activity - - http://activitystrea.ms/schema/1.0/person - https://mastodon.social/users/Gargron - Gargron - Gargron@mastodon.social - Developer of Mastodon, a GNU social alternative: https://github.com/tootsuite/mastodon - - - - - Gargron - Eugen - Developer of Mastodon, a GNU social alternative: https://github.com/tootsuite/mastodon - - - - tag:kickass.zone,2016-10-10:objectId=1:objectType=Follow - 2016-10-10T00:09:09Z - 2016-10-10T00:09:09Z - localhost started following abc@mastodon.social - localhost started following abc@mastodon.social - http://activitystrea.ms/schema/1.0/follow - - - http://activitystrea.ms/schema/1.0/activity - - http://activitystrea.ms/schema/1.0/person - https://mastodon.social/users/abc - abc - abc@mastodon.social - - - - - abc - abc - - - - tag:kickass.zone,2016-10-10:objectId=3:objectType=Status - 2016-10-10T00:02:47Z - 2016-10-10T00:02:47Z - - <activity:verb>http://activitystrea.ms/schema/1.0/delete</activity:verb> - <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost/updates/3.atom"/> - <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost/updates/3"/> - <activity:object-type>http://activitystrea.ms/schema/1.0/activity</activity:object-type> - </entry> - <entry> - <id>tag:kickass.zone,2016-10-10:objectId=2:objectType=Status</id> - <published>2016-10-10T00:02:18Z</published> - <updated>2016-10-10T00:02:18Z</updated> - <title>Yes, that was the obligatory first post. :) - <p>Yes, that was the obligatory first post. :)</p> - http://activitystrea.ms/schema/1.0/post - - - http://activitystrea.ms/schema/1.0/comment - - - - tag:kickass.zone,2016-10-10:objectId=1:objectType=Status - 2016-10-10T00:01:56Z - 2016-10-10T00:01:56Z - Hello, world! - <p>Hello, world!</p> - http://activitystrea.ms/schema/1.0/post - - - http://activitystrea.ms/schema/1.0/note - - diff --git a/spec/lib/activitypub/tag_manager_spec.rb b/spec/lib/activitypub/tag_manager_spec.rb index 1c5c6f0ed..606a1de2e 100644 --- a/spec/lib/activitypub/tag_manager_spec.rb +++ b/spec/lib/activitypub/tag_manager_spec.rb @@ -42,6 +42,14 @@ RSpec.describe ActivityPub::TagManager do expect(subject.to(status)).to eq [subject.uri_for(mentioned)] end + it "returns URIs of mentioned group's followers for direct statuses to groups" do + status = Fabricate(:status, visibility: :direct) + mentioned = Fabricate(:account, domain: 'remote.org', uri: 'https://remote.org/group', followers_url: 'https://remote.org/group/followers', actor_type: 'Group') + status.mentions.create(account: mentioned) + expect(subject.to(status)).to include(subject.uri_for(mentioned)) + expect(subject.to(status)).to include(subject.followers_uri_for(mentioned)) + end + it "returns URIs of mentions for direct silenced author's status only if they are followers or requesting to be" do bob = Fabricate(:account, username: 'bob') alice = Fabricate(:account, username: 'alice') diff --git a/spec/lib/permalink_redirector_spec.rb b/spec/lib/permalink_redirector_spec.rb new file mode 100644 index 000000000..b916b33b2 --- /dev/null +++ b/spec/lib/permalink_redirector_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe PermalinkRedirector do + describe '#redirect_url' do + before do + account = Fabricate(:account, username: 'alice', id: 1) + Fabricate(:status, account: account, id: 123) + end + + it 'returns path for legacy account links' do + redirector = described_class.new('web/accounts/1') + expect(redirector.redirect_path).to eq 'https://cb6e6126.ngrok.io/@alice' + end + + it 'returns path for legacy status links' do + redirector = described_class.new('web/statuses/123') + expect(redirector.redirect_path).to eq 'https://cb6e6126.ngrok.io/@alice/123' + end + + it 'returns path for legacy tag links' do + redirector = described_class.new('web/timelines/tag/hoge') + expect(redirector.redirect_path).to eq '/tags/hoge' + end + + it 'returns path for pretty account links' do + redirector = described_class.new('web/@alice') + expect(redirector.redirect_path).to eq 'https://cb6e6126.ngrok.io/@alice' + end + + it 'returns path for pretty status links' do + redirector = described_class.new('web/@alice/123') + expect(redirector.redirect_path).to eq 'https://cb6e6126.ngrok.io/@alice/123' + end + + it 'returns path for pretty tag links' do + redirector = described_class.new('web/tags/hoge') + expect(redirector.redirect_path).to eq '/tags/hoge' + end + end +end diff --git a/spec/models/account_statuses_cleanup_policy_spec.rb b/spec/models/account_statuses_cleanup_policy_spec.rb new file mode 100644 index 000000000..4732ad625 --- /dev/null +++ b/spec/models/account_statuses_cleanup_policy_spec.rb @@ -0,0 +1,546 @@ +require 'rails_helper' + +RSpec.describe AccountStatusesCleanupPolicy, type: :model do + let(:account) { Fabricate(:account, username: 'alice', domain: nil) } + + describe 'validation' do + it 'disallow remote accounts' do + account.update(domain: 'example.com') + account_statuses_cleanup_policy = Fabricate.build(:account_statuses_cleanup_policy, account: account) + account_statuses_cleanup_policy.valid? + expect(account_statuses_cleanup_policy).to model_have_error_on_field(:account) + end + end + + describe 'save hooks' do + context 'when widening a policy' do + let!(:account_statuses_cleanup_policy) do + Fabricate(:account_statuses_cleanup_policy, + account: account, + keep_direct: true, + keep_pinned: true, + keep_polls: true, + keep_media: true, + keep_self_fav: true, + keep_self_bookmark: true, + min_favs: 1, + min_reblogs: 1 + ) + end + + before do + account_statuses_cleanup_policy.record_last_inspected(42) + end + + it 'invalidates last_inspected when widened because of keep_direct' do + account_statuses_cleanup_policy.keep_direct = false + account_statuses_cleanup_policy.save + expect(account_statuses_cleanup_policy.last_inspected).to be nil + end + + it 'invalidates last_inspected when widened because of keep_pinned' do + account_statuses_cleanup_policy.keep_pinned = false + account_statuses_cleanup_policy.save + expect(account_statuses_cleanup_policy.last_inspected).to be nil + end + + it 'invalidates last_inspected when widened because of keep_polls' do + account_statuses_cleanup_policy.keep_polls = false + account_statuses_cleanup_policy.save + expect(account_statuses_cleanup_policy.last_inspected).to be nil + end + + it 'invalidates last_inspected when widened because of keep_media' do + account_statuses_cleanup_policy.keep_media = false + account_statuses_cleanup_policy.save + expect(account_statuses_cleanup_policy.last_inspected).to be nil + end + + it 'invalidates last_inspected when widened because of keep_self_fav' do + account_statuses_cleanup_policy.keep_self_fav = false + account_statuses_cleanup_policy.save + expect(account_statuses_cleanup_policy.last_inspected).to be nil + end + + it 'invalidates last_inspected when widened because of keep_self_bookmark' do + account_statuses_cleanup_policy.keep_self_bookmark = false + account_statuses_cleanup_policy.save + expect(account_statuses_cleanup_policy.last_inspected).to be nil + end + + it 'invalidates last_inspected when widened because of higher min_favs' do + account_statuses_cleanup_policy.min_favs = 5 + account_statuses_cleanup_policy.save + expect(account_statuses_cleanup_policy.last_inspected).to be nil + end + + it 'invalidates last_inspected when widened because of disabled min_favs' do + account_statuses_cleanup_policy.min_favs = nil + account_statuses_cleanup_policy.save + expect(account_statuses_cleanup_policy.last_inspected).to be nil + end + + it 'invalidates last_inspected when widened because of higher min_reblogs' do + account_statuses_cleanup_policy.min_reblogs = 5 + account_statuses_cleanup_policy.save + expect(account_statuses_cleanup_policy.last_inspected).to be nil + end + + it 'invalidates last_inspected when widened because of disable min_reblogs' do + account_statuses_cleanup_policy.min_reblogs = nil + account_statuses_cleanup_policy.save + expect(account_statuses_cleanup_policy.last_inspected).to be nil + end + end + + context 'when narrowing a policy' do + let!(:account_statuses_cleanup_policy) do + Fabricate(:account_statuses_cleanup_policy, + account: account, + keep_direct: false, + keep_pinned: false, + keep_polls: false, + keep_media: false, + keep_self_fav: false, + keep_self_bookmark: false, + min_favs: nil, + min_reblogs: nil + ) + end + + it 'does not unnecessarily invalidate last_inspected' do + account_statuses_cleanup_policy.record_last_inspected(42) + account_statuses_cleanup_policy.keep_direct = true + account_statuses_cleanup_policy.keep_pinned = true + account_statuses_cleanup_policy.keep_polls = true + account_statuses_cleanup_policy.keep_media = true + account_statuses_cleanup_policy.keep_self_fav = true + account_statuses_cleanup_policy.keep_self_bookmark = true + account_statuses_cleanup_policy.min_favs = 5 + account_statuses_cleanup_policy.min_reblogs = 5 + account_statuses_cleanup_policy.save + expect(account_statuses_cleanup_policy.last_inspected).to eq 42 + end + end + end + + describe '#record_last_inspected' do + let(:account_statuses_cleanup_policy) { Fabricate(:account_statuses_cleanup_policy, account: account) } + + it 'records the given id' do + account_statuses_cleanup_policy.record_last_inspected(42) + expect(account_statuses_cleanup_policy.last_inspected).to eq 42 + end + end + + describe '#invalidate_last_inspected' do + let(:account_statuses_cleanup_policy) { Fabricate(:account_statuses_cleanup_policy, account: account) } + let(:status) { Fabricate(:status, id: 10, account: account) } + subject { account_statuses_cleanup_policy.invalidate_last_inspected(status, action) } + + before do + account_statuses_cleanup_policy.record_last_inspected(42) + end + + context 'when the action is :unbookmark' do + let(:action) { :unbookmark } + + context 'when the policy is not to keep self-bookmarked toots' do + before do + account_statuses_cleanup_policy.keep_self_bookmark = false + end + + it 'does not change the recorded id' do + subject + expect(account_statuses_cleanup_policy.last_inspected).to eq 42 + end + end + + context 'when the policy is to keep self-bookmarked toots' do + before do + account_statuses_cleanup_policy.keep_self_bookmark = true + end + + it 'records the older id' do + subject + expect(account_statuses_cleanup_policy.last_inspected).to eq 10 + end + end + end + + context 'when the action is :unfav' do + let(:action) { :unfav } + + context 'when the policy is not to keep self-favourited toots' do + before do + account_statuses_cleanup_policy.keep_self_fav = false + end + + it 'does not change the recorded id' do + subject + expect(account_statuses_cleanup_policy.last_inspected).to eq 42 + end + end + + context 'when the policy is to keep self-favourited toots' do + before do + account_statuses_cleanup_policy.keep_self_fav = true + end + + it 'records the older id' do + subject + expect(account_statuses_cleanup_policy.last_inspected).to eq 10 + end + end + end + + context 'when the action is :unpin' do + let(:action) { :unpin } + + context 'when the policy is not to keep pinned toots' do + before do + account_statuses_cleanup_policy.keep_pinned = false + end + + it 'does not change the recorded id' do + subject + expect(account_statuses_cleanup_policy.last_inspected).to eq 42 + end + end + + context 'when the policy is to keep pinned toots' do + before do + account_statuses_cleanup_policy.keep_pinned = true + end + + it 'records the older id' do + subject + expect(account_statuses_cleanup_policy.last_inspected).to eq 10 + end + end + end + + context 'when the status is more recent than the recorded inspected id' do + let(:action) { :unfav } + let(:status) { Fabricate(:status, account: account) } + + it 'does not change the recorded id' do + subject + expect(account_statuses_cleanup_policy.last_inspected).to eq 42 + end + end + end + + describe '#compute_cutoff_id' do + let!(:unrelated_status) { Fabricate(:status, created_at: 3.years.ago) } + let(:account_statuses_cleanup_policy) { Fabricate(:account_statuses_cleanup_policy, account: account) } + + subject { account_statuses_cleanup_policy.compute_cutoff_id } + + context 'when the account has posted multiple toots' do + let!(:very_old_status) { Fabricate(:status, created_at: 3.years.ago, account: account) } + let!(:old_status) { Fabricate(:status, created_at: 3.weeks.ago, account: account) } + let!(:recent_status) { Fabricate(:status, created_at: 2.days.ago, account: account) } + + it 'returns the most recent id that is still below policy age' do + expect(subject).to eq old_status.id + end + end + + context 'when the account has not posted anything' do + it 'returns nil' do + expect(subject).to be_nil + end + end + end + + describe '#statuses_to_delete' do + let!(:unrelated_status) { Fabricate(:status, created_at: 3.years.ago) } + let!(:very_old_status) { Fabricate(:status, created_at: 3.years.ago, account: account) } + let!(:pinned_status) { Fabricate(:status, created_at: 1.year.ago, account: account) } + let!(:direct_message) { Fabricate(:status, created_at: 1.year.ago, account: account, visibility: :direct) } + let!(:self_faved) { Fabricate(:status, created_at: 1.year.ago, account: account) } + let!(:self_bookmarked) { Fabricate(:status, created_at: 1.year.ago, account: account) } + let!(:status_with_poll) { Fabricate(:status, created_at: 1.year.ago, account: account, poll_attributes: { account: account, voters_count: 0, options: ['a', 'b'], expires_in: 2.days }) } + let!(:status_with_media) { Fabricate(:status, created_at: 1.year.ago, account: account) } + let!(:faved4) { Fabricate(:status, created_at: 1.year.ago, account: account) } + let!(:faved5) { Fabricate(:status, created_at: 1.year.ago, account: account) } + let!(:reblogged4) { Fabricate(:status, created_at: 1.year.ago, account: account) } + let!(:reblogged5) { Fabricate(:status, created_at: 1.year.ago, account: account) } + let!(:recent_status) { Fabricate(:status, created_at: 2.days.ago, account: account) } + + let!(:media_attachment) { Fabricate(:media_attachment, account: account, status: status_with_media) } + let!(:status_pin) { Fabricate(:status_pin, account: account, status: pinned_status) } + let!(:favourite) { Fabricate(:favourite, account: account, status: self_faved) } + let!(:bookmark) { Fabricate(:bookmark, account: account, status: self_bookmarked) } + + let(:account_statuses_cleanup_policy) { Fabricate(:account_statuses_cleanup_policy, account: account) } + + subject { account_statuses_cleanup_policy.statuses_to_delete } + + before do + 4.times { faved4.increment_count!(:favourites_count) } + 5.times { faved5.increment_count!(:favourites_count) } + 4.times { reblogged4.increment_count!(:reblogs_count) } + 5.times { reblogged5.increment_count!(:reblogs_count) } + end + + context 'when passed a max_id' do + let!(:old_status) { Fabricate(:status, created_at: 1.year.ago, account: account) } + let!(:slightly_less_old_status) { Fabricate(:status, created_at: 6.months.ago, account: account) } + + subject { account_statuses_cleanup_policy.statuses_to_delete(50, old_status.id).pluck(:id) } + + it 'returns statuses including max_id' do + expect(subject).to include(old_status.id) + end + + it 'returns statuses including older than max_id' do + expect(subject).to include(very_old_status.id) + end + + it 'does not return statuses newer than max_id' do + expect(subject).to_not include(slightly_less_old_status.id) + end + end + + context 'when passed a min_id' do + let!(:old_status) { Fabricate(:status, created_at: 1.year.ago, account: account) } + let!(:slightly_less_old_status) { Fabricate(:status, created_at: 6.months.ago, account: account) } + + subject { account_statuses_cleanup_policy.statuses_to_delete(50, recent_status.id, old_status.id).pluck(:id) } + + it 'returns statuses including min_id' do + expect(subject).to include(old_status.id) + end + + it 'returns statuses including newer than max_id' do + expect(subject).to include(slightly_less_old_status.id) + end + + it 'does not return statuses older than min_id' do + expect(subject).to_not include(very_old_status.id) + end + end + + context 'when passed a low limit' do + it 'only returns the limited number of items' do + expect(account_statuses_cleanup_policy.statuses_to_delete(1).count).to eq 1 + end + end + + context 'when policy is set to keep statuses more recent than 2 years' do + before do + account_statuses_cleanup_policy.min_status_age = 2.years.seconds + end + + it 'does not return unrelated old status' do + expect(subject.pluck(:id)).to_not include(unrelated_status.id) + end + + it 'returns only oldest status for deletion' do + expect(subject.pluck(:id)).to eq [very_old_status.id] + end + end + + context 'when policy is set to keep DMs and reject everything else' do + before do + account_statuses_cleanup_policy.keep_direct = true + account_statuses_cleanup_policy.keep_pinned = false + account_statuses_cleanup_policy.keep_polls = false + account_statuses_cleanup_policy.keep_media = false + account_statuses_cleanup_policy.keep_self_fav = false + account_statuses_cleanup_policy.keep_self_bookmark = false + end + + it 'does not return the old direct message for deletion' do + expect(subject.pluck(:id)).to_not include(direct_message.id) + end + + it 'returns every other old status for deletion' do + expect(subject.pluck(:id)).to include(very_old_status.id, pinned_status.id, self_faved.id, self_bookmarked.id, status_with_poll.id, status_with_media.id, faved4.id, faved5.id, reblogged4.id, reblogged5.id) + end + end + + context 'when policy is set to keep self-bookmarked toots and reject everything else' do + before do + account_statuses_cleanup_policy.keep_direct = false + account_statuses_cleanup_policy.keep_pinned = false + account_statuses_cleanup_policy.keep_polls = false + account_statuses_cleanup_policy.keep_media = false + account_statuses_cleanup_policy.keep_self_fav = false + account_statuses_cleanup_policy.keep_self_bookmark = true + end + + it 'does not return the old self-bookmarked message for deletion' do + expect(subject.pluck(:id)).to_not include(self_bookmarked.id) + end + + it 'returns every other old status for deletion' do + expect(subject.pluck(:id)).to include(direct_message.id, very_old_status.id, pinned_status.id, self_faved.id, status_with_poll.id, status_with_media.id, faved4.id, faved5.id, reblogged4.id, reblogged5.id) + end + end + + context 'when policy is set to keep self-faved toots and reject everything else' do + before do + account_statuses_cleanup_policy.keep_direct = false + account_statuses_cleanup_policy.keep_pinned = false + account_statuses_cleanup_policy.keep_polls = false + account_statuses_cleanup_policy.keep_media = false + account_statuses_cleanup_policy.keep_self_fav = true + account_statuses_cleanup_policy.keep_self_bookmark = false + end + + it 'does not return the old self-bookmarked message for deletion' do + expect(subject.pluck(:id)).to_not include(self_faved.id) + end + + it 'returns every other old status for deletion' do + expect(subject.pluck(:id)).to include(direct_message.id, very_old_status.id, pinned_status.id, self_bookmarked.id, status_with_poll.id, status_with_media.id, faved4.id, faved5.id, reblogged4.id, reblogged5.id) + end + end + + context 'when policy is set to keep toots with media and reject everything else' do + before do + account_statuses_cleanup_policy.keep_direct = false + account_statuses_cleanup_policy.keep_pinned = false + account_statuses_cleanup_policy.keep_polls = false + account_statuses_cleanup_policy.keep_media = true + account_statuses_cleanup_policy.keep_self_fav = false + account_statuses_cleanup_policy.keep_self_bookmark = false + end + + it 'does not return the old message with media for deletion' do + expect(subject.pluck(:id)).to_not include(status_with_media.id) + end + + it 'returns every other old status for deletion' do + expect(subject.pluck(:id)).to include(direct_message.id, very_old_status.id, pinned_status.id, self_faved.id, self_bookmarked.id, status_with_poll.id, faved4.id, faved5.id, reblogged4.id, reblogged5.id) + end + end + + context 'when policy is set to keep toots with polls and reject everything else' do + before do + account_statuses_cleanup_policy.keep_direct = false + account_statuses_cleanup_policy.keep_pinned = false + account_statuses_cleanup_policy.keep_polls = true + account_statuses_cleanup_policy.keep_media = false + account_statuses_cleanup_policy.keep_self_fav = false + account_statuses_cleanup_policy.keep_self_bookmark = false + end + + it 'does not return the old poll message for deletion' do + expect(subject.pluck(:id)).to_not include(status_with_poll.id) + end + + it 'returns every other old status for deletion' do + expect(subject.pluck(:id)).to include(direct_message.id, very_old_status.id, pinned_status.id, self_faved.id, self_bookmarked.id, status_with_media.id, faved4.id, faved5.id, reblogged4.id, reblogged5.id) + end + end + + context 'when policy is set to keep pinned toots and reject everything else' do + before do + account_statuses_cleanup_policy.keep_direct = false + account_statuses_cleanup_policy.keep_pinned = true + account_statuses_cleanup_policy.keep_polls = false + account_statuses_cleanup_policy.keep_media = false + account_statuses_cleanup_policy.keep_self_fav = false + account_statuses_cleanup_policy.keep_self_bookmark = false + end + + it 'does not return the old pinned message for deletion' do + expect(subject.pluck(:id)).to_not include(pinned_status.id) + end + + it 'returns every other old status for deletion' do + expect(subject.pluck(:id)).to include(direct_message.id, very_old_status.id, self_faved.id, self_bookmarked.id, status_with_poll.id, status_with_media.id, faved4.id, faved5.id, reblogged4.id, reblogged5.id) + end + end + + context 'when policy is to not keep any special messages' do + before do + account_statuses_cleanup_policy.keep_direct = false + account_statuses_cleanup_policy.keep_pinned = false + account_statuses_cleanup_policy.keep_polls = false + account_statuses_cleanup_policy.keep_media = false + account_statuses_cleanup_policy.keep_self_fav = false + account_statuses_cleanup_policy.keep_self_bookmark = false + end + + it 'does not return the recent toot' do + expect(subject.pluck(:id)).to_not include(recent_status.id) + end + + it 'does not return the unrelated toot' do + expect(subject.pluck(:id)).to_not include(unrelated_status.id) + end + + it 'returns every other old status for deletion' do + expect(subject.pluck(:id)).to include(direct_message.id, very_old_status.id, pinned_status.id, self_faved.id, self_bookmarked.id, status_with_poll.id, status_with_media.id, faved4.id, faved5.id, reblogged4.id, reblogged5.id) + end + end + + context 'when policy is set to keep every category of toots' do + before do + account_statuses_cleanup_policy.keep_direct = true + account_statuses_cleanup_policy.keep_pinned = true + account_statuses_cleanup_policy.keep_polls = true + account_statuses_cleanup_policy.keep_media = true + account_statuses_cleanup_policy.keep_self_fav = true + account_statuses_cleanup_policy.keep_self_bookmark = true + end + + it 'does not return unrelated old status' do + expect(subject.pluck(:id)).to_not include(unrelated_status.id) + end + + it 'returns only normal statuses for deletion' do + expect(subject.pluck(:id).sort).to eq [very_old_status.id, faved4.id, faved5.id, reblogged4.id, reblogged5.id].sort + end + end + + context 'when policy is to keep statuses with at least 5 boosts' do + before do + account_statuses_cleanup_policy.min_reblogs = 5 + end + + it 'does not return the recent toot' do + expect(subject.pluck(:id)).to_not include(recent_status.id) + end + + it 'does not return the toot reblogged 5 times' do + expect(subject.pluck(:id)).to_not include(reblogged5.id) + end + + it 'does not return the unrelated toot' do + expect(subject.pluck(:id)).to_not include(unrelated_status.id) + end + + it 'returns old statuses not reblogged as much' do + expect(subject.pluck(:id)).to include(very_old_status.id, faved4.id, faved5.id, reblogged4.id) + end + end + + context 'when policy is to keep statuses with at least 5 favs' do + before do + account_statuses_cleanup_policy.min_favs = 5 + end + + it 'does not return the recent toot' do + expect(subject.pluck(:id)).to_not include(recent_status.id) + end + + it 'does not return the toot faved 5 times' do + expect(subject.pluck(:id)).to_not include(faved5.id) + end + + it 'does not return the unrelated toot' do + expect(subject.pluck(:id)).to_not include(unrelated_status.id) + end + + it 'returns old statuses not faved as much' do + expect(subject.pluck(:id)).to include(very_old_status.id, faved4.id, reblogged4.id, reblogged5.id) + end + end + end +end diff --git a/spec/models/concerns/account_interactions_spec.rb b/spec/models/concerns/account_interactions_spec.rb index 85fbf7e79..0369aff10 100644 --- a/spec/models/concerns/account_interactions_spec.rb +++ b/spec/models/concerns/account_interactions_spec.rb @@ -360,6 +360,23 @@ describe AccountInteractions do end end + describe '#followed_by?' do + subject { account.followed_by?(target_account) } + + context 'followed by target_account' do + it 'returns true' do + account.passive_relationships.create(account: target_account) + is_expected.to be true + end + end + + context 'not followed by target_account' do + it 'returns false' do + is_expected.to be false + end + end + end + describe '#blocking?' do subject { account.blocking?(target_account) } @@ -539,46 +556,57 @@ describe AccountInteractions do end end - describe '#followers_hash' do + describe '#remote_followers_hash' do let(:me) { Fabricate(:account, username: 'Me') } let(:remote_1) { Fabricate(:account, username: 'alice', domain: 'example.org', uri: 'https://example.org/users/alice') } let(:remote_2) { Fabricate(:account, username: 'bob', domain: 'example.org', uri: 'https://example.org/users/bob') } - let(:remote_3) { Fabricate(:account, username: 'eve', domain: 'foo.org', uri: 'https://foo.org/users/eve') } + let(:remote_3) { Fabricate(:account, username: 'instance-actor', domain: 'example.org', uri: 'https://example.org') } + let(:remote_4) { Fabricate(:account, username: 'eve', domain: 'foo.org', uri: 'https://foo.org/users/eve') } before do remote_1.follow!(me) remote_2.follow!(me) remote_3.follow!(me) + remote_4.follow!(me) me.follow!(remote_1) end - context 'on a local user' do - it 'returns correct hash for remote domains' do - expect(me.remote_followers_hash('https://example.org/')).to eq '707962e297b7bd94468a21bc8e506a1bcea607a9142cd64e27c9b106b2a5f6ec' - expect(me.remote_followers_hash('https://foo.org/')).to eq 'ccb9c18a67134cfff9d62c7f7e7eb88e6b803446c244b84265565f4eba29df0e' - end - - it 'invalidates cache as needed when removing or adding followers' do - expect(me.remote_followers_hash('https://example.org/')).to eq '707962e297b7bd94468a21bc8e506a1bcea607a9142cd64e27c9b106b2a5f6ec' - remote_1.unfollow!(me) - expect(me.remote_followers_hash('https://example.org/')).to eq '241b00794ce9b46aa864f3220afadef128318da2659782985bac5ed5bd436bff' - remote_1.follow!(me) - expect(me.remote_followers_hash('https://example.org/')).to eq '707962e297b7bd94468a21bc8e506a1bcea607a9142cd64e27c9b106b2a5f6ec' - end + it 'returns correct hash for remote domains' do + expect(me.remote_followers_hash('https://example.org/')).to eq '20aecbe774b3d61c25094370baf370012b9271c5b172ecedb05caff8d79ef0c7' + expect(me.remote_followers_hash('https://foo.org/')).to eq 'ccb9c18a67134cfff9d62c7f7e7eb88e6b803446c244b84265565f4eba29df0e' + expect(me.remote_followers_hash('https://foo.org.evil.com/')).to eq '0000000000000000000000000000000000000000000000000000000000000000' + expect(me.remote_followers_hash('https://foo')).to eq '0000000000000000000000000000000000000000000000000000000000000000' end - context 'on a remote user' do - it 'returns correct hash for remote domains' do - expect(remote_1.local_followers_hash).to eq Digest::SHA256.hexdigest(ActivityPub::TagManager.instance.uri_for(me)) - end + it 'invalidates cache as needed when removing or adding followers' do + expect(me.remote_followers_hash('https://example.org/')).to eq '20aecbe774b3d61c25094370baf370012b9271c5b172ecedb05caff8d79ef0c7' + remote_3.unfollow!(me) + expect(me.remote_followers_hash('https://example.org/')).to eq '707962e297b7bd94468a21bc8e506a1bcea607a9142cd64e27c9b106b2a5f6ec' + remote_1.unfollow!(me) + expect(me.remote_followers_hash('https://example.org/')).to eq '241b00794ce9b46aa864f3220afadef128318da2659782985bac5ed5bd436bff' + remote_1.follow!(me) + expect(me.remote_followers_hash('https://example.org/')).to eq '707962e297b7bd94468a21bc8e506a1bcea607a9142cd64e27c9b106b2a5f6ec' + end + end - it 'invalidates cache as needed when removing or adding followers' do - expect(remote_1.local_followers_hash).to eq Digest::SHA256.hexdigest(ActivityPub::TagManager.instance.uri_for(me)) - me.unfollow!(remote_1) - expect(remote_1.local_followers_hash).to eq '0000000000000000000000000000000000000000000000000000000000000000' - me.follow!(remote_1) - expect(remote_1.local_followers_hash).to eq Digest::SHA256.hexdigest(ActivityPub::TagManager.instance.uri_for(me)) - end + describe '#local_followers_hash' do + let(:me) { Fabricate(:account, username: 'Me') } + let(:remote_1) { Fabricate(:account, username: 'alice', domain: 'example.org', uri: 'https://example.org/users/alice') } + + before do + me.follow!(remote_1) + end + + it 'returns correct hash for local users' do + expect(remote_1.local_followers_hash).to eq Digest::SHA256.hexdigest(ActivityPub::TagManager.instance.uri_for(me)) + end + + it 'invalidates cache as needed when removing or adding followers' do + expect(remote_1.local_followers_hash).to eq Digest::SHA256.hexdigest(ActivityPub::TagManager.instance.uri_for(me)) + me.unfollow!(remote_1) + expect(remote_1.local_followers_hash).to eq '0000000000000000000000000000000000000000000000000000000000000000' + me.follow!(remote_1) + expect(remote_1.local_followers_hash).to eq Digest::SHA256.hexdigest(ActivityPub::TagManager.instance.uri_for(me)) end end diff --git a/spec/models/login_activity_spec.rb b/spec/models/login_activity_spec.rb new file mode 100644 index 000000000..ba2d207c9 --- /dev/null +++ b/spec/models/login_activity_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe LoginActivity, type: :model do + +end diff --git a/spec/models/media_attachment_spec.rb b/spec/models/media_attachment_spec.rb index 456bc4216..7360b23cf 100644 --- a/spec/models/media_attachment_spec.rb +++ b/spec/models/media_attachment_spec.rb @@ -62,11 +62,23 @@ RSpec.describe MediaAttachment, type: :model do end describe '#to_param' do - let(:media_attachment) { Fabricate(:media_attachment) } - let(:shortcode) { media_attachment.shortcode } + let(:media_attachment) { Fabricate(:media_attachment, shortcode: shortcode) } + let(:shortcode) { nil } - it 'returns shortcode' do - expect(media_attachment.to_param).to eq shortcode + context 'when media attachment has a shortcode' do + let(:shortcode) { 'foo' } + + it 'returns shortcode' do + expect(media_attachment.to_param).to eq shortcode + end + end + + context 'when media attachment does not have a shortcode' do + let(:shortcode) { nil } + + it 'returns string representation of id' do + expect(media_attachment.to_param).to eq media_attachment.id.to_s + end end end @@ -114,6 +126,30 @@ RSpec.describe MediaAttachment, type: :model do end end + describe 'ogg with cover art' do + let(:media) { MediaAttachment.create(account: Fabricate(:account), file: attachment_fixture('boop.ogg')) } + + it 'detects it as an audio file' do + expect(media.type).to eq 'audio' + end + + it 'sets meta for the duration' do + expect(media.file.meta['original']['duration']).to be_within(0.05).of(0.235102) + end + + it 'extracts thumbnail' do + expect(media.thumbnail.present?).to eq true + end + + it 'extracts colors from thumbnail' do + expect(media.file.meta['colors']['background']).to eq '#3088d4' + end + + it 'gives the file a random name' do + expect(media.file_file_name).to_not eq 'boop.ogg' + end + end + describe 'jpeg' do let(:media) { MediaAttachment.create(account: Fabricate(:account), file: attachment_fixture('attachment.jpg')) } @@ -157,4 +193,32 @@ RSpec.describe MediaAttachment, type: :model do expect(media.description.size).to be <= 1_500 end end + + describe 'size limit validation' do + it 'rejects video files that are too large' do + stub_const 'MediaAttachment::IMAGE_LIMIT', 100.megabytes + stub_const 'MediaAttachment::VIDEO_LIMIT', 1.kilobyte + expect { MediaAttachment.create!(account: Fabricate(:account), file: attachment_fixture('attachment.webm')) }.to raise_error(ActiveRecord::RecordInvalid) + end + + it 'accepts video files that are small enough' do + stub_const 'MediaAttachment::IMAGE_LIMIT', 1.kilobyte + stub_const 'MediaAttachment::VIDEO_LIMIT', 100.megabytes + media = MediaAttachment.create!(account: Fabricate(:account), file: attachment_fixture('attachment.webm')) + expect(media.valid?).to be true + end + + it 'rejects image files that are too large' do + stub_const 'MediaAttachment::IMAGE_LIMIT', 1.kilobyte + stub_const 'MediaAttachment::VIDEO_LIMIT', 100.megabytes + expect { MediaAttachment.create!(account: Fabricate(:account), file: attachment_fixture('attachment.jpg')) }.to raise_error(ActiveRecord::RecordInvalid) + end + + it 'accepts image files that are small enough' do + stub_const 'MediaAttachment::IMAGE_LIMIT', 100.megabytes + stub_const 'MediaAttachment::VIDEO_LIMIT', 1.kilobyte + media = MediaAttachment.create!(account: Fabricate(:account), file: attachment_fixture('attachment.jpg')) + expect(media.valid?).to be true + end + end end diff --git a/spec/models/tag_feed_spec.rb b/spec/models/tag_feed_spec.rb index 17d88eb99..819fe3765 100644 --- a/spec/models/tag_feed_spec.rb +++ b/spec/models/tag_feed_spec.rb @@ -37,7 +37,7 @@ describe TagFeed, type: :service do expect(results).to include both end - it 'handles being passed non existant tag names' do + it 'handles being passed non existent tag names' do results = described_class.new(tag1, nil, any: ['wark']).get(20) expect(results).to include status1 expect(results).to_not include status2 diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 5db249be2..54bb6db7f 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -344,6 +344,34 @@ RSpec.describe User, type: :model do end end + describe '#reset_password!' do + subject(:user) { Fabricate(:user, password: 'foobar12345') } + + let!(:session_activation) { Fabricate(:session_activation, user: user) } + let!(:access_token) { Fabricate(:access_token, resource_owner_id: user.id) } + let!(:web_push_subscription) { Fabricate(:web_push_subscription, access_token: access_token) } + + before do + user.reset_password! + end + + it 'changes the password immediately' do + expect(user.external_or_valid_password?('foobar12345')).to be false + end + + it 'deactivates all sessions' do + expect(user.session_activations.count).to eq 0 + end + + it 'revokes all access tokens' do + expect(Doorkeeper::AccessToken.active_for(user).count).to eq 0 + end + + it 'removes push subscriptions' do + expect(Web::PushSubscription.where(user: user).or(Web::PushSubscription.where(access_token: access_token)).count).to eq 0 + end + end + describe '#confirm!' do subject(:user) { Fabricate(:user, confirmed_at: confirmed_at) } diff --git a/spec/presenters/instance_presenter_spec.rb b/spec/presenters/instance_presenter_spec.rb index 93a4e88e4..973b3e23c 100644 --- a/spec/presenters/instance_presenter_spec.rb +++ b/spec/presenters/instance_presenter_spec.rb @@ -91,8 +91,8 @@ describe InstancePresenter do end describe '#source_url' do - it 'returns "https://github.com/tootsuite/mastodon"' do - expect(instance_presenter.source_url).to eq('https://github.com/tootsuite/mastodon') + it 'returns "https://github.com/mastodon/mastodon"' do + expect(instance_presenter.source_url).to eq('https://github.com/mastodon/mastodon') end end diff --git a/spec/services/account_statuses_cleanup_service_spec.rb b/spec/services/account_statuses_cleanup_service_spec.rb new file mode 100644 index 000000000..257655c41 --- /dev/null +++ b/spec/services/account_statuses_cleanup_service_spec.rb @@ -0,0 +1,101 @@ +require 'rails_helper' + +describe AccountStatusesCleanupService, type: :service do + let(:account) { Fabricate(:account, username: 'alice', domain: nil) } + let(:account_policy) { Fabricate(:account_statuses_cleanup_policy, account: account) } + let!(:unrelated_status) { Fabricate(:status, created_at: 3.years.ago) } + + describe '#call' do + context 'when the account has not posted anything' do + it 'returns 0 deleted toots' do + expect(subject.call(account_policy)).to eq 0 + end + end + + context 'when the account has posted several old statuses' do + let!(:very_old_status) { Fabricate(:status, created_at: 3.years.ago, account: account) } + let!(:old_status) { Fabricate(:status, created_at: 1.year.ago, account: account) } + let!(:another_old_status) { Fabricate(:status, created_at: 1.year.ago, account: account) } + let!(:recent_status) { Fabricate(:status, created_at: 1.day.ago, account: account) } + + context 'given a budget of 1' do + it 'reports 1 deleted toot' do + expect(subject.call(account_policy, 1)).to eq 1 + end + end + + context 'given a normal budget of 10' do + it 'reports 3 deleted statuses' do + expect(subject.call(account_policy, 10)).to eq 3 + end + + it 'records the last deleted id' do + subject.call(account_policy, 10) + expect(account_policy.last_inspected).to eq [old_status.id, another_old_status.id].max + end + + it 'actually deletes the statuses' do + subject.call(account_policy, 10) + expect(Status.find_by(id: [very_old_status.id, old_status.id, another_old_status.id])).to be_nil + end + end + + context 'when called repeatedly with a budget of 2' do + it 'reports 2 then 1 deleted statuses' do + expect(subject.call(account_policy, 2)).to eq 2 + expect(subject.call(account_policy, 2)).to eq 1 + end + + it 'actually deletes the statuses in the expected order' do + subject.call(account_policy, 2) + expect(Status.find_by(id: very_old_status.id)).to be_nil + subject.call(account_policy, 2) + expect(Status.find_by(id: [very_old_status.id, old_status.id, another_old_status.id])).to be_nil + end + end + + context 'when a self-faved toot is unfaved' do + let!(:self_faved) { Fabricate(:status, created_at: 6.months.ago, account: account) } + let!(:favourite) { Fabricate(:favourite, account: account, status: self_faved) } + + it 'deletes it once unfaved' do + expect(subject.call(account_policy, 20)).to eq 3 + expect(Status.find_by(id: self_faved.id)).to_not be_nil + expect(subject.call(account_policy, 20)).to eq 0 + favourite.destroy! + expect(subject.call(account_policy, 20)).to eq 1 + expect(Status.find_by(id: self_faved.id)).to be_nil + end + end + + context 'when there are more un-deletable old toots than the early search cutoff' do + before do + stub_const 'AccountStatusesCleanupPolicy::EARLY_SEARCH_CUTOFF', 5 + # Old statuses that should be cut-off + 10.times do + Fabricate(:status, created_at: 4.years.ago, visibility: :direct, account: account) + end + # New statuses that prevent cut-off id to reach the last status + 10.times do + Fabricate(:status, created_at: 4.seconds.ago, visibility: :direct, account: account) + end + end + + it 'reports 0 deleted statuses then 0 then 3 then 0 again' do + expect(subject.call(account_policy, 10)).to eq 0 + expect(subject.call(account_policy, 10)).to eq 0 + expect(subject.call(account_policy, 10)).to eq 3 + expect(subject.call(account_policy, 10)).to eq 0 + end + + it 'never causes the recorded id to get higher than oldest deletable toot' do + subject.call(account_policy, 10) + subject.call(account_policy, 10) + subject.call(account_policy, 10) + subject.call(account_policy, 10) + expect(account_policy.last_inspected).to be < Mastodon::Snowflake.id_at(account_policy.min_status_age.seconds.ago, with_random: false) + end + end + end + end +end diff --git a/spec/services/activitypub/fetch_remote_status_service_spec.rb b/spec/services/activitypub/fetch_remote_status_service_spec.rb index 1ecc46952..ceba5f210 100644 --- a/spec/services/activitypub/fetch_remote_status_service_spec.rb +++ b/spec/services/activitypub/fetch_remote_status_service_spec.rb @@ -145,5 +145,46 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do expect(sender.statuses.first).to be_nil end end + + context 'with a valid Create activity' do + let(:object) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: "https://#{valid_domain}/@foo/1234/create", + type: 'Create', + actor: ActivityPub::TagManager.instance.uri_for(sender), + object: note, + } + end + + it 'creates status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.uri).to eq note[:id] + expect(status.text).to eq note[:content] + end + end + + context 'with a Create activity with a mismatching id' do + let(:object) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: "https://#{valid_domain}/@foo/1234/create", + type: 'Create', + actor: ActivityPub::TagManager.instance.uri_for(sender), + object: { + id: "https://real.address/@foo/1234", + type: 'Note', + content: 'Lorem ipsum', + attributedTo: ActivityPub::TagManager.instance.uri_for(sender), + }, + } + end + + it 'does not create status' do + expect(sender.statuses.first).to be_nil + end + end end end diff --git a/spec/services/activitypub/process_account_service_spec.rb b/spec/services/activitypub/process_account_service_spec.rb index 56e7f8321..1b1d878a7 100644 --- a/spec/services/activitypub/process_account_service_spec.rb +++ b/spec/services/activitypub/process_account_service_spec.rb @@ -12,6 +12,7 @@ RSpec.describe ActivityPub::ProcessAccountService, type: :service do attachment: [ { type: 'PropertyValue', name: 'Pronouns', value: 'They/them' }, { type: 'PropertyValue', name: 'Occupation', value: 'Unit test' }, + { type: 'PropertyValue', name: 'non-string', value: ['foo', 'bar'] }, ], }.with_indifferent_access end diff --git a/spec/services/bootstrap_timeline_service_spec.rb b/spec/services/bootstrap_timeline_service_spec.rb index 880ca4f0d..16f3e9962 100644 --- a/spec/services/bootstrap_timeline_service_spec.rb +++ b/spec/services/bootstrap_timeline_service_spec.rb @@ -1,4 +1,37 @@ require 'rails_helper' RSpec.describe BootstrapTimelineService, type: :service do + subject { BootstrapTimelineService.new } + + context 'when the new user has registered from an invite' do + let(:service) { double } + let(:autofollow) { false } + let(:inviter) { Fabricate(:user, confirmed_at: 2.days.ago) } + let(:invite) { Fabricate(:invite, user: inviter, max_uses: nil, expires_at: 1.hour.from_now, autofollow: autofollow) } + let(:new_user) { Fabricate(:user, invite_code: invite.code) } + + before do + allow(FollowService).to receive(:new).and_return(service) + allow(service).to receive(:call) + end + + context 'when the invite has auto-follow enabled' do + let(:autofollow) { true } + + it 'calls FollowService to follow the inviter' do + subject.call(new_user.account) + expect(service).to have_received(:call).with(new_user.account, inviter.account) + end + end + + context 'when the invite does not have auto-follow enable' do + let(:autofollow) { false } + + it 'calls FollowService to follow the inviter' do + subject.call(new_user.account) + expect(service).to_not have_received(:call) + end + end + + end end diff --git a/spec/services/delete_account_service_spec.rb b/spec/services/delete_account_service_spec.rb index cd7d32d59..b1da97036 100644 --- a/spec/services/delete_account_service_spec.rb +++ b/spec/services/delete_account_service_spec.rb @@ -21,6 +21,8 @@ RSpec.describe DeleteAccountService, type: :service do let!(:favourite_notification) { Fabricate(:notification, account: local_follower, activity: favourite, type: :favourite) } let!(:follow_notification) { Fabricate(:notification, account: local_follower, activity: active_relationship, type: :follow) } + let!(:account_note) { Fabricate(:account_note, account: account) } + subject do -> { described_class.new.call(account) } end @@ -35,8 +37,9 @@ RSpec.describe DeleteAccountService, type: :service do account.active_relationships, account.passive_relationships, account.polls, + account.account_notes, ].map(&:count) - }.from([2, 1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0, 0]) + }.from([2, 1, 1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0, 0, 0]) end it 'deletes associated target records' do diff --git a/spec/services/fetch_oembed_service_spec.rb b/spec/services/fetch_oembed_service_spec.rb index a4262b040..88f0113ed 100644 --- a/spec/services/fetch_oembed_service_spec.rb +++ b/spec/services/fetch_oembed_service_spec.rb @@ -13,6 +13,32 @@ describe FetchOEmbedService, type: :service do describe 'discover_provider' do context 'when status code is 200 and MIME type is text/html' do + context 'when OEmbed endpoint contains URL as parameter' do + before do + stub_request(:get, 'https://www.youtube.com/watch?v=IPSbNdBmWKE').to_return( + status: 200, + headers: { 'Content-Type': 'text/html' }, + body: request_fixture('oembed_youtube.html'), + ) + stub_request(:get, 'https://www.youtube.com/oembed?format=json&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DIPSbNdBmWKE').to_return( + status: 200, + headers: { 'Content-Type': 'text/html' }, + body: request_fixture('oembed_json_empty.html') + ) + end + + it 'returns new OEmbed::Provider for JSON provider' do + subject.call('https://www.youtube.com/watch?v=IPSbNdBmWKE') + expect(subject.endpoint_url).to eq 'https://www.youtube.com/oembed?format=json&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DIPSbNdBmWKE' + expect(subject.format).to eq :json + end + + it 'stores URL template' do + subject.call('https://www.youtube.com/watch?v=IPSbNdBmWKE') + expect(Rails.cache.read('oembed_endpoint:www.youtube.com')[:endpoint]).to eq 'https://www.youtube.com/oembed?format=json&url={url}' + end + end + context 'Both of JSON and XML provider are discoverable' do before do stub_request(:get, 'https://host.test/oembed.html').to_return( @@ -33,6 +59,11 @@ describe FetchOEmbedService, type: :service do expect(subject.endpoint_url).to eq 'https://host.test/provider.xml' expect(subject.format).to eq :xml end + + it 'does not cache OEmbed endpoint' do + subject.call('https://host.test/oembed.html', format: :xml) + expect(Rails.cache.exist?('oembed_endpoint:host.test')).to eq false + end end context 'JSON provider is discoverable while XML provider is not' do @@ -49,6 +80,11 @@ describe FetchOEmbedService, type: :service do expect(subject.endpoint_url).to eq 'https://host.test/provider.json' expect(subject.format).to eq :json end + + it 'does not cache OEmbed endpoint' do + subject.call('https://host.test/oembed.html') + expect(Rails.cache.exist?('oembed_endpoint:host.test')).to eq false + end end context 'XML provider is discoverable while JSON provider is not' do @@ -65,6 +101,11 @@ describe FetchOEmbedService, type: :service do expect(subject.endpoint_url).to eq 'https://host.test/provider.xml' expect(subject.format).to eq :xml end + + it 'does not cache OEmbed endpoint' do + subject.call('https://host.test/oembed.html') + expect(Rails.cache.exist?('oembed_endpoint:host.test')).to eq false + end end context 'Invalid XML provider is discoverable while JSON provider is not' do diff --git a/spec/services/post_status_service_spec.rb b/spec/services/post_status_service_spec.rb index 147a59fc3..d21270c79 100644 --- a/spec/services/post_status_service_spec.rb +++ b/spec/services/post_status_service_spec.rb @@ -25,29 +25,33 @@ RSpec.describe PostStatusService, type: :service do expect(status.thread).to eq in_reply_to_status end - it 'schedules a status' do - account = Fabricate(:account) - future = Time.now.utc + 2.hours + context 'when scheduling a status' do + let!(:account) { Fabricate(:account) } + let!(:future) { Time.now.utc + 2.hours } + let!(:previous_status) { Fabricate(:status, account: account) } - status = subject.call(account, text: 'Hi future!', scheduled_at: future) + it 'schedules a status' do + status = subject.call(account, text: 'Hi future!', scheduled_at: future) + expect(status).to be_a ScheduledStatus + expect(status.scheduled_at).to eq future + expect(status.params['text']).to eq 'Hi future!' + end - expect(status).to be_a ScheduledStatus - expect(status.scheduled_at).to eq future - expect(status.params['text']).to eq 'Hi future!' - end + it 'does not immediately create a status' do + media = Fabricate(:media_attachment, account: account) + status = subject.call(account, text: 'Hi future!', media_ids: [media.id], scheduled_at: future) - it 'does not immediately create a status when scheduling a status' do - account = Fabricate(:account) - media = Fabricate(:media_attachment) - future = Time.now.utc + 2.hours + expect(status).to be_a ScheduledStatus + expect(status.scheduled_at).to eq future + expect(status.params['text']).to eq 'Hi future!' + expect(status.params['media_ids']).to eq [media.id] + expect(media.reload.status).to be_nil + expect(Status.where(text: 'Hi future!').exists?).to be_falsey + end - status = subject.call(account, text: 'Hi future!', media_ids: [media.id], scheduled_at: future) - - expect(status).to be_a ScheduledStatus - expect(status.scheduled_at).to eq future - expect(status.params['text']).to eq 'Hi future!' - expect(media.reload.status).to be_nil - expect(Status.where(text: 'Hi future!').exists?).to be_falsey + it 'does not change statuses count' do + expect { subject.call(account, text: 'Hi future!', scheduled_at: future, thread: previous_status) }.not_to change { [account.statuses_count, previous_status.replies_count] } + end end it 'creates response to the original status of boost' do diff --git a/spec/services/process_mentions_service_spec.rb b/spec/services/process_mentions_service_spec.rb index 3b2f9d698..d74e8dc62 100644 --- a/spec/services/process_mentions_service_spec.rb +++ b/spec/services/process_mentions_service_spec.rb @@ -42,6 +42,24 @@ RSpec.describe ProcessMentionsService, type: :service do expect(a_request(:post, remote_user.inbox_url)).to have_been_made.once end end + + context 'with an IDN TLD' do + let(:remote_user) { Fabricate(:account, username: 'foo', protocol: :activitypub, domain: 'xn--y9a3aq.xn--y9a3aq', inbox_url: 'http://example.com/inbox') } + let(:status) { Fabricate(:status, account: account, text: "Hello @foo@հայ.հայ") } + + before do + stub_request(:post, remote_user.inbox_url) + subject.call(status) + end + + it 'creates a mention' do + expect(remote_user.mentions.where(status: status).count).to eq 1 + end + + it 'sends activity to the inbox' do + expect(a_request(:post, remote_user.inbox_url)).to have_been_made.once + end + end end context 'Temporarily-unreachable ActivityPub user' do diff --git a/spec/services/remove_from_follwers_service_spec.rb b/spec/services/remove_from_follwers_service_spec.rb new file mode 100644 index 000000000..a83f6f49a --- /dev/null +++ b/spec/services/remove_from_follwers_service_spec.rb @@ -0,0 +1,38 @@ +require 'rails_helper' + +RSpec.describe RemoveFromFollowersService, type: :service do + let(:bob) { Fabricate(:account, username: 'bob') } + + subject { RemoveFromFollowersService.new } + + describe 'local' do + let(:sender) { Fabricate(:account, username: 'alice') } + + before do + Follow.create(account: sender, target_account: bob) + subject.call(bob, sender) + end + + it 'does not create follow relation' do + expect(bob.followed_by?(sender)).to be false + end + end + + describe 'remote ActivityPub' do + let(:sender) { Fabricate(:account, username: 'alice', domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox') } + + before do + Follow.create(account: sender, target_account: bob) + stub_request(:post, sender.inbox_url).to_return(status: 200) + subject.call(bob, sender) + end + + it 'does not create follow relation' do + expect(bob.followed_by?(sender)).to be false + end + + it 'sends a reject activity' do + expect(a_request(:post, sender.inbox_url)).to have_been_made.once + end + end +end diff --git a/spec/services/suspend_account_service_spec.rb b/spec/services/suspend_account_service_spec.rb new file mode 100644 index 000000000..cf7eb257a --- /dev/null +++ b/spec/services/suspend_account_service_spec.rb @@ -0,0 +1,85 @@ +require 'rails_helper' + +RSpec.describe SuspendAccountService, type: :service do + shared_examples 'common behavior' do + let!(:local_follower) { Fabricate(:user, current_sign_in_at: 1.hour.ago).account } + let!(:list) { Fabricate(:list, account: local_follower) } + + subject do + -> { described_class.new.call(account) } + end + + before do + allow(FeedManager.instance).to receive(:unmerge_from_home).and_return(nil) + allow(FeedManager.instance).to receive(:unmerge_from_list).and_return(nil) + + local_follower.follow!(account) + list.accounts << account + end + + it "unmerges from local followers' feeds" do + subject.call + expect(FeedManager.instance).to have_received(:unmerge_from_home).with(account, local_follower) + expect(FeedManager.instance).to have_received(:unmerge_from_list).with(account, list) + end + + it 'marks account as suspended' do + is_expected.to change { account.suspended? }.from(false).to(true) + end + end + + describe 'suspending a local account' do + def match_update_actor_request(req, account) + json = JSON.parse(req.body) + actor_id = ActivityPub::TagManager.instance.uri_for(account) + json['type'] == 'Update' && json['actor'] == actor_id && json['object']['id'] == actor_id && json['object']['suspended'] + end + + before do + stub_request(:post, 'https://alice.com/inbox').to_return(status: 201) + stub_request(:post, 'https://bob.com/inbox').to_return(status: 201) + end + + include_examples 'common behavior' do + let!(:account) { Fabricate(:account) } + let!(:remote_follower) { Fabricate(:account, uri: 'https://alice.com', inbox_url: 'https://alice.com/inbox', protocol: :activitypub) } + let!(:remote_reporter) { Fabricate(:account, uri: 'https://bob.com', inbox_url: 'https://bob.com/inbox', protocol: :activitypub) } + let!(:report) { Fabricate(:report, account: remote_reporter, target_account: account) } + + before do + remote_follower.follow!(account) + end + + it 'sends an update actor to followers and reporters' do + subject.call + expect(a_request(:post, remote_follower.inbox_url).with { |req| match_update_actor_request(req, account) }).to have_been_made.once + expect(a_request(:post, remote_reporter.inbox_url).with { |req| match_update_actor_request(req, account) }).to have_been_made.once + end + end + end + + describe 'suspending a remote account' do + def match_reject_follow_request(req, account, followee) + json = JSON.parse(req.body) + json['type'] == 'Reject' && json['actor'] == ActivityPub::TagManager.instance.uri_for(followee) && json['object']['actor'] == account.uri + end + + before do + stub_request(:post, 'https://bob.com/inbox').to_return(status: 201) + end + + include_examples 'common behavior' do + let!(:account) { Fabricate(:account, domain: 'bob.com', uri: 'https://bob.com', inbox_url: 'https://bob.com/inbox', protocol: :activitypub) } + let!(:local_followee) { Fabricate(:account) } + + before do + account.follow!(local_followee) + end + + it 'sends a reject follow' do + subject.call + expect(a_request(:post, account.inbox_url).with { |req| match_reject_follow_request(req, account, local_followee) }).to have_been_made.once + end + end + end +end diff --git a/spec/services/unsuspend_account_service_spec.rb b/spec/services/unsuspend_account_service_spec.rb new file mode 100644 index 000000000..d52cb6cc0 --- /dev/null +++ b/spec/services/unsuspend_account_service_spec.rb @@ -0,0 +1,135 @@ +require 'rails_helper' + +RSpec.describe UnsuspendAccountService, type: :service do + shared_examples 'common behavior' do + let!(:local_follower) { Fabricate(:user, current_sign_in_at: 1.hour.ago).account } + let!(:list) { Fabricate(:list, account: local_follower) } + + subject do + -> { described_class.new.call(account) } + end + + before do + allow(FeedManager.instance).to receive(:merge_into_home).and_return(nil) + allow(FeedManager.instance).to receive(:merge_into_list).and_return(nil) + + local_follower.follow!(account) + list.accounts << account + + account.suspend!(origin: :local) + end + end + + describe 'unsuspending a local account' do + def match_update_actor_request(req, account) + json = JSON.parse(req.body) + actor_id = ActivityPub::TagManager.instance.uri_for(account) + json['type'] == 'Update' && json['actor'] == actor_id && json['object']['id'] == actor_id && !json['object']['suspended'] + end + + before do + stub_request(:post, 'https://alice.com/inbox').to_return(status: 201) + stub_request(:post, 'https://bob.com/inbox').to_return(status: 201) + end + + it 'marks account as unsuspended' do + is_expected.to change { account.suspended? }.from(true).to(false) + end + + include_examples 'common behavior' do + let!(:account) { Fabricate(:account) } + let!(:remote_follower) { Fabricate(:account, uri: 'https://alice.com', inbox_url: 'https://alice.com/inbox', protocol: :activitypub) } + let!(:remote_reporter) { Fabricate(:account, uri: 'https://bob.com', inbox_url: 'https://bob.com/inbox', protocol: :activitypub) } + let!(:report) { Fabricate(:report, account: remote_reporter, target_account: account) } + + before do + remote_follower.follow!(account) + end + + it "merges back into local followers' feeds" do + subject.call + expect(FeedManager.instance).to have_received(:merge_into_home).with(account, local_follower) + expect(FeedManager.instance).to have_received(:merge_into_list).with(account, list) + end + + it 'sends an update actor to followers and reporters' do + subject.call + expect(a_request(:post, remote_follower.inbox_url).with { |req| match_update_actor_request(req, account) }).to have_been_made.once + expect(a_request(:post, remote_reporter.inbox_url).with { |req| match_update_actor_request(req, account) }).to have_been_made.once + end + end + end + + describe 'unsuspending a remote account' do + include_examples 'common behavior' do + let!(:account) { Fabricate(:account, domain: 'bob.com', uri: 'https://bob.com', inbox_url: 'https://bob.com/inbox', protocol: :activitypub) } + let!(:reslove_account_service) { double } + + before do + allow(ResolveAccountService).to receive(:new).and_return(reslove_account_service) + end + + context 'when the account is not remotely suspended' do + before do + allow(reslove_account_service).to receive(:call).with(account).and_return(account) + end + + it 're-fetches the account' do + subject.call + expect(reslove_account_service).to have_received(:call).with(account) + end + + it "merges back into local followers' feeds" do + subject.call + expect(FeedManager.instance).to have_received(:merge_into_home).with(account, local_follower) + expect(FeedManager.instance).to have_received(:merge_into_list).with(account, list) + end + + it 'marks account as unsuspended' do + is_expected.to change { account.suspended? }.from(true).to(false) + end + end + + context 'when the account is remotely suspended' do + before do + allow(reslove_account_service).to receive(:call).with(account) do |account| + account.suspend!(origin: :remote) + account + end + end + + it 're-fetches the account' do + subject.call + expect(reslove_account_service).to have_received(:call).with(account) + end + + it "does not merge back into local followers' feeds" do + subject.call + expect(FeedManager.instance).to_not have_received(:merge_into_home).with(account, local_follower) + expect(FeedManager.instance).to_not have_received(:merge_into_list).with(account, list) + end + + it 'does not mark the account as unsuspended' do + is_expected.not_to change { account.suspended? } + end + end + + context 'when the account is remotely deleted' do + before do + allow(reslove_account_service).to receive(:call).with(account).and_return(nil) + end + + it 're-fetches the account' do + subject.call + expect(reslove_account_service).to have_received(:call).with(account) + end + + it "does not merge back into local followers' feeds" do + subject.call + expect(FeedManager.instance).to_not have_received(:merge_into_home).with(account, local_follower) + expect(FeedManager.instance).to_not have_received(:merge_into_list).with(account, list) + end + end + end + end +end diff --git a/spec/views/about/show.html.haml_spec.rb b/spec/views/about/show.html.haml_spec.rb index c75c28759..1c2f5eee9 100644 --- a/spec/views/about/show.html.haml_spec.rb +++ b/spec/views/about/show.html.haml_spec.rb @@ -17,7 +17,7 @@ describe 'about/show.html.haml', without_verify_partial_doubles: true do site_short_description: 'something', site_description: 'something', version_number: '1.0', - source_url: 'https://github.com/tootsuite/mastodon', + source_url: 'https://github.com/mastodon/mastodon', open_registrations: false, thumbnail: nil, hero: nil, diff --git a/spec/views/statuses/show.html.haml_spec.rb b/spec/views/statuses/show.html.haml_spec.rb index dbda3b665..879a26959 100644 --- a/spec/views/statuses/show.html.haml_spec.rb +++ b/spec/views/statuses/show.html.haml_spec.rb @@ -16,10 +16,11 @@ describe 'statuses/show.html.haml', without_verify_partial_doubles: true do end it 'has valid author h-card and basic data for a detailed_status' do - alice = Fabricate(:account, username: 'alice', display_name: 'Alice') - bob = Fabricate(:account, username: 'bob', display_name: 'Bob') - status = Fabricate(:status, account: alice, text: 'Hello World') - reply = Fabricate(:status, account: bob, thread: status, text: 'Hello Alice') + alice = Fabricate(:account, username: 'alice', display_name: 'Alice') + bob = Fabricate(:account, username: 'bob', display_name: 'Bob') + status = Fabricate(:status, account: alice, text: 'Hello World') + media = Fabricate(:media_attachment, account: alice, status: status, type: :video) + reply = Fabricate(:status, account: bob, thread: status, text: 'Hello Alice') assign(:status, status) assign(:account, alice) @@ -35,12 +36,13 @@ describe 'statuses/show.html.haml', without_verify_partial_doubles: true do end it 'has valid h-cites for p-in-reply-to and p-comment' do - alice = Fabricate(:account, username: 'alice', display_name: 'Alice') - bob = Fabricate(:account, username: 'bob', display_name: 'Bob') - carl = Fabricate(:account, username: 'carl', display_name: 'Carl') - status = Fabricate(:status, account: alice, text: 'Hello World') - reply = Fabricate(:status, account: bob, thread: status, text: 'Hello Alice') - comment = Fabricate(:status, account: carl, thread: reply, text: 'Hello Bob') + alice = Fabricate(:account, username: 'alice', display_name: 'Alice') + bob = Fabricate(:account, username: 'bob', display_name: 'Bob') + carl = Fabricate(:account, username: 'carl', display_name: 'Carl') + status = Fabricate(:status, account: alice, text: 'Hello World') + media = Fabricate(:media_attachment, account: alice, status: status, type: :video) + reply = Fabricate(:status, account: bob, thread: status, text: 'Hello Alice') + comment = Fabricate(:status, account: carl, thread: reply, text: 'Hello Bob') assign(:status, reply) assign(:account, alice) @@ -62,8 +64,9 @@ describe 'statuses/show.html.haml', without_verify_partial_doubles: true do end it 'has valid opengraph tags' do - alice = Fabricate(:account, username: 'alice', display_name: 'Alice') - status = Fabricate(:status, account: alice, text: 'Hello World') + alice = Fabricate(:account, username: 'alice', display_name: 'Alice') + status = Fabricate(:status, account: alice, text: 'Hello World') + media = Fabricate(:media_attachment, account: alice, status: status, type: :video) assign(:status, status) assign(:account, alice) @@ -78,4 +81,21 @@ describe 'statuses/show.html.haml', without_verify_partial_doubles: true do expect(header_tags).to match(%r{}) expect(header_tags).to match(%r{}) end + + it 'has twitter player tag' do + alice = Fabricate(:account, username: 'alice', display_name: 'Alice') + status = Fabricate(:status, account: alice, text: 'Hello World') + media = Fabricate(:media_attachment, account: alice, status: status, type: :video) + + assign(:status, status) + assign(:account, alice) + assign(:descendant_threads, []) + + render + + header_tags = view.content_for(:header_tags) + + expect(header_tags).to match(%r{}) + expect(header_tags).to match(%r{}) + end end diff --git a/spec/workers/activitypub/delivery_worker_spec.rb b/spec/workers/activitypub/delivery_worker_spec.rb index f4633731e..d39393d50 100644 --- a/spec/workers/activitypub/delivery_worker_spec.rb +++ b/spec/workers/activitypub/delivery_worker_spec.rb @@ -11,7 +11,7 @@ describe ActivityPub::DeliveryWorker do let(:payload) { 'test' } before do - allow_any_instance_of(Account).to receive(:remote_followers_hash).with('https://example.com/').and_return('somehash') + allow_any_instance_of(Account).to receive(:remote_followers_hash).with('https://example.com/api').and_return('somehash') end describe 'perform' do diff --git a/spec/workers/scheduler/accounts_statuses_cleanup_scheduler_spec.rb b/spec/workers/scheduler/accounts_statuses_cleanup_scheduler_spec.rb new file mode 100644 index 000000000..8f20725c8 --- /dev/null +++ b/spec/workers/scheduler/accounts_statuses_cleanup_scheduler_spec.rb @@ -0,0 +1,127 @@ +require 'rails_helper' + +describe Scheduler::AccountsStatusesCleanupScheduler do + subject { described_class.new } + + let!(:account1) { Fabricate(:account, domain: nil) } + let!(:account2) { Fabricate(:account, domain: nil) } + let!(:account3) { Fabricate(:account, domain: nil) } + let!(:account4) { Fabricate(:account, domain: nil) } + let!(:remote) { Fabricate(:account) } + + let!(:policy1) { Fabricate(:account_statuses_cleanup_policy, account: account1) } + let!(:policy2) { Fabricate(:account_statuses_cleanup_policy, account: account3) } + let!(:policy3) { Fabricate(:account_statuses_cleanup_policy, account: account4, enabled: false) } + + let(:queue_size) { 0 } + let(:queue_latency) { 0 } + let(:process_set_stub) do + [ + { + 'concurrency' => 2, + 'queues' => ['push', 'default'], + }, + ] + end + let(:retry_size) { 0 } + + before do + queue_stub = double + allow(queue_stub).to receive(:size).and_return(queue_size) + allow(queue_stub).to receive(:latency).and_return(queue_latency) + allow(Sidekiq::Queue).to receive(:new).and_return(queue_stub) + allow(Sidekiq::ProcessSet).to receive(:new).and_return(process_set_stub) + + sidekiq_stats_stub = double + allow(sidekiq_stats_stub).to receive(:retry_size).and_return(retry_size) + allow(Sidekiq::Stats).to receive(:new).and_return(sidekiq_stats_stub) + + # Create a bunch of old statuses + 10.times do + Fabricate(:status, account: account1, created_at: 3.years.ago) + Fabricate(:status, account: account2, created_at: 3.years.ago) + Fabricate(:status, account: account3, created_at: 3.years.ago) + Fabricate(:status, account: account4, created_at: 3.years.ago) + Fabricate(:status, account: remote, created_at: 3.years.ago) + end + + # Create a bunch of newer statuses + 5.times do + Fabricate(:status, account: account1, created_at: 3.minutes.ago) + Fabricate(:status, account: account2, created_at: 3.minutes.ago) + Fabricate(:status, account: account3, created_at: 3.minutes.ago) + Fabricate(:status, account: account4, created_at: 3.minutes.ago) + Fabricate(:status, account: remote, created_at: 3.minutes.ago) + end + end + + describe '#under_load?' do + context 'when nothing is queued' do + it 'returns false' do + expect(subject.under_load?).to be false + end + end + + context 'when numerous jobs are queued' do + let(:queue_size) { 5 } + let(:queue_latency) { 120 } + + it 'returns true' do + expect(subject.under_load?).to be true + end + end + + context 'when there is a huge amount of jobs to retry' do + let(:retry_size) { 1_000_000 } + + it 'returns true' do + expect(subject.under_load?).to be true + end + end + end + + describe '#get_budget' do + context 'on a single thread' do + let(:process_set_stub) { [ { 'concurrency' => 1, 'queues' => ['push', 'default'] } ] } + + it 'returns a low value' do + expect(subject.compute_budget).to be < 10 + end + end + + context 'on a lot of threads' do + let(:process_set_stub) do + [ + { 'concurrency' => 2, 'queues' => ['push', 'default'] }, + { 'concurrency' => 2, 'queues' => ['push'] }, + { 'concurrency' => 2, 'queues' => ['push'] }, + { 'concurrency' => 2, 'queues' => ['push'] }, + ] + end + + it 'returns a larger value' do + expect(subject.compute_budget).to be > 10 + end + end + end + + describe '#perform' do + context 'when the budget is lower than the number of toots to delete' do + it 'deletes as many statuses as the given budget' do + expect { subject.perform }.to change { Status.count }.by(-subject.compute_budget) + end + + it 'does not delete from accounts with no cleanup policy' do + expect { subject.perform }.to_not change { account2.statuses.count } + end + + it 'does not delete from accounts with disabled cleanup policies' do + expect { subject.perform }.to_not change { account4.statuses.count } + end + + it 'eventually deletes every deletable toot' do + expect { subject.perform; subject.perform; subject.perform; subject.perform }.to change { Status.count }.by(-20) + end + end + end +end diff --git a/streaming/index.js b/streaming/index.js index 7bb645a13..8b7477a44 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -282,6 +282,14 @@ const startWorker = (workerId) => { next(); }; + /** + * @param {any} req + * @param {string[]} necessaryScopes + * @return {boolean} + */ + const isInScope = (req, necessaryScopes) => + req.scopes.some(scope => necessaryScopes.includes(scope)); + /** * @param {string} token * @param {any} req @@ -314,7 +322,6 @@ const startWorker = (workerId) => { req.scopes = result.rows[0].scopes.split(' '); req.accountId = result.rows[0].account_id; req.chosenLanguages = result.rows[0].chosen_languages; - req.allowNotifications = req.scopes.some(scope => ['read', 'read:notifications'].includes(scope)); req.deviceId = result.rows[0].device_id; resolve(); @@ -423,7 +430,7 @@ const startWorker = (workerId) => { requiredScopes.push('read:statuses'); } - if (requiredScopes.some(requiredScope => req.scopes.includes(requiredScope))) { + if (req.scopes && requiredScopes.some(requiredScope => req.scopes.includes(requiredScope))) { resolve(); return; } @@ -580,14 +587,12 @@ const startWorker = (workerId) => { * @param {function(string, string): void} output * @param {function(string[], function(string): void): void} attachCloseHandler * @param {boolean=} needsFiltering - * @param {boolean=} notificationOnly * @return {function(string): void} */ - const streamFrom = (ids, req, output, attachCloseHandler, needsFiltering = false, notificationOnly = false) => { + const streamFrom = (ids, req, output, attachCloseHandler, needsFiltering = false) => { const accountId = req.accountId || req.remoteAddress; - const streamType = notificationOnly ? ' (notification)' : ''; - log.verbose(req.requestId, `Starting stream from ${ids.join(', ')} for ${accountId}${streamType}`); + log.verbose(req.requestId, `Starting stream from ${ids.join(', ')} for ${accountId}`); const listener = message => { const json = parseJSON(message); @@ -605,14 +610,6 @@ const startWorker = (workerId) => { output(event, encodedPayload); }; - if (notificationOnly && event !== 'notification') { - return; - } - - if (event === 'notification' && !req.allowNotifications) { - return; - } - // Only messages that may require filtering are statuses, since notifications // are already personalized and deletes do not matter if (!needsFiltering || event !== 'update') { @@ -759,7 +756,7 @@ const startWorker = (workerId) => { const onSend = streamToHttp(req, res); const onEnd = streamHttpEnd(req, subscriptionHeartbeat(channelIds)); - streamFrom(channelIds, req, onSend, onEnd, options.needsFiltering, options.notificationOnly); + streamFrom(channelIds, req, onSend, onEnd, options.needsFiltering); }).catch(err => { log.verbose(req.requestId, 'Subscription error:', err.toString()); httpNotFound(res); @@ -775,74 +772,92 @@ const startWorker = (workerId) => { * @property {string} [only_media] */ + /** + * @param {any} req + * @return {string[]} + */ + const channelsForUserStream = req => { + const arr = [`timeline:${req.accountId}`]; + + if (isInScope(req, ['crypto']) && req.deviceId) { + arr.push(`timeline:${req.accountId}:${req.deviceId}`); + } + + if (isInScope(req, ['read', 'read:notifications'])) { + arr.push(`timeline:${req.accountId}:notifications`); + } + + return arr; + }; + /** * @param {any} req * @param {string} name * @param {StreamParams} params - * @return {Promise.<{ channelIds: string[], options: { needsFiltering: boolean, notificationOnly: boolean } }>} + * @return {Promise.<{ channelIds: string[], options: { needsFiltering: boolean } }>} */ const channelNameToIds = (req, name, params) => new Promise((resolve, reject) => { switch(name) { case 'user': resolve({ - channelIds: req.deviceId ? [`timeline:${req.accountId}`, `timeline:${req.accountId}:${req.deviceId}`] : [`timeline:${req.accountId}`], - options: { needsFiltering: false, notificationOnly: false }, + channelIds: channelsForUserStream(req), + options: { needsFiltering: false }, }); break; case 'user:notification': resolve({ - channelIds: [`timeline:${req.accountId}`], - options: { needsFiltering: false, notificationOnly: true }, + channelIds: [`timeline:${req.accountId}:notifications`], + options: { needsFiltering: false }, }); break; case 'public': resolve({ channelIds: ['timeline:public'], - options: { needsFiltering: true, notificationOnly: false }, + options: { needsFiltering: true }, }); break; case 'public:local': resolve({ channelIds: ['timeline:public:local'], - options: { needsFiltering: true, notificationOnly: false }, + options: { needsFiltering: true }, }); break; case 'public:remote': resolve({ channelIds: ['timeline:public:remote'], - options: { needsFiltering: true, notificationOnly: false }, + options: { needsFiltering: true }, }); break; case 'public:media': resolve({ channelIds: ['timeline:public:media'], - options: { needsFiltering: true, notificationOnly: false }, + options: { needsFiltering: true }, }); break; case 'public:local:media': resolve({ channelIds: ['timeline:public:local:media'], - options: { needsFiltering: true, notificationOnly: false }, + options: { needsFiltering: true }, }); break; case 'public:remote:media': resolve({ channelIds: ['timeline:public:remote:media'], - options: { needsFiltering: true, notificationOnly: false }, + options: { needsFiltering: true }, }); break; case 'direct': resolve({ channelIds: [`timeline:direct:${req.accountId}`], - options: { needsFiltering: false, notificationOnly: false }, + options: { needsFiltering: false }, }); break; @@ -852,7 +867,7 @@ const startWorker = (workerId) => { } else { resolve({ channelIds: [`timeline:hashtag:${params.tag.toLowerCase()}`], - options: { needsFiltering: true, notificationOnly: false }, + options: { needsFiltering: true }, }); } @@ -863,7 +878,7 @@ const startWorker = (workerId) => { } else { resolve({ channelIds: [`timeline:hashtag:${params.tag.toLowerCase()}:local`], - options: { needsFiltering: true, notificationOnly: false }, + options: { needsFiltering: true }, }); } @@ -872,7 +887,7 @@ const startWorker = (workerId) => { authorizeListAccess(params.list, req).then(() => { resolve({ channelIds: [`timeline:list:${params.list}`], - options: { needsFiltering: false, notificationOnly: false }, + options: { needsFiltering: false }, }); }).catch(() => { reject('Not authorized to stream this list'); @@ -919,7 +934,7 @@ const startWorker = (workerId) => { const onSend = streamToWs(request, socket, streamNameFromChannelName(channelName, params)); const stopHeartbeat = subscriptionHeartbeat(channelIds); - const listener = streamFrom(channelIds, request, onSend, undefined, options.needsFiltering, options.notificationOnly); + const listener = streamFrom(channelIds, request, onSend, undefined, options.needsFiltering); subscriptions[channelIds.join(';')] = { listener, diff --git a/yarn.lock b/yarn.lock index ec17ecf40..91544d525 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,32 +9,32 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.14.5", "@babel/code-frame@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.15.8.tgz#45990c47adadb00c03677baa89221f7cc23d2503" + integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg== dependencies: "@babel/highlight" "^7.14.5" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5", "@babel/compat-data@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" - integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" + integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== -"@babel/core@^7.1.0", "@babel/core@^7.14.3", "@babel/core@^7.7.2", "@babel/core@^7.7.5": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" - integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== +"@babel/core@^7.1.0", "@babel/core@^7.15.8", "@babel/core@^7.7.2", "@babel/core@^7.7.5": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.8.tgz#195b9f2bffe995d2c6c159e72fe525b4114e8c10" + integrity sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og== dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helpers" "^7.14.6" - "@babel/parser" "^7.14.6" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/code-frame" "^7.15.8" + "@babel/generator" "^7.15.8" + "@babel/helper-compilation-targets" "^7.15.4" + "@babel/helper-module-transforms" "^7.15.8" + "@babel/helpers" "^7.15.4" + "@babel/parser" "^7.15.8" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.6" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -42,12 +42,12 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" - integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== +"@babel/generator@^7.15.4", "@babel/generator@^7.15.8", "@babel/generator@^7.7.2": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.8.tgz#fa56be6b596952ceb231048cf84ee499a19c0cd1" + integrity sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g== dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.15.6" jsesc "^2.5.1" source-map "^0.5.0" @@ -58,6 +58,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-annotate-as-pure@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835" + integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" @@ -74,27 +81,27 @@ "@babel/helper-annotate-as-pure" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" - integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9" + integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ== dependencies: - "@babel/compat-data" "^7.14.5" + "@babel/compat-data" "^7.15.0" "@babel/helper-validator-option" "^7.14.5" browserslist "^4.16.6" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.14.5": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542" - integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg== +"@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz#7f977c17bd12a5fba363cb19bea090394bf37d2e" + integrity sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-member-expression-to-functions" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.15.4" + "@babel/helper-function-name" "^7.15.4" + "@babel/helper-member-expression-to-functions" "^7.15.4" + "@babel/helper-optimise-call-expression" "^7.15.4" + "@babel/helper-replace-supers" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" "@babel/helper-create-regexp-features-plugin@^7.14.5": version "7.14.5" @@ -134,6 +141,15 @@ "@babel/template" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/helper-function-name@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc" + integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw== + dependencies: + "@babel/helper-get-function-arity" "^7.15.4" + "@babel/template" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/helper-get-function-arity@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" @@ -141,40 +157,54 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-hoist-variables@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" - integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== +"@babel/helper-get-function-arity@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b" + integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA== dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.15.4" + +"@babel/helper-hoist-variables@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" + integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA== + dependencies: + "@babel/types" "^7.15.4" "@babel/helper-member-expression-to-functions@^7.14.5": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" - integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz#d5c70e4ad13b402c95156c7a53568f504e2fb7b8" + integrity sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ== dependencies: "@babel/types" "^7.14.5" -"@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" - integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== +"@babel/helper-member-expression-to-functions@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef" + integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA== dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.15.4" -"@babel/helper-module-transforms@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" - integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA== +"@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" + integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/types" "^7.15.4" + +"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.4", "@babel/helper-module-transforms@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz#d8c0e75a87a52e374a8f25f855174786a09498b2" + integrity sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg== + dependencies: + "@babel/helper-module-imports" "^7.15.4" + "@babel/helper-replace-supers" "^7.15.4" + "@babel/helper-simple-access" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-validator-identifier" "^7.15.7" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.6" "@babel/helper-optimise-call-expression@^7.14.5": version "7.14.5" @@ -183,6 +213,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-optimise-call-expression@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171" + integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" @@ -197,6 +234,15 @@ "@babel/helper-wrap-function" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/helper-remap-async-to-generator@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz#2637c0731e4c90fbf58ac58b50b2b5a192fc970f" + integrity sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.15.4" + "@babel/helper-wrap-function" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/helper-replace-supers@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" @@ -207,12 +253,22 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helper-simple-access@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" - integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw== +"@babel/helper-replace-supers@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a" + integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw== dependencies: - "@babel/types" "^7.14.5" + "@babel/helper-member-expression-to-functions" "^7.15.4" + "@babel/helper-optimise-call-expression" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + +"@babel/helper-simple-access@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b" + integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg== + dependencies: + "@babel/types" "^7.15.4" "@babel/helper-skip-transparent-expression-wrappers@^7.14.5": version "7.14.5" @@ -221,18 +277,40 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-split-export-declaration@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" - integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== +"@babel/helper-skip-transparent-expression-wrappers@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz#707dbdba1f4ad0fa34f9114fc8197aec7d5da2eb" + integrity sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A== dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.15.4" + +"@babel/helper-split-export-declaration@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" + integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw== + dependencies: + "@babel/types" "^7.15.4" + +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== "@babel/helper-validator-identifier@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== +"@babel/helper-validator-identifier@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" + integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== + +"@babel/helper-validator-identifier@^7.15.7": + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== + "@babel/helper-validator-option@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" @@ -248,16 +326,35 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helpers@^7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635" - integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA== +"@babel/helper-wrap-function@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz#6f754b2446cfaf3d612523e6ab8d79c27c3a3de7" + integrity sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw== dependencies: - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/helper-function-name" "^7.15.4" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": +"@babel/helpers@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43" + integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ== + dependencies: + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + +"@babel/highlight@^7.10.4": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c" + integrity sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/highlight@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== @@ -266,27 +363,27 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.14.7", "@babel/parser@^7.7.0": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595" - integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA== +"@babel/parser@^7.1.0", "@babel/parser@^7.15.4", "@babel/parser@^7.15.8", "@babel/parser@^7.7.0", "@babel/parser@^7.7.2": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz#7bacdcbe71bdc3ff936d510c15dcea7cf0b99016" + integrity sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA== -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e" - integrity sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz#dbdeabb1e80f622d9f0b583efb2999605e0a567e" + integrity sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog== dependencies: "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" "@babel/plugin-proposal-optional-chaining" "^7.14.5" -"@babel/plugin-proposal-async-generator-functions@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz#784a48c3d8ed073f65adcf30b57bcbf6c8119ace" - integrity sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q== +"@babel/plugin-proposal-async-generator-functions@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz#a3100f785fab4357987c4223ab1b02b599048403" + integrity sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA== dependencies: "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.15.4" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-proposal-class-properties@^7.14.5": @@ -297,21 +394,21 @@ "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681" - integrity sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg== +"@babel/plugin-proposal-class-static-block@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz#3e7ca6128453c089e8b477a99f970c63fc1cb8d7" + integrity sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.15.4" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-decorators@^7.14.2": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz#59bc4dfc1d665b5a6749cf798ff42297ed1b2c1d" - integrity sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg== +"@babel/plugin-proposal-decorators@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.15.8.tgz#eb2969abf8993f15289f09fed762bb1df1521bd5" + integrity sha512-5n8+xGK7YDrXF+WAORg3P7LlCCdiaAyKLZi22eP2BwTy4kJ0kFUMMDCj4nQ8YrKyNZgjhU/9eRVqONnjB3us8g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.15.4" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-decorators" "^7.14.5" @@ -363,16 +460,16 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz#5920a2b3df7f7901df0205974c0641b13fd9d363" - integrity sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g== +"@babel/plugin-proposal-object-rest-spread@^7.15.6": + version "7.15.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz#ef68050c8703d07b25af402cb96cf7f34a68ed11" + integrity sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg== dependencies: - "@babel/compat-data" "^7.14.7" - "@babel/helper-compilation-targets" "^7.14.5" + "@babel/compat-data" "^7.15.0" + "@babel/helper-compilation-targets" "^7.15.4" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.14.5" + "@babel/plugin-transform-parameters" "^7.15.4" "@babel/plugin-proposal-optional-catch-binding@^7.14.5": version "7.14.5" @@ -399,13 +496,13 @@ "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636" - integrity sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q== +"@babel/plugin-proposal-private-property-in-object@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz#55c5e3b4d0261fd44fe637e3f624cfb0f484e3e5" + integrity sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.15.4" + "@babel/helper-create-class-features-plugin" "^7.15.4" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" @@ -543,6 +640,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716" + integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-arrow-functions@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" @@ -566,24 +670,24 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-block-scoping@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" - integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== +"@babel/plugin-transform-block-scoping@^7.15.3": + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf" + integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-classes@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf" - integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA== +"@babel/plugin-transform-classes@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz#50aee17aaf7f332ae44e3bce4c2e10534d5d3bf1" + integrity sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.15.4" + "@babel/helper-function-name" "^7.15.4" + "@babel/helper-optimise-call-expression" "^7.15.4" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/helper-replace-supers" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.14.5": @@ -623,10 +727,10 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-for-of@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb" - integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== +"@babel/plugin-transform-for-of@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz#25c62cce2718cfb29715f416e75d5263fb36a8c2" + integrity sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA== dependencies: "@babel/helper-plugin-utils" "^7.14.5" @@ -661,25 +765,25 @@ "@babel/helper-plugin-utils" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97" - integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A== +"@babel/plugin-transform-modules-commonjs@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz#8201101240eabb5a76c08ef61b2954f767b6b4c1" + integrity sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA== dependencies: - "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-module-transforms" "^7.15.4" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" + "@babel/helper-simple-access" "^7.15.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29" - integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA== +"@babel/plugin-transform-modules-systemjs@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz#b42890c7349a78c827719f1d2d0cd38c7d268132" + integrity sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw== dependencies: - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-hoist-variables" "^7.15.4" + "@babel/helper-module-transforms" "^7.15.4" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.9" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-umd@^7.14.5": @@ -690,10 +794,10 @@ "@babel/helper-module-transforms" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz#60c06892acf9df231e256c24464bfecb0908fd4e" - integrity sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2" + integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.14.5" @@ -712,10 +816,10 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-replace-supers" "^7.14.5" -"@babel/plugin-transform-parameters@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3" - integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA== +"@babel/plugin-transform-parameters@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz#5f2285cc3160bf48c8502432716b48504d29ed62" + integrity sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" @@ -733,7 +837,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-react-inline-elements@^7.12.13": +"@babel/plugin-transform-react-inline-elements@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-inline-elements/-/plugin-transform-react-inline-elements-7.14.5.tgz#5e2c8ad96612f1a86484b291df5216cc6a6cffb6" integrity sha512-RsdXYEbicGlg9WBvanlndPqCxrG9hV86lPjObbsTzA5hkrfScoECP5NWEJFUrtE/NVFu81OcPu6pQVVQtOX20Q== @@ -781,15 +885,15 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-runtime@^7.14.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz#30491dad49c6059f8f8fa5ee8896a0089e987523" - integrity sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg== +"@babel/plugin-transform-runtime@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.8.tgz#9d15b1e94e1c7f6344f65a8d573597d93c6cd886" + integrity sha512-+6zsde91jMzzvkzuEA3k63zCw+tm/GvuuabkpisgbDMTPQsIMHllE3XczJFFtEHLjjhKQFZmGQVRdELetlWpVw== dependencies: - "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-module-imports" "^7.15.4" "@babel/helper-plugin-utils" "^7.14.5" babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.2" + babel-plugin-polyfill-corejs3 "^0.2.5" babel-plugin-polyfill-regenerator "^0.2.2" semver "^6.3.0" @@ -800,13 +904,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-spread@^7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" - integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== +"@babel/plugin-transform-spread@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz#79d5aa27f68d700449b2da07691dfa32d2f6d468" + integrity sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" "@babel/plugin-transform-sticky-regex@^7.14.5": version "7.14.5" @@ -844,30 +948,30 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/preset-env@^7.14.4": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.7.tgz#5c70b22d4c2d893b03d8c886a5c17422502b932a" - integrity sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA== +"@babel/preset-env@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.8.tgz#f527ce5bcb121cd199f6b502bf23e420b3ff8dba" + integrity sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA== dependencies: - "@babel/compat-data" "^7.14.7" - "@babel/helper-compilation-targets" "^7.14.5" + "@babel/compat-data" "^7.15.0" + "@babel/helper-compilation-targets" "^7.15.4" "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-async-generator-functions" "^7.14.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.15.4" + "@babel/plugin-proposal-async-generator-functions" "^7.15.8" "@babel/plugin-proposal-class-properties" "^7.14.5" - "@babel/plugin-proposal-class-static-block" "^7.14.5" + "@babel/plugin-proposal-class-static-block" "^7.15.4" "@babel/plugin-proposal-dynamic-import" "^7.14.5" "@babel/plugin-proposal-export-namespace-from" "^7.14.5" "@babel/plugin-proposal-json-strings" "^7.14.5" "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" "@babel/plugin-proposal-numeric-separator" "^7.14.5" - "@babel/plugin-proposal-object-rest-spread" "^7.14.7" + "@babel/plugin-proposal-object-rest-spread" "^7.15.6" "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" "@babel/plugin-proposal-optional-chaining" "^7.14.5" "@babel/plugin-proposal-private-methods" "^7.14.5" - "@babel/plugin-proposal-private-property-in-object" "^7.14.5" + "@babel/plugin-proposal-private-property-in-object" "^7.15.4" "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" @@ -886,41 +990,41 @@ "@babel/plugin-transform-arrow-functions" "^7.14.5" "@babel/plugin-transform-async-to-generator" "^7.14.5" "@babel/plugin-transform-block-scoped-functions" "^7.14.5" - "@babel/plugin-transform-block-scoping" "^7.14.5" - "@babel/plugin-transform-classes" "^7.14.5" + "@babel/plugin-transform-block-scoping" "^7.15.3" + "@babel/plugin-transform-classes" "^7.15.4" "@babel/plugin-transform-computed-properties" "^7.14.5" "@babel/plugin-transform-destructuring" "^7.14.7" "@babel/plugin-transform-dotall-regex" "^7.14.5" "@babel/plugin-transform-duplicate-keys" "^7.14.5" "@babel/plugin-transform-exponentiation-operator" "^7.14.5" - "@babel/plugin-transform-for-of" "^7.14.5" + "@babel/plugin-transform-for-of" "^7.15.4" "@babel/plugin-transform-function-name" "^7.14.5" "@babel/plugin-transform-literals" "^7.14.5" "@babel/plugin-transform-member-expression-literals" "^7.14.5" "@babel/plugin-transform-modules-amd" "^7.14.5" - "@babel/plugin-transform-modules-commonjs" "^7.14.5" - "@babel/plugin-transform-modules-systemjs" "^7.14.5" + "@babel/plugin-transform-modules-commonjs" "^7.15.4" + "@babel/plugin-transform-modules-systemjs" "^7.15.4" "@babel/plugin-transform-modules-umd" "^7.14.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9" "@babel/plugin-transform-new-target" "^7.14.5" "@babel/plugin-transform-object-super" "^7.14.5" - "@babel/plugin-transform-parameters" "^7.14.5" + "@babel/plugin-transform-parameters" "^7.15.4" "@babel/plugin-transform-property-literals" "^7.14.5" "@babel/plugin-transform-regenerator" "^7.14.5" "@babel/plugin-transform-reserved-words" "^7.14.5" "@babel/plugin-transform-shorthand-properties" "^7.14.5" - "@babel/plugin-transform-spread" "^7.14.6" + "@babel/plugin-transform-spread" "^7.15.8" "@babel/plugin-transform-sticky-regex" "^7.14.5" "@babel/plugin-transform-template-literals" "^7.14.5" "@babel/plugin-transform-typeof-symbol" "^7.14.5" "@babel/plugin-transform-unicode-escapes" "^7.14.5" "@babel/plugin-transform-unicode-regex" "^7.14.5" "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.14.5" + "@babel/types" "^7.15.6" babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.2" + babel-plugin-polyfill-corejs3 "^0.2.5" babel-plugin-polyfill-regenerator "^0.2.2" - core-js-compat "^3.15.0" + core-js-compat "^3.16.0" semver "^6.3.0" "@babel/preset-modules@^0.1.4": @@ -934,7 +1038,7 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.13.13": +"@babel/preset-react@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz#0fbb769513f899c2c56f3a882fa79673c2d4ab3c" integrity sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ== @@ -947,11 +1051,11 @@ "@babel/plugin-transform-react-pure-annotations" "^7.14.5" "@babel/runtime-corejs3@^7.10.2": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.14.7.tgz#0ef292bbce40ca00f874c9724ef175a12476465c" - integrity sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA== + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.10.3.tgz#931ed6941d3954924a7aa967ee440e60c507b91a" + integrity sha512-HA7RPj5xvJxQl429r5Cxr2trJwOfPjKiqhCXcdQPSqO2G0RHPZpXu4fkYmBaTKCp2c/jRaMK9GB/lN+7zvvFPw== dependencies: - core-js-pure "^3.15.0" + core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" "@babel/runtime@7.0.0": @@ -961,43 +1065,43 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.0", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" - integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" + integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.14.5", "@babel/template@^7.3.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" - integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== +"@babel/template@^7.14.5", "@babel/template@^7.15.4", "@babel/template@^7.3.3": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" + integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg== dependencies: "@babel/code-frame" "^7.14.5" - "@babel/parser" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.7.0": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753" - integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.15.4", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d" + integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA== dependencies: "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/parser" "^7.14.7" - "@babel/types" "^7.14.5" + "@babel/generator" "^7.15.4" + "@babel/helper-function-name" "^7.15.4" + "@babel/helper-hoist-variables" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.14.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" - integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.14.5", "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.15.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" + integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig== dependencies: - "@babel/helper-validator-identifier" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1005,20 +1109,7 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@csstools/convert-colors@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" - integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== - -"@emotion/cache@^11.4.0": +"@emotion/cache@^11.1.3", "@emotion/cache@^11.4.0": version "11.4.0" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.4.0.tgz#293fc9d9a7a38b9aad8e9337e5014366c3b09ac0" integrity sha512-Zx70bjE7LErRO9OaZrhf22Qye1y4F7iDl+ITjet0J+i+B88PrAOBkKvaAWhxsZf72tDLajwCgfCjJ2dvH77C3g== @@ -1040,22 +1131,22 @@ integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== "@emotion/react@^11.1.1": - version "11.4.0" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.4.0.tgz#2465ad7b073a691409b88dfd96dc17097ddad9b7" - integrity sha512-4XklWsl9BdtatLoJpSjusXhpKv9YVteYKh9hPKP1Sxl+mswEFoUe0WtmtWjxEjkA51DQ2QRMCNOvKcSlCQ7ivg== + version "11.1.4" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.1.4.tgz#ddee4247627ff7dd7d0c6ae52f1cfd6b420357d2" + integrity sha512-9gkhrW8UjV4IGRnEe4/aGPkUxoGS23aD9Vu6JCGfEDyBYL+nGkkRBoMFGAzCT9qFdyUvQp4UUtErbKWxq/JS4A== dependencies: - "@babel/runtime" "^7.13.10" - "@emotion/cache" "^11.4.0" - "@emotion/serialize" "^1.0.2" + "@babel/runtime" "^7.7.2" + "@emotion/cache" "^11.1.3" + "@emotion/serialize" "^1.0.0" "@emotion/sheet" "^1.0.1" "@emotion/utils" "^1.0.0" "@emotion/weak-memoize" "^0.2.5" hoist-non-react-statics "^3.3.1" -"@emotion/serialize@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.2.tgz#77cb21a0571c9f68eb66087754a65fa97bfcd965" - integrity sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A== +"@emotion/serialize@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.0.tgz#1a61f4f037cf39995c97fc80ebe99abc7b191ca9" + integrity sha512-zt1gm4rhdo5Sry8QpCOpopIUIKU+mUSpV9WNmFILUraatm5dttNEaYzUWWSboSMUE6PtN2j1cAsuvcugfdI3mw== dependencies: "@emotion/hash" "^0.8.0" "@emotion/memoize" "^0.7.4" @@ -1083,10 +1174,10 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@eslint/eslintrc@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" - integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg== +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -1099,16 +1190,16 @@ strip-json-comments "^3.1.1" "@formatjs/intl-unified-numberformat@^3.3.3": - version "3.3.7" - resolved "https://registry.yarnpkg.com/@formatjs/intl-unified-numberformat/-/intl-unified-numberformat-3.3.7.tgz#9995a24568908188e716d81a1de5b702b2ee00e2" - integrity sha512-KnWgLRHzCAgT9eyt3OS34RHoyD7dPDYhRcuKn+/6Kv2knDF8Im43J6vlSW6Hm1w63fNq3ZIT1cFk7RuVO3Psag== + version "3.3.6" + resolved "https://registry.yarnpkg.com/@formatjs/intl-unified-numberformat/-/intl-unified-numberformat-3.3.6.tgz#ab69818f7568894023cb31fdb5b5c7eed62c6537" + integrity sha512-VQYswh9Pxf4kN6FQvKprAQwSJrF93eJstCDPM1HIt3c3O6NqPFWNWhZ91PLTppOV11rLYsFK11ZxiGbnLNiPTg== dependencies: - "@formatjs/intl-utils" "^2.3.0" + "@formatjs/intl-utils" "^2.2.5" -"@formatjs/intl-utils@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@formatjs/intl-utils/-/intl-utils-2.3.0.tgz#2dc8c57044de0340eb53a7ba602e59abf80dc799" - integrity sha512-KWk80UPIzPmUg+P0rKh6TqspRw0G6eux1PuJr+zz47ftMaZ9QDwbGzHZbtzWkl5hgayM/qrKRutllRC7D/vVXQ== +"@formatjs/intl-utils@^2.2.5": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@formatjs/intl-utils/-/intl-utils-2.2.5.tgz#eaafd94df3d102ee13e54e80f992a33868a6b1e8" + integrity sha512-p7gcmazKROteL4IECCp03Qrs790fZ8tbemUAjQu0+K0AaAlK49rI1SIFFq3LzDUAqXIshV95JJhRe/yXxkal5g== "@gamestdio/websocket@^0.3.2": version "0.3.2" @@ -1146,97 +1237,98 @@ resolve-from "^5.0.0" "@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + version "0.1.2" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== +"@jest/console@^27.3.1": + version "27.3.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.3.1.tgz#e8ea3a475d3f8162f23d69efbfaa9cbe486bee93" + integrity sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^27.2.5" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" + jest-message-util "^27.3.1" + jest-util "^27.3.1" slash "^3.0.0" -"@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== +"@jest/core@^27.3.1": + version "27.3.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.3.1.tgz#04992ef1b58b17c459afb87ab56d81e63d386925" + integrity sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg== dependencies: - "@jest/console" "^26.6.2" - "@jest/reporters" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^27.3.1" + "@jest/reporters" "^27.3.1" + "@jest/test-result" "^27.3.1" + "@jest/transform" "^27.3.1" + "@jest/types" "^27.2.5" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" + emittery "^0.8.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" + jest-changed-files "^27.3.0" + jest-config "^27.3.1" + jest-haste-map "^27.3.1" + jest-message-util "^27.3.1" + jest-regex-util "^27.0.6" + jest-resolve "^27.3.1" + jest-resolve-dependencies "^27.3.1" + jest-runner "^27.3.1" + jest-runtime "^27.3.1" + jest-snapshot "^27.3.1" + jest-util "^27.3.1" + jest-validate "^27.3.1" + jest-watcher "^27.3.1" + micromatch "^4.0.4" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== +"@jest/environment@^27.3.1": + version "27.3.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.3.1.tgz#2182defbce8d385fd51c5e7c7050f510bd4c86b1" + integrity sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw== dependencies: - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/fake-timers" "^27.3.1" + "@jest/types" "^27.2.5" "@types/node" "*" - jest-mock "^26.6.2" + jest-mock "^27.3.0" -"@jest/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== +"@jest/fake-timers@^27.3.1": + version "27.3.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.3.1.tgz#1fad860ee9b13034762cdb94266e95609dfce641" + integrity sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA== dependencies: - "@jest/types" "^26.6.2" - "@sinonjs/fake-timers" "^6.0.1" + "@jest/types" "^27.2.5" + "@sinonjs/fake-timers" "^8.0.1" "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" + jest-message-util "^27.3.1" + jest-mock "^27.3.0" + jest-util "^27.3.1" -"@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== +"@jest/globals@^27.3.1": + version "27.3.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.3.1.tgz#ce1dfb03d379237a9da6c1b99ecfaca1922a5f9e" + integrity sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg== dependencies: - "@jest/environment" "^26.6.2" - "@jest/types" "^26.6.2" - expect "^26.6.2" + "@jest/environment" "^27.3.1" + "@jest/types" "^27.2.5" + expect "^27.3.1" -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== +"@jest/reporters@^27.3.1": + version "27.3.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.3.1.tgz#28b5c1f5789481e23788048fa822ed15486430b9" + integrity sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^27.3.1" + "@jest/test-result" "^27.3.1" + "@jest/transform" "^27.3.1" + "@jest/types" "^27.2.5" + "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" @@ -1247,105 +1339,80 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" + jest-haste-map "^27.3.1" + jest-resolve "^27.3.1" + jest-util "^27.3.1" + jest-worker "^27.3.1" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" + v8-to-istanbul "^8.1.0" -"@jest/source-map@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== +"@jest/source-map@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.0.6.tgz#be9e9b93565d49b0548b86e232092491fb60551f" + integrity sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g== dependencies: callsites "^3.0.0" graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== +"@jest/test-result@^27.3.1": + version "27.3.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.3.1.tgz#89adee8b771877c69b3b8d59f52f29dccc300194" + integrity sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg== dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^27.3.1" + "@jest/types" "^27.2.5" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== +"@jest/test-sequencer@^27.3.1": + version "27.3.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.3.1.tgz#4b3bde2dbb05ee74afdae608cf0768e3354683b1" + integrity sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA== dependencies: - "@jest/test-result" "^26.6.2" + "@jest/test-result" "^27.3.1" graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" + jest-haste-map "^27.3.1" + jest-runtime "^27.3.1" -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== +"@jest/transform@^27.3.1": + version "27.3.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.3.1.tgz#ff80eafbeabe811e9025e4b6f452126718455220" + integrity sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" + "@jest/types" "^27.2.5" babel-plugin-istanbul "^6.0.0" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/transform@^27.0.6": - version "27.0.6" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.0.6.tgz#189ad7107413208f7600f4719f81dd2f7278cc95" - integrity sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.0.6" - babel-plugin-istanbul "^6.0.0" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^27.0.6" + jest-haste-map "^27.3.1" jest-regex-util "^27.0.6" - jest-util "^27.0.6" + jest-util "^27.3.1" micromatch "^4.0.4" pirates "^4.0.1" slash "^3.0.0" source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== +"@jest/types@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" + integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" + "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^15.0.0" - chalk "^4.0.0" + chalk "^3.0.0" -"@jest/types@^27.0.6": - version "27.0.6" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.6.tgz#9a992bc517e0c49f035938b8549719c2de40706b" - integrity sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g== +"@jest/types@^27.0.2", "@jest/types@^27.2.5": + version "27.2.5" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.2.5.tgz#420765c052605e75686982d24b061b4cbba22132" + integrity sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" @@ -1354,41 +1421,40 @@ chalk "^4.0.0" "@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464" + integrity sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw== dependencies: mkdirp "^1.0.4" - rimraf "^3.0.2" -"@polka/url@^1.0.0-next.15": - version "1.0.0-next.15" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.15.tgz#6a9d143f7f4f49db2d782f9e1c8839a29b43ae23" - integrity sha512-15spi3V28QdevleWBNXE4pIls3nFZmBbUGrW9IVPwiQczuSb9n76TCB4bsk8TSel+I1OkHEdPhu5QKMfY6rQHA== +"@polka/url@^1.0.0-next.9": + version "1.0.0-next.11" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.11.tgz#aeb16f50649a91af79dbe36574b66d0f9e4d9f71" + integrity sha512-3NsZsJIA/22P3QUyrEDNA2D133H4j224twJrdipXN38dpnIOzAbUDtOwkcJ5pXmn75w7LSQDjA4tO9dm1XlqlA== -"@rails/ujs@^6.1.3": +"@rails/ujs@^6.1.4": version "6.1.4" resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-6.1.4.tgz#093d5341595a02089ed309dec40f3c37da7b1b10" integrity sha512-O3lEzL5DYbxppMdsFSw36e4BHIlfz/xusynwXGv3l2lhSlvah41qviRpsoAlKXxl37nZAqK+UUF5cnGGK45Mfw== "@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + version "1.8.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" + integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== +"@sinonjs/fake-timers@^8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz#1c1c9a91419f804e59ae8df316a07dd1c3a76b94" + integrity sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew== dependencies: "@sinonjs/commons" "^1.7.0" -"@testing-library/dom@^7.28.1": - version "7.31.2" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.31.2.tgz#df361db38f5212b88555068ab8119f5d841a8c4a" - integrity sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ== +"@testing-library/dom@^8.0.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.1.0.tgz#f8358b1883844ea569ba76b7e94582168df5370d" + integrity sha512-kmW9alndr19qd6DABzQ978zKQ+J65gU2Rzkl8hriIetPnwpesRaK4//jEQyYh8fEALmGhomD/LBQqt+o+DL95Q== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" @@ -1397,9 +1463,9 @@ chalk "^4.1.0" dom-accessibility-api "^0.5.6" lz-string "^1.4.4" - pretty-format "^26.6.2" + pretty-format "^27.0.2" -"@testing-library/jest-dom@^5.12.0": +"@testing-library/jest-dom@^5.14.1": version "5.14.1" resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.14.1.tgz#8501e16f1e55a55d675fe73eecee32cdaddb9766" integrity sha512-dfB7HVIgTNCxH22M1+KU6viG5of2ldoA5ly8Ar8xkezKHKXjRvznCdbMbqjYGgO2xjRbwnR+rR8MLUIqF3kKbQ== @@ -1414,13 +1480,13 @@ lodash "^4.17.15" redent "^3.0.0" -"@testing-library/react@^11.2.7": - version "11.2.7" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.7.tgz#b29e2e95c6765c815786c0bc1d5aed9cb2bf7818" - integrity sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA== +"@testing-library/react@^12.1.2": + version "12.1.2" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-12.1.2.tgz#f1bc9a45943461fa2a598bb4597df1ae044cfc76" + integrity sha512-ihQiEOklNyHIpo2Y8FREkyD1QAea054U0MVbwH1m8N9TxeFz+KoJ9LkqoKqJlzx2JDm56DVwaJ1r36JYxZM05g== dependencies: "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^7.28.1" + "@testing-library/dom" "^8.0.0" "@tootallnate/once@1": version "1.1.2" @@ -1428,14 +1494,14 @@ integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@types/aria-query@^4.2.0": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" - integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== + version "4.2.0" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.0.tgz#14264692a9d6e2fa4db3df5e56e94b5e25647ac0" + integrity sha512-iIgQNzCm0v7QMhhe4Jjn9uRh+I6GoPmt03CbEtwx3ao8/EfoQcmgtqH4vQ5Db/lxiIGaWDv6nwvunuh0RyX0+A== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.3", "@types/babel__core@^7.1.7": - version "7.1.15" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.15.tgz#2ccfb1ad55a02c83f8e0ad327cbc332f55eb1024" - integrity sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew== +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.3": + version "7.1.14" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" + integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1444,39 +1510,57 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" - integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== + version "7.6.1" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" + integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" - integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.13" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.13.tgz#1874914be974a492e1b4cb00585cabb274e8ba18" + integrity sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ== dependencies: "@babel/types" "^7.3.0" -"@types/glob@^7.1.1": - version "7.1.4" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672" - integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== +"@types/babel__traverse@^7.0.4": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.15.tgz#db9e4238931eb69ef8aab0ad6523d4d4caa39d03" + integrity sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A== dependencies: + "@babel/types" "^7.3.0" + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" "@types/minimatch" "*" "@types/node" "*" "@types/graceful-fs@^4.1.2": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + version "4.1.3" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f" + integrity sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ== dependencies: "@types/node" "*" @@ -1500,84 +1584,99 @@ dependencies: "@types/istanbul-lib-coverage" "*" +"@types/istanbul-reports@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + "@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" + integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== dependencies: "@types/istanbul-lib-report" "*" "@types/jest@*": - version "26.0.24" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" - integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== + version "26.0.3" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.3.tgz#79534e0e94857171c0edc596db0ebe7cb7863251" + integrity sha512-v89ga1clpVL/Y1+YI0eIu1VMW+KU7Xl8PhylVtDKVWaSUHBHYPLXMQGBdrpHewaKoTvlXkksbYqPgz8b4cmRZg== dependencies: - jest-diff "^26.0.0" - pretty-format "^26.0.0" + jest-diff "^25.2.1" + pretty-format "^25.2.1" -"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818" - integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== +"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= "@types/minimatch@*": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "16.3.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.3.2.tgz#655432817f83b51ac869c2d51dd8305fb8342e16" - integrity sha512-jJs9ErFLP403I+hMLGnqDRWT0RYKSvArxuBVh2veudHV7ifEC1WAmjJADacZ7mRbA2nWgHtn8xyECMAot0SkAw== - -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + version "14.11.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.1.tgz#56af902ad157e763f9ba63d671c39cda3193c835" + integrity sha512-oTQgnd0hblfLsJ6BvJzzSL+Inogp3lq9fGgqRkMB/ziKMgEUaFl801OncOzUmalfzt14N0oPHMK47ipl+wbTIw== "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/prettier@^2.0.0": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.3.2.tgz#fc8c2825e4ed2142473b4a81064e6e081463d1b3" - integrity sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog== +"@types/prettier@^2.1.5": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" + integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA== "@types/prop-types@*": - version "15.7.4" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" - integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== "@types/q@^1.5.1": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" - integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== + version "1.5.2" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" + integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== "@types/react-redux@^7.1.16": - version "7.1.18" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.18.tgz#2bf8fd56ebaae679a90ebffe48ff73717c438e04" - integrity sha512-9iwAsPyJ9DLTRH+OFeIrm9cAbIj1i2ANL3sKQFATqnPWRbg+jEFXyZOKHiQK/N86pNRXbb4HRxAxo0SIX1XwzQ== + version "7.1.16" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.16.tgz#0fbd04c2500c12105494c83d4a3e45c084e3cb21" + integrity sha512-f/FKzIrZwZk7YEO9E1yoxIuDNRiDducxkFlkw/GNMGEnK9n4K8wJzlJBghpSuOVDgEUHoDkDF7Gi9lHNQR4siw== dependencies: "@types/hoist-non-react-statics" "^3.3.0" "@types/react" "*" hoist-non-react-statics "^3.3.0" redux "^4.0.0" +"@types/react-transition-group@^4.4.0": + version "4.4.3" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.3.tgz#b0994da0a7023d67dbb4a8910a62112bc00d5688" + integrity sha512-fUx5muOWSYP8Bw2BUQ9M9RK9+W1XBK/7FLJ8PTQpnpTEkn0ccyMffyEQvan4C3h53gHdx7KE5Qrxi/LnUGQtdg== + dependencies: + "@types/react" "*" + "@types/react@*": - version "17.0.14" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.14.tgz#f0629761ca02945c4e8fea99b8177f4c5c61fb0f" - integrity sha512-0WwKHUbWuQWOce61UexYuWTGuGY/8JvtUe/dtQ6lR4sZ3UiylHotJeWpf3ArP9+DSGUoLY3wbU59VyMrJps5VQ== + version "17.0.3" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.3.tgz#ba6e215368501ac3826951eef2904574c262cc79" + integrity sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" csstype "^3.0.2" "@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + version "0.16.1" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" + integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== "@types/schema-utils@^1.0.0": version "1.0.0" @@ -1585,33 +1684,33 @@ integrity sha512-YesPanU1+WCigC/Aj1Mga8UCOjHIfMNHZ3zzDsUY7lI8GlKnh/Kv2QwJOQ+jNQ36Ru7IfzSedlG14hppYaN13A== "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" + integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== "@types/testing-library__jest-dom@^5.9.1": - version "5.14.0" - resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.0.tgz#98eb7537cb5502bcca7a0d82acf5f245a2e6c322" - integrity sha512-l2P2GO+hFF4Liye+fAajT1qBqvZOiL79YMpEvgGs1xTK7hECxBI8Wz4J7ntACJNiJ9r0vXQqYovroXRLPDja6A== + version "5.9.1" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.1.tgz#aba5ee062b7880f69c212ef769389f30752806e5" + integrity sha512-yYn5EKHO3MPEMSOrcAb1dLWY+68CG29LiXKsWmmpVHqoP5+ZRiAVLyUHvPNrO2dABDdUGZvavMsaGpWNjM6N2g== dependencies: "@types/jest" "*" "@types/yargs-parser@*": - version "20.2.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" - integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== + version "15.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== "@types/yargs@^15.0.0": - version "15.0.14" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" - integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== + version "15.0.5" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" + integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== dependencies: "@types/yargs-parser" "*" "@types/yargs@^16.0.0": - version "16.0.4" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" - integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== + version "16.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.3.tgz#4b6d35bb8e680510a7dc2308518a80ee1ef27e01" + integrity sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ== dependencies: "@types/yargs-parser" "*" @@ -1799,9 +1898,9 @@ acorn-jsx@^3.0.0: acorn "^3.0.4" acorn-jsx@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== acorn-walk@^7.1.1: version "7.2.0" @@ -1809,9 +1908,9 @@ acorn-walk@^7.1.1: integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== acorn-walk@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.1.1.tgz#3ddab7f84e4a7e2313f6c414c5b7dac85f4e3ebc" - integrity sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w== + version "8.0.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.0.0.tgz#56ae4c0f434a45fff4a125e7ea95fa9c98f67a16" + integrity sha512-oZRad/3SMOI/pxbbmqyurIx7jHw1wZDcR9G44L8pUVFEomX/0dH89SrM1KaDXuv1NpzAXz6Op/Xu/Qd5XXzdEA== acorn@^3.0.4: version "3.3.0" @@ -1819,14 +1918,14 @@ acorn@^3.0.4: integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= acorn@^5.5.0: - version "5.7.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" - integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== acorn@^6.4.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" @@ -1834,9 +1933,9 @@ acorn@^7.1.1, acorn@^7.4.0: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.0.4, acorn@^8.2.4: - version "8.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" - integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== + version "8.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.3.0.tgz#1193f9b96c4e8232f00b11a9edff81b2c8b98b88" + integrity sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw== agent-base@6: version "6.0.2" @@ -1887,9 +1986,9 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.1: - version "8.6.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571" - integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== + version "8.5.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.5.0.tgz#695528274bcb5afc865446aa275484049a18ae4b" + integrity sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -1917,11 +2016,11 @@ ansi-escapes@^1.1.0: integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== dependencies: - type-fest "^0.21.3" + type-fest "^0.11.0" ansi-html@0.0.7: version "0.0.7" @@ -1948,6 +2047,11 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -1961,12 +2065,18 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== dependencies: + "@types/color-name" "^1.1.1" color-convert "^2.0.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1975,26 +2085,31 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.3, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== +anymatch@^3.0.3, anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3, aproba@^1.1.1: +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== dependencies: delegates "^1.0.0" - readable-stream "^2.0.6" + readable-stream "^3.6.0" argparse@^1.0.7: version "1.0.10" @@ -2041,16 +2156,16 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" - integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== +array-includes@^3.1.1, array-includes@^3.1.3, array-includes@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" + integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" + es-abstract "^1.19.1" get-intrinsic "^1.1.1" - is-string "^1.0.5" + is-string "^1.0.7" array-union@^1.0.1: version "1.0.2" @@ -2069,14 +2184,14 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -array.prototype.flat@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" - integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== +array.prototype.flat@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" + integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + es-abstract "^1.19.0" array.prototype.flatmap@^1.2.4: version "1.2.4" @@ -2153,30 +2268,30 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^9.6.1, autoprefixer@^9.8.6: - version "9.8.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" - integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== +autoprefixer@^9.8.8: + version "9.8.8" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a" + integrity sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA== dependencies: browserslist "^4.12.0" caniuse-lite "^1.0.30001109" - colorette "^1.2.1" normalize-range "^0.1.2" num2fraction "^1.2.2" + picocolors "^0.2.1" postcss "^7.0.32" postcss-value-parser "^4.1.0" axe-core@^4.0.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.1.tgz#0c6a076e4a1c3e0544ba6a9479158f9be7a7928e" - integrity sha512-3WVgVPs/7OnKU3s+lqMtkv3wQlg3WxK1YifmpJSDO0E1aPBrZWlrrTO6cxRqCXLuX2aYgCljqXIQd0VnRidV0g== + version "4.0.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.0.2.tgz#c7cf7378378a51fcd272d3c09668002a4990b1cb" + integrity sha512-arU1h31OGFu+LPrOLGZ7nB45v940NMDMEJeNmbutu57P+UFDVnkZg3e+J1I2HJRZ9hT7gO8J91dn/PMrAiKakA== -axios@^0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== +axios@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.23.0.tgz#b0fa5d0948a8d1d75e3d5635238b6c4625b05149" + integrity sha512-NmvAE4i0YAv5cKq8zlDoPd1VLKAqX5oLuZKs8xkJa4qi6RGn0uhCYFjWtHHC9EM/MwOwYWOs53W+V0aqEXq1sg== dependencies: - follow-redirects "^1.10.0" + follow-redirects "^1.14.4" axobject-query@^2.2.0: version "2.2.0" @@ -2195,30 +2310,16 @@ babel-eslint@^10.1.0: eslint-visitor-keys "^1.0.0" resolve "^1.12.0" -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== +babel-jest@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.3.1.tgz#0636a3404c68e07001e434ac4956d82da8a80022" + integrity sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ== dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-jest@^27.0.2: - version "27.0.6" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.6.tgz#e99c6e0577da2655118e3608b68761a5a69bd0d8" - integrity sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA== - dependencies: - "@jest/transform" "^27.0.6" - "@jest/types" "^27.0.6" + "@jest/transform" "^27.3.1" + "@jest/types" "^27.2.5" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^27.0.6" + babel-preset-jest "^27.2.0" chalk "^4.0.0" graceful-fs "^4.2.4" slash "^3.0.0" @@ -2251,20 +2352,10 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^4.0.0" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - -babel-plugin-jest-hoist@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz#f7c6b3d764af21cb4a2a1ab6870117dbde15b456" - integrity sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw== +babel-plugin-jest-hoist@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz#79f37d43f7e5c4fdc4b2ca3e10cc6cf545626277" + integrity sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -2300,13 +2391,13 @@ babel-plugin-polyfill-corejs2@^0.2.2: "@babel/helper-define-polyfill-provider" "^0.2.2" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz#72add68cf08a8bf139ba6e6dfc0b1d504098e57b" - integrity sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g== +babel-plugin-polyfill-corejs3@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz#2779846a16a1652244ae268b1e906ada107faf92" + integrity sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw== dependencies: "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.14.0" + core-js-compat "^3.16.2" babel-plugin-polyfill-regenerator@^0.2.2: version "0.2.2" @@ -2343,9 +2434,9 @@ babel-plugin-transform-react-remove-prop-types@^0.4.24: integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz#cf5feef29551253471cfa82fc8e0f5063df07a77" + integrity sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -2360,20 +2451,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== +babel-preset-jest@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz#556bbbf340608fed5670ab0ea0c8ef2449fba885" + integrity sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg== dependencies: - babel-plugin-jest-hoist "^26.6.2" - babel-preset-current-node-syntax "^1.0.0" - -babel-preset-jest@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz#909ef08e9f24a4679768be2f60a3df0856843f9d" - integrity sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw== - dependencies: - babel-plugin-jest-hoist "^27.0.6" + babel-plugin-jest-hoist "^27.2.0" babel-preset-current-node-syntax "^1.0.0" babel-runtime@^6.26.0: @@ -2385,14 +2468,14 @@ babel-runtime@^6.26.0: regenerator-runtime "^0.11.0" balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base64-js@^1.0.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== base@^0.11.1: version "0.11.2" @@ -2428,9 +2511,9 @@ binary-extensions@^1.0.0: integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== bindings@^1.5.0: version "1.5.0" @@ -2444,15 +2527,10 @@ bluebird@^3.5.5: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -blueimp-load-image@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/blueimp-load-image/-/blueimp-load-image-3.0.0.tgz#d71c39440a7d2f1a83e3e86a625e329116a51705" - integrity sha512-Q9rFbd4ZUNvzSFmRXx9MoG0RwWwJeMjjEUbG7WIOJgUg22Jgkow0wL5b35B6qwiBscxACW9OHdrP5s2vQ3x8DQ== - -blurhash@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/blurhash/-/blurhash-1.1.3.tgz#dc325af7da836d07a0861d830bdd63694382483e" - integrity sha512-yUhPJvXexbqbyijCIE/T2NCXcj9iNPhWmOKbPTuR/cm7Q5snXYIfnVnz6m7MWOXxODMz/Cr3UcVkRdHiuDVRDw== +blurhash@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/blurhash/-/blurhash-1.1.4.tgz#a7010ceb3019cd2c9809b17c910ebf6175d29244" + integrity sha512-MXIPz6zwYUKayju+Uidf83KhH0vodZfeRl6Ich8Gu+KGl0JgKiFq9LsfqV7cVU5fKD/AotmduZqvOfrGKOfTaA== bmp-js@^0.1.0: version "0.1.0" @@ -2464,10 +2542,10 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== +bn.js@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" + integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== body-parser@1.19.0: version "1.19.0" @@ -2582,11 +2660,11 @@ browserify-des@^1.0.0: safe-buffer "^5.1.2" browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= dependencies: - bn.js "^5.0.0" + bn.js "^4.1.0" randombytes "^2.0.1" browserify-sign@^4.0.0: @@ -2611,7 +2689,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.6.4: +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6: version "4.16.6" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== @@ -2622,6 +2700,17 @@ browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4 escalade "^3.1.1" node-releases "^1.1.71" +browserslist@^4.17.3: + version "4.17.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.3.tgz#2844cd6eebe14d12384b0122d217550160d2d624" + integrity sha512-59IqHJV5VGdcJZ+GZ2hU5n4Kv3YiASzW6Xk5g9tf5a/MAzGeFwgGWU39fVzNIOVcgB3+Gp+kiQu0HEfTVU/3VQ== + dependencies: + caniuse-lite "^1.0.30001264" + electron-to-chromium "^1.3.857" + escalade "^3.1.1" + node-releases "^1.1.77" + picocolors "^0.2.1" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -2658,12 +2747,12 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -bufferutil@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b" - integrity sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw== +bufferutil@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" + integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== dependencies: - node-gyp-build "^4.2.0" + node-gyp-build "^4.3.0" builtin-status-codes@^3.0.0: version "3.0.0" @@ -2702,9 +2791,9 @@ cacache@^12.0.2: y18n "^4.0.0" cacache@^15.0.5: - version "15.2.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.2.0.tgz#73af75f77c58e72d8c630a7a2858cb18ef523389" - integrity sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw== + version "15.0.5" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" + integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== dependencies: "@npmcli/move-file" "^1.0.1" chownr "^2.0.0" @@ -2720,7 +2809,7 @@ cacache@^15.0.5: p-map "^4.0.0" promise-inflight "^1.0.1" rimraf "^3.0.2" - ssri "^8.0.1" + ssri "^8.0.0" tar "^6.0.2" unique-filename "^1.1.1" @@ -2788,7 +2877,7 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: +camelcase@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== @@ -2803,17 +2892,15 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219: - version "1.0.30001245" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001245.tgz#45b941bbd833cb0fa53861ff2bae746b3c6ca5d4" - integrity sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219: + version "1.0.30001228" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa" + integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A== -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" +caniuse-lite@^1.0.30001264: + version "1.0.30001265" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz#0613c9e6c922e422792e6fcefdf9a3afeee4f8c3" + integrity sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw== chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" @@ -2844,9 +2931,9 @@ chalk@^3.0.0: supports-color "^7.1.0" chalk@^4.0, chalk@^4.0.0, chalk@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -2857,19 +2944,19 @@ char-regex@^1.0.2: integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== "chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== dependencies: - anymatch "~3.1.2" + anymatch "~3.1.1" braces "~3.0.2" - glob-parent "~5.1.2" + glob-parent "~5.1.0" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.6.0" + readdirp "~3.5.0" optionalDependencies: - fsevents "~2.3.2" + fsevents "~2.3.1" chokidar@^2.1.8: version "2.1.8" @@ -2901,16 +2988,13 @@ chownr@^2.0.0: integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-info@^3.1.1: +ci-info@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== @@ -2928,10 +3012,10 @@ circular-json@^0.3.1: resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== +cjs-module-lexer@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz#2fd46d9906a126965aa541345c499aaa18e8cd73" + integrity sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw== class-utils@^0.3.5: version "0.3.6" @@ -2974,19 +3058,10 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + version "7.0.3" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.3.tgz#ef180f26c8d9bff3927ee52428bfec2090427981" + integrity sha512-Gj3QHTkVMPKqwP3f7B4KPkBZRMR9r4rfi5bXFpg1a+Svvj8l7q5CnkBkVQzfxT5DFSsGk2+PascOgL0JYkL2kw== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" @@ -3062,32 +3137,32 @@ color-name@^1.0.0, color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" - integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== +color-string@^1.5.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz#c3915f61fe267672cb7e1e064c9d692219f6c312" + integrity sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA== dependencies: color-name "^1.0.0" simple-swizzle "^0.2.2" +color-support@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + color@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" - integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== + version "3.1.2" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" + integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== dependencies: color-convert "^1.9.1" - color-string "^1.5.4" + color-string "^1.5.2" -colorette@^1.2.1, colorette@^1.2.2: +colorette@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== -colors@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -3100,10 +3175,10 @@ commander@^2.20.0, commander@^2.8.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== commondir@^1.0.1: version "1.0.1" @@ -3171,7 +3246,7 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: +console-control-strings@^1.0.0, console-control-strings@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= @@ -3194,9 +3269,9 @@ content-type@~1.0.4: integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: safe-buffer "~5.1.1" @@ -3227,20 +3302,25 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.14.0, core-js-compat@^3.15.0: - version "3.15.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.15.2.tgz#47272fbb479880de14b4e6081f71f3492f5bd3cb" - integrity sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ== +core-js-compat@^3.16.0, core-js-compat@^3.16.2: + version "3.18.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.2.tgz#e40c266fbd613948dd8d2d2156345da8ac03c142" + integrity sha512-25VJYCJtGjZwLguj7d66oiHfmnVw3TMOZ0zV8DyMJp/aeQ3OjR519iOOeck08HMyVVRAqXxafc2Hl+5QstJrsQ== dependencies: - browserslist "^4.16.6" + browserslist "^4.17.3" semver "7.0.0" -core-js-pure@^3.15.0: - version "3.15.2" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.15.2.tgz#c8e0874822705f3385d3197af9348f7c9ae2e3ce" - integrity sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA== +core-js-pure@^3.0.0: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" + integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== -core-js@^2.4.0, core-js@^2.5.0: +core-js@^2.4.0: + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + +core-js@^2.5.0: version "2.6.12" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== @@ -3320,7 +3400,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2: +cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -3346,13 +3426,6 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -css-blank-pseudo@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" - integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== - dependencies: - postcss "^7.0.5" - css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" @@ -3391,14 +3464,6 @@ css-global-keywords@^1.0.1: resolved "https://registry.yarnpkg.com/css-global-keywords/-/css-global-keywords-1.0.1.tgz#72a9aea72796d019b1d2a3252de4e5aaa37e4a69" integrity sha1-cqmupyeW0Bmx0qMlLeTlqqN+Smk= -css-has-pseudo@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" - integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^5.0.0-rc.4" - css-list-helpers@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/css-list-helpers/-/css-list-helpers-1.0.1.tgz#fff57192202db83240c41686f919e449a7024f7d" @@ -3406,7 +3471,7 @@ css-list-helpers@^1.0.1: dependencies: tcomb "^2.5.0" -css-loader@^5.2.6: +css-loader@^5.2.7: version "5.2.7" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.7.tgz#9b9f111edf6fb2be5dc62525644cbc9c232064ae" integrity sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg== @@ -3422,13 +3487,6 @@ css-loader@^5.2.6: schema-utils "^3.0.0" semver "^7.3.5" -css-prefers-color-scheme@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" - integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== - dependencies: - postcss "^7.0.5" - css-select-base-adapter@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" @@ -3457,18 +3515,18 @@ css-tree@1.0.0-alpha.37: mdn-data "2.0.4" source-map "^0.6.1" -css-tree@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== +css-tree@1.0.0-alpha.39: + version "1.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" + integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== dependencies: - mdn-data "2.0.14" + mdn-data "2.0.6" source-map "^0.6.1" css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + version "3.3.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.3.0.tgz#10fec696a9ece2e591ac772d759aacabac38cd39" + integrity sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg== css.escape@^1.5.1: version "1.5.1" @@ -3484,16 +3542,6 @@ css@^3.0.0: source-map "^0.6.1" source-map-resolve "^0.6.0" -cssdb@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" - integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== - -cssesc@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" - integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== - cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -3568,11 +3616,11 @@ cssnano@^4.1.11: postcss "^7.0.0" csso@^4.0.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + version "4.0.3" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903" + integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== dependencies: - css-tree "^1.1.2" + css-tree "1.0.0-alpha.39" cssom@^0.4.4: version "0.4.4" @@ -3591,10 +3639,15 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" +csstype@^2.6.7: + version "2.6.13" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.13.tgz#a6893015b90e84dd6e85d0e3b442a1e84f2dbe0f" + integrity sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A== + csstype@^3.0.2: - version "3.0.8" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" - integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== + version "3.0.6" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.6.tgz#865d0b5833d7d8d40f4e5b8a6d76aea3de4725ef" + integrity sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw== cyclist@^1.0.1: version "1.0.1" @@ -3610,9 +3663,9 @@ d@1, d@^1.0.1: type "^1.0.1" damerau-levenshtein@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz#64368003512a1a6992593741a09a9d31a836f55d" - integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw== + version "1.0.6" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" + integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== data-urls@^2.0.0: version "2.0.0" @@ -3631,9 +3684,9 @@ debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: ms "2.0.0" debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" @@ -3650,15 +3703,20 @@ decamelize@^1.2.0: integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decimal.js@^10.2.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" - integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + version "10.2.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" + integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + deep-equal@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" @@ -3785,9 +3843,9 @@ detect-newline@^3.0.0: integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== detect-passive-events@^2.0.3: version "2.0.3" @@ -3796,10 +3854,15 @@ detect-passive-events@^2.0.3: dependencies: detect-it "^4.0.1" -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== +diff-sequences@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" + integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== + +diff-sequences@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723" + integrity sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ== diffie-hellman@^5.0.0: version "5.0.3" @@ -3865,12 +3928,12 @@ dom-helpers@^3.2.1, dom-helpers@^3.4.0: "@babel/runtime" "^7.1.2" dom-helpers@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" - integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + version "5.1.3" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.3.tgz#7233248eb3a2d1f74aafca31e52c5299cc8ce821" + integrity sha512-nZD1OtwfWGRBWlpANxacBEZrEuLa16o1nh7YopFWeoF68Zt8GGEmzHu6Xv4F3XaFIC+YXtTLrzgqKxFgLEe4jw== dependencies: - "@babel/runtime" "^7.8.7" - csstype "^3.0.2" + "@babel/runtime" "^7.6.3" + csstype "^2.6.7" dom-serializer@0: version "0.2.2" @@ -3891,9 +3954,9 @@ domelementtype@1: integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== domelementtype@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" - integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + version "2.0.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== domexception@^2.0.1: version "2.0.1" @@ -3917,10 +3980,10 @@ dot-prop@^5.2.0: dependencies: is-obj "^2.0.0" -dotenv@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-9.0.2.tgz#dacc20160935a37dea6364aa1bef819fb9b6ab05" - integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg== +dotenv@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== duplexer@^0.1.2: version "0.1.2" @@ -3948,9 +4011,14 @@ ejs@^2.3.4: integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== electron-to-chromium@^1.3.723: - version "1.3.776" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.776.tgz#33f6e2423b61f1bdaa8d2a103aae78a09764a75f" - integrity sha512-V0w7eFSBoFPpdw4xexjVPZ770UDZIevSwkkj4W97XbE3IsCsTRFpa7/yXGZ88EOQAUEA09JMMsWK0xsw0kRAYw== + version "1.3.736" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.736.tgz#f632d900a1f788dab22fec9c62ec5c9c8f0c4052" + integrity sha512-DY8dA7gR51MSo66DqitEQoUMQ0Z+A2DSXFi7tK304bdTVqczCAfUuyQw6Wdg8hIoo5zIxkU1L24RQtUce1Ioig== + +electron-to-chromium@^1.3.857: + version "1.3.864" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.864.tgz#6a993bcc196a2b8b3df84d28d5d4dd912393885f" + integrity sha512-v4rbad8GO6/yVI92WOeU9Wgxc4NA0n4f6P1FvZTY+jyY7JHEhw3bduYu60v3Q1h81Cg6eo4ApZrFPuycwd5hGw== elliptic@^6.5.3: version "6.5.4" @@ -3965,10 +4033,10 @@ elliptic@^6.5.3: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== +emittery@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== emoji-mart@^3.0.1: version "3.0.1" @@ -3989,9 +4057,9 @@ emoji-regex@^8.0.0: integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.0.0: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + version "9.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.0.0.tgz#48a2309cc8a1d2e9d23bc6a67c39b63032e76ea4" + integrity sha512-6p1NII1Vm62wni/VR/cUMauVQoxmLVb9csqQlvLz+hO2gk8U2UYDfXHQSUYIBKmZwAKz867IDqG7B+u0mj+M6w== emojis-list@^2.0.0: version "2.1.0" @@ -4032,14 +4100,14 @@ enquirer@^2.3.5: ansi-colors "^4.1.1" entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + version "2.0.3" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" + integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== errno@^0.1.3, errno@~0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== dependencies: prr "~1.0.1" @@ -4057,22 +4125,26 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.1.1" -es-abstract@^1.17.0-next.0, es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: - version "1.18.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" - integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== +es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.1, es-abstract@^1.18.2, es-abstract@^1.19.0, es-abstract@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" + integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" has "^1.0.3" has-symbols "^1.0.2" - is-callable "^1.2.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" is-negative-zero "^2.0.1" - is-regex "^1.1.3" - is-string "^1.0.6" - object-inspect "^1.10.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.1" + object-inspect "^1.11.0" object-keys "^1.1.1" object.assign "^4.1.2" string.prototype.trimend "^1.0.4" @@ -4202,42 +4274,41 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-import-resolver-node@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" - integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== - dependencies: - debug "^2.6.9" - resolve "^1.13.1" - -eslint-module-utils@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233" - integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A== +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== dependencies: debug "^3.2.7" + resolve "^1.20.0" + +eslint-module-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz#b435001c9f8dd4ab7f6d0efcae4b9696d4c24b7c" + integrity sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ== + dependencies: + debug "^3.2.7" + find-up "^2.1.0" pkg-dir "^2.0.0" -eslint-plugin-import@~2.23.4: - version "2.23.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz#8dceb1ed6b73e46e50ec9a5bb2411b645e7d3d97" - integrity sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ== +eslint-plugin-import@~2.25.2: + version "2.25.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz#b3b9160efddb702fc1636659e71ba1d10adbe9e9" + integrity sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g== dependencies: - array-includes "^3.1.3" - array.prototype.flat "^1.2.4" + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" debug "^2.6.9" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.4" - eslint-module-utils "^2.6.1" - find-up "^2.0.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.0" has "^1.0.3" - is-core-module "^2.4.0" + is-core-module "^2.7.0" + is-glob "^4.0.3" minimatch "^3.0.4" - object.values "^1.1.3" - pkg-up "^2.0.0" - read-pkg-up "^3.0.0" + object.values "^1.1.5" resolve "^1.20.0" - tsconfig-paths "^3.9.0" + tsconfig-paths "^3.11.0" eslint-plugin-jsx-a11y@~6.4.1: version "6.4.1" @@ -4261,22 +4332,24 @@ eslint-plugin-promise@~5.1.0: resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-5.1.0.tgz#fb2188fb734e4557993733b41aa1a688f46c6f24" integrity sha512-NGmI6BH5L12pl7ScQHbg7tvtk4wPxxj8yPHH47NvSmMtFneC077PSeY3huFj06ZWZvtbfxSPt3RuOQD5XcR4ng== -eslint-plugin-react@~7.24.0: - version "7.24.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz#eadedfa351a6f36b490aa17f4fa9b14e842b9eb4" - integrity sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q== +eslint-plugin-react@~7.26.1: + version "7.26.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.26.1.tgz#41bcfe3e39e6a5ac040971c1af94437c80daa40e" + integrity sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ== dependencies: array-includes "^3.1.3" array.prototype.flatmap "^1.2.4" doctrine "^2.1.0" - has "^1.0.3" + estraverse "^5.2.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.0.4" object.entries "^1.1.4" object.fromentries "^2.0.4" + object.hasown "^1.0.0" object.values "^1.1.4" prop-types "^15.7.2" resolve "^2.0.0-next.3" + semver "^6.3.0" string.prototype.matchall "^4.0.5" eslint-scope@^4.0.3: @@ -4308,9 +4381,9 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3 integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== eslint@^2.7.0: version "2.13.1" @@ -4351,13 +4424,13 @@ eslint@^2.7.0: text-table "~0.2.0" user-home "^2.0.0" -eslint@^7.27.0: - version "7.30.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.30.0.tgz#6d34ab51aaa56112fd97166226c9a97f505474f8" - integrity sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg== +eslint@^7.32.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== dependencies: "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.2" + "@eslint/eslintrc" "^0.4.3" "@humanwhocodes/config-array" "^0.5.0" ajv "^6.10.0" chalk "^4.0.0" @@ -4467,14 +4540,14 @@ eventemitter3@^4.0.0: integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== eventsource@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" - integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== dependencies: original "^1.0.0" @@ -4486,11 +4559,6 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -4504,19 +4572,19 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" is-stream "^2.0.0" merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" strip-final-newline "^2.0.0" exif-js@^2.3.0: @@ -4554,17 +4622,17 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== +expect@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.3.1.tgz#d0f170b1f5c8a2009bab0beffd4bb94f043e38e7" + integrity sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg== dependencies: - "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" + "@jest/types" "^27.2.5" + ansi-styles "^5.0.0" + jest-get-type "^27.3.1" + jest-matcher-utils "^27.3.1" + jest-message-util "^27.3.1" + jest-regex-util "^27.0.6" express@^4.17.1: version "4.17.1" @@ -4654,9 +4722,9 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= faye-websocket@^0.11.3: - version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== dependencies: websocket-driver ">=0.5.1" @@ -4761,7 +4829,7 @@ find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-up@^2.0.0, find-up@^2.1.0: +find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= @@ -4812,14 +4880,9 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.1.tgz#bbef080d95fca6709362c73044a1634f7c6e7d05" - integrity sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg== - -flatten@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" - integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" + integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA== flush-write-stream@^1.0.0: version "1.1.1" @@ -4829,10 +4892,10 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@^1.0.0, follow-redirects@^1.10.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" - integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== +follow-redirects@^1.0.0, follow-redirects@^1.14.4: + version "1.14.4" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379" + integrity sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g== font-awesome@^4.7.0: version "4.7.0" @@ -4853,10 +4916,10 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= fragment-cache@^0.2.1: version "0.2.1" @@ -4933,7 +4996,7 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.1.2, fsevents@^2.3.2, fsevents@~2.3.2: +fsevents@^2.3.2, fsevents@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -4948,19 +5011,20 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= +gauge@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.1.tgz#4bea07bcde3782f06dced8950e51307aa0f4a346" + integrity sha512-6STz6KdQgxO4S/ko+AbjlFGGdGcknluoqU+79GOFCDqqyYj5OanQf9AjxwN0jCidtT+ziPMmPSt9E4hfQ0CwIQ== dependencies: - aproba "^1.0.3" + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" + string-width "^1.0.1 || ^2.0.0" + strip-ansi "^3.0.1 || ^4.0.0" + wide-align "^1.1.2" generate-function@^2.0.0: version "2.3.1" @@ -5007,12 +5071,18 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: - pump "^3.0.0" + call-bind "^1.0.2" + get-intrinsic "^1.1.1" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" @@ -5027,14 +5097,26 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@~7.1.1: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -5088,9 +5170,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.6.0, globals@^13.9.0: - version "13.10.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.10.0.tgz#60ba56c3ac2ca845cfbf4faeca727ad9dd204676" - integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g== + version "13.9.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" + integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== dependencies: type-fest "^0.20.2" @@ -5127,14 +5209,9 @@ gonzales-pe-sl@^4.2.3: minimist "1.1.x" graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== gzip-size@^6.0.0: version "6.0.0" @@ -5175,12 +5252,24 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.1, has-symbols@^1.0.2: +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== -has-unicode@^2.0.0: +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= @@ -5245,7 +5334,7 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== -history@^4.10.1, history@^4.7.2: +history@^4.10.1: version "4.10.1" resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== @@ -5257,6 +5346,17 @@ history@^4.10.1, history@^4.7.2: tiny-warning "^1.0.0" value-equal "^1.0.1" +history@^4.7.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/history/-/history-4.7.2.tgz#22b5c7f31633c5b8021c7f4a8a954ac139ee8d5b" + integrity sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA== + dependencies: + invariant "^2.2.1" + loose-envify "^1.2.0" + resolve-pathname "^2.2.0" + value-equal "^0.4.0" + warning "^3.0.0" + hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -5285,11 +5385,6 @@ homedir-polyfill@^1.0.1: dependencies: parse-passwd "^1.0.0" -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -5318,9 +5413,9 @@ html-encoding-sniffer@^2.0.1: whatwg-encoding "^1.0.5" html-entities@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== html-escaper@^2.0.0: version "2.0.2" @@ -5369,6 +5464,11 @@ http-link-header@^1.0.3: resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-1.0.3.tgz#abbc2cdc5e06dd7e196a4983adac08a2d085ec90" integrity sha512-nARK1wSKoBBrtcoESlHBx36c1Ln/gnbNQi1eB6MeTUefJIT3NvUOsV15bClga0k38f0q/kN5xxrGSDS3EFnm9w== +"http-parser-js@>=0.4.0 <0.4.11": + version "0.4.10" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= + http-parser-js@>=0.5.1: version "0.5.3" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" @@ -5415,10 +5515,10 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== iconv-lite@0.4.24: version "0.4.24" @@ -5438,9 +5538,9 @@ idb-keyval@^3.2.0: integrity sha512-slx8Q6oywCCSfKgPgL0sEsXtPVnSbTLWpyiDcu6msHOyKOLari1TD1qocXVCft80umnkk3/Qqh3lwoFt8T/BPQ== ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== iferr@^0.1.5: version "0.1.5" @@ -5457,10 +5557,10 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -immutable@^3.8.2: - version "3.8.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" - integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= +immutable@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23" + integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw== import-cwd@^2.0.0: version "2.1.0" @@ -5478,9 +5578,9 @@ import-fresh@^2.0.0: resolve-from "^3.0.0" import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -5562,9 +5662,9 @@ inherits@2.0.3: integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= ini@^1.3.4, ini@^1.3.5: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== inquirer@^0.12.0: version "0.12.0" @@ -5653,7 +5753,7 @@ intl@^1.2.5: resolved "https://registry.yarnpkg.com/intl/-/intl-1.2.5.tgz#82244a2190c4e419f8371f5aa34daa3420e2abde" integrity sha1-giRKIZDE5Bn4Nx9ao02qNCDiq94= -invariant@^2.1.1, invariant@^2.2.2, invariant@^2.2.4: +invariant@^2.1.1, invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -5700,11 +5800,9 @@ is-accessor-descriptor@^1.0.0: kind-of "^6.0.0" is-arguments@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== - dependencies: - call-bind "^1.0.0" + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== is-arrayish@^0.2.1: version "0.2.1" @@ -5742,24 +5840,15 @@ is-boolean-object@^1.1.0: dependencies: call-bind "^1.0.2" -is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== +is-callable@^1.1.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-ci@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.0.tgz#c7e7be3c9d8eef7d0fa144390bd1e4b88dc4c994" - integrity sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ== - dependencies: - ci-info "^3.1.1" +is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== is-color-stop@^1.0.0: version "1.1.0" @@ -5773,10 +5862,10 @@ is-color-stop@^1.0.0: rgb-regex "^1.0.1" rgba-regex "^1.0.0" -is-core-module@^2.2.0, is-core-module@^2.4.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" - integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== +is-core-module@^2.2.0, is-core-module@^2.7.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== dependencies: has "^1.0.3" @@ -5795,9 +5884,9 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" - integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== is-descriptor@^0.1.0: version "0.1.6" @@ -5822,11 +5911,6 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - is-electron@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-electron/-/is-electron-2.2.0.tgz#8943084f09e8b731b3a7a0298a7b5d56f6b7eef0" @@ -5878,10 +5962,10 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" @@ -5972,19 +6056,31 @@ is-property@^1.0.0, is-property@^1.0.2: resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ= -is-regex@^1.0.4, is-regex@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" - integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== +is-regex@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" + integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== + dependencies: + has-symbols "^1.0.1" + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" - has-symbols "^1.0.2" + has-tostringtag "^1.0.0" is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== +is-shared-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" + integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -5995,12 +6091,21 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== -is-string@^1.0.5, is-string@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" - integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" -is-symbol@^1.0.2, is-symbol@^1.0.3: +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-symbol@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== @@ -6017,6 +6122,13 @@ is-url@^1.2.4: resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== +is-weakref@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2" + integrity sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ== + dependencies: + call-bind "^1.0.0" + is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -6027,13 +6139,6 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -6102,143 +6207,164 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== +jest-changed-files@^27.3.0: + version "27.3.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.3.0.tgz#22a02cc2b34583fc66e443171dc271c0529d263c" + integrity sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg== dependencies: - "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" + "@jest/types" "^27.2.5" + execa "^5.0.0" + throat "^6.0.1" -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== +jest-circus@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.3.1.tgz#1679e74387cbbf0c6a8b42de963250a6469e0797" + integrity sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw== dependencies: - "@jest/core" "^26.6.3" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/environment" "^27.3.1" + "@jest/test-result" "^27.3.1" + "@jest/types" "^27.2.5" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^27.3.1" + is-generator-fn "^2.0.0" + jest-each "^27.3.1" + jest-matcher-utils "^27.3.1" + jest-message-util "^27.3.1" + jest-runtime "^27.3.1" + jest-snapshot "^27.3.1" + jest-util "^27.3.1" + pretty-format "^27.3.1" + slash "^3.0.0" + stack-utils "^2.0.3" + throat "^6.0.1" + +jest-cli@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.3.1.tgz#b576f9d146ba6643ce0a162d782b40152b6b1d16" + integrity sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q== + dependencies: + "@jest/core" "^27.3.1" + "@jest/test-result" "^27.3.1" + "@jest/types" "^27.2.5" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" + jest-config "^27.3.1" + jest-util "^27.3.1" + jest-validate "^27.3.1" prompts "^2.0.1" - yargs "^15.4.1" + yargs "^16.2.0" -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== +jest-config@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.3.1.tgz#cb3b7f6aaa8c0a7daad4f2b9573899ca7e09bbad" + integrity sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.3" - "@jest/types" "^26.6.2" - babel-jest "^26.6.3" + "@jest/test-sequencer" "^27.3.1" + "@jest/types" "^27.2.5" + babel-jest "^27.3.1" chalk "^4.0.0" + ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" + jest-circus "^27.3.1" + jest-environment-jsdom "^27.3.1" + jest-environment-node "^27.3.1" + jest-get-type "^27.3.1" + jest-jasmine2 "^27.3.1" + jest-regex-util "^27.0.6" + jest-resolve "^27.3.1" + jest-runner "^27.3.1" + jest-util "^27.3.1" + jest-validate "^27.3.1" + micromatch "^4.0.4" + pretty-format "^27.3.1" -jest-diff@^26.0.0, jest-diff@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== +jest-diff@^25.2.1: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" + integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== + dependencies: + chalk "^3.0.0" + diff-sequences "^25.2.6" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + +jest-diff@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.3.1.tgz#d2775fea15411f5f5aeda2a5e02c2f36440f6d55" + integrity sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ== dependencies: chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + diff-sequences "^27.0.6" + jest-get-type "^27.3.1" + pretty-format "^27.3.1" -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== +jest-docblock@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.6.tgz#cc78266acf7fe693ca462cbbda0ea4e639e4e5f3" + integrity sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA== dependencies: detect-newline "^3.0.0" -jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== +jest-each@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.3.1.tgz#14c56bb4f18dd18dc6bdd853919b5f16a17761ff" + integrity sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^27.2.5" chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" + jest-get-type "^27.3.1" + jest-util "^27.3.1" + pretty-format "^27.3.1" -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== +jest-environment-jsdom@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.3.1.tgz#63ac36d68f7a9303494df783494856222b57f73e" + integrity sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg== dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/environment" "^27.3.1" + "@jest/fake-timers" "^27.3.1" + "@jest/types" "^27.2.5" "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" + jest-mock "^27.3.0" + jest-util "^27.3.1" + jsdom "^16.6.0" -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== +jest-environment-node@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.3.1.tgz#af7d0eed04edafb740311b303f3fe7c8c27014bb" + integrity sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw== dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/environment" "^27.3.1" + "@jest/fake-timers" "^27.3.1" + "@jest/types" "^27.2.5" "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" + jest-mock "^27.3.0" + jest-util "^27.3.1" -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== +jest-get-type@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" + integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== +jest-get-type@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.3.1.tgz#a8a2b0a12b50169773099eee60a0e6dd11423eff" + integrity sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg== + +jest-haste-map@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.3.1.tgz#7656fbd64bf48bda904e759fc9d93e2c807353ee" + integrity sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg== dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - -jest-haste-map@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.0.6.tgz#4683a4e68f6ecaa74231679dca237279562c8dc7" - integrity sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w== - dependencies: - "@jest/types" "^27.0.6" + "@jest/types" "^27.2.5" "@types/graceful-fs" "^4.1.2" "@types/node" "*" anymatch "^3.0.3" @@ -6246,76 +6372,76 @@ jest-haste-map@^27.0.6: graceful-fs "^4.2.4" jest-regex-util "^27.0.6" jest-serializer "^27.0.6" - jest-util "^27.0.6" - jest-worker "^27.0.6" + jest-util "^27.3.1" + jest-worker "^27.3.1" micromatch "^4.0.4" walker "^1.0.7" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== +jest-jasmine2@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.3.1.tgz#df6d3d07c7dafc344feb43a0072a6f09458d32b0" + integrity sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/environment" "^27.3.1" + "@jest/source-map" "^27.0.6" + "@jest/test-result" "^27.3.1" + "@jest/types" "^27.2.5" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^26.6.2" + expect "^27.3.1" is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" + jest-each "^27.3.1" + jest-matcher-utils "^27.3.1" + jest-message-util "^27.3.1" + jest-runtime "^27.3.1" + jest-snapshot "^27.3.1" + jest-util "^27.3.1" + pretty-format "^27.3.1" + throat "^6.0.1" -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== +jest-leak-detector@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.3.1.tgz#7fb632c2992ef707a1e73286e1e704f9cc1772b2" + integrity sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg== dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + jest-get-type "^27.3.1" + pretty-format "^27.3.1" -jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== +jest-matcher-utils@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz#257ad61e54a6d4044e080d85dbdc4a08811e9c1c" + integrity sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w== dependencies: chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + jest-diff "^27.3.1" + jest-get-type "^27.3.1" + pretty-format "^27.3.1" -jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== +jest-message-util@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.3.1.tgz#f7c25688ad3410ab10bcb862bcfe3152345c6436" + integrity sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg== dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.2.5" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" + micromatch "^4.0.4" + pretty-format "^27.3.1" slash "^3.0.0" - stack-utils "^2.0.2" + stack-utils "^2.0.3" -jest-mock@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== +jest-mock@^27.3.0: + version "27.3.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.3.0.tgz#ddf0ec3cc3e68c8ccd489bef4d1f525571a1b867" + integrity sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^27.2.5" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -6323,105 +6449,95 @@ jest-pnp-resolver@^1.2.2: resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - jest-regex-util@^27.0.6: version "27.0.6" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz#02e112082935ae949ce5d13b2675db3d8c87d9c5" integrity sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ== -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== +jest-resolve-dependencies@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.3.1.tgz#85b99bdbdfa46e2c81c6228fc4c91076f624f6e2" + integrity sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A== dependencies: - "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" + "@jest/types" "^27.2.5" + jest-regex-util "^27.0.6" + jest-snapshot "^27.3.1" -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== +jest-resolve@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.3.1.tgz#0e5542172a1aa0270be6f66a65888647bdd74a3e" + integrity sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^27.2.5" chalk "^4.0.0" graceful-fs "^4.2.4" + jest-haste-map "^27.3.1" jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" + jest-util "^27.3.1" + jest-validate "^27.3.1" + resolve "^1.20.0" + resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== +jest-runner@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.3.1.tgz#1d594dcbf3bd8600a7e839e790384559eaf96e3e" + integrity sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww== dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^27.3.1" + "@jest/environment" "^27.3.1" + "@jest/test-result" "^27.3.1" + "@jest/transform" "^27.3.1" + "@jest/types" "^27.2.5" "@types/node" "*" chalk "^4.0.0" - emittery "^0.7.1" + emittery "^0.8.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" + jest-docblock "^27.0.6" + jest-environment-jsdom "^27.3.1" + jest-environment-node "^27.3.1" + jest-haste-map "^27.3.1" + jest-leak-detector "^27.3.1" + jest-message-util "^27.3.1" + jest-resolve "^27.3.1" + jest-runtime "^27.3.1" + jest-util "^27.3.1" + jest-worker "^27.3.1" source-map-support "^0.5.6" - throat "^5.0.0" + throat "^6.0.1" -jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== +jest-runtime@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.3.1.tgz#80fa32eb85fe5af575865ddf379874777ee993d7" + integrity sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg== dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/globals" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/yargs" "^15.0.0" + "@jest/console" "^27.3.1" + "@jest/environment" "^27.3.1" + "@jest/globals" "^27.3.1" + "@jest/source-map" "^27.0.6" + "@jest/test-result" "^27.3.1" + "@jest/transform" "^27.3.1" + "@jest/types" "^27.2.5" + "@types/yargs" "^16.0.0" chalk "^4.0.0" - cjs-module-lexer "^0.6.0" + cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" + execa "^5.0.0" exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" + jest-haste-map "^27.3.1" + jest-message-util "^27.3.1" + jest-mock "^27.3.0" + jest-regex-util "^27.0.6" + jest-resolve "^27.3.1" + jest-snapshot "^27.3.1" + jest-util "^27.3.1" + jest-validate "^27.3.1" slash "^3.0.0" strip-bom "^4.0.0" - yargs "^15.4.1" - -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" + yargs "^16.2.0" jest-serializer@^27.0.6: version "27.0.6" @@ -6431,119 +6547,99 @@ jest-serializer@^27.0.6: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== +jest-snapshot@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.3.1.tgz#1da5c0712a252d70917d46c037054f5918c49ee4" + integrity sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg== dependencies: + "@babel/core" "^7.7.2" + "@babel/generator" "^7.7.2" + "@babel/parser" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/types" "^26.6.2" + "@jest/transform" "^27.3.1" + "@jest/types" "^27.2.5" "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.0.0" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^26.6.2" + expect "^27.3.1" graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" + jest-diff "^27.3.1" + jest-get-type "^27.3.1" + jest-haste-map "^27.3.1" + jest-matcher-utils "^27.3.1" + jest-message-util "^27.3.1" + jest-resolve "^27.3.1" + jest-util "^27.3.1" natural-compare "^1.4.0" - pretty-format "^26.6.2" + pretty-format "^27.3.1" semver "^7.3.2" -jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== +jest-util@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.3.1.tgz#a58cdc7b6c8a560caac9ed6bdfc4e4ff23f80429" + integrity sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^27.2.5" "@types/node" "*" chalk "^4.0.0" + ci-info "^3.2.0" graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - -jest-util@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.6.tgz#e8e04eec159de2f4d5f57f795df9cdc091e50297" - integrity sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ== - dependencies: - "@jest/types" "^27.0.6" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^3.0.0" picomatch "^2.2.3" -jest-validate@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" - integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== +jest-validate@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.3.1.tgz#3a395d61a19cd13ae9054af8cdaf299116ef8a24" + integrity sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q== dependencies: - "@jest/types" "^26.6.2" - camelcase "^6.0.0" + "@jest/types" "^27.2.5" + camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^26.3.0" + jest-get-type "^27.3.1" leven "^3.1.0" - pretty-format "^26.6.2" + pretty-format "^27.3.1" -jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== +jest-watcher@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.3.1.tgz#ba5e0bc6aa843612b54ddb7f009d1cbff7e05f3e" + integrity sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA== dependencies: - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/test-result" "^27.3.1" + "@jest/types" "^27.2.5" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^26.6.2" + jest-util "^27.3.1" string-length "^4.0.1" -jest-worker@^26.5.0, jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== +jest-worker@^26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.5.0.tgz#87deee86dbbc5f98d9919e0dadf2c40e3152fa30" + integrity sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.6.tgz#a5fdb1e14ad34eb228cfe162d9f729cdbfa28aed" - integrity sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA== +jest-worker@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.3.1.tgz#0def7feae5b8042be38479799aeb7b5facac24b2" + integrity sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" - integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== +jest@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.3.1.tgz#b5bab64e8f56b6f7e275ba1836898b0d9f1e5c8a" + integrity sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng== dependencies: - "@jest/core" "^26.6.3" + "@jest/core" "^27.3.1" import-local "^3.0.2" - jest-cli "^26.6.3" - -jpeg-autorotate@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/jpeg-autorotate/-/jpeg-autorotate-7.1.1.tgz#c57905c6afd3b54373a6a1d0249ed6e07f7b043b" - integrity sha512-ewTZTG/QWOM0D5h/yKcQ3QgyrnQYsr3qmcS+bqoAwgQAY1KBa31aJ+q+FlElaxo/rSYqfF1ixf+8EIgluBkgTg== - dependencies: - colors "^1.4.0" - glob "^7.1.6" - jpeg-js "^0.4.2" - piexifjs "^1.0.6" - yargs-parser "^20.2.1" - -jpeg-js@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.3.tgz#6158e09f1983ad773813704be80680550eff977b" - integrity sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q== + jest-cli "^27.3.1" js-base64@^2.1.9: version "2.6.4" @@ -6570,7 +6666,7 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsdom@^16.4.0: +jsdom@^16.6.0: version "16.6.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.6.0.tgz#f79b3786682065492a3da6a60a4695da983805ac" integrity sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg== @@ -6618,11 +6714,6 @@ json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -6662,10 +6753,10 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.2, json5@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== dependencies: minimist "^1.2.5" @@ -6694,12 +6785,12 @@ jsonpointer@^4.0.0: integrity sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg== "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" - integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz#642f1d7b88aa6d7eb9d8f2210e166478444fa891" + integrity sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA== dependencies: - array-includes "^3.1.2" - object.assign "^4.1.2" + array-includes "^3.1.1" + object.assign "^4.1.1" keycode@^2.1.7: version "2.2.0" @@ -6737,9 +6828,9 @@ known-css-properties@^0.3.0: integrity sha512-QMQcnKAiQccfQTqtBh/qwquGZ2XK/DXND1jrcN9M8gMMy99Gwla7GQjndVUsEqIaRyP6bsFRuhwRj5poafBGJQ== language-subtag-registry@~0.3.2: - version "0.3.21" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" - integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== + version "0.3.20" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz#a00a37121894f224f763268e431c55556b0c0755" + integrity sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg== language-tags@^1.0.5: version "1.0.5" @@ -6774,16 +6865,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" @@ -6907,6 +6988,11 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" @@ -6923,9 +7009,9 @@ lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.1 integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== loglevel@^1.6.8: - version "1.7.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" - integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== + version "1.7.0" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" + integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" @@ -7006,25 +7092,25 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - mdn-data@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== +mdn-data@2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978" + integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= memoize-one@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" - integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== + version "5.1.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" + integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== memory-fs@^0.4.1: version "0.4.1" @@ -7081,7 +7167,7 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== @@ -7097,27 +7183,32 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.48.0, "mime-db@>= 1.43.0 < 2": - version "1.48.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" - integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== +mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.24: - version "2.1.31" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" - integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== dependencies: - mime-db "1.48.0" + mime-db "1.44.0" mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.3.1, mime@^2.4.4: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== +mime@^2.3.1: + version "2.4.7" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.7.tgz#962aed9be0ed19c91fd7dc2ece5d7f4e89a90d74" + integrity sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA== + +mime@^2.4.4: + version "2.4.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== mimic-fn@^2.1.0: version "2.1.0" @@ -7129,7 +7220,7 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-css-extract-plugin@^1.6.0: +mini-css-extract-plugin@^1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz#83172b4fd812f8fc4a09d6f6d16f924f53990ca8" integrity sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q== @@ -7160,7 +7251,7 @@ minimist@1.1.x: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag= -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -7264,16 +7355,11 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@2.1.2: +ms@2.1.2, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -7293,9 +7379,9 @@ mute-stream@0.0.5: integrity sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA= nan@^2.12.1: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== nanoid@^3.1.23: version "3.1.23" @@ -7354,10 +7440,10 @@ node-forge@^0.10.0: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== -node-gyp-build@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" - integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== +node-gyp-build@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" + integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== node-int64@^0.4.0: version "0.4.0" @@ -7398,32 +7484,15 @@ node-modules-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -node-notifier@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" - integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - node-releases@^1.1.71: - version "1.1.73" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" - integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== + version "1.1.72" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" + integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" +node-releases@^1.1.77: + version "1.1.77" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" + integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== normalize-path@^2.1.1: version "2.1.1" @@ -7454,22 +7523,22 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0: +npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" -npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" nth-check@^1.0.2: version "1.0.2" @@ -7512,18 +7581,23 @@ object-fit-images@^3.2.3: resolved "https://registry.yarnpkg.com/object-fit-images/-/object-fit-images-3.2.4.tgz#6c299d38fdf207746e5d2d46c2877f6f25d15b52" integrity sha512-G+7LzpYfTfqUyrZlfrou/PLLLAPNC52FTy5y1CBywX+1/FkxIloOyQXBmZ3Zxa2AWO+lMF0JTuvqbr7G5e5CWg== -object-inspect@^1.10.3, object-inspect@^1.9.0: +object-inspect@^1.11.0: version "1.11.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== +object-inspect@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + version "1.1.3" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.3.tgz#2e3b9e65560137455ee3bd62aec4d90a2ea1cc81" + integrity sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg== dependencies: - call-bind "^1.0.2" define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -7537,7 +7611,17 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0, object.assign@^4.1.2: +object.assign@^4.1.0, object.assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" + integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.18.0-next.0" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.assign@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== @@ -7567,13 +7651,20 @@ object.fromentries@^2.0.4: has "^1.0.3" object.getownpropertydescriptors@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== dependencies: - call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" + es-abstract "^1.17.0-next.1" + +object.hasown@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.0.0.tgz#bdbade33cfacfb25d7f26ae2b6cb870bf99905c2" + integrity sha512-qYMF2CLIjxxLGleeM0jrcB4kiv3loGVAjKQKvH8pSU/i2VcRRvUNmxbD+nEMmrXRfORhuVJuH8OtSYCZoue3zA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.18.1" object.pick@^1.3.0: version "1.3.0" @@ -7582,14 +7673,14 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.0, object.values@^1.1.3, object.values@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" - integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== +object.values@^1.1.0, object.values@^1.1.4, object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.2" + es-abstract "^1.19.1" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" @@ -7631,7 +7722,7 @@ onetime@^1.0.0: resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= -onetime@^5.1.0: +onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -7696,11 +7787,6 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -7721,11 +7807,11 @@ p-limit@^2.0.0, p-limit@^2.2.0: p-try "^2.0.0" p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + version "3.0.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" + integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== dependencies: - yocto-queue "^0.1.0" + p-try "^2.0.0" p-locate@^2.0.0: version "2.0.0" @@ -7838,13 +7924,13 @@ parse-json@^4.0.0: json-parse-better-errors "^1.0.1" parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + version "5.0.1" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.1.tgz#7cfe35c1ccd641bce3981467e6c2ece61b3b3878" + integrity sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" + json-parse-better-errors "^1.0.1" lines-and-columns "^1.1.6" parse-passwd@^1.0.0: @@ -7923,28 +8009,21 @@ path-to-regexp@0.1.7: integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + version "1.7.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30= dependencies: isarray "0.0.1" -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -7962,25 +8041,25 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -pg-connection-string@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34" - integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ== +pg-connection-string@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.4.0.tgz#c979922eb47832999a204da5dbe1ebf2341b6a10" + integrity sha512-3iBXuv7XKvxeMrIgym7njT+HlZkwZqqGX4Bu9cci8xHZNT+Um1gWKqCsAzcC0d95rcKMU5WBg6YRUcHyV0HZKQ== pg-int8@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== -pg-pool@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.3.0.tgz#12d5c7f65ea18a6e99ca9811bd18129071e562fc" - integrity sha512-0O5huCql8/D6PIRFAlmccjphLYWC+JIzvUhSzXSpGaf+tjTZc4nn+Lr7mLXBbFJfvwbP0ywDv73EiaBsxn7zdg== +pg-pool@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.2.2.tgz#a560e433443ed4ad946b84d774b3f22452694dff" + integrity sha512-ORJoFxAlmmros8igi608iVEbQNNZlp89diFVx6yV5v+ehmpMY9sK6QgpmgoXbmkNaBAx8cOOZh9g80kJv1ooyA== -pg-protocol@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.5.0.tgz#b5dd452257314565e2d54ab3c132adc46565a6a0" - integrity sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ== +pg-protocol@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.4.0.tgz#43a71a92f6fe3ac559952555aa3335c8cb4908be" + integrity sha512-El+aXWcwG/8wuFICMQjM5ZSAm6OWiJicFdNYo+VY3QP+8vI4SvLIWVe51PppTzMhikUJR+PsyIFKqfdXPz/yxA== pg-types@^2.1.0: version "2.2.0" @@ -7994,15 +8073,15 @@ pg-types@^2.1.0: postgres-interval "^1.1.0" pg@^8.5.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.6.0.tgz#e222296b0b079b280cce106ea991703335487db2" - integrity sha512-qNS9u61lqljTDFvmk/N66EeGq3n6Ujzj0FFyNMGQr6XuEv4tgNTXvJQTfJdcvGit5p5/DWPu+wj920hAJFI+QQ== + version "8.5.1" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.5.1.tgz#34dcb15f6db4a29c702bf5031ef2e1e25a06a120" + integrity sha512-9wm3yX9lCfjvA98ybCyw2pADUivyNWT/yIP4ZcDVpMN0og70BUWYEGXPCTAQdGTAqnytfRADb7NERrY1qxhIqw== dependencies: buffer-writer "2.0.0" packet-reader "1.0.0" - pg-connection-string "^2.5.0" - pg-pool "^3.3.0" - pg-protocol "^1.5.0" + pg-connection-string "^2.4.0" + pg-pool "^3.2.2" + pg-protocol "^1.4.0" pg-types "^2.1.0" pgpass "1.x" @@ -8013,26 +8092,26 @@ pgpass@1.x: dependencies: split2 "^3.1.1" -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: +picocolors@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" + integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +picomatch@^2.2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== -piexifjs@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/piexifjs/-/piexifjs-1.0.6.tgz#883811d73f447218d0d06e9ed7866d04533e59e0" - integrity sha512-0wVyH0cKohzBQ5Gi2V1BuxYpxWfxF3cSqfFXfPIpl5tl9XLS5z4ogqhUCD20AbHi0h9aJkqXNJnkVev6gwh2ag== - -pify@^2.0.0, pify@^2.3.0: +pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -8078,13 +8157,6 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" @@ -8104,65 +8176,15 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -postcss-attribute-case-insensitive@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" - integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^6.0.2" - postcss-calc@^7.0.1: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" - integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== + version "7.0.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.4.tgz#5e177ddb417341e6d4a193c5d9fd8ada79094f8b" + integrity sha512-0I79VRAd1UTkaHzY9w83P39YGO/M3bG7/tNLrHGEunBolfoGM0hSjrGvjoeaj0JE/zIw5GsI2KZ0UwDJqv5hjw== dependencies: postcss "^7.0.27" postcss-selector-parser "^6.0.2" postcss-value-parser "^4.0.2" -postcss-color-functional-notation@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" - integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-gray@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" - integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-color-hex-alpha@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" - integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== - dependencies: - postcss "^7.0.14" - postcss-values-parser "^2.0.1" - -postcss-color-mod-function@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" - integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-rebeccapurple@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" - integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - postcss-colormin@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" @@ -8182,37 +8204,6 @@ postcss-convert-values@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-custom-media@^7.0.8: - version "7.0.8" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" - integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== - dependencies: - postcss "^7.0.14" - -postcss-custom-properties@^8.0.11: - version "8.0.11" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" - integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== - dependencies: - postcss "^7.0.17" - postcss-values-parser "^2.0.1" - -postcss-custom-selectors@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" - integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-dir-pseudo-class@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" - integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - postcss-discard-comments@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" @@ -8241,88 +8232,6 @@ postcss-discard-overridden@^4.0.1: dependencies: postcss "^7.0.0" -postcss-double-position-gradients@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" - integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== - dependencies: - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-env-function@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" - integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-flexbugs-fixes@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz#2028e145313074fc9abe276cb7ca14e5401eb49d" - integrity sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ== - -postcss-focus-visible@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" - integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== - dependencies: - postcss "^7.0.2" - -postcss-focus-within@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" - integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== - dependencies: - postcss "^7.0.2" - -postcss-font-variant@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz#42d4c0ab30894f60f98b17561eb5c0321f502641" - integrity sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA== - dependencies: - postcss "^7.0.2" - -postcss-gap-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" - integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== - dependencies: - postcss "^7.0.2" - -postcss-image-set-function@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" - integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-import@^14.0.2: - version "14.0.2" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.0.2.tgz#60eff77e6be92e7b67fe469ec797d9424cae1aa1" - integrity sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-initial@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.4.tgz#9d32069a10531fe2ecafa0b6ac750ee0bc7efc53" - integrity sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg== - dependencies: - postcss "^7.0.2" - -postcss-lab-function@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" - integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - postcss-load-config@^2.0.0: version "2.1.2" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" @@ -8341,20 +8250,6 @@ postcss-loader@^3.0.0: postcss-load-config "^2.0.0" schema-utils "^1.0.0" -postcss-logical@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" - integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== - dependencies: - postcss "^7.0.2" - -postcss-media-minmax@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" - integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== - dependencies: - postcss "^7.0.2" - postcss-merge-longhand@^4.0.11: version "4.0.11" resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" @@ -8445,13 +8340,6 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-nesting@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" - integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== - dependencies: - postcss "^7.0.2" - postcss-normalize-charset@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" @@ -8551,79 +8439,6 @@ postcss-ordered-values@^4.1.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-overflow-shorthand@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" - integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== - dependencies: - postcss "^7.0.2" - -postcss-page-break@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" - integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== - dependencies: - postcss "^7.0.2" - -postcss-place@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" - integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-preset-env@^6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" - integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== - dependencies: - autoprefixer "^9.6.1" - browserslist "^4.6.4" - caniuse-lite "^1.0.30000981" - css-blank-pseudo "^0.1.4" - css-has-pseudo "^0.10.0" - css-prefers-color-scheme "^3.1.1" - cssdb "^4.4.0" - postcss "^7.0.17" - postcss-attribute-case-insensitive "^4.0.1" - postcss-color-functional-notation "^2.0.1" - postcss-color-gray "^5.0.0" - postcss-color-hex-alpha "^5.0.3" - postcss-color-mod-function "^3.0.3" - postcss-color-rebeccapurple "^4.0.1" - postcss-custom-media "^7.0.8" - postcss-custom-properties "^8.0.11" - postcss-custom-selectors "^5.1.2" - postcss-dir-pseudo-class "^5.0.0" - postcss-double-position-gradients "^1.0.0" - postcss-env-function "^2.0.2" - postcss-focus-visible "^4.0.0" - postcss-focus-within "^3.0.0" - postcss-font-variant "^4.0.0" - postcss-gap-properties "^2.0.0" - postcss-image-set-function "^3.0.1" - postcss-initial "^3.0.0" - postcss-lab-function "^2.0.1" - postcss-logical "^3.0.0" - postcss-media-minmax "^4.0.0" - postcss-nesting "^7.0.0" - postcss-overflow-shorthand "^2.0.0" - postcss-page-break "^2.0.0" - postcss-place "^4.0.1" - postcss-pseudo-class-any-link "^6.0.0" - postcss-replace-overflow-wrap "^3.0.0" - postcss-selector-matches "^4.0.0" - postcss-selector-not "^4.0.0" - -postcss-pseudo-class-any-link@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" - integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - postcss-reduce-initial@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" @@ -8644,29 +8459,6 @@ postcss-reduce-transforms@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-replace-overflow-wrap@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" - integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== - dependencies: - postcss "^7.0.2" - -postcss-selector-matches@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" - integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== - dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" - -postcss-selector-not@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz#263016eef1cf219e0ade9a913780fc1f48204cbf" - integrity sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ== - dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" - postcss-selector-parser@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" @@ -8676,21 +8468,23 @@ postcss-selector-parser@^3.0.0: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" - integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== +postcss-selector-parser@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== dependencies: - cssesc "^2.0.0" + cssesc "^3.0.0" indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.6" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" - integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== +postcss-selector-parser@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" + integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== dependencies: cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" util-deprecate "^1.0.2" postcss-svgo@^4.0.3: @@ -8716,20 +8510,11 @@ postcss-value-parser@^3.0.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" - integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - postcss@^5.0.16: version "5.2.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" @@ -8740,19 +8525,19 @@ postcss@^5.0.16: source-map "^0.5.6" supports-color "^3.2.3" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.36" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" - integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.27, postcss@^7.0.32: + version "7.0.32" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" + integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== dependencies: chalk "^2.4.2" source-map "^0.6.1" supports-color "^6.1.0" -postcss@^8.2.15, postcss@^8.3.0: - version "8.3.5" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.5.tgz#982216b113412bc20a86289e91eb994952a5b709" - integrity sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA== +postcss@^8.2.15: + version "8.3.0" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.0.tgz#b1a713f6172ca427e3f05ef1303de8b65683325f" + integrity sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ== dependencies: colorette "^1.2.2" nanoid "^3.1.23" @@ -8790,14 +8575,34 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -pretty-format@^26.0.0, pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== +pretty-format@^25.2.1, pretty-format@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" + integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^25.5.0" ansi-regex "^5.0.0" ansi-styles "^4.0.0" + react-is "^16.12.0" + +pretty-format@^27.0.2: + version "27.0.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.2.tgz#9283ff8c4f581b186b2d4da461617143dca478a4" + integrity sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig== + dependencies: + "@jest/types" "^27.0.2" + ansi-regex "^5.0.0" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +pretty-format@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.3.1.tgz#7e9486365ccdd4a502061fa761d3ab9ca1b78df5" + integrity sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA== + dependencies: + "@jest/types" "^27.2.5" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" react-is "^17.0.1" process-nextick-args@~2.0.0: @@ -8825,22 +8630,22 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -promise.prototype.finally@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.2.tgz#b8af89160c9c673cefe3b4c4435b53cfd0287067" - integrity sha512-A2HuJWl2opDH0EafgdjwEw7HysI8ff/n4lW4QEVBCUXFk9QeGecBWv0Deph0UmLe3tTNYegz8MOjsVuE6SMoJA== +promise.prototype.finally@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.3.tgz#d3186e58fcf4df1682a150f934ccc27b7893389c" + integrity sha512-EXRF3fC9/0gz4qkt/f5EP5iW4kj9oFpBICNpCNOb/52+8nlHIX07FPLbi/q4qYBQ1xZqivMzTpNQSnArVASolQ== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0-next.0" - function-bind "^1.1.1" + es-abstract "^1.19.1" prompts@^2.0.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" - integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== + version "2.3.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" + integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== dependencies: kleur "^3.0.3" - sisteransi "^1.0.5" + sisteransi "^1.0.4" prop-types-extra@^1.0.1: version "1.1.1" @@ -8860,11 +8665,11 @@ prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, react-is "^16.8.1" proxy-addr@~2.0.5: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== dependencies: - forwarded "0.2.0" + forwarded "~0.1.2" ipaddr.js "1.9.1" prr@~1.0.1: @@ -9045,13 +8850,6 @@ react-infinite-scroller@^1.0.12: dependencies: prop-types "^15.5.8" -react-input-autosize@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-3.0.0.tgz#6b5898c790d4478d69420b55441fcc31d5c50a85" - integrity sha512-nL9uS7jEs/zu8sqwFE5MAPx6pPkNAriACQ2rGLlqmKr2sPGtN7TXTyDdQt4lbNXVx7Uzadb40x8qotIuru6Rhg== - dependencies: - prop-types "^15.5.8" - react-intl-translations-manager@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/react-intl-translations-manager/-/react-intl-translations-manager-5.0.3.tgz#aee010ecf35975673e033ca5d7d3f4147894324d" @@ -9073,15 +8871,15 @@ react-intl@^2.9.0: intl-relativeformat "^2.1.0" invariant "^2.1.1" -react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.6: +react-is@^16.12.0, react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.6: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" + integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: version "3.0.4" @@ -9126,17 +8924,17 @@ react-overlays@^0.9.3: warning "^3.0.0" react-redux-loading-bar@^4.0.8: - version "4.6.0" - resolved "https://registry.yarnpkg.com/react-redux-loading-bar/-/react-redux-loading-bar-4.6.0.tgz#034a1771a97b43e7d835e67d2ba717ca378279f4" - integrity sha512-ehokhN6eq/UXMr0udqoKuvpEUel1q3T5cWGkwKy2Xrt528QeEtjreixCfrSndN+DNr/5yxxnz0ZEhZt4irZEZg== + version "4.0.8" + resolved "https://registry.yarnpkg.com/react-redux-loading-bar/-/react-redux-loading-bar-4.0.8.tgz#e84d59d1517b79f53b0f39c8ddb40682af648c1b" + integrity sha512-BpR1tlYrYKFtGhxa7nAKc0dpcV33ZgXJ/jKNLpDDaxu2/cCxbkWQt9YlWT+VLw1x/7qyNYY4DH48bZdtmciSpg== dependencies: prop-types "^15.6.2" react-lifecycles-compat "^3.0.2" -react-redux@^7.2.4: - version "7.2.4" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.4.tgz#1ebb474032b72d806de2e0519cd07761e222e225" - integrity sha512-hOQ5eOSkEJEXdpIKbnRyl04LhaWabkDPV+Ix97wqQX3T3d2NQ8DUblNXXtNMavc7DpswyQM6xfaN4HQDKNY2JA== +react-redux@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.5.tgz#213c1b05aa1187d9c940ddfc0b29450957f6a3b8" + integrity sha512-Dt29bNyBsbQaysp6s/dN0gUodcq+dVKKER8Qv82UrpeygwYeX1raTtil7O/fftw/rFqzaf6gJhDZRkkZnn6bjg== dependencies: "@babel/runtime" "^7.12.1" "@types/react-redux" "^7.1.16" @@ -9178,17 +8976,17 @@ react-router@^4.3.1: prop-types "^15.6.1" warning "^4.0.1" -react-select@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-4.3.1.tgz#389fc07c9bc7cf7d3c377b7a05ea18cd7399cb81" - integrity sha512-HBBd0dYwkF5aZk1zP81Wx5UsLIIT2lSvAY2JiJo199LjoLHoivjn9//KsmvQMEFGNhe58xyuOITjfxKCcGc62Q== +react-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.1.0.tgz#ac384c8e25ba6f03126026192b2bdad0f53fbf50" + integrity sha512-SkEBD1AYsSXrIdNj5HBt7+Ehe+jxdiB448J0atJqR6lE3l/GcFlRf4JYB3NlHe/02jrW4AnIQLo1t0IqWrxXOw== dependencies: "@babel/runtime" "^7.12.0" "@emotion/cache" "^11.4.0" "@emotion/react" "^11.1.1" + "@types/react-transition-group" "^4.4.0" memoize-one "^5.0.0" prop-types "^15.6.0" - react-input-autosize "^3.0.0" react-transition-group "^4.3.0" react-sparklines@^1.7.0: @@ -9239,7 +9037,7 @@ react-test-renderer@^16.14.0: react-is "^16.8.6" scheduler "^0.19.1" -react-textarea-autosize@^8.3.2: +react-textarea-autosize@^8.3.3: version "8.3.3" resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz#f70913945369da453fd554c168f6baacd1fa04d8" integrity sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ== @@ -9266,9 +9064,9 @@ react-transition-group@^2.2.1: react-lifecycles-compat "^3.0.4" react-transition-group@^4.3.0: - version "4.4.2" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470" - integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg== + version "4.3.0" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.3.0.tgz#fea832e386cf8796c58b61874a3319704f5ce683" + integrity sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw== dependencies: "@babel/runtime" "^7.5.5" dom-helpers "^5.0.1" @@ -9284,50 +9082,7 @@ react@^16.14.0: object-assign "^4.1.1" prop-types "^15.6.2" -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= - dependencies: - pify "^2.3.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -9358,10 +9113,10 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== dependencies: picomatch "^2.2.1" @@ -9419,10 +9174,10 @@ redux-thunk@^2.2.0: resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== -redux@^4.0.0, redux@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.0.tgz#eb049679f2f523c379f1aff345c8612f294c88d4" - integrity sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g== +redux@^4.0.0, redux@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.1.tgz#76f1c439bb42043f985fbd9bf21990e60bd67f47" + integrity sha512-hZQZdDEM25UY2P493kPYuKqviVwZ58lEmGQNeQ+gXa+U0gYPUBf7NKYazbe3m+bs/DzM/ahN12DbF+NG8i0CWw== dependencies: "@babel/runtime" "^7.9.2" @@ -9434,9 +9189,9 @@ regenerate-unicode-properties@^8.2.0: regenerate "^1.4.0" regenerate@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== regenerator-runtime@^0.11.0: version "0.11.1" @@ -9448,10 +9203,10 @@ regenerator-runtime@^0.12.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== -regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== +regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== regenerator-transform@^0.14.2: version "0.14.5" @@ -9468,7 +9223,15 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexp.prototype.flags@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== @@ -9477,9 +9240,9 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: define-properties "^1.1.3" regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== regexpu-core@^4.7.1: version "4.7.1" @@ -9499,9 +9262,9 @@ regjsgen@^0.5.1: integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== regjsparser@^0.6.4: - version "0.6.9" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" - integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== dependencies: jsesc "~0.5.0" @@ -9516,9 +9279,9 @@ remove-trailing-separator@^1.0.1: integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== repeat-string@^1.6.1: version "1.6.1" @@ -9610,6 +9373,11 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== +resolve-pathname@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" + integrity sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg== + resolve-pathname@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" @@ -9620,7 +9388,12 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.20.0: +resolve.exports@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + +resolve@^1.12.0, resolve@^1.14.2, resolve@^1.20.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -9693,11 +9466,6 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - run-async@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" @@ -9739,21 +9507,6 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - sass-lint@^1.13.1: version "1.13.1" resolved "https://registry.yarnpkg.com/sass-lint/-/sass-lint-1.13.1.tgz#5fd2b2792e9215272335eb0f0dc607f61e8acc8f" @@ -9785,10 +9538,10 @@ sass-loader@^10.2.0: schema-utils "^3.0.0" semver "^7.3.2" -sass@^1.34.0: - version "1.35.2" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.35.2.tgz#b732314fcdaf7ef8d0f1698698adc378043cb821" - integrity sha512-jhO5KAR+AMxCEwIH3v+4zbB2WB0z67V1X0jbapfVwQQdjHZUGUyukpnoM6+iCMfsIUC016w9OPKQ5jrNOS9uXw== +sass@^1.43.2: + version "1.43.2" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.43.2.tgz#c02501520c624ad6622529a8b3724eb08da82d65" + integrity sha512-DncYhjl3wBaPMMJR0kIUaH3sF536rVrOcqqVGmTZHQRRzj7LQlyGV7Mb8aCKFyILMr5VsPHwRYtyKpnKYlmQSQ== dependencies: chokidar ">=3.0.0 <4.0.0" @@ -9831,11 +9584,11 @@ schema-utils@^2.2.0, schema-utils@^2.6.5: ajv-keywords "^3.5.2" schema-utils@^3.0, schema-utils@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.0.tgz#95986eb604f66daadeed56e379bfe7a7f963cdb9" - integrity sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w== + version "3.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" + integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== dependencies: - "@types/json-schema" "^7.0.7" + "@types/json-schema" "^7.0.6" ajv "^6.12.5" ajv-keywords "^3.5.2" @@ -9853,22 +9606,22 @@ select-hose@^2.0.0: integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= selfsigned@^1.10.8: - version "1.10.11" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9" - integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== dependencies: node-forge "^0.10.0" -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - semver@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== +semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -9900,12 +9653,10 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== serialize-javascript@^5.0.1: version "5.0.1" @@ -9937,7 +9688,7 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -10016,11 +9767,6 @@ shelljs@^0.6.0: resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8" integrity sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg= -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -10030,7 +9776,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== @@ -10043,15 +9789,15 @@ simple-swizzle@^0.2.2: is-arrayish "^0.3.1" sirv@^1.0.7: - version "1.0.12" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.12.tgz#d816c882b35489b3c63290e2f455ae3eccd5f652" - integrity sha512-+jQoCxndz7L2tqQL4ZyzfDhky0W/4ZJip3XoOuxyQWnAwMxindLl3Xv1qT4x1YX/re0leShvTm8Uk0kQspGhBg== + version "1.0.10" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.10.tgz#3e591f5a9ae2520f50d5830f5fae38d97e7be194" + integrity sha512-H5EZCoZaggEUQy8ocKsF7WAToGuZhjJlLvM3XOef46CbdIgbNeQ1p32N1PCuCjkVYwrAVOSMacN6CXXgIzuspg== dependencies: - "@polka/url" "^1.0.0-next.15" + "@polka/url" "^1.0.0-next.9" mime "^2.3.1" totalist "^1.0.0" -sisteransi@^1.0.5: +sisteransi@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== @@ -10111,16 +9857,16 @@ snapdragon@^0.8.1: use "^3.1.0" sockjs-client@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" - integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== + version "1.5.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.0.tgz#2f8ff5d4b659e0d092f7aba0b7c386bd2aa20add" + integrity sha512-8Dt3BDi4FYNrCFGTL/HtwVzkARrENdwOUf1ZoW/9p3M8lZdFT35jVdrHza+qgxuG9H3/shR4cuX/X9umUrjP8Q== dependencies: debug "^3.2.6" eventsource "^1.0.7" faye-websocket "^0.11.3" inherits "^2.0.4" json3 "^3.3.3" - url-parse "^1.5.1" + url-parse "^1.4.7" sockjs@^0.3.21: version "0.3.21" @@ -10169,9 +9915,9 @@ source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.1 source-map "^0.6.0" source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= source-map@0.5.6: version "0.5.6" @@ -10193,32 +9939,6 @@ source-map@^0.7.3, source-map@~0.7.2: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" - integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== - spdy-transport@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" @@ -10268,10 +9988,10 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== +ssri@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" + integrity sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA== dependencies: minipass "^3.1.1" @@ -10287,7 +10007,7 @@ stack-generator@^2.0.5: dependencies: stackframe "^1.1.1" -stack-utils@^2.0.2: +stack-utils@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== @@ -10362,9 +10082,9 @@ stream-shift@^1.0.0: integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + version "4.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" + integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== dependencies: char-regex "^1.0.2" strip-ansi "^6.0.0" @@ -10378,7 +10098,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0: +"string-width@^1.0.1 || ^2.0.0", "string-width@^1.0.2 || 2", string-width@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -10396,9 +10116,9 @@ string-width@^3.0.0, string-width@^3.1.0: strip-ansi "^5.1.0" string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" @@ -10462,7 +10182,7 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0: +"strip-ansi@^3.0.1 || ^4.0.0", strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= @@ -10535,9 +10255,9 @@ stylehacks@^4.0.0: postcss-selector-parser "^3.0.0" stylis@^4.0.3: - version "4.0.10" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.10.tgz#446512d1097197ab3f02fb3c258358c3f7a14240" - integrity sha512-m3k+dk7QeJw660eIKRRn3xPF6uuvHs/FFzjX3HQ5ove0qYsiygoAhwn5a3IYKaZPo5LrYD0rfVmtv1gNY1uYwg== + version "4.0.6" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.6.tgz#0d8b97b6bc4748bea46f68602b6df27641b3c548" + integrity sha512-1igcUEmYFBEO14uQHAJhCUelTR5jPztfdVKrYxRnDa5D5Dn3w0NxXupJNPr/VV/yRfZYEAco8sTIRZzH3sRYKg== substring-trie@^1.0.2: version "1.0.2" @@ -10585,9 +10305,9 @@ supports-color@^8.0.0: has-flag "^4.0.0" supports-hyperlinks@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" @@ -10646,9 +10366,9 @@ tapable@^1.0, tapable@^1.0.0, tapable@^1.1.3: integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== tar@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" - integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -10671,15 +10391,15 @@ terminal-link@^2.0.0: supports-hyperlinks "^2.0.0" terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + version "1.4.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^4.0.0" + serialize-javascript "^2.1.2" source-map "^0.6.1" terser "^4.1.2" webpack-sources "^1.4.0" @@ -10710,9 +10430,9 @@ terser@^4.1.2: source-map-support "~0.5.12" terser@^5.3.4: - version "5.7.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.1.tgz#2dc7a61009b66bb638305cb2a824763b116bf784" - integrity sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg== + version "5.3.4" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.4.tgz#e510e05f86e0bd87f01835c3238839193f77a60c" + integrity sha512-dxuB8KQo8Gt6OVOeLg/rxfcxdNZI/V1G6ze1czFUzPeCFWZRtvZMgSzlZZ5OYBZ4HoG607F6pFPNLekJyV+yVw== dependencies: commander "^2.20.0" source-map "~0.7.2" @@ -10724,17 +10444,15 @@ tesseract.js-core@^2.2.0: integrity sha512-a8L+OJTbUipBsEDsJhDPlnLB0TY1MkTZqw5dqUwmiDSjUzwvU7HWLg/2+WDRulKUi4LE+7PnHlaBlW0k+V0U0w== tesseract.js@^2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/tesseract.js/-/tesseract.js-2.1.4.tgz#24ef4af99982e34720f254e8286b6812634ad267" - integrity sha512-r1nPDjkaD7QdlGfgn/q0BIKBnnCSXcM9PTrgp6rP2aWutwuf1BrQX564rSd1uQFJYk6GQYU6U6fm3bTQ/XMBZw== + version "2.1.1" + resolved "https://registry.yarnpkg.com/tesseract.js/-/tesseract.js-2.1.1.tgz#5c50fc95542ce8d834cb952bfb75a8fc85f1441d" + integrity sha512-utg0A8UzT1KwBvZf+UMGmM8LU6izeol6yIem0Z44+7Qqd/YWgRVQ99XOG18ApTOXX48lGE++PDwlcZYkv0ygRQ== dependencies: - blueimp-load-image "^3.0.0" bmp-js "^0.1.0" file-type "^12.4.1" idb-keyval "^3.2.0" is-electron "^2.2.0" is-url "^1.2.4" - jpeg-autorotate "^7.1.1" node-fetch "^2.6.0" opencollective-postinstall "^2.0.2" regenerator-runtime "^0.13.3" @@ -10756,10 +10474,10 @@ text-table@^0.2.0, text-table@~0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== +throat@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" + integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== throng@^4.0.0: version "4.0.0" @@ -10787,9 +10505,9 @@ thunky@^1.0.2: integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== dependencies: setimmediate "^1.0.4" @@ -10814,9 +10532,9 @@ tiny-warning@^1.0.0: integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-arraybuffer@^1.0.0: version "1.0.1" @@ -10879,6 +10597,13 @@ tough-cookie@^4.0.0: punycode "^2.1.1" universalify "^0.1.2" +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" + tr46@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" @@ -10891,15 +10616,21 @@ ts-essentials@^2.0.3: resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" integrity sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w== -tsconfig-paths@^3.9.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz#79ae67a68c15289fdf5c51cb74f397522d795ed7" - integrity sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q== +tsconfig-paths@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz#954c1fe973da6339c78e06b03ce2e48810b65f36" + integrity sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA== dependencies: - json5 "^2.2.0" + "@types/json5" "^0.0.29" + json5 "^1.0.1" minimist "^1.2.0" strip-bom "^3.0.0" +tslib@^1.9.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -10939,26 +10670,16 @@ type-detect@4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -10973,9 +10694,9 @@ type@^1.0.1: integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== type@^2.0.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" - integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== + version "2.0.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" + integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -11085,9 +10806,9 @@ upath@^1.1.1: integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== dependencies: punycode "^2.1.0" @@ -11096,10 +10817,10 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-parse@^1.4.3, url-parse@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" - integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== +url-parse@^1.4.3, url-parse@^1.4.7: + version "1.5.3" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862" + integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== dependencies: querystringify "^2.1.1" requires-port "^1.0.0" @@ -11113,21 +10834,21 @@ url@^0.11.0: querystring "0.2.0" use-composed-ref@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.1.0.tgz#9220e4e94a97b7b02d7d27eaeab0b37034438bbc" - integrity sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg== + version "1.0.0" + resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.0.0.tgz#bb13e8f4a0b873632cde4940abeb88b92d03023a" + integrity sha512-RVqY3NFNjZa0xrmK3bIMWNmQ01QjKPDc7DeWR3xa/N8aliVppuutOE5bZzPkQfvL+5NRWMMp0DJ99Trd974FIw== dependencies: ts-essentials "^2.0.3" use-isomorphic-layout-effect@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz#7bb6589170cd2987a152042f9084f9effb75c225" - integrity sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ== + version "1.0.0" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.0.0.tgz#f56b4ed633e1c21cd9fc76fe249002a1c28989fb" + integrity sha512-JMwJ7Vd86NwAt1jH7q+OIozZSIxA4ND0fx6AsOe2q1H8ooBUp5aN6DvVCqZiIaYU6JaMRJGyR0FO7EBCIsb/Rg== use-latest@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.0.tgz#a44f6572b8288e0972ec411bdd0840ada366f232" - integrity sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.1.0.tgz#7bf9684555869c3f5f37e10d0884c8accf4d3aa6" + integrity sha512-gF04d0ZMV3AMB8Q7HtfkAWe+oq1tFXP6dZKwBHQF5nVXtGsh2oAYeeqma5ZzxtlpOcW8Ro/tLcfmEodjDeqtuw== dependencies: use-isomorphic-layout-effect "^1.0.0" @@ -11143,12 +10864,12 @@ user-home@^2.0.0: dependencies: os-homedir "^1.0.0" -utf-8-validate@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.5.tgz#dd32c2e82c72002dc9f02eb67ba6761f43456ca1" - integrity sha512-+pnxRYsS/axEpkrrEpzYfNZGXp0IjC/9RIxwM5gntY4Koi8SHmUGSfxfWqxZdRxrtaoVstuOzUp/rbs3JSPELQ== +utf-8-validate@^5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" + integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== dependencies: - node-gyp-build "^4.2.0" + node-gyp-build "^4.3.0" util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" @@ -11196,32 +10917,29 @@ uuid@^3.3.2, uuid@^3.4.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.3.0, uuid@^8.3.1: +uuid@^8.3.1: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== -v8-to-istanbul@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" - integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== +v8-to-istanbul@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz#0aeb763894f1a0a1676adf8a8b7612a38902446c" + integrity sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" source-map "^0.7.3" -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" +value-equal@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" + integrity sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw== value-equal@^1.0.1: version "1.0.1" @@ -11257,7 +10975,7 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" -walker@^1.0.7, walker@~1.0.5: +walker@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= @@ -11278,23 +10996,23 @@ warning@^4.0.0, warning@^4.0.1: dependencies: loose-envify "^1.0.0" -watchpack-chokidar2@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" - integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== dependencies: chokidar "^2.1.8" watchpack@^1.7.4: - version "1.7.5" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" - integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + version "1.7.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" + integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== dependencies: graceful-fs "^4.1.2" neo-async "^2.5.0" optionalDependencies: chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.1" + watchpack-chokidar2 "^2.0.0" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -11328,15 +11046,15 @@ webpack-assets-manifest@^4.0.6: tapable "^1.0" webpack-sources "^1.0" -webpack-bundle-analyzer@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz#39898cf6200178240910d629705f0f3493f7d666" - integrity sha512-PIagMYhlEzFfhMYOzs5gFT55DkUdkyrJi/SxJp8EF3YMWhS+T9vvs2EoTetpk5qb6VsCq02eXTlRDOydRhDFAQ== +webpack-bundle-analyzer@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz#1b0eea2947e73528754a6f9af3e91b2b6e0f79d5" + integrity sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ== dependencies: acorn "^8.0.4" acorn-walk "^8.0.0" chalk "^4.1.0" - commander "^6.2.0" + commander "^7.2.0" gzip-size "^6.0.0" lodash "^4.17.20" opener "^1.5.2" @@ -11361,9 +11079,9 @@ webpack-cli@^3.3.12: yargs "^13.3.2" webpack-dev-middleware@^3.7.2: - version "3.7.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" - integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== dependencies: memory-fs "^0.4.1" mime "^2.4.4" @@ -11418,7 +11136,7 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" -webpack-merge@^5.7.3: +webpack-merge@^5.8.0: version "5.8.0" resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== @@ -11463,7 +11181,16 @@ webpack@^4.46.0: watchpack "^1.7.4" webpack-sources "^1.4.1" -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: +websocket-driver@>=0.5.1: + version "0.7.3" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" + integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== + dependencies: + http-parser-js ">=0.4.0 <0.4.11" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-driver@^0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== @@ -11489,10 +11216,19 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== +whatwg-url@^8.0.0: + version "8.2.2" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.2.2.tgz#85e7f9795108b53d554cec640b2e8aee2a0d4bfd" + integrity sha512-PcVnO6NiewhkmzV0qn7A+UZ9Xx4maNTI+O+TShmfE4pqjoCMwUMjkvoNhNHPTvgR7QH9Xt3R13iHuWy2sToFxQ== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^6.1.0" + +whatwg-url@^8.5.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.6.0.tgz#27c0205a4902084b872aecb97cf0f2a7a3011f4c" + integrity sha512-os0KkeeqUOl7ccdDT1qqUcS4KH4tcBTSKK5Nl5WKb2lyxInIZ/CpjkqKa1Ss12mjfdcRX9mHmPPs7/SxG1Hbdw== dependencies: lodash "^4.7.0" tr46 "^2.1.0" @@ -11521,7 +11257,7 @@ which@^1.2.14, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -11533,7 +11269,7 @@ wicg-inert@^3.1.1: resolved "https://registry.yarnpkg.com/wicg-inert/-/wicg-inert-3.1.1.tgz#b033fd4fbfb9e3fd709e5d84becbdf2e06e5c229" integrity sha512-PhBaNh8ur9Xm4Ggy4umelwNIP6pPP1bv3EaWaKqfb/QNme2rdLjm7wIInvV4WhxVHhzA4Spgw9qNSqWtB/ca2A== -wide-align@^1.1.0: +wide-align@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== @@ -11566,15 +11302,6 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -11607,16 +11334,21 @@ write@^0.2.1: mkdirp "^0.5.1" ws@^6.2.1: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== dependencies: async-limiter "~1.0.0" -ws@^7.3.1, ws@^7.4.5, ws@^7.4.6: - version "7.5.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" - integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== +ws@^7.3.1, ws@^7.4.5: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@^8.2.3: + version "8.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" + integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== xml-name-validator@^3.0.0: version "3.0.0" @@ -11639,9 +11371,9 @@ y18n@^4.0.0: integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== yallist@^3.0.2: version "3.1.1" @@ -11654,9 +11386,9 @@ yallist@^4.0.0: integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.7.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + version "1.10.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== yargs-parser@^13.1.2: version "13.1.2" @@ -11666,18 +11398,10 @@ yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^20.2.1, yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^20.2.2: + version "20.2.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.3.tgz#92419ba867b858c868acf8bae9bf74af0dd0ce26" + integrity sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww== yargs@^13.3.2: version "13.3.2" @@ -11695,27 +11419,10 @@ yargs@^13.3.2: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yargs@^17.0.1: - version "17.0.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.0.1.tgz#6a1ced4ed5ee0b388010ba9fd67af83b9362e0bb" - integrity sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ== +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" escalade "^3.1.1" @@ -11725,10 +11432,18 @@ yargs@^17.0.1: y18n "^5.0.5" yargs-parser "^20.2.2" -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yargs@^17.2.1: + version "17.2.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.2.1.tgz#e2c95b9796a0e1f7f3bf4427863b42e0418191ea" + integrity sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" zlibjs@^0.3.1: version "0.3.1"