~cytrogen/masto-fe

86ba8d3e14955841fed45b49114e06b7a3473ba4 — Claire 2 years ago 678fa1e + 987f190
Merge pull request #2368 from ClearlyClaire/glitch-soc/merge-upstream

Merge upstream changes up to 496eb6f7a4fa7de54f26da9642a76e6884648102
213 files changed, 4128 insertions(+), 2179 deletions(-)

D .bundler-audit.yml
M .rubocop_todo.yml
M CHANGELOG.md
M Gemfile
M Gemfile.lock
M app/chewy/accounts_index.rb
M app/controllers/admin/domain_blocks_controller.rb
M app/controllers/concerns/captcha_concern.rb
M app/controllers/concerns/web_app_controller_concern.rb
M app/javascript/flavours/glitch/actions/importer/normalizer.js
M app/javascript/flavours/glitch/actions/timelines.js
M app/javascript/flavours/glitch/features/explore/components/story.jsx
M app/javascript/flavours/glitch/features/explore/links.jsx
A app/javascript/flavours/glitch/features/hashtag_timeline/components/hashtag_header.jsx
M app/javascript/flavours/glitch/features/hashtag_timeline/index.jsx
M app/javascript/flavours/glitch/features/interaction_modal/index.jsx
M app/javascript/flavours/glitch/features/status/components/card.jsx
M app/javascript/flavours/glitch/features/ui/components/focal_point_modal.jsx
M app/javascript/flavours/glitch/features/ui/components/header.jsx
M app/javascript/flavours/glitch/features/ui/components/modal_root.jsx
M app/javascript/flavours/glitch/features/ui/components/sign_in_banner.jsx
M app/javascript/flavours/glitch/initial_state.js
M app/javascript/flavours/glitch/styles/components/columns.scss
M app/javascript/flavours/glitch/styles/components/misc.scss
M app/javascript/flavours/glitch/styles/components/modal.scss
M app/javascript/flavours/glitch/styles/mastodon-light/diff.scss
M app/javascript/mastodon/actions/importer/normalizer.js
M app/javascript/mastodon/actions/timelines.js
M app/javascript/mastodon/features/explore/components/story.jsx
M app/javascript/mastodon/features/explore/links.jsx
A app/javascript/mastodon/features/hashtag_timeline/components/hashtag_header.jsx
M app/javascript/mastodon/features/hashtag_timeline/index.jsx
M app/javascript/mastodon/features/interaction_modal/index.jsx
M app/javascript/mastodon/features/status/components/card.jsx
M app/javascript/mastodon/features/ui/components/focal_point_modal.jsx
M app/javascript/mastodon/features/ui/components/header.jsx
M app/javascript/mastodon/features/ui/components/modal_root.jsx
M app/javascript/mastodon/features/ui/components/sign_in_banner.jsx
M app/javascript/mastodon/initial_state.js
M app/javascript/mastodon/locales/af.json
M app/javascript/mastodon/locales/an.json
M app/javascript/mastodon/locales/ar.json
M app/javascript/mastodon/locales/ast.json
M app/javascript/mastodon/locales/be.json
M app/javascript/mastodon/locales/bg.json
M app/javascript/mastodon/locales/br.json
M app/javascript/mastodon/locales/ca.json
M app/javascript/mastodon/locales/ckb.json
M app/javascript/mastodon/locales/cs.json
M app/javascript/mastodon/locales/cy.json
M app/javascript/mastodon/locales/da.json
M app/javascript/mastodon/locales/de.json
M app/javascript/mastodon/locales/el.json
M app/javascript/mastodon/locales/en-GB.json
M app/javascript/mastodon/locales/en.json
M app/javascript/mastodon/locales/eo.json
M app/javascript/mastodon/locales/es-AR.json
M app/javascript/mastodon/locales/es-MX.json
M app/javascript/mastodon/locales/es.json
M app/javascript/mastodon/locales/et.json
M app/javascript/mastodon/locales/eu.json
M app/javascript/mastodon/locales/fa.json
M app/javascript/mastodon/locales/fi.json
M app/javascript/mastodon/locales/fo.json
M app/javascript/mastodon/locales/fr-QC.json
M app/javascript/mastodon/locales/fr.json
M app/javascript/mastodon/locales/fy.json
M app/javascript/mastodon/locales/ga.json
M app/javascript/mastodon/locales/gd.json
M app/javascript/mastodon/locales/gl.json
M app/javascript/mastodon/locales/he.json
M app/javascript/mastodon/locales/hi.json
M app/javascript/mastodon/locales/hu.json
M app/javascript/mastodon/locales/hy.json
M app/javascript/mastodon/locales/id.json
M app/javascript/mastodon/locales/io.json
M app/javascript/mastodon/locales/is.json
M app/javascript/mastodon/locales/it.json
M app/javascript/mastodon/locales/ja.json
M app/javascript/mastodon/locales/kab.json
M app/javascript/mastodon/locales/kk.json
M app/javascript/mastodon/locales/ko.json
M app/javascript/mastodon/locales/ku.json
M app/javascript/mastodon/locales/lv.json
M app/javascript/mastodon/locales/ml.json
M app/javascript/mastodon/locales/mr.json
M app/javascript/mastodon/locales/ms.json
M app/javascript/mastodon/locales/my.json
M app/javascript/mastodon/locales/nl.json
M app/javascript/mastodon/locales/nn.json
M app/javascript/mastodon/locales/no.json
M app/javascript/mastodon/locales/oc.json
M app/javascript/mastodon/locales/pa.json
M app/javascript/mastodon/locales/pl.json
M app/javascript/mastodon/locales/pt-BR.json
M app/javascript/mastodon/locales/pt-PT.json
M app/javascript/mastodon/locales/ro.json
M app/javascript/mastodon/locales/ru.json
M app/javascript/mastodon/locales/sa.json
M app/javascript/mastodon/locales/sco.json
M app/javascript/mastodon/locales/si.json
M app/javascript/mastodon/locales/sk.json
M app/javascript/mastodon/locales/sl.json
M app/javascript/mastodon/locales/sq.json
M app/javascript/mastodon/locales/sr-Latn.json
M app/javascript/mastodon/locales/sr.json
M app/javascript/mastodon/locales/sv.json
M app/javascript/mastodon/locales/th.json
M app/javascript/mastodon/locales/tr.json
M app/javascript/mastodon/locales/tt.json
M app/javascript/mastodon/locales/uk.json
M app/javascript/mastodon/locales/ur.json
M app/javascript/mastodon/locales/uz.json
M app/javascript/mastodon/locales/vi.json
M app/javascript/mastodon/locales/zh-CN.json
M app/javascript/mastodon/locales/zh-HK.json
M app/javascript/mastodon/locales/zh-TW.json
M app/javascript/styles/mastodon-light/diff.scss
M app/javascript/styles/mastodon/components.scss
M app/lib/link_details_extractor.rb
M app/models/application_record.rb
M app/models/list.rb
M app/models/preview_card.rb
M app/models/status.rb
M app/serializers/initial_state_serializer.rb
M app/serializers/rest/preview_card_serializer.rb
M app/services/account_search_service.rb
M app/services/bulk_import_service.rb
M config/database.yml
M config/initializers/paperclip.rb
A config/initializers/statsd.rb
M config/locales/activerecord.cs.yml
M config/locales/activerecord.ms.yml
M config/locales/activerecord.nn.yml
M config/locales/activerecord.no.yml
M config/locales/activerecord.ru.yml
M config/locales/ar.yml
M config/locales/be.yml
M config/locales/bn.yml
M config/locales/br.yml
M config/locales/ca.yml
M config/locales/cy.yml
M config/locales/de.yml
M config/locales/devise.ca.yml
M config/locales/devise.de.yml
M config/locales/devise.ms.yml
M config/locales/doorkeeper.ar.yml
M config/locales/doorkeeper.be.yml
M config/locales/doorkeeper.ca.yml
M config/locales/doorkeeper.cs.yml
M config/locales/doorkeeper.es-MX.yml
M config/locales/doorkeeper.es.yml
M config/locales/doorkeeper.gd.yml
M config/locales/doorkeeper.ms.yml
M config/locales/doorkeeper.nn.yml
M config/locales/doorkeeper.no.yml
M config/locales/doorkeeper.sv.yml
M config/locales/es-MX.yml
M config/locales/es.yml
M config/locales/fi.yml
M config/locales/gd.yml
M config/locales/ko.yml
M config/locales/lt.yml
M config/locales/ml.yml
M config/locales/ms.yml
M config/locales/nn.yml
M config/locales/no.yml
M config/locales/pt-PT.yml
M config/locales/ru.yml
M config/locales/simple_form.ca.yml
M config/locales/simple_form.cs.yml
M config/locales/simple_form.de.yml
M config/locales/simple_form.et.yml
M config/locales/simple_form.fi.yml
M config/locales/simple_form.ms.yml
M config/locales/simple_form.nn.yml
M config/locales/simple_form.no.yml
M config/locales/simple_form.sl.yml
M config/locales/simple_form.vi.yml
M config/locales/sk.yml
M config/locales/sl.yml
M config/locales/sr-Latn.yml
M config/locales/sr.yml
M config/locales/th.yml
M config/locales/tt.yml
M config/locales/vi.yml
M config/locales/zh-TW.yml
M db/migrate/20170105224407_add_shortcode_to_media_attachments.rb
M db/migrate/20170304202101_add_type_to_media_attachments.rb
M db/migrate/20181024224956_migrate_account_conversations.rb
M db/migrate/20181116173541_copy_account_stats.rb
A db/migrate/20230725213448_add_image_description_to_preview_cards.rb
M db/post_migrate/20201017234926_fill_account_suspension_origin.rb
M db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb
M db/schema.rb
M dist/mastodon-streaming.service
A dist/mastodon-streaming@.service
M dist/nginx.conf
M lib/mastodon/cli/search.rb
M lib/mastodon/migration_helpers.rb
M lib/mastodon/version.rb
M package.json
M public/robots.txt
R spec/{fabricators => fabrication}/fabricators_spec.rb
M spec/features/admin/domain_blocks_spec.rb
M spec/fixtures/files/attachment.gif
M spec/fixtures/files/attachment.webm
M spec/lib/admin/system_check/elasticsearch_check_spec.rb
M spec/lib/link_details_extractor_spec.rb
M spec/models/media_attachment_spec.rb
M spec/services/bulk_import_row_service_spec.rb
M streaming/index.js
M yarn.lock
D .bundler-audit.yml => .bundler-audit.yml +0 -3
@@ 1,3 0,0 @@
---
ignore:
  - CVE-2015-9284 # Mitigation following https://github.com/omniauth/omniauth/wiki/Resolving-CVE-2015-9284#mitigating-in-rails-applications

M .rubocop_todo.yml => .rubocop_todo.yml +1 -1
@@ 135,7 135,7 @@ Lint/UselessAssignment:

# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
Metrics/AbcSize:
  Max: 143
  Max: 146
  Exclude:
    - 'app/serializers/initial_state_serializer.rb'


M CHANGELOG.md => CHANGELOG.md +234 -0
@@ 2,6 2,240 @@

All notable changes to this project will be documented in this file.

## [4.2.0] - UNRELEASED

The following changelog entries focus on changes visible to users, administrators, client developers or federated software developers, but there has also been a lot of code modernization, refactoring, and tooling work, in particular by [@danielmbrasil](https://github.com/danielmbrasil), [@mjankowski](https://github.com/mjankowski), [@nschonni](https://github.com/nschonni), [@renchap](https://github.com/renchap), and [@takayamaki](https://github.com/takayamaki).

### Added

- **Add role badges to the web interface** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25649), [Gargron](https://github.com/mastodon/mastodon/pull/26281))
- **Add ability to pick domains to forward reports to using the `forward_to_domains` parameter in `POST /api/v1/reports`** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25866))
  The `forward_to_domains` REST API parameter is a list of strings. If it is empty or omitted, the previous behavior is maintained.
  The `forward` parameter still needs to be set for `forward_to_domains` to be taken into account.
  The forwarded-to domains can only include that of the original author and people being replied to.
- **Add forwarding of reported replies to servers being replied to** ([Gargron](https://github.com/mastodon/mastodon/pull/25341), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26189))
- Add direct link to the Single-Sign On provider if there is only one sign up method available ([CSDUMMI](https://github.com/mastodon/mastodon/pull/26083), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26368))
- **Add webhook templating** ([Gargron](https://github.com/mastodon/mastodon/pull/23289))
- **Add webhooks for local `status.created`, `status.updated`, `account.updated` and `report.updated`** ([VyrCossont](https://github.com/mastodon/mastodon/pull/24133), [VyrCossont](https://github.com/mastodon/mastodon/pull/24243), [VyrCossont](https://github.com/mastodon/mastodon/pull/24211))
- **Add exclusive lists** ([dariusk](https://github.com/mastodon/mastodon/pull/22048), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25324))
- **Add a confirmation screen when suspending a domain** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25144), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25603))
- **Add support for importing lists** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25203), [mgmn](https://github.com/mastodon/mastodon/pull/26120), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26372))
- **Add optional hCaptcha support** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25019), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25057), [Gargron](https://github.com/mastodon/mastodon/pull/25395), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26388))
- **Add lines to threads in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/24549), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24677), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24696), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24711), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24714), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24713), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24715), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24800), [teeerevor](https://github.com/mastodon/mastodon/pull/25706), [renchap](https://github.com/mastodon/mastodon/pull/25807))
- **Add new onboarding flow to web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/24619), [Gargron](https://github.com/mastodon/mastodon/pull/24646), [Gargron](https://github.com/mastodon/mastodon/pull/24705), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24872), [ThisIsMissEm](https://github.com/mastodon/mastodon/pull/24883), [Gargron](https://github.com/mastodon/mastodon/pull/24954), [stevenjlm](https://github.com/mastodon/mastodon/pull/24959), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25010), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25275), [Gargron](https://github.com/mastodon/mastodon/pull/25559), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25561))
- Add `GET /api/v1/instance/languages` to REST API ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24443))
- Add primary key to `preview_cards_statuses` join table ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25243), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26384))
- Add client-side timeout on resend confirmation button ([Gargron](https://github.com/mastodon/mastodon/pull/26300))
- Add published date and author to news on the explore screen in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26155))
- Add `lang` attribute to various UI components ([c960657](https://github.com/mastodon/mastodon/pull/23869), [c960657](https://github.com/mastodon/mastodon/pull/23891), [c960657](https://github.com/mastodon/mastodon/pull/26111), [c960657](https://github.com/mastodon/mastodon/pull/26149))
- Add stricter protocol fields validation for accounts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25937))
- Add support for Azure blob storage ([mistydemeo](https://github.com/mastodon/mastodon/pull/23607), [mistydemeo](https://github.com/mastodon/mastodon/pull/26080))
- Add toast with option to open post after publishing in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25564), [Signez](https://github.com/mastodon/mastodon/pull/25919))
- Add canonical link tags in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25715))
- Add button to see results for polls in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25726))
- Add at-symbol prepended to mention span title ([forsamori](https://github.com/mastodon/mastodon/pull/25684))
- Add users index on `unconfirmed_email` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25672), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25702))
- Add superapp index on `oauth_applications` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25670))
- Add index to backups on `user_id` column ([mjankowski](https://github.com/mastodon/mastodon/pull/25647))
- Add onboarding prompt when home feed too slow in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25267), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25556), [Gargron](https://github.com/mastodon/mastodon/pull/25579), [renchap](https://github.com/mastodon/mastodon/pull/25580), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25581), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25617), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25917))
- Add `POST /api/v1/conversations/:id/unread` API endpoint to mark a conversation as unread ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25509))
- Add `translate="no"` to outgoing mentions and links ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25524))
- Add unsubscribe link and headers to e-mails ([Gargron](https://github.com/mastodon/mastodon/pull/25378), [c960657](https://github.com/mastodon/mastodon/pull/26085))
- Add logging of websocket send errors ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/25280))
- Add time zone preference ([Gargron](https://github.com/mastodon/mastodon/pull/25342), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26025))
- Add `legal` as report category ([Gargron](https://github.com/mastodon/mastodon/pull/23941), [renchap](https://github.com/mastodon/mastodon/pull/25400))
- Add `data-nosnippet` so Google doesn't use trending posts in snippets for `/` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25279))
- Add card with who invited you to join when displaying rules on sign-up ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23475))
- Add missing primary keys to `accounts_tags` and `statuses_tags` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25210))
- Add support for custom sign-up URLs ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25014), [renchap](https://github.com/mastodon/mastodon/pull/25108), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25190), [mgmn](https://github.com/mastodon/mastodon/pull/25531))
  This is set using `SSO_ACCOUNT_SIGN_UP` and reflected in the REST API by adding `registrations.sign_up_url` to the `/api/v2/instance` endpoint.
- Add polling and automatic redirection to `/start` on email confirmation ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25013))
- Add ability to block sign-ups from IP using the CLI ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24870))
- Add ALT badges to media that has alternative text in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24782), [c960657](https://github.com/mastodon/mastodon/pull/26166)
- Add ability to include accounts with pending follow requests in lists ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19727), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24810))
- Add trend management to admin API ([rrgeorge](https://github.com/mastodon/mastodon/pull/24257))
  - `POST /api/v1/admin/trends/statuses/:id/approve`
  - `POST /api/v1/admin/trends/statuses/:id/reject`
  - `POST /api/v1/admin/trends/links/:id/approve`
  - `POST /api/v1/admin/trends/links/:id/reject`
  - `POST /api/v1/admin/trends/tags/:id/approve`
  - `POST /api/v1/admin/trends/tags/:id/reject`
  - `GET /api/v1/admin/trends/links/publishers`
  - `POST /api/v1/admin/trends/links/publishers/:id/approve`
  - `POST /api/v1/admin/trends/links/publishers/:id/reject`
- Add user handle to notification mail recipient address ([HeitorMC](https://github.com/mastodon/mastodon/pull/24240))
- Add progress indicator to sign-up flow ([Gargron](https://github.com/mastodon/mastodon/pull/24545))
- Add client-side validation for taken username in sign-up form ([Gargron](https://github.com/mastodon/mastodon/pull/24546))
- Add `--approve` option to `tootctl accounts create` ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24533))
- Add “In Memoriam” banner back to profiles ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23591), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/23614))
  This adds the `memorial` attribute to the `Account` REST API entity.
- Add colour to follow button when hashtag is being followed ([c960657](https://github.com/mastodon/mastodon/pull/24361))
- Add further explanations to the profile link verification instructions ([drzax](https://github.com/mastodon/mastodon/pull/19723))
- Add a link to Identity provider's account settings from the account settings ([CSDUMMI](https://github.com/mastodon/mastodon/pull/24100), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24628))
- Add support for streaming server to connect to postgres with self-signed certs through the `sslmode` URL parameter ([ramuuns](https://github.com/mastodon/mastodon/pull/21431))
- Add support for specifying S3 storage classes through the `S3_STORAGE_CLASS` environment variable ([hyl](https://github.com/mastodon/mastodon/pull/22480))
- Add support for incoming rich text ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23913))
- Add support for Ruby 3.2 ([tenderlove](https://github.com/mastodon/mastodon/pull/22928), [casperisfine](https://github.com/mastodon/mastodon/pull/24142), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24202))
- Add API parameter to safeguard unexpected mentions in new posts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18350))

### Changed

- **Change reblogs to be excluded from "Posts and replies" tab in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/26302))
- **Change interaction modal in web interface** ([Gargron, ClearlyClaire](https://github.com/mastodon/mastodon/pull/26075), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26269), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26268), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26267))
- **Change design of link previews in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/26136), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26151), [Gargron](https://github.com/mastodon/mastodon/pull/26153), [Gargron](https://github.com/mastodon/mastodon/pull/26250), [Gargron](https://github.com/mastodon/mastodon/pull/26287), [Gargron](https://github.com/mastodon/mastodon/pull/26286), [c960657](https://github.com/mastodon/mastodon/pull/26184))
- **Change "direct message" nomenclature to "private mention" in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/24248))
- **Change translation feature to cover Content Warnings, poll options and media descriptions** ([c960657](https://github.com/mastodon/mastodon/pull/24175), [S-H-GAMELINKS](https://github.com/mastodon/mastodon/pull/25251), [c960657](https://github.com/mastodon/mastodon/pull/26168))
- **Change account search to match by text when opted-in** ([jsgoldstein](https://github.com/mastodon/mastodon/pull/25599), [Gargron](https://github.com/mastodon/mastodon/pull/26378))
- **Change import feature to be clearer, less error-prone and more reliable** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21054), [mgmn](https://github.com/mastodon/mastodon/pull/24874))
- **Change local and federated timelines to be in a single “Live feeds” column** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25641), [Gargron](https://github.com/mastodon/mastodon/pull/25683), [mgmn](https://github.com/mastodon/mastodon/pull/25694), [Plastikmensch](https://github.com/mastodon/mastodon/pull/26247))
- **Change user archive export to be faster and more reliable, and export `.zip` archives instead of `.tar.gz` ones** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23360), [TheEssem](https://github.com/mastodon/mastodon/pull/25034))
- **Change `mastodon-streaming` systemd unit files to be templated** ([e-nomem](https://github.com/mastodon/mastodon/pull/24751))
- **Change `statsd` integration to disable sidekiq metrics by default** ([mjankowski](https://github.com/mastodon/mastodon/pull/25265), [mjankowski](https://github.com/mastodon/mastodon/pull/25336), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26310))
  This deprecates `statsd` support and disables the sidekiq integration unless `STATSD_SIDEKIQ` is set to `true`.
  This is because the `nsa` gem is unmaintained, and its sidekiq integration is known to add very significant overhead.
  Later versions of Mastodon will have other ways to get the same metrics.
- **Change replica support to native Rails adapter** ([krainboltgreene](https://github.com/mastodon/mastodon/pull/25693), [Gargron](https://github.com/mastodon/mastodon/pull/25849), [Gargron](https://github.com/mastodon/mastodon/pull/25874), [Gargron](https://github.com/mastodon/mastodon/pull/25851), [Gargron](https://github.com/mastodon/mastodon/pull/25977), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26074), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26326), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26386))
  This is a breaking change, dropping `makara` support, and requiring you to update your database configuration if you are using replicas.
  To tell Mastodon to use a read replica, you can either set the `REPLICA_DB_NAME` environment variable (along with `REPLICA_DB_USER`, `REPLICA_DB_PASS`, `REPLICA_DB_HOST`, and `REPLICA_DB_PORT`, if they differ from the primary database), or the `REPLICA_DATABASE_URL` environment variable if your configuration is based on `DATABASE_URL`.
- Change header of hashtag timelines in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26362))
- Change streaming `/metrics` to include additional metrics ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/26299))
- Change indexing frequency from 5 minutes to 1 minute, add locks to schedulers ([Gargron](https://github.com/mastodon/mastodon/pull/26304))
- Change column link to add a better keyboard focus indicator ([teeerevor](https://github.com/mastodon/mastodon/pull/26278))
- Change poll form element colors to fit with the rest of the ui ([teeerevor](https://github.com/mastodon/mastodon/pull/26139), [teeerevor](https://github.com/mastodon/mastodon/pull/26162), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26164))
- Change 'favourite' to 'favorite' for American English ([marekr](https://github.com/mastodon/mastodon/pull/24667), [gunchleoc](https://github.com/mastodon/mastodon/pull/26009), [nabijaczleweli](https://github.com/mastodon/mastodon/pull/26109))
- Change ActivityStreams representation of suspended accounts to not use a blank `name` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25276))
- Change focus UI for keyboard only input ([teeerevor](https://github.com/mastodon/mastodon/pull/25935), [Gargron](https://github.com/mastodon/mastodon/pull/26125))
- Change thread view to scroll to the selected post rather than the post being replied to ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24685))
- Change links in multi-column mode so tabs are open in single-column mode ([Signez](https://github.com/mastodon/mastodon/pull/25893), [Signez](https://github.com/mastodon/mastodon/pull/26070), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25973))
- Change searching with `#` to include account index ([jsgoldstein](https://github.com/mastodon/mastodon/pull/25638))
- Change label and design of sensitive and unavailable media in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25712), [Gargron](https://github.com/mastodon/mastodon/pull/26135), [Gargron](https://github.com/mastodon/mastodon/pull/26330))
- Change button colors to increase hover/focus contrast and consistency ([teeerevor](https://github.com/mastodon/mastodon/pull/25677), [Gargron](https://github.com/mastodon/mastodon/pull/25679))
- Change dropdown icon above compose form from ellipsis to bars in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25661))
- Change header backgrounds to use fewer different colors in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25577))
- Change files to be deleted in batches instead of one-by-one ([Gargron](https://github.com/mastodon/mastodon/pull/23302), [S-H-GAMELINKS](https://github.com/mastodon/mastodon/pull/25586), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25587))
- Change emoji picker icon ([iparr](https://github.com/mastodon/mastodon/pull/25479))
- Change edit profile page ([Gargron](https://github.com/mastodon/mastodon/pull/25413))
- Change "bot" label to "automated" ([Gargron](https://github.com/mastodon/mastodon/pull/25356))
- Change design of dropdowns in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25107))
- Change wording of “Content cache retention period” setting to highlight destructive implications ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23261))
- Change autolinking to allow carets in URL search params ([renchap](https://github.com/mastodon/mastodon/pull/25216))
- Change share action from being in action bar to being in dropdown in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25105))
- Change remote report processing to accept reports with long comments, but truncate them ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/25028))
- Change sessions to be ordered from most-recent to least-recently updated ([frankieroberto](https://github.com/mastodon/mastodon/pull/25005))
- Change vacuum scheduler to also delete expired tokens and unused application records ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24868), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24871))
- Change "Sign in" to "Login" ([Gargron](https://github.com/mastodon/mastodon/pull/24942))
- Change domain suspensions to also be checked before trying to fetch unknown remote resources ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24535))
- Change media components to use aspect-ratio rather than compute height themselves ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24686), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24943))
- Change logo version in header based on screen size in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24707))
- Change label from "For you" to "People" on explore screen in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24706))
- Change logged-out WebUI HTML pages to be cached for a few seconds ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24708))
- Change unauthenticated responses to be cached in REST API ([Gargron](https://github.com/mastodon/mastodon/pull/24348), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24662), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24665))
- Change HTTP caching logic ([Gargron](https://github.com/mastodon/mastodon/pull/24347), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24604))
- Change hashtags and mentions in bios to open in-app in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24643))
- Change styling of the recommended accounts to allow bio to be more visible ([chike00](https://github.com/mastodon/mastodon/pull/24480))
- Change account search in moderation interface to allow searching by username including the leading `@` ([HeitorMC](https://github.com/mastodon/mastodon/pull/24242))
- Change all components to use the same error page in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24512))
- Change search pop-out in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24305))
- Change user settings to be stored in a more optimal way ([Gargron](https://github.com/mastodon/mastodon/pull/23630), [c960657](https://github.com/mastodon/mastodon/pull/24321), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24453), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24460), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24558), [Gargron](https://github.com/mastodon/mastodon/pull/24761), [Gargron](https://github.com/mastodon/mastodon/pull/24783), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25508), [jsgoldstein](https://github.com/mastodon/mastodon/pull/25340))
- Change media upload limits and remove client-side resizing ([Gargron](https://github.com/mastodon/mastodon/pull/23726))
- Change design of account rows in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24247), [Gargron](https://github.com/mastodon/mastodon/pull/24343), [Gargron](https://github.com/mastodon/mastodon/pull/24956), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25131))
- Change log-out to use Single Logout when using external log-in through OIDC ([CSDUMMI](https://github.com/mastodon/mastodon/pull/24020))
- Change sidekiq-bulk's batch size from 10,000 to 1,000 jobs in one Redis call ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24034))
- Change translation to only be offered for supported languages ([c960657](https://github.com/mastodon/mastodon/pull/23879), [c960657](https://github.com/mastodon/mastodon/pull/24037))
  This adds the `/api/v1/instance/translation_languages` REST API endpoint that returns an object with the supported translation language pairs in the form:
  ```json
  {
    "fr": ["en", "de"]
  }
  ```
  (where `fr` is a supported source language and `en` and `de` or supported output language when translating a `fr` string)
- Change compose form checkbox to native input with `appearance: none` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22949))
- Change posts' clickable area to be larger ([c960657](https://github.com/mastodon/mastodon/pull/23621))
- Change `followed_by` link to `location=all` if account is local on /admin/accounts/:id page ([tribela](https://github.com/mastodon/mastodon/pull/23467))

### Removed

- **Remove support for Node.js 14** ([renchap](https://github.com/mastodon/mastodon/pull/25198))
- **Remove support for Ruby 2.7** ([nschonni](https://github.com/mastodon/mastodon/pull/24237))
- **Remove clustering from streaming API** ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/24655))
- **Remove anonymous access to the streaming API** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23989))
- Remove 16:9 cropping from web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26132))
- Remove back button from bookmarks, favourites and lists screens in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26126))
- Remove display name input from sign-up form ([Gargron](https://github.com/mastodon/mastodon/pull/24704))
- Remove `tai` locale ([c960657](https://github.com/mastodon/mastodon/pull/23880))
- Remove empty Kushubian (csb) local files ([nschonni](https://github.com/mastodon/mastodon/pull/24151))
- Remove `Permissions-Policy` header from all responses ([Gargron](https://github.com/mastodon/mastodon/pull/24124))

### Fixed

- **Fix filters not being applying in the explore page** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25887))
- **Fix being unable to load past a full page of filtered posts in Home timeline** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24930))
- **Fix log-in flow when involving both OAuth and external authentication** ([CSDUMMI](https://github.com/mastodon/mastodon/pull/24073))
- **Fix broken links in account gallery** ([c960657](https://github.com/mastodon/mastodon/pull/24218))
- Fix adding column with default value taking longer on Postgres >= 11 ([Gargron](https://github.com/mastodon/mastodon/pull/26375))
- Fix light theme select option for hashtags ([teeerevor](https://github.com/mastodon/mastodon/pull/26311))
- Fix AVIF attachments ([c960657](https://github.com/mastodon/mastodon/pull/26264))
- Fix incorrect URL normalization when fetching remote resources ([c960657](https://github.com/mastodon/mastodon/pull/26219), [c960657](https://github.com/mastodon/mastodon/pull/26285))
- Fix being unable to filter posts for individual Chinese languages ([gunchleoc](https://github.com/mastodon/mastodon/pull/26066))
- Fix preview card sometimes linking to 4xx error pages ([c960657](https://github.com/mastodon/mastodon/pull/26200))
- Fix emoji picker button scrolling with textarea content in single-column view ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25304))
- Fix missing border on error screen in light theme in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26152))
- Fix UI overlap with the loupe icon in the Explore Tab ([gol-cha](https://github.com/mastodon/mastodon/pull/26113))
- Fix unexpected redirection to `/explore` after sign-in ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26143))
- Fix `/api/v1/statuses/:id/unfavourite` and `/api/v1/statuses/:id/unreblog` returning non-updated counts ([c960657](https://github.com/mastodon/mastodon/pull/24365))
- Fix clicking the “Back” button sometimes leading out of Mastodon ([c960657](https://github.com/mastodon/mastodon/pull/23953), [CSFlorin](https://github.com/mastodon/mastodon/pull/24835), [S-H-GAMELINKS](https://github.com/mastodon/mastodon/pull/24867), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25281))
- Fix processing of `null` ActivityPub activities ([tribela](https://github.com/mastodon/mastodon/pull/26021))
- Fix hashtag posts not being removed from home feed on hashtag unfollow ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26028))
- Fix for "follows you" indicator in light web UI not readable ([vmstan](https://github.com/mastodon/mastodon/pull/25993))
- Fix incorrect line break between icon and number of reposts & favourites ([edent](https://github.com/mastodon/mastodon/pull/26004))
- Fix sounds not being loaded from assets host ([Signez](https://github.com/mastodon/mastodon/pull/25931))
- Fix buttons showing inconsistent styles ([teeerevor](https://github.com/mastodon/mastodon/pull/25903), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25965), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26341))
- Fix trend calculation working on too many items at a time ([Gargron](https://github.com/mastodon/mastodon/pull/25835))
- Fix dropdowns being disabled for logged out users in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25714), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25964))
- Fix explore page being inaccessible when opted-out of trends in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25716))
- Fix re-activated accounts possibly getting deleted by `AccountDeletionWorker` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25711))
- Fix `/api/v2/search` not working with following query param ([danielmbrasil](https://github.com/mastodon/mastodon/pull/25681))
- Fix inefficient query when requesting a new confirmation email from a logged-in account ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25669))
- Fix unnecessary concurrent calls to `/api/*/instance` in web UI ([mgmn](https://github.com/mastodon/mastodon/pull/25663))
- Fix resolving local URL for remote content ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25637))
- Fix search not being easily findable on smaller screens in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25576), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25631))
- Fix j/k keyboard shortcuts on some status lists ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25554))
- Fix missing validation on `default_privacy` setting ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25513))
- Fix incorrect pagination headers in `/api/v2/admin/accounts` ([danielmbrasil](https://github.com/mastodon/mastodon/pull/25477))
- Fix non-interactive upload container being given a `button` role and tabIndex ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25462))
- Fix always redirecting to onboarding in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25396))
- Fix inconsistent use of middle dot (·) instead of bullet (•) to separate items ([j-f1](https://github.com/mastodon/mastodon/pull/25248))
- Fix spacing of middle dots in the detailed status meta section ([j-f1](https://github.com/mastodon/mastodon/pull/25247))
- Fix prev/next buttons color in media viewer ([renchap](https://github.com/mastodon/mastodon/pull/25231))
- Fix email addresses not being properly updated in `tootctl maintenance fix-duplicates` ([mjankowski](https://github.com/mastodon/mastodon/pull/25118))
- Fix unicode surrogate pairs sometimes being broken in page title ([eai04191](https://github.com/mastodon/mastodon/pull/25148))
- Fix various inefficient queries against account domains ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25126))
- Fix video player offering to expand in a lightbox when it's in an `iframe` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25067))
- Fix post embed previews ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25071))
- Fix inadequate error handling in several API controllers when given invalid parameters ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24947), [danielmbrasil](https://github.com/mastodon/mastodon/pull/24958), [danielmbrasil](https://github.com/mastodon/mastodon/pull/25063), [danielmbrasil](https://github.com/mastodon/mastodon/pull/25072), [danielmbrasil](https://github.com/mastodon/mastodon/pull/25386), [danielmbrasil](https://github.com/mastodon/mastodon/pull/25595))
- Fix uncaught `ActiveRecord::StatementInvalid` in Mastodon::IpBlocksCLI ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24861))
- Fix various edge cases with local moves ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24812))
- Fix `tootctl accounts cull` crashing when encountering a domain resolving to a private address ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23378))
- Fix `tootctl accounts approve --number N` not aproving the N earliest registrations ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24605))
- Fix being unable to clear media description when editing posts ([c960657](https://github.com/mastodon/mastodon/pull/24720))
- Fix unavailable translations not falling back to English ([mgmn](https://github.com/mastodon/mastodon/pull/24727))
- Fix anonymous visitors getting a session cookie on first visit ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24584), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24650), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24664))
- Fix cutting off first letter of hashtag links sometimes in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24623))
- Fix crash in `tootctl accounts create --reattach --force` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24557), [danielmbrasil](https://github.com/mastodon/mastodon/pull/24680))
- Fix characters being emojified even when using Variation Selector 15 (text) ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20949), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24615))
- Fix uncaught ActiveRecord::StatementInvalid exception in `Mastodon::AccountsCLI#approve` ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24590))
- Fix email confirmation skip option in `tootctl accounts modify USERNAME --email EMAIL --confirm` ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24578))
- Fix tooltip for dates without time ([c960657](https://github.com/mastodon/mastodon/pull/24244))
- Fix missing loading spinner and loading more on scroll in Private Mentions column ([c960657](https://github.com/mastodon/mastodon/pull/24446))
- Fix account header image missing from `/settings/profile` on narrow screens ([c960657](https://github.com/mastodon/mastodon/pull/24433))
- Fix height of announcements not being updated when using reduced animations ([c960657](https://github.com/mastodon/mastodon/pull/24354))
- Fix inconsistent radius in advanced interface drawer ([thislight](https://github.com/mastodon/mastodon/pull/24407))
- Fix loading more trending posts on scroll in the advanced interface ([OmmyZhang](https://github.com/mastodon/mastodon/pull/24314))
- Fix poll ending notification for edited polls ([c960657](https://github.com/mastodon/mastodon/pull/24311))
- Fix max width of media in `/about` and `/privacy-policy` ([mgmn](https://github.com/mastodon/mastodon/pull/24180))
- Fix streaming API not being usable without `DATABASE_URL` ([Gargron](https://github.com/mastodon/mastodon/pull/23960))
- Fix external authentication not running onboarding code for new users ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23458))

## [4.1.6] - 2023-07-31

### Fixed

M Gemfile => Gemfile +9 -7
@@ 35,11 35,14 @@ group :pam_authentication, optional: true do
end

gem 'net-ldap', '~> 0.18'
gem 'omniauth-cas', '~> 2.0'
gem 'omniauth-saml', '~> 1.10'

# TODO: Point back at released omniauth-cas gem when PR merged
# https://github.com/dlindahl/omniauth-cas/pull/68
gem 'omniauth-cas', github: 'stanhu/omniauth-cas', ref: '4211e6d05941b4a981f9a36b49ec166cecd0e271'
gem 'omniauth-saml', '~> 2.0'
gem 'omniauth_openid_connect', '~> 0.6.1'
gem 'omniauth', '~> 1.9'
gem 'omniauth-rails_csrf_protection', '~> 0.1'
gem 'omniauth', '~> 2.0'
gem 'omniauth-rails_csrf_protection', '~> 1.0'

gem 'color_diff', '~> 0.1'
gem 'discard', '~> 1.2'


@@ 56,8 59,9 @@ gem 'httplog', '~> 1.6.2'
gem 'idn-ruby', require: 'idn'
gem 'kaminari', '~> 1.2'
gem 'link_header', '~> 0.0'
gem 'mime-types', '~> 3.4.1', require: 'mime/types/columnar'
gem 'mime-types', '~> 3.5.0', require: 'mime/types/columnar'
gem 'nokogiri', '~> 1.15'
gem 'nsa', github: 'jhawthorn/nsa', ref: 'e020fcc3a54d993ab45b7194d89ab720296c111b'
gem 'oj', '~> 3.14'
gem 'ox', '~> 2.14'
gem 'parslet'


@@ 182,9 186,7 @@ group :development, :test do
  gem 'ruby-prof', require: false
  gem 'stackprof', require: false
  gem 'test-prof'
end

group :development, :test do
  # RSpec runner for rails
  gem 'rspec-rails', '~> 6.0'
end

M Gemfile.lock => Gemfile.lock +113 -90
@@ 8,6 8,17 @@ GIT
      jwt (~> 2.0)

GIT
  remote: https://github.com/jhawthorn/nsa.git
  revision: e020fcc3a54d993ab45b7194d89ab720296c111b
  ref: e020fcc3a54d993ab45b7194d89ab720296c111b
  specs:
    nsa (0.2.8)
      activesupport (>= 4.2, < 7.2)
      concurrent-ruby (~> 1.0, >= 1.0.2)
      sidekiq (>= 3.5)
      statsd-ruby (~> 1.4, >= 1.4.0)

GIT
  remote: https://github.com/mastodon/rails-settings-cached.git
  revision: 86328ef0bd04ce21cc0504ff5e334591e8c2ccab
  branch: v0.6.6-aliases-true


@@ 15,50 26,60 @@ GIT
    rails-settings-cached (0.6.6)
      rails (>= 4.2.0)

GIT
  remote: https://github.com/stanhu/omniauth-cas.git
  revision: 4211e6d05941b4a981f9a36b49ec166cecd0e271
  ref: 4211e6d05941b4a981f9a36b49ec166cecd0e271
  specs:
    omniauth-cas (2.0.0)
      addressable (~> 2.3)
      nokogiri (~> 1.5)
      omniauth (>= 1.2, < 3)

GEM
  remote: https://rubygems.org/
  specs:
    actioncable (7.0.6)
      actionpack (= 7.0.6)
      activesupport (= 7.0.6)
    actioncable (7.0.7)
      actionpack (= 7.0.7)
      activesupport (= 7.0.7)
      nio4r (~> 2.0)
      websocket-driver (>= 0.6.1)
    actionmailbox (7.0.6)
      actionpack (= 7.0.6)
      activejob (= 7.0.6)
      activerecord (= 7.0.6)
      activestorage (= 7.0.6)
      activesupport (= 7.0.6)
    actionmailbox (7.0.7)
      actionpack (= 7.0.7)
      activejob (= 7.0.7)
      activerecord (= 7.0.7)
      activestorage (= 7.0.7)
      activesupport (= 7.0.7)
      mail (>= 2.7.1)
      net-imap
      net-pop
      net-smtp
    actionmailer (7.0.6)
      actionpack (= 7.0.6)
      actionview (= 7.0.6)
      activejob (= 7.0.6)
      activesupport (= 7.0.6)
    actionmailer (7.0.7)
      actionpack (= 7.0.7)
      actionview (= 7.0.7)
      activejob (= 7.0.7)
      activesupport (= 7.0.7)
      mail (~> 2.5, >= 2.5.4)
      net-imap
      net-pop
      net-smtp
      rails-dom-testing (~> 2.0)
    actionpack (7.0.6)
      actionview (= 7.0.6)
      activesupport (= 7.0.6)
    actionpack (7.0.7)
      actionview (= 7.0.7)
      activesupport (= 7.0.7)
      rack (~> 2.0, >= 2.2.4)
      rack-test (>= 0.6.3)
      rails-dom-testing (~> 2.0)
      rails-html-sanitizer (~> 1.0, >= 1.2.0)
    actiontext (7.0.6)
      actionpack (= 7.0.6)
      activerecord (= 7.0.6)
      activestorage (= 7.0.6)
      activesupport (= 7.0.6)
    actiontext (7.0.7)
      actionpack (= 7.0.7)
      activerecord (= 7.0.7)
      activestorage (= 7.0.7)
      activesupport (= 7.0.7)
      globalid (>= 0.6.0)
      nokogiri (>= 1.8.5)
    actionview (7.0.6)
      activesupport (= 7.0.6)
    actionview (7.0.7)
      activesupport (= 7.0.7)
      builder (~> 3.1)
      erubi (~> 1.4)
      rails-dom-testing (~> 2.0)


@@ 68,22 89,22 @@ GEM
      activemodel (>= 4.1, < 7.1)
      case_transform (>= 0.2)
      jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
    activejob (7.0.6)
      activesupport (= 7.0.6)
    activejob (7.0.7)
      activesupport (= 7.0.7)
      globalid (>= 0.3.6)
    activemodel (7.0.6)
      activesupport (= 7.0.6)
    activerecord (7.0.6)
      activemodel (= 7.0.6)
      activesupport (= 7.0.6)
    activestorage (7.0.6)
      actionpack (= 7.0.6)
      activejob (= 7.0.6)
      activerecord (= 7.0.6)
      activesupport (= 7.0.6)
    activemodel (7.0.7)
      activesupport (= 7.0.7)
    activerecord (7.0.7)
      activemodel (= 7.0.7)
      activesupport (= 7.0.7)
    activestorage (7.0.7)
      actionpack (= 7.0.7)
      activejob (= 7.0.7)
      activerecord (= 7.0.7)
      activesupport (= 7.0.7)
      marcel (~> 1.0)
      mini_mime (>= 1.1.0)
    activesupport (7.0.6)
    activesupport (7.0.7)
      concurrent-ruby (~> 1.0, >= 1.0.2)
      i18n (>= 1.6, < 2)
      minitest (>= 5.1)


@@ 103,8 124,8 @@ GEM
    attr_required (1.0.1)
    awrence (1.2.1)
    aws-eventstream (1.2.0)
    aws-partitions (1.791.0)
    aws-sdk-core (3.178.0)
    aws-partitions (1.793.0)
    aws-sdk-core (3.180.3)
      aws-eventstream (~> 1, >= 1.0.2)
      aws-partitions (~> 1, >= 1.651.0)
      aws-sigv4 (~> 1.5)


@@ 112,8 133,8 @@ GEM
    aws-sdk-kms (1.71.0)
      aws-sdk-core (~> 3, >= 3.177.0)
      aws-sigv4 (~> 1.1)
    aws-sdk-s3 (1.131.0)
      aws-sdk-core (~> 3, >= 3.177.0)
    aws-sdk-s3 (1.132.1)
      aws-sdk-core (~> 3, >= 3.179.0)
      aws-sdk-kms (~> 1)
      aws-sigv4 (~> 1.6)
    aws-sigv4 (1.6.0)


@@ 311,7 332,7 @@ GEM
      activesupport (>= 5.1)
      haml (>= 4.0.6)
      railties (>= 5.1)
    haml_lint (0.49.2)
    haml_lint (0.49.3)
      haml (>= 4.0, < 6.2)
      parallel (~> 1.10)
      rainbow


@@ 407,7 428,7 @@ GEM
    llhttp-ffi (0.4.0)
      ffi-compiler (~> 1.0)
      rake (~> 13.0)
    lograge (0.12.0)
    lograge (0.13.0)
      actionpack (>= 4)
      activesupport (>= 4)
      railties (>= 4)


@@ 430,12 451,12 @@ GEM
      hashie (~> 5.0)
    memory_profiler (1.0.1)
    method_source (1.0.0)
    mime-types (3.4.1)
    mime-types (3.5.0)
      mime-types-data (~> 3.2015)
    mime-types-data (3.2023.0218.1)
    mini_mime (1.1.2)
    mini_portile2 (2.8.2)
    minitest (5.18.1)
    mime-types-data (3.2023.0808)
    mini_mime (1.1.5)
    mini_portile2 (2.8.4)
    minitest (5.19.0)
    msgpack (1.7.1)
    multi_json (1.15.0)
    multipart-post (2.3.0)


@@ 443,7 464,7 @@ GEM
      uri
    net-http-persistent (4.0.2)
      connection_pool (~> 2.2)
    net-imap (0.3.6)
    net-imap (0.3.7)
      date
      net-protocol
    net-ldap (0.18.0)


@@ 461,19 482,16 @@ GEM
      mini_portile2 (~> 2.8.2)
      racc (~> 1.4)
    oj (3.15.0)
    omniauth (1.9.2)
    omniauth (2.1.1)
      hashie (>= 3.4.6)
      rack (>= 1.6.2, < 3)
    omniauth-cas (2.0.0)
      addressable (~> 2.3)
      nokogiri (~> 1.5)
      omniauth (~> 1.2)
    omniauth-rails_csrf_protection (0.1.2)
      rack (>= 2.2.3)
      rack-protection
    omniauth-rails_csrf_protection (1.0.1)
      actionpack (>= 4.2)
      omniauth (>= 1.3.1)
    omniauth-saml (1.10.3)
      omniauth (~> 1.3, >= 1.3.2)
      ruby-saml (~> 1.9)
      omniauth (~> 2.0)
    omniauth-saml (2.1.0)
      omniauth (~> 2.0)
      ruby-saml (~> 1.12)
    omniauth_openid_connect (0.6.1)
      omniauth (>= 1.9, < 3)
      openid_connect (~> 1.1)


@@ 520,9 538,9 @@ GEM
      activesupport (>= 3.0.0)
    raabro (1.4.0)
    racc (1.7.1)
    rack (2.2.7)
    rack-attack (6.6.1)
      rack (>= 1.0, < 3)
    rack (2.2.8)
    rack-attack (6.7.0)
      rack (>= 1.0, < 4)
    rack-cors (2.0.1)
      rack (>= 2.0.0)
    rack-oauth2 (1.21.3)


@@ 531,30 549,33 @@ GEM
      httpclient
      json-jwt (>= 1.11.0)
      rack (>= 2.1.0)
    rack-protection (3.0.5)
      rack
    rack-proxy (0.7.6)
      rack
    rack-test (2.1.0)
      rack (>= 1.3)
    rails (7.0.6)
      actioncable (= 7.0.6)
      actionmailbox (= 7.0.6)
      actionmailer (= 7.0.6)
      actionpack (= 7.0.6)
      actiontext (= 7.0.6)
      actionview (= 7.0.6)
      activejob (= 7.0.6)
      activemodel (= 7.0.6)
      activerecord (= 7.0.6)
      activestorage (= 7.0.6)
      activesupport (= 7.0.6)
    rails (7.0.7)
      actioncable (= 7.0.7)
      actionmailbox (= 7.0.7)
      actionmailer (= 7.0.7)
      actionpack (= 7.0.7)
      actiontext (= 7.0.7)
      actionview (= 7.0.7)
      activejob (= 7.0.7)
      activemodel (= 7.0.7)
      activerecord (= 7.0.7)
      activestorage (= 7.0.7)
      activesupport (= 7.0.7)
      bundler (>= 1.15.0)
      railties (= 7.0.6)
      railties (= 7.0.7)
    rails-controller-testing (1.0.5)
      actionpack (>= 5.0.1.rc1)
      actionview (>= 5.0.1.rc1)
      activesupport (>= 5.0.1.rc1)
    rails-dom-testing (2.0.3)
      activesupport (>= 4.2.0)
    rails-dom-testing (2.1.1)
      activesupport (>= 5.0.0)
      minitest
      nokogiri (>= 1.6)
    rails-html-sanitizer (1.6.0)
      loofah (~> 2.21)


@@ 562,9 583,9 @@ GEM
    rails-i18n (7.0.7)
      i18n (>= 0.7, < 2)
      railties (>= 6.0.0, < 8)
    railties (7.0.6)
      actionpack (= 7.0.6)
      activesupport (= 7.0.6)
    railties (7.0.7)
      actionpack (= 7.0.7)
      activesupport (= 7.0.7)
      method_source
      rake (>= 12.2)
      thor (~> 1.0)


@@ 661,7 682,7 @@ GEM
    scenic (1.7.0)
      activerecord (>= 4.0.0)
      railties (>= 4.0.0)
    selenium-webdriver (4.9.1)
    selenium-webdriver (4.11.0)
      rexml (~> 3.2, >= 3.2.5)
      rubyzip (>= 1.2.2, < 3.0)
      websocket (~> 1.0)


@@ 705,6 726,7 @@ GEM
      net-scp (>= 1.1.2)
      net-ssh (>= 2.8.0)
    stackprof (0.2.25)
    statsd-ruby (1.5.0)
    stoplight (3.0.1)
      redlock (~> 1.0)
    strong_migrations (0.8.0)


@@ 719,7 741,7 @@ GEM
      unicode-display_width (>= 1.1.1, < 3)
    terrapin (0.6.0)
      climate_control (>= 0.0.3, < 1.0)
    test-prof (1.2.1)
    test-prof (1.2.2)
    thor (1.2.2)
    tilt (2.2.0)
    timeout (0.4.0)


@@ 779,14 801,14 @@ GEM
      railties (>= 5.2)
      semantic_range (>= 2.3.0)
    websocket (1.2.9)
    websocket-driver (0.7.5)
    websocket-driver (0.7.6)
      websocket-extensions (>= 0.1.0)
    websocket-extensions (0.1.5)
    wisper (2.0.1)
    xorcist (1.1.3)
    xpath (3.2.0)
      nokogiri (~> 1.8)
    zeitwerk (2.6.8)
    zeitwerk (2.6.11)

PLATFORMS
  ruby


@@ 852,15 874,16 @@ DEPENDENCIES
  mario-redis-lock (~> 1.2)
  md-paperclip-azure (~> 2.2)
  memory_profiler
  mime-types (~> 3.4.1)
  mime-types (~> 3.5.0)
  net-http (~> 0.3.2)
  net-ldap (~> 0.18)
  nokogiri (~> 1.15)
  nsa!
  oj (~> 3.14)
  omniauth (~> 1.9)
  omniauth-cas (~> 2.0)
  omniauth-rails_csrf_protection (~> 0.1)
  omniauth-saml (~> 1.10)
  omniauth (~> 2.0)
  omniauth-cas!
  omniauth-rails_csrf_protection (~> 1.0)
  omniauth-saml (~> 2.0)
  omniauth_openid_connect (~> 0.6.1)
  ox (~> 2.14)
  parslet

M app/chewy/accounts_index.rb => app/chewy/accounts_index.rb +1 -1
@@ 33,7 33,7 @@ class AccountsIndex < Chewy::Index
      },

      verbatim: {
        tokenizer: 'whitespace',
        tokenizer: 'standard',
        filter: %w(lowercase asciifolding cjk_width),
      },


M app/controllers/admin/domain_blocks_controller.rb => app/controllers/admin/domain_blocks_controller.rb +1 -1
@@ 40,7 40,7 @@ module Admin
      end

      # Allow transparently upgrading a domain block
      if existing_domain_block.present?
      if existing_domain_block.present? && existing_domain_block.domain == TagManager.instance.normalize_domain(@domain_block.domain.strip)
        @domain_block = existing_domain_block
        @domain_block.assign_attributes(resource_params)
      end

M app/controllers/concerns/captcha_concern.rb => app/controllers/concerns/captcha_concern.rb +3 -1
@@ 42,7 42,7 @@ module CaptchaConcern
  end

  def extend_csp_for_captcha!
    policy = request.content_security_policy
    policy = request.content_security_policy&.clone

    return unless captcha_required? && policy.present?



@@ 54,6 54,8 @@ module CaptchaConcern

      policy.send(directive, *values)
    end

    request.content_security_policy = policy
  end

  def render_captcha

M app/controllers/concerns/web_app_controller_concern.rb => app/controllers/concerns/web_app_controller_concern.rb +1 -1
@@ 12,7 12,7 @@ module WebAppControllerConcern
  end

  def skip_csrf_meta_tags?
    current_user.nil?
    !(ENV['OMNIAUTH_ONLY'] == 'true' && Devise.omniauth_providers.length == 1) && current_user.nil?
  end

  def set_app_body_class

M app/javascript/flavours/glitch/actions/importer/normalizer.js => app/javascript/flavours/glitch/actions/importer/normalizer.js +4 -1
@@ 75,7 75,10 @@ export function normalizeStatus(status, normalOldStatus, settings) {
    normalStatus.contentHtml = normalOldStatus.get('contentHtml');
    normalStatus.spoilerHtml = normalOldStatus.get('spoilerHtml');
    normalStatus.hidden = normalOldStatus.get('hidden');
    normalStatus.translation = normalOldStatus.get('translation');

    if (normalOldStatus.get('translation')) {
      normalStatus.translation = normalOldStatus.get('translation');
    }
  } else {
    const spoilerText   = normalStatus.spoiler_text || '';
    const searchContent = ([spoilerText, status.content].concat((status.poll && status.poll.options) ? status.poll.options.map(option => option.title) : [])).concat(status.media_attachments.map(att => att.description)).join('\n\n').replace(/<br\s*\/?>/g, '\n').replace(/<\/p><p>/g, '\n\n');

M app/javascript/flavours/glitch/actions/timelines.js => app/javascript/flavours/glitch/actions/timelines.js +1 -1
@@ 157,7 157,7 @@ export const expandHomeTimeline            = ({ maxId } = {}, done = noOp) => ex
export const expandPublicTimeline          = ({ maxId, onlyMedia, onlyRemote, allowLocalOnly } = {}, done = noOp) => expandTimeline(`public${onlyRemote ? ':remote' : (allowLocalOnly ? ':allow_local_only' : '')}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, allow_local_only: !!allowLocalOnly, max_id: maxId, only_media: !!onlyMedia }, done);
export const expandCommunityTimeline       = ({ maxId, onlyMedia } = {}, done = noOp) => expandTimeline(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, max_id: maxId, only_media: !!onlyMedia }, done);
export const expandDirectTimeline          = ({ maxId } = {}, done = noOp) => expandTimeline('direct', '/api/v1/timelines/direct', { max_id: maxId }, done);
export const expandAccountTimeline         = (accountId, { maxId, withReplies, tagged } = {}) => expandTimeline(`account:${accountId}${withReplies ? ':with_replies' : ''}${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { exclude_replies: !withReplies, tagged, max_id: maxId });
export const expandAccountTimeline         = (accountId, { maxId, withReplies, tagged } = {}) => expandTimeline(`account:${accountId}${withReplies ? ':with_replies' : ''}${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { exclude_replies: !withReplies, exclude_reblogs: withReplies, tagged, max_id: maxId });
export const expandAccountFeaturedTimeline = (accountId, { tagged } = {}) => expandTimeline(`account:${accountId}:pinned`, `/api/v1/accounts/${accountId}/statuses`, { pinned: true, tagged });
export const expandAccountMediaTimeline    = (accountId, { maxId } = {}) => expandTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { max_id: maxId, only_media: true, limit: 40 });
export const expandListTimeline            = (id, { maxId } = {}, done = noOp) => expandTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`, { max_id: maxId }, done);

M app/javascript/flavours/glitch/features/explore/components/story.jsx => app/javascript/flavours/glitch/features/explore/components/story.jsx +3 -2
@@ 23,6 23,7 @@ export default class Story extends PureComponent {
    author: PropTypes.string,
    sharedTimes: PropTypes.number,
    thumbnail: PropTypes.string,
    thumbnailDescription: PropTypes.string,
    blurhash: PropTypes.string,
    expanded: PropTypes.bool,
  };


@@ 34,7 35,7 @@ export default class Story extends PureComponent {
  handleImageLoad = () => this.setState({ thumbnailLoaded: true });

  render () {
    const { expanded, url, title, lang, publisher, author, publishedAt, sharedTimes, thumbnail, blurhash } = this.props;
    const { expanded, url, title, lang, publisher, author, publishedAt, sharedTimes, thumbnail, thumbnailDescription, blurhash } = this.props;

    const { thumbnailLoaded } = this.state;



@@ 50,7 51,7 @@ export default class Story extends PureComponent {
          {thumbnail ? (
            <>
              <div className={classNames('story__thumbnail__preview', { 'story__thumbnail__preview--hidden': thumbnailLoaded })}><Blurhash hash={blurhash} /></div>
              <img src={thumbnail} onLoad={this.handleImageLoad} alt='' role='presentation' />
              <img src={thumbnail} onLoad={this.handleImageLoad} alt={thumbnailDescription} title={thumbnailDescription} lang={lang} />
            </>
          ) : <Skeleton />}
        </div>

M app/javascript/flavours/glitch/features/explore/links.jsx => app/javascript/flavours/glitch/features/explore/links.jsx +1 -0
@@ 67,6 67,7 @@ class Links extends PureComponent {
            author={link.get('author_name')}
            sharedTimes={link.getIn(['history', 0, 'accounts']) * 1 + link.getIn(['history', 1, 'accounts']) * 1}
            thumbnail={link.get('image')}
            thumbnailDescription={link.get('image_description')}
            blurhash={link.get('blurhash')}
          />
        ))}

A app/javascript/flavours/glitch/features/hashtag_timeline/components/hashtag_header.jsx => app/javascript/flavours/glitch/features/hashtag_timeline/components/hashtag_header.jsx +79 -0
@@ 0,0 1,79 @@
import PropTypes from 'prop-types';

import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';

import ImmutablePropTypes from 'react-immutable-proptypes';

import Button from 'flavours/glitch/components/button';
import { ShortNumber } from 'flavours/glitch/components/short_number';

const messages = defineMessages({
  followHashtag: { id: 'hashtag.follow', defaultMessage: 'Follow hashtag' },
  unfollowHashtag: { id: 'hashtag.unfollow', defaultMessage: 'Unfollow hashtag' },
});

const usesRenderer = (displayNumber, pluralReady) => (
  <FormattedMessage
    id='hashtag.counter_by_uses'
    defaultMessage='{count, plural, one {{counter} post} other {{counter} posts}}'
    values={{
      count: pluralReady,
      counter: <strong>{displayNumber}</strong>,
    }}
  />
);

const peopleRenderer = (displayNumber, pluralReady) => (
  <FormattedMessage
    id='hashtag.counter_by_accounts'
    defaultMessage='{count, plural, one {{counter} participant} other {{counter} participants}}'
    values={{
      count: pluralReady,
      counter: <strong>{displayNumber}</strong>,
    }}
  />
);

const usesTodayRenderer = (displayNumber, pluralReady) => (
  <FormattedMessage
    id='hashtag.counter_by_uses_today'
    defaultMessage='{count, plural, one {{counter} post} other {{counter} posts}} today'
    values={{
      count: pluralReady,
      counter: <strong>{displayNumber}</strong>,
    }}
  />
);

export const HashtagHeader = injectIntl(({ tag, intl, disabled, onClick }) => {
  if (!tag) {
    return null;
  }

  const [uses, people] = tag.get('history').reduce((arr, day) => [arr[0] + day.get('uses') * 1, arr[1] + day.get('accounts') * 1], [0, 0]);
  const dividingCircle = <span aria-hidden>{' · '}</span>;

  return (
    <div className='hashtag-header'>
      <div className='hashtag-header__header'>
        <h1>#{tag.get('name')}</h1>
        <Button onClick={onClick} text={intl.formatMessage(tag.get('following') ? messages.unfollowHashtag : messages.followHashtag)} disabled={disabled} />
      </div>

      <div>
        <ShortNumber value={uses} renderer={usesRenderer} />
        {dividingCircle}
        <ShortNumber value={people} renderer={peopleRenderer} />
        {dividingCircle}
        <ShortNumber value={tag.getIn(['history', 0, 'uses']) * 1} renderer={usesTodayRenderer} />
      </div>
    </div>
  );
});

HashtagHeader.propTypes = {
  tag: ImmutablePropTypes.map,
  disabled: PropTypes.bool,
  onClick: PropTypes.func,
  intl: PropTypes.object,
};
\ No newline at end of file

M app/javascript/flavours/glitch/features/hashtag_timeline/index.jsx => app/javascript/flavours/glitch/features/hashtag_timeline/index.jsx +6 -29
@@ 1,9 1,8 @@
import PropTypes from 'prop-types';
import { PureComponent } from 'react';

import { injectIntl, FormattedMessage, defineMessages } from 'react-intl';
import { FormattedMessage } from 'react-intl';

import classNames from 'classnames';
import { Helmet } from 'react-helmet';

import ImmutablePropTypes from 'react-immutable-proptypes';


@@ 17,17 16,11 @@ import { fetchHashtag, followHashtag, unfollowHashtag } from 'flavours/glitch/ac
import { expandHashtagTimeline, clearTimeline } from 'flavours/glitch/actions/timelines';
import Column from 'flavours/glitch/components/column';
import ColumnHeader from 'flavours/glitch/components/column_header';
import { Icon } from 'flavours/glitch/components/icon';
import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';

import { HashtagHeader } from './components/hashtag_header';
import ColumnSettingsContainer from './containers/column_settings_container';


const messages = defineMessages({
  followHashtag: { id: 'hashtag.follow', defaultMessage: 'Follow hashtag' },
  unfollowHashtag: { id: 'hashtag.unfollow', defaultMessage: 'Unfollow hashtag' },
});

const mapStateToProps = (state, props) => ({
  hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}${props.params.local ? ':local' : ''}`, 'unread']) > 0,
  tag: state.getIn(['tags', props.params.id]),


@@ 48,7 41,6 @@ class HashtagTimeline extends PureComponent {
    hasUnread: PropTypes.bool,
    tag: ImmutablePropTypes.map,
    multiColumn: PropTypes.bool,
    intl: PropTypes.object,
  };

  handlePin = () => {


@@ 188,27 180,11 @@ class HashtagTimeline extends PureComponent {
  };

  render () {
    const { hasUnread, columnId, multiColumn, tag, intl } = this.props;
    const { hasUnread, columnId, multiColumn, tag } = this.props;
    const { id, local } = this.props.params;
    const pinned = !!columnId;
    const { signedIn } = this.context.identity;

    let followButton;

    if (tag) {
      const following = tag.get('following');

      const classes = classNames('column-header__button', {
        active: following,
      });

      followButton = (
        <button className={classes} onClick={this.handleFollow} disabled={!signedIn} title={intl.formatMessage(following ? messages.unfollowHashtag : messages.followHashtag)} aria-label={intl.formatMessage(following ? messages.unfollowHashtag : messages.followHashtag)}>
          <Icon id={following ? 'user-times' : 'user-plus'} fixedWidth className='column-header__icon' />
        </button>
      );
    }

    return (
      <Column bindToDocument={!multiColumn} ref={this.setRef} label={`#${id}`}>
        <ColumnHeader


@@ 220,13 196,14 @@ class HashtagTimeline extends PureComponent {
          onClick={this.handleHeaderClick}
          pinned={pinned}
          multiColumn={multiColumn}
          extraButton={followButton}
          showBackButton
        >
          {columnId && <ColumnSettingsContainer columnId={columnId} />}
        </ColumnHeader>

        <StatusListContainer
          prepend={pinned ? null : <HashtagHeader tag={tag} disabled={!signedIn} onClick={this.handleFollow} />}
          alwaysPrepend
          trackScroll={!pinned}
          scrollKey={`hashtag_timeline-${columnId}`}
          timelineId={`hashtag:${id}${local ? ':local' : ''}`}


@@ 245,4 222,4 @@ class HashtagTimeline extends PureComponent {

}

export default connect(mapStateToProps)(injectIntl(HashtagTimeline));
export default connect(mapStateToProps)(HashtagTimeline);

M app/javascript/flavours/glitch/features/interaction_modal/index.jsx => app/javascript/flavours/glitch/features/interaction_modal/index.jsx +8 -2
@@ 13,7 13,7 @@ import { openModal, closeModal } from 'flavours/glitch/actions/modal';
import api from 'flavours/glitch/api';
import Button from 'flavours/glitch/components/button';
import { Icon } from 'flavours/glitch/components/icon';
import { registrationsOpen } from 'flavours/glitch/initial_state';
import { registrationsOpen, sso_redirect } from 'flavours/glitch/initial_state';

const messages = defineMessages({
  loginPrompt: { id: 'interaction_modal.login.prompt', defaultMessage: 'Domain of your home server, e.g. mastodon.social' },


@@ 332,7 332,13 @@ class InteractionModal extends React.PureComponent {

    let signupButton;

    if (registrationsOpen) {
    if (sso_redirect) {
      signupButton = (
        <a href={sso_redirect} data-method='post' className='link-button'>
          <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
        </a>
      );
    } else if (registrationsOpen) {
      signupButton = (
        <a href='/auth/sign_up' className='link-button'>
          <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />

M app/javascript/flavours/glitch/features/status/components/card.jsx => app/javascript/flavours/glitch/features/status/components/card.jsx +2 -1
@@ 178,7 178,8 @@ export default class Card extends PureComponent {
        dummy={!useBlurhash}
      />
    );
    let thumbnail = <img src={card.get('image')} alt='' style={thumbnailStyle} onLoad={this.handleImageLoad} className='status-card__image-image' />;
    const thumbnailDescription = card.get('image_description');
    const thumbnail = <img src={card.get('image')} alt={thumbnailDescription} title={thumbnailDescription} lang={language} style={thumbnailStyle} onLoad={this.handleImageLoad} className='status-card__image-image' />;
    let spoilerButton = (
      <button type='button' onClick={this.handleReveal} className='spoiler-button__overlay'>
        <span className='spoiler-button__overlay__label'>

M app/javascript/flavours/glitch/features/ui/components/focal_point_modal.jsx => app/javascript/flavours/glitch/features/ui/components/focal_point_modal.jsx +1 -1
@@ 423,4 423,4 @@ class FocalPointModal extends ImmutablePureComponent {

export default connect(mapStateToProps, mapDispatchToProps, null, {
  forwardRef: true,
})(injectIntl(FocalPointModal, { withRef: true }));
})(injectIntl(FocalPointModal, { forwardRef: true }));

M app/javascript/flavours/glitch/features/ui/components/header.jsx => app/javascript/flavours/glitch/features/ui/components/header.jsx +26 -19
@@ 13,7 13,7 @@ import { Avatar } from 'flavours/glitch/components/avatar';
import { Icon } from 'flavours/glitch/components/icon';
import { WordmarkLogo, SymbolLogo } from 'flavours/glitch/components/logo';
import Permalink from 'flavours/glitch/components/permalink';
import { registrationsOpen, me } from 'flavours/glitch/initial_state';
import { registrationsOpen, me, sso_redirect } from 'flavours/glitch/initial_state';

const Account = connect(state => ({
  account: state.getIn(['accounts', me]),


@@ 74,28 74,35 @@ class Header extends PureComponent {
        </>
      );
    } else {
      let signupButton;

      if (registrationsOpen) {
        signupButton = (
          <a href={signupUrl} className='button'>
            <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
          </a>
        );
      if (sso_redirect) {
        content = (
            <a href={sso_redirect} data-method='post' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sso_redirect' defaultMessage='Login or Register' /></a>
        )
      } else {
        signupButton = (
          <button className='button' onClick={openClosedRegistrationsModal}>
            <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
          </button>
        let signupButton;

        if (registrationsOpen) {
          signupButton = (
            <a href={signupUrl} className='button'>
              <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
            </a>
          );
        } else {
          signupButton = (
            <button className='button' onClick={openClosedRegistrationsModal}>
              <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
            </button>
          );
        }

        content = (
          <>
            {signupButton}
            <a href='/auth/sign_in' className='button button-tertiary'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Login' /></a>
          </>
        );
      }

      content = (
        <>
          {signupButton}
          <a href='/auth/sign_in' className='button button-tertiary'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Login' /></a>
        </>
      );
    }

    return (

M app/javascript/flavours/glitch/features/ui/components/modal_root.jsx => app/javascript/flavours/glitch/features/ui/components/modal_root.jsx +1 -8
@@ 105,14 105,7 @@ export default class ModalRoot extends PureComponent {

  handleClose = (ignoreFocus = false) => {
    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`.
    }
    const message = this._modal?.getCloseConfirmationMessage?.();
    onClose(message, ignoreFocus);
  };


M app/javascript/flavours/glitch/features/ui/components/sign_in_banner.jsx => app/javascript/flavours/glitch/features/ui/components/sign_in_banner.jsx +10 -1
@@ 3,7 3,7 @@ import { useCallback } from 'react';
import { FormattedMessage } from 'react-intl';

import { openModal } from 'flavours/glitch/actions/modal';
import { registrationsOpen } from 'flavours/glitch/initial_state';
import { registrationsOpen, sso_redirect } from 'flavours/glitch/initial_state';
import { useAppDispatch, useAppSelector } from 'flavours/glitch/store';

const SignInBanner = () => {


@@ 18,6 18,15 @@ const SignInBanner = () => {

  const signupUrl = useAppSelector((state) => state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up');

  if (sso_redirect) {
    return (
      <div className='sign-in-banner'>
        <p><FormattedMessage id='sign_in_banner.text' defaultMessage='Login to follow profiles or hashtags, favorite, share and reply to posts. You can also interact from your account on a different server.' /></p>
        <a href={sso_redirect} data-method='post' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sso_redirect' defaultMessage='Login or Register' /></a>
      </div>
    )
  }

  if (registrationsOpen) {
    signupButton = (
      <a href={signupUrl} className='button button--block'>

M app/javascript/flavours/glitch/initial_state.js => app/javascript/flavours/glitch/initial_state.js +2 -0
@@ 82,6 82,7 @@
 * @property {boolean} use_blurhash
 * @property {boolean=} use_pending_items
 * @property {string} version
 * @property {string} sso_redirect
 * @property {boolean} translation_enabled
 * @property {string} status_page_url
 * @property {boolean} system_emoji_font


@@ 160,6 161,7 @@ export const usePendingItems = getMeta('use_pending_items');
export const version = getMeta('version');
export const languages = initialState?.languages;
export const statusPageUrl = getMeta('status_page_url');
export const sso_redirect = getMeta('sso_redirect');

// Glitch-soc-specific settings
export const maxChars = (initialState && initialState.max_toot_chars) || 500;

M app/javascript/flavours/glitch/styles/components/columns.scss => app/javascript/flavours/glitch/styles/components/columns.scss +30 -0
@@ 1038,3 1038,33 @@ $ui-header-height: 55px;
    }
  }
}

.hashtag-header {
  border-bottom: 1px solid lighten($ui-base-color, 8%);
  padding: 15px;
  font-size: 17px;
  line-height: 22px;
  color: $darker-text-color;

  strong {
    font-weight: 700;
  }

  &__header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 15px;
    gap: 15px;

    h1 {
      color: $primary-text-color;
      white-space: nowrap;
      text-overflow: ellipsis;
      overflow: hidden;
      font-size: 22px;
      line-height: 33px;
      font-weight: 700;
    }
  }
}

M app/javascript/flavours/glitch/styles/components/misc.scss => app/javascript/flavours/glitch/styles/components/misc.scss +12 -1
@@ 1345,7 1345,7 @@ button.icon-button.active i.fa-retweet {
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba($black, 0.5);
    background: transparent;
    width: 100%;
    height: 100%;
    padding: 0;


@@ 1354,6 1354,10 @@ button.icon-button.active i.fa-retweet {
    color: $white;

    &__label {
      background-color: rgba($black, 0.45);
      backdrop-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%);
      border-radius: 6px;
      padding: 10px 15px;
      display: flex;
      align-items: center;
      justify-content: center;


@@ 1367,6 1371,13 @@ button.icon-button.active i.fa-retweet {
      font-weight: 400;
      font-size: 13px;
    }

    &:hover,
    &:focus {
      .spoiler-button__overlay__label {
        background-color: rgba($black, 0.9);
      }
    }
  }
}


M app/javascript/flavours/glitch/styles/components/modal.scss => app/javascript/flavours/glitch/styles/components/modal.scss +5 -4
@@ 719,15 719,16 @@
  }

  .button.button-secondary {
    border-color: $ui-button-secondary-border-color;
    color: $ui-button-secondary-color;
    border-color: $inverted-text-color;
    color: $inverted-text-color;
    flex: 0 0 auto;

    &:hover,
    &:focus,
    &:active {
      border-color: $ui-button-secondary-focus-background-color;
      color: $ui-button-secondary-focus-color;
      background: transparent;
      border-color: $ui-button-background-color;
      color: $ui-button-background-color;
    }
  }


M app/javascript/flavours/glitch/styles/mastodon-light/diff.scss => app/javascript/flavours/glitch/styles/mastodon-light/diff.scss +4 -0
@@ 420,6 420,10 @@ html {
  border-top: 0;
}

.column-settings__hashtags .column-select__option {
  color: $white;
}

.dashboard__quick-access,
.focal-point__preview strong,
.admin-wrapper .content__heading__tabs a.selected {

M app/javascript/mastodon/actions/importer/normalizer.js => app/javascript/mastodon/actions/importer/normalizer.js +4 -1
@@ 76,7 76,10 @@ export function normalizeStatus(status, normalOldStatus) {
    normalStatus.spoilerHtml = normalOldStatus.get('spoilerHtml');
    normalStatus.spoiler_text = normalOldStatus.get('spoiler_text');
    normalStatus.hidden = normalOldStatus.get('hidden');
    normalStatus.translation = normalOldStatus.get('translation');

    if (normalOldStatus.get('translation')) {
      normalStatus.translation = normalOldStatus.get('translation');
    }
  } else {
    // If the status has a CW but no contents, treat the CW as if it were the
    // status' contents, to avoid having a CW toggle with seemingly no effect.

M app/javascript/mastodon/actions/timelines.js => app/javascript/mastodon/actions/timelines.js +1 -1
@@ 145,7 145,7 @@ export function fillTimelineGaps(timelineId, path, params = {}, done = noOp) {
export const expandHomeTimeline            = ({ maxId } = {}, done = noOp) => expandTimeline('home', '/api/v1/timelines/home', { max_id: maxId }, done);
export const expandPublicTimeline          = ({ maxId, onlyMedia, onlyRemote } = {}, done = noOp) => expandTimeline(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, max_id: maxId, only_media: !!onlyMedia }, done);
export const expandCommunityTimeline       = ({ maxId, onlyMedia } = {}, done = noOp) => expandTimeline(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, max_id: maxId, only_media: !!onlyMedia }, done);
export const expandAccountTimeline         = (accountId, { maxId, withReplies, tagged } = {}) => expandTimeline(`account:${accountId}${withReplies ? ':with_replies' : ''}${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { exclude_replies: !withReplies, tagged, max_id: maxId });
export const expandAccountTimeline         = (accountId, { maxId, withReplies, tagged } = {}) => expandTimeline(`account:${accountId}${withReplies ? ':with_replies' : ''}${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { exclude_replies: !withReplies, exclude_reblogs: withReplies, tagged, max_id: maxId });
export const expandAccountFeaturedTimeline = (accountId, { tagged } = {}) => expandTimeline(`account:${accountId}:pinned${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { pinned: true, tagged });
export const expandAccountMediaTimeline    = (accountId, { maxId } = {}) => expandTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { max_id: maxId, only_media: true, limit: 40 });
export const expandListTimeline            = (id, { maxId } = {}, done = noOp) => expandTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`, { max_id: maxId }, done);

M app/javascript/mastodon/features/explore/components/story.jsx => app/javascript/mastodon/features/explore/components/story.jsx +3 -2
@@ 22,6 22,7 @@ export default class Story extends PureComponent {
    author: PropTypes.string,
    sharedTimes: PropTypes.number,
    thumbnail: PropTypes.string,
    thumbnailDescription: PropTypes.string,
    blurhash: PropTypes.string,
    expanded: PropTypes.bool,
  };


@@ 33,7 34,7 @@ export default class Story extends PureComponent {
  handleImageLoad = () => this.setState({ thumbnailLoaded: true });

  render () {
    const { expanded, url, title, lang, publisher, author, publishedAt, sharedTimes, thumbnail, blurhash } = this.props;
    const { expanded, url, title, lang, publisher, author, publishedAt, sharedTimes, thumbnail, thumbnailDescription, blurhash } = this.props;

    const { thumbnailLoaded } = this.state;



@@ 49,7 50,7 @@ export default class Story extends PureComponent {
          {thumbnail ? (
            <>
              <div className={classNames('story__thumbnail__preview', { 'story__thumbnail__preview--hidden': thumbnailLoaded })}><Blurhash hash={blurhash} /></div>
              <img src={thumbnail} onLoad={this.handleImageLoad} alt='' role='presentation' />
              <img src={thumbnail} onLoad={this.handleImageLoad} alt={thumbnailDescription} title={thumbnailDescription} lang={lang} />
            </>
          ) : <Skeleton />}
        </div>

M app/javascript/mastodon/features/explore/links.jsx => app/javascript/mastodon/features/explore/links.jsx +1 -0
@@ 67,6 67,7 @@ class Links extends PureComponent {
            author={link.get('author_name')}
            sharedTimes={link.getIn(['history', 0, 'accounts']) * 1 + link.getIn(['history', 1, 'accounts']) * 1}
            thumbnail={link.get('image')}
            thumbnailDescription={link.get('image_description')}
            blurhash={link.get('blurhash')}
          />
        ))}

A app/javascript/mastodon/features/hashtag_timeline/components/hashtag_header.jsx => app/javascript/mastodon/features/hashtag_timeline/components/hashtag_header.jsx +79 -0
@@ 0,0 1,79 @@
import PropTypes from 'prop-types';

import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';

import ImmutablePropTypes from 'react-immutable-proptypes';

import Button from 'mastodon/components/button';
import { ShortNumber } from 'mastodon/components/short_number';

const messages = defineMessages({
  followHashtag: { id: 'hashtag.follow', defaultMessage: 'Follow hashtag' },
  unfollowHashtag: { id: 'hashtag.unfollow', defaultMessage: 'Unfollow hashtag' },
});

const usesRenderer = (displayNumber, pluralReady) => (
  <FormattedMessage
    id='hashtag.counter_by_uses'
    defaultMessage='{count, plural, one {{counter} post} other {{counter} posts}}'
    values={{
      count: pluralReady,
      counter: <strong>{displayNumber}</strong>,
    }}
  />
);

const peopleRenderer = (displayNumber, pluralReady) => (
  <FormattedMessage
    id='hashtag.counter_by_accounts'
    defaultMessage='{count, plural, one {{counter} participant} other {{counter} participants}}'
    values={{
      count: pluralReady,
      counter: <strong>{displayNumber}</strong>,
    }}
  />
);

const usesTodayRenderer = (displayNumber, pluralReady) => (
  <FormattedMessage
    id='hashtag.counter_by_uses_today'
    defaultMessage='{count, plural, one {{counter} post} other {{counter} posts}} today'
    values={{
      count: pluralReady,
      counter: <strong>{displayNumber}</strong>,
    }}
  />
);

export const HashtagHeader = injectIntl(({ tag, intl, disabled, onClick }) => {
  if (!tag) {
    return null;
  }

  const [uses, people] = tag.get('history').reduce((arr, day) => [arr[0] + day.get('uses') * 1, arr[1] + day.get('accounts') * 1], [0, 0]);
  const dividingCircle = <span aria-hidden>{' · '}</span>;

  return (
    <div className='hashtag-header'>
      <div className='hashtag-header__header'>
        <h1>#{tag.get('name')}</h1>
        <Button onClick={onClick} text={intl.formatMessage(tag.get('following') ? messages.unfollowHashtag : messages.followHashtag)} disabled={disabled} />
      </div>

      <div>
        <ShortNumber value={uses} renderer={usesRenderer} />
        {dividingCircle}
        <ShortNumber value={people} renderer={peopleRenderer} />
        {dividingCircle}
        <ShortNumber value={tag.getIn(['history', 0, 'uses']) * 1} renderer={usesTodayRenderer} />
      </div>
    </div>
  );
});

HashtagHeader.propTypes = {
  tag: ImmutablePropTypes.map,
  disabled: PropTypes.bool,
  onClick: PropTypes.func,
  intl: PropTypes.object,
};
\ No newline at end of file

M app/javascript/mastodon/features/hashtag_timeline/index.jsx => app/javascript/mastodon/features/hashtag_timeline/index.jsx +6 -28
@@ 1,9 1,8 @@
import PropTypes from 'prop-types';
import { PureComponent } from 'react';

import { injectIntl, FormattedMessage, defineMessages } from 'react-intl';
import { FormattedMessage } from 'react-intl';

import classNames from 'classnames';
import { Helmet } from 'react-helmet';

import ImmutablePropTypes from 'react-immutable-proptypes';


@@ 17,17 16,12 @@ import { fetchHashtag, followHashtag, unfollowHashtag } from 'mastodon/actions/t
import { expandHashtagTimeline, clearTimeline } from 'mastodon/actions/timelines';
import Column from 'mastodon/components/column';
import ColumnHeader from 'mastodon/components/column_header';
import { Icon }  from 'mastodon/components/icon';

import StatusListContainer from '../ui/containers/status_list_container';

import { HashtagHeader } from './components/hashtag_header';
import ColumnSettingsContainer from './containers/column_settings_container';

const messages = defineMessages({
  followHashtag: { id: 'hashtag.follow', defaultMessage: 'Follow hashtag' },
  unfollowHashtag: { id: 'hashtag.unfollow', defaultMessage: 'Unfollow hashtag' },
});

const mapStateToProps = (state, props) => ({
  hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}${props.params.local ? ':local' : ''}`, 'unread']) > 0,
  tag: state.getIn(['tags', props.params.id]),


@@ 48,7 42,6 @@ class HashtagTimeline extends PureComponent {
    hasUnread: PropTypes.bool,
    tag: ImmutablePropTypes.map,
    multiColumn: PropTypes.bool,
    intl: PropTypes.object,
  };

  handlePin = () => {


@@ 188,27 181,11 @@ class HashtagTimeline extends PureComponent {
  };

  render () {
    const { hasUnread, columnId, multiColumn, tag, intl } = this.props;
    const { hasUnread, columnId, multiColumn, tag } = this.props;
    const { id, local } = this.props.params;
    const pinned = !!columnId;
    const { signedIn } = this.context.identity;

    let followButton;

    if (tag) {
      const following = tag.get('following');

      const classes = classNames('column-header__button', {
        active: following,
      });

      followButton = (
        <button className={classes} onClick={this.handleFollow} disabled={!signedIn} title={intl.formatMessage(following ? messages.unfollowHashtag : messages.followHashtag)} aria-label={intl.formatMessage(following ? messages.unfollowHashtag : messages.followHashtag)}>
          <Icon id={following ? 'user-times' : 'user-plus'} fixedWidth className='column-header__icon' />
        </button>
      );
    }

    return (
      <Column bindToDocument={!multiColumn} ref={this.setRef} label={`#${id}`}>
        <ColumnHeader


@@ 220,13 197,14 @@ class HashtagTimeline extends PureComponent {
          onClick={this.handleHeaderClick}
          pinned={pinned}
          multiColumn={multiColumn}
          extraButton={followButton}
          showBackButton
        >
          {columnId && <ColumnSettingsContainer columnId={columnId} />}
        </ColumnHeader>

        <StatusListContainer
          prepend={pinned ? null : <HashtagHeader tag={tag} disabled={!signedIn} onClick={this.handleFollow} />}
          alwaysPrepend
          trackScroll={!pinned}
          scrollKey={`hashtag_timeline-${columnId}`}
          timelineId={`hashtag:${id}${local ? ':local' : ''}`}


@@ 245,4 223,4 @@ class HashtagTimeline extends PureComponent {

}

export default connect(mapStateToProps)(injectIntl(HashtagTimeline));
export default connect(mapStateToProps)(HashtagTimeline);

M app/javascript/mastodon/features/interaction_modal/index.jsx => app/javascript/mastodon/features/interaction_modal/index.jsx +8 -2
@@ 13,7 13,7 @@ import { openModal, closeModal } from 'mastodon/actions/modal';
import api from 'mastodon/api';
import Button from 'mastodon/components/button';
import { Icon }  from 'mastodon/components/icon';
import { registrationsOpen } from 'mastodon/initial_state';
import { registrationsOpen, sso_redirect } from 'mastodon/initial_state';

const messages = defineMessages({
  loginPrompt: { id: 'interaction_modal.login.prompt', defaultMessage: 'Domain of your home server, e.g. mastodon.social' },


@@ 332,7 332,13 @@ class InteractionModal extends React.PureComponent {

    let signupButton;

    if (registrationsOpen) {
    if (sso_redirect) {
      signupButton = (
        <a href={sso_redirect} data-method='post' className='link-button'>
          <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
        </a>
      );
    } else if (registrationsOpen) {
      signupButton = (
        <a href='/auth/sign_up' className='link-button'>
          <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />

M app/javascript/mastodon/features/status/components/card.jsx => app/javascript/mastodon/features/status/components/card.jsx +2 -1
@@ 167,7 167,8 @@ export default class Card extends PureComponent {
      />
    );

    let thumbnail = <img src={card.get('image')} alt='' style={thumbnailStyle} onLoad={this.handleImageLoad} className='status-card__image-image' />;
    const thumbnailDescription = card.get('image_description');
    const thumbnail = <img src={card.get('image')} alt={thumbnailDescription} title={thumbnailDescription} lang={language} style={thumbnailStyle} onLoad={this.handleImageLoad} className='status-card__image-image' />;

    let spoilerButton = (
      <button type='button' onClick={this.handleReveal} className='spoiler-button__overlay'>

M app/javascript/mastodon/features/ui/components/focal_point_modal.jsx => app/javascript/mastodon/features/ui/components/focal_point_modal.jsx +1 -1
@@ 434,4 434,4 @@ class FocalPointModal extends ImmutablePureComponent {

export default connect(mapStateToProps, mapDispatchToProps, null, {
  forwardRef: true,
})(injectIntl(FocalPointModal, { withRef: true }));
})(injectIntl(FocalPointModal, { forwardRef: true }));

M app/javascript/mastodon/features/ui/components/header.jsx => app/javascript/mastodon/features/ui/components/header.jsx +26 -19
@@ 12,7 12,7 @@ import { fetchServer } from 'mastodon/actions/server';
import { Avatar } from 'mastodon/components/avatar';
import { Icon } from 'mastodon/components/icon';
import { WordmarkLogo, SymbolLogo } from 'mastodon/components/logo';
import { registrationsOpen, me } from 'mastodon/initial_state';
import { registrationsOpen, me, sso_redirect } from 'mastodon/initial_state';

const Account = connect(state => ({
  account: state.getIn(['accounts', me]),


@@ 73,28 73,35 @@ class Header extends PureComponent {
        </>
      );
    } else {
      let signupButton;

      if (registrationsOpen) {
        signupButton = (
          <a href={signupUrl} className='button'>
            <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
          </a>
        );
      if (sso_redirect) {
        content = (
            <a href={sso_redirect} data-method='post' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sso_redirect' defaultMessage='Login or Register' /></a>
        )
      } else {
        signupButton = (
          <button className='button' onClick={openClosedRegistrationsModal}>
            <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
          </button>
        let signupButton;

        if (registrationsOpen) {
          signupButton = (
            <a href={signupUrl} className='button'>
              <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
            </a>
          );
        } else {
          signupButton = (
            <button className='button' onClick={openClosedRegistrationsModal}>
              <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
            </button>
          );
        }

        content = (
          <>
            {signupButton}
            <a href='/auth/sign_in' className='button button-tertiary'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Login' /></a>
          </>
        );
      }

      content = (
        <>
          {signupButton}
          <a href='/auth/sign_in' className='button button-tertiary'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Login' /></a>
        </>
      );
    }

    return (

M app/javascript/mastodon/features/ui/components/modal_root.jsx => app/javascript/mastodon/features/ui/components/modal_root.jsx +1 -8
@@ 97,14 97,7 @@ export default class ModalRoot extends PureComponent {

  handleClose = (ignoreFocus = false) => {
    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`.
    }
    const message = this._modal?.getCloseConfirmationMessage?.();
    onClose(message, ignoreFocus);
  };


M app/javascript/mastodon/features/ui/components/sign_in_banner.jsx => app/javascript/mastodon/features/ui/components/sign_in_banner.jsx +10 -1
@@ 4,7 4,7 @@ import { FormattedMessage } from 'react-intl';


import { openModal } from 'mastodon/actions/modal';
import { registrationsOpen } from 'mastodon/initial_state';
import { registrationsOpen, sso_redirect } from 'mastodon/initial_state';
import { useAppDispatch, useAppSelector } from 'mastodon/store';

const SignInBanner = () => {


@@ 19,6 19,15 @@ const SignInBanner = () => {

  const signupUrl = useAppSelector((state) => state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up');

  if (sso_redirect) {
    return (
      <div className='sign-in-banner'>
        <p><FormattedMessage id='sign_in_banner.text' defaultMessage='Login to follow profiles or hashtags, favorite, share and reply to posts. You can also interact from your account on a different server.' /></p>
        <a href={sso_redirect} data-method='post' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sso_redirect' defaultMessage='Login or Register' /></a>
      </div>
    )
  }

  if (registrationsOpen) {
    signupButton = (
      <a href={signupUrl} className='button button--block'>

M app/javascript/mastodon/initial_state.js => app/javascript/mastodon/initial_state.js +2 -0
@@ 80,6 80,7 @@
 * @property {boolean} use_blurhash
 * @property {boolean=} use_pending_items
 * @property {string} version
 * @property {string} sso_redirect
 */

/**


@@ 142,6 143,7 @@ export const version = getMeta('version');
export const languages = initialState?.languages;
// @ts-expect-error
export const statusPageUrl = getMeta('status_page_url');
export const sso_redirect = getMeta('sso_redirect');

// Glitch-soc-specific settings
export const maxChars = (initialState && initialState.max_toot_chars) || 500;

M app/javascript/mastodon/locales/af.json => app/javascript/mastodon/locales/af.json +0 -1
@@ 181,7 181,6 @@
  "home.column_settings.show_reblogs": "Wys aangestuurde plasings",
  "interaction_modal.description.reblog": "Met 'n rekening op Mastodon kan jy hierdie plasing aanstuur om dit met jou volgers te deel.",
  "interaction_modal.description.reply": "Met 'n rekening op Mastodon kan jy op hierdie plasing reageer.",
  "interaction_modal.preamble": "Omdat Mastodon gedesentraliseer is, hoef jy nie ’n rekening op hierdie bediener te hê nie. Jy kan jy jou bestaande Mastodonrekening gebruik, al word dit op 'n ander Mastodonbediener of versoenbare platform waar ook al gehuisves.",
  "interaction_modal.title.reblog": "Stuur {name} se plasing aan",
  "interaction_modal.title.reply": "Reageer op {name} se plasing",
  "keyboard_shortcuts.back": "Navigeer terug",

M app/javascript/mastodon/locales/an.json => app/javascript/mastodon/locales/an.json +0 -2
@@ 172,7 172,6 @@
  "conversation.open": "Veyer conversación",
  "conversation.with": "Con {names}",
  "copypaste.copied": "Copiau",
  "copypaste.copy": "Copiar",
  "directory.federated": "Dende lo fediverso conoixiu",
  "directory.local": "Nomás de {domain}",
  "directory.new_arrivals": "Recientment plegaus",


@@ 276,7 275,6 @@
  "interaction_modal.description.reply": "Con una cuenta en Mastodon, puetz responder a esta publicación.",
  "interaction_modal.on_another_server": "En un servidor diferent",
  "interaction_modal.on_this_server": "En este servidor",
  "interaction_modal.preamble": "Ya que Mastodon ye descentralizau, puetz usar la tuya cuenta existent alochada en unatro servidor Mastodon u plataforma compatible si no tiens una cuenta en este servidor.",
  "interaction_modal.title.follow": "Seguir a {name}",
  "interaction_modal.title.reblog": "Empentar la publicación de {name}",
  "interaction_modal.title.reply": "Responder a la publicación de {name}",

M app/javascript/mastodon/locales/ar.json => app/javascript/mastodon/locales/ar.json +22 -4
@@ 13,7 13,7 @@
  "about.rules": "قواعد الخادم",
  "account.account_note_header": "مُلاحظة",
  "account.add_or_remove_from_list": "الإضافة أو الإزالة من القائمة",
  "account.badges.bot": "بوت",
  "account.badges.bot": "آلي",
  "account.badges.group": "فريق",
  "account.block": "احجب @{name}",
  "account.block_domain": "حظر اسم النِّطاق {domain}",


@@ 181,6 181,7 @@
  "confirmations.mute.explanation": "هذا سيخفي المنشورات عنهم وتلك المشار فيها إليهم، لكنه سيسمح لهم برؤية منشوراتك ومتابعتك.",
  "confirmations.mute.message": "هل أنت متأكد أنك تريد كتم {name} ؟",
  "confirmations.redraft.confirm": "إزالة وإعادة الصياغة",
  "confirmations.redraft.message": "هل أنت متأكد من أنك تريد حذف هذا المنشور و إعادة صياغته؟ سوف تفقد جميع الإعجابات و الترقيات أما الردود المتصلة به فستُصبِح يتيمة.",
  "confirmations.reply.confirm": "رد",
  "confirmations.reply.message": "الرد في الحين سوف يُعيد كتابة الرسالة التي أنت بصدد كتابتها. متأكد من أنك تريد المواصلة؟",
  "confirmations.unfollow.confirm": "إلغاء المتابعة",


@@ 190,7 191,6 @@
  "conversation.open": "اعرض المحادثة",
  "conversation.with": "مع {names}",
  "copypaste.copied": "تم نسخه",
  "copypaste.copy": "انسخ",
  "copypaste.copy_to_clipboard": "نسخ إلى الحافظة",
  "directory.federated": "مِن الفديفرس المعروف",
  "directory.local": "مِن {domain} فقط",


@@ 229,6 229,8 @@
  "empty_column.direct": "لم يتم الإشارة إليك بشكل خاص بعد. عندما تتلقى أو ترسل إشارة، سيتم عرضها هنا.",
  "empty_column.domain_blocks": "ليس هناك نطاقات تم حجبها بعد.",
  "empty_column.explore_statuses": "ليس هناك ما هو متداوَل الآن. عد في وقت لاحق!",
  "empty_column.favourited_statuses": "ليس لديك أية منشورات مفضلة بعد. عندما ستقوم بالإعجاب بواحدة، ستظهر هنا.",
  "empty_column.favourites": "لم يقم أي أحد بالإعجاب بهذا المنشور بعد. عندما يقوم أحدهم بذلك سوف يظهر هنا.",
  "empty_column.follow_requests": "ليس عندك أي طلب للمتابعة بعد. سوف تظهر طلباتك هنا إن قمت بتلقي البعض منها.",
  "empty_column.followed_tags": "لم تُتابع أي وسم بعدُ. ستظهر الوسوم هنا حينما تفعل ذلك.",
  "empty_column.hashtag": "ليس هناك بعدُ أي محتوى ذو علاقة بهذا الوسم.",


@@ 299,16 301,21 @@
  "home.column_settings.basic": "الأساسية",
  "home.column_settings.show_reblogs": "اعرض الترقيات",
  "home.column_settings.show_replies": "اعرض الردود",
  "home.explore_prompt.body": "سوف تحتوي تغذية منزلك على مزيج من المشاركات من الوسوم التي اخترت متابعتها، والأشخاص الذين اخترت متابعتهم، والمشاركات التي قاموا بدعمها. الأمور تبدو هادئة جدا الآن، لذلك ماذا عن:",
  "home.explore_prompt.body": "سوف يحتوي خيط أخبارك الرئيسي على مزيج من المشاركات من الوسوم التي اخترت متابعتها، والأشخاص الذين اخترت متابعتهم، والمنشورات التي قاموا بدعمها. ومع ذلك، إن كانت تبدو الأمور هادئة جدا، ماذا لو:",
  "home.explore_prompt.title": "هذا مقرك الرئيسي داخل ماستدون.",
  "home.hide_announcements": "إخفاء الإعلانات",
  "home.show_announcements": "إظهار الإعلانات",
  "interaction_modal.description.favourite": "بفضل حساب على ماستدون، يمكنك إضافة هذا المنشور إلى مفضلتك لإبلاغ الناشر عن تقديرك وكذا للاحتفاظ بالمنشور إلى وقت لاحق.",
  "interaction_modal.description.follow": "مع حساب في ماستدون، يمكنك متابعة {name} وتلقي منشوراته على خيطك الرئيس.",
  "interaction_modal.description.reblog": "مع حساب في ماستدون، يمكنك تعزيز هذا المنشور ومشاركته مع مُتابِعيك.",
  "interaction_modal.description.reply": "مع حساب في ماستدون، يمكنك الرد على هذا المنشور.",
  "interaction_modal.login.action": "خذني إلى خادمي",
  "interaction_modal.login.prompt": "نطاق الخادم الخاص بك، على سبيل المثال mastodon.social",
  "interaction_modal.no_account_yet": "ليست على ماستدون بعد؟",
  "interaction_modal.on_another_server": "على خادم مختلف",
  "interaction_modal.on_this_server": "على هذا الخادم",
  "interaction_modal.preamble": "بما إن ماستدون لامركزي، يمكنك استخدام حسابك الحالي المستضاف بواسطة خادم ماستدون آخر أو منصة متوافقة إذا لم يكن لديك حساب هنا.",
  "interaction_modal.sign_in": "لم تقم بتسجيل الدخول إلى هذا الخادم. أين هو مستضاف حسابك؟",
  "interaction_modal.title.favourite": "إضافة منشور {name} إلى المفضلة",
  "interaction_modal.title.follow": "اتبع {name}",
  "interaction_modal.title.reblog": "مشاركة منشور {name}",
  "interaction_modal.title.reply": "الرد على منشور {name}",


@@ 324,6 331,8 @@
  "keyboard_shortcuts.direct": "to open direct messages column",
  "keyboard_shortcuts.down": "للانتقال إلى أسفل القائمة",
  "keyboard_shortcuts.enter": "لفتح المنشور",
  "keyboard_shortcuts.favourite": "لإضافة المنشور إلى المفضلة",
  "keyboard_shortcuts.favourites": "لفتح قائمة المفضلات",
  "keyboard_shortcuts.federated": "لفتح الخيط الزمني الفديرالي",
  "keyboard_shortcuts.heading": "Keyboard Shortcuts",
  "keyboard_shortcuts.home": "لفتح الخيط الرئيسي",


@@ 354,6 363,7 @@
  "lightbox.previous": "العودة",
  "limited_account_hint.action": "إظهار الملف التعريفي على أي حال",
  "limited_account_hint.title": "تم إخفاء هذا الملف الشخصي من قبل مشرفي {domain}.",
  "link_preview.author": "مِن {name}",
  "lists.account.add": "أضف إلى القائمة",
  "lists.account.remove": "احذف من القائمة",
  "lists.delete": "احذف القائمة",


@@ 376,6 386,7 @@
  "mute_modal.hide_notifications": "هل تود إخفاء الإخطارات القادمة من هذا المستخدم ؟",
  "mute_modal.indefinite": "إلى أجل غير مسمى",
  "navigation_bar.about": "عن",
  "navigation_bar.advanced_interface": "افتحه في واجهة الويب المتقدمة",
  "navigation_bar.blocks": "الحسابات المحجوبة",
  "navigation_bar.bookmarks": "الفواصل المرجعية",
  "navigation_bar.community_timeline": "الخيط المحلي",


@@ 385,6 396,7 @@
  "navigation_bar.domain_blocks": "النطاقات المحظورة",
  "navigation_bar.edit_profile": "عدّل الملف التعريفي",
  "navigation_bar.explore": "استكشف",
  "navigation_bar.favourites": "المفضلة",
  "navigation_bar.filters": "الكلمات المكتومة",
  "navigation_bar.follow_requests": "طلبات المتابعة",
  "navigation_bar.followed_tags": "الوسوم المتابَعة",


@@ 401,6 413,7 @@
  "not_signed_in_indicator.not_signed_in": "تحتاج إلى تسجيل الدخول للوصول إلى هذا المصدر.",
  "notification.admin.report": "{name} أبلغ عن {target}",
  "notification.admin.sign_up": "أنشأ {name} حسابًا",
  "notification.favourite": "أضاف {name} منشورك إلى مفضلته",
  "notification.follow": "{name} يتابعك",
  "notification.follow_request": "لقد طلب {name} متابعتك",
  "notification.mention": "{name} ذكرك",


@@ 414,6 427,7 @@
  "notifications.column_settings.admin.report": "التقارير الجديدة:",
  "notifications.column_settings.admin.sign_up": "التسجيلات الجديدة:",
  "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_bar": "إظهار شريط التصفية",


@@ 431,6 445,7 @@
  "notifications.column_settings.update": "التعديلات:",
  "notifications.filter.all": "الكل",
  "notifications.filter.boosts": "الترقيات",
  "notifications.filter.favourites": "المفضلة",
  "notifications.filter.follows": "يتابِع",
  "notifications.filter.mentions": "الإشارات",
  "notifications.filter.polls": "نتائج استطلاع الرأي",


@@ 581,6 596,8 @@
  "server_banner.server_stats": "إحصائيات الخادم:",
  "sign_in_banner.create_account": "أنشئ حسابًا",
  "sign_in_banner.sign_in": "تسجيل الدخول",
  "sign_in_banner.sso_redirect": "تسجيل الدخول أو إنشاء حساب",
  "sign_in_banner.text": "قم بالولوج بحسابك لمتابعة الصفحات الشخصية أو الوسوم، أو لإضافة المنشورات إلى المفضلة ومشاركتها والرد عليها أو التفاعل بواسطة حسابك المتواجد على خادم مختلف.",
  "status.admin_account": "افتح الواجهة الإدارية لـ @{name}",
  "status.admin_domain": "فتح واجهة الإشراف لـ {domain}",
  "status.admin_status": "افتح هذا المنشور على واجهة الإشراف",


@@ 597,6 614,7 @@
  "status.edited": "عُدّل في {date}",
  "status.edited_x_times": "عُدّل {count, plural, zero {} one {مرةً واحدة} two {مرّتان} few {{count} مرات} many {{count} مرة} other {{count} مرة}}",
  "status.embed": "إدماج",
  "status.favourite": "فضّل",
  "status.filter": "تصفية هذه الرسالة",
  "status.filtered": "مُصفّى",
  "status.hide": "إخفاء المنشور",

M app/javascript/mastodon/locales/ast.json => app/javascript/mastodon/locales/ast.json +1 -2
@@ 133,7 133,6 @@
  "conversation.open": "Ver la conversación",
  "conversation.with": "Con {names}",
  "copypaste.copied": "Copióse",
  "copypaste.copy": "Copiar",
  "directory.federated": "Del fediversu conocíu",
  "directory.local": "De «{domain}» namás",
  "directory.new_arrivals": "Cuentes nueves",


@@ 223,7 222,6 @@
  "interaction_modal.description.reply": "Con una cuenta de Mastodon, pues responder a esti artículu.",
  "interaction_modal.on_another_server": "N'otru sirvidor",
  "interaction_modal.on_this_server": "Nesti sirvidor",
  "interaction_modal.preamble": "Darréu que Mastodon ye una rede social descentralizada, pues usar una cuenta agospiada n'otru sirvidor de Mastodon o n'otra plataforma compatible si nun tienes cuenta nesti sirvidor.",
  "interaction_modal.title.reply": "Rempuesta al artículu de: {name}",
  "intervals.full.days": "{number, plural, one {# día} other {# díes}}",
  "intervals.full.hours": "{number, plural, one {# hora} other {# hores}}",


@@ 420,6 418,7 @@
  "server_banner.learn_more": "Saber más",
  "server_banner.server_stats": "Estadístiques del sirvidor:",
  "sign_in_banner.create_account": "Crear una cuenta",
  "sign_in_banner.sso_redirect": "Aniciar la sesión o rexistrase",
  "status.admin_account": "Abrir la interfaz de moderación pa @{name}",
  "status.admin_domain": "Abrir la interfaz de moderación pa «{domain}»",
  "status.admin_status": "Abrir esti artículu na interfaz de moderación",

M app/javascript/mastodon/locales/be.json => app/javascript/mastodon/locales/be.json +26 -2
@@ 113,6 113,7 @@
  "column.direct": "Асабістыя згадванні",
  "column.directory": "Праглядзець профілі",
  "column.domain_blocks": "Заблакіраваныя дамены",
  "column.favourites": "Упадабанае",
  "column.firehose": "Стужкі",
  "column.follow_requests": "Запыты на падпіску",
  "column.home": "Галоўная",


@@ 180,6 181,7 @@
  "confirmations.mute.explanation": "Гэта схавае допісы ад гэтага карыстальніка і пра яго, але ўсё яшчэ дазволіць яму чытаць вашыя допісы і быць падпісаным на вас.",
  "confirmations.mute.message": "Вы ўпэўненыя, што хочаце ігнараваць {name}?",
  "confirmations.redraft.confirm": "Выдаліць і перапісаць",
  "confirmations.redraft.message": "Вы ўпэўнены, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.",
  "confirmations.reply.confirm": "Адказаць",
  "confirmations.reply.message": "Калі вы адкажаце зараз, гэта ператрэ паведамленне, якое вы пішаце. Вы ўпэўнены, што хочаце працягнуць?",
  "confirmations.unfollow.confirm": "Адпісацца",


@@ 189,7 191,6 @@
  "conversation.open": "Прагледзець размову",
  "conversation.with": "З {names}",
  "copypaste.copied": "Скапіравана",
  "copypaste.copy": "Скапіраваць",
  "copypaste.copy_to_clipboard": "Капіраваць у буфер абмену",
  "directory.federated": "З вядомага федэсвету",
  "directory.local": "Толькі з {domain}",


@@ 200,6 201,7 @@
  "dismissable_banner.community_timeline": "Гэта самыя апошнія допісы ад людзей, уліковыя запісы якіх размяшчаюцца на {domain}.",
  "dismissable_banner.dismiss": "Адхіліць",
  "dismissable_banner.explore_links": "Гэтыя навіны абмяркоўваюцца прама зараз на гэтым і іншых серверах дэцэнтралізаванай сеткі.",
  "dismissable_banner.explore_statuses": "Допісы з гэтага і іншых сервераў дэцэнтралізаванай сеткі, якія набіраюць папулярнасць прама зараз.",
  "dismissable_banner.explore_tags": "Гэтыя хэштэгі зараз набіраюць папулярнасць сярод людзей на гэтым і іншых серверах дэцэнтралізаванай сеткі",
  "dismissable_banner.public_timeline": "Гэта апошнія публічныя допісы людзей з усей сеткі, за якімі сочаць карыстальнікі {domain}.",
  "embed.instructions": "Убудуйце гэты пост на свой сайт, скапіраваўшы прыведзены ніжэй код",


@@ 228,6 230,8 @@
  "empty_column.direct": "Пакуль у вас няма асабістых згадак. Калі вы дашляце або атрымаеце штось, яно з'явіцца тут.",
  "empty_column.domain_blocks": "Заблакіраваных даменаў пакуль няма.",
  "empty_column.explore_statuses": "Зараз не ў трэндзе. Праверце пазней",
  "empty_column.favourited_statuses": "Вы яшчэ не ўпадабалі ніводны допіс. Калі гэта адбудзецца, вы ўбачыце яго тут.",
  "empty_column.favourites": "Ніхто яшчэ не ўпадабаў гэты допіс. Калі гэта адбудзецца, вы ўбачыце гэтых людзей тут.",
  "empty_column.follow_requests": "У вас яшчэ няма запытаў на падпіскуі. Калі вы атрымаеце запыт, ён з'явяцца тут.",
  "empty_column.followed_tags": "Вы пакуль не падпісаны ні на адзін хэштэг. Калі падпішацеся, яны з'явяцца тут.",
  "empty_column.hashtag": "Па гэтаму хэштэгу пакуль што нічога няма.",


@@ 291,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Любы",
  "hashtag.column_settings.tag_mode.none": "Нічога з пералічанага",
  "hashtag.column_settings.tag_toggle": "Уключыць дадатковыя тэгі для гэтай калонкі",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} удзельнік} few {{counter} удзельніка} many {{counter} удзельнікаў} other {{counter} удзельніка}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}} за сёння",
  "hashtag.follow": "Падпісацца на хэштэг",
  "hashtag.unfollow": "Адпісацца ад хэштэга",
  "home.actions.go_to_explore": "Паглядзіце, што ў трэндзе",


@@ 302,12 309,18 @@
  "home.explore_prompt.title": "Гэта ваша апорная кропка ў Mastodon.",
  "home.hide_announcements": "Схаваць аб'явы",
  "home.show_announcements": "Паказаць аб'явы",
  "interaction_modal.description.favourite": "Маючы ўліковы запіс Mastodon, вы можаце ўпадабаць гэты допіс, каб паведаміць аўтару, што ён вам падабаецца, і захаваць яго на будучыню.",
  "interaction_modal.description.follow": "Маючы акаўнт у Mastodon, вы можаце падпісацца на {name}, каб бачыць яго/яе допісы ў сваёй хатняй стужцы.",
  "interaction_modal.description.reblog": "З уліковым запісам Mastodon, вы можаце пашырыць гэты пост, каб падзяліцца ім са сваімі падпісчыкамі.",
  "interaction_modal.description.reply": "Маючы акаўнт у Mastodon, вы можаце адказаць на гэты пост.",
  "interaction_modal.login.action": "Вярніце мяне дадому",
  "interaction_modal.login.prompt": "Дамен вашага хатняга сервера, напрыклад, mastodon.social",
  "interaction_modal.no_account_yet": "Яшчэ не ў Mastodon?",
  "interaction_modal.on_another_server": "На іншым серверы",
  "interaction_modal.on_this_server": "На гэтым серверы",
  "interaction_modal.preamble": "Паколькі Mastodon дэцэнтралізаваны, вы можаце выкарыстоўваць існуючы акаўнт, які быў створаны на іншым серверы Mastodon або на сумяшчальнай платформе, калі ў вас пакуль няма акаўнта тут.",
  "interaction_modal.sign_in": "Вы не выканалі ўваход на гэтым серверы. Дзе размешчаны ваш уліковы запіс?",
  "interaction_modal.sign_in_hint": "Падказка: гэта сайт, на якім вы зарэгістраваліся. Калі вы не памятаеце, знайдзіце ліст у паштовай скрыні. Вы таксама можаце ўвесці сваё поўнае імя карыстальніка! (напрыклад, @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Упадабаць допіс {name}",
  "interaction_modal.title.follow": "Падпісацца на {name}",
  "interaction_modal.title.reblog": "Пашырыць допіс ад {name}",
  "interaction_modal.title.reply": "Адказаць на допіс {name}",


@@ 323,6 336,8 @@
  "keyboard_shortcuts.direct": "адкрыць стоўп асабістых згадак",
  "keyboard_shortcuts.down": "Перамясціцца ўніз па спісе",
  "keyboard_shortcuts.enter": "Адкрыць допіс",
  "keyboard_shortcuts.favourite": "Упадабаць допіс",
  "keyboard_shortcuts.favourites": "Адкрыць спіс упадабанага",
  "keyboard_shortcuts.federated": "Адкрыць інтэграваную стужку",
  "keyboard_shortcuts.heading": "Спалучэнні клавіш",
  "keyboard_shortcuts.home": "Адкрыць хатнюю храналагічную стужку",


@@ 353,6 368,7 @@
  "lightbox.previous": "Назад",
  "limited_account_hint.action": "Усе роўна паказваць профіль",
  "limited_account_hint.title": "Гэты профіль быў схаваны мадэратарамі",
  "link_preview.author": "Ад {name}",
  "lists.account.add": "Дадаць да спісу",
  "lists.account.remove": "Выдаліць са спісу",
  "lists.delete": "Выдаліць спіс",


@@ 375,6 391,7 @@
  "mute_modal.hide_notifications": "Схаваць апавяшчэнні ад гэтага карыстальніка?",
  "mute_modal.indefinite": "Бестэрмінова",
  "navigation_bar.about": "Пра нас",
  "navigation_bar.advanced_interface": "Адкрыць у пашыраным вэб-інтэрфейсе",
  "navigation_bar.blocks": "Заблакаваныя карыстальнікі",
  "navigation_bar.bookmarks": "Закладкі",
  "navigation_bar.community_timeline": "Лакальная стужка",


@@ 384,6 401,7 @@
  "navigation_bar.domain_blocks": "Заблакіраваныя дамены",
  "navigation_bar.edit_profile": "Рэдагаваць профіль",
  "navigation_bar.explore": "Агляд",
  "navigation_bar.favourites": "Упадабанае",
  "navigation_bar.filters": "Ігнараваныя словы",
  "navigation_bar.follow_requests": "Запыты на падпіску",
  "navigation_bar.followed_tags": "Падпіскі",


@@ 400,6 418,7 @@
  "not_signed_in_indicator.not_signed_in": "Вам трэба ўвайсці каб атрымаць доступ да гэтага рэсурсу.",
  "notification.admin.report": "{name} паскардзіўся на {target}",
  "notification.admin.sign_up": "{name} зарэгістраваўся",
  "notification.favourite": "Ваш допіс упадабаны {name}",
  "notification.follow": "{name} падпісаўся на вас",
  "notification.follow_request": "{name} адправіў запыт на падпіску",
  "notification.mention": "{name} згадаў вас",


@@ 413,6 432,7 @@
  "notifications.column_settings.admin.report": "Новыя скаргі:",
  "notifications.column_settings.admin.sign_up": "Новыя ўваходы:",
  "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_bar": "Паказваць панэль фільтрацыі",


@@ 430,6 450,7 @@
  "notifications.column_settings.update": "Праўкі:",
  "notifications.filter.all": "Усе",
  "notifications.filter.boosts": "Пашырэнні",
  "notifications.filter.favourites": "Упадабанае",
  "notifications.filter.follows": "Падпісаны на",
  "notifications.filter.mentions": "Згадванні",
  "notifications.filter.polls": "Вынікі апытання",


@@ 580,6 601,8 @@
  "server_banner.server_stats": "Статыстыка сервера:",
  "sign_in_banner.create_account": "Стварыць уліковы запіс",
  "sign_in_banner.sign_in": "Увайсці",
  "sign_in_banner.sso_redirect": "Уваход ці рэгістрацыя",
  "sign_in_banner.text": "Увайдзіце, каб падпісацца на людзей і тэгі, каб адказваць на допісы, дзяліцца імі і падабаць іх, альбо кантактаваць з вашага ўліковага запісу на іншым серверы.",
  "status.admin_account": "Адкрыць інтэрфейс мадэратара для @{name}",
  "status.admin_domain": "Адкрыць інтэрфейс мадэратара для {domain}",
  "status.admin_status": "Адкрыць гэты допіс у інтэрфейсе мадэрацыі",


@@ 596,6 619,7 @@
  "status.edited": "Адрэдагавана {date}",
  "status.edited_x_times": "Рэдагавана {count, plural, one {{count} раз} few {{count} разы} many {{count} разоў} other {{count} разу}}",
  "status.embed": "Убудаваць",
  "status.favourite": "Упадабанае",
  "status.filter": "Фільтраваць гэты допіс",
  "status.filtered": "Адфільтравана",
  "status.hide": "Схаваць допіс",

M app/javascript/mastodon/locales/bg.json => app/javascript/mastodon/locales/bg.json +0 -3
@@ 189,7 189,6 @@
  "conversation.open": "Преглед на разговора",
  "conversation.with": "С {names}",
  "copypaste.copied": "Копирано",
  "copypaste.copy": "Копиране",
  "copypaste.copy_to_clipboard": "Копиране в буферната памет",
  "directory.federated": "От позната федивселена",
  "directory.local": "Само от {domain}",


@@ 298,7 297,6 @@
  "home.column_settings.basic": "Основно",
  "home.column_settings.show_reblogs": "Показване на подсилванията",
  "home.column_settings.show_replies": "Показване на отговорите",
  "home.explore_prompt.body": "Вашият начален инфоканал ще е смес на публикации от хаштаговете, които сте избрали да следвате, избраните хора за следвате, а и публикациите, които са подсилили. Изглежда доста тихо в момента, така че какво ще кажете за:",
  "home.explore_prompt.title": "Това е началната ви база с Mastodon.",
  "home.hide_announcements": "Скриване на оповестяванията",
  "home.show_announcements": "Показване на оповестяванията",


@@ 307,7 305,6 @@
  "interaction_modal.description.reply": "С акаунт в Mastodon може да добавите отговор към тази публикация.",
  "interaction_modal.on_another_server": "На различен сървър",
  "interaction_modal.on_this_server": "На този сървър",
  "interaction_modal.preamble": "Откак Mastodon е децентрализиран, може да употребявате съществуващ акаунт, разположен на друг сървър на Mastodon или съвместима платформа, ако нямате акаунт на този сървър.",
  "interaction_modal.title.follow": "Последване на {name}",
  "interaction_modal.title.reblog": "Подсилване на публикацията на {name}",
  "interaction_modal.title.reply": "Отговаряне на публикацията на {name}",

M app/javascript/mastodon/locales/br.json => app/javascript/mastodon/locales/br.json +3 -1
@@ 17,6 17,7 @@
  "account.badges.group": "Strollad",
  "account.block": "Stankañ @{name}",
  "account.block_domain": "Stankañ an domani {domain}",
  "account.block_short": "Stankañ",
  "account.blocked": "Stanket",
  "account.browse_more_on_origin_server": "Furchal pelloc'h war ar profil orin",
  "account.cancel_follow_request": "Nullañ ar reked heuliañ",


@@ 46,6 47,8 @@
  "account.mention": "Menegiñ @{name}",
  "account.moved_to": "Gant {name} eo bet merket e oa bremañ h·e gont nevez :",
  "account.mute": "Kuzhat @{name}",
  "account.mute_notifications_short": "Kuzhat ar c'hemennoù",
  "account.mute_short": "Kuzhat",
  "account.muted": "Kuzhet",
  "account.open_original_page": "Digeriñ ar bajenn orin",
  "account.posts": "Toudoù",


@@ 171,7 174,6 @@
  "conversation.open": "Gwelout ar gaozeadenn",
  "conversation.with": "Gant {names}",
  "copypaste.copied": "Eilet",
  "copypaste.copy": "Eilañ",
  "directory.federated": "Eus ar fedibed anavezet",
  "directory.local": "Eus {domain} hepken",
  "directory.new_arrivals": "Degouezhet a-nevez",

M app/javascript/mastodon/locales/ca.json => app/javascript/mastodon/locales/ca.json +14 -8
@@ 80,7 80,7 @@
  "admin.impact_report.instance_followers": "Seguidors que els nostres usuaris perdrien",
  "admin.impact_report.instance_follows": "Seguidors que els seus usuaris perdrien",
  "admin.impact_report.title": "Resum del impacte",
  "alert.rate_limited.message": "Si us plau prova-ho després de {retry_time, time, medium}.",
  "alert.rate_limited.message": "Proveu-ho una altra vegada al cap 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!",


@@ 114,7 114,7 @@
  "column.directory": "Navega pels perfils",
  "column.domain_blocks": "Dominis blocats",
  "column.favourites": "Favorits",
  "column.firehose": "Fluxos en directe",
  "column.firehose": "Tuts en directe",
  "column.follow_requests": "Peticions de seguir-te",
  "column.home": "Inici",
  "column.lists": "Llistes",


@@ 138,11 138,11 @@
  "compose.published.body": "Tut publicat.",
  "compose.published.open": "Obre",
  "compose_form.direct_message_warning_learn_more": "Més informació",
  "compose_form.encryption_warning": "Els tuts a Mastodon no estant xifrats punt a punt. No comparteixis informació sensible mitjançant Mastodon.",
  "compose_form.encryption_warning": "Les publicacions a Mastodon no estant xifrades punt a punt. No comparteixis informació sensible mitjançant Mastodon.",
  "compose_form.hashtag_warning": "Aquest tut no apareixerà a les llistes d'etiquetes perquè no és públic. Només els tuts públics apareixen a les cerques per etiqueta.",
  "compose_form.lock_disclaimer": "El teu compte no està {locked}. Tothom pot seguir-te i veure els tuts de només per a seguidors.",
  "compose_form.lock_disclaimer.lock": "blocat",
  "compose_form.placeholder": "En què penses?",
  "compose_form.placeholder": "Què tens al cap?",
  "compose_form.poll.add_option": "Afegeix una opció",
  "compose_form.poll.duration": "Durada de l'enquesta",
  "compose_form.poll.option_placeholder": "Opció {number}",


@@ 191,7 191,6 @@
  "conversation.open": "Mostra la conversa",
  "conversation.with": "Amb {names}",
  "copypaste.copied": "Copiat",
  "copypaste.copy": "Copia",
  "copypaste.copy_to_clipboard": "Copia al porta-retalls",
  "directory.federated": "Del fedivers conegut",
  "directory.local": "Només de {domain}",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Qualsevol d’aquests",
  "hashtag.column_settings.tag_mode.none": "Cap d’aquests",
  "hashtag.column_settings.tag_toggle": "Inclou etiquetes addicionals per a aquesta columna",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} tut} other {{counter} tuts}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} tut} other {{counter} tuts}} avui",
  "hashtag.follow": "Segueix l'etiqueta",
  "hashtag.unfollow": "Deixa de seguir l'etiqueta",
  "home.actions.go_to_explore": "Mira què és tendència",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Bàsic",
  "home.column_settings.show_reblogs": "Mostra els impulsos",
  "home.column_settings.show_replies": "Mostra les respostes",
  "home.explore_prompt.body": "La teva línia de temps Inici tindrà una barreja dels tuts de les etiquetes que has triat seguir, de les persones que has triat seguir i dels tuts que impulsen. Ara mateix es veu força tranquila, què et sembla si:",
  "home.explore_prompt.body": "La teva línia de temps Inici tindrà una barreja dels tuts de les etiquetes que has triat seguir, de les persones que has triat seguir i dels tuts que s'impulsen. Ara mateix es veu força tranquil·la, què et sembla si:",
  "home.explore_prompt.title": "Aquest és la teva base a Mastodon.",
  "home.hide_announcements": "Amaga els anuncis",
  "home.show_announcements": "Mostra els anuncis",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Amb un compte a Mastodon, pots seguir a {name} per a rebre els seus tuts en la teva línia de temps d'Inici.",
  "interaction_modal.description.reblog": "Amb un compte a Mastodon, pots impulsar aquest tut per a compartir-lo amb els teus seguidors.",
  "interaction_modal.description.reply": "Amb un compte a Mastodon, pots respondre aquest tut.",
  "interaction_modal.login.action": "Torna a l'inici",
  "interaction_modal.login.prompt": "Domini del teu servidor domèstic, p.ex. mastodon.social",
  "interaction_modal.no_account_yet": "No a Mastodon?",
  "interaction_modal.on_another_server": "En un servidor diferent",
  "interaction_modal.on_this_server": "En aquest servidor",
  "interaction_modal.other_server_instructions": "Copia i enganxa aquest URL en el camp de cerca de la teva aplicació Mastodon preferida o a la interfície web del teu servidor Mastodon.",
  "interaction_modal.preamble": "Com que Mastodon és descentralitzat, pots fer servir el teu compte existent en un altre servidor Mastodon o plataforma compatible si no tens compte en aquest.",
  "interaction_modal.sign_in": "No has iniciat sessió en aquest servidor. On tens el teu compte?",
  "interaction_modal.sign_in_hint": "Ajuda: Aquesta és la web on vas registrar-te. Si no ho recordes, mira el correu electrònic de benvinguda en la teva safata d'entrada. També pots introduïr el teu nom d'usuari complet! (per ex. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Afavoreix el tut de {name}",
  "interaction_modal.title.follow": "Segueix {name}",
  "interaction_modal.title.reblog": "Impulsa el tut de {name}",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "Estadístiques del servidor:",
  "sign_in_banner.create_account": "Crea un compte",
  "sign_in_banner.sign_in": "Inici de sessió",
  "sign_in_banner.sso_redirect": "Inici de sessió o Registre",
  "sign_in_banner.text": "Inicia la sessió per a seguir perfils o etiquetes, afavorir, compartir i respondre tuts. També pots interactuar des del teu compte a un servidor diferent.",
  "status.admin_account": "Obre la interfície de moderació per a @{name}",
  "status.admin_domain": "Obre la interfície de moderació per a @{domain}",

M app/javascript/mastodon/locales/ckb.json => app/javascript/mastodon/locales/ckb.json +0 -2
@@ 176,7 176,6 @@
  "conversation.open": "نیشاندان گفتوگۆ",
  "conversation.with": "لەگەڵ{names}",
  "copypaste.copied": "کۆپی کراوە",
  "copypaste.copy": "ڕوونووس",
  "directory.federated": "لە ڕاژەکانی ناسراو",
  "directory.local": "تەنها لە {domain}",
  "directory.new_arrivals": "تازە گەیشتنەکان",


@@ 284,7 283,6 @@
  "interaction_modal.description.reply": "بە هەژمارێک لەسەر ماستدۆن، ئەتوانیت وەڵامی ئەم بڵاوکراوەیە بدەیتەوە.",
  "interaction_modal.on_another_server": "لەسەر ڕاژەیەکی جیا",
  "interaction_modal.on_this_server": "لەسەر ئەم ڕاژەیە",
  "interaction_modal.preamble": "بەو پێیەی ماستۆدۆن لامەرکەزییە، دەتوانیت ئەکاونتی ئێستات بەکاربهێنیت کە لەلایەن سێرڤەرێکی تری ماستۆدۆن یان پلاتفۆرمی گونجاوەوە هۆست کراوە ئەگەر ئەکاونتێکت لەسەر ئەم ئەکاونتە نەبێت.",
  "interaction_modal.title.follow": "دوای {name} بکەوە",
  "interaction_modal.title.reblog": "پۆستی {name} زیاد بکە",
  "interaction_modal.title.reply": "وەڵامی پۆستەکەی {name} بدەرەوە",

M app/javascript/mastodon/locales/cs.json => app/javascript/mastodon/locales/cs.json +37 -2
@@ 191,7 191,6 @@
  "conversation.open": "Zobrazit konverzaci",
  "conversation.with": "S {names}",
  "copypaste.copied": "Zkopírováno",
  "copypaste.copy": "Zkopírovat",
  "copypaste.copy_to_clipboard": "Zkopírovat do schránky",
  "directory.federated": "Ze známého fedivesmíru",
  "directory.local": "Pouze z {domain}",


@@ 202,7 201,9 @@
  "dismissable_banner.community_timeline": "Toto jsou nejnovější veřejné příspěvky od lidí, jejichž účty hostuje {domain}.",
  "dismissable_banner.dismiss": "Zavřít",
  "dismissable_banner.explore_links": "O těchto zprávách hovoří lidé na tomto a dalších serverech decentralizované sítě právě teď.",
  "dismissable_banner.explore_statuses": "Toto jsou příspěvky ze sociálních sítí, které dnes získávají na popularitě. Novější příspěvky s větším počtem boostů a oblíbení jsou hodnoceny výše.",
  "dismissable_banner.explore_tags": "Tyto hashtagy právě teď získávají na popularitě mezi lidmi na tomto a dalších serverech decentralizované sítě.",
  "dismissable_banner.public_timeline": "Toto jsou nejnovější veřejné příspěvky od lidí na sociální síti, které sledují lidé na {domain}.",
  "embed.instructions": "Pro přidání příspěvku na vaši webovou stránku zkopírujte níže uvedený kód.",
  "embed.preview": "Takhle to bude vypadat:",
  "emoji_button.activity": "Aktivita",


@@ 229,6 230,8 @@
  "empty_column.direct": "Zatím nemáte žádné soukromé zmínky. Až nějakou pošlete nebo dostanete, zobrazí se zde.",
  "empty_column.domain_blocks": "Ještě nemáte žádné zablokované domény.",
  "empty_column.explore_statuses": "Momentálně není nic populární. Vraťte se později!",
  "empty_column.favourited_statuses": "Zatím nemáte žádné oblíbené příspěvky. Až si nějaký oblíbíte, zobrazí se zde.",
  "empty_column.favourites": "Tento příspěvek si zatím nikdo neoblíbil. Až to někdo udělá, zobrazí se zde.",
  "empty_column.follow_requests": "Zatím nemáte žádné žádosti o sledování. Až nějakou obdržíte, zobrazí se zde.",
  "empty_column.followed_tags": "Zatím jste nesledovali žádné hashtagy. Až to uděláte, objeví se zde.",
  "empty_column.hashtag": "Pod tímto hashtagem zde zatím nic není.",


@@ 294,17 297,27 @@
  "hashtag.column_settings.tag_toggle": "Zahrnout v tomto sloupci další štítky",
  "hashtag.follow": "Sledovat hashtag",
  "hashtag.unfollow": "Přestat sledovat hashtag",
  "home.actions.go_to_explore": "Podívejte se, co frčí",
  "home.actions.go_to_suggestions": "Najít lidi ke sledování",
  "home.column_settings.basic": "Základní",
  "home.column_settings.show_reblogs": "Zobrazit boosty",
  "home.column_settings.show_replies": "Zobrazit odpovědi",
  "home.explore_prompt.body": "Váš domovský kanál bude obsahovat směs příspěvků z hashtagů, které jste se rozhodli sledovat, lidí, které jste se rozhodli sledovat, a příspěvků, které boostují. Pokud vám to připadá příliš klidné, možná budete chtít:",
  "home.explore_prompt.title": "Toto je vaše domovská základna uvnitř Mastodonu.",
  "home.hide_announcements": "Skrýt oznámení",
  "home.show_announcements": "Zobrazit oznámení",
  "interaction_modal.description.favourite": "Pokud máte účet na Mastodonu, můžete tento příspěvek označit jako oblíbený a dát tak autorovi najevo, že si ho vážíte, a uložit si ho na později.",
  "interaction_modal.description.follow": "S účtem na Mastodonu můžete sledovat uživatele {name} a přijímat příspěvky ve vašem domovském kanálu.",
  "interaction_modal.description.reblog": "S účtem na Mastodonu můžete boostnout tento příspěvek a sdílet jej s vlastními sledujícími.",
  "interaction_modal.description.reply": "S účtem na Mastodonu můžete odpovědět na tento příspěvek.",
  "interaction_modal.login.action": "Domů",
  "interaction_modal.login.prompt": "Doména vašeho domovského serveru, např. mastodon.social",
  "interaction_modal.no_account_yet": "Nejste na Mastodonu?",
  "interaction_modal.on_another_server": "Na jiném serveru",
  "interaction_modal.on_this_server": "Na tomto serveru",
  "interaction_modal.preamble": "Protože Mastodon je decentralizovaný, pokud nemáte účet na tomto serveru, můžete použít svůj existující účet hostovaný jiným Mastodon serverem nebo kompatibilní platformou.",
  "interaction_modal.sign_in": "Nejste přihlášeni k tomuto serveru. Kde je váš účet hostován?",
  "interaction_modal.sign_in_hint": "Tip: To je stránka, na které jste se zaregistrovali. Pokud si ji nepamatujete, vyhledejte ve své e-mailové schránce uvítací e-mail. Můžete také zadat své celé uživatelské jméno! (např. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Oblíbit si příspěvek od uživatele {name}",
  "interaction_modal.title.follow": "Sledovat {name}",
  "interaction_modal.title.reblog": "Boostnout příspěvek uživatele {name}",
  "interaction_modal.title.reply": "Odpovědět na příspěvek uživatele {name}",


@@ 320,6 333,8 @@
  "keyboard_shortcuts.direct": "otevřít sloupec soukromých zmínek",
  "keyboard_shortcuts.down": "Posunout v seznamu dolů",
  "keyboard_shortcuts.enter": "Otevřít příspěvek",
  "keyboard_shortcuts.favourite": "Oblíbit si příspěvek",
  "keyboard_shortcuts.favourites": "Otevřít seznam oblíbených",
  "keyboard_shortcuts.federated": "Otevřít federovanou časovou osu",
  "keyboard_shortcuts.heading": "Klávesové zkratky",
  "keyboard_shortcuts.home": "Otevřít domovskou časovou osu",


@@ 350,11 365,13 @@
  "lightbox.previous": "Předchozí",
  "limited_account_hint.action": "Přesto profil zobrazit",
  "limited_account_hint.title": "Tento profil byl skryt moderátory {domain}.",
  "link_preview.author": "Podle {name}",
  "lists.account.add": "Přidat do seznamu",
  "lists.account.remove": "Odebrat ze seznamu",
  "lists.delete": "Smazat seznam",
  "lists.edit": "Upravit seznam",
  "lists.edit.submit": "Změnit název",
  "lists.exclusive": "Skrýt tyto příspěvky z domovské stránky",
  "lists.new.create": "Přidat seznam",
  "lists.new.title_placeholder": "Název nového seznamu",
  "lists.replies_policy.followed": "Sledovaným uživatelům",


@@ 371,6 388,7 @@
  "mute_modal.hide_notifications": "Skrýt oznámení od tohoto uživatele?",
  "mute_modal.indefinite": "Neomezeně",
  "navigation_bar.about": "O aplikaci",
  "navigation_bar.advanced_interface": "Otevřít pokročilé webové rozhraní",
  "navigation_bar.blocks": "Blokovaní uživatelé",
  "navigation_bar.bookmarks": "Záložky",
  "navigation_bar.community_timeline": "Místní časová osa",


@@ 380,6 398,7 @@
  "navigation_bar.domain_blocks": "Blokované domény",
  "navigation_bar.edit_profile": "Upravit profil",
  "navigation_bar.explore": "Prozkoumat",
  "navigation_bar.favourites": "Oblíbené",
  "navigation_bar.filters": "Skrytá slova",
  "navigation_bar.follow_requests": "Žádosti o sledování",
  "navigation_bar.followed_tags": "Sledované hashtagy",


@@ 396,6 415,7 @@
  "not_signed_in_indicator.not_signed_in": "Pro přístup k tomuto zdroji se musíte přihlásit.",
  "notification.admin.report": "Uživatel {name} nahlásil {target}",
  "notification.admin.sign_up": "Uživatel {name} se zaregistroval",
  "notification.favourite": "Uživatel {name} si oblíbil váš příspěvek",
  "notification.follow": "Uživatel {name} vás začal sledovat",
  "notification.follow_request": "Uživatel {name} požádal o povolení vás sledovat",
  "notification.mention": "Uživatel {name} vás zmínil",


@@ 409,6 429,7 @@
  "notifications.column_settings.admin.report": "Nová hlášení:",
  "notifications.column_settings.admin.sign_up": "Nové registrace:",
  "notifications.column_settings.alert": "Oznámení na počítači",
  "notifications.column_settings.favourite": "Oblíbené:",
  "notifications.column_settings.filter_bar.advanced": "Zobrazit všechny kategorie",
  "notifications.column_settings.filter_bar.category": "Panel rychlého filtrování",
  "notifications.column_settings.filter_bar.show_bar": "Zobrazit panel filtrů",


@@ 426,6 447,7 @@
  "notifications.column_settings.update": "Úpravy:",
  "notifications.filter.all": "Vše",
  "notifications.filter.boosts": "Boosty",
  "notifications.filter.favourites": "Oblíbené",
  "notifications.filter.follows": "Sledování",
  "notifications.filter.mentions": "Zmínky",
  "notifications.filter.polls": "Výsledky anket",


@@ 448,10 470,12 @@
  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
  "onboarding.follows.title": "Populární na Mastodonu",
  "onboarding.share.lead": "Dejte lidem vědět, jak vás mohou najít na Mastodonu!",
  "onboarding.share.message": "Jsem {username} na #Mastodonu! Pojď mě sledovat na {url}",
  "onboarding.share.next_steps": "Možné další kroky:",
  "onboarding.share.title": "Sdílejte svůj profil",
  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
  "onboarding.start.skip": "Want to skip right ahead?",
  "onboarding.start.title": "Dokázali jste to!",
  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
  "onboarding.steps.publish_status.body": "Řekněte světu Ahoj.",


@@ 460,11 484,16 @@
  "onboarding.steps.setup_profile.title": "Přizpůsobit svůj profil",
  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
  "onboarding.steps.share_profile.title": "Sdílejte svůj profil",
  "onboarding.tips.2fa": "<strong>Víte, že?</strong> Svůj účet můžete zabezpečit nastavením dvoufaktorového ověřování v nastavení účtu. Funguje s jakoukoli TOTP aplikací podle vašeho výběru, telefonní číslo není nutné!",
  "onboarding.tips.accounts_from_other_servers": "<strong>Víte, že?</strong> Protože je Mastodon decentralizovaný, některé profily, na které narazíte, budou hostovány na jiných serverech, než je ten váš. A přesto s nimi můžete bezproblémově komunikovat! Jejich server se nachází v druhé polovině uživatelského jména!",
  "onboarding.tips.migration": "<strong>Víte, že?</strong> Pokud máte pocit, že {domain} pro vás v budoucnu není vhodnou volbou, můžete se přesunout na jiný Mastodon server, aniž byste přišli o své sledující. Můžete dokonce hostovat svůj vlastní server!",
  "onboarding.tips.verification": "<strong>Víte, že?</strong> Svůj účet můžete ověřit tak, že na své webové stránky umístíte odkaz na váš Mastodon profil a odkaz na stránku přidáte do svého profilu. Nejsou k tomu potřeba žádné poplatky ani dokumenty!",
  "password_confirmation.exceeds_maxlength": "Potvrzení hesla překračuje maximální délku hesla",
  "password_confirmation.mismatching": "Zadaná hesla se neshodují",
  "picture_in_picture.restore": "Vrátit zpět",
  "poll.closed": "Uzavřeno",
  "poll.refresh": "Obnovit",
  "poll.reveal": "Zobrazit výsledky",
  "poll.total_people": "{count, plural, one {# člověk} few {# lidé} many {# lidí} other {# lidí}}",
  "poll.total_votes": "{count, plural, one {# hlas} few {# hlasy} many {# hlasů} other {# hlasů}}",
  "poll.vote": "Hlasovat",


@@ 517,6 546,8 @@
  "report.placeholder": "Další komentáře",
  "report.reasons.dislike": "Nelíbí se mi to",
  "report.reasons.dislike_description": "Není to něco, co chcete vidět",
  "report.reasons.legal": "Je to nezákonné",
  "report.reasons.legal_description": "Domníváte se, že to porušuje zákony vaší země nebo země serveru",
  "report.reasons.other": "Je to něco jiného",
  "report.reasons.other_description": "Problém neodpovídá ostatním kategoriím",
  "report.reasons.spam": "Je to spam",


@@ 536,6 567,7 @@
  "report.unfollow": "Přestat sledovat @{name}",
  "report.unfollow_explanation": "Tento účet sledujete. Abyste už neviděli jeho příspěvky ve své domovské časové ose, přestaňte jej sledovat.",
  "report_notification.attached_statuses": "{count, plural, one {{count} připojený příspěvek} few {{count} připojené příspěvky} many {{count} připojených příspěvků} other {{count} připojených příspěvků}}",
  "report_notification.categories.legal": "Zákonné",
  "report_notification.categories.other": "Ostatní",
  "report_notification.categories.spam": "Spam",
  "report_notification.categories.violation": "Porušení pravidla",


@@ 566,6 598,8 @@
  "server_banner.server_stats": "Statistiky serveru:",
  "sign_in_banner.create_account": "Vytvořit účet",
  "sign_in_banner.sign_in": "Přihlásit se",
  "sign_in_banner.sso_redirect": "Přihlášení nebo Registrace",
  "sign_in_banner.text": "Přihlaste se pro sledování profilů nebo hashtagů, oblíbení, sdílení a odpovídání na příspěvky. Svůj účet můžete také používat k interagování i na jiném serveru.",
  "status.admin_account": "Otevřít moderátorské rozhraní pro @{name}",
  "status.admin_domain": "Otevřít moderátorské rozhraní pro {domain}",
  "status.admin_status": "Otevřít tento příspěvek v moderátorském rozhraní",


@@ 582,6 616,7 @@
  "status.edited": "Upraveno {date}",
  "status.edited_x_times": "Upraveno {count, plural, one {{count}krát} few {{count}krát} many {{count}krát} other {{count}krát}}",
  "status.embed": "Vložit na web",
  "status.favourite": "Oblíbit",
  "status.filter": "Filtrovat tento příspěvek",
  "status.filtered": "Filtrováno",
  "status.hide": "Skrýt příspěvek",

M app/javascript/mastodon/locales/cy.json => app/javascript/mastodon/locales/cy.json +18 -14
@@ 191,7 191,6 @@
  "conversation.open": "Gweld sgwrs",
  "conversation.with": "Gyda {names}",
  "copypaste.copied": "Wedi ei gopïo",
  "copypaste.copy": "Copïo",
  "copypaste.copy_to_clipboard": "Copïo i'r clipfwrdd",
  "directory.federated": "O'r ffedysawd cyfan",
  "directory.local": "O {domain} yn unig",


@@ 299,22 298,25 @@
  "hashtag.follow": "Dilyn hashnod",
  "hashtag.unfollow": "Dad-ddilyn hashnod",
  "home.actions.go_to_explore": "Gweld beth sy'n tueddu",
  "home.actions.go_to_suggestions": "Ffeindio i bobl i'w dilyn",
  "home.actions.go_to_suggestions": "Ffeindio pobl i'w dilyn",
  "home.column_settings.basic": "Syml",
  "home.column_settings.show_reblogs": "Dangos hybiau",
  "home.column_settings.show_replies": "Dangos atebion",
  "home.explore_prompt.body": "Bydd eich llif cartref yn cynnwys cymysgedd o bostiadau o'r hashnodau rydych chi wedi dewis eu dilyn, y bobl rydych chi wedi dewis eu dilyn, a'r postiadau maen nhw'n rhoi hwb iddyn nhw. Mae'n edrych yn eithaf tawel ar hyn o bryd, felly beth am:",
  "home.explore_prompt.title": "Dyma'ch cartref o feewnn Mastodon.",
  "home.explore_prompt.body": "Bydd eich llif cartref yn cynnwys cymysgedd o bostiadau o'r hashnodau rydych chi wedi dewis eu dilyn, y bobl rydych chi wedi dewis eu dilyn, a'r postiadau maen nhw'n rhoi hwb iddyn nhw. Os yw hynny'n teimlo'n rhy dawel, efallai y byddwch am:",
  "home.explore_prompt.title": "Dyma'ch cartref o fewn Mastodon.",
  "home.hide_announcements": "Cuddio cyhoeddiadau",
  "home.show_announcements": "Dangos cyhoeddiadau",
  "interaction_modal.description.favourite": "Gyda chyfrif ar Mastodon, gallwch chi hoffi'r postiad hwn er mwyn roi gwybod i'r awdur eich bod chi'n ei werthfawrogi ac yn ei gadw ar gyfer nes ymlaen.",
  "interaction_modal.description.follow": "Gyda chyfrif ar Mastodon, gallwch ddilyn {name} i dderbyn eu postiadau yn eich llif cartref.",
  "interaction_modal.description.reblog": "Gyda chyfrif ar Mastodon, gallwch hybu'r postiad hwn i'w rannu â'ch dilynwyr.",
  "interaction_modal.description.reply": "Gyda chyfrif ar Mastodon, gallwch ymateb i'r postiad hwn.",
  "interaction_modal.login.action": "Ewch â fi adref",
  "interaction_modal.login.prompt": "Parth eich gweinydd cartref, e.e. mastodon.social",
  "interaction_modal.no_account_yet": "Dim ar Mastodon?",
  "interaction_modal.on_another_server": "Ar weinydd gwahanol",
  "interaction_modal.on_this_server": "Ar y gweinydd hwn",
  "interaction_modal.other_server_instructions": "Copïwch a gludwch yr URL hwn i faes chwilio eich hoff ap Mastodon neu ryngwyneb gwe eich gweinydd Mastodon.",
  "interaction_modal.preamble": "Gan fod Mastodon wedi'i ddatganoli, gallwch ddefnyddio'ch cyfrif presennol a gynhelir gan weinydd Mastodon arall neu blatfform cydnaws os nad oes gennych gyfrif ar yr un hwn.",
  "interaction_modal.sign_in": "Nid ydych wedi mewngofnodi i'r gweinydd hwn. Ble mae eich cyfrif yn cael ei gynnal?",
  "interaction_modal.sign_in_hint": "Awgrym: Dyna'r wefan lle gwnaethoch gofrestru. Os nad ydych yn cofio, edrychwch am yr e-bost croeso yn eich blwch derbyn. Gallwch hefyd nodi eich enw defnyddiwr llawn! (e.e. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Hoffi postiad {name}",
  "interaction_modal.title.follow": "Dilyn {name}",
  "interaction_modal.title.reblog": "Hybu postiad {name}",


@@ 363,6 365,7 @@
  "lightbox.previous": "Blaenorol",
  "limited_account_hint.action": "Dangos y proffil beth bynnag",
  "limited_account_hint.title": "Mae'r proffil hwn wedi cael ei guddio gan gymedrolwyr {domain}.",
  "link_preview.author": "Gan {name}",
  "lists.account.add": "Ychwanegu at restr",
  "lists.account.remove": "Tynnu o'r rhestr",
  "lists.delete": "Dileu rhestr",


@@ 387,7 390,7 @@
  "navigation_bar.about": "Ynghylch",
  "navigation_bar.advanced_interface": "Agor mewn rhyngwyneb gwe uwch",
  "navigation_bar.blocks": "Defnyddwyr wedi eu blocio",
  "navigation_bar.bookmarks": "Llyfrnodau",
  "navigation_bar.bookmarks": "Nodau Tudalen",
  "navigation_bar.community_timeline": "Ffrwd leol",
  "navigation_bar.compose": "Cyfansoddi post newydd",
  "navigation_bar.direct": "Crybwylliadau preifat",


@@ 456,8 459,8 @@
  "notifications.permission_denied_alert": "Nid oes modd galluogi hysbysiadau bwrdd gwaith, gan fod caniatâd porwr wedi'i wrthod o'r blaen",
  "notifications.permission_required": "Nid oes hysbysiadau bwrdd gwaith ar gael oherwydd na roddwyd y caniatâd gofynnol.",
  "notifications_permission_banner.enable": "Galluogi hysbysiadau bwrdd gwaith",
  "notifications_permission_banner.how_to_control": "I dderbyn hysbysiadau pan nad yw Mastodon ar agor, galluogwch hysbysiadau bwrdd gwaith. Gallwch reoli'n union pa fathau o ryngweithiadau sy'n cynhyrchu hysbysiadau bwrdd gwaith trwy'r botwm {icon} uchod unwaith y byddant wedi'u galluogi.",
  "notifications_permission_banner.title": "Peidiwch colli dim",
  "notifications_permission_banner.how_to_control": "I dderbyn hysbysiadau pan nad yw Mastodon ar agor, galluogwch hysbysiadau bwrdd gwaith. Gallwch reoli'n union pa fathau o ryngweithiadau sy'n cynhyrchu hysbysiadau bwrdd gwaith trwy'r botwm {icon} uchod unwaith y byddan nhw wedi'u galluogi.",
  "notifications_permission_banner.title": "Peidiwch â cholli dim",
  "onboarding.action.back": "Ewch â fi yn ôl",
  "onboarding.actions.back": "Ewch â fi yn ôl",
  "onboarding.actions.go_to_explore": "Gweld beth yw'r tuedd",


@@ 501,7 504,7 @@
  "privacy.change": "Addasu preifatrwdd y post",
  "privacy.direct.long": "Dim ond yn weladwy i ddefnyddwyr a grybwyllwyd",
  "privacy.direct.short": "Dim ond pobl sy wedi'u crybwyll",
  "privacy.private.long": "Dim ond pobl sy'n ddilynwyrl",
  "privacy.private.long": "Dim ond pobl sy'n ddilynwyr",
  "privacy.private.short": "Dilynwyr yn unig",
  "privacy.public.long": "Gweladwy i bawb",
  "privacy.public.short": "Cyhoeddus",


@@ 510,7 513,7 @@
  "privacy_policy.last_updated": "Diweddarwyd ddiwethaf ar {date}",
  "privacy_policy.title": "Polisi Preifatrwydd",
  "refresh": "Adnewyddu",
  "regeneration_indicator.label": "Llwytho…",
  "regeneration_indicator.label": "Yn llwytho…",
  "regeneration_indicator.sublabel": "Mae eich ffrwd cartref yn cael ei baratoi!",
  "relative_time.days": "{number}d",
  "relative_time.full.days": "{number, plural, one {# diwrnod} other {# diwrnod}} yn ôl",


@@ 590,11 593,12 @@
  "server_banner.about_active_users": "Pobl sy'n defnyddio'r gweinydd hwn yn ystod y 30 diwrnod diwethaf (Defnyddwyr Gweithredol Misol)",
  "server_banner.active_users": "defnyddwyr gweithredol",
  "server_banner.administered_by": "Gweinyddir gan:",
  "server_banner.introduction": "Mae {domain} yn rhan o'r rhwydwaith cymdeithasol datganoledig a bwerir gan {mastodon}.",
  "server_banner.introduction": "Mae {domain} yn rhan o'r rhwydwaith cymdeithasol datganoledig sy'n cael ei bweru gan {mastodon}.",
  "server_banner.learn_more": "Dysgu mwy",
  "server_banner.server_stats": "Ystadegau'r gweinydd:",
  "sign_in_banner.create_account": "Creu cyfrif",
  "sign_in_banner.sign_in": "Mewngofnodi",
  "sign_in_banner.sso_redirect": "Mewngofnodi neu Gofrestru",
  "sign_in_banner.text": "Mewngofnodwch i ddilyn proffiliau neu hashnodau, ffefrynnau, rhannu ac ymateb i bostiadau. Gallwch hefyd ryngweithio o'ch cyfrif ar weinyddion gwahanol.",
  "status.admin_account": "Agor rhyngwyneb cymedroli ar gyfer @{name}",
  "status.admin_domain": "Agor rhyngwyneb cymedroli {domain}",


@@ 635,7 639,7 @@
  "status.reblogged_by": "Hybodd {name}",
  "status.reblogs.empty": "Does neb wedi hybio'r post yma eto. Pan y bydd rhywun yn gwneud, byddent yn ymddangos yma.",
  "status.redraft": "Dileu ac ailddrafftio",
  "status.remove_bookmark": "Dileu llyfrnod",
  "status.remove_bookmark": "Tynnu nod tudalen",
  "status.replied_to": "Wedi ateb {name}",
  "status.reply": "Ateb",
  "status.replyAll": "Ateb i edefyn",


@@ 678,7 682,7 @@
  "units.short.thousand": "{count}mil",
  "upload_area.title": "Llusgwch a gollwng i lwytho",
  "upload_button.label": "Ychwanegwch gyfryngau (JPEG, PNG, GIF, WebM, MP4, MOV)",
  "upload_error.limit": "Wedi mynd heibio'r uchafswm terfyn uwchlwytho.",
  "upload_error.limit": "Wedi pasio'r uchafswm llwytho.",
  "upload_error.poll": "Nid oes modd llwytho ffeiliau â phleidleisiau.",
  "upload_form.audio_description": "Disgrifio ar gyfer pobl sydd â cholled clyw",
  "upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg",

M app/javascript/mastodon/locales/da.json => app/javascript/mastodon/locales/da.json +10 -4
@@ 191,7 191,6 @@
  "conversation.open": "Vis samtale",
  "conversation.with": "Med {names}",
  "copypaste.copied": "Kopieret",
  "copypaste.copy": "Kopiér",
  "copypaste.copy_to_clipboard": "Kopiér til udklipsholder",
  "directory.federated": "Fra kendt fedivers",
  "directory.local": "Kun fra {domain}",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Nogle af disse",
  "hashtag.column_settings.tag_mode.none": "Ingen af disse",
  "hashtag.column_settings.tag_toggle": "Inkludér ekstra tags for denne kolonne",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} deltager} other {{counter} deltagere}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}} i dag",
  "hashtag.follow": "Følg hashtag",
  "hashtag.unfollow": "Stop med at følge hashtag",
  "home.actions.go_to_explore": "Se, hvad som trender",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Grundlæggende",
  "home.column_settings.show_reblogs": "Vis boosts",
  "home.column_settings.show_replies": "Vis svar",
  "home.explore_prompt.body": "Dit hjemmefeed vil have en blanding af indlæg fra de hashtags, du har valgt at følge, de personer, du har valgt at følge, og de indlæg, de booster. Her virker temmelig stille lige nu, så hvad med at prøve:",
  "home.explore_prompt.body": "Hjemmefeedet vil indeholde en blanding af indlæg fra de hashtags og personer, du følger samt de indlæg, de booster. Føles synes for stille, kan du prøve:",
  "home.explore_prompt.title": "Dette er din hjemmebase i Mastodon.",
  "home.hide_announcements": "Skjul bekendtgørelser",
  "home.show_announcements": "Vis bekendtgørelser",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Med en konto på Mastodon kan du følge {name} for at modtage vedkommendes indlæg i dit hjemmefeed.",
  "interaction_modal.description.reblog": "Med en konto på Mastodon kan dette indlæg fremhæves så det deles med egne følgere.",
  "interaction_modal.description.reply": "Med en konto på Mastodon kan dette indlæg besvares.",
  "interaction_modal.login.action": "Gå til hjemmeserver",
  "interaction_modal.login.prompt": "Hjemmeserverdomænet, f.eks. mastodon.social",
  "interaction_modal.no_account_yet": "Ikke på Mastodon?",
  "interaction_modal.on_another_server": "På en anden server",
  "interaction_modal.on_this_server": "På denne server",
  "interaction_modal.other_server_instructions": "Kopiér og indsæt denne URL i søgefeltet på den foretrukne Mastodon-app eller Mastodon-serverens webgrænseflade.",
  "interaction_modal.preamble": "Da Mastodon er decentraliseret, kan man bruge sin eksisterende konto hostet af en anden Mastodon-server eller kompatibel platform, såfremt man ikke har en konto på denne.",
  "interaction_modal.sign_in": "Du er ikke logget ind på denne server. Hvor hostes din konto?",
  "interaction_modal.sign_in_hint": "Tip: Det er webstedet, hvor du tilmeldte dig. Har du glemt det, så kig efter velkomstmailen i indbakken. Du kan også angive dit fulde brugernavn! (f.eks. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Gør {name}s indlæg til favorit",
  "interaction_modal.title.follow": "Følg {name}",
  "interaction_modal.title.reblog": "Boost {name}s indlæg",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "Serverstatstik:",
  "sign_in_banner.create_account": "Opret konto",
  "sign_in_banner.sign_in": "Log ind",
  "sign_in_banner.sso_redirect": "Log ind eller Tilmeld",
  "sign_in_banner.text": "Log ind for at følge profiler eller hashtags, markere som favorit, dele og besvare indlæg eller interagere fra din konto på en anden server.",
  "status.admin_account": "Åbn modereringsbrugerflade for @{name}",
  "status.admin_domain": "Åbn modereringsbrugerflade for {domain}",

M app/javascript/mastodon/locales/de.json => app/javascript/mastodon/locales/de.json +20 -14
@@ 150,7 150,7 @@
  "compose_form.poll.switch_to_multiple": "Mehrfachauswahl erlauben",
  "compose_form.poll.switch_to_single": "Nur Einzelauswahl erlauben",
  "compose_form.publish": "Veröffentlichen",
  "compose_form.publish_form": "Veröffentlichen",
  "compose_form.publish_form": "Neuer Beitrag",
  "compose_form.publish_loud": "{publish}!",
  "compose_form.save_changes": "Änderungen speichern",
  "compose_form.sensitive.hide": "{count, plural, one {Mit einer Inhaltswarnung versehen} other {Mit einer Inhaltswarnung versehen}}",


@@ 191,7 191,6 @@
  "conversation.open": "Unterhaltung anzeigen",
  "conversation.with": "Mit {names}",
  "copypaste.copied": "Kopiert",
  "copypaste.copy": "Kopieren",
  "copypaste.copy_to_clipboard": "In die Zwischenablage kopieren",
  "directory.federated": "Aus bekanntem Fediverse",
  "directory.local": "Nur von der Domain {domain}",


@@ 202,7 201,7 @@
  "dismissable_banner.community_timeline": "Das sind die neuesten öffentlichen Beiträge von Profilen, deren Konten von {domain} verwaltet werden.",
  "dismissable_banner.dismiss": "Ablehnen",
  "dismissable_banner.explore_links": "Diese Nachrichten werden heute am häufigsten im sozialen Netzwerk geteilt. Neuere Nachrichten, die von vielen verschiedenen Profilen veröffentlicht wurden, werden höher eingestuft.",
  "dismissable_banner.explore_statuses": "Diese Beiträge stammen aus dem gesamten sozialen Netz und gewinnen derzeit an Reichweite. Neuere Beiträge, die häufiger geteilt und favorisiert wurden, werden höher eingestuft.",
  "dismissable_banner.explore_statuses": "Diese Beiträge stammen aus dem gesamten sozialen Netzwerk und gewinnen derzeit an Reichweite. Neuere Beiträge, die häufiger geteilt und favorisiert wurden, werden höher eingestuft.",
  "dismissable_banner.explore_tags": "Das sind Hashtags, die derzeit an Reichweite gewinnen. Hashtags, die von vielen verschiedenen Profilen verwendet werden, werden höher eingestuft.",
  "dismissable_banner.public_timeline": "Das sind die neuesten öffentlichen Beiträge von Profilen im sozialen Netzwerk, denen Leute auf {domain} folgen.",
  "embed.instructions": "Du kannst diesen Beitrag außerhalb des Fediverse (z. B. auf deiner Website) einbetten, indem du diesen iFrame-Code einfügst.",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Eines von diesen",
  "hashtag.column_settings.tag_mode.none": "Keines von diesen",
  "hashtag.column_settings.tag_toggle": "Zusätzliche Hashtags dieser Spalte hinzufügen",
  "hashtag.counter_by_accounts": "{count, plural, one{{counter} Beteiligte*r} other{{counter} Beteiligte}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}} heute",
  "hashtag.follow": "Hashtag folgen",
  "hashtag.unfollow": "Hashtag entfolgen",
  "home.actions.go_to_explore": "Trends ansehen",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Einfach",
  "home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen",
  "home.column_settings.show_replies": "Antworten anzeigen",
  "home.explore_prompt.body": "Deine Startseite wird eine Mischung aus Beiträgen mit gefolgten Hashtags und den Profilen, denen du folgst sowie den Beiträgen, die sie teilen, enthalten. Aktuell ist es noch etwas still. Wie wäre es mit:",
  "home.explore_prompt.body": "Deine Startseite wird eine Mischung aus Beiträgen mit Hashtags und den Profilen, denen du folgst sowie den Beiträgen, die sie teilen, enthalten. Sollte es sich zu still anfühlen:",
  "home.explore_prompt.title": "Das ist dein Zuhause bei Mastodon.",
  "home.hide_announcements": "Ankündigungen ausblenden",
  "home.show_announcements": "Ankündigungen anzeigen",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Mit einem Mastodon-Konto kannst du {name} folgen, um die Beiträge auf deiner Startseite zu sehen.",
  "interaction_modal.description.reblog": "Mit einem Mastodon-Konto kannst du die Reichweite dieses Beitrags erhöhen, indem du ihn mit deinen Followern teilst.",
  "interaction_modal.description.reply": "Mit einem Mastodon-Konto kannst du auf diesen Beitrag antworten.",
  "interaction_modal.login.action": "Zurück zur Startseite",
  "interaction_modal.login.prompt": "Adresse deines Servers, z. B. mastodon.social",
  "interaction_modal.no_account_yet": "Nicht auf Mastodon?",
  "interaction_modal.on_another_server": "Auf einem anderen Server",
  "interaction_modal.on_this_server": "Auf diesem Server",
  "interaction_modal.other_server_instructions": "Kopiere diese URL und füge sie in das Suchfeld deiner bevorzugten Mastodon-App oder in das Webinterface deines Mastodon-Servers ein.",
  "interaction_modal.preamble": "Da Mastodon dezentralisiert ist, kannst du dein bestehendes Konto auf einem anderen Mastodon-Server oder einer kompatiblen Plattform nutzen, wenn du kein Konto auf dieser Plattform hast.",
  "interaction_modal.sign_in": "Du bist auf diesem Server nicht angemeldet. Auf welchem Server wird dein Konto verwaltet?",
  "interaction_modal.sign_in_hint": "Hinweis: Hierbei handelt es sich um die Website, auf der du dich registriert hast. Wenn du dich nicht mehr daran erinnerst, dann kannst du sie in der Willkommens-E-Mail nachsehen. Du kannst auch deinen vollständigen Profilnamen eingeben! (z. B. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Beitrag von {name} favorisieren",
  "interaction_modal.title.follow": "Folge {name}",
  "interaction_modal.title.reblog": "Beitrag von {name} teilen",


@@ 471,7 476,7 @@
  "onboarding.share.message": "Ich bin {username} auf #Mastodon! Folge mir auf {url}",
  "onboarding.share.next_steps": "Mögliche nächste Schritte:",
  "onboarding.share.title": "Teile dein Profil",
  "onboarding.start.lead": "Du bist nun ein Teil von Mastodon – eine einzigartige, dezentralisierte Social Media-Plattform, bei der du und kein Algorithmus deine eigene Erfahrung gestaltest. Fangen wir an, diese neue soziale Dimension zu erkunden:",
  "onboarding.start.lead": "Du bist nun ein Teil von Mastodon – eine einzigartige, dezentralisierte Social-Media-Plattform, bei der du und kein Algorithmus deine eigene Erfahrung gestaltest. Fangen wir an, diese neue soziale Dimension zu erkunden:",
  "onboarding.start.skip": "Du benötigst keine Hilfe für den Einstieg?",
  "onboarding.start.title": "Du hast es geschafft!",
  "onboarding.steps.follow_people.body": "Interessanten Profilen zu folgen ist das, was Mastodon ausmacht.",


@@ 506,7 511,7 @@
  "privacy.private.short": "Nur Follower",
  "privacy.public.long": "Für alle sichtbar",
  "privacy.public.short": "Öffentlich",
  "privacy.unlisted.long": "Sichtbar für alle, aber nicht über Suchfunktion",
  "privacy.unlisted.long": "Für alle sichtbar, aber nicht über die Suche zu finden",
  "privacy.unlisted.short": "Nicht gelistet",
  "privacy_policy.last_updated": "Stand: {date}",
  "privacy_policy.title": "Datenschutzerklärung",


@@ 526,7 531,7 @@
  "relative_time.today": "heute",
  "reply_indicator.cancel": "Abbrechen",
  "report.block": "Blockieren",
  "report.block_explanation": "Dir wird es nicht länger möglich sein, die Beiträge dieses Konto zu sehen. Das blockierte Profil wird nicht mehr in der Lage sein, deine Beiträge zu sehen oder dir zu folgen. Die Person hinter dem Konto wird mitbekommen, dass du ihr Konto blockiert hast.",
  "report.block_explanation": "Du wirst keine Beiträge mehr von diesem Konto sehen. Das blockierte Konto wird deine Beiträge nicht mehr sehen oder dir folgen können. Die Person könnte mitbekommen, dass du sie blockiert hast.",
  "report.categories.other": "Andere",
  "report.categories.spam": "Spam",
  "report.categories.violation": "Der Inhalt verletzt eine oder mehrere Serverregeln",


@@ 539,13 544,13 @@
  "report.forward": "Meldung zusätzlich an {target} weiterleiten",
  "report.forward_hint": "Dieses Konto gehört zu einem anderen Server. Soll eine anonymisierte Kopie der Meldung auch dorthin gesendet werden?",
  "report.mute": "Stummschalten",
  "report.mute_explanation": "Du wirst die Beiträge vom Konto nicht mehr sehen. Das Konto kann dir immer noch folgen, und die Person hinter dem Konto wird deine Beiträge sehen können und nicht wissen, dass du sie stummgeschaltet hast.",
  "report.mute_explanation": "Du wirst keine Beiträge mehr von diesem Konto sehen. Das stummgeschaltete Konto wird dir weiterhin folgen und deine Beiträge sehen können. Die Person wird nicht mitbekommen, dass du sie stummgeschaltet hast.",
  "report.next": "Weiter",
  "report.placeholder": "Ergänzende Hinweise",
  "report.reasons.dislike": "Das gefällt mir nicht",
  "report.reasons.dislike_description": "Das ist etwas, das du nicht sehen möchtest",
  "report.reasons.legal": "Das ist illegal",
  "report.reasons.legal_description": "Du bist davon überzeugt, dass es gegen die Gesetze deines Landes oder des Landes des Servers verstößt",
  "report.reasons.legal_description": "Du glaubst, dass es gegen die Gesetze deines Landes oder des Landes des Servers verstößt",
  "report.reasons.other": "Es ist etwas anderes",
  "report.reasons.other_description": "Der Vorfall passt zu keiner dieser Kategorien",
  "report.reasons.spam": "Das ist Spam",


@@ 555,8 560,8 @@
  "report.rules.subtitle": "Wähle alle zutreffenden Inhalte aus",
  "report.rules.title": "Welche Regeln werden verletzt?",
  "report.statuses.subtitle": "Wähle alle zutreffenden Inhalte aus",
  "report.statuses.title": "Gibt es Beiträge, die diesen Bericht untermauern?",
  "report.submit": "Absenden",
  "report.statuses.title": "Gibt es Beiträge, die diese Meldung bekräftigen?",
  "report.submit": "Senden",
  "report.target": "{target} melden",
  "report.thanks.take_action": "Das sind deine Möglichkeiten zu bestimmen, was du auf Mastodon sehen möchtest:",
  "report.thanks.take_action_actionable": "Während wir den Vorfall überprüfen, kannst du gegen @{name} weitere Maßnahmen ergreifen:",


@@ 591,11 596,12 @@
  "server_banner.about_active_users": "Personen, die diesen Server in den vergangenen 30 Tagen verwendet haben (monatlich aktive Nutzer*innen)",
  "server_banner.active_users": "aktive Profile",
  "server_banner.administered_by": "Verwaltet von:",
  "server_banner.introduction": "{domain} ist ein Teil des dezentralisierten sozialen Netzwerks, angetrieben von {mastodon}.",
  "server_banner.introduction": "{domain} ist Teil eines dezentralisierten sozialen Netzwerks, angetrieben von {mastodon}.",
  "server_banner.learn_more": "Mehr erfahren",
  "server_banner.server_stats": "Serverstatistiken:",
  "sign_in_banner.create_account": "Konto erstellen",
  "sign_in_banner.sign_in": "Anmelden",
  "sign_in_banner.sso_redirect": "Anmelden oder registrieren",
  "sign_in_banner.text": "Melde dich an, um Profilen oder Hashtags zu folgen, Beiträge zu favorisieren, zu teilen und auf sie zu antworten. Du kannst auch von deinem Konto aus auf einem anderen Server interagieren.",
  "status.admin_account": "@{name} moderieren",
  "status.admin_domain": "{domain} moderieren",

M app/javascript/mastodon/locales/el.json => app/javascript/mastodon/locales/el.json +0 -2
@@ 177,7 177,6 @@
  "conversation.open": "Προβολή συνομιλίας",
  "conversation.with": "Με {names}",
  "copypaste.copied": "Αντιγράφηκε",
  "copypaste.copy": "Αντιγραφή",
  "copypaste.copy_to_clipboard": "Αντιγραφή στο πρόχειρο",
  "directory.federated": "Από το γνωστό fediverse",
  "directory.local": "Μόνο από {domain}",


@@ 287,7 286,6 @@
  "interaction_modal.description.reply": "Με ένα λογαριασμό Mastodon, μπορείς να απαντήσεις σε αυτή την ανάρτηση.",
  "interaction_modal.on_another_server": "Σε διαφορετικό διακομιστή",
  "interaction_modal.on_this_server": "Σε αυτόν τον διακομιστή",
  "interaction_modal.preamble": "Δεδομένου ότι το Mastodon είναι αποκεντρωμένο, μπορείς να χρησιμοποιείς τον υπάρχοντα λογαριασμό σου που φιλοξενείται σε άλλον διακομιστή του Mastodon ή σε συμβατή πλατφόρμα, αν δεν έχετε λογαριασμό σε αυτόν.",
  "interaction_modal.title.follow": "Ακολούθησε {name}",
  "interaction_modal.title.reblog": "Ενίσχυσε την ανάρτηση του {name}",
  "interaction_modal.title.reply": "Απάντηση στην ανάρτηση του {name}",

M app/javascript/mastodon/locales/en-GB.json => app/javascript/mastodon/locales/en-GB.json +37 -33
@@ 13,14 13,14 @@
  "about.rules": "Server rules",
  "account.account_note_header": "Note",
  "account.add_or_remove_from_list": "Add or Remove from lists",
  "account.badges.bot": "Bot",
  "account.badges.bot": "Automated",
  "account.badges.group": "Group",
  "account.block": "Block @{name}",
  "account.block_domain": "Unblock domain {domain}",
  "account.block_domain": "Block domain {domain}",
  "account.block_short": "Block",
  "account.blocked": "Blocked",
  "account.browse_more_on_origin_server": "Browse more on the original profile",
  "account.cancel_follow_request": "Withdraw follow request",
  "account.cancel_follow_request": "Cancel follow",
  "account.direct": "Privately mention @{name}",
  "account.disable_notifications": "Stop notifying me when @{name} posts",
  "account.domain_blocked": "Domain blocked",


@@ 150,7 150,7 @@
  "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": "Publish",
  "compose_form.publish_form": "Publish",
  "compose_form.publish_form": "New post",
  "compose_form.publish_loud": "{publish}!",
  "compose_form.save_changes": "Save changes",
  "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}",


@@ 191,7 191,6 @@
  "conversation.open": "View conversation",
  "conversation.with": "With {names}",
  "copypaste.copied": "Copied",
  "copypaste.copy": "Copy",
  "copypaste.copy_to_clipboard": "Copy to clipboard",
  "directory.federated": "From known fediverse",
  "directory.local": "From {domain} only",


@@ 236,7 235,7 @@
  "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
  "empty_column.followed_tags": "You have not followed any hashtags yet. When you do, they will show up here.",
  "empty_column.hashtag": "There is nothing in this hashtag yet.",
  "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
  "empty_column.home": "Your home timeline is empty! Follow more people to fill it up.",
  "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": "You don't have any lists yet. When you create one, it will show up here.",
  "empty_column.mutes": "You haven't muted any users yet.",


@@ 296,6 295,7 @@
  "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",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} Following} other {{counter} Following}}",
  "hashtag.follow": "Follow hashtag",
  "hashtag.unfollow": "Unfollow hashtag",
  "home.actions.go_to_explore": "See what's trending",


@@ 303,7 303,7 @@
  "home.column_settings.basic": "Basic",
  "home.column_settings.show_reblogs": "Show boosts",
  "home.column_settings.show_replies": "Show replies",
  "home.explore_prompt.body": "Your home feed will have a mix of posts from the hashtags you've chosen to follow, the people you've chosen to follow, and the posts they boost. It's looking pretty quiet right now, so how about:",
  "home.explore_prompt.body": "Your home feed will have a mix of posts from the hashtags you've chosen to follow, the people you've chosen to follow, and the posts they boost. If that feels too quiet, you may want to:",
  "home.explore_prompt.title": "This is your home base within Mastodon.",
  "home.hide_announcements": "Hide announcements",
  "home.show_announcements": "Show announcements",


@@ 311,10 311,13 @@
  "interaction_modal.description.follow": "With an account on Mastodon, you can follow {name} to receive their posts in your home feed.",
  "interaction_modal.description.reblog": "With an account on Mastodon, you can boost this post to share it with your own followers.",
  "interaction_modal.description.reply": "With an account on Mastodon, you can respond to this post.",
  "interaction_modal.login.action": "Take me home",
  "interaction_modal.login.prompt": "Domain of your home server, e.g. mastodon.social",
  "interaction_modal.no_account_yet": "Not on Mastodon?",
  "interaction_modal.on_another_server": "On a different server",
  "interaction_modal.on_this_server": "On this server",
  "interaction_modal.other_server_instructions": "Copy and paste this URL into the search field of your favourite Mastodon app or the web interface of your Mastodon server.",
  "interaction_modal.preamble": "Since Mastodon is decentralised, you can use your existing account hosted by another Mastodon server or compatible platform if you don't have an account on this one.",
  "interaction_modal.sign_in": "You are not logged in to this server. Where is your account hosted?",
  "interaction_modal.sign_in_hint": "Tip: That's the website where you signed up. If you don't remember, look for the welcome e-mail in your inbox. You can also enter your full username! (e.g. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Favourite {name}'s post",
  "interaction_modal.title.follow": "Follow {name}",
  "interaction_modal.title.reblog": "Boost {name}'s post",


@@ 335,14 338,14 @@
  "keyboard_shortcuts.favourites": "Open favourites list",
  "keyboard_shortcuts.federated": "to open federated timeline",
  "keyboard_shortcuts.heading": "Keyboard Shortcuts",
  "keyboard_shortcuts.home": "to open home timeline",
  "keyboard_shortcuts.home": "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.notifications": "Open notifications column",
  "keyboard_shortcuts.open_media": "to open media",
  "keyboard_shortcuts.pinned": "to open pinned posts list",
  "keyboard_shortcuts.profile": "to open author's profile",


@@ 352,10 355,10 @@
  "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.toggle_sensitivity": "Show/hide media",
  "keyboard_shortcuts.toot": "to start a brand new post",
  "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
  "keyboard_shortcuts.up": "to move up in the list",
  "keyboard_shortcuts.up": "Move up in the list",
  "lightbox.close": "Close",
  "lightbox.compress": "Compress image view box",
  "lightbox.expand": "Expand image view box",


@@ 393,7 396,7 @@
  "navigation_bar.compose": "Compose new post",
  "navigation_bar.direct": "Private mentions",
  "navigation_bar.discover": "Discover",
  "navigation_bar.domain_blocks": "Hidden domains",
  "navigation_bar.domain_blocks": "Blocked domains",
  "navigation_bar.edit_profile": "Edit profile",
  "navigation_bar.explore": "Explore",
  "navigation_bar.favourites": "Favourites",


@@ 462,26 465,26 @@
  "onboarding.action.back": "Take me back",
  "onboarding.actions.back": "Take me back",
  "onboarding.actions.go_to_explore": "See what's trending",
  "onboarding.actions.go_to_home": "Go to your home feed",
  "onboarding.actions.go_to_home": "Take me to my home feed",
  "onboarding.compose.template": "Hello #Mastodon!",
  "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.",
  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
  "onboarding.follows.title": "Popular on Mastodon",
  "onboarding.follows.title": "Personalize your home feed",
  "onboarding.share.lead": "Let people know how they can find you on Mastodon!",
  "onboarding.share.message": "I'm {username} on #Mastodon! Come follow me at {url}",
  "onboarding.share.next_steps": "Possible next steps:",
  "onboarding.share.title": "Share your profile",
  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
  "onboarding.start.skip": "Want to skip right ahead?",
  "onboarding.start.lead": "You're now part of Mastodon, a unique, decentralized social media platform where you—not an algorithm—curate your own experience. Let's get you started on this new social frontier:",
  "onboarding.start.skip": "Don't need help getting started?",
  "onboarding.start.title": "You've made it!",
  "onboarding.steps.follow_people.body": "Following interesting people is what Mastodon is all about.",
  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
  "onboarding.steps.publish_status.body": "Say hello to the World.",
  "onboarding.steps.follow_people.title": "Personalize your home feed",
  "onboarding.steps.publish_status.body": "Say hello to the world with text, photos, videos, or polls {emoji}",
  "onboarding.steps.publish_status.title": "Make your first post",
  "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
  "onboarding.steps.setup_profile.title": "Customise your profile",
  "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
  "onboarding.steps.share_profile.title": "Share your profile",
  "onboarding.steps.share_profile.title": "Share your Mastodon profile",
  "onboarding.tips.2fa": "<strong>Did you know?</strong> You can secure your account by setting up two-factor authentication in your account settings. It works with any TOTP app of your choice, no phone number necessary!",
  "onboarding.tips.accounts_from_other_servers": "<strong>Did you know?</strong> Since Mastodon is decentralised, some profiles you come across will be hosted on servers other than yours. And yet you can interact with them seamlessly! Their server is in the second half of their username!",
  "onboarding.tips.migration": "<strong>Did you know?</strong> If you feel like {domain} is not a great server choice for you in the future, you can move to another Mastodon server without losing your followers. You can even host your own server!",


@@ 498,10 501,10 @@
  "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": "Add a poll",
  "privacy.change": "Adjust status privacy",
  "poll_button.remove_poll": "Remove poll",
  "privacy.change": "Change post privacy",
  "privacy.direct.long": "Visible for mentioned users only",
  "privacy.direct.short": "Direct",
  "privacy.direct.short": "Mentioned people only",
  "privacy.private.long": "Visible for followers only",
  "privacy.private.short": "Followers-only",
  "privacy.public.long": "Visible for all",


@@ 541,7 544,7 @@
  "report.mute": "Mute",
  "report.mute_explanation": "You will not see their posts. They can still follow you and see your posts and will not know that they are muted.",
  "report.next": "Next",
  "report.placeholder": "Type or paste additional comments",
  "report.placeholder": "Additional comments",
  "report.reasons.dislike": "I don't like it",
  "report.reasons.dislike_description": "It is not something you want to see",
  "report.reasons.legal": "It's illegal",


@@ 556,8 559,8 @@
  "report.rules.title": "Which rules are being violated?",
  "report.statuses.subtitle": "Select all that apply",
  "report.statuses.title": "Are there any posts that back up this report?",
  "report.submit": "Submit report",
  "report.target": "Report {target}",
  "report.submit": "Submit",
  "report.target": "Reporting {target}",
  "report.thanks.take_action": "Here are your options for controlling what you see on Mastodon:",
  "report.thanks.take_action_actionable": "While we review this, you can take action against @{name}:",
  "report.thanks.title": "Don't want to see this?",


@@ 596,10 599,11 @@
  "server_banner.server_stats": "Server stats:",
  "sign_in_banner.create_account": "Create account",
  "sign_in_banner.sign_in": "Sign in",
  "sign_in_banner.sso_redirect": "Login or Register",
  "sign_in_banner.text": "Login to follow profiles or hashtags, favourite, share and reply to posts. You can also interact from your account on a different server.",
  "status.admin_account": "Open moderation interface for @{name}",
  "status.admin_domain": "Open moderation interface for {domain}",
  "status.admin_status": "Open this status in the moderation interface",
  "status.admin_status": "Open this post in the moderation interface",
  "status.block": "Block @{name}",
  "status.bookmark": "Bookmark",
  "status.cancel_reblog_private": "Unboost",


@@ 627,7 631,7 @@
  "status.more": "More",
  "status.mute": "Mute @{name}",
  "status.mute_conversation": "Mute conversation",
  "status.open": "Expand this status",
  "status.open": "Expand this post",
  "status.pin": "Pin on profile",
  "status.pinned": "Pinned post",
  "status.read_more": "Read more",


@@ 681,13 685,13 @@
  "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.audio_description": "Describe for people who are deaf or hard of hearing",
  "upload_form.description": "Describe for people who are blind or have low vision",
  "upload_form.description_missing": "No description added",
  "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_form.video_description": "Describe for people who are deaf, hard of hearing, blind or have low vision",
  "upload_modal.analyzing_picture": "Analysing picture…",
  "upload_modal.apply": "Apply",
  "upload_modal.applying": "Applying…",


@@ 700,7 704,7 @@
  "upload_modal.preview_label": "Preview ({ratio})",
  "upload_progress.label": "Uploading…",
  "upload_progress.processing": "Processing…",
  "username.taken": "Username is taken - try another. Carlito77",
  "username.taken": "That username is taken. Try another",
  "video.close": "Close video",
  "video.download": "Download file",
  "video.exit_fullscreen": "Exit full screen",

M app/javascript/mastodon/locales/en.json => app/javascript/mastodon/locales/en.json +4 -0
@@ 295,6 295,9 @@
  "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 for this column",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} post} other {{counter} posts}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} post} other {{counter} posts}} today",
  "hashtag.follow": "Follow hashtag",
  "hashtag.unfollow": "Unfollow hashtag",
  "home.actions.go_to_explore": "See what's trending",


@@ 598,6 601,7 @@
  "server_banner.server_stats": "Server stats:",
  "sign_in_banner.create_account": "Create account",
  "sign_in_banner.sign_in": "Login",
  "sign_in_banner.sso_redirect": "Login or Register",
  "sign_in_banner.text": "Login to follow profiles or hashtags, favorite, share and reply to posts. You can also interact from your account on a different server.",
  "status.admin_account": "Open moderation interface for @{name}",
  "status.admin_domain": "Open moderation interface for {domain}",

M app/javascript/mastodon/locales/eo.json => app/javascript/mastodon/locales/eo.json +0 -2
@@ 189,7 189,6 @@
  "conversation.open": "Vidi konversacion",
  "conversation.with": "Kun {names}",
  "copypaste.copied": "Kopiita",
  "copypaste.copy": "Kopii",
  "copypaste.copy_to_clipboard": "Kopii al dosierujo",
  "directory.federated": "El konata fediverso",
  "directory.local": "Nur de {domain}",


@@ 303,7 302,6 @@
  "interaction_modal.description.reply": "Kun konto ĉe Mastodon, vi povos respondi al ĉi tiu mesaĝo.",
  "interaction_modal.on_another_server": "En alia servilo",
  "interaction_modal.on_this_server": "En ĉi tiu servilo",
  "interaction_modal.preamble": "Ĉar Mastodon estas malcentrigita, vi povas uzi jam ekzistantan konton gastigatan de alia Mastodona servilo aŭ kongrua substrato, se vi ne havas konton ĉe tiu ĉi.",
  "interaction_modal.title.follow": "Sekvi {name}",
  "interaction_modal.title.reblog": "Akceli la afiŝon de {name}",
  "interaction_modal.title.reply": "Respondi al la afiŝo de {name}",

M app/javascript/mastodon/locales/es-AR.json => app/javascript/mastodon/locales/es-AR.json +11 -5
@@ 191,7 191,6 @@
  "conversation.open": "Ver conversación",
  "conversation.with": "Con {names}",
  "copypaste.copied": "Copiado",
  "copypaste.copy": "Copiar",
  "copypaste.copy_to_clipboard": "Copiar al portapapeles",
  "directory.federated": "Desde fediverso conocido",
  "directory.local": "Sólo de {domain}",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Cualquiera de estas",
  "hashtag.column_settings.tag_mode.none": "Ninguna de estas",
  "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionales para esta columna",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} mensaje} other {{counter} mensajes}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} mensaje} other {{counter} mensajes}} hoy",
  "hashtag.follow": "Seguir etiqueta",
  "hashtag.unfollow": "Dejar de seguir etiqueta",
  "home.actions.go_to_explore": "Mirá qué está en tendencia",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Básico",
  "home.column_settings.show_reblogs": "Mostrar adhesiones",
  "home.column_settings.show_replies": "Mostrar respuestas",
  "home.explore_prompt.body": "Tu línea temporal principal tendrá una mezcla de mensajes de etiquetas que hayás decidido seguir, cuentas que hayás seguido y mensajes a los que éstas adhieran. Ahora está muy tranquilo por acá, así que, qué te parece:",
  "home.explore_prompt.body": "Tu línea temporal principal tendrá una mezcla de mensajes de etiquetas que hayás decidido seguir, cuentas que hayás seguido y mensajes a los que éstas adhieran. Si está muy tranquilo por acá, quizás quieras:",
  "home.explore_prompt.title": "Este es tu inicio en Mastodon.",
  "home.hide_announcements": "Ocultar anuncios",
  "home.show_announcements": "Mostrar anuncios",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Con una cuenta en Mastodon, podés seguir a {name} para recibir sus mensajes en tu línea temporal principal.",
  "interaction_modal.description.reblog": "Con una cuenta en Mastodon, podés adherir a este mensaje para compartirlo con tus propios seguidores.",
  "interaction_modal.description.reply": "Con una cuenta en Mastodon, podés responder a este mensaje.",
  "interaction_modal.login.action": "Llevame al comienzo",
  "interaction_modal.login.prompt": "Dominio de su servidor de inicio, p. ej., mastodon.social",
  "interaction_modal.no_account_yet": "¿No tenés cuenta en Mastodon?",
  "interaction_modal.on_another_server": "En un servidor diferente",
  "interaction_modal.on_this_server": "En este servidor",
  "interaction_modal.other_server_instructions": "Copiá y pegá esta dirección web en la barra de búsqueda de tu aplicación favorita de Mastodon, o en la interface web de tu servidor de Mastodon.",
  "interaction_modal.preamble": "Ya que Mastodon es descentralizado, podés usar tu cuenta existente alojada por otro servidor Mastodon (u otra plataforma compatible, si no tenés una cuenta en ésta).",
  "interaction_modal.sign_in": "No iniciaste sesión en este servidor. ¿Dónde se encuentra alojada tu cuenta?",
  "interaction_modal.sign_in_hint": "Ayuda: es el sitio web en donde te registraste. Si no te acordás, buscá el correo electrónico de bienvenida en tu cuenta de email. También podés usar tu nombre de usuario entero, p. ej., @tunombredeusuario@mastodon.social.",
  "interaction_modal.title.favourite": "Marcar como favorito el mensaje de {name}",
  "interaction_modal.title.follow": "Seguir a {name}",
  "interaction_modal.title.reblog": "Adherir al mensaje de {name}",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "Estadísticas del servidor:",
  "sign_in_banner.create_account": "Crear cuenta",
  "sign_in_banner.sign_in": "Iniciar sesión",
  "sign_in_banner.sso_redirect": "Iniciá sesión o registrate",
  "sign_in_banner.text": "Iniciá sesión para seguir cuentas o etiquetas, marcar mensajes como favoritos, compartirlos y responderlos. También podés interactuar desde tu cuenta en un servidor diferente.",
  "status.admin_account": "Abrir interface de moderación para @{name}",
  "status.admin_domain": "Abrir interface de moderación para {domain}",


@@ 671,7 677,7 @@
  "timeline_hint.resources.followers": "Tus seguidores",
  "timeline_hint.resources.follows": "Las cuentas que seguís",
  "timeline_hint.resources.statuses": "Mensajes más antiguos",
  "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} en el/los pasado/s {days, plural, one {día} other {{days} días}}",
  "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} en {days, plural, one {el pasado día} other {los pasados {days} días}}",
  "trends.trending_now": "Tendencia ahora",
  "ui.beforeunload": "Tu borrador se perderá si abandonás Mastodon.",
  "units.short.billion": "{count}MM",

M app/javascript/mastodon/locales/es-MX.json => app/javascript/mastodon/locales/es-MX.json +24 -3
@@ 191,7 191,6 @@
  "conversation.open": "Ver conversación",
  "conversation.with": "Con {names}",
  "copypaste.copied": "Copiado",
  "copypaste.copy": "Copiar",
  "copypaste.copy_to_clipboard": "Copiar al portapapeles",
  "directory.federated": "Desde el fediverso conocido",
  "directory.local": "Sólo de {domain}",


@@ 202,6 201,7 @@
  "dismissable_banner.community_timeline": "Estas son las publicaciones públicas más recientes de las personas cuyas cuentas están alojadas en {domain}.",
  "dismissable_banner.dismiss": "Descartar",
  "dismissable_banner.explore_links": "Estas noticias están siendo discutidas por personas en este y otros servidores de la red descentralizada en este momento.",
  "dismissable_banner.explore_statuses": "Estas son las publicaciones que están ganando popularidad en la web social hoy. Las publicaciones recientes con más impulsos y favoritos obtienen más exposición.",
  "dismissable_banner.explore_tags": "Se trata de hashtags que están ganando adeptos en las redes sociales hoy en día. Los hashtags que son utilizados por más personas diferentes se clasifican mejor.",
  "dismissable_banner.public_timeline": "Estos son los toots públicos más recientes de personas en la web social a las que sigue la gente en {domain}.",
  "embed.instructions": "Añade este toot a tu sitio web con el siguiente código.",


@@ 230,6 230,8 @@
  "empty_column.direct": "Aún no tienes menciones privadas. Cuando envíes o recibas una, aparecerán aquí.",
  "empty_column.domain_blocks": "Todavía no hay dominios ocultos.",
  "empty_column.explore_statuses": "Nada es tendencia en este momento. ¡Revisa más tarde!",
  "empty_column.favourited_statuses": "Todavía no tienes publicaciones favoritas. Cuando marques una publicación como favorita, se mostrarán aquí.",
  "empty_column.favourites": "Todavía nadie marcó esta publicación como favorita. Cuando alguien lo haga, se mostrarán aquí.",
  "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.",
  "empty_column.followed_tags": "No estás siguiendo ningún hashtag todavía. Cuando lo hagas, aparecerá aquí.",
  "empty_column.hashtag": "No hay nada en este hashtag aún.",


@@ 293,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Cualquiera de estos",
  "hashtag.column_settings.tag_mode.none": "Ninguno de estos",
  "hashtag.column_settings.tag_toggle": "Incluye etiquetas adicionales para esta columna",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}} hoy",
  "hashtag.follow": "Seguir etiqueta",
  "hashtag.unfollow": "Dejar de seguir etiqueta",
  "home.actions.go_to_explore": "Ver tendencias",


@@ 300,16 305,22 @@
  "home.column_settings.basic": "Básico",
  "home.column_settings.show_reblogs": "Mostrar retoots",
  "home.column_settings.show_replies": "Mostrar respuestas",
  "home.explore_prompt.body": "Tu cronología de inicio tendrá una mezcla de publicaciones de etiquetas que hayas decidido seguir, personas que hayas seguido y publicaciones que estas impulsen. Ahora está muy vacía, por qué no:",
  "home.explore_prompt.body": "Tu cronología de inicio tendrá una mezcla de publicaciones de las etiquetas que has escogido seguir, la gente que has decidido seguir y las publicaciones que impulsen. Si crees que está demasiado tranquila, quizás quieras:",
  "home.explore_prompt.title": "Este es tu punto de partida en Mastodon.",
  "home.hide_announcements": "Ocultar anuncios",
  "home.show_announcements": "Mostrar anuncios",
  "interaction_modal.description.favourite": "Con una cuenta en Mastodon, puedes marcar como favorita esta publicación para que el autor sepa que te gusta, y guardala para más adelante.",
  "interaction_modal.description.follow": "Con una cuenta en Mastodon, puedes seguir {name} para recibir sus publicaciones en tu fuente de inicio.",
  "interaction_modal.description.reblog": "Con una cuenta en Mastodon, puedes impulsar esta publicación para compartirla con tus propios seguidores.",
  "interaction_modal.description.reply": "Con una cuenta en Mastodon, puedes responder a esta publicación.",
  "interaction_modal.login.action": "Ir a Inicio",
  "interaction_modal.login.prompt": "Dominio de tu servidor, por ejemplo mastodon.social",
  "interaction_modal.no_account_yet": "¿Aún no tienes cuenta en Mastodon?",
  "interaction_modal.on_another_server": "En un servidor diferente",
  "interaction_modal.on_this_server": "En este servidor",
  "interaction_modal.preamble": "Ya que Mastodon es descentralizado, puedes usar tu cuenta existente alojada en otro servidor Mastodon o plataforma compatible si no tienes una cuenta en este servidor.",
  "interaction_modal.sign_in": "No estás registrado en este servidor. ¿Dónde tienes tu cuenta?",
  "interaction_modal.sign_in_hint": "Pista: Ese es el sitio donde te registraste. Si no lo recuerdas, busca el correo electrónico de bienvenida en tu bandeja de entrada. También puedes introducir tu nombre de usuario completo (por ejemplo @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Marcar como favorita la publicación de {name}",
  "interaction_modal.title.follow": "Seguir a {name}",
  "interaction_modal.title.reblog": "Impulsar la publicación de {name}",
  "interaction_modal.title.reply": "Responder la publicación de {name}",


@@ 325,6 336,8 @@
  "keyboard_shortcuts.direct": "para abrir la columna de menciones privadas",
  "keyboard_shortcuts.down": "mover hacia abajo en la lista",
  "keyboard_shortcuts.enter": "abrir estado",
  "keyboard_shortcuts.favourite": "Marcar como favorita la publicación",
  "keyboard_shortcuts.favourites": "Abrir lista de favoritos",
  "keyboard_shortcuts.federated": "abrir el timeline federado",
  "keyboard_shortcuts.heading": "Keyboard Shortcuts",
  "keyboard_shortcuts.home": "abrir el timeline propio",


@@ 355,6 368,7 @@
  "lightbox.previous": "Anterior",
  "limited_account_hint.action": "Mostrar perfil de todos modos",
  "limited_account_hint.title": "Este perfil ha sido ocultado por los moderadores de {domain}.",
  "link_preview.author": "Por {name}",
  "lists.account.add": "Añadir a lista",
  "lists.account.remove": "Quitar de lista",
  "lists.delete": "Borrar lista",


@@ 387,6 401,7 @@
  "navigation_bar.domain_blocks": "Dominios ocultos",
  "navigation_bar.edit_profile": "Editar perfil",
  "navigation_bar.explore": "Explorar",
  "navigation_bar.favourites": "Favoritos",
  "navigation_bar.filters": "Palabras silenciadas",
  "navigation_bar.follow_requests": "Solicitudes para seguirte",
  "navigation_bar.followed_tags": "Hashtags seguidos",


@@ 403,6 418,7 @@
  "not_signed_in_indicator.not_signed_in": "Necesitas iniciar sesión para acceder a este recurso.",
  "notification.admin.report": "{name} denunció a {target}",
  "notification.admin.sign_up": "{name} se unio",
  "notification.favourite": "{name} marcó como favorita tu publicación",
  "notification.follow": "{name} te empezó a seguir",
  "notification.follow_request": "{name} ha solicitado seguirte",
  "notification.mention": "{name} te ha mencionado",


@@ 416,6 432,7 @@
  "notifications.column_settings.admin.report": "Nuevas denuncias:",
  "notifications.column_settings.admin.sign_up": "Registros nuevos:",
  "notifications.column_settings.alert": "Notificaciones de escritorio",
  "notifications.column_settings.favourite": "Favoritos:",
  "notifications.column_settings.filter_bar.advanced": "Mostrar todas las categorías",
  "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido",
  "notifications.column_settings.filter_bar.show_bar": "Mostrar barra de filtros",


@@ 433,6 450,7 @@
  "notifications.column_settings.update": "Ediciones:",
  "notifications.filter.all": "Todos",
  "notifications.filter.boosts": "Retoots",
  "notifications.filter.favourites": "Favoritos",
  "notifications.filter.follows": "Seguidores",
  "notifications.filter.mentions": "Menciones",
  "notifications.filter.polls": "Resultados de la votación",


@@ 583,6 601,8 @@
  "server_banner.server_stats": "Estadísticas del servidor:",
  "sign_in_banner.create_account": "Crear cuenta",
  "sign_in_banner.sign_in": "Iniciar sesión",
  "sign_in_banner.sso_redirect": "Iniciar sesión o Registrarse",
  "sign_in_banner.text": "Inicia sesión para seguir perfiles o etiquetas, así como marcar como favoritas, compartir y responder a publicaciones. También puedes interactuar desde tu cuenta en un servidor diferente.",
  "status.admin_account": "Abrir interfaz de moderación para @{name}",
  "status.admin_domain": "Abrir interfaz de moderación para {domain}",
  "status.admin_status": "Abrir este estado en la interfaz de moderación",


@@ 599,6 619,7 @@
  "status.edited": "Editado {date}",
  "status.edited_x_times": "Editado {count, plural, one {{count} time} other {{count} veces}}",
  "status.embed": "Incrustado",
  "status.favourite": "Favorito",
  "status.filter": "Filtrar esta publicación",
  "status.filtered": "Filtrado",
  "status.hide": "Ocultar toot",

M app/javascript/mastodon/locales/es.json => app/javascript/mastodon/locales/es.json +25 -3
@@ 191,7 191,6 @@
  "conversation.open": "Ver conversación",
  "conversation.with": "Con {names}",
  "copypaste.copied": "Copiado",
  "copypaste.copy": "Copiar",
  "copypaste.copy_to_clipboard": "Copiar al portapapeles",
  "directory.federated": "Desde el fediverso conocido",
  "directory.local": "Sólo de {domain}",


@@ 202,6 201,7 @@
  "dismissable_banner.community_timeline": "Estas son las publicaciones públicas más recientes de personas cuyas cuentas están alojadas en {domain}.",
  "dismissable_banner.dismiss": "Descartar",
  "dismissable_banner.explore_links": "Estas son las noticias que están siendo más compartidas hoy en la red. Nuevas noticias publicadas por diferentes personas se puntúan más alto.",
  "dismissable_banner.explore_statuses": "Estas son las publicaciones que están ganando popularidad en la web social hoy. Las publicaciones recientes con más impulsos y favoritos obtienen más exposición.",
  "dismissable_banner.explore_tags": "Estas son las etiquetas que están ganando popularidad hoy en la red. Etiquetas que se usan por personas diferentes se puntúan más alto.",
  "dismissable_banner.public_timeline": "Estas son las publicaciones más recientes de personas en el Fediverso que siguen las personas de {domain}.",
  "embed.instructions": "Añade esta publicación a tu sitio web con el siguiente código.",


@@ 230,6 230,8 @@
  "empty_column.direct": "Aún no tienes menciones privadas. Cuando envíes o recibas una, aparecerán aquí.",
  "empty_column.domain_blocks": "Todavía no hay dominios ocultos.",
  "empty_column.explore_statuses": "Nada está en tendencia en este momento. ¡Revisa más tarde!",
  "empty_column.favourited_statuses": "Todavía no tienes publicaciones favoritas. Cuando marques una publicación como favorita, se mostrarán aquí.",
  "empty_column.favourites": "Todavía nadie marcó esta publicación como favorita. Cuando alguien lo haga, se mostrarán aquí.",
  "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.",
  "empty_column.followed_tags": "No has seguido ninguna etiqueta todavía. Cuando lo hagas, se mostrarán aquí.",
  "empty_column.hashtag": "No hay nada en este hashtag aún.",


@@ 293,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Cualquiera de estos",
  "hashtag.column_settings.tag_mode.none": "Ninguno de estos",
  "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionales en esta columna",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}} hoy",
  "hashtag.follow": "Seguir etiqueta",
  "hashtag.unfollow": "Dejar de seguir etiqueta",
  "home.actions.go_to_explore": "Ver tendencias",


@@ 300,16 305,22 @@
  "home.column_settings.basic": "Básico",
  "home.column_settings.show_reblogs": "Mostrar impulsos",
  "home.column_settings.show_replies": "Mostrar respuestas",
  "home.explore_prompt.body": "Tu cronología de inicio tendrá una mezcla de publicaciones de etiquetas que hayas decidido seguir, personas que hayas seguido y publicaciones que estas impulsen. Ahora está muy vacía, por qué no:",
  "home.explore_prompt.body": "Tu cronología de inicio tendrá una mezcla de publicaciones de las etiquetas que has escogido seguir, la gente que has decidido seguir y las publicaciones que impulsen. Si crees que está demasiado tranquila, quizás quieras:",
  "home.explore_prompt.title": "Este es tu punto de partida en Mastodon.",
  "home.hide_announcements": "Ocultar anuncios",
  "home.show_announcements": "Mostrar anuncios",
  "interaction_modal.description.favourite": "Con una cuenta en Mastodon, puedes marcar como favorita esta publicación para que el autor sepa que te gusta, y guardala para más adelante.",
  "interaction_modal.description.follow": "Con una cuenta en Mastodon, puedes seguir {name} para recibir sus publicaciones en tu línea temporal de inicio.",
  "interaction_modal.description.reblog": "Con una cuenta en Mastodon, puedes impulsar esta publicación para compartirla con tus propios seguidores.",
  "interaction_modal.description.reply": "Con una cuenta en Mastodon, puedes responder a esta publicación.",
  "interaction_modal.login.action": "Ir a Inicio",
  "interaction_modal.login.prompt": "Dominio de tu servidor, por ejemplo mastodon.social",
  "interaction_modal.no_account_yet": "¿Aún no tienes cuenta en Mastodon?",
  "interaction_modal.on_another_server": "En un servidor diferente",
  "interaction_modal.on_this_server": "En este servidor",
  "interaction_modal.preamble": "Ya que Mastodon es descentralizado, puedes usar tu cuenta existente alojada en otro servidor Mastodon o plataforma compatible si no tienes una cuenta en este servidor.",
  "interaction_modal.sign_in": "No estás registrado en este servidor. ¿Dónde tienes tu cuenta?",
  "interaction_modal.sign_in_hint": "Pista: Ese es el sitio donde te registraste. Si no lo recuerdas, busca el correo electrónico de bienvenida en tu bandeja de entrada. También puedes introducir tu nombre de usuario completo (por ejemplo @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Marcar como favorita la publicación de {name}",
  "interaction_modal.title.follow": "Seguir a {name}",
  "interaction_modal.title.reblog": "Impulsar la publicación de {name}",
  "interaction_modal.title.reply": "Responder a la publicación de {name}",


@@ 325,6 336,8 @@
  "keyboard_shortcuts.direct": "para abrir la columna de menciones privadas",
  "keyboard_shortcuts.down": "mover hacia abajo en la lista",
  "keyboard_shortcuts.enter": "Abrir publicación",
  "keyboard_shortcuts.favourite": "Marcar como favorita la publicación",
  "keyboard_shortcuts.favourites": "Abrir lista de favoritos",
  "keyboard_shortcuts.federated": "Abrir la cronología federada",
  "keyboard_shortcuts.heading": "Keyboard Shortcuts",
  "keyboard_shortcuts.home": "Abrir cronología principal",


@@ 355,6 368,7 @@
  "lightbox.previous": "Anterior",
  "limited_account_hint.action": "Mostrar perfil de todos modos",
  "limited_account_hint.title": "Este perfil ha sido ocultado por los moderadores de {domain}.",
  "link_preview.author": "Por {name}",
  "lists.account.add": "Añadir a lista",
  "lists.account.remove": "Quitar de lista",
  "lists.delete": "Borrar lista",


@@ 377,6 391,7 @@
  "mute_modal.hide_notifications": "¿Ocultar notificaciones de este usuario?",
  "mute_modal.indefinite": "Indefinida",
  "navigation_bar.about": "Acerca de",
  "navigation_bar.advanced_interface": "Abrir en la interfaz web avanzada",
  "navigation_bar.blocks": "Usuarios bloqueados",
  "navigation_bar.bookmarks": "Marcadores",
  "navigation_bar.community_timeline": "Cronología local",


@@ 386,6 401,7 @@
  "navigation_bar.domain_blocks": "Dominios ocultos",
  "navigation_bar.edit_profile": "Editar perfil",
  "navigation_bar.explore": "Explorar",
  "navigation_bar.favourites": "Favoritos",
  "navigation_bar.filters": "Palabras silenciadas",
  "navigation_bar.follow_requests": "Solicitudes para seguirte",
  "navigation_bar.followed_tags": "Etiquetas seguidas",


@@ 402,6 418,7 @@
  "not_signed_in_indicator.not_signed_in": "Necesitas iniciar sesión para acceder a este recurso.",
  "notification.admin.report": "{name} informó {target}",
  "notification.admin.sign_up": "{name} se registró",
  "notification.favourite": "{name} marcó como favorita tu publicación",
  "notification.follow": "{name} te empezó a seguir",
  "notification.follow_request": "{name} ha solicitado seguirte",
  "notification.mention": "{name} te ha mencionado",


@@ 415,6 432,7 @@
  "notifications.column_settings.admin.report": "Nuevos informes:",
  "notifications.column_settings.admin.sign_up": "Nuevos registros:",
  "notifications.column_settings.alert": "Notificaciones de escritorio",
  "notifications.column_settings.favourite": "Favoritos:",
  "notifications.column_settings.filter_bar.advanced": "Mostrar todas las categorías",
  "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido",
  "notifications.column_settings.filter_bar.show_bar": "Mostrar barra de filtros",


@@ 432,6 450,7 @@
  "notifications.column_settings.update": "Ediciones:",
  "notifications.filter.all": "Todos",
  "notifications.filter.boosts": "Impulsos",
  "notifications.filter.favourites": "Favoritos",
  "notifications.filter.follows": "Seguidores",
  "notifications.filter.mentions": "Menciones",
  "notifications.filter.polls": "Resultados de la votación",


@@ 582,6 601,8 @@
  "server_banner.server_stats": "Estadísticas del servidor:",
  "sign_in_banner.create_account": "Crear cuenta",
  "sign_in_banner.sign_in": "Iniciar sesión",
  "sign_in_banner.sso_redirect": "Iniciar sesión o Registrarse",
  "sign_in_banner.text": "Inicia sesión para seguir perfiles o etiquetas, así como marcar como favoritas, compartir y responder a publicaciones. También puedes interactuar desde tu cuenta en un servidor diferente.",
  "status.admin_account": "Abrir interfaz de moderación para @{name}",
  "status.admin_domain": "Abrir interfaz de moderación para {domain}",
  "status.admin_status": "Abrir esta publicación en la interfaz de moderación",


@@ 598,6 619,7 @@
  "status.edited": "Editado {date}",
  "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}",
  "status.embed": "Incrustado",
  "status.favourite": "Favorito",
  "status.filter": "Filtrar esta publicación",
  "status.filtered": "Filtrado",
  "status.hide": "Ocultar publicación",

M app/javascript/mastodon/locales/et.json => app/javascript/mastodon/locales/et.json +12 -4
@@ 191,7 191,6 @@
  "conversation.open": "Vaata vestlust",
  "conversation.with": "Koos {names}",
  "copypaste.copied": "Kopeeritud",
  "copypaste.copy": "Kopeeri",
  "copypaste.copy_to_clipboard": "Kopeeri vahemällu",
  "directory.federated": "Tuntud födiversumist",
  "directory.local": "Ainult domeenilt {domain}",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Mõni neist",
  "hashtag.column_settings.tag_mode.none": "Mitte ükski neist",
  "hashtag.column_settings.tag_toggle": "Kaasa lisamärked selle tulba jaoks",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} osalejaga} other {{counter} osalejaga}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} postitusega} other {{counter} postitusega}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} postitust} other {{counter} postitust}} täna",
  "hashtag.follow": "Jälgi silti",
  "hashtag.unfollow": "Lõpeta sildi jälgimine",
  "home.actions.go_to_explore": "Vaata, mis on populaarne",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Peamine",
  "home.column_settings.show_reblogs": "Näita jagamisi",
  "home.column_settings.show_replies": "Näita vastuseid",
  "home.explore_prompt.body": "Sinu koduvoos on koos jälgimiseks valitud siltidega postitused, sinu jälgitavate inimeste postitused ja postitused, mida nad jagavad. Praegu paistab siin üsna vaikne olema, et kuidas oleks kui:",
  "home.explore_prompt.body": "Sinu koduvoos on koos jälgimiseks valitud siltidega postitused, sinu jälgitavate inimeste postitused ja postitused, mida nad jagavad. Kui see tundub liiga vaikne, võid sa soovida:",
  "home.explore_prompt.title": "See on sinu kodubaas Mastodonis.",
  "home.hide_announcements": "Peida teadaanded",
  "home.show_announcements": "Kuva teadaandeid",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Mastodoni kontoga saad jälgida kasutajat {name}, et tema postitusi oma koduvoos näha.",
  "interaction_modal.description.reblog": "Mastodoni kontoga saad seda postitust levitada, jagades seda oma jälgijatele.",
  "interaction_modal.description.reply": "Mastodoni kontoga saad sellele postitusele vastata.",
  "interaction_modal.login.action": "Vii mind avalehele",
  "interaction_modal.login.prompt": "Sinu koduserveri domeen, näiteks mastodon.social",
  "interaction_modal.no_account_yet": "Pole Mastodonis?",
  "interaction_modal.on_another_server": "Teises serveris",
  "interaction_modal.on_this_server": "Selles serveris",
  "interaction_modal.other_server_instructions": "Kopeeri ja kleebi see URL oma Mastodoni lemmikäpi või Mastodoni serveri veebiliidese otsinguväljale.",
  "interaction_modal.preamble": "Kuna Mastodon on detsentraliseeritud, saab kasutada teises Mastodoni serveris olevat kontot või ka ühilduval platvormil, kui siin serveril kontot ei ole.",
  "interaction_modal.sign_in": "Sa pole sellesse serverisse sisse logitud. Kus sinu konto asub?",
  "interaction_modal.sign_in_hint": "Vihje: See on veebileht, millel sa registreerusid. Kui see ei meenu, otsi sisendkaustast tervitus-e-kirja. Võid sisestada ka oma täispika kasutajanime! (Näit. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Lisa konto {name} postitus lemmikuks",
  "interaction_modal.title.follow": "Jälgi kontot {name}",
  "interaction_modal.title.reblog": "Jaga {name} postitust",


@@ 386,6 391,7 @@
  "mute_modal.hide_notifications": "Kas peita teated sellelt kasutajalt?",
  "mute_modal.indefinite": "Lõpmatu",
  "navigation_bar.about": "Teave",
  "navigation_bar.advanced_interface": "Ava kohandatud veebiliides",
  "navigation_bar.blocks": "Blokeeritud kasutajad",
  "navigation_bar.bookmarks": "Järjehoidjad",
  "navigation_bar.community_timeline": "Kohalik ajajoon",


@@ 444,6 450,7 @@
  "notifications.column_settings.update": "Muudatused:",
  "notifications.filter.all": "Kõik",
  "notifications.filter.boosts": "Jagamised",
  "notifications.filter.favourites": "Lemmikud",
  "notifications.filter.follows": "Jälgib",
  "notifications.filter.mentions": "Mainimised",
  "notifications.filter.polls": "Küsitluse tulemused",


@@ 594,6 601,7 @@
  "server_banner.server_stats": "Serveri statistika:",
  "sign_in_banner.create_account": "Loo konto",
  "sign_in_banner.sign_in": "Logi sisse",
  "sign_in_banner.sso_redirect": "Sisene või registreeru",
  "sign_in_banner.text": "Logi sisse, et jälgida profiile või silte, märkida lemmikuks, jagada ja vastata postitustele. Võid suhelda ka mõne teise serveri konto kaudu.",
  "status.admin_account": "Ava @{name} moderaatorivaates",
  "status.admin_domain": "Ava {domain} modeereerimisliides",

M app/javascript/mastodon/locales/eu.json => app/javascript/mastodon/locales/eu.json +9 -3
@@ 191,7 191,6 @@
  "conversation.open": "Ikusi elkarrizketa",
  "conversation.with": "Hauekin: {names}",
  "copypaste.copied": "Kopiatuta",
  "copypaste.copy": "Kopiatu",
  "copypaste.copy_to_clipboard": "Kopiatu arbelera",
  "directory.federated": "Fedibertso ezagunekoak",
  "directory.local": "{domain} domeinukoak soilik",


@@ 293,6 292,9 @@
  "hashtag.column_settings.tag_mode.any": "Hautako edozein",
  "hashtag.column_settings.tag_mode.none": "Hauetako bat ere ez",
  "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} parte-hartzaile} other {{counter} parte-hartzaile}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} argitalpen} other {{counter} argitalpen}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} argitalpen} other {{counter} argitalpen}} gaur",
  "hashtag.follow": "Jarraitu traola",
  "hashtag.unfollow": "Utzi traola jarraitzeari",
  "home.actions.go_to_explore": "Ikusi zer dagoen pil-pilean",


@@ 300,16 302,19 @@
  "home.column_settings.basic": "Oinarrizkoa",
  "home.column_settings.show_reblogs": "Erakutsi bultzadak",
  "home.column_settings.show_replies": "Erakutsi erantzunak",
  "home.explore_prompt.body": "Zure hasierako jarioak jarraitzeko aukeratu dituzun traolen, jarraitzeko aukeratu duzun jendearen eta beraiek bultzatutako argitalpenen nahasketa bat edukiko du. Nahiko isila dirudi oraintxe, beraz, zergatik ez:",
  "home.explore_prompt.title": "Hau zure hasiera da Mastodonen.",
  "home.hide_announcements": "Ezkutatu iragarpenak",
  "home.show_announcements": "Erakutsi iragarpenak",
  "interaction_modal.description.follow": "Mastodon kontu batekin {name} jarraitu dezakezu bere bidalketak zure hasierako denbora lerroan jasotzeko.",
  "interaction_modal.description.reblog": "Mastodon kontu batekin bidalketa hau bultzatu dezakezu, zure jarraitzaileekin partekatzeko.",
  "interaction_modal.description.reply": "Mastodon kontu batekin bidalketa honi erantzun diezaiokezu.",
  "interaction_modal.login.action": "Itzuli hasierara",
  "interaction_modal.login.prompt": "Zure zerbitzariko domeinua, adib. mastodon.eus",
  "interaction_modal.no_account_yet": "Oraindik ez duzu izena eman Mastodonen?",
  "interaction_modal.on_another_server": "Beste zerbitzari batean",
  "interaction_modal.on_this_server": "Zerbitzari honetan",
  "interaction_modal.preamble": "Mastodon deszentralizatua denez, zerbitzari honetan konturik ez badaukazu, beste Mastodon zerbitzari batean edo bateragarria den plataforma batean ostatatutako kontua erabil dezakezu.",
  "interaction_modal.sign_in": "Ez duzu saioa hasita zerbitzari honetan. Non dago zure kontua ostatatua?",
  "interaction_modal.sign_in_hint": "Aholkua: Izena eman duzun zerbitzaria da. Ez baduzu gogoratzen, begiratu ongietorri-mezua zure sarrera-ontzian. Baita ere, zure erabiltzaile-izen osoa sar dezakezu! (adib. @Mastodon@mastodon.social)",
  "interaction_modal.title.follow": "Jarraitu {name}",
  "interaction_modal.title.reblog": "Bultzatu {name}(r)en bidalketa",
  "interaction_modal.title.reply": "Erantzun {name}(r)en bidalketari",


@@ 584,6 589,7 @@
  "server_banner.server_stats": "Zerbitzariaren estatistikak:",
  "sign_in_banner.create_account": "Sortu kontua",
  "sign_in_banner.sign_in": "Hasi saioa",
  "sign_in_banner.sso_redirect": "Hasi saioa edo izena eman",
  "status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea",
  "status.admin_domain": "{domain}-(r)en moderazio-interfazea ireki",
  "status.admin_status": "Ireki bidalketa hau moderazio interfazean",

M app/javascript/mastodon/locales/fa.json => app/javascript/mastodon/locales/fa.json +0 -4
@@ 190,7 190,6 @@
  "conversation.open": "دیدن گفتگو",
  "conversation.with": "با {names}",
  "copypaste.copied": "رونوشت شد",
  "copypaste.copy": "رونوشت",
  "copypaste.copy_to_clipboard": "رونوشت به تخته‌گیره",
  "directory.federated": "از کارسازهای شناخته‌شده",
  "directory.local": "تنها از {domain}",


@@ 302,7 301,6 @@
  "home.column_settings.basic": "پایه‌ای",
  "home.column_settings.show_reblogs": "نمایش تقویت‌ها",
  "home.column_settings.show_replies": "نمایش پاسخ‌ها",
  "home.explore_prompt.body": "خوراک خانگیتان ترکیبی از فرسته‌ها از برچسب‌هایی که برای پی‌گیری گزیده‌اید، افرادی که پی می‌گیرید و فرسته‌هایی که تقویت می‌کنند را خواهد داشت. در حال حاضر بسیار ساکت است؛ پس چه طور است:",
  "home.explore_prompt.title": "این پایگاه خانگیتان در ماستودون است.",
  "home.hide_announcements": "نهفتن اعلامیه‌ها",
  "home.show_announcements": "نمایش اعلامیه‌ها",


@@ 312,8 310,6 @@
  "interaction_modal.description.reply": "با حسابی روی ماستودون می‌توانید به این فرسته پاسخ دهید.",
  "interaction_modal.on_another_server": "روی کارسازی دیگر",
  "interaction_modal.on_this_server": "روی این کارساز",
  "interaction_modal.other_server_instructions": "این نشانی را رونویسی و در زمینهٔ جست‌وجوی کارهٔ دلخواه یا رابط وب کارساز ماستودونتان جایگذاری کنید.",
  "interaction_modal.preamble": "از آن‌جا که ماستودون نامتمرکز است، می‌توانید در صورت نداشتن حساب روی این کارساز، از حساب موجود خودتان که روی کارساز ماستودون یا بن‌سازهٔ سازگار دیگری میزبانی می‌شود استفاده کنید.",
  "interaction_modal.title.favourite": "فرسته‌های برگزیدهٔ {name}",
  "interaction_modal.title.follow": "پیگیری {name}",
  "interaction_modal.title.reblog": "تقویت فرستهٔ {name}",

M app/javascript/mastodon/locales/fi.json => app/javascript/mastodon/locales/fi.json +47 -41
@@ 52,7 52,7 @@
  "account.mute_notifications_short": "Mykistä ilmoitukset",
  "account.mute_short": "Mykistä",
  "account.muted": "Mykistetty",
  "account.no_bio": "Ei kuvausta.",
  "account.no_bio": "Kuvausta ei ole annettu.",
  "account.open_original_page": "Avaa alkuperäinen sivu",
  "account.posts": "viesti(t)",
  "account.posts_with_replies": "Viestit ja vastaukset",


@@ 68,7 68,7 @@
  "account.unendorse": "Poista suosittelu profiilistasi",
  "account.unfollow": "Lopeta seuraaminen",
  "account.unmute": "Poista käyttäjän @{name} mykistys",
  "account.unmute_notifications_short": "Poista ilmoitusten mykistys",
  "account.unmute_notifications_short": "Kumoa ilmoitusten mykistys",
  "account.unmute_short": "Poista mykistys",
  "account_note.placeholder": "Lisää muistiinpano napsauttamalla",
  "admin.dashboard.daily_retention": "Käyttäjän säilyminen rekisteröitymisen jälkeiseen päivään mennessä",


@@ 81,7 81,7 @@
  "admin.impact_report.instance_follows": "Seuraajat, jotka heidän käyttäjänsä menettäisivät",
  "admin.impact_report.title": "Vaikutusten yhteenveto",
  "alert.rate_limited.message": "Yritä uudestaan {retry_time, time, medium} jälkeen.",
  "alert.rate_limited.title": "Määrää rajoitettu",
  "alert.rate_limited.title": "Pyyntömäärää rajoitettu",
  "alert.unexpected.message": "Tapahtui odottamaton virhe.",
  "alert.unexpected.title": "Hups!",
  "announcement.announcement": "Ilmoitus",


@@ 135,7 135,7 @@
  "community.column_settings.remote_only": "Vain etätilit",
  "compose.language.change": "Vaihda kieli",
  "compose.language.search": "Hae kieliä...",
  "compose.published.body": "Julkaisu lähetetty.",
  "compose.published.body": "Julkaisusi julkaistiin.",
  "compose.published.open": "Avaa",
  "compose_form.direct_message_warning_learn_more": "Lisätietoja",
  "compose_form.encryption_warning": "Mastodonin viestit eivät ole päästä päähän salattuja. Älä jaa arkaluonteisia tietoja Mastodonissa.",


@@ 150,7 150,7 @@
  "compose_form.poll.switch_to_multiple": "Muuta äänestys monivalinnaksi",
  "compose_form.poll.switch_to_single": "Muuta äänestys sallimaan vain yksi valinta",
  "compose_form.publish": "Julkaise",
  "compose_form.publish_form": "Julkaise",
  "compose_form.publish_form": "Uusi julkaisu",
  "compose_form.publish_loud": "{publish}!",
  "compose_form.save_changes": "Tallenna muutokset",
  "compose_form.sensitive.hide": "{count, plural, one {Merkitse media arkaluontoiseksi} other {Merkitse mediat arkaluontoiseksi}}",


@@ 181,7 181,7 @@
  "confirmations.mute.explanation": "Tämä toiminto piilottaa heidän julkaisunsa sinulta – mukaan lukien ne, joissa heidät mainitaan – sallien heidän yhä nähdä julkaisusi ja seurata sinua.",
  "confirmations.mute.message": "Haluatko varmasti mykistää profiilin {name}?",
  "confirmations.redraft.confirm": "Poista & palauta muokattavaksi",
  "confirmations.redraft.message": "Haluatko varmasti poistaa viestin ja tehdä siitä uuden luonnoksen? Suosikit ja tehostukset menetään, ja alkuperäisen viestisi vastaukset jäävät orvoiksi.",
  "confirmations.redraft.message": "Haluatko varmasti poistaa viestin ja tehdä siitä luonnoksen? Suosikiksi lisäykset sekä tehostukset menetään, ja vastaukset alkuperäisviestiisi jäävät orvoiksi.",
  "confirmations.reply.confirm": "Vastaa",
  "confirmations.reply.message": "Jos vastaat nyt, vastaus korvaa tällä hetkellä työstämäsi viestin. Oletko varma, että haluat jatkaa?",
  "confirmations.unfollow.confirm": "Lopeta seuraaminen",


@@ 191,7 191,6 @@
  "conversation.open": "Näytä keskustelu",
  "conversation.with": "{names} kanssa",
  "copypaste.copied": "Kopioitu",
  "copypaste.copy": "Kopioi",
  "copypaste.copy_to_clipboard": "Kopioi leikepöydälle",
  "directory.federated": "Koko tunnettu fediverse",
  "directory.local": "Vain palvelusta {domain}",


@@ 201,10 200,10 @@
  "disabled_account_banner.text": "Tilisi {disabledAccount} on tällä hetkellä poissa käytöstä.",
  "dismissable_banner.community_timeline": "Nämä ovat uusimmat julkiset julkaisut käyttäjiltä, joiden tilejä isännöi {domain}.",
  "dismissable_banner.dismiss": "Hylkää",
  "dismissable_banner.explore_links": "Näistä uutisista puhuvat ihmiset juuri nyt tällä ja muilla hajautetun verkon palvelimilla.",
  "dismissable_banner.explore_statuses": "Nämä ovat sosiaalisen verkon viestejä, jotka keräävät huomiota tänään. Uudemmat ja enemmän tehostetut viestit, ja suosikit rankataan korkeammalle.",
  "dismissable_banner.explore_links": "Näistä uutisista puhutaan juuri nyt tällä ja muilla hajautetun verkon palvelimilla.",
  "dismissable_banner.explore_statuses": "Nämä ovat tänään huomiota keräävimpiä sosiaalisen verkon julkaisuja. Tuoreimmat, tehostetuimmat sekä suosikeiksi merkityimmät sijoitetaan listauksessa korkeammalle.",
  "dismissable_banner.explore_tags": "Nämä aihetunnisteet saavat juuri nyt vetovoimaa tällä ja muilla hajautetun verkon palvelimilla olevien ihmisten keskuudessa.",
  "dismissable_banner.public_timeline": "Nämä ovat viimeisimmät julkiset viestit sosiaalisen verkon ihmisiltä, joita {domain} käyttäjät seuraa.",
  "dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelussa {domain}.",
  "embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.",
  "embed.preview": "Se tulee näyttämään tältä:",
  "emoji_button.activity": "Aktiviteetit",


@@ 232,11 231,11 @@
  "empty_column.domain_blocks": "Palveluita ei ole vielä estetty.",
  "empty_column.explore_statuses": "Mikään ei trendaa nyt. Tarkista myöhemmin uudelleen!",
  "empty_column.favourited_statuses": "Sinulla ei ole vielä yhtään suosikkiviestiä. Kun lisäät yhden, näkyy se tässä.",
  "empty_column.favourites": "Kukaan ei ole vielä lisännyt tätä viestiä suosikkeihinsa. Kun joku on lisännyt, näkyy hän tässä.",
  "empty_column.favourites": "Kukaan ei ole vielä merkinnyt tätä viestiä suosikiksi. Kun joku tekee niin, näkyy asia täällä.",
  "empty_column.follow_requests": "Et ole vielä vastaanottanut seurauspyyntöjä. Saamasi pyynnöt näytetään täällä.",
  "empty_column.followed_tags": "Et ole vielä ottanut yhtään aihetunnistetta seurattavaksesi. Jos tai kun sitten teet niin, ne listautuvat tänne.",
  "empty_column.hashtag": "Tällä aihetunnisteella ei ole vielä mitään.",
  "empty_column.home": "Kotisi aikajana on tyhjä! Seuraa lisää ihmisiä täyttääksesi sen. {suggestions}",
  "empty_column.home": "Kotiaikajanasi on tyhjä! Seuraa useampia henkilöjä, niin näet enemmän sisältöä.",
  "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ää.",


@@ 296,26 295,32 @@
  "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",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} osallistuja} other {{counter} osallistujaa}}",
  "hashtag.counter_by_uses": "{count, plural, one{{counter} julkaisu} other {{counter} julkaisua}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} julkaisu} other {{counter} julkaisua}} tänään",
  "hashtag.follow": "Seuraa aihetunnistetta",
  "hashtag.unfollow": "Lopeta aihetunnisteen seuraaminen",
  "home.actions.go_to_explore": "Näe mitä tapahtuu",
  "home.actions.go_to_explore": "Katso, mikä on suosittua",
  "home.actions.go_to_suggestions": "Löydä seurattavia käyttäjiä",
  "home.column_settings.basic": "Perusasetukset",
  "home.column_settings.show_reblogs": "Näytä tehostukset",
  "home.column_settings.show_replies": "Näytä vastaukset",
  "home.explore_prompt.body": "Kotisyötteesi on sekoitus seuraamistasi aihetunnisteista ja käyttäjistä sekä heidän tehostamistaan viesteistä. Se näyttää tällä hetkellä varsin hiljaiselta, joten mitäpä jos:",
  "home.explore_prompt.title": "Tämä on kotitukikohtasi Mastodonissa.",
  "home.explore_prompt.body": "Kotisyötteesi on sekoitus seuraamistasi aihetunnisteista ja käyttäjistä sekä heidän tehostamistaan viesteistä. Jos se näyttää tällä hetkellä turhan hiljaiselta, saatat haluta:",
  "home.explore_prompt.title": "Tämä on tukikohtasi Mastodonissa.",
  "home.hide_announcements": "Piilota ilmoitukset",
  "home.show_announcements": "Näytä ilmoitukset",
  "interaction_modal.description.favourite": "Mastodon-tilillä voit lisätä viestin suosikkeihisi näyttääksesi sen kirjoittajalle arvostavasi sitä ja tallentaaksesi sen tulevaisuutta varten.",
  "interaction_modal.description.favourite": "Mastodon-tilisi myötä voit merkitä julkaisuja suosikeiksi, jolloin osoitat julkaisijoille arvostavasi sisältöä, ja tallennat sitä myös helpommin saatavillesi jatkossa.",
  "interaction_modal.description.follow": "Kun sinulla on Mastodon-tili, voit seurata käyttäjää {name} nähdäksesi hänen viestinsä kotisyötteessäsi.",
  "interaction_modal.description.reblog": "Kun sinulla on tili Mastodonissa, voit tehostaa viestiä ja jakaa sen omien seuraajiesi kanssa.",
  "interaction_modal.description.reply": "Kun sinulla on tili Mastodonissa, voit vastata tähän viestiin.",
  "interaction_modal.login.action": "Palaa aloitussivulle",
  "interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus (kuten mastodon.social)",
  "interaction_modal.no_account_yet": "Etkö ole vielä Mastodonissa?",
  "interaction_modal.on_another_server": "Toisella palvelimella",
  "interaction_modal.on_this_server": "Tällä palvelimella",
  "interaction_modal.other_server_instructions": "Kopioi ja liitä tämä URL-osoite käyttämäsi Mastodon-sovelluksen tai Mastodon-palvelimen verkkosivuston hakukenttään.",
  "interaction_modal.preamble": "Koska Mastodon on hajautettu, voit käyttää toisen Mastodon-palvelimen tai yhteensopivan alustan ylläpitämää tiliäsi, jos sinulla ei ole tiliä tällä palvelimella.",
  "interaction_modal.title.favourite": "Lisää käyttäjän {name} viesti suosikkeihin",
  "interaction_modal.sign_in": "Et ole kirjautunut tälle palvelimelle. Millä palvelimella tilisi sijaitsee?",
  "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jolla loit tilisi. Jos et muista, etsi tervetuliaissähköpostia saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Lisää käyttäjän {name} julkaisu suosikkeihin",
  "interaction_modal.title.follow": "Seuraa {name}",
  "interaction_modal.title.reblog": "Tehosta käyttäjän {name} viestiä",
  "interaction_modal.title.reply": "Vastaa käyttäjän {name} viestiin",


@@ 331,7 336,7 @@
  "keyboard_shortcuts.direct": "avataksesi yksityisten mainintojen sarakkeen",
  "keyboard_shortcuts.down": "Siirry listassa alaspäin",
  "keyboard_shortcuts.enter": "Avaa julkaisu",
  "keyboard_shortcuts.favourite": "Lisää viesti suosikkeihin",
  "keyboard_shortcuts.favourite": "Lisää julkaisu suosikkeihin",
  "keyboard_shortcuts.favourites": "Avaa suosikkilista",
  "keyboard_shortcuts.federated": "Avaa yleinen aikajana",
  "keyboard_shortcuts.heading": "Pikanäppäimet",


@@ 369,7 374,7 @@
  "lists.delete": "Poista lista",
  "lists.edit": "Muokkaa listaa",
  "lists.edit.submit": "Vaihda otsikko",
  "lists.exclusive": "Piilota nämä viestit kotoasi",
  "lists.exclusive": "Piilota nämä julkaisut kotiaikajanaltasi",
  "lists.new.create": "Lisää lista",
  "lists.new.title_placeholder": "Uuden listan nimi",
  "lists.replies_policy.followed": "Jokainen seurattu käyttäjä",


@@ 386,7 391,7 @@
  "mute_modal.hide_notifications": "Piilota tältä käyttäjältä tulevat ilmoitukset?",
  "mute_modal.indefinite": "Ikuisesti",
  "navigation_bar.about": "Tietoja",
  "navigation_bar.advanced_interface": "Avaa edistyneessä käyttöliittymässä",
  "navigation_bar.advanced_interface": "Avaa edistyneessä selainkäyttöliittymässä",
  "navigation_bar.blocks": "Estetyt käyttäjät",
  "navigation_bar.bookmarks": "Kirjanmerkit",
  "navigation_bar.community_timeline": "Paikallinen aikajana",


@@ 413,12 418,12 @@
  "not_signed_in_indicator.not_signed_in": "Sinun on kirjauduttava sisään käyttääksesi resurssia.",
  "notification.admin.report": "{name} teki ilmoituksen käytäjästä {target}",
  "notification.admin.sign_up": "{name} rekisteröityi",
  "notification.favourite": "{name} lisäsi viestisi suosikkeihinsa",
  "notification.favourite": "{name} lisäsi julkaisusi suosikkeihinsa",
  "notification.follow": "{name} seurasi sinua",
  "notification.follow_request": "{name} haluaa seurata sinua",
  "notification.mention": "{name} mainitsi sinut",
  "notification.own_poll": "Äänestyksesi on päättynyt",
  "notification.poll": "Kysely, johon osallistuit, on päättynyt",
  "notification.poll": "Äänestys, johon osallistuit, on päättynyt",
  "notification.reblog": "{name} tehosti viestiäsi",
  "notification.status": "{name} julkaisi juuri viestin",
  "notification.update": "{name} muokkasi viestiä",


@@ 461,8 466,8 @@
  "notifications_permission_banner.title": "Älä anna minkään mennä ohi",
  "onboarding.action.back": "Palaa takaisin",
  "onboarding.actions.back": "Palaa takaisin",
  "onboarding.actions.go_to_explore": "Katso, mikä on trendikästä",
  "onboarding.actions.go_to_home": "Siirry kotisyötteeseesi",
  "onboarding.actions.go_to_explore": "Siirry suosituimpien aiheiden syötteeseen",
  "onboarding.actions.go_to_home": "Siirry kotisyötteeseen",
  "onboarding.compose.template": "Tervehdys #Mastodon!",
  "onboarding.follows.empty": "Valitettavasti tuloksia ei voida näyttää juuri nyt. Voit kokeilla hakua tai selata tutustumissivua löytääksesi seurattavaa, tai yrittää myöhemmin uudelleen.",
  "onboarding.follows.lead": "Kokoat oman kotisyötteesi itse. Mitä enemmän ihmisiä seuraat, sitä aktiivisempi ja kiinnostavampi syöte on. Nämä profiilit voivat olla alkuun hyvä lähtökohta — voit aina lopettaa niiden seuraamisen myöhemmin!",


@@ 471,17 476,17 @@
  "onboarding.share.message": "Olen {username} #Mastodon'issa! Seuraa minua osoitteessa {url}",
  "onboarding.share.next_steps": "Mahdolliset seuraavat vaiheet:",
  "onboarding.share.title": "Jaa profiilisi",
  "onboarding.start.lead": "Uusi Mastodon-tilisi on valmiina käyttöön. Näin hyödyt siitä eniten:",
  "onboarding.start.skip": "Haluatko hypätä suoraan eteenpäin?",
  "onboarding.start.lead": "Uusi Mastodon-tilisi on nyt valmiina käyttöön. Kyseessä on ainutlaatuinen, hajautettu sosiaalisen median alusta, jolla sinä itse – algoritmin sijaan – määrität käyttökokemuksesi. Näin hyödyt Mastodonista eniten:",
  "onboarding.start.skip": "Haluatko hypätä suoraan eteenpäin ilman alkuunpääsyohjeistuksia?",
  "onboarding.start.title": "Olet tehnyt sen!",
  "onboarding.steps.follow_people.body": "Kokoat oman syötteesi itse. Täytetään se kiinnostavilla henkilöillä.",
  "onboarding.steps.follow_people.title": "Seurattu {count, plural, one {henkilö} other {# henkilöä}}",
  "onboarding.steps.publish_status.body": "Sano tervehdys maailmalle.",
  "onboarding.steps.follow_people.body": "Mastodon perustuu sinua kiinnostavien henkilöjen julkaisujen seuraamiseen.",
  "onboarding.steps.follow_people.title": "Mukauta kotisyötteesi",
  "onboarding.steps.publish_status.body": "Tervehdi maailmaa sanoin, kuvin tai äänestyksin {emoji}",
  "onboarding.steps.publish_status.title": "Laadi ensimmäinen julkaisusi",
  "onboarding.steps.setup_profile.body": "Kun profiilisi on täytetty, muut ovat helpommin yhteyksissä sinun kanssasi.",
  "onboarding.steps.setup_profile.title": "Muokkaa profiiliasi",
  "onboarding.steps.share_profile.body": "Kerro ystävillesi, kuinka sinut löytää Mastodonista!",
  "onboarding.steps.share_profile.title": "Jaa profiilisi",
  "onboarding.steps.setup_profile.body": "Täydentämällä profiilisi tietoja tehostat vuorovaikutteisuutta.",
  "onboarding.steps.setup_profile.title": "Mukauta profiiliasi",
  "onboarding.steps.share_profile.body": "Kerro kavereillesi, kuinka sinut löytää Mastodonista",
  "onboarding.steps.share_profile.title": "Jaa Mastodon-profiilisi",
  "onboarding.tips.2fa": "<strong>Tiesitkö?</strong> Voit lisäsuojata tiliäsi ottamalla kaksivaiheisen todennuksen käyttöön palvelun tiliasetuksista. Ominaisuus toimii haluamasi TOTP-todennussovelluksen avulla, eikä käyttö edellytä puhelinnumeron antamista!",
  "onboarding.tips.accounts_from_other_servers": "<strong>Tiesitkö?</strong> Koska Mastodon kuuluu hajautettuun verkkoon, osa kohtaamistasi profiileista sijaitsee muilla palvelimilla kuin sinun. Voit silti viestiä saumattomasti heidän kanssaan! Heidän palvelimensa ilmaistaan käyttäjänimen perässä!",
  "onboarding.tips.migration": "<strong>Tiesitkö?</strong> Jos koet, ettei {domain} ole jatkossa itsellesi hyvä palvelinvalinta, voit siirtyä toiselle Mastodon-palvelimelle menettämättä seuraajiasi. Voit jopa isännöidä omaa palvelintasi!",


@@ 544,8 549,8 @@
  "report.placeholder": "Lisäkommentit",
  "report.reasons.dislike": "En pidä siitä",
  "report.reasons.dislike_description": "Et halua nähdä sitä",
  "report.reasons.legal": "Se on laiton",
  "report.reasons.legal_description": "Uskot sen rikkovan oman maasi tai palvelimen maan lakeja",
  "report.reasons.legal": "Se on laitonta",
  "report.reasons.legal_description": "Katsot sisällön rikkovan maasi tai palvelimen kotimaan lakeja",
  "report.reasons.other": "Jotain muuta",
  "report.reasons.other_description": "Ongelma ei sovi muihin kategorioihin",
  "report.reasons.spam": "Se on roskapostia",


@@ 596,7 601,8 @@
  "server_banner.server_stats": "Palvelimen tilastot:",
  "sign_in_banner.create_account": "Luo tili",
  "sign_in_banner.sign_in": "Kirjaudu",
  "sign_in_banner.text": "Kirjaudu sisään seurataksesi profiileja tai aihetunnisteita, lisätäksesi suosikkeja, jakaaksesi viestejä ja vastataksesi niihin. Voit myös vuorovaikuttaa myös eri palvelimilla olevilta tileiltäsi.",
  "sign_in_banner.sso_redirect": "Kirjaudu tai rekisteröidy",
  "sign_in_banner.text": "Kirjaudu sisään seurataksesi profiileja tai aihetunnisteita, merkitäksesi julkaisuja suosikeiksi, julkaistaksesi sekä vastataksesi julkaisuihin. Voit vuorovaikuttaa myös eri palvelimella sijaitsevalta tililtäsi.",
  "status.admin_account": "Avaa moderaattorinäkymä tilistä @{name}",
  "status.admin_domain": "Avaa palvelimen {domain} moderointitoiminnot",
  "status.admin_status": "Avaa viesti moderointinäkymässä",


@@ 613,15 619,15 @@
  "status.edited": "Muokattu {date}",
  "status.edited_x_times": "Muokattu {count, plural, one {{count} kerran} other {{count} kertaa}}",
  "status.embed": "Upota",
  "status.favourite": "Suosikki",
  "status.favourite": "Merkitse suosikiksi",
  "status.filter": "Suodata tämä viesti",
  "status.filtered": "Suodatettu",
  "status.hide": "Piilota julkaisu",
  "status.history.created": "{name} luotu {date}",
  "status.history.edited": "{name} muokkasi {date}",
  "status.load_more": "Lataa lisää",
  "status.media.open": "Avaa napsauttamalla",
  "status.media.show": "Näytä napsauttamalla",
  "status.media.open": "Napsauta avataksesi",
  "status.media.show": "Napsauta näyttääksesi",
  "status.media_hidden": "Media piilotettu",
  "status.mention": "Mainitse @{name}",
  "status.more": "Lisää",

M app/javascript/mastodon/locales/fo.json => app/javascript/mastodon/locales/fo.json +10 -4
@@ 191,7 191,6 @@
  "conversation.open": "Vís samrøðu",
  "conversation.with": "Við {names}",
  "copypaste.copied": "Avritað",
  "copypaste.copy": "Avrita",
  "copypaste.copy_to_clipboard": "Avrita til setiborðið",
  "directory.federated": "Frá tí kenda fediversinum",
  "directory.local": "Einans frá {domain}",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Okkurt av hesum",
  "hashtag.column_settings.tag_mode.none": "Einki av hesum",
  "hashtag.column_settings.tag_toggle": "Legg frámerki afturat hesum teigi",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} luttakari} other {{counter} luttakarar}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} postur} other {{counter} postar}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} postur} other {{counter} postar}} í dag",
  "hashtag.follow": "Fylg frámerki",
  "hashtag.unfollow": "Gevst at fylgja frámerki",
  "home.actions.go_to_explore": "Sí rákið",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Grundleggjandi",
  "home.column_settings.show_reblogs": "Vís lyft",
  "home.column_settings.show_replies": "Vís svar",
  "home.explore_prompt.body": "Heimarásin fer at hava eitt bland av postum frá frámerkjunum, sum tú hevur valt at fylgja, brúkarunum, tú hevur valt at fylgja, og postunum, sum tey stimbra. Tað sær rættiliga kvirt út í løtuni, so hvat við at:",
  "home.explore_prompt.body": "Heimarásin fer at hava eitt bland av postum frá frámerkjunum, sum tú hevur valt at fylgja, brúkarunum, tú hevur valt at fylgja, og postunum, sum tey stimbra. Um tað kennist ov friðarligt, so kanst tú:",
  "home.explore_prompt.title": "Hetta er tín heimastøð í Mastodon.",
  "home.hide_announcements": "Fjal kunngerðir",
  "home.show_announcements": "Vís kunngerðir",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Við eini kontu á Mastodon kanst tú fylgja {name} fyri at síggja teirra postar á tíni heimarás.",
  "interaction_modal.description.reblog": "Við eini kontu á Mastodon kanst tú stimbra hendan postin og soleiðis deila hann við tínar fylgjarar.",
  "interaction_modal.description.reply": "Við eini kontu á Mastodon, so kanst tú svara hesum posti.",
  "interaction_modal.login.action": "Tak meg heim",
  "interaction_modal.login.prompt": "Navnaøki hjá tínum heimaambætara, t.d. mastodon.social",
  "interaction_modal.no_account_yet": "Ikki á Mastodon?",
  "interaction_modal.on_another_server": "Á øðrum ambætara",
  "interaction_modal.on_this_server": "Á hesum ambætaranum",
  "interaction_modal.other_server_instructions": "Kopiera og set hendan URLin inn í leititeigin í tíni yndis-Mastodon-app ella í vev-markamótið á tínum Mastodon-ambætara.",
  "interaction_modal.preamble": "Av tí at Mastodon er desentraliserað, kanst tú brúka tína kontu frá einum øðrum Mastodon ambætara ella sambærligum palli, um tú ikki hevur eina kontu á hesum ambætaranum.",
  "interaction_modal.sign_in": "Tú er ikki ritað/ur inn á hesum ambætaranum. Hvar er kontan hjá tær hýst?",
  "interaction_modal.sign_in_hint": "Góð ráð: tað er heimasíðan, har tú lat teg skráseta. Minnist tú ikki, so kanst tú leita eftir vælkomin-teldubrævinum í innbakkanum hjá tær. Tú kanst eisini innlesa fulla brúkaranavnið hjá tær! (t.d. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Dáma postin hjá {name}",
  "interaction_modal.title.follow": "Fylg {name}",
  "interaction_modal.title.reblog": "Stimbra postin hjá {name}",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "Ambætarahagtøl:",
  "sign_in_banner.create_account": "Stovna kontu",
  "sign_in_banner.sign_in": "Rita inn",
  "sign_in_banner.sso_redirect": "Rita inn ella Skráset teg",
  "sign_in_banner.text": "Innrita fyri at fylgja vangum og frámerkjum, dáma, deila og svara postum. Tú kanst eisini brúka kontuna til at samvirka á einum øðrum ambætara.",
  "status.admin_account": "Lat kjakleiðaramarkamót upp fyri @{name}",
  "status.admin_domain": "Lat umsjónarmarkamót upp fyri {domain}",

M app/javascript/mastodon/locales/fr-QC.json => app/javascript/mastodon/locales/fr-QC.json +10 -4
@@ 191,7 191,6 @@
  "conversation.open": "Afficher cette conversation",
  "conversation.with": "Avec {names}",
  "copypaste.copied": "Copié",
  "copypaste.copy": "Copier",
  "copypaste.copy_to_clipboard": "Copier dans le presse-papiers",
  "directory.federated": "D'un fediverse connu",
  "directory.local": "De {domain} seulement",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Au moins un de ceux-ci",
  "hashtag.column_settings.tag_mode.none": "Aucun de ceux-ci",
  "hashtag.column_settings.tag_toggle": "Inclure des hashtags additionnels pour cette colonne",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} message} other {{counter} messages}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} message} other {{counter} messages}} aujourd’hui",
  "hashtag.follow": "Suivre ce hashtag",
  "hashtag.unfollow": "Ne plus suivre ce hashtag",
  "home.actions.go_to_explore": "Voir les tendances",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Basique",
  "home.column_settings.show_reblogs": "Afficher boosts",
  "home.column_settings.show_replies": "Afficher réponses",
  "home.explore_prompt.body": "Votre fil d'actualité aura un mélange de publications depuis les hashtags que vous avez choisi de suivre, les personnes que vous avez choisi de suivre, et les publications qu'elles boostent. C'est plutôt calme en ce moment, alors que dites-vous de:",
  "home.explore_prompt.body": "Votre fil d'actualité aura un mélange de messages depuis les hashtags que vous avez choisi de suivre, les personnes que vous avez choisi de suivre, et les messages qu'ils boostent. Si ça vous semble trop calme à votre goût, n’hésitez pas à :",
  "home.explore_prompt.title": "C'est chez vous dans Mastadon.",
  "home.hide_announcements": "Masquer les annonces",
  "home.show_announcements": "Afficher annonces",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Avec un compte Mastodon, vous pouvez suivre {name} et recevoir leurs publications dans votre fil d'accueil.",
  "interaction_modal.description.reblog": "Avec un compte Mastodon, vous pouvez booster cette publication pour la partager avec vos propres abonné·e·s.",
  "interaction_modal.description.reply": "Avec un compte sur Mastodon, vous pouvez répondre à cette publication.",
  "interaction_modal.login.action": "Aller à mon serveur",
  "interaction_modal.login.prompt": "Domaine de votre serveur, ex. mastodon.social",
  "interaction_modal.no_account_yet": "Pas sur Mastodon ?",
  "interaction_modal.on_another_server": "Sur un autre serveur",
  "interaction_modal.on_this_server": "Sur ce serveur",
  "interaction_modal.other_server_instructions": "Copiez et collez cet URL dans le champ de recherche de votre application Mastodon préférée ou de l'interface web de votre serveur Mastodon.",
  "interaction_modal.preamble": "Puisque Mastodon est décentralisé, vous pouvez utiliser votre compte existant hébergé par un autre serveur Mastodon ou une plateforme compatible si vous n'avez pas de compte sur celui-ci.",
  "interaction_modal.sign_in": "Vous n’êtes pas connectés sur ce serveur. Où est hébergé votre compte ?",
  "interaction_modal.sign_in_hint": "Astuce : c'est le site web sur lequel vous vous êtes inscrit. Si vous ne vous en souvenez pas, cherchez le courriel de bienvenue dans votre boîte de réception. Vous pouvez aussi indiquer votre nom d’utilisateur complet ! (par ex. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Ajouter la publication de {name} aux favoris",
  "interaction_modal.title.follow": "Suivre {name}",
  "interaction_modal.title.reblog": "Booster la publication de {name}",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "Statistiques du serveur:",
  "sign_in_banner.create_account": "Créer un compte",
  "sign_in_banner.sign_in": "Se connecter",
  "sign_in_banner.sso_redirect": "Se connecter ou s’inscrire",
  "sign_in_banner.text": "Identifiez-vous pour suivre des profils ou des hashtags, ajouter des favoris, partager et répondre à des publications. Vous pouvez également interagir depuis votre compte sur un autre serveur.",
  "status.admin_account": "Ouvrir l’interface de modération pour @{name}",
  "status.admin_domain": "Ouvrir l’interface de modération pour {domain}",

M app/javascript/mastodon/locales/fr.json => app/javascript/mastodon/locales/fr.json +10 -4
@@ 191,7 191,6 @@
  "conversation.open": "Afficher la conversation",
  "conversation.with": "Avec {names}",
  "copypaste.copied": "Copié",
  "copypaste.copy": "Copier",
  "copypaste.copy_to_clipboard": "Copier dans le presse-papiers",
  "directory.federated": "Du fédiverse connu",
  "directory.local": "De {domain} seulement",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Au moins un de ces éléments",
  "hashtag.column_settings.tag_mode.none": "Aucun de ces éléments",
  "hashtag.column_settings.tag_toggle": "Inclure des hashtags additionnels pour cette colonne",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} message} other {{counter} messages}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} message} other {{counter} messages}} aujourd’hui",
  "hashtag.follow": "Suivre le hashtag",
  "hashtag.unfollow": "Ne plus suivre le hashtag",
  "home.actions.go_to_explore": "Voir les tendances",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Basique",
  "home.column_settings.show_reblogs": "Afficher les partages",
  "home.column_settings.show_replies": "Afficher les réponses",
  "home.explore_prompt.body": "Votre fil d'actualité aura un mélange de messages depuis les hashtags que vous avez choisi de suivre, les personnes que vous avez choisi de suivre, et les messages qu'ils boostent. Cela a l'air assez calme en ce moment, alors comment :",
  "home.explore_prompt.body": "Votre fil d'actualité aura un mélange de messages depuis les hashtags que vous avez choisi de suivre, les personnes que vous avez choisi de suivre, et les messages qu'ils boostent. Si ça vous semble trop calme à votre goût, n’hésitez pas à :",
  "home.explore_prompt.title": "C'est votre page d'accueil dans Mastodon.",
  "home.hide_announcements": "Masquer les annonces",
  "home.show_announcements": "Afficher les annonces",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Avec un compte Mastodon, vous pouvez suivre {name} et recevoir leurs posts dans votre fil d'actualité.",
  "interaction_modal.description.reblog": "Avec un compte sur Mastodon, vous pouvez partager ce message pour le faire découvrir à vos propres abonné⋅e⋅s.",
  "interaction_modal.description.reply": "Avec un compte sur Mastodon, vous pouvez répondre à ce message.",
  "interaction_modal.login.action": "Aller à mon serveur",
  "interaction_modal.login.prompt": "Domaine de votre serveur, ex. mastodon.social",
  "interaction_modal.no_account_yet": "Pas sur Mastodon ?",
  "interaction_modal.on_another_server": "Sur un autre serveur",
  "interaction_modal.on_this_server": "Sur ce serveur",
  "interaction_modal.other_server_instructions": "Copiez et collez cette URL dans le champ de recherche de votre application Mastodon préférée ou de l'interface web de votre serveur Mastodon.",
  "interaction_modal.preamble": "Mastodon étant décentralisé, vous pouvez utiliser votre compte existant sur un autre serveur Mastodon, ou sur une autre plateforme compatible, si vous n'avez pas de compte ici.",
  "interaction_modal.sign_in": "Vous n’êtes pas connectés sur ce serveur. Où est hébergé votre compte ?",
  "interaction_modal.sign_in_hint": "Astuce : c'est le site web sur lequel vous vous êtes inscrit. Si vous ne vous en souvenez pas, cherchez le courriel de bienvenue dans votre boîte de réception. Vous pouvez aussi indiquer votre nom d’utilisateur complet ! (par ex. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Ajouter le message de {name} aux favoris",
  "interaction_modal.title.follow": "Suivre {name}",
  "interaction_modal.title.reblog": "Partager le message de {name}",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "Statistiques du serveur :",
  "sign_in_banner.create_account": "Créer un compte",
  "sign_in_banner.sign_in": "Se connecter",
  "sign_in_banner.sso_redirect": "Se connecter ou s’inscrire",
  "sign_in_banner.text": "Identifiez-vous pour suivre des profils ou des hashtags, ajouter des favoris, partager et répondre à des messages. Vous pouvez également interagir depuis votre compte sur un autre serveur.",
  "status.admin_account": "Ouvrir l’interface de modération pour @{name}",
  "status.admin_domain": "Ouvrir l’interface de modération pour {domain}",

M app/javascript/mastodon/locales/fy.json => app/javascript/mastodon/locales/fy.json +0 -3
@@ 189,7 189,6 @@
  "conversation.open": "Petear toane",
  "conversation.with": "Mei {names}",
  "copypaste.copied": "Kopiearre",
  "copypaste.copy": "Kopiearje",
  "copypaste.copy_to_clipboard": "Nei klamboerd kopiearje",
  "directory.federated": "Fediverse (wat bekend is)",
  "directory.local": "Allinnich fan {domain}",


@@ 298,7 297,6 @@
  "home.column_settings.basic": "Algemien",
  "home.column_settings.show_reblogs": "Boosts toane",
  "home.column_settings.show_replies": "Reaksjes toane",
  "home.explore_prompt.body": "Jo starttiidline befettet in miks fan berjochten mei hashtags dy’t jo keazen hawwe om te folgjen, fan minsken dy’t jo keazen hawwe om te folgjen en berjochten dy’t se booste. It sjocht der no frij rêstich út, dus wat tinke jo derfan om:",
  "home.explore_prompt.title": "Dit is jo thúsbasis op Mastodon.",
  "home.hide_announcements": "Meidielingen ferstopje",
  "home.show_announcements": "Meidielingen toane",


@@ 307,7 305,6 @@
  "interaction_modal.description.reply": "Jo kinne mei in Mastodon-account op dit berjocht reagearje.",
  "interaction_modal.on_another_server": "Op een oare server",
  "interaction_modal.on_this_server": "Op dizze server",
  "interaction_modal.preamble": "Mastodon is desintralisearre. Dêrom hawwe jo gjin account op dizze Mastodon-server nedich, wannear’t jo al in account op in oare Mastodon-server of kompatibel platfoarm hawwe.",
  "interaction_modal.title.follow": "{name} folgje",
  "interaction_modal.title.reblog": "Berjocht fan {name} booste",
  "interaction_modal.title.reply": "Op it berjocht fan {name} reagearje",

M app/javascript/mastodon/locales/ga.json => app/javascript/mastodon/locales/ga.json +0 -1
@@ 170,7 170,6 @@
  "conversation.open": "Féach ar comhrá",
  "conversation.with": "Le {names}",
  "copypaste.copied": "Cóipeáilte",
  "copypaste.copy": "Cóipeáil",
  "directory.federated": "Ó chomhchruinne aitheanta",
  "directory.local": "Ó {domain} amháin",
  "directory.new_arrivals": "Daoine atá tar éis teacht",

M app/javascript/mastodon/locales/gd.json => app/javascript/mastodon/locales/gd.json +33 -4
@@ 113,6 113,7 @@
  "column.direct": "Iomraidhean prìobhaideach",
  "column.directory": "Rùraich sna pròifilean",
  "column.domain_blocks": "Àrainnean bacte",
  "column.favourites": "Annsachdan",
  "column.firehose": "Inbhirean beòtha",
  "column.follow_requests": "Iarrtasan leantainn",
  "column.home": "Dachaigh",


@@ 134,6 135,8 @@
  "community.column_settings.remote_only": "Feadhainn chèin a-mhàin",
  "compose.language.change": "Atharraich an cànan",
  "compose.language.search": "Lorg cànan…",
  "compose.published.body": "Chaidh am post fhoillseachadh.",
  "compose.published.open": "Fosgail",
  "compose_form.direct_message_warning_learn_more": "Barrachd fiosrachaidh",
  "compose_form.encryption_warning": "Chan eil crioptachadh ceann gu ceann air postaichean Mhastodon. Na co-roinn fiosrachadh dìomhair idir le Mastodon.",
  "compose_form.hashtag_warning": "Cha nochd am post seo fon taga hais o nach eil e poblach. Cha ghabh ach postaichean poblach a lorg a-rèir an tagaichean hais.",


@@ 178,6 181,7 @@
  "confirmations.mute.explanation": "Cuiridh seo na postaichean uapa ’s na postaichean a bheir iomradh orra am falach ach chì iad-san na postaichean agad fhathast is faodaidh iad ’gad leantainn.",
  "confirmations.mute.message": "A bheil thu cinnteach gu bheil thu airson {name} a mhùchadh?",
  "confirmations.redraft.confirm": "Sguab às ⁊ dèan dreachd ùr",
  "confirmations.redraft.message": "A bheil thu cinnteach gu bheil thu airson am post seo a sguabadh às agus dreachd ùr a thòiseachadh? Caillidh tu gach annsachd is brosnachadh air agus thèid freagairtean dhan phost thùsail ’nan dìlleachdanan.",
  "confirmations.reply.confirm": "Freagair",
  "confirmations.reply.message": "Ma bheir thu freagairt an-dràsta, thèid seo a sgrìobhadh thairis air an teachdaireachd a tha thu a’ sgrìobhadh an-dràsta. A bheil thu cinnteach gu bheil thu airson leantainn air adhart?",
  "confirmations.unfollow.confirm": "Na lean tuilleadh",


@@ 187,7 191,6 @@
  "conversation.open": "Seall an còmhradh",
  "conversation.with": "Còmhla ri {names}",
  "copypaste.copied": "Chaidh lethbhreac dheth a dhèanamh",
  "copypaste.copy": "Dèan lethbhreac",
  "copypaste.copy_to_clipboard": "Cuir lethbhreac dheth air an stòr-bhòrd",
  "directory.federated": "On cho-shaoghal aithnichte",
  "directory.local": "O {domain} a-mhàin",


@@ 198,7 201,8 @@
  "dismissable_banner.community_timeline": "Seo na postaichean poblach as ùire o dhaoine aig a bheil cunntas air {domain}.",
  "dismissable_banner.dismiss": "Leig seachad",
  "dismissable_banner.explore_links": "Seo na naidheachdan air a bhithear a’ bruidhinn an-dràsta fhèin air an fhrithealaiche seo is frithealaichean eile dhen lìonra sgaoilte.",
  "dismissable_banner.explore_tags": "Tha fèill air na tagaichean hais seo a’ fàs an-dràsta fhèin air an fhrithealaich seo is frithealaichean eile dhen lìonra sgaoilte.",
  "dismissable_banner.explore_statuses": "Tha fèill air na postaichean seo a’ fàs an-diugh thar an lìona shòisealta. Gheibh postaichean nas ùire le barrachd brosnaichean is annsachdan rangachadh nas àirde.",
  "dismissable_banner.explore_tags": "Tha fèill air na tagaichean hais seo a’ fàs an-diugh air an fhrithealaich seo is frithealaichean eile dhen lìonra sgaoilte. Gheibh tagaichean hais a tha gan cleachdadh le daoine eadar-dhealaichte rangachadh nas àirde.",
  "dismissable_banner.public_timeline": "Seo na postaichean poblach as ùire o dhaoine air an lìonra sòisealta tha ’gan leantainn le daoine air {domain}.",
  "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:",


@@ 226,6 230,8 @@
  "empty_column.direct": "Chan eil iomradh prìobhaideach agad fhathast. Nuair a chuireas no a gheibh thu tè, nochdaidh i an-seo.",
  "empty_column.domain_blocks": "Cha deach àrainn sam bith a bhacadh fhathast.",
  "empty_column.explore_statuses": "Chan eil dad a’ treandadh an-dràsta fhèin. Thoir sùil a-rithist an ceann greis!",
  "empty_column.favourited_statuses": "Chan eil annsachd air post agad fhathast. Nuair a nì thu annsachd de dh’fhear, nochdaidh e an-seo.",
  "empty_column.favourites": "Chan deach am post seo a bhrosnachadh le duine sam bith fhathast. Nuair a bhrosnaicheas cuideigin e, nochdaidh iad an-seo.",
  "empty_column.follow_requests": "Chan eil iarrtas leantainn agad fhathast. Nuair a gheibh thu fear, nochdaidh e an-seo.",
  "empty_column.followed_tags": "Cha do lean thu taga hais sam bith fhathast. Nuair a leanas tu, nochdaidh iad an-seo.",
  "empty_column.hashtag": "Chan eil dad san taga hais seo fhathast.",


@@ 289,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Gin sam bith dhiubh",
  "hashtag.column_settings.tag_mode.none": "Às aonais gin sam bith dhiubh",
  "hashtag.column_settings.tag_toggle": "Gabh a-steach barrachd tagaichean sa cholbh seo",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} chom-pàirtiche} two {{counter} chom-pàirtiche} few {{counter} com-pàirtiche} other {{counter} com-pàirtiche}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} phost} two {{counter} phost} few {{counter} postaichean} other {{counter} post}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} phost} two {{counter} phost} few { postaichean} other { post}} an-diugh",
  "hashtag.follow": "Lean an taga hais",
  "hashtag.unfollow": "Na lean an taga hais tuilleadh",
  "home.actions.go_to_explore": "Faic na tha a’ treandadh",


@@ 296,16 305,22 @@
  "home.column_settings.basic": "Bunasach",
  "home.column_settings.show_reblogs": "Seall na brosnachaidhean",
  "home.column_settings.show_replies": "Seall na freagairtean",
  "home.explore_prompt.body": "Bidh measgachadh de phostaichean o na tagaichean hais a leanas tu, na daoine a leanas tu is na postaichean a bhrosnaicheas iad air do dhachaigh. Tha cùisean caran sàmhach an-dràsta, mar sin dheth seo moladh no dhà dhut:",
  "home.explore_prompt.body": "Bidh measgachadh de phostaichean o na tagaichean hais a leanas tu, na daoine a leanas tu is na postaichean a bhrosnaicheas iad air do dhachaigh. Ma tha cùisean ro shàmhach dhut, seo nas urrainn dhut a dhèanamh:",
  "home.explore_prompt.title": "Seo do dhachaigh am broinn Mastodon.",
  "home.hide_announcements": "Falaich na brathan-fios",
  "home.show_announcements": "Seall na brathan-fios",
  "interaction_modal.description.favourite": "Le cunntas air Mastodon, ’s urrainn dhut am post seo a chur ris na h-annsachdan airson innse dhan ùghdar gu bheil e a’ còrdadh dhut ’s a shàbhaladh do uaireigin eile.",
  "interaction_modal.description.follow": "Le cunntas air Mastodon, ’s urrainn dhut {name} a leantainn ach am faigh thu na postaichean aca nad dhachaigh.",
  "interaction_modal.description.reblog": "Le cunntas air Mastodon, ’s urrainn dhut am post seo a bhrosnachadh gus a cho-roinneadh leis an luchd-leantainn agad fhèin.",
  "interaction_modal.description.reply": "Le cunntas air Mastodon, ’s urrainn dhut freagairt a chur dhan phost seo.",
  "interaction_modal.login.action": "Thoir dhachaigh mi",
  "interaction_modal.login.prompt": "Àrainn-lìn an fhrithealaiche dachaigh agad, can ailbhean.co-shaoghal.net",
  "interaction_modal.no_account_yet": "Nach eil thu air Mastodon?",
  "interaction_modal.on_another_server": "Air frithealaiche eile",
  "interaction_modal.on_this_server": "Air an frithealaiche seo",
  "interaction_modal.preamble": "Air sgàth ’s gu bheil Mastodon sgaoilte, ’s urrainn dhut cunntas a chleachdadh a tha ’ga òstadh le frithealaiche Mastodon no le ùrlar co-chòrdail eile mur eil cunntas agad air an fhear seo.",
  "interaction_modal.sign_in": "Cha deach do chlàradh a-steach air an fhrithealaiche seo. Càit a bheil an cunntas agad ’ga òstadh?",
  "interaction_modal.sign_in_hint": "Gliocas: Seo an làrach-lìn far an do chlàraich thu. Mur eil cuimhne agad dè bh’ ann, thoir sùil air a’ phost-d fàilteachaidh sa bhogsa a-steach agad. ’S urrainn dhut an t-ainm-cleachdaiche slàn agad a chur a-steach cuideachd! (can @mise@ ailbhean.co-shaoghal.net)",
  "interaction_modal.title.favourite": "Cuir am post aig {name} ris na h-annsachdan",
  "interaction_modal.title.follow": "Lean {name}",
  "interaction_modal.title.reblog": "Brosnaich am post aig {name}",
  "interaction_modal.title.reply": "Freagair dhan phost aig {name}",


@@ 321,6 336,8 @@
  "keyboard_shortcuts.direct": "to open direct messages column",
  "keyboard_shortcuts.down": "Gluais sìos air an liosta",
  "keyboard_shortcuts.enter": "Fosgail post",
  "keyboard_shortcuts.favourite": "Cuir am post ris na h-annsachdan",
  "keyboard_shortcuts.favourites": "Fosgail liosta nan annsachdan",
  "keyboard_shortcuts.federated": "Fosgail an loidhne-ama cho-naisgte",
  "keyboard_shortcuts.heading": "Ath-ghoiridean a’ mheur-chlàir",
  "keyboard_shortcuts.home": "Fosgail loidhne-ama na dachaigh",


@@ 351,6 368,7 @@
  "lightbox.previous": "Air ais",
  "limited_account_hint.action": "Seall a’ phròifil co-dhiù",
  "limited_account_hint.title": "Chaidh a’ phròifil seo fhalach le maoir {domain}.",
  "link_preview.author": "Le {name}",
  "lists.account.add": "Cuir ris an liosta",
  "lists.account.remove": "Thoir air falbh on liosta",
  "lists.delete": "Sguab às an liosta",


@@ 373,6 391,7 @@
  "mute_modal.hide_notifications": "A bheil thu airson na brathan fhalach on chleachdaiche seo?",
  "mute_modal.indefinite": "Gun chrìoch",
  "navigation_bar.about": "Mu dhèidhinn",
  "navigation_bar.advanced_interface": "Fosgail san eadar-aghaidh-lìn adhartach",
  "navigation_bar.blocks": "Cleachdaichean bacte",
  "navigation_bar.bookmarks": "Comharran-lìn",
  "navigation_bar.community_timeline": "Loidhne-ama ionadail",


@@ 382,6 401,7 @@
  "navigation_bar.domain_blocks": "Àrainnean bacte",
  "navigation_bar.edit_profile": "Deasaich a’ phròifil",
  "navigation_bar.explore": "Rùraich",
  "navigation_bar.favourites": "Annsachdan",
  "navigation_bar.filters": "Faclan mùchte",
  "navigation_bar.follow_requests": "Iarrtasan leantainn",
  "navigation_bar.followed_tags": "Tagaichean hais ’gan leantainn",


@@ 398,6 418,7 @@
  "not_signed_in_indicator.not_signed_in": "Feumaidh tu clàradh a-steach mus fhaigh thu cothrom air a’ ghoireas seo.",
  "notification.admin.report": "Rinn {name} gearan mu {target}",
  "notification.admin.sign_up": "Chlàraich {name}",
  "notification.favourite": "Chuir {name} am post agad ris na h-annsachdan",
  "notification.follow": "Tha {name} ’gad leantainn a-nis",
  "notification.follow_request": "Dh’iarr {name} ’gad leantainn",
  "notification.mention": "Thug {name} iomradh ort",


@@ 411,6 432,7 @@
  "notifications.column_settings.admin.report": "Gearanan ùra:",
  "notifications.column_settings.admin.sign_up": "Clàraidhean ùra:",
  "notifications.column_settings.alert": "Brathan deasga",
  "notifications.column_settings.favourite": "Annsachdan:",
  "notifications.column_settings.filter_bar.advanced": "Seall a h-uile roinn-seòrsa",
  "notifications.column_settings.filter_bar.category": "Bàr-criathraidh luath",
  "notifications.column_settings.filter_bar.show_bar": "Seall am bàr-criathraidh",


@@ 428,6 450,7 @@
  "notifications.column_settings.update": "Deasachaidhean:",
  "notifications.filter.all": "Na h-uile",
  "notifications.filter.boosts": "Brosnachaidhean",
  "notifications.filter.favourites": "Annsachdan",
  "notifications.filter.follows": "A’ leantainn",
  "notifications.filter.mentions": "Iomraidhean",
  "notifications.filter.polls": "Toraidhean cunntais-bheachd",


@@ 578,6 601,8 @@
  "server_banner.server_stats": "Stadastaireachd an fhrithealaiche:",
  "sign_in_banner.create_account": "Cruthaich cunntas",
  "sign_in_banner.sign_in": "Clàraich a-steach",
  "sign_in_banner.sso_redirect": "Clàraich a-steach no clàraich leinn",
  "sign_in_banner.text": "Clàraich a-steach a leantainn phròifilean no thagaichean hais, a’ cur postaichean ris na h-annsachdan ’s ’gan co-roinneadh is freagairt dhaibh. ’S urrainn dhut gnìomh a ghabhail le cunntas o fhrithealaiche eile cuideachd.",
  "status.admin_account": "Fosgail eadar-aghaidh na maorsainneachd dha @{name}",
  "status.admin_domain": "Fosgail eadar-aghaidh na maorsainneachd dha {domain}",
  "status.admin_status": "Fosgail am post seo ann an eadar-aghaidh na maorsainneachd",


@@ 594,12 619,15 @@
  "status.edited": "Air a dheasachadh {date}",
  "status.edited_x_times": "Chaidh a dheasachadh {count, plural, one {{counter} turas} two {{counter} thuras} few {{counter} tursan} other {{counter} turas}}",
  "status.embed": "Leabaich",
  "status.favourite": "Cuir ris na h-annsachdan",
  "status.filter": "Criathraich am post seo",
  "status.filtered": "Criathraichte",
  "status.hide": "Falaich am post",
  "status.history.created": "Chruthaich {name} {date} e",
  "status.history.edited": "Dheasaich {name} {date} e",
  "status.load_more": "Luchdaich barrachd dheth",
  "status.media.open": "Dèan briogadh gus fhosgladh",
  "status.media.show": "Dèan briogadh gus a shealltainn",
  "status.media_hidden": "Meadhan falaichte",
  "status.mention": "Thoir iomradh air @{name}",
  "status.more": "Barrachd",


@@ 630,6 658,7 @@
  "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}",
  "status.translate": "Eadar-theangaich",
  "status.translated_from_with": "Air eadar-theangachadh o {lang} le {provider}",
  "status.uncached_media_warning": "Chan eil ro-shealladh ri fhaighinn",
  "status.unmute_conversation": "Dì-mhùch an còmhradh",
  "status.unpin": "Dì-phrìnich on phròifil",
  "subscribed_languages.lead": "Cha nochd ach na postaichean sna cànanan a thagh thu air loidhnichean-ama na dachaigh ’s nan liostaichean às dèidh an atharrachaidh seo. Na tagh gin ma tha thu airson na postaichean uile fhaighinn ge b’ e dè an cànan.",

M app/javascript/mastodon/locales/gl.json => app/javascript/mastodon/locales/gl.json +10 -4
@@ 191,7 191,6 @@
  "conversation.open": "Ver conversa",
  "conversation.with": "Con {names}",
  "copypaste.copied": "Copiado",
  "copypaste.copy": "Copiar",
  "copypaste.copy_to_clipboard": "Copiar ao portapapeis",
  "directory.federated": "Do fediverso coñecido",
  "directory.local": "Só de {domain}",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Calquera destes",
  "hashtag.column_settings.tag_mode.none": "Ningún destes",
  "hashtag.column_settings.tag_toggle": "Incluír cancelos adicionais para esta columna",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} publicación} other {{counter} publicacións}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicación} other {{counter} publicacións}} hoxe",
  "hashtag.follow": "Seguir cancelo",
  "hashtag.unfollow": "Deixar de seguir cancelo",
  "home.actions.go_to_explore": "Mira do que se está a falar",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Básico",
  "home.column_settings.show_reblogs": "Amosar compartidos",
  "home.column_settings.show_replies": "Amosar respostas",
  "home.explore_prompt.body": "A túa cronoloxía de inicio vai ter unha mistura de publicacións procedentes dos cancelos que segues, das persoas que elexiches seguir e das publicacións que elas promoven. Hai poucas cousas polo de agora, que che parece se:",
  "home.explore_prompt.body": "A túa cronoloxía de inicio vai ter unha mistura de publicacións procedentes dos cancelos que segues, das persoas que elexiches seguir e das publicacións que elas promoven. Se non tes moito que ler, podes probar a:",
  "home.explore_prompt.title": "Iste é o teu fogar en Mastodon.",
  "home.hide_announcements": "Agochar anuncios",
  "home.show_announcements": "Amosar anuncios",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Cunha conta en Mastodon, poderás seguir a {name} e recibir as súas publicacións na túa cronoloxía de inicio.",
  "interaction_modal.description.reblog": "Cunha conta en Mastodon, poderás promover esta publicación para compartila con quen te siga.",
  "interaction_modal.description.reply": "Cunha conta en Mastodon, poderás responder a esta publicación.",
  "interaction_modal.login.action": "Lévame ao inicio",
  "interaction_modal.login.prompt": "Dominio do teu servidor de inicio, ex. mastodon.social",
  "interaction_modal.no_account_yet": "Aínda non tes unha conta?",
  "interaction_modal.on_another_server": "Nun servidor diferente",
  "interaction_modal.on_this_server": "Neste servidor",
  "interaction_modal.other_server_instructions": "Copia e pega este URL na barra de busca da túa app Mastodon favorita ou na interface web do servidor Mastodon.",
  "interaction_modal.preamble": "Como Mastodon é descentralizado, é posible usar unha conta existente noutro servidor Mastodon, ou nunha plataforma compatible, se non dispós dunha conta neste servidor.",
  "interaction_modal.sign_in": "Non iniciaches sesión neste servidor. Onde creaches a túa conta?",
  "interaction_modal.sign_in_hint": "Axuda: trátase da web na que te rexistraches. Se non a lembras, busca na caixa de correo a mensaxe de benvida. Tamén podes escribir o teu identificador completo! (ex. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Marcar coma favorita a publicación de {name}",
  "interaction_modal.title.follow": "Seguir a {name}",
  "interaction_modal.title.reblog": "Promover a publicación de {name}",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "Estatísticas do servidor:",
  "sign_in_banner.create_account": "Crear conta",
  "sign_in_banner.sign_in": "Iniciar sesión",
  "sign_in_banner.sso_redirect": "Acceder ou Crear conta",
  "sign_in_banner.text": "Inicia sesión para seguir perfís ou cancelos, marcar como favorita e responder a publicacións. Tamén podes interactuar coa túa conta noutro servidor.",
  "status.admin_account": "Abrir interface de moderación para @{name}",
  "status.admin_domain": "Abrir interface de moderación para {domain}",

M app/javascript/mastodon/locales/he.json => app/javascript/mastodon/locales/he.json +10 -4
@@ 191,7 191,6 @@
  "conversation.open": "צפו בשיחה",
  "conversation.with": "עם {names}",
  "copypaste.copied": "הועתק",
  "copypaste.copy": "העתקה",
  "copypaste.copy_to_clipboard": "העתקה ללוח הגזירים",
  "directory.federated": "מהפדרציה הידועה",
  "directory.local": "מ- {domain} בלבד",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "לפחות אחד מאלה",
  "hashtag.column_settings.tag_mode.none": "אף אחד מאלה",
  "hashtag.column_settings.tag_toggle": "כלול תגיות נוספות בטור זה",
  "hashtag.counter_by_accounts": "{count, plural,one{{count} משתתף.ת}other{{count} משתתפיםות}}",
  "hashtag.counter_by_uses": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}} היום",
  "hashtag.follow": "מעקב אחר תגית",
  "hashtag.unfollow": "ביטול מעקב אחר תגית",
  "home.actions.go_to_explore": "הצגת מגמות",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "למתחילים",
  "home.column_settings.show_reblogs": "הצגת הדהודים",
  "home.column_settings.show_replies": "הצגת תגובות",
  "home.explore_prompt.body": "פיד הנעקבים שלך יכיל תערובת של הודעות מהתגיות והאנשים שבחרת לעקיבה, וההודעות שהנעקבים בוחרים להדהד. נראה שדי שקט כאן כרגע אז מה לגבי:",
  "home.explore_prompt.body": "זרם הבית שלך יכיל תערובת של הודעות מהתגיות והאנשים שבחרת לעקיבה, וההודעות שהנעקבים בוחרים להדהד. אם זה נראה שקט מדי כרגע אז מה לגבי:",
  "home.explore_prompt.title": "זהו בסיס הבית שלך בתוך מסטודון.",
  "home.hide_announcements": "הסתר הכרזות",
  "home.show_announcements": "הצג הכרזות",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "עם חשבון מסטודון, ניתן לעקוב אחרי {name} כדי לקבל את הםוסטים שלו/ה בפיד הבית.",
  "interaction_modal.description.reblog": "עם חשבון מסטודון, ניתן להדהד את החצרוץ ולשתף עם עוקבים.",
  "interaction_modal.description.reply": "עם חשבון מסטודון, ניתן לענות לחצרוץ.",
  "interaction_modal.login.action": "קח אותי לדף הבית",
  "interaction_modal.login.prompt": "שם השרת שלך, למשל mastodon.social",
  "interaction_modal.no_account_yet": "עדיין לא במסטודון?",
  "interaction_modal.on_another_server": "על שרת אחר",
  "interaction_modal.on_this_server": "על שרת זה",
  "interaction_modal.other_server_instructions": "ניתן להעתיק ולהדביק קישור זה לתוך שדה החיפוש באפליקציית מסטודון שבשימוש אצלך או בממשק הדפדפן של שרת המסטודון.",
  "interaction_modal.preamble": "כיוון שמסטודון מבוזרת, תוכל/י להשתמש בחשבון שלך משרתי מסטודון או רשתות תואמות אחרות אם אין לך חשבון על שרת זה.",
  "interaction_modal.sign_in": "אינך מחובר.ת לשרת זה. היכן מתאכסן החשבון שלך?",
  "interaction_modal.sign_in_hint": "רמז: זהו האתר שבו נרשמת. אם שכחת, יש לך הודעת \"ברוכים הבאים\" בתיבת הדוא\"ל. ניתן גם לכתוב את שם המשתמש המלא (למשל @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "חיבוב החצרוץ של {name}",
  "interaction_modal.title.follow": "לעקוב אחרי {name}",
  "interaction_modal.title.reblog": "להדהד את החצרוץ של {name}",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "סטטיסטיקות שרת:",
  "sign_in_banner.create_account": "יצירת חשבון",
  "sign_in_banner.sign_in": "התחברות",
  "sign_in_banner.sso_redirect": "התחברות/הרשמה",
  "sign_in_banner.text": "יש להתחבר כדי לעקוב אחרי משתמשים או תגיות, לחבב, לשתף ולענות להודעות. ניתן גם לתקשר מהחשבון שלך עם שרת אחר.",
  "status.admin_account": "פתח/י ממשק ניהול עבור @{name}",
  "status.admin_domain": "פתיחת ממשק ניהול עבור {domain}",

M app/javascript/mastodon/locales/hi.json => app/javascript/mastodon/locales/hi.json +0 -2
@@ 176,7 176,6 @@
  "conversation.open": "वार्तालाप देखें",
  "conversation.with": "{names} के साथ",
  "copypaste.copied": "कॉपी किआ जा चूका है",
  "copypaste.copy": "कॉपी",
  "directory.federated": "ज्ञात फेडीवर्स से",
  "directory.local": "केवल {domain} से",
  "directory.new_arrivals": "नए आगंतुक",


@@ 285,7 284,6 @@
  "interaction_modal.description.reply": "मास्टोडन पर एक अकाउंट के साथ, आप इस पोस्ट का जवाब दे सकते हैं।",
  "interaction_modal.on_another_server": "एक अलग सर्वर पर",
  "interaction_modal.on_this_server": "इस सर्वर पे",
  "interaction_modal.preamble": "चूंकि मास्टोडन डेसेंट्रलीसेड है, यदि आपके पास इस पर कोई अकाउंट नहीं है, तो आप किसी अन्य मास्टोडन सर्वर या संगत प्लेटफ़ॉर्म द्वारा होस्ट किए गए अपने मौजूदा अकाउंट का उपयोग कर सकते हैं।",
  "interaction_modal.title.follow": "फॉलो {name}",
  "interaction_modal.title.reblog": "बूस्ट {name} की पोस्ट",
  "interaction_modal.title.reply": "{name} की पोस्ट पे रिप्लाई करें",

M app/javascript/mastodon/locales/hu.json => app/javascript/mastodon/locales/hu.json +10 -4
@@ 191,7 191,6 @@
  "conversation.open": "Beszélgetés megtekintése",
  "conversation.with": "Velük: {names}",
  "copypaste.copied": "Másolva",
  "copypaste.copy": "Másolás",
  "copypaste.copy_to_clipboard": "Másolás vágólapra",
  "directory.federated": "Az ismert fediverzumból",
  "directory.local": "Csak {domain} tartományból",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Bármelyik",
  "hashtag.column_settings.tag_mode.none": "Egyik sem",
  "hashtag.column_settings.tag_toggle": "További címkék felvétele ehhez az oszlophoz",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} résztvevő} other {{counter} résztvevő}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} bejegyzés} other {{counter} bejegyzés}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} bejegyzés} other {{counter} bejegyzés}} ma",
  "hashtag.follow": "Hashtag követése",
  "hashtag.unfollow": "Hashtag követésének megszüntetése",
  "home.actions.go_to_explore": "Felkapottak megtekintése",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Általános",
  "home.column_settings.show_reblogs": "Megtolások megjelenítése",
  "home.column_settings.show_replies": "Válaszok megjelenítése",
  "home.explore_prompt.body": "A saját hírfolyam a követésre kiválasztott hashtagek, a követésre kiválasztott személyek és az általuk népszerűsített bejegyzések keverékét tartalmazza. Ez most elég csendesnek tűnik, szóval mit szólnál ehhez:",
  "home.explore_prompt.body": "A saját hírfolyam a követésre kiválasztott hashtagek, a követésre kiválasztott személyek és az általuk népszerűsített bejegyzések keverékét tartalmazza. Ha csendesnek tűnik, akkor megpróbálhatod ezeket:",
  "home.explore_prompt.title": "Ez a kezdőpontod a Mastodonon belül.",
  "home.hide_announcements": "Közlemények elrejtése",
  "home.show_announcements": "Közlemények megjelenítése",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Egy Mastodon fiókkal bekövetheted {name} fiókot, hogy lásd a bejegyzéseit a saját hírfolyamodban.",
  "interaction_modal.description.reblog": "Egy Mastodon fiókkal megtolhatod ezt a bejegyzést, hogy megoszd a saját követőiddel.",
  "interaction_modal.description.reply": "Egy Mastodon fiókkal válaszolhatsz erre a bejegyzésre.",
  "interaction_modal.login.action": "Vigyen haza",
  "interaction_modal.login.prompt": "A saját kiszolgálód tartományneve, pl.: mastodon.social",
  "interaction_modal.no_account_yet": "Nem vagy Mastodonon?",
  "interaction_modal.on_another_server": "Másik kiszolgálón",
  "interaction_modal.on_this_server": "Ezen a kiszolgálón",
  "interaction_modal.other_server_instructions": "Másold és illeszd be ezt a webcímet a kedvenc Mastodon alkalmazásod vagy a Mastodon-kiszolgálód webes felületének keresőmezőjébe.",
  "interaction_modal.preamble": "Mivel a Mastodon decentralizált, használhatod egy másik Mastodon kiszolgálón, vagy kompatibilis szolgáltatáson lévő fiókodat, ha ezen a kiszolgálón nincs fiókod.",
  "interaction_modal.sign_in": "Nem vagy bejelentkezve ezen a kiszolgálón. Hol van a fiókod hosztolva?",
  "interaction_modal.sign_in_hint": "Tip: Ez az a weboldal, ahol regisztráltál. Ha nem emlékszel, keresd meg az üdvözlőlevelet a bejövő leveleid között. Beírhatod a teljes felhasználónevedet is! (pl.: @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "{name} bejegyzésének megjelölése kedvencként",
  "interaction_modal.title.follow": "{name} követése",
  "interaction_modal.title.reblog": "{name} bejegyzésének megtolása",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "Kiszolgálóstatisztika:",
  "sign_in_banner.create_account": "Fiók létrehozása",
  "sign_in_banner.sign_in": "Bejelentkezés",
  "sign_in_banner.sso_redirect": "Bejelentkezés vagy regisztráció",
  "sign_in_banner.text": "Jelentkezz be profilok vagy hashtagek követéséhez, kedvencnek jelöléséhez, bejegyzések megosztásához, megválaszolásához. A fiókodból más kiszolgálókon is kommunikálhatsz.",
  "status.admin_account": "Moderációs felület megnyitása @{name} fiókhoz",
  "status.admin_domain": "Moderációs felület megnyitása {domain} esetében",

M app/javascript/mastodon/locales/hy.json => app/javascript/mastodon/locales/hy.json +0 -1
@@ 157,7 157,6 @@
  "conversation.open": "Դիտել խօսակցութիւնը",
  "conversation.with": "{names}-ի հետ",
  "copypaste.copied": "Պատճէնուած է",
  "copypaste.copy": "Պատճէնել",
  "directory.federated": "Յայտնի դաշնեզերքից",
  "directory.local": "{domain} տիրոյթից միայն",
  "directory.new_arrivals": "Նորեկներ",

M app/javascript/mastodon/locales/id.json => app/javascript/mastodon/locales/id.json +0 -2
@@ 181,7 181,6 @@
  "conversation.open": "Lihat percakapan",
  "conversation.with": "Dengan {names}",
  "copypaste.copied": "Disalin",
  "copypaste.copy": "Salin",
  "copypaste.copy_to_clipboard": "Salin ke clipboard",
  "directory.federated": "Dari fediverse yang dikenal",
  "directory.local": "Dari {domain} saja",


@@ 295,7 294,6 @@
  "interaction_modal.description.reply": "Dengan sebuah akun di Mastodon, Anda bisa menanggapi kiriman ini.",
  "interaction_modal.on_another_server": "Di server lain",
  "interaction_modal.on_this_server": "Di server ini",
  "interaction_modal.preamble": "Karena Mastodon itu terdesentralisasi, Anda dapat menggunakan akun Anda yang sudah ada yang berada di server Mastodon lain atau platform yang kompatibel jika Anda tidak memiliki sebuah akun di sini.",
  "interaction_modal.title.follow": "Ikuti {name}",
  "interaction_modal.title.reblog": "Boost kiriman {name}",
  "interaction_modal.title.reply": "Balas ke kiriman {name}",

M app/javascript/mastodon/locales/io.json => app/javascript/mastodon/locales/io.json +0 -2
@@ 160,7 160,6 @@
  "conversation.open": "Videz konverso",
  "conversation.with": "Kun {names}",
  "copypaste.copied": "Kopiesis",
  "copypaste.copy": "Kopiez",
  "directory.federated": "De savita fediverso",
  "directory.local": "De {domain} nur",
  "directory.new_arrivals": "Nova venanti",


@@ 252,7 251,6 @@
  "interaction_modal.description.reply": "Per konto che Mastodon, vu povas respondar ca posto.",
  "interaction_modal.on_another_server": "Che diferanta servilo",
  "interaction_modal.on_this_server": "Che ca servilo",
  "interaction_modal.preamble": "Pro ke Mastodon esas necentraligita, on povas uzar vua havata konto quo hostigesas altra servilo di Mastodon o konciliebla metodo se on ne havas konto hike.",
  "interaction_modal.title.follow": "Sequez {name}",
  "interaction_modal.title.reblog": "Bustizez posto di {name}",
  "interaction_modal.title.reply": "Respondez posto di {name}",

M app/javascript/mastodon/locales/is.json => app/javascript/mastodon/locales/is.json +10 -4
@@ 191,7 191,6 @@
  "conversation.open": "Skoða samtal",
  "conversation.with": "Við {names}",
  "copypaste.copied": "Afritað",
  "copypaste.copy": "Afrita",
  "copypaste.copy_to_clipboard": "Afrita á klippispjald",
  "directory.federated": "Frá samtengdum vefþjónum",
  "directory.local": "Einungis frá {domain}",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Hvað sem er af þessu",
  "hashtag.column_settings.tag_mode.none": "Ekkert af þessu",
  "hashtag.column_settings.tag_toggle": "Taka með viðbótarmerki fyrir þennan dálk",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} þátttakandi} other {{counter} þátttakendur}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} færsla} other {{counter} færslur}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} færsla} other {{counter} færslur}} í dag",
  "hashtag.follow": "Fylgjast með myllumerki",
  "hashtag.unfollow": "Hætta að fylgjast með myllumerki",
  "home.actions.go_to_explore": "Sjáðu hvað er í umræðunni",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Einfalt",
  "home.column_settings.show_reblogs": "Sýna endurbirtingar",
  "home.column_settings.show_replies": "Birta svör",
  "home.explore_prompt.body": "Heimastreymið inniheldur blöndu af færslum frá þeim myllumerkjum sem þú hefur valið að fylgjast með, fólki sem þú hefur valið að fylgja, og færslunum sem þau endurbirta. Það lítur út fyrir að vera lítið að ske í augnablikinu, svo hvað með að:",
  "home.explore_prompt.body": "Heimastreymið þitt verður með blöndu af færslum úr myllumerkjunum sem þú hefur valið að fylgja, færslum frá fólki sem þú hefur valið að fylgja og færslum sem þau endurbirta. Ef þér finnst þetta allt of kyrrlátt, gætirðu viljað:",
  "home.explore_prompt.title": "Þetta er bækistöð þín innan Loðfílsins.",
  "home.hide_announcements": "Fela auglýsingar",
  "home.show_announcements": "Birta auglýsingar",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Með notandaaðgangi á Mastodon geturðu fylgst með {name} og fengið færslur frá viðkomandi í heimastreymið þitt.",
  "interaction_modal.description.reblog": "Með notandaaðgangi á Mastodon geturðu endurbirt þessa færslu til að deila henni með þeim sem fylgjast með þér.",
  "interaction_modal.description.reply": "Með notandaaðgangi á Mastodon geturðu svarað þessari færslu.",
  "interaction_modal.login.action": "Fara á heimastreymið mitt",
  "interaction_modal.login.prompt": "Lén heimanetþjónsins þíns, t.d. mastodon.social",
  "interaction_modal.no_account_yet": "Ekki á Mastodon?",
  "interaction_modal.on_another_server": "Á öðrum netþjóni",
  "interaction_modal.on_this_server": "Á þessum netþjóni",
  "interaction_modal.other_server_instructions": "Afritaðu og límdu þessa slóð inn í leitarreit Mastodon-forrits þess sem þú vilt nota eða í vefviðmóti Mastodon-netþjónsins þíns.",
  "interaction_modal.preamble": "Þar sem Mastodon er dreifhýst kerfi, þá geturðu notað aðgang sem er hýstur á öðrum Mastodon-þjóni eða öðru samhæfðu kerfi, ef þú ert ekki með notandaaðgang á þessum hér.",
  "interaction_modal.sign_in": "Þú ert ekki skráð/ur inn á þennan netþjón. Hvar er aðgangurinn þinn hýstur?",
  "interaction_modal.sign_in_hint": "Ábending: Það er vefsvæðið þar sem þú skráðir þig. Ef þú manst ekki hvar, geturðu leitað að kynningarpóstinum í pósthólfinu þínu. Þú getur líka sett inn fullt notandanafn þitt (t.d. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Setja færsluna frá {name} í eftirlæti",
  "interaction_modal.title.follow": "Fylgjast með {name}",
  "interaction_modal.title.reblog": "Endurbirta færsluna frá {name}",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "Tölfræði þjóns:",
  "sign_in_banner.create_account": "Búa til notandaaðgang",
  "sign_in_banner.sign_in": "Skrá inn",
  "sign_in_banner.sso_redirect": "Skrá inn eða nýskrá",
  "sign_in_banner.text": "Skráðu þig inn til að fylgjast með notendum eða myllumerkjum, svara færslum, deila þeim eða setja í eftirlæti. Þú getur einnig átt í samskiptum á aðgangnum þínum á öðrum netþjónum.",
  "status.admin_account": "Opna umsjónarviðmót fyrir @{name}",
  "status.admin_domain": "Opna umsjónarviðmót fyrir @{domain}",

M app/javascript/mastodon/locales/it.json => app/javascript/mastodon/locales/it.json +9 -3
@@ 191,7 191,6 @@
  "conversation.open": "Visualizza conversazione",
  "conversation.with": "Con {names}",
  "copypaste.copied": "Copiato",
  "copypaste.copy": "Copia",
  "copypaste.copy_to_clipboard": "Copia negli Appunti",
  "directory.federated": "Da un fediverse noto",
  "directory.local": "Solo da {domain}",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Uno o più di questi",
  "hashtag.column_settings.tag_mode.none": "Nessuno di questi",
  "hashtag.column_settings.tag_toggle": "Includi i tag aggiuntivi per questa colonna",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} partecipante} other {{counter} partecipanti}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} post} other {{counter} post}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} post} other {{counter} post}} oggi",
  "hashtag.follow": "Segui l'hashtag",
  "hashtag.unfollow": "Smetti di seguire l'hashtag",
  "home.actions.go_to_explore": "Scopri cosa sia di tendenza",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Con un profilo di Mastodon, puoi seguire {name} per ricevere i suoi post nel feed della tua home.",
  "interaction_modal.description.reblog": "Con un profilo di Mastodon, puoi rebloggare questo post per condividerlo con i tuoi seguaci.",
  "interaction_modal.description.reply": "Con un profilo di Mastodon, puoi rispondere a questo post.",
  "interaction_modal.login.action": "Torna all’inizio",
  "interaction_modal.login.prompt": "Dominio del tuo server principale, ad esempio mastodon.social",
  "interaction_modal.no_account_yet": "Non su Mastodon?",
  "interaction_modal.on_another_server": "Su un altro server",
  "interaction_modal.on_this_server": "Su questo server",
  "interaction_modal.other_server_instructions": "Copia e incolla questo URL nel campo di ricerca della tua app Mastodon preferita o nell'interfaccia web del tuo server Mastodon.",
  "interaction_modal.preamble": "Poiché Mastodon è decentralizzato, puoi utilizzare il tuo profilo esistente ospitato da un altro server di Mastodon on piattaforma compatibile, se non hai un profilo su questo.",
  "interaction_modal.sign_in": "Non sei connesso a questo server. Dove è ospitato il tuo account?",
  "interaction_modal.sign_in_hint": "Suggerimento: questo è il sito in cui ti sei registrato. Se non ti ricordi, cerca l'e-mail di benvenuto nella tua casella di posta. Puoi anche inserire il tuo nome utente completo! (es. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Contrassegna il post di {name} come preferito",
  "interaction_modal.title.follow": "Segui {name}",
  "interaction_modal.title.reblog": "Reblogga il post di {name}",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "Statistiche del server:",
  "sign_in_banner.create_account": "Crea un profilo",
  "sign_in_banner.sign_in": "Accedi",
  "sign_in_banner.sso_redirect": "Accedi o Registrati",
  "sign_in_banner.text": "Accedi per seguire profili o hashtag, condividere, rispondere e aggiungere post ai preferiti. Puoi anche interagire dal tuo account su un server diverso.",
  "status.admin_account": "Apri interfaccia di moderazione per @{name}",
  "status.admin_domain": "Apri l'interfaccia di moderazione per {domain}",

M app/javascript/mastodon/locales/ja.json => app/javascript/mastodon/locales/ja.json +11 -5
@@ 191,7 191,6 @@
  "conversation.open": "会話を表示",
  "conversation.with": "{names}",
  "copypaste.copied": "コピーしました",
  "copypaste.copy": "コピー",
  "copypaste.copy_to_clipboard": "クリップボードにコピー",
  "directory.federated": "既知の連合より",
  "directory.local": "{domain} のみ",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "いずれかを含む",
  "hashtag.column_settings.tag_mode.none": "これらを除く",
  "hashtag.column_settings.tag_toggle": "このカラムに追加のタグを含める",
  "hashtag.counter_by_accounts": "{count, plural, other {{counter}人投稿}}",
  "hashtag.counter_by_uses": "{count, plural, other {{counter}件}}",
  "hashtag.counter_by_uses_today": "今日{count, plural, other {{counter}件}}",
  "hashtag.follow": "ハッシュタグをフォローする",
  "hashtag.unfollow": "ハッシュタグのフォローを解除",
  "home.actions.go_to_explore": "話題をさがす",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "基本設定",
  "home.column_settings.show_reblogs": "ブースト表示",
  "home.column_settings.show_replies": "返信表示",
  "home.explore_prompt.body": "ユーザーやハッシュタグをフォローすると、この「ホーム」タイムラインに投稿やブーストが流れるようになります。タイムラインをもう少し、にぎやかにしてみませんか?",
  "home.explore_prompt.body": "ユーザーやハッシュタグをフォローすると、この「ホーム」タイムラインに投稿やブーストが流れるようになります。タイムラインをもう少しにぎやかにしてみませんか?",
  "home.explore_prompt.title": "Mastodonのタイムラインへようこそ。",
  "home.hide_announcements": "お知らせを隠す",
  "home.show_announcements": "お知らせを表示",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Mastodonのアカウントで{name}さんをフォローしてホームフィードで投稿を受け取れます。",
  "interaction_modal.description.reblog": "Mastodonのアカウントでこの投稿をブーストして自分のフォロワーに共有できます。",
  "interaction_modal.description.reply": "Mastodonのアカウントでこの投稿に反応できます。",
  "interaction_modal.login.action": "サーバーに移動",
  "interaction_modal.login.prompt": "登録したサーバーのドメイン (例: mastodon.social)",
  "interaction_modal.no_account_yet": "Mastodonにアカウントがない場合は",
  "interaction_modal.on_another_server": "別のサーバー",
  "interaction_modal.on_this_server": "このサーバー",
  "interaction_modal.other_server_instructions": "以下のURLをコピーして、Mastodon対応アプリや自分のサーバーの検索欄に貼り付けます。",
  "interaction_modal.preamble": "Mastodonは分散化されているためアカウントを持っていなくても別のMastodonサーバーまたは互換性のあるプラットフォームでホストされているアカウントを使用できます。",
  "interaction_modal.sign_in": "このサーバーにアカウントがなくても、ほかのサーバーや互換性のあるプラットフォームのアカウントを使用できます。",
  "interaction_modal.sign_in_hint": "ワンポイント: ここでは自分のアカウントのドメインを入力します。うまくいかない場合はドメインまで含めた完全なユーザー名を入力してみてください (例: @Mastodon@mastodon.social)。ドメインやユーザー名は登録完了時のメールに記載されています。",
  "interaction_modal.title.favourite": "{name}さんの投稿をお気に入り登録",
  "interaction_modal.title.follow": "{name}さんをフォロー",
  "interaction_modal.title.reblog": "{name}さんの投稿をブースト",


@@ 363,7 368,7 @@
  "lightbox.previous": "前",
  "limited_account_hint.action": "構わず表示する",
  "limited_account_hint.title": "このプロフィールは{domain}のモデレーターによって非表示にされています。",
  "link_preview.author": "{name} が作成",
  "link_preview.author": "{name}",
  "lists.account.add": "リストに追加",
  "lists.account.remove": "リストから外す",
  "lists.delete": "リストを削除",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "サーバーの情報",
  "sign_in_banner.create_account": "アカウント作成",
  "sign_in_banner.sign_in": "ログイン",
  "sign_in_banner.sso_redirect": "ログインまたは登録",
  "sign_in_banner.text": "アカウントがあればユーザーやハッシュタグをフォローしたり、投稿のお気に入り登録やブースト、投稿への返信ができます。別のサーバーのユーザーとの交流も可能です。",
  "status.admin_account": "@{name}さんのモデレーション画面を開く",
  "status.admin_domain": "{domain}のモデレーション画面を開く",

M app/javascript/mastodon/locales/kab.json => app/javascript/mastodon/locales/kab.json +0 -1
@@ 135,7 135,6 @@
  "conversation.open": "Ssken adiwenni",
  "conversation.with": "Akked {names}",
  "copypaste.copied": "Yettwanɣel",
  "copypaste.copy": "Nγel",
  "directory.federated": "Deg fedivers yettwasnen",
  "directory.local": "Seg {domain} kan",
  "directory.new_arrivals": "Imaynuten id yewḍen",

M app/javascript/mastodon/locales/kk.json => app/javascript/mastodon/locales/kk.json +0 -1
@@ 136,7 136,6 @@
  "conversation.mark_as_read": "Оқылды деп белгіле",
  "conversation.open": "Пікірталасты қарау",
  "conversation.with": "{names} атты",
  "copypaste.copy": "Көшіру",
  "directory.federated": "Танымал желіден",
  "directory.local": "Тек {domain} доменінен",
  "directory.new_arrivals": "Жаңадан келгендер",

M app/javascript/mastodon/locales/ko.json => app/javascript/mastodon/locales/ko.json +20 -14
@@ 37,7 37,7 @@
  "account.following": "팔로잉",
  "account.following_counter": "{counter} 팔로잉",
  "account.follows.empty": "이 사용자는 아직 아무도 팔로우하고 있지 않습니다.",
  "account.follows_you": "날 팔로우합니다",
  "account.follows_you": "나를 팔로우합니다",
  "account.go_to_profile": "프로필로 이동",
  "account.hide_reblogs": "@{name}의 부스트를 숨기기",
  "account.in_memoriam": "고인의 계정입니다.",


@@ 191,7 191,6 @@
  "conversation.open": "대화 보기",
  "conversation.with": "{names} 님과",
  "copypaste.copied": "복사됨",
  "copypaste.copy": "복사",
  "copypaste.copy_to_clipboard": "클립보드에 복사",
  "directory.federated": "알려진 연합우주로부터",
  "directory.local": "{domain}에서만",


@@ 202,7 201,7 @@
  "dismissable_banner.community_timeline": "여기 있는 것들은 계정이 {domain}에 있는 사람들의 최근 공개 게시물들입니다.",
  "dismissable_banner.dismiss": "지우기",
  "dismissable_banner.explore_links": "이 소식들은 오늘 소셜 웹에서 가장 많이 공유된 내용들입니다. 새 소식을 더 많은 사람들이 공유할수록 높은 순위가 됩니다.",
  "dismissable_banner.explore_statuses": "이 게시물들은 오늘 소셜 웹에서 호응을 얻고 있는 것들입니다. 부스트와 관심을 받는 새로운 글들이 높은 순위가 됩니다",
  "dismissable_banner.explore_statuses": "오늘 소셜 웹에서 호응을 얻고 있는 게시물이에요. 부스트와 좋아요를 받는 새로운 게시물이 높은 순위가 돼요.",
  "dismissable_banner.explore_tags": "이 해시태그들은 이 서버와 분산화된 네트워크의 다른 서버에서 사람들의 인기를 끌고 있는 것들입니다.",
  "dismissable_banner.public_timeline": "이것들은 {domain}에 있는 사람들이 팔로우한 사람들의 최신 게시물들입니다.",
  "embed.instructions": "아래의 코드를 복사하여 대화를 원하는 곳으로 공유하세요.",


@@ 231,8 230,8 @@
  "empty_column.direct": "개인적인 멘션이 없습니다. 보내거나 받으면 여기에 표시됩니다.",
  "empty_column.domain_blocks": "아직 차단한 도메인이 없습니다.",
  "empty_column.explore_statuses": "아직 유행하는 것이 없습니다. 나중에 다시 확인하세요!",
  "empty_column.favourited_statuses": "아직 마음에 들어한 게시물이 없습니다. 게시물을 좋아요 하면 여기에 나타납니다.",
  "empty_column.favourites": "아직 아무도 이 게시물을 마음에 들어하지 않았습니다. 누군가 좋아요를 하면 여기에 나타납니다.",
  "empty_column.favourited_statuses": "아직 좋아요한 게시물이 없습니다. 게시물을 좋아요 하면 여기에 나타납니다.",
  "empty_column.favourites": "아직 아무도 이 게시물을 좋아요를 하지 않았습니다. 누군가 좋아요를 하면 여기에 나타납니다.",
  "empty_column.follow_requests": "아직 팔로우 요청이 없습니다. 요청을 받았을 때 여기에 나타납니다.",
  "empty_column.followed_tags": "아직 아무 해시태그도 팔로우하고 있지 않습니다. 해시태그를 팔로우하면, 여기에 표시됩니다.",
  "empty_column.hashtag": "이 해시태그는 아직 사용되지 않았습니다.",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "어느것이든",
  "hashtag.column_settings.tag_mode.none": "이것들을 제외하고",
  "hashtag.column_settings.tag_toggle": "추가 해시태그를 이 컬럼에 추가합니다",
  "hashtag.counter_by_accounts": "{count, plural, other {{counter} 명의 참여자}}",
  "hashtag.counter_by_uses": "{count, plural, other {{counter} 개의 게시물}}",
  "hashtag.counter_by_uses_today": "오늘 {count, plural, other {{counter} 개의 게시물}}",
  "hashtag.follow": "해시태그 팔로우",
  "hashtag.unfollow": "해시태그 팔로우 해제",
  "home.actions.go_to_explore": "무엇이 유행인지 보기",


@@ 303,19 305,22 @@
  "home.column_settings.basic": "기본",
  "home.column_settings.show_reblogs": "부스트 표시",
  "home.column_settings.show_replies": "답글 표시",
  "home.explore_prompt.body": "내 홈 피드는 내가 팔로우한 해시태그를 가진 게시물, 내가 팔로우한 사람들의 게시물, 그들이 부스트한 게시물들이 다같이 나타납니다. 아직은 조용하네요, 이렇게 해보는 게 어떠신가요:",
  "home.explore_prompt.title": "이것은 마스토돈에 있는 내 본거지입니다.",
  "home.explore_prompt.body": "홈 피드에는 내가 팔로우한 해시태그 그리고 팔로우한 사람과 부스트가 함께 나타나요. 너무 고요하게 느껴진다면, 다음 것들을 살펴볼 수 있어요:",
  "home.explore_prompt.title": "여기가 Mastodon 이용의 본거지예요.",
  "home.hide_announcements": "공지사항 숨기기",
  "home.show_announcements": "공지사항 보기",
  "interaction_modal.description.favourite": "마스토돈 계정을 통해, 게시물을 마음에 들어 하는 것으로 작성자에게 호의를 표하고 나중에 보기 위해 저장할 수 있습니다.",
  "interaction_modal.description.favourite": "마스토돈 계정을 통해, 게시물을 좋아하는 것으로 작성자에게 호의를 표하고 나중에 보기 위해 저장할 수 있습니다.",
  "interaction_modal.description.follow": "마스토돈 계정을 통해, {name} 님을 팔로우 하고 그의 게시물을 홈 피드에서 받아 볼 수 있습니다.",
  "interaction_modal.description.reblog": "마스토돈 계정을 통해, 이 게시물을 부스트 하고 자신의 팔로워들에게 공유할 수 있습니다.",
  "interaction_modal.description.reply": "마스토돈 계정을 통해, 이 게시물에 응답할 수 있습니다.",
  "interaction_modal.login.action": "홈 서버로 가기",
  "interaction_modal.login.prompt": "내 홈 서버의 도메인. 예시: mastodon.social",
  "interaction_modal.no_account_yet": "Mastodon 계정이 없나요?",
  "interaction_modal.on_another_server": "다른 서버에",
  "interaction_modal.on_this_server": "이 서버에서",
  "interaction_modal.other_server_instructions": "주로 이용하는 마스토돈 앱이나 마스토돈 서버의 웹 인터페이스 내 검색 영역에 이 URL을 복사 및 붙여넣기 하세요.",
  "interaction_modal.preamble": "마스토돈은 분산화 되어 있기 때문에, 이곳에 계정이 없더라도 다른 곳에서 운영되는 마스토돈 서버나 호환 되는 플랫폼에 있는 계정을 사용할 수 있습니다.",
  "interaction_modal.title.favourite": "{name} 님의 게시물을 마음에 들어하기",
  "interaction_modal.sign_in": "이 서버에 로그인되어 있지 않습니다. 계정이 어디에 속해 있나요?",
  "interaction_modal.sign_in_hint": "팁: 여러분이 가입한 사이트입니다. 만약 기억이 나지 않는다면 가입환영 이메일을 찾아보는 것도 좋습니다. 전체 사용자이름(예: @mastodon@mastodon.social)을 넣어도 됩니다!",
  "interaction_modal.title.favourite": "{name} 님의 게시물을 좋아하기",
  "interaction_modal.title.follow": "{name} 님을 팔로우",
  "interaction_modal.title.reblog": "{name} 님의 게시물을 부스트",
  "interaction_modal.title.reply": "{name} 님의 게시물에 답글",


@@ 413,7 418,7 @@
  "not_signed_in_indicator.not_signed_in": "이 정보에 접근하려면 로그인을 해야 합니다.",
  "notification.admin.report": "{name} 님이 {target}를 신고했습니다",
  "notification.admin.sign_up": "{name} 님이 가입했습니다",
  "notification.favourite": "{name} 님이 내 게시물을 마음에 들어했습니다",
  "notification.favourite": "{name} 님이 내 게시물을 좋아합니다",
  "notification.follow": "{name} 님이 나를 팔로우했습니다",
  "notification.follow_request": "{name} 님이 팔로우 요청을 보냈습니다",
  "notification.mention": "{name} 님의 멘션",


@@ 512,7 517,7 @@
  "privacy_policy.title": "개인정보처리방침",
  "refresh": "새로고침",
  "regeneration_indicator.label": "불러오는 중…",
  "regeneration_indicator.sublabel": "당신의 홈 피드가 준비되는 중입니다!",
  "regeneration_indicator.sublabel": "홈 피드를 준비하고 있습니다!",
  "relative_time.days": "{number}일 전",
  "relative_time.full.days": "{number} 일 전",
  "relative_time.full.hours": "{number} 시간 전",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "서버 통계:",
  "sign_in_banner.create_account": "계정 생성",
  "sign_in_banner.sign_in": "로그인",
  "sign_in_banner.sso_redirect": "로그인 또는 가입하기",
  "sign_in_banner.text": "로그인을 통해 프로필이나 해시태그를 팔로우하거나 마음에 들어하거나 공유하고 답글을 달 수 있습니다. 다른 서버에 있는 본인의 계정을 통해 참여할 수도 있습니다.",
  "status.admin_account": "@{name}에 대한 중재 화면 열기",
  "status.admin_domain": "{domain}에 대한 중재 화면 열기",


@@ 612,7 618,7 @@
  "status.edit": "수정",
  "status.edited": "{date}에 수정함",
  "status.edited_x_times": "{count}번 수정됨",
  "status.embed": "공유하기",
  "status.embed": "임베드",
  "status.favourite": "좋아요",
  "status.filter": "이 게시물을 필터",
  "status.filtered": "필터로 걸러짐",

M app/javascript/mastodon/locales/ku.json => app/javascript/mastodon/locales/ku.json +0 -2
@@ 176,7 176,6 @@
  "conversation.open": "Axaftinê nîşan bide",
  "conversation.with": "Bi {names} re",
  "copypaste.copied": "Hate jêgirtin",
  "copypaste.copy": "Jê bigire",
  "directory.federated": "Ji fediversên naskirî",
  "directory.local": "Tenê ji {domain}",
  "directory.new_arrivals": "Kesên ku nû hatine",


@@ 281,7 280,6 @@
  "interaction_modal.description.reply": "Bi ajimêrekê li ser Mastodon, tu dikarî bersiva vê şandiyê bidî.",
  "interaction_modal.on_another_server": "Li ser rajekareke cuda",
  "interaction_modal.on_this_server": "Li ser ev rajekar",
  "interaction_modal.preamble": "Ji ber ku Mastodon nenavendî ye, tu dikarî ajimêrê xwe ya heyî ku ji aliyê rajekarek din a Mastodon an platformek lihevhatî ve hatî pêşkêşkirin bi kar bînî ku ajimêrê te li ser vê yekê tune be.",
  "interaction_modal.title.follow": "{name} bişopîne",
  "interaction_modal.title.reblog": "Şandiyê {name} bilind bike",
  "interaction_modal.title.reply": "Bersivê bide şandiyê {name}",

M app/javascript/mastodon/locales/lv.json => app/javascript/mastodon/locales/lv.json +0 -2
@@ 177,7 177,6 @@
  "conversation.open": "Skatīt sarunu",
  "conversation.with": "Ar {names}",
  "copypaste.copied": "Nokopēts",
  "copypaste.copy": "Kopēt",
  "copypaste.copy_to_clipboard": "Kopēt uz starpliktuvi",
  "directory.federated": "No pazīstamas federācijas",
  "directory.local": "Tikai no {domain}",


@@ 287,7 286,6 @@
  "interaction_modal.description.reply": "Ar Mastodon kontu tu vari atbildēt uz šo ziņu.",
  "interaction_modal.on_another_server": "Citā serverī",
  "interaction_modal.on_this_server": "Šajā serverī",
  "interaction_modal.preamble": "Tā kā Mastodon ir decentralizēts, tu vari izmantot savu esošo kontu, ko mitina cits Mastodon serveris vai saderīga platforma, ja tev nav konta šajā serverī.",
  "interaction_modal.title.follow": "Sekot {name}",
  "interaction_modal.title.reblog": "Pastiprināt {name} ierakstu",
  "interaction_modal.title.reply": "Atbildēt uz {name} ziņu",

M app/javascript/mastodon/locales/ml.json => app/javascript/mastodon/locales/ml.json +0 -1
@@ 136,7 136,6 @@
  "conversation.open": "സംഭാഷണം കാണുക",
  "conversation.with": "{names} കൂടെ",
  "copypaste.copied": "പകർത്തി",
  "copypaste.copy": "പകര്‍ത്തുക",
  "directory.federated": "അറിയപ്പെടുന്ന ഫെഡിവേഴ്‌സ്ൽ നിന്ന്",
  "directory.local": "{domain} ൽ നിന്ന് മാത്രം",
  "directory.new_arrivals": "പുതിയ വരവുകൾ",

M app/javascript/mastodon/locales/mr.json => app/javascript/mastodon/locales/mr.json +0 -1
@@ 137,7 137,6 @@
  "interaction_modal.description.reply": "मॅस्टोडॉनवरील खात्यासह, तुम्ही या पोस्टला प्रतिसाद देऊ शकता.",
  "interaction_modal.on_another_server": "वेगळ्या सर्व्हरवर",
  "interaction_modal.on_this_server": "या सर्व्हरवर",
  "interaction_modal.preamble": "मास्टोडॉन विकेंद्रित असल्याने, तुमचे खाते नसेल तर तुम्ही दुसरे मॅस्टोडॉन सर्व्हर किंवा सुसंगत प्लॅटफॉर्मद्वारे होस्ट केलेले तुमचे विद्यमान खाते वापरू शकता.",
  "interaction_modal.title.follow": "{name} चे अनुसरण करा",
  "interaction_modal.title.reblog": "{name} ची पोस्ट बूस्ट करा",
  "interaction_modal.title.reply": "{name} च्या पोस्टला उत्तर द्या",

M app/javascript/mastodon/locales/ms.json => app/javascript/mastodon/locales/ms.json +24 -2
@@ 47,7 47,10 @@
  "account.mention": "Sebut @{name}",
  "account.moved_to": "{name} telah menandakan bahawa akaun baru mereka sekarang ialah:",
  "account.mute": "Bisukan @{name}",
  "account.mute_notifications_short": "Redam pemberitahuan",
  "account.mute_short": "Redam",
  "account.muted": "Dibisukan",
  "account.no_bio": "Tiada penerangan diberikan.",
  "account.open_original_page": "Buka halaman asal",
  "account.posts": "Hantaran",
  "account.posts_with_replies": "Hantaran dan balasan",


@@ 70,6 73,7 @@
  "admin.dashboard.retention.average": "Purata",
  "admin.dashboard.retention.cohort": "Bulan pendaftaran",
  "admin.dashboard.retention.cohort_size": "Pengguna baru",
  "admin.impact_report.instance_accounts": "Profil akaun ini akan dipadamkan",
  "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.",


@@ 102,6 106,7 @@
  "column.community": "Garis masa tempatan",
  "column.directory": "Layari profil",
  "column.domain_blocks": "Domain disekat",
  "column.favourites": "Kegemaran",
  "column.follow_requests": "Permintaan ikutan",
  "column.home": "Laman Utama",
  "column.lists": "Senarai",


@@ 122,6 127,7 @@
  "community.column_settings.remote_only": "Jauh sahaja",
  "compose.language.change": "Tukar bahasa",
  "compose.language.search": "Cari bahasa...",
  "compose.published.open": "Buka",
  "compose_form.direct_message_warning_learn_more": "Ketahui lebih lanjut",
  "compose_form.encryption_warning": "Hantaran pada Mastodon tidak disulitkan hujung ke hujung. Jangan berkongsi sebarang maklumat sensitif melalui Mastodon.",
  "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.",


@@ 158,6 164,7 @@
  "confirmations.discard_edit_media.message": "Anda belum menyimpan perubahan pada penerangan atau pratonton media. Anda ingin membuangnya?",
  "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.edit.confirm": "Sunting",
  "confirmations.logout.confirm": "Log keluar",
  "confirmations.logout.message": "Adakah anda pasti anda ingin log keluar?",
  "confirmations.mute.confirm": "Bisukan",


@@ 173,7 180,6 @@
  "conversation.open": "Lihat perbualan",
  "conversation.with": "Dengan {names}",
  "copypaste.copied": "Disalin",
  "copypaste.copy": "Salin",
  "directory.federated": "Dari fediverse yang diketahui",
  "directory.local": "Dari {domain} sahaja",
  "directory.new_arrivals": "Ketibaan baharu",


@@ 245,6 251,9 @@
  "filter_modal.select_filter.subtitle": "Gunakan kumpulan yang sedia ada atau mencipta kumpulan baru",
  "filter_modal.select_filter.title": "Tapiskan hantaran ini",
  "filter_modal.title.status": "Tapiskan sesuatu hantaran",
  "firehose.all": "Semua",
  "firehose.local": "Server ini",
  "firehose.remote": "Server lain",
  "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.",


@@ 270,6 279,7 @@
  "hashtag.column_settings.tag_toggle": "Sertakan tag tambahan untuk lajur ini",
  "hashtag.follow": "Ikuti hashtag",
  "hashtag.unfollow": "Nyahikut tanda pagar",
  "home.actions.go_to_suggestions": "Cari orang untuk diikuti",
  "home.column_settings.basic": "Asas",
  "home.column_settings.show_reblogs": "Tunjukkan galakan",
  "home.column_settings.show_replies": "Tunjukkan balasan",


@@ 278,9 288,10 @@
  "interaction_modal.description.follow": "Dengan akaun pada Mastodon, anda boleh mengikut {name} untuk menerima hantaran mereka di suapan rumah anda.",
  "interaction_modal.description.reblog": "Dengan akaun pada Mastodon, anda boleh menggalakkan hantaran ini untuk dikongsi dengan pengikut anda.",
  "interaction_modal.description.reply": "Dengan akaun pada Mastodon, anda boleh membalas kepada hantaran ini.",
  "interaction_modal.login.action": "Bawa saya pulang rumah",
  "interaction_modal.no_account_yet": "Tak di Mastadon?",
  "interaction_modal.on_another_server": "Di pelayan lain",
  "interaction_modal.on_this_server": "Pada pelayan ini",
  "interaction_modal.preamble": "Oleh sebab Mastodon terpencar, anda boleh menggunakan akaun sedia ada anda yang dihos oleh pelayan Mastodon lain atau platform yang serasi jika anda tidak mempunyai akaun pada platform ini.",
  "interaction_modal.title.follow": "Ikuti {name}",
  "interaction_modal.title.reblog": "Galak hantaran {name}",
  "interaction_modal.title.reply": "Balas siaran {name}",


@@ 296,6 307,7 @@
  "keyboard_shortcuts.direct": "to open direct messages column",
  "keyboard_shortcuts.down": "to move down in the list",
  "keyboard_shortcuts.enter": "Buka hantaran",
  "keyboard_shortcuts.favourites": "Buka senarai kegemaran",
  "keyboard_shortcuts.federated": "to open federated timeline",
  "keyboard_shortcuts.heading": "Pintasan papan kekunci",
  "keyboard_shortcuts.home": "to open home timeline",


@@ 414,12 426,16 @@
  "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",
  "onboarding.action.back": "Bawa saya kembali",
  "onboarding.actions.back": "Bawa saya kembali",
  "onboarding.actions.go_to_explore": "See what's trending",
  "onboarding.actions.go_to_home": "Go to your home feed",
  "onboarding.compose.template": "Hello #Mastodon!",
  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
  "onboarding.follows.title": "Popular on Mastodon",
  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
  "onboarding.start.skip": "Want to skip right ahead?",
  "onboarding.start.title": "Anda telah berjaya!",
  "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
  "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
  "onboarding.steps.publish_status.body": "Say hello to the world.",


@@ 482,6 498,7 @@
  "report.placeholder": "Ulasan tambahan",
  "report.reasons.dislike": "Saya tidak suka",
  "report.reasons.dislike_description": "Inilah sesuatu yang anda tidak ingin lihat",
  "report.reasons.legal": "Ia haram",
  "report.reasons.other": "Inilah sesuatu yang lain",
  "report.reasons.other_description": "Isu ini tidak sesuai untuk kategori lain",
  "report.reasons.spam": "Inilah spam",


@@ 501,12 518,14 @@
  "report.unfollow": "Nyahikut @{name}",
  "report.unfollow_explanation": "Anda sedang mengikuti akaun ini. Untuk memadam siaran mereka daripada suapan berita anda, nyahikutkan mereka.",
  "report_notification.attached_statuses": "{count, plural, other {{count} hantaran}} dilampirkan",
  "report_notification.categories.legal": "Sah",
  "report_notification.categories.other": "Lain-lain",
  "report_notification.categories.spam": "Spam",
  "report_notification.categories.violation": "Langgaran peraturan",
  "report_notification.open": "Buka laporan",
  "search.placeholder": "Cari",
  "search.search_or_paste": "Cari atau tampal URL",
  "search_results.accounts": "Profil",
  "search_results.all": "Semua",
  "search_results.hashtags": "Tanda pagar",
  "search_results.nothing_found": "Tidak dapat menemui apa-apa untuk istilah carian tersebut",


@@ 522,6 541,7 @@
  "server_banner.server_stats": "Statistik pelayan:",
  "sign_in_banner.create_account": "Cipta akaun",
  "sign_in_banner.sign_in": "Daftar masuk",
  "sign_in_banner.sso_redirect": "Log masuk atau mendaftar",
  "status.admin_account": "Buka antara muka penyederhanaan untuk @{name}",
  "status.admin_domain": "antara muka penyederhanaan",
  "status.admin_status": "Buka hantaran ini dalam antara muka penyederhanaan",


@@ 541,6 561,8 @@
  "status.history.created": "{name} mencipta pada {date}",
  "status.history.edited": "{name} menyunting pada {date}",
  "status.load_more": "Muatkan lagi",
  "status.media.open": "Klik untuk membuka",
  "status.media.show": "Klik untuk menunjukkan",
  "status.media_hidden": "Media disembunyikan",
  "status.mention": "Sebut @{name}",
  "status.more": "Lagi",

M app/javascript/mastodon/locales/my.json => app/javascript/mastodon/locales/my.json +15 -8
@@ 1,9 1,9 @@
{
  "about.blocks": "ထိန်းချုပ်ထားသော ဆာဗာများ",
  "about.blocks": "ထိန်းချုပ်မှုရှိသော ဆာဗာများ",
  "about.contact": "ဆက်သွယ်ရန်:",
  "about.disclaimer": "Mastodon သည် အခမဲ့ဖြစ်ပြီး open-source software နှင့် Mastodon gGmbH ၏ ကုန်အမှတ်တံဆိပ်တစ်ခုဖြစ်သည်။",
  "about.disclaimer": "Mastodon သည် အခမဲ့ဖြစ်ပြီး open-source software နှင့် Mastodon gGmbH ၏ ကုန်အမှတ်တံဆိပ်တစ်ခုဖြစ်သည်။.",
  "about.domain_blocks.no_reason_available": "အကြောင်းပြချက်မရှိပါ",
  "about.domain_blocks.preamble": "Mastodon သည် ယေဘူယျအားဖြင့် သင့်အား အစုအဝေးရှိ အခြားဆာဗာများမှ အသုံးပြုသူများထံမှ အကြောင်းအရာများကို ကြည့်ရှုပြီး အပြန်အလှန် တုံ့ပြန်နိုင်စေပါသည်။ ဤအရာများသည် ဤအထူးဆာဗာတွင် ပြုလုပ်ထားသော ခြွင်းချက်ဖြစ်သည်။",
  "about.domain_blocks.preamble": "Mastodon သည် ယေဘုယျအားဖြင့် fediverse ရှိ အခြား​ဆာဗာ အသုံးပြုသူများထံမှ အကြောင်းအရာများကို ကြည့်ရှုနိုင်သည့်အပြင် အပြန်အလှန်တုံ့ပြန်နိုင်စေပါသည်။ ဤသည်တို့မှာ သီးခြားဆာဗာများအတွက် ပြုလုပ်ထားသောအရာများဖြစ်သည်။",
  "about.domain_blocks.silenced.explanation": "ရှင်းရှင်းလင်းလင်း ရှာကြည့်ခြင်း သို့မဟုတ် လိုက်ကြည့်ခြင်းဖြင့် ၎င်းကို ရွေးချယ်ခြင်းမှလွဲ၍ ဤဆာဗာမှ ပရိုဖိုင်များနှင့် အကြောင်းအရာများကို ယေဘုယျအားဖြင့် သင်သည် မမြင်ရပါ။",
  "about.domain_blocks.silenced.title": "ကန့်သတ်ထားသော",
  "about.domain_blocks.suspended.explanation": "ဤဆာဗာမှ ဒေတာများကို စီမံဆောင်ရွက်ခြင်း၊ သိမ်းဆည်းခြင်း သို့မဟုတ် ဖလှယ်ခြင်း မပြုဘဲ၊ ဤဆာဗာမှ အသုံးပြုသူများနှင့် အပြန်အလှန် ဆက်သွယ်မှု သို့မဟုတ် ဆက်သွယ်မှုတို့ကို မဖြစ်နိုင်အောင် ပြုလုပ်ပေးမည်မဟုတ်ပါ။",


@@ 31,7 31,7 @@
  "account.featured_tags.last_status_never": "ပို့စ်တင်ထားခြင်းမရှိပါ",
  "account.featured_tags.title": "ဖော်ပြထားသောဟက်ရှ်တက်ခ်များ",
  "account.follow": "စောင့်ကြည့်",
  "account.followers": "စောင့်ကြည့်သူ",
  "account.followers": "စောင့်ကြည့်သူများ",
  "account.followers.empty": "ဤသူကို စောင့်ကြည့်သူ မရှိသေးပါ။",
  "account.followers_counter": "{count, plural, one {စောင့်ကြည့်သူ {counter}} other {စောင့်ကြည့်သူများ {counter}}}",
  "account.following": "စောင့်ကြည့်နေသည်",


@@ 181,6 181,7 @@
  "confirmations.mute.explanation": "၎င်းသည် ၎င်းတို့ထံမှ ပို့စ်များနှင့် ၎င်းတို့ကို ဖော်ပြထားသော ပို့စ်များကို ဖျောက်ထားမည်ဖြစ်ပြီး၊ သို့သော် ၎င်းတို့သည် သင့်ပို့စ်များကို မြင်နိုင်ပြီး သင့်အား လိုက်ကြည့်နိုင်စေမည်ဖြစ်သည်။",
  "confirmations.mute.message": "{name} ကို မမြင်လိုသည်မှာ သေချာပါသလား။ ",
  "confirmations.redraft.confirm": "ဖျက်ပြီး ပြန်လည်ရေးမည်။",
  "confirmations.redraft.message": "သင် ဒီပိုစ့်ကိုဖျက်ပြီး ပြန်တည်းဖြတ်မှာ သေချာပြီလား။ ကြယ်ပွင့်​တွေ နဲ့ ပြန်မျှ​ဝေမှု​တွေကိုဆုံးရှုံးမည်။မူရင်းပို့စ်ဆီကို ပြန်စာ​တွေမှာလည်း​ \nပိုစ့်ကို​တွေ့ရမည်မဟုတ်​တော့ပါ။.",
  "confirmations.reply.confirm": "စာပြန်မည်",
  "confirmations.reply.message": "စာပြန်လျှင်ယခင်စာများကိုအလိုအလျောက်ပျက်သွားစေမည်။ ဆက်လက်လုပ်ဆောင်မည်လား?",
  "confirmations.unfollow.confirm": "စောင့်ကြည့်ခြင်းအား ပယ်ဖျက်မည်",


@@ 190,7 191,6 @@
  "conversation.open": "Conversation ကိုကြည့်မည်",
  "conversation.with": "{အမည်များ} ဖြင့်",
  "copypaste.copied": "ကူယူပြီးပါပြီ",
  "copypaste.copy": "ကူးယူပါ",
  "copypaste.copy_to_clipboard": "ကလစ်ဘုတ်သို့ ကူးပါ",
  "directory.federated": "သင် သိသော ဖက်ဒီမှ",
  "directory.local": "{domain} မှသာလျှင်\n",


@@ 201,6 201,7 @@
  "dismissable_banner.community_timeline": "အကောင့်များမှ လတ်တလောတင်ထားသည့်အများမြင်ပို့စ်များမှာ {domain} တွင် တင်ထားသောပို့စ်များဖြစ်သည်။",
  "dismissable_banner.dismiss": "ပယ်ရန်",
  "dismissable_banner.explore_links": "ဤသတင်းများကို ယခုအချိန်တွင် ဗဟိုချုပ်ကိုင်မှုလျှော့ချထားသော ကွန်ရက်၏ အခြားဆာဗာများမှ လူများက ပြောဆိုနေကြပါသည်။",
  "dismissable_banner.explore_statuses": "ဒီ​နေ့အတွက် လူမှုကွန်ရက်​ပေါ်မှာ စိတ်ဝင်စားမှူများ​နေတဲ့ ပို့စ်​တွေရှိပါတယ်။ပြန်မျှ​ဝေမှုနဲ့ကြယ်ပွင့်များ တဲ့ပိုစ့်အသစ်​တွေကို ပိုမြင်ရမှာပါ။.",
  "dismissable_banner.explore_tags": "ဤ hashtag များသည် ယခုအချိန်တွင် ဗဟိုချုပ်ကိုင်မှုလျှော့ချထားသော ကွန်ရက်၏ အခြားဆာဗာများပေါ်ရှိ လူများကြားတွင် ဆွဲဆောင်မှုရှိလာပါသည်",
  "dismissable_banner.public_timeline": "ဤအရာများသည် {domain} ရှိလူများ လိုက်နာသော လူမှုဝဘ်ပေါ်ရှိ လူများထံမှ လတ်တလော အများမြင်ပို့စ်များဖြစ်သည်။",
  "embed.instructions": "Embed this status on your website by copying the code below.",


@@ 301,7 302,7 @@
  "home.column_settings.basic": "အခြေခံ",
  "home.column_settings.show_reblogs": "Boost များကို ပြပါ",
  "home.column_settings.show_replies": "ပြန်စာများကို ပြပါ",
  "home.explore_prompt.body": "သင့်ပင်မစာမျက်နှာတွင် သင်စောင့်ကြည့်ရန်ရွေးချယ်ထားသော hashtag များမှ ပို့စ်များ၊ စောင့်ကြည့်ထားသူများနှင့် ၎င်းတို့ boost လုပ်ထားသော ပို့စ်များ ပြထားပါလိမ့်မည်။ ယခု ပင်မစာမျက်နှာမှာ ငြိမ်သက်နေပါသည်။",
  "home.explore_prompt.body": "သင့်ရဲ့သတင်းစဥ် မှာ သင် စောင့်ကြည့်​နေတယ့် ခေါင်းစဥ်​တွေ၊သင်​စောင့်ကြည့်​နေတယ့်အ​ကောင့်​တွေ နဲ့ အဆိုပါ အ​ကောင့်​တွေပြန်မျှ​ဝေထားတယ့် ပိုစ့်​တွေကို မြင်ရမှာပါ။:",
  "home.explore_prompt.title": "ဤသည်မှာ Mastodon ရှိ သင့်ပင်မစာမျက်နှာဖြစ်သည်။",
  "home.hide_announcements": "ကြေညာချက်များကို ဖျောက်ပါ",
  "home.show_announcements": "ကြေညာချက်များကို ပြပါ",


@@ 309,10 310,13 @@
  "interaction_modal.description.follow": "Mastodon အကောင့်ဖြင့် သင်၏ ပင်မစာမျက်နှာတွင် ၎င်းတို့၏ ပို့စ်များကို ရရှိရန်အတွက် {name} ကို စောင့်ကြည့်နိုင်ပါသည်။",
  "interaction_modal.description.reblog": "Mastodon အကောင့်တစ်ခုဖြင့် သင်၏စောင့်ကြည့်သူများကို မျှဝေရန်အတွက် ဤပို့စ်ကို Boost လုပ်ပါ။",
  "interaction_modal.description.reply": "Mastodon အကောင့်တစ်ခုဖြင့် သင် ဤပို့စ်ကို တုံ့ပြန်နိုင်ပါသည်။",
  "interaction_modal.login.action": "ပင်မစာမျက်နှာသို့",
  "interaction_modal.login.prompt": "သင့်ပင်မဆာဗာ၏ ဒိုမိန်း၊ ဥပမာ၊ mastodon.social",
  "interaction_modal.no_account_yet": "Mastodon မှာ မဟုတ်ဘူးလား။",
  "interaction_modal.on_another_server": "တခြားဆာဗာပေါ်တွင်",
  "interaction_modal.on_this_server": "ဤဆာဗာတွင်",
  "interaction_modal.other_server_instructions": "သင်အကြိုက်ဆုံး Mastodon အက်ပ် သို့မဟုတ် သင့် Mastodon ဆာဗာ၏ ဝဘ်ရှိ ရှာဖွေမှုနေရာတွင် ဤ URL ကို ကူးယူပြီး ထည့်ပါ။",
  "interaction_modal.preamble": "Mastodon မှာ ဗဟိုချုပ်ကိုင်မှု မရှိခြင်းကြောင့် ဤတစ်ခုအတွက် သင့်တွင်အကောင့်မရှိပါက အခြား Mastodon ဆာဗာ သို့မဟုတ် အဆင်ပြေသောပလက်ဖောင်းတွင် ရှိသော သင့်လက်ရှိအကောင့်ဖြင့် အသုံးပြုနိုင်ပါသည်။",
  "interaction_modal.sign_in": "သင်သည် ဤဆာဗာတွင် လော့ဂ်အင်မဝင်ပါ။ သင့်အကောင့်ကို မည်သည့်ဆာဗာတွင် ဖွင့်ထားပါသလဲ။",
  "interaction_modal.sign_in_hint": "အကြံပြုချက် - ၎င်းသည် သင် အကောင့်ဖွင့်ထားသည့် ဝဘ်ဆိုက်ဖြစ်သည်။ မမှတ်မိပါက သင့် ဝင်စာပုံးရှိ welcome e-mail ကို ရှာပါ။ သင့်အသုံးပြုသူအမည်အပြည့်အစုံကိုလည်း ထည့်သွင်းနိုင်သည်။ (ဥပမာ @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Favorite {name} ၏ ပို့စ်",
  "interaction_modal.title.follow": "{name} ကို စောင့်ကြည့်မယ်",
  "interaction_modal.title.reblog": "{name} ၏ ပို့စ်ကို Boost လုပ်ပါ",


@@ 361,6 365,7 @@
  "lightbox.previous": "ရှေ့သို့",
  "limited_account_hint.action": "ဘာပဲဖြစ်ဖြစ် ပရိုဖိုင်ကို ပြပါ",
  "limited_account_hint.title": "ဤပရိုဖိုင်ကို {domain} ၏ စိစစ်သူများမှ ဖျောက်ထားသည်။",
  "link_preview.author": "{name} ဖြင့်",
  "lists.account.add": "စာရင်းထဲသို့ထည့်ပါ",
  "lists.account.remove": "စာရင်းမှ ဖယ်ရှားလိုက်ပါ။",
  "lists.delete": "စာရင်းကိုဖျက်ပါ",


@@ 593,6 598,8 @@
  "server_banner.server_stats": "ဆာဗာအား လက်ရှိအသုံးပြုသူများ -",
  "sign_in_banner.create_account": "အကောင့်ဖန်တီးမည်",
  "sign_in_banner.sign_in": "အကောင့်ဝင်မည်",
  "sign_in_banner.sso_redirect": "အကောင့်ဝင်ပါ သို့မဟုတ် မှတ်ပုံတင်ပါ",
  "sign_in_banner.text": "ပရိုဖိုင်များ သို့မဟုတ် hashtag များ၊ favorite၊ ပို့စ်မျှဝေမှုများနှင့် ပြန်ကြားစာများအသုံးပြုရန်အတွက် အကောင့်ဝင်ပါ။ အခြားဆာဗာပေါ်ရှိ သင့်အကောင့်မှလည်း အပြန်အလှန်ဖလှယ်နိုင်ပါသည်။",
  "status.admin_account": "@{name} အတွက် စိစစ်ခြင်းကြားခံနယ်ကို ဖွင့်ပါ",
  "status.admin_domain": "{domain} အတွက် စိစစ်ခြင်းကြားခံနယ်ကို ဖွင့်ပါ",
  "status.admin_status": "Open this status in the moderation interface",

M app/javascript/mastodon/locales/nl.json => app/javascript/mastodon/locales/nl.json +10 -4
@@ 191,7 191,6 @@
  "conversation.open": "Gesprek tonen",
  "conversation.with": "Met {names}",
  "copypaste.copied": "Gekopieerd",
  "copypaste.copy": "Kopiëren",
  "copypaste.copy_to_clipboard": "Naar klembord kopiëren",
  "directory.federated": "Fediverse (wat bekend is)",
  "directory.local": "Alleen {domain}",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Een van deze",
  "hashtag.column_settings.tag_mode.none": "Geen van deze",
  "hashtag.column_settings.tag_toggle": "Additionele tags aan deze kolom toevoegen",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} deelnemer} other {{counter} deelnemers}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} bericht} other {{counter} berichten}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} bericht} other {{counter} berichten}} vandaag",
  "hashtag.follow": "Hashtag volgen",
  "hashtag.unfollow": "Hashtag ontvolgen",
  "home.actions.go_to_explore": "De huidige trends bekijken",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Algemeen",
  "home.column_settings.show_reblogs": "Boosts tonen",
  "home.column_settings.show_replies": "Reacties tonen",
  "home.explore_prompt.body": "Jouw starttijdlijn bevat een mix van berichten met hashtags die je hebt gekozen om te volgen, van mensen die je hebt gekozen om te volgen en berichten die ze boosten. Het ziet er nu vrij stil uit, dus wat dacht je ervan om:",
  "home.explore_prompt.body": "Jouw starttijdlijn bevat een mix van berichten met hashtags die je volgt, van accounts die je volgt en van berichten die deze accounts boosten. Wanneer je dit te stil vind, kun je:",
  "home.explore_prompt.title": "Dit is jouw thuisbasis op Mastodon.",
  "home.hide_announcements": "Mededelingen verbergen",
  "home.show_announcements": "Mededelingen tonen",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Je kunt met een Mastodon-account {name} volgen, om zo diens berichten op jouw starttijdlijn te ontvangen.",
  "interaction_modal.description.reblog": "Je kunt met een Mastodon-account dit bericht boosten, om het zo met jouw volgers te delen.",
  "interaction_modal.description.reply": "Je kunt met een Mastodon-account op dit bericht reageren.",
  "interaction_modal.login.action": "Ga naar start",
  "interaction_modal.login.prompt": "Domein van jouw server, bv. mastodon.social",
  "interaction_modal.no_account_yet": "Niet op Mastodon?",
  "interaction_modal.on_another_server": "Op een andere server",
  "interaction_modal.on_this_server": "Op deze server",
  "interaction_modal.other_server_instructions": "Kopieer en plak eenvoudig deze URL in het zoekveld van de door jou gebruikte Mastodon-app of op de website van de Mastodon-server waarop je bent ingelogd.",
  "interaction_modal.preamble": "Mastodon is gedecentraliseerd. Daarom heb je geen account op deze Mastodon-server nodig, wanneer je al een account op een andere Mastodon-server of compatibel platform hebt.",
  "interaction_modal.sign_in": "Je bent niet op deze server ingelogd. Op welke server bevindt zich jouw account?",
  "interaction_modal.sign_in_hint": "Tip: Dat is de website waarop je je hebt geregistreerd. Wanneer je dit bent vergeten kun je naar de welkomstmail zoeken in je inbox. Je kunt ook je volledige gebruikersnaam invullen! (bv. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Bericht van {name} als favoriet markeren",
  "interaction_modal.title.follow": "{name} volgen",
  "interaction_modal.title.reblog": "Bericht van {name} boosten",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "Serverstats:",
  "sign_in_banner.create_account": "Registreren",
  "sign_in_banner.sign_in": "Inloggen",
  "sign_in_banner.sso_redirect": "Inloggen of Registreren",
  "sign_in_banner.text": "Wanneer je een account op deze server hebt, kun je inloggen om mensen of hashtags te volgen, op berichten te reageren of om deze te delen. Wanneer je een account op een andere server hebt, kun je daar inloggen en daar ook interactie met mensen op deze server hebben.",
  "status.admin_account": "Moderatie-omgeving van @{name} openen",
  "status.admin_domain": "Moderatie-omgeving van {domain} openen",

M app/javascript/mastodon/locales/nn.json => app/javascript/mastodon/locales/nn.json +49 -26
@@ 17,7 17,7 @@
  "account.badges.group": "Gruppe",
  "account.block": "Blokker @{name}",
  "account.block_domain": "Skjul alt frå {domain}",
  "account.block_short": "Blokkér",
  "account.block_short": "Blokker",
  "account.blocked": "Blokkert",
  "account.browse_more_on_origin_server": "Sjå gjennom meir på den opphavlege profilen",
  "account.cancel_follow_request": "Trekk attende fylgeførespurnad",


@@ 49,10 49,10 @@
  "account.mention": "Nemn @{name}",
  "account.moved_to": "{name} seier at deira nye konto no er:",
  "account.mute": "Målbind @{name}",
  "account.mute_notifications_short": "Demp varsler",
  "account.mute_notifications_short": "Demp varslingar",
  "account.mute_short": "Demp",
  "account.muted": "Målbunden",
  "account.no_bio": "Ingen beskrivelse oppgitt.",
  "account.no_bio": "Inga skildring er gjeven.",
  "account.open_original_page": "Opne originalsida",
  "account.posts": "Tut",
  "account.posts_with_replies": "Tut og svar",


@@ 68,7 68,7 @@
  "account.unendorse": "Ikkje vis på profil",
  "account.unfollow": "Slutt å fylgja",
  "account.unmute": "Opphev målbinding av @{name}",
  "account.unmute_notifications_short": "Opphev demping av varsler",
  "account.unmute_notifications_short": "Opphev demping av varslingar",
  "account.unmute_short": "Opphev målbinding",
  "account_note.placeholder": "Klikk for å leggja til merknad",
  "admin.dashboard.daily_retention": "Mengda brukarar aktive ved dagar etter registrering",


@@ 76,10 76,10 @@
  "admin.dashboard.retention.average": "Gjennomsnitt",
  "admin.dashboard.retention.cohort": "Registrert månad",
  "admin.dashboard.retention.cohort_size": "Nye brukarar",
  "admin.impact_report.instance_accounts": "Kontoprofiler dette ville slettet",
  "admin.impact_report.instance_followers": "Følgere våre brukere ville mistet",
  "admin.impact_report.instance_follows": "Følgere deres brukere ville mistet",
  "admin.impact_report.title": "Sammendrag av konsekvensene",
  "admin.impact_report.instance_accounts": "Kontoprofilar dette vil sletta",
  "admin.impact_report.instance_followers": "Følgjarar våre brukarar vil mista",
  "admin.impact_report.instance_follows": "Følgjarar deira brukarar vil mista",
  "admin.impact_report.title": "Samandrag av konsekvensane",
  "alert.rate_limited.message": "Ver venleg å prøv på nytt etter {retry_time, time, medium}.",
  "alert.rate_limited.title": "Redusert kapasitet",
  "alert.unexpected.message": "Det oppstod eit uventa problem.",


@@ 113,6 113,7 @@
  "column.direct": "Private omtaler",
  "column.directory": "Sjå gjennom profilar",
  "column.domain_blocks": "Skjulte domene",
  "column.favourites": "Favorittar",
  "column.firehose": "Tidslinjer",
  "column.follow_requests": "Fylgjeførespurnadar",
  "column.home": "Heim",


@@ 180,6 181,7 @@
  "confirmations.mute.explanation": "Dette vil skjula innlegg som kjem frå og som nemner dei, men vil framleis la dei sjå innlegga dine og fylgje deg.",
  "confirmations.mute.message": "Er du sikker på at du vil målbinda {name}?",
  "confirmations.redraft.confirm": "Slett & skriv på nytt",
  "confirmations.redraft.message": "Er du sikker på at du vil sletta denne statusen og skriva han på nytt? Då misser du favorittar og framhevingar, og svar til det opprinnelege innlegget vert foreldrelause.",
  "confirmations.reply.confirm": "Svar",
  "confirmations.reply.message": "Å svara no vil overskriva den meldinga du er i ferd med å skriva. Er du sikker på at du vil halda fram?",
  "confirmations.unfollow.confirm": "Slutt å fylgja",


@@ 189,7 191,6 @@
  "conversation.open": "Sjå samtale",
  "conversation.with": "Med {names}",
  "copypaste.copied": "Kopiert",
  "copypaste.copy": "Kopier",
  "copypaste.copy_to_clipboard": "Kopier til utklyppstavla",
  "directory.federated": "Frå den kjende allheimen",
  "directory.local": "Berre frå {domain}",


@@ 200,8 201,9 @@
  "dismissable_banner.community_timeline": "Dette er dei nylegaste offentlege innlegga frå personar med kontoar frå {domain}.",
  "dismissable_banner.dismiss": "Avvis",
  "dismissable_banner.explore_links": "Desse nyhendesakene snakkast om av folk på denne og andre tenarar på det desentraliserte nettverket no.",
  "dismissable_banner.explore_statuses": "Dette er innlegg frå det desentraliserte nettverket som er i støytet i dag. Nye statusar som er mykje framheva og merkte som favorittar er rangert høgare.",
  "dismissable_banner.explore_tags": "Desse emneknaggane er populære blant folk på denne tenaren og andre tenarar i det desentraliserte nettverket nett no.",
  "dismissable_banner.public_timeline": "Dette er de siste offentlige innleggene fra mennesker på det sosiale nettet som folk på {domain} følger.",
  "dismissable_banner.public_timeline": "Dette er dei nyaste offentlege innlegga frå menneske på det sosiale nettet som folk på {domain} følgjer.",
  "embed.instructions": "Bygg inn denne statusen på nettsida di ved å kopiera koden nedanfor.",
  "embed.preview": "Slik kjem det til å sjå ut:",
  "emoji_button.activity": "Aktivitet",


@@ 228,6 230,8 @@
  "empty_column.direct": "Du har ingen private omtaler enda. Etter du har sendt eller mottatt en, så vil den dukke opp her.",
  "empty_column.domain_blocks": "Det er ingen skjulte domene til no.",
  "empty_column.explore_statuses": "Ingenting er i støytet nett no. Prøv igjen seinare!",
  "empty_column.favourited_statuses": "Du har ingen favoritt-statusar ennå. Når du merkjer ein som favoritt, dukkar han opp her.",
  "empty_column.favourites": "Ingen har merkt denne statusen som favoritt enno. Når nokon gjer det, dukkar dei opp her.",
  "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.followed_tags": "Du fylgjer ingen emneknaggar enno. Når du gjer det, vil dei syna her.",
  "empty_column.hashtag": "Det er ingenting i denne emneknaggen enno.",


@@ 265,9 269,9 @@
  "filter_modal.select_filter.subtitle": "Bruk ein eksisterande kategori eller opprett ein ny",
  "filter_modal.select_filter.title": "Filtrer dette innlegget",
  "filter_modal.title.status": "Filtrer eit innlegg",
  "firehose.all": "Alt",
  "firehose.local": "Denne serveren",
  "firehose.remote": "Andre servere",
  "firehose.all": "Alle",
  "firehose.local": "Denne tenaren",
  "firehose.remote": "Andre tenarar",
  "follow_request.authorize": "Autoriser",
  "follow_request.reject": "Avvis",
  "follow_requests.unlocked_explanation": "Sjølv om kontoen din ikkje er låst tenkte dei som driv {domain} at du kanskje ville gå gjennom førespurnadar frå desse kontoane manuelt.",


@@ 291,23 295,32 @@
  "hashtag.column_settings.tag_mode.any": "Kva som helst av desse",
  "hashtag.column_settings.tag_mode.none": "Ingen av desse",
  "hashtag.column_settings.tag_toggle": "Inkluder fleire emneord for denne kolonna",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} deltaker} other {{counter} deltakere}}",
  "hashtag.counter_by_uses": "{count, plural, one {ett innlegg} other {{counter} innlegg}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {ett innlegg} other {{counter} innlegg}} i dag",
  "hashtag.follow": "Fylg emneknagg",
  "hashtag.unfollow": "Slutt å fylgje emneknaggen",
  "home.actions.go_to_explore": "Se hva som er populært",
  "home.actions.go_to_suggestions": "Finn folk å følge",
  "home.actions.go_to_explore": "Sjå kva som er populært",
  "home.actions.go_to_suggestions": "Finn folk å følgje",
  "home.column_settings.basic": "Grunnleggjande",
  "home.column_settings.show_reblogs": "Vis framhevingar",
  "home.column_settings.show_replies": "Vis svar",
  "home.explore_prompt.body": "Tidslinjen din vil ha en blanding av innlegg fra emneknagger du har valgt å følge, personene du har valgt å følge, og innleggene de fremhever. Det ser ganske stille ut akkurat nå, så hva med:",
  "home.explore_prompt.title": "Dette er hjemmet ditt i Mastodon.",
  "home.explore_prompt.body": "Tidslinja di vil ha ei blanding av innlegg frå emneknaggar du har vald å følgje, personane du har vald å følgje, og innlegga dei framhevar. Om det ser ganske stille ut akkurat no, så kan du:",
  "home.explore_prompt.title": "Dette er heimen din i Mastodon.",
  "home.hide_announcements": "Skjul kunngjeringar",
  "home.show_announcements": "Vis kunngjeringar",
  "interaction_modal.description.favourite": "Med ein konto på Mastodon kan du favorittmerkja dette innlegget for å visa forfattaren at du set pris på det, og for å lagra det til seinare.",
  "interaction_modal.description.follow": "Med ein konto på Mastodon kan du fylgja {name} for å sjå innlegga deira i din heimestraum.",
  "interaction_modal.description.reblog": "Med ein konto på Mastodon kan du framheva dette innlegget for å dela det med dine eigne fylgjarar.",
  "interaction_modal.description.reply": "Med ein konto på Mastodon kan du svara på dette innlegget.",
  "interaction_modal.login.action": "Ta meg heim",
  "interaction_modal.login.prompt": "Domenenamnet til din heime-tenar. t.d. mastodon.social",
  "interaction_modal.no_account_yet": "Ikkje på Mastodon?",
  "interaction_modal.on_another_server": "På ein annan tenar",
  "interaction_modal.on_this_server": "På denne tenaren",
  "interaction_modal.preamble": "Sidan Mastodon er desentralisert, kan du bruke ein konto frå ein annan Mastodontenar eller frå ei anna kompatibel plattform dersom du ikkje har konto på denne tenaren.",
  "interaction_modal.sign_in": "Du er ikkje logga inn på denne tenaren. På kva for ein tenar høyrer kontoen din heime?",
  "interaction_modal.sign_in_hint": "Tips: Det er nettstaden der du registrerte deg. Om du har gløymt kvar det var, sjå om du finn velkomst-eposten i innboksen din. Du kan òg skriva inn ditt fulle brukarnamn! (t.d. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Marker innlegget til {name} som favoritt",
  "interaction_modal.title.follow": "Fylg {name}",
  "interaction_modal.title.reblog": "Framhev {name} sitt innlegg",
  "interaction_modal.title.reply": "Svar på innlegge til {name}",


@@ 323,6 336,8 @@
  "keyboard_shortcuts.direct": "åpne kolonnen ned private omtaler",
  "keyboard_shortcuts.down": "Flytt nedover i lista",
  "keyboard_shortcuts.enter": "Opne innlegg",
  "keyboard_shortcuts.favourite": "Marker innlegget som favoritt",
  "keyboard_shortcuts.favourites": "Opne favorittlista",
  "keyboard_shortcuts.federated": "Opne den samla tidslina",
  "keyboard_shortcuts.heading": "Snøggtastar",
  "keyboard_shortcuts.home": "Opne heimetidslina",


@@ 353,12 368,13 @@
  "lightbox.previous": "Førre",
  "limited_account_hint.action": "Vis profilen likevel",
  "limited_account_hint.title": "Denne profilen er skjult av moderatorane på {domain}.",
  "link_preview.author": "Av {name}",
  "lists.account.add": "Legg til i liste",
  "lists.account.remove": "Fjern frå liste",
  "lists.delete": "Slett liste",
  "lists.edit": "Rediger liste",
  "lists.edit.submit": "Endre tittel",
  "lists.exclusive": "Skjul disse innleggene i tidslinjen",
  "lists.exclusive": "Skjul desse innlegga frå heimestraumen din",
  "lists.new.create": "Legg til liste",
  "lists.new.title_placeholder": "Ny listetittel",
  "lists.replies_policy.followed": "Alle fylgde brukarar",


@@ 375,7 391,7 @@
  "mute_modal.hide_notifications": "Skjul varsel frå denne brukaren?",
  "mute_modal.indefinite": "På ubestemt tid",
  "navigation_bar.about": "Om",
  "navigation_bar.advanced_interface": "Åpne i det avanserte nettgrensesnittet",
  "navigation_bar.advanced_interface": "Opne i avansert nettgrensesnitt",
  "navigation_bar.blocks": "Blokkerte brukarar",
  "navigation_bar.bookmarks": "Bokmerke",
  "navigation_bar.community_timeline": "Lokal tidsline",


@@ 385,6 401,7 @@
  "navigation_bar.domain_blocks": "Skjulte domene",
  "navigation_bar.edit_profile": "Rediger profil",
  "navigation_bar.explore": "Utforsk",
  "navigation_bar.favourites": "Favorittar",
  "navigation_bar.filters": "Målbundne ord",
  "navigation_bar.follow_requests": "Fylgjeførespurnader",
  "navigation_bar.followed_tags": "Fylgde emneknaggar",


@@ 401,6 418,7 @@
  "not_signed_in_indicator.not_signed_in": "Du må logga inn for å få tilgang til denne ressursen.",
  "notification.admin.report": "{name} rapporterte {target}",
  "notification.admin.sign_up": "{name} er registrert",
  "notification.favourite": "{name} markerte innlegget ditt som favoritt",
  "notification.follow": "{name} fylgde deg",
  "notification.follow_request": "{name} har bedt om å fylgja deg",
  "notification.mention": "{name} nemnde deg",


@@ 414,6 432,7 @@
  "notifications.column_settings.admin.report": "Nye rapportar:",
  "notifications.column_settings.admin.sign_up": "Nyleg registrerte:",
  "notifications.column_settings.alert": "Skrivebordsvarsel",
  "notifications.column_settings.favourite": "Favorittar:",
  "notifications.column_settings.filter_bar.advanced": "Vis alle kategoriar",
  "notifications.column_settings.filter_bar.category": "Snarfilterlinje",
  "notifications.column_settings.filter_bar.show_bar": "Vis filterlinja",


@@ 431,6 450,7 @@
  "notifications.column_settings.update": "Redigeringar:",
  "notifications.filter.all": "Alle",
  "notifications.filter.boosts": "Framhevingar",
  "notifications.filter.favourites": "Favorittar",
  "notifications.filter.follows": "Fylgjer",
  "notifications.filter.mentions": "Omtalar",
  "notifications.filter.polls": "Røysteresultat",


@@ 476,7 496,7 @@
  "picture_in_picture.restore": "Legg den tilbake",
  "poll.closed": "Lukka",
  "poll.refresh": "Oppdater",
  "poll.reveal": "Vis resultater",
  "poll.reveal": "Vis resultat",
  "poll.total_people": "{count, plural, one {# person} other {# folk}}",
  "poll.total_votes": "{count, plural, one {# røyst} other {# røyster}}",
  "poll.vote": "Røyst",


@@ 529,8 549,8 @@
  "report.placeholder": "Tilleggskommentarar",
  "report.reasons.dislike": "Eg likar det ikkje",
  "report.reasons.dislike_description": "Det er ikkje noko du ønsker å sjå",
  "report.reasons.legal": "Det er ulovlig",
  "report.reasons.legal_description": "Du mener det bryter loven i ditt eller serverens land",
  "report.reasons.legal": "Det er ulovleg",
  "report.reasons.legal_description": "Du meinar det bryt lova i landet der du eller tenaren held til",
  "report.reasons.other": "Det er noko anna",
  "report.reasons.other_description": "Problemet passar ikkje inn i dei andre kategoriane",
  "report.reasons.spam": "Det er søppelpost",


@@ 550,7 570,7 @@
  "report.unfollow": "Slutt å fylgje @{name}",
  "report.unfollow_explanation": "Du fylgjer denne kontoen. Slutt å fylgje dei for ikkje lenger å sjå innlegga deira i heimestraumen din.",
  "report_notification.attached_statuses": "{count, plural, one {{count} innlegg} other {{count} innlegg}} lagt ved",
  "report_notification.categories.legal": "Juridiske",
  "report_notification.categories.legal": "Juridisk",
  "report_notification.categories.other": "Anna",
  "report_notification.categories.spam": "Søppelpost",
  "report_notification.categories.violation": "Regelbrot",


@@ 581,6 601,8 @@
  "server_banner.server_stats": "Tenarstatistikk:",
  "sign_in_banner.create_account": "Opprett konto",
  "sign_in_banner.sign_in": "Logg inn",
  "sign_in_banner.sso_redirect": "Logg inn eller registrer deg",
  "sign_in_banner.text": "Logg inn for å fylgja profilar eller emneknaggar, og for å lika, dela og svara på innlegg. Du kan òg samhandla med aktivitet på denne tenaren frå kontoar på andre tenarar.",
  "status.admin_account": "Opne moderasjonsgrensesnitt for @{name}",
  "status.admin_domain": "Opna moderatorgrensesnittet for {domain}",
  "status.admin_status": "Opne denne statusen i moderasjonsgrensesnittet",


@@ 597,13 619,14 @@
  "status.edited": "Redigert {date}",
  "status.edited_x_times": "Redigert {count, plural, one {{count} gong} other {{count} gonger}}",
  "status.embed": "Bygg inn",
  "status.favourite": "Favoritt",
  "status.filter": "Filtrer dette innlegget",
  "status.filtered": "Filtrert",
  "status.hide": "Skjul innlegget",
  "status.history.created": "{name} oppretta {date}",
  "status.history.edited": "{name} redigerte {date}",
  "status.load_more": "Last inn meir",
  "status.media.open": "Klikk for å åpne",
  "status.media.open": "Klikk for å opne",
  "status.media.show": "Klikk for å vise",
  "status.media_hidden": "Medium gøymd",
  "status.mention": "Nemn @{name}",


@@ 635,7 658,7 @@
  "status.title.with_attachments": "{user} postet {attachmentCount, plural, one {et vedlegg} other {{attachmentCount} vedlegg}}",
  "status.translate": "Omset",
  "status.translated_from_with": "Omsett frå {lang} ved bruk av {provider}",
  "status.uncached_media_warning": "Forhåndsvisning er ikke tilgjengelig",
  "status.uncached_media_warning": "Førehandsvisning er ikkje tilgjengeleg",
  "status.unmute_conversation": "Opphev målbinding av samtalen",
  "status.unpin": "Løys frå profil",
  "subscribed_languages.lead": "Kun innlegg på valde språk vil bli dukke opp i heimestraumen din og i listene dine etter denne endringa. For å motta innlegg på alle språk, la vere å velje nokon.",

M app/javascript/mastodon/locales/no.json => app/javascript/mastodon/locales/no.json +33 -10
@@ 1,5 1,5 @@
{
  "about.blocks": "Modererte tjenere",
  "about.blocks": "Modererte servere",
  "about.contact": "Kontakt:",
  "about.disclaimer": "Mastodon er gratis, åpen kildekode-programvare og et varemerke fra Mastodon gGmbH.",
  "about.domain_blocks.no_reason_available": "Årsak ikke tilgjengelig",


@@ 10,17 10,17 @@
  "about.domain_blocks.suspended.title": "Suspendert",
  "about.not_available": "Denne informasjonen er ikke gjort tilgjengelig på denne tjeneren.",
  "about.powered_by": "Desentraliserte sosiale medier drevet av {mastodon}",
  "about.rules": "Regler for tjeneren",
  "about.rules": "Regler for serveren",
  "account.account_note_header": "Notat",
  "account.add_or_remove_from_list": "Legg til eller fjern fra lister",
  "account.badges.bot": "Bot",
  "account.badges.bot": "Robot",
  "account.badges.group": "Gruppe",
  "account.block": "Blokker @{name}",
  "account.block_domain": "Blokker domenet {domain}",
  "account.block_short": "Blokkér",
  "account.block_short": "Blokker",
  "account.blocked": "Blokkert",
  "account.browse_more_on_origin_server": "Bla mer på den opprinnelige profilen",
  "account.cancel_follow_request": "Trekk tilbake følge-forespørselen",
  "account.cancel_follow_request": "Avbryt følge forespørselen",
  "account.direct": "Nevn @{name} privat",
  "account.disable_notifications": "Slutt å varsle meg når @{name} legger ut innlegg",
  "account.domain_blocked": "Domene blokkert",


@@ 83,7 83,7 @@
  "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": "Oi!",
  "alert.unexpected.title": "Ups!",
  "announcement.announcement": "Kunngjøring",
  "attachments_list.unprocessed": "(ubehandlet)",
  "audio.hide": "Skjul lyd",


@@ 113,6 113,7 @@
  "column.direct": "Private omtaler",
  "column.directory": "Bla gjennom profiler",
  "column.domain_blocks": "Skjulte domener",
  "column.favourites": "Favoritter",
  "column.firehose": "Tidslinjer",
  "column.follow_requests": "Følgeforespørsler",
  "column.home": "Hjem",


@@ 165,7 166,7 @@
  "confirmations.cancel_follow_request.confirm": "Trekk tilbake forespørsel",
  "confirmations.cancel_follow_request.message": "Er du sikker på at du vil trekke tilbake forespørselen din for å følge {name}?",
  "confirmations.delete.confirm": "Slett",
  "confirmations.delete.message": "Er du sikker på at du vil slette denne statusen?",
  "confirmations.delete.message": "Er du sikker på at du vil slette dette innlegget?",
  "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": "Forkast",


@@ 180,6 181,7 @@
  "confirmations.mute.explanation": "Dette vil skjule innlegg fra dem og innlegg som nevner dem, men det vil fortsatt la dem se dine innlegg og å følge deg.",
  "confirmations.mute.message": "Er du sikker på at du vil dempe {name}?",
  "confirmations.redraft.confirm": "Slett og skriv på nytt",
  "confirmations.redraft.message": "Er du sikker på at du vil slette dette innlegget og lagre det på nytt? Favoritter og fremhevinger vil gå tapt, og svar til det originale innlegget vil bli foreldreløse.",
  "confirmations.reply.confirm": "Svar",
  "confirmations.reply.message": "Å svare nå vil overskrive meldingen du skriver for øyeblikket. Er du sikker på at du vil fortsette?",
  "confirmations.unfollow.confirm": "Slutt å følge",


@@ 189,7 191,6 @@
  "conversation.open": "Vis samtale",
  "conversation.with": "Med {names}",
  "copypaste.copied": "Kopiert",
  "copypaste.copy": "Kopier",
  "copypaste.copy_to_clipboard": "Kopier til utklippstavle",
  "directory.federated": "Fra det kjente strømiverset",
  "directory.local": "Kun fra {domain}",


@@ 200,6 201,7 @@
  "dismissable_banner.community_timeline": "Dette er de nyeste offentlige innleggene fra personer med kontoer på {domain}.",
  "dismissable_banner.dismiss": "Avvis",
  "dismissable_banner.explore_links": "Disse nyhetene snakker folk om akkurat nå på denne og andre servere i det desentraliserte nettverket.",
  "dismissable_banner.explore_statuses": "Disse innleggene fra denne og andre servere i det desentraliserte nettverket får økt oppmerksomhet på denne serveren akkurat nå. Nyere innlegg med flere fremhevinger og favoritter er rangert høyere.",
  "dismissable_banner.explore_tags": "Disse emneknaggene snakker folk om akkurat nå, på denne og andre servere i det desentraliserte nettverket.",
  "dismissable_banner.public_timeline": "Dette er de siste offentlige innleggene fra mennesker på det sosiale nettet som folk på {domain} følger.",
  "embed.instructions": "Kopier koden under for å bygge inn denne statusen på hjemmesiden din.",


@@ 228,6 230,8 @@
  "empty_column.direct": "Du har ingen private omtaler enda. Etter du har sendt eller mottatt en, så vil den dukke opp her.",
  "empty_column.domain_blocks": "Det er ingen skjulte domener enda.",
  "empty_column.explore_statuses": "Ingenting er populært akkurat nå. Prøv igjen senere!",
  "empty_column.favourited_statuses": "Du har ikke noen favorittinnlegg enda. Når du favorittmarkerer et inlegg, vil det dukke opp her.",
  "empty_column.favourites": "Ingen har favorittmarkert dette innlegget ennå. Når noen gjør det, vil de dukke opp her.",
  "empty_column.follow_requests": "Du har ingen følgeforespørsler enda. Når du mottar en, vil den dukke opp her.",
  "empty_column.followed_tags": "Du har ikke fulgt noen emneknagger ennå. Når du gjør det, vil de vises her.",
  "empty_column.hashtag": "Det er ingenting i denne emneknaggen ennå.",


@@ 291,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Enhver av disse",
  "hashtag.column_settings.tag_mode.none": "Ingen av disse",
  "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} deltaker} other {{counter} deltakere}}",
  "hashtag.counter_by_uses": "{count, plural, one {ett innlegg} other {{counter} innlegg}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {ett innlegg} other {{counter} innlegg}} i dag",
  "hashtag.follow": "Følg emneknagg",
  "hashtag.unfollow": "Slutt å følge emneknagg",
  "home.actions.go_to_explore": "Se hva som er populært",


@@ 298,16 305,22 @@
  "home.column_settings.basic": "Enkelt",
  "home.column_settings.show_reblogs": "Vis fremhevinger",
  "home.column_settings.show_replies": "Vis svar",
  "home.explore_prompt.body": "Tidslinjen din vil ha en blanding av innlegg fra emneknagger du har valgt å følge, personene du har valgt å følge, og innleggene de fremhever. Det ser ganske stille ut akkurat nå, så hva med:",
  "home.explore_prompt.body": "Tidslinjen din inneholder en blanding av innlegg fra emneknagger du har valgt å følge, personene du har valgt å følge, og innleggene de fremhever. Hvis det føles for stille, kan det være lurt å:",
  "home.explore_prompt.title": "Dette er hjemmet ditt i Mastodon.",
  "home.hide_announcements": "Skjul kunngjøring",
  "home.show_announcements": "Vis kunngjøring",
  "interaction_modal.description.favourite": "Med en konto på Mastodon, kan du favorittmarkere dette innlegget for å la forfatteren vite at du satte pris på det, og lagre innlegget til senere.",
  "interaction_modal.description.follow": "Med en konto på Mastodon, kan du følge {name} for å få innleggene deres i tidslinjen din.",
  "interaction_modal.description.reblog": "Med en konto på Mastodon, kan du fremheve dette innlegget for å dele det med dine egne følgere.",
  "interaction_modal.description.reply": "Med en konto på Mastodon, kan du svare på dette innlegget.",
  "interaction_modal.login.action": "Ta meg hjem",
  "interaction_modal.login.prompt": "Domenet til serveren din, eks. mastodon.social",
  "interaction_modal.no_account_yet": "Ennå ikke på Mastodon?",
  "interaction_modal.on_another_server": "På en annen server",
  "interaction_modal.on_this_server": "På denne serveren",
  "interaction_modal.preamble": "Siden Mastodon er desentralisert, kan du bruke din eksisterende konto på en annen Mastodon-tjener eller en kompatibel plattform hvis du ikke har en konto her.",
  "interaction_modal.sign_in": "Du er ikke logget inn på denne serveren. Hvor har du kontoen din?",
  "interaction_modal.sign_in_hint": "Tips: Det er på nettstedet der du registrerte deg. Hvis du ikke husker det, kan du se etter velkomst e-posten i innboksen. Du kan også skrive inn hele brukernavnet ditt! (eks. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Favorittmarker innlegget til {name}",
  "interaction_modal.title.follow": "Følg {name}",
  "interaction_modal.title.reblog": "Fremhev {name} sitt innlegg",
  "interaction_modal.title.reply": "Svar på {name} sitt innlegg",


@@ 323,6 336,8 @@
  "keyboard_shortcuts.direct": "åpne kolonnen ned private omtaler",
  "keyboard_shortcuts.down": "Flytt nedover i listen",
  "keyboard_shortcuts.enter": "Åpne innlegg",
  "keyboard_shortcuts.favourite": "Favorittmarker innlegg",
  "keyboard_shortcuts.favourites": "Åpne listen over favoritter",
  "keyboard_shortcuts.federated": "Åpne fellestidslinjen",
  "keyboard_shortcuts.heading": "Hurtigtaster",
  "keyboard_shortcuts.home": "Åpne hjemmetidslinjen",


@@ 353,6 368,7 @@
  "lightbox.previous": "Forrige",
  "limited_account_hint.action": "Vis profil likevel",
  "limited_account_hint.title": "Denne profilen har blitt skjult av moderatorene til {domain}.",
  "link_preview.author": "Av {name}",
  "lists.account.add": "Legg til i listen",
  "lists.account.remove": "Fjern fra listen",
  "lists.delete": "Slett listen",


@@ 385,6 401,7 @@
  "navigation_bar.domain_blocks": "Skjulte domener",
  "navigation_bar.edit_profile": "Rediger profil",
  "navigation_bar.explore": "Utforsk",
  "navigation_bar.favourites": "Favoritter",
  "navigation_bar.filters": "Stilnede ord",
  "navigation_bar.follow_requests": "Følgeforespørsler",
  "navigation_bar.followed_tags": "Fulgte emneknagger",


@@ 401,6 418,7 @@
  "not_signed_in_indicator.not_signed_in": "Du må logge inn for å få tilgang til denne ressursen.",
  "notification.admin.report": "{name} rapporterte {target}",
  "notification.admin.sign_up": "{name} registrerte seg",
  "notification.favourite": "{name} favorittmarkerte innlegget ditt",
  "notification.follow": "{name} fulgte deg",
  "notification.follow_request": "{name} har bedt om å få følge deg",
  "notification.mention": "{name} nevnte deg",


@@ 414,6 432,7 @@
  "notifications.column_settings.admin.report": "Nye rapporter:",
  "notifications.column_settings.admin.sign_up": "Nye registreringer:",
  "notifications.column_settings.alert": "Skrivebordsvarslinger",
  "notifications.column_settings.favourite": "Favoritter:",
  "notifications.column_settings.filter_bar.advanced": "Vis alle kategorier",
  "notifications.column_settings.filter_bar.category": "Hurtigfiltreringslinje",
  "notifications.column_settings.filter_bar.show_bar": "Vis filterlinjen",


@@ 431,6 450,7 @@
  "notifications.column_settings.update": "Redigeringer:",
  "notifications.filter.all": "Alle",
  "notifications.filter.boosts": "Fremhevinger",
  "notifications.filter.favourites": "Favoritter",
  "notifications.filter.follows": "Følginger",
  "notifications.filter.mentions": "Nevnelser",
  "notifications.filter.polls": "Avstemningsresultater",


@@ 581,6 601,8 @@
  "server_banner.server_stats": "Serverstatistikk:",
  "sign_in_banner.create_account": "Opprett konto",
  "sign_in_banner.sign_in": "Logg inn",
  "sign_in_banner.sso_redirect": "Logg inn eller registrer deg",
  "sign_in_banner.text": "Logg inn for å følge profiler eller emneknagger, favorittmarkere, dele og svare på innlegg. Du kan også samhandle fra din konto på en annen server.",
  "status.admin_account": "Åpne moderatorgrensesnittet for @{name}",
  "status.admin_domain": "Åpne moderatorgrensesnittet for {domain}",
  "status.admin_status": "Åpne denne statusen i moderatorgrensesnittet",


@@ 597,6 619,7 @@
  "status.edited": "Redigert {date}",
  "status.edited_x_times": "Redigert {count, plural,one {{count} gang} other {{count} ganger}}",
  "status.embed": "Bygge inn",
  "status.favourite": "Favoritt",
  "status.filter": "Filtrer dette innlegget",
  "status.filtered": "Filtrert",
  "status.hide": "Skjul innlegg",

M app/javascript/mastodon/locales/oc.json => app/javascript/mastodon/locales/oc.json +0 -1
@@ 160,7 160,6 @@
  "conversation.open": "Veire la conversacion",
  "conversation.with": "Amb {names}",
  "copypaste.copied": "Copiat",
  "copypaste.copy": "Copiar",
  "directory.federated": "Del fediverse conegut",
  "directory.local": "Solament de {domain}",
  "directory.new_arrivals": "Nòus-venguts",

M app/javascript/mastodon/locales/pa.json => app/javascript/mastodon/locales/pa.json +0 -1
@@ 57,7 57,6 @@
  "confirmations.reply.confirm": "ਜਵਾਬ ਦੇਵੋ",
  "confirmations.unfollow.confirm": "ਪ੍ਰਸ਼ੰਸਕੀ ਰੱਦ ਕਰੋ",
  "copypaste.copied": "ਕਾਪੀ ਕੀਤਾ",
  "copypaste.copy": "ਕਾਪੀ ਕਰੋ",
  "copypaste.copy_to_clipboard": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ",
  "disabled_account_banner.account_settings": "ਖਾਤੇ ਦੀਆਂ ਸੈਟਿੰਗਾਂ",
  "dismissable_banner.dismiss": "ਰੱਦ ਕਰੋ",

M app/javascript/mastodon/locales/pl.json => app/javascript/mastodon/locales/pl.json +10 -4
@@ 191,7 191,6 @@
  "conversation.open": "Zobacz konwersację",
  "conversation.with": "Z {names}",
  "copypaste.copied": "Skopiowano",
  "copypaste.copy": "Kopiuj",
  "copypaste.copy_to_clipboard": "Skopiuj do schowka",
  "directory.federated": "Ze znanego fediwersum",
  "directory.local": "Tylko z {domain}",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Dowolne",
  "hashtag.column_settings.tag_mode.none": "Żadne",
  "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} uczestnik} few {{counter} uczestnicy} many {{counter} uczestników} other {{counter} uczestników}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} wpis} few {{counter} wpisy} many {{counter} wpisów} other {{counter} wpisów}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} wpis} few {{counter} wpisy} many {{counter} wpisów} other {{counter} wpisów}} z dzisiaj",
  "hashtag.follow": "Obserwuj hasztag",
  "hashtag.unfollow": "Przestań obserwować hashtag",
  "home.actions.go_to_explore": "Zobacz, co jest teraz popularne",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Podstawowe",
  "home.column_settings.show_reblogs": "Pokazuj podbicia",
  "home.column_settings.show_replies": "Pokazuj odpowiedzi",
  "home.explore_prompt.body": "Twój kanał główny będzie zawierał kombinację postów z tagów, które wybrano do obserwacji, osoby, które wybrano obserwować i wpisy, które one podbijają. Obecnie jest tu całkiem cicho, więc co myślisz o:",
  "home.explore_prompt.body": "Twój kanał główny będzie zawierał kombinację postów z tagów i osób które obserwujesz oraz wpisów przezeń podbitych. Jeżeli wydaje się to za spokojnym, spróbuj czegoś poniżej.",
  "home.explore_prompt.title": "To twój punkt podparcia w Mastodonie.",
  "home.hide_announcements": "Ukryj ogłoszenia",
  "home.show_announcements": "Pokaż ogłoszenia",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Mając konto na Mastodonie, możesz śledzić {name} by widzieć jego wpisy na swojej głównej osi czasu.",
  "interaction_modal.description.reblog": "Mając konto na Mastodonie, możesz podbić ten wpis i udostępnić go Twoim obserwującym.",
  "interaction_modal.description.reply": "Mając konto na Mastodonie, możesz odpowiedzieć na ten wpis.",
  "interaction_modal.login.action": "Wróć na stronę główną",
  "interaction_modal.login.prompt": "Domena twojego serwera domowego, np. \"mastodon.social\"",
  "interaction_modal.no_account_yet": "Nie masz konta na Mastodonie?",
  "interaction_modal.on_another_server": "Na innym serwerze",
  "interaction_modal.on_this_server": "Na tym serwerze",
  "interaction_modal.other_server_instructions": "Skopiuj i wklej ten adres URL do pola wyszukiwania w swojej ulubionej aplikacji Mastodon lub interfejsu internetowego swojego serwera Mastodon.",
  "interaction_modal.preamble": "Ponieważ Mastodon jest zdecentralizowany, możesz użyć swojego istniejącego konta z innego serwera Mastodona lub innej kompatybilnej usługi, jeśli nie masz konta na tym serwerze.",
  "interaction_modal.sign_in": "Nie jesteś zalogowany(-a) na tym serwerze. Gdzie masz konto?",
  "interaction_modal.sign_in_hint": "To strona na której się rejestrowałeś(-aś). Jeżeli nie pamiętasz, poszukaj mejla z przywitaniem. Możesz też wprowadzić pełną nazwę użytkownika, à la @Mastodon@mastodon.social!",
  "interaction_modal.title.favourite": "Polub wpis użytkownika {name}",
  "interaction_modal.title.follow": "Śledź {name}",
  "interaction_modal.title.reblog": "Podbij wpis {name}",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "Statystyki serwera:",
  "sign_in_banner.create_account": "Załóż konto",
  "sign_in_banner.sign_in": "Zaloguj się",
  "sign_in_banner.sso_redirect": "Zaloguj/zarejestruj się",
  "sign_in_banner.text": "Zaloguj się, aby obserwować profile lub hashtagi, polubić, udostępnić oraz odpowiedzieć na posty. Możesz również wejść w interakcję z konta na innym serwerze.",
  "status.admin_account": "Otwórz interfejs moderacyjny dla @{name}",
  "status.admin_domain": "Otwórz interfejs moderacyjny dla {domain}",

M app/javascript/mastodon/locales/pt-BR.json => app/javascript/mastodon/locales/pt-BR.json +0 -3
@@ 189,7 189,6 @@
  "conversation.open": "Ver conversa",
  "conversation.with": "Com {names}",
  "copypaste.copied": "Copiado",
  "copypaste.copy": "Copiar",
  "copypaste.copy_to_clipboard": "Copiar para a área de transferência",
  "directory.federated": "Do fediverso conhecido",
  "directory.local": "Somente de {domain}",


@@ 298,7 297,6 @@
  "home.column_settings.basic": "Básico",
  "home.column_settings.show_reblogs": "Mostrar boosts",
  "home.column_settings.show_replies": "Mostrar respostas",
  "home.explore_prompt.body": "Seu feed inicial terá uma mistura de publicações das hashtags que você escolheu seguir, das pessoas que você escolheu seguir e das publicações que elas impulsionam. Está parecendo bem tranquilo no momento, então que tal:",
  "home.explore_prompt.title": "Esta é a sua base principal dentro do Mastodon.",
  "home.hide_announcements": "Ocultar comunicados",
  "home.show_announcements": "Mostrar comunicados",


@@ 307,7 305,6 @@
  "interaction_modal.description.reply": "Com uma conta no Mastodon, você pode responder a esta publicação.",
  "interaction_modal.on_another_server": "Em um servidor diferente",
  "interaction_modal.on_this_server": "Neste servidor",
  "interaction_modal.preamble": "Como o Mastodon é descentralizado, você pode usar sua conta existente em outro servidor Mastodon ou plataforma compatível se você não tiver uma conta neste servidor.",
  "interaction_modal.title.follow": "Seguir {name}",
  "interaction_modal.title.reblog": "Impulsionar publicação de {name}",
  "interaction_modal.title.reply": "Responder à publicação de {name}",

M app/javascript/mastodon/locales/pt-PT.json => app/javascript/mastodon/locales/pt-PT.json +11 -4
@@ 191,7 191,6 @@
  "conversation.open": "Ver conversa",
  "conversation.with": "Com {names}",
  "copypaste.copied": "Copiado",
  "copypaste.copy": "Copiar",
  "copypaste.copy_to_clipboard": "Copiar para a área de transferência",
  "directory.federated": "Do fediverso conhecido",
  "directory.local": "Apenas de {domain}",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Qualquer destes",
  "hashtag.column_settings.tag_mode.none": "Nenhum destes",
  "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionais para esta coluna",
  "hashtag.counter_by_accounts": "{count, plural,one {{counter} participante} other {{counter} participantes}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} publicação} other {{counter} publicações}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicação} other {{counter} publicações}} hoje",
  "hashtag.follow": "Seguir #etiqueta",
  "hashtag.unfollow": "Deixar de seguir #etiqueta",
  "home.actions.go_to_explore": "Veja as tendências atuais",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Básico",
  "home.column_settings.show_reblogs": "Mostrar impulsos",
  "home.column_settings.show_replies": "Mostrar respostas",
  "home.explore_prompt.body": "A sua página inicial terá uma mistura de publicações com as hashtags que escolheu seguir, das pessoas que escolheu seguir e as publicações que elas partilham. Parece bastante quieto por agora, então que tal:",
  "home.explore_prompt.body": "A sua página inicial terá uma mistura de publicações com as hashtags que escolheu seguir, das pessoas que escolheu seguir e as publicações que elas partilham. Parece bastante sossegado por agora, talvez queira:",
  "home.explore_prompt.title": "Esta é a sua base principal dentro do Mastodon.",
  "home.hide_announcements": "Ocultar comunicações",
  "home.show_announcements": "Exibir comunicações",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Com uma conta no Mastodon, pode seguir {name} para receber as suas publicações na sua página inicial.",
  "interaction_modal.description.reblog": "Com uma conta no Mastodon, pode impulsionar esta publicação para compartilhá-lo com os seus seguidores.",
  "interaction_modal.description.reply": "Com uma conta no Mastodon, pode responder a esta publicação.",
  "interaction_modal.login.action": "Leve-me a casa",
  "interaction_modal.login.prompt": "Domínio do seu servidor, por exemplo, mastodon.social",
  "interaction_modal.no_account_yet": "Não está no Mastodon?",
  "interaction_modal.on_another_server": "Num servidor diferente",
  "interaction_modal.on_this_server": "Neste servidor",
  "interaction_modal.other_server_instructions": "Copie e cole este URL no campo de pesquisa da sua aplicação Mastodon preferida, ou da interface web do seu servidor Mastodon.",
  "interaction_modal.preamble": "Uma vez que o Mastodon é descentralizado, caso não tenha uma conta neste servidor, pode utilizar a sua conta existente noutro servidor Mastodon ou plataforma compatível.",
  "interaction_modal.sign_in": "Não tem sessão iniciada neste servidor. Em que servidor tem a sua conta?",
  "interaction_modal.sign_in_hint": "Dica: O domínio do seu servidor é o site onde se inscreveu. Se não se lembrar, procure o e-mail de boas-vindas na sua caixa de entrada. Também pode introduzir o seu nome de utilizador completo! (por exemplo, @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Assinalar a publicação de {name} como favorita",
  "interaction_modal.title.follow": "Seguir {name}",
  "interaction_modal.title.reblog": "Impulsionar a publicação de {name}",


@@ 363,6 368,7 @@
  "lightbox.previous": "Anterior",
  "limited_account_hint.action": "Exibir perfil mesmo assim",
  "limited_account_hint.title": "Este perfil foi ocultado pelos moderadores de {domain}.",
  "link_preview.author": "Por {name}",
  "lists.account.add": "Adicionar à lista",
  "lists.account.remove": "Remover da lista",
  "lists.delete": "Eliminar lista",


@@ 595,6 601,7 @@
  "server_banner.server_stats": "Estatísticas do servidor:",
  "sign_in_banner.create_account": "Criar conta",
  "sign_in_banner.sign_in": "Iniciar sessão",
  "sign_in_banner.sso_redirect": "Iniciar sessão ou inscrever-se",
  "sign_in_banner.text": "Inicie sessão para seguir perfis ou hashtags, assinalar como favorito, partilhar ou responder a publicações. Pode ainda interagir através da sua conta noutro servidor.",
  "status.admin_account": "Abrir a interface de moderação para @{name}",
  "status.admin_domain": "Abrir interface de moderação para {domain}",

M app/javascript/mastodon/locales/ro.json => app/javascript/mastodon/locales/ro.json +0 -2
@@ 172,7 172,6 @@
  "conversation.open": "Vizualizează conversația",
  "conversation.with": "Cu {names}",
  "copypaste.copied": "Copiat",
  "copypaste.copy": "Copiere",
  "directory.federated": "Din fediversul cunoscut",
  "directory.local": "Doar din {domain}",
  "directory.new_arrivals": "Înscriși recent",


@@ 279,7 278,6 @@
  "interaction_modal.description.reply": "Cu un cont pe Mastodon, poți răspunde acestei postări.",
  "interaction_modal.on_another_server": "Pe un alt server",
  "interaction_modal.on_this_server": "Pe acest server",
  "interaction_modal.preamble": "De vreme ce Mastodon este descentralizat, poți folosi contul tău existent, găzduit de un alt server Mastodon, sau o platformă compatibilă dacă nu ai un cont pe acesta.",
  "interaction_modal.title.follow": "Urmărește pe {name}",
  "interaction_modal.title.reblog": "Distribuie postarea lui {name}",
  "interaction_modal.title.reply": "Răspunde postării lui {name}",

M app/javascript/mastodon/locales/ru.json => app/javascript/mastodon/locales/ru.json +7 -3
@@ 191,7 191,6 @@
  "conversation.open": "Просмотр беседы",
  "conversation.with": "С {names}",
  "copypaste.copied": "Скопировано",
  "copypaste.copy": "Скопировать",
  "copypaste.copy_to_clipboard": "Копировать в буфер обмена",
  "directory.federated": "Со всей федерации",
  "directory.local": "Только с {domain}",


@@ 202,6 201,7 @@
  "dismissable_banner.community_timeline": "Это самые последние публичные сообщения от людей, чьи учетные записи размещены в {domain}.",
  "dismissable_banner.dismiss": "Закрыть",
  "dismissable_banner.explore_links": "Об этих новостях прямо сейчас говорят люди на этом и других серверах децентрализованной сети.",
  "dismissable_banner.explore_statuses": "Эти сообщения со связанных серверов сети сейчас набирают популярность.",
  "dismissable_banner.explore_tags": "Эти хэштеги привлекают людей на этом и других серверах децентрализованной сети прямо сейчас.",
  "dismissable_banner.public_timeline": "Это самые последние публичные сообщения от людей в социальной сети, за которыми подписались пользователи {domain}.",
  "embed.instructions": "Встройте этот пост на свой сайт, скопировав следующий код:",


@@ 310,10 310,13 @@
  "interaction_modal.description.follow": "С учётной записью Mastodon вы можете подписаться на {name}, чтобы получать их посты в своей домашней ленте.",
  "interaction_modal.description.reblog": "С учётной записью Mastodon, вы можете продвинуть этот пост, чтобы поделиться им со своими подписчиками.",
  "interaction_modal.description.reply": "Вы можете ответить на этот пост с учётной записью Mastodon.",
  "interaction_modal.login.action": "Перейти на домашнюю страницу",
  "interaction_modal.login.prompt": "Домен вашего домашнего сервера, например, mastodon.social",
  "interaction_modal.no_account_yet": "Еще не на Mastodon?",
  "interaction_modal.on_another_server": "На другом сервере",
  "interaction_modal.on_this_server": "На этом сервере",
  "interaction_modal.other_server_instructions": "Скопируйте и вставьте этот URL в поле поиска вашего любимого приложения Mastodon или веб-интерфейс вашего сервера Mastodon.",
  "interaction_modal.preamble": "Поскольку Mastodon децентрализован, вы можете использовать существующую учётную запись, размещенную на другом сервере Mastodon или совместимой платформе, если у вас нет учётной записи на этом сервере.",
  "interaction_modal.sign_in": "Вы не вошли в систему на этом сервере. Где размещена ваша учетная запись?",
  "interaction_modal.sign_in_hint": "Совет: Это сайт, на котором вы зарегистрировались. Если вы не помните, найдите приветственное письмо в своем почтовом ящике. Вы также можете ввести свое полное имя пользователя! (например, @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Добавить пост {name} в избранное",
  "interaction_modal.title.follow": "Подписаться на {name}",
  "interaction_modal.title.reblog": "Продвинуть публикацию {name}",


@@ 595,6 598,7 @@
  "server_banner.server_stats": "Статистика сервера:",
  "sign_in_banner.create_account": "Создать учётную запись",
  "sign_in_banner.sign_in": "Войти",
  "sign_in_banner.sso_redirect": "Войдите или Зарегистрируйтесь",
  "sign_in_banner.text": "Войдите, чтобы отслеживать профили, хэштеги или избранное, делиться сообщениями и отвечать на них. Вы также можете взаимодействовать с вашей учётной записью на другом сервере.",
  "status.admin_account": "Открыть интерфейс модератора для @{name}",
  "status.admin_domain": "Открыть интерфейс модерации {domain}",

M app/javascript/mastodon/locales/sa.json => app/javascript/mastodon/locales/sa.json +0 -2
@@ 177,7 177,6 @@
  "conversation.open": "वार्तालापो दृश्यताम्",
  "conversation.with": "{names} जनैः साकम्",
  "copypaste.copied": "प्रतिलिपिंकृतम्",
  "copypaste.copy": "प्रतिलिपिः",
  "copypaste.copy_to_clipboard": "क्लिप्बोर्दमनुलिपिं कुरु",
  "directory.federated": "सुपरिचितं Fediverse इति स्थानात्",
  "directory.local": "{domain} प्रदेशात्केवलम्",


@@ 287,7 286,6 @@
  "interaction_modal.description.reply": "मास्टोडोनि एकौण्टा पत्रमिदं प्रतिवादयितुं शक्नोषि।",
  "interaction_modal.on_another_server": "अन्यस्मिन्सर्वरि",
  "interaction_modal.on_this_server": "अस्मिन्सर्वरि",
  "interaction_modal.preamble": "यतो मास्टोडोन्विकेन्द्रीयकृतोऽस्ति, अन्येन मास्टोडोन्सर्वरा उत सुसङ्गतेन आश्रयेण ते वर्तमानौकौण्टं प्रयोक्तुं शक्नोषि यदि अस्मिन्कोऽपि ते एकौण्ट् नास्ति।",
  "interaction_modal.title.follow": "{name} अनुसर",
  "interaction_modal.title.reblog": "{name} नाम्ना उपभोक्तुः पत्रं बुस्त्कुरु",
  "interaction_modal.title.reply": "{name} नाम्ना उपभोक्तुःपत्रं प्रतिवादय",

M app/javascript/mastodon/locales/sco.json => app/javascript/mastodon/locales/sco.json +0 -2
@@ 171,7 171,6 @@
  "conversation.open": "Luik at conversation",
  "conversation.with": "Wi {names}",
  "copypaste.copied": "Copied",
  "copypaste.copy": "Copy",
  "directory.federated": "Fae a kent fediverse",
  "directory.local": "Fae {domain} ainly",
  "directory.new_arrivals": "New arrivals",


@@ 272,7 271,6 @@
  "interaction_modal.description.reply": "Wi a accoont on Mastodon, ye kin sen a repone tae this post.",
  "interaction_modal.on_another_server": "On a different server",
  "interaction_modal.on_this_server": "On this server",
  "interaction_modal.preamble": "Seein Mastodon is decentralized, ye kin uise the accoont thit ye awriddy hae hostit on anither Mastodon server or compatable platforn gien thit dinnae hae a accoont in this yin.",
  "interaction_modal.title.follow": "Follae {name}",
  "interaction_modal.title.reblog": "Heeze {name}'s post",
  "interaction_modal.title.reply": "Reply tae {name}'s post",

M app/javascript/mastodon/locales/si.json => app/javascript/mastodon/locales/si.json +0 -1
@@ 136,7 136,6 @@
  "conversation.open": "සංවාදය බලන්න",
  "conversation.with": "{names} සමඟ",
  "copypaste.copied": "පිටපත් විය",
  "copypaste.copy": "පිටපතක්",
  "directory.federated": "දන්නා fediverse වලින්",
  "directory.local": "{domain} වෙතින් පමණි",
  "directory.new_arrivals": "නව පැමිණීම්",

M app/javascript/mastodon/locales/sk.json => app/javascript/mastodon/locales/sk.json +21 -2
@@ 76,6 76,10 @@
  "admin.dashboard.retention.average": "Priemer",
  "admin.dashboard.retention.cohort": "Mesiac zaregistrovania sa",
  "admin.dashboard.retention.cohort_size": "Noví užívatelia",
  "admin.impact_report.instance_accounts": "Profily účtov, ktoré by boli odstránené",
  "admin.impact_report.instance_followers": "Sledovatelia, o ktorých by naši používatelia prišli",
  "admin.impact_report.instance_follows": "Sledovatelia, o ktorých by ich používatelia prišli",
  "admin.impact_report.title": "Zhrnutie dopadu",
  "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.",


@@ 110,6 114,7 @@
  "column.directory": "Prehľadávaj profily",
  "column.domain_blocks": "Skryté domény",
  "column.favourites": "Obľúbené",
  "column.firehose": "Živé kanály",
  "column.follow_requests": "Žiadosti o sledovanie",
  "column.home": "Domov",
  "column.lists": "Zoznamy",


@@ 176,6 181,7 @@
  "confirmations.mute.explanation": "Toto nastavenie skryje ich príspevky, alebo príspevky od iných v ktorých sú spomenutí, ale umožní im vidieť tvoje príspevky, aj ťa nasledovať.",
  "confirmations.mute.message": "Naozaj si chceš nevšímať {name}?",
  "confirmations.redraft.confirm": "Vyčisti a prepíš",
  "confirmations.redraft.message": "Ste si istý, že chcete premazať a prepísať tento príspevok? Jeho nadobudnuté vyzdvihnutia a obľúbenia, ale i odpovede na pôvodný príspevok budú odlúčené.",
  "confirmations.reply.confirm": "Odpovedz",
  "confirmations.reply.message": "Odpovedaním akurát teraz prepíšeš správu, ktorú máš práve rozpísanú. Si si istý/á, že chceš pokračovať?",
  "confirmations.unfollow.confirm": "Nesleduj",


@@ 185,7 191,6 @@
  "conversation.open": "Ukáž konverzáciu",
  "conversation.with": "S {names}",
  "copypaste.copied": "Skopírované",
  "copypaste.copy": "Kopíruj",
  "copypaste.copy_to_clipboard": "Skopíruj do schránky",
  "directory.federated": "Zo známého fedivesmíru",
  "directory.local": "Iba z {domain}",


@@ 196,7 201,9 @@
  "dismissable_banner.community_timeline": "Toto sú najnovšie verejné príspevky od ľudí, ktorých účty sú hostované na {domain}.",
  "dismissable_banner.dismiss": "Zrušiť",
  "dismissable_banner.explore_links": "O týchto správach práve teraz hovoria ľudia na tomto a ďalších serveroch decentralizovanej siete.",
  "dismissable_banner.explore_statuses": "Tieto príspevky naberajú na ťahu naprieč celej sociálnej sieti. Novšie príspevky s viacerými vyzdvihnutiami sú radené vyššie.",
  "dismissable_banner.explore_tags": "Tieto hashtagy práve teraz získavajú popularitu medzi ľuďmi na tomto a ďalších serveroch decentralizovanej siete.",
  "dismissable_banner.public_timeline": "Toto sú najnovšie verejné príspevky od ľudí, ktorí sledujú {domain}, cez celú sociálnu sieť.",
  "embed.instructions": "Umiestni kód uvedený nižšie pre pridanie tohto statusu na tvoju web stránku.",
  "embed.preview": "Tu je ako to bude vyzerať:",
  "emoji_button.activity": "Aktivita",


@@ 223,6 230,8 @@
  "empty_column.direct": "Ešte nemáš žiadne priame zmienky. Keď nejakú pošleš alebo dostaneš, ukáže sa tu.",
  "empty_column.domain_blocks": "Žiadne domény ešte niesú skryté.",
  "empty_column.explore_statuses": "Momentálne nie je nič trendové. Pozrite sa neskôr!",
  "empty_column.favourited_statuses": "Zatiaľ nemáš žiadne obľúbené príspevky. Akonáhle označíš nejaký ako obľúbený, zobrazí sa tu.",
  "empty_column.favourites": "Nikto si zatiaľ tento príspevok neobľúbil. Akonáhle tak niekto urobí, zobrazí sa tu.",
  "empty_column.follow_requests": "Ešte nemáš žiadne požiadavky o následovanie. Keď nejaké dostaneš, budú tu zobrazené.",
  "empty_column.followed_tags": "Ešte nenasleduješ žiadne haštagy. Keď tak urobíš, zobrazia sa tu.",
  "empty_column.hashtag": "Pod týmto hashtagom sa ešte nič nenachádza.",


@@ 288,6 297,7 @@
  "hashtag.column_settings.tag_toggle": "Vlož dodatočné haštagy pre tento stĺpec",
  "hashtag.follow": "Nasleduj haštag",
  "hashtag.unfollow": "Nesleduj haštag",
  "home.actions.go_to_explore": "Pozrieť, čo je trendy",
  "home.actions.go_to_suggestions": "Nájdi ľudí na sledovanie",
  "home.column_settings.basic": "Základné",
  "home.column_settings.show_reblogs": "Ukáž vyzdvihnuté",


@@ 297,9 307,10 @@
  "interaction_modal.description.follow": "Ak máte konto na Mastodone, môžete sledovať {name} a dostávať príspevky do svojho domovského kanála.",
  "interaction_modal.description.reblog": "Ak máte účet na Mastodone, môžete tento príspevok posilniť a zdieľať ho s vlastnými sledovateľmi.",
  "interaction_modal.description.reply": "Ak máte účet na Mastodone, môžete reagovať na tento príspevok.",
  "interaction_modal.login.action": "Prejsť domov",
  "interaction_modal.on_another_server": "Na inom serveri",
  "interaction_modal.on_this_server": "Na tomto serveri",
  "interaction_modal.preamble": "Keďže Mastodon je decentralizovaný, ak nemáte účet na tomto serveri, môžete použiť svoj existujúci účet hostovaný na inom serveri Mastodon alebo kompatibilnej platforme.",
  "interaction_modal.title.favourite": "Obľúb si {name} ov/in príspevok",
  "interaction_modal.title.follow": "Nasleduj {name}",
  "interaction_modal.title.reblog": "Vyzdvihni {name}ov/in príspevok",
  "interaction_modal.title.reply": "Odpovedz na {name}ov/in príspevok",


@@ 315,6 326,8 @@
  "keyboard_shortcuts.direct": "to open direct messages column",
  "keyboard_shortcuts.down": "posunúť sa dole v zozname",
  "keyboard_shortcuts.enter": "Otvor príspevok",
  "keyboard_shortcuts.favourite": "Obľúb si príspevok",
  "keyboard_shortcuts.favourites": "Otvor zoznam obľúbených",
  "keyboard_shortcuts.federated": "otvor federovanú časovú os",
  "keyboard_shortcuts.heading": "Klávesové skratky",
  "keyboard_shortcuts.home": "otvor domácu časovú os",


@@ 375,6 388,7 @@
  "navigation_bar.domain_blocks": "Skryté domény",
  "navigation_bar.edit_profile": "Uprav profil",
  "navigation_bar.explore": "Objavuj",
  "navigation_bar.favourites": "Obľúbené",
  "navigation_bar.filters": "Filtrované slová",
  "navigation_bar.follow_requests": "Žiadosti o sledovanie",
  "navigation_bar.followed_tags": "Nasledované haštagy",


@@ 391,6 405,7 @@
  "not_signed_in_indicator.not_signed_in": "Ak chcete získať prístup k tomuto zdroju, musíte sa prihlásiť.",
  "notification.admin.report": "{name} nahlásil/a {target}",
  "notification.admin.sign_up": "{name} sa zaregistroval/a",
  "notification.favourite": "{name} si obľúbil/a tvoj príspevok",
  "notification.follow": "{name} ťa začal/a nasledovať",
  "notification.follow_request": "{name} ťa žiada nasledovať",
  "notification.mention": "{name} ťa spomenul/a",


@@ 443,6 458,7 @@
  "onboarding.compose.template": "Nazdar #Mastodon!",
  "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
  "onboarding.follows.title": "Popular on Mastodon",
  "onboarding.share.next_steps": "Ďalšie možné kroky:",
  "onboarding.share.title": "Zdieľaj svoj profil",
  "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
  "onboarding.start.skip": "Want to skip right ahead?",


@@ 531,6 547,7 @@
  "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached",
  "report_notification.categories.legal": "Právne ujednania",
  "report_notification.categories.other": "Ostatné",
  "report_notification.categories.spam": "Spam",
  "report_notification.categories.violation": "Porušenie pravidla",
  "report_notification.open": "Otvor hlásenie",
  "search.no_recent_searches": "Žiadne nedávne vyhľadávania",


@@ 571,6 588,7 @@
  "status.edited": "Upravené {date}",
  "status.edited_x_times": "Upravený {count, plural, one {{count} krát} other {{count} krát}}",
  "status.embed": "Vložiť",
  "status.favourite": "Páči sa mi",
  "status.filter": "Filtrovanie tohto príspevku",
  "status.filtered": "Filtrované",
  "status.hide": "Skry príspevok",


@@ 609,6 627,7 @@
  "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}",
  "status.translate": "Preložiť",
  "status.translated_from_with": "Preložené z {lang} pomocou {provider}",
  "status.uncached_media_warning": "Náhľad nie je k dispozícii",
  "status.unmute_conversation": "Prestaň si nevšímať konverzáciu",
  "status.unpin": "Odopni z profilu",
  "subscribed_languages.save": "Ulož zmeny",

M app/javascript/mastodon/locales/sl.json => app/javascript/mastodon/locales/sl.json +10 -3
@@ 68,6 68,7 @@
  "account.unendorse": "Ne vključi v profil",
  "account.unfollow": "Prenehaj slediti",
  "account.unmute": "Odtišaj @{name}",
  "account.unmute_notifications_short": "Izklopi utišanje obvestil",
  "account.unmute_short": "Odtišaj",
  "account_note.placeholder": "Kliknite za dodajanje opombe",
  "admin.dashboard.daily_retention": "Mera ohranjanja uporabnikov po dnevih od registracije",


@@ 190,7 191,6 @@
  "conversation.open": "Pokaži pogovor",
  "conversation.with": "Z {names}",
  "copypaste.copied": "Kopirano",
  "copypaste.copy": "Kopiraj",
  "copypaste.copy_to_clipboard": "Kopiraj na odložišče",
  "directory.federated": "Iz znanega fediverzuma",
  "directory.local": "Samo iz {domain}",


@@ 203,6 203,7 @@
  "dismissable_banner.explore_links": "O teh novicah ravno zdaj veliko govorijo osebe na tem in drugih strežnikih decentraliziranega omrežja.",
  "dismissable_banner.explore_statuses": "Te objave s tega in drugih strežnikov v decentraliziranem omrežju pridobivajo ravno zdaj veliko pozornosti na tem strežniku.",
  "dismissable_banner.explore_tags": "Ravno zdaj dobivajo ti ključniki veliko pozoronosti med osebami na tem in drugih strežnikih decentraliziranega omrežja.",
  "dismissable_banner.public_timeline": "To so najnovejše javne objave oseb z družabnega omrežja, ki jim sledijo osebe na {domain}.",
  "embed.instructions": "Vstavite to objavo na svojo spletno stran tako, da kopirate spodnjo kodo.",
  "embed.preview": "Tako bo izgledalo:",
  "emoji_button.activity": "Dejavnost",


@@ 301,6 302,7 @@
  "home.column_settings.basic": "Osnovno",
  "home.column_settings.show_reblogs": "Pokaži izpostavitve",
  "home.column_settings.show_replies": "Pokaži odgovore",
  "home.explore_prompt.body": "Vaš domači vir bo vseboval mešanico objav ključnikov, ki ste jih izbrali za sledenje, oseb, ki ste jih izbrali za sledenje, in objav, ki jih ti izpostavljajo. Če se vam to zdi preveč tiho, morda želite:",
  "home.explore_prompt.title": "To je vaš dom v okviru Mastodona.",
  "home.hide_announcements": "Skrij obvestila",
  "home.show_announcements": "Pokaži obvestila",


@@ 308,10 310,13 @@
  "interaction_modal.description.follow": "Z računom na Mastodonu lahko sledite {name}, da prejemate njihove objave v svoj domači vir.",
  "interaction_modal.description.reblog": "Z računom na Mastodonu lahko izpostavite to objavo, tako da jo delite s svojimi sledilci.",
  "interaction_modal.description.reply": "Z računom na Mastodonu lahko odgovorite na to objavo.",
  "interaction_modal.login.action": "Vrni me domov",
  "interaction_modal.login.prompt": "Domena vašega domačega strežnika, npr. mastodon.social",
  "interaction_modal.no_account_yet": "Niste na Mastodonu?",
  "interaction_modal.on_another_server": "Na drugem strežniku",
  "interaction_modal.on_this_server": "Na tem strežniku",
  "interaction_modal.other_server_instructions": "Kopirajte in prilepite ta URL v polje iskanja vašega priljubljenega programa Mastodon ali spletnega vmesnika vašega strežnika Mastodon.",
  "interaction_modal.preamble": "Ker je Mastodon decentraliziran, lahko uporabite svoj obstoječi račun, ki gostuje na drugem strežniku Mastodon ali združljivi platformi, če nimate računa na tej.",
  "interaction_modal.sign_in": "Niste prijavljeni v ta strežnik. Kje gostuje vaš račun?",
  "interaction_modal.sign_in_hint": "Nasvet: To je spletno mesto, na katerem ste se prijavili. Če se ne spomnite, poiščite pozdravno e-poštno sporočilo v svojem e-poštnem predalu. Vpišete lahko tudi svoje celotno uporabniško ime (npr. @Mastodon@mastodon.social)!",
  "interaction_modal.title.favourite": "Daj objavo {name} med priljubljene",
  "interaction_modal.title.follow": "Sledi {name}",
  "interaction_modal.title.reblog": "Izpostavi objavo {name}",


@@ 360,6 365,7 @@
  "lightbox.previous": "Prejšnji",
  "limited_account_hint.action": "Vseeno pokaži profil",
  "limited_account_hint.title": "Profil so moderatorji strežnika {domain} skrili.",
  "link_preview.author": "Avtor_ica {name}",
  "lists.account.add": "Dodaj na seznam",
  "lists.account.remove": "Odstrani s seznama",
  "lists.delete": "Izbriši seznam",


@@ 592,6 598,7 @@
  "server_banner.server_stats": "Statistika strežnika:",
  "sign_in_banner.create_account": "Ustvari račun",
  "sign_in_banner.sign_in": "Prijava",
  "sign_in_banner.sso_redirect": "Prijavite ali registrirajte se",
  "sign_in_banner.text": "Prijavite se, da sledite profilom ali ključnikom, dodajate med priljubljene, delite z drugimi ter odgovarjate na objave. V interakciji ste lahko tudi iz svojega računa na drugem strežniku.",
  "status.admin_account": "Odpri vmesnik za moderiranje za @{name}",
  "status.admin_domain": "Odpri vmesnik za moderiranje za {domain}",

M app/javascript/mastodon/locales/sq.json => app/javascript/mastodon/locales/sq.json +0 -3
@@ 189,7 189,6 @@
  "conversation.open": "Shfaq bisedën",
  "conversation.with": "Me {names}",
  "copypaste.copied": "U kopjua",
  "copypaste.copy": "Kopjoje",
  "copypaste.copy_to_clipboard": "Kopjoje në të papastër",
  "directory.federated": "Nga fedivers i njohur",
  "directory.local": "Vetëm nga {domain}",


@@ 298,7 297,6 @@
  "home.column_settings.basic": "Bazë",
  "home.column_settings.show_reblogs": "Shfaq përforcime",
  "home.column_settings.show_replies": "Shfaq përgjigje",
  "home.explore_prompt.body": "Prurja juaj bazë do të përmbajë një përzierje prej postimesh me hashtag-ët që keni zgjedhur të ndiqen, personat që keni zgjedhur të ndiqen dhe postimet që ata përforcojnë. Duket goxha bukur që tani, ndaj po sikur:",
  "home.explore_prompt.title": "Kjo është baza juaj brenda Mastodon-it.",
  "home.hide_announcements": "Fshihi lajmërimet",
  "home.show_announcements": "Shfaqi lajmërimet",


@@ 307,7 305,6 @@
  "interaction_modal.description.reply": "Me një llogari në Mastodon, mund t’i përgjigjeni këtij postimi.",
  "interaction_modal.on_another_server": "Në një tjetër shërbyes",
  "interaction_modal.on_this_server": "Në këtë shërbyes",
  "interaction_modal.preamble": "Ngaqë Mastodon-i është i decentralizuar, mund të përdorni llogarinë tuaj ekzistuese të strehuar nga një tjetër shërbyes Mastodon, ose platformë e përputhshme, nëse s’keni një llogari në këtë shërbyes.",
  "interaction_modal.title.follow": "Ndiq {name}",
  "interaction_modal.title.reblog": "Përforconi postimin e {name}",
  "interaction_modal.title.reply": "Përgjigjuni postimit të {name}",

M app/javascript/mastodon/locales/sr-Latn.json => app/javascript/mastodon/locales/sr-Latn.json +12 -6
@@ 191,7 191,6 @@
  "conversation.open": "Prikaži razgovor",
  "conversation.with": "Sa {names}",
  "copypaste.copied": "Kopirano",
  "copypaste.copy": "Kopiraj",
  "copypaste.copy_to_clipboard": "Kopiraj",
  "directory.federated": "Sa znanog fediverzuma",
  "directory.local": "Samo sa {domain}",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Bilo koje od ovih",
  "hashtag.column_settings.tag_mode.none": "Nijedan od ovih",
  "hashtag.column_settings.tag_toggle": "Uključi dodatne oznake za ovu kolonu",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} učesnik} few {{counter} učesnika} other {{counter} učesnika}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} objava} few {{counter} objave} other {{counter} objava}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} objava} few {{counter} objave} other {{counter} objava}} danas",
  "hashtag.follow": "Zaprati heš oznaku",
  "hashtag.unfollow": "Otprati heš oznaku",
  "home.actions.go_to_explore": "Pogledaj šta je u trendu",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Osnovna",
  "home.column_settings.show_reblogs": "Prikaži podržavanja",
  "home.column_settings.show_replies": "Prikaži odgovore",
  "home.explore_prompt.body": "Vaša početna stranica će imati mešavinu ovjava od heštegova koje ste izabrali da pratite, ljudi koje ste izabrali da pratite i objava koje su podržali. Trenutno izgleda prilično tiho, pa šta kažete na:",
  "home.explore_prompt.body": "Vaša početna stranica će imati mešavinu objava od heš oznaka koje ste izabrali da pratite, ljudi koje ste izabrali da pratite i objava koje su podržali. Ako izgleda previše tiho, možda ćete želeti da:",
  "home.explore_prompt.title": "Ovo je vaša matična baza u Mastodon-u.",
  "home.hide_announcements": "Sakrij najave",
  "home.show_announcements": "Prijaži najave",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Sa nalogom na Mastodon-u, možete pratiti korisnika {name} kako biste primali njegove objave na početnoj stranici.",
  "interaction_modal.description.reblog": "Sa nalogom na Mastodon-u, možete podržati ovu objavu kako bite je podelili sa svojim pratiocima.",
  "interaction_modal.description.reply": "Sa nalogom na Mastodon-u, možete odgovoriti na ovu objavu.",
  "interaction_modal.login.action": "Vodi me na početnu stranicu",
  "interaction_modal.login.prompt": "Domen vašeg matičnog servera, npr. mastodon.social",
  "interaction_modal.no_account_yet": "Niste na Mastodon-u?",
  "interaction_modal.on_another_server": "Na drugom serveru",
  "interaction_modal.on_this_server": "Na ovom serveru",
  "interaction_modal.other_server_instructions": "Kopirajte i nalepite ovu URL adresu u polje pretrage svoje omiljene Mastodon aplikacije ili veb okruženje svog Mastodon servera.",
  "interaction_modal.preamble": "Pošto je Mastodon decentralizovan, možete koristiti svoj postojeći nalog koji hostuje drugi Mastodon server ili kompatibilna platforma ako nemate nalog na ovom.",
  "interaction_modal.sign_in": "Niste prijavljeni na ovaj server. Gde je hostovan vaš nalog?",
  "interaction_modal.sign_in_hint": "Savet: To je veb sajt na kome ste se registrovali. Ako se ne sećate, potražite e-poruku dobrodošlice u svom prijemnom sandučetu. Takođe možete uneti svoje puno korisničko ime! (npr. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Označi objavu korisnika {name} kao omiljenu",
  "interaction_modal.title.follow": "Zaprati {name}",
  "interaction_modal.title.reblog": "Podrži objavu korisnika {name}",


@@ 466,7 471,7 @@
  "onboarding.compose.template": "Zdravo #Mastodon!",
  "onboarding.follows.empty": "Nažalost, trenutno se ne mogu prikazati rezultati. Možete pokušati sa korišćenjem pretrage ili pregledanjem stranice za istraživanje da biste pronašli ljude koje ćete pratiti ili pokušajte ponovo kasnije.",
  "onboarding.follows.lead": "Vi sami birate svoju početnu stranicu. Što više ljudi pratite, to će biti aktivnije i zanimljivije. Ovi profili mogu biti dobra polazna tačka—uvek možete da ih prestanete pratiti kasnije!",
  "onboarding.follows.title": "Popularno na Mastodon-u",
  "onboarding.follows.title": "Personalizujte svoju početnu stranicu",
  "onboarding.share.lead": "Neka ljudi znaju kako mogu da vas pronađu na Mastodon-u!",
  "onboarding.share.message": "Ja sam {username} na #Mastodon-u! Pratite me na {url}",
  "onboarding.share.next_steps": "Mogući sledeći koraci:",


@@ 475,7 480,7 @@
  "onboarding.start.skip": "Želite da preskočite?",
  "onboarding.start.title": "Uspeli ste!",
  "onboarding.steps.follow_people.body": "Vi sami birate svoju početnu stranicu. Hajde da ga ispunimo zanimljivim ljudima.",
  "onboarding.steps.follow_people.title": "Pratite {count, plural, one {# osobu} few {# osobe} other {# osoba}}",
  "onboarding.steps.follow_people.title": "Personalizujte svoju početnu stranicu",
  "onboarding.steps.publish_status.body": "Reci zdravo svetu.",
  "onboarding.steps.publish_status.title": "Napišite svoju prvu objavu",
  "onboarding.steps.setup_profile.body": "Veća je verovatnoća da će drugi komunicirati sa vama sa popunjenim profilom.",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "Statistike servera:",
  "sign_in_banner.create_account": "Napravite nalog",
  "sign_in_banner.sign_in": "Prijavite se",
  "sign_in_banner.sso_redirect": "Prijavite se ili se registrujte",
  "sign_in_banner.text": "Prijavite se da biste pratili profile ili heš oznake, označili objave kao omiljene, delili i odgovarali na njih. Takođe možete komunicirati sa svog naloga na drugom serveru.",
  "status.admin_account": "Otvori moderatorsko okruženje za @{name}",
  "status.admin_domain": "Otvori moderatorsko okruženje za {domain}",

M app/javascript/mastodon/locales/sr.json => app/javascript/mastodon/locales/sr.json +12 -6
@@ 191,7 191,6 @@
  "conversation.open": "Прикажи разговор",
  "conversation.with": "Са {names}",
  "copypaste.copied": "Копирано",
  "copypaste.copy": "Копирај",
  "copypaste.copy_to_clipboard": "Копирај",
  "directory.federated": "Са знаног федиверзума",
  "directory.local": "Само са {domain}",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Било које од ових",
  "hashtag.column_settings.tag_mode.none": "Ниједан од ових",
  "hashtag.column_settings.tag_toggle": "Укључи додатне ознаке за ову колону",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} учесник} few {{counter} учесника} other {{counter} учесника}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} објава} few {{counter} објаве} other {{counter} објава}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} објава} few {{counter} објаве} other {{counter} објава}} данас",
  "hashtag.follow": "Запрати хеш ознаку",
  "hashtag.unfollow": "Отпрати хеш ознаку",
  "home.actions.go_to_explore": "Погледај шта је у тренду",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Основна",
  "home.column_settings.show_reblogs": "Прикажи подржавања",
  "home.column_settings.show_replies": "Прикажи одговоре",
  "home.explore_prompt.body": "Ваша почетна страница ће имати мешавину овјава од хештегова које сте изабрали да пратите, људи које сте изабрали да пратите и објава које су подржали. Тренутно изгледа прилично тихо, па шта кажете на:",
  "home.explore_prompt.body": "Ваша почетна страница ће имати мешавину објава од хеш ознака које сте изабрали да пратите, људи које сте изабрали да пратите и објава које су подржали. Ако изгледа превише тихо, можда ћете желети да:",
  "home.explore_prompt.title": "Ово је ваша матична база у Mastodon-у.",
  "home.hide_announcements": "Сакриј најаве",
  "home.show_announcements": "Пријажи најаве",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Са налогом на Mastodon-у, можете пратити корисника {name} како бисте примали његове објаве на почетној страници.",
  "interaction_modal.description.reblog": "Са налогом на Mastodon-у, можете подржати ову објаву како бите је поделили са својим пратиоцима.",
  "interaction_modal.description.reply": "Са налогом на Mastodon-у, можете одговорити на ову објаву.",
  "interaction_modal.login.action": "Води ме на почетну страницу",
  "interaction_modal.login.prompt": "Домен вашег матичног сервера, нпр. mastodon.social",
  "interaction_modal.no_account_yet": "Нисте на Mastodon-у?",
  "interaction_modal.on_another_server": "На другом серверу",
  "interaction_modal.on_this_server": "На овом серверу",
  "interaction_modal.other_server_instructions": "Копирајте и налепите ову URL адресу у поље претраге своје омиљене Mastodon апликације или веб окружење свог Mastodon сервера.",
  "interaction_modal.preamble": "Пошто је Mastodon децентрализован, можете користити свој постојећи налог који хостује други Mastodon сервер или компатибилна платформа ако немате налог на овом.",
  "interaction_modal.sign_in": "Нисте пријављени на овај сервер. Где је хостован ваш налог?",
  "interaction_modal.sign_in_hint": "Савет: То је веб сајт на коме сте се регистровали. Ако се не сећате, потражите е-поруку добродошлице у свом пријемном сандучету. Такође можете унети своје пуно корисничко име! (нпр. @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Означи објаву корисника {name} као омиљену",
  "interaction_modal.title.follow": "Запрати {name}",
  "interaction_modal.title.reblog": "Подржи објаву корисника {name}",


@@ 466,7 471,7 @@
  "onboarding.compose.template": "Здраво #Mastodon!",
  "onboarding.follows.empty": "Нажалост, тренутно се не могу приказати резултати. Можете покушати са коришћењем претраге или прегледањем странице за истраживање да бисте пронашли људе које ћете пратити или покушајте поново касније.",
  "onboarding.follows.lead": "Ви сами бирате своју почетну страницу. Што више људи пратите, то ће бити активније и занимљивије. Ови профили могу бити добра полазна тачка—увек можете да их престанете пратити касније!",
  "onboarding.follows.title": "Популарно на Mastodon-у",
  "onboarding.follows.title": "Персонализујте своју почетну страницу",
  "onboarding.share.lead": "Нека људи знају како могу да вас пронађу на Mastodon-у!",
  "onboarding.share.message": "Ја сам {username} на #Mastodon-у! Пратите ме на {url}",
  "onboarding.share.next_steps": "Могући следећи кораци:",


@@ 475,7 480,7 @@
  "onboarding.start.skip": "Желите да прескочите?",
  "onboarding.start.title": "Успели сте!",
  "onboarding.steps.follow_people.body": "Ви сами бирате своју почетну страницу. Хајде да га испунимо занимљивим људима.",
  "onboarding.steps.follow_people.title": "Пратите {count, plural, one {# особу} few {# особе} other {# особа}}",
  "onboarding.steps.follow_people.title": "Персонализујте своју почетну страницу",
  "onboarding.steps.publish_status.body": "Реци здраво свету.",
  "onboarding.steps.publish_status.title": "Напишите своју прву објаву",
  "onboarding.steps.setup_profile.body": "Већа је вероватноћа да ће други комуницирати са вама са попуњеним профилом.",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "Статистике сервера:",
  "sign_in_banner.create_account": "Направите налог",
  "sign_in_banner.sign_in": "Пријавите се",
  "sign_in_banner.sso_redirect": "Пријавите се или се региструјте",
  "sign_in_banner.text": "Пријавите се да бисте пратили профиле или хеш ознаке, означили објаве као омиљене, делили и одговарали на њих. Такође можете комуницирати са свог налога на другом серверу.",
  "status.admin_account": "Отвори модераторско окружење за @{name}",
  "status.admin_domain": "Отвори модераторско окружење за {domain}",

M app/javascript/mastodon/locales/sv.json => app/javascript/mastodon/locales/sv.json +19 -9
@@ 76,6 76,10 @@
  "admin.dashboard.retention.average": "Genomsnittlig",
  "admin.dashboard.retention.cohort": "Registreringsmånad",
  "admin.dashboard.retention.cohort_size": "Nya användare",
  "admin.impact_report.instance_accounts": "Kontoprofiler som det här skulle ta bort",
  "admin.impact_report.instance_followers": "Följare som våra användare skulle förlora",
  "admin.impact_report.instance_follows": "Följare som deras användare skulle förlora",
  "admin.impact_report.title": "Sammanfattning av påverkan",
  "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.",


@@ 186,7 190,6 @@
  "conversation.open": "Visa konversation",
  "conversation.with": "Med {names}",
  "copypaste.copied": "Kopierad",
  "copypaste.copy": "Kopiera",
  "copypaste.copy_to_clipboard": "Kopiera till urklipp",
  "directory.federated": "Från känt fediversum",
  "directory.local": "Endast från {domain}",


@@ 198,6 201,7 @@
  "dismissable_banner.dismiss": "Avfärda",
  "dismissable_banner.explore_links": "Dessa nyheter pratas det om just nu, på denna och på andra servrar i det decentraliserade nätverket.",
  "dismissable_banner.explore_tags": "Dessa hashtaggar pratas det om just nu bland folk på denna och andra servrar i det decentraliserade nätverket.",
  "dismissable_banner.public_timeline": "De här är de aktuella publika inlägg från personer på det sociala nätet som personer i {domain} följer.",
  "embed.instructions": "Bädda in detta inlägg på din webbplats genom att kopiera koden nedan.",
  "embed.preview": "Så här kommer det att se ut:",
  "emoji_button.activity": "Aktivitet",


@@ 224,6 228,7 @@
  "empty_column.direct": "Du har inga privata nämningar. När du skickar eller tar emot ett direktmeddelande kommer det att visas här.",
  "empty_column.domain_blocks": "Det finns ännu inga dolda domäner.",
  "empty_column.explore_statuses": "Ingenting är trendigt just nu. Kom tillbaka senare!",
  "empty_column.favourited_statuses": "Du har inga favoritmarkerade inlägg ännu. När du favoritmärker ett så kommer det att dyka upp här.",
  "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.followed_tags": "Du följer inga hashtaggar ännu. När du gör det kommer de att dyka upp här.",
  "empty_column.hashtag": "Det finns inget i denna hashtag ännu.",


@@ 287,6 292,9 @@
  "hashtag.column_settings.tag_mode.any": "Någon av dessa",
  "hashtag.column_settings.tag_mode.none": "Ingen av dessa",
  "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} deltagare} other {{counter} deltagare}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} inlägg} other {{counter} inlägg}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} inlägg} other {{counter} inlägg}} i dag",
  "hashtag.follow": "Följ hashtagg",
  "hashtag.unfollow": "Avfölj hashtagg",
  "home.actions.go_to_suggestions": "Hitta personer att följa",


@@ 298,9 306,9 @@
  "interaction_modal.description.follow": "Med ett Mastodon-konto kan du följa {name} för att se hens inlägg i ditt hemflöde.",
  "interaction_modal.description.reblog": "Med ett Mastodon-konto kan du boosta detta inlägg för att dela den med dina egna följare.",
  "interaction_modal.description.reply": "Med ett Mastodon-konto kan du svara på detta inlägg.",
  "interaction_modal.no_account_yet": "Inte på Mastodon?",
  "interaction_modal.on_another_server": "På en annan server",
  "interaction_modal.on_this_server": "På denna server",
  "interaction_modal.preamble": "Eftersom Mastodon är decentraliserat kan du använda ditt befintliga konto från en annan Mastodonserver, eller annan kompatibel plattform, om du inte har ett konto på denna.",
  "interaction_modal.title.follow": "Följ {name}",
  "interaction_modal.title.reblog": "Boosta {name}s inlägg",
  "interaction_modal.title.reply": "Svara på {name}s inlägg",


@@ 360,7 368,7 @@
  "lists.replies_policy.title": "Visa svar till:",
  "lists.search": "Sök bland personer du följer",
  "lists.subheading": "Dina listor",
  "load_pending": "{count, plural, other {# objekt}}",
  "load_pending": "{count, plural, one {# nytt objekt} other {# nya objekt}}",
  "loading_indicator.label": "Laddar...",
  "media_gallery.toggle_visible": "Växla synlighet",
  "moved_to_account_banner.text": "Ditt konto {disabledAccount} är för närvarande inaktiverat eftersom du flyttat till {movedToAccount}.",


@@ 407,6 415,7 @@
  "notifications.column_settings.admin.report": "Nya rapporter:",
  "notifications.column_settings.admin.sign_up": "Nya registreringar:",
  "notifications.column_settings.alert": "Skrivbordsaviseringar",
  "notifications.column_settings.favourite": "Favoriter:",
  "notifications.column_settings.filter_bar.advanced": "Visa alla kategorier",
  "notifications.column_settings.filter_bar.category": "Snabbfilter",
  "notifications.column_settings.filter_bar.show_bar": "Visa filterfält",


@@ 462,8 471,8 @@
  "poll.closed": "Stängd",
  "poll.refresh": "Ladda om",
  "poll.reveal": "Visa resultat",
  "poll.total_people": "{persons, plural, one {# person} other {# personer}}",
  "poll.total_votes": "{count, plural, one {1 röst} other {# röster}}",
  "poll.total_people": "{count, plural, one {# person} other {# personer}}",
  "poll.total_votes": "{count, plural, one {# röst} other {# röster}}",
  "poll.vote": "Rösta",
  "poll.voted": "Du röstade för detta svar",
  "poll.votes": "{votes, plural, one {# röst} other {# röster}}",


@@ 554,7 563,7 @@
  "search_results.statuses": "Inlägg",
  "search_results.statuses_fts_disabled": "Att söka efter inlägg baserat på innehåll är inte aktiverat på denna Mastodon-server.",
  "search_results.title": "Sök efter {q}",
  "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
  "search_results.total": "{count, number} {count, plural, one {resultat} other {resultat}}",
  "server_banner.about_active_users": "Personer som använt denna server de senaste 30 dagarna (månatligt aktiva användare)",
  "server_banner.active_users": "aktiva användare",
  "server_banner.administered_by": "Administrerad av:",


@@ 563,6 572,7 @@
  "server_banner.server_stats": "Serverstatistik:",
  "sign_in_banner.create_account": "Skapa konto",
  "sign_in_banner.sign_in": "Logga in",
  "sign_in_banner.sso_redirect": "Logga in eller registrera dig",
  "status.admin_account": "Öppet modereringsgränssnitt för @{name}",
  "status.admin_domain": "Öppet modereringsgränssnitt för @{domain}",
  "status.admin_status": "Öppna detta inlägg i modereringsgränssnittet",


@@ 625,10 635,10 @@
  "tabs_bar.home": "Hem",
  "tabs_bar.notifications": "Aviseringar",
  "time_remaining.days": "{number, plural, one {# dag} other {# dagar}} kvar",
  "time_remaining.hours": "{hours, plural, one {# timme} other {# timmar}} kvar",
  "time_remaining.minutes": "{minutes, plural, one {1 minut} other {# minuter}} kvar",
  "time_remaining.hours": "{number, plural, one {# timme} other {# timmar}} kvar",
  "time_remaining.minutes": "{number, plural, one {# minut} other {# minuter}} kvar",
  "time_remaining.moments": "Återstående tillfällen",
  "time_remaining.seconds": "{hours, plural, one {# sekund} other {# sekunder}} kvar",
  "time_remaining.seconds": "{number, plural, one {# sekund} other {# sekunder}} kvar",
  "timeline_hint.remote_resource_not_displayed": "{resource} från andra servrar visas inte.",
  "timeline_hint.resources.followers": "Följare",
  "timeline_hint.resources.follows": "Följer",

M app/javascript/mastodon/locales/th.json => app/javascript/mastodon/locales/th.json +10 -4
@@ 191,7 191,6 @@
  "conversation.open": "ดูการสนทนา",
  "conversation.with": "กับ {names}",
  "copypaste.copied": "คัดลอกแล้ว",
  "copypaste.copy": "คัดลอก",
  "copypaste.copy_to_clipboard": "คัดลอกไปยังคลิปบอร์ด",
  "directory.federated": "จากจักรวาลสหพันธ์ที่รู้จัก",
  "directory.local": "จาก {domain} เท่านั้น",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "ใดก็ตามนี้",
  "hashtag.column_settings.tag_mode.none": "ไม่ใช่ทั้งหมดนี้",
  "hashtag.column_settings.tag_toggle": "รวมแท็กเพิ่มเติมสำหรับคอลัมน์นี้",
  "hashtag.counter_by_accounts": "{count, plural, other {{counter} ผู้มีส่วนร่วม}}",
  "hashtag.counter_by_uses": "{count, plural, other {{counter} โพสต์}}",
  "hashtag.counter_by_uses_today": "{count, plural, other {{counter} โพสต์}}วันนี้",
  "hashtag.follow": "ติดตามแฮชแท็ก",
  "hashtag.unfollow": "เลิกติดตามแฮชแท็ก",
  "home.actions.go_to_explore": "ดูสิ่งที่กำลังนิยม",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "พื้นฐาน",
  "home.column_settings.show_reblogs": "แสดงการดัน",
  "home.column_settings.show_replies": "แสดงการตอบกลับ",
  "home.explore_prompt.body": "ฟีดหน้าแรกของคุณจะมีการผสมผสานของโพสต์จากแฮชแท็กที่คุณได้เลือกติดตาม, ผู้คนที่คุณได้เลือกติดตาม และโพสต์ที่เขาดัน ฟีดดูค่อนข้างเงียบในตอนนี้ ดังนั้นแล้วถ้าเป็น:",
  "home.explore_prompt.body": "ฟีดหน้าแรกของคุณจะมีการผสมผสานของโพสต์จากแฮชแท็กที่คุณได้เลือกติดตาม, ผู้คนที่คุณได้เลือกติดตาม และโพสต์ที่เขาดัน หากนั่นรู้สึกเงียบเกินไป คุณอาจต้องการ:",
  "home.explore_prompt.title": "นี่คือฐานหน้าแรกของคุณภายใน Mastodon",
  "home.hide_announcements": "ซ่อนประกาศ",
  "home.show_announcements": "แสดงประกาศ",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "ด้วยบัญชีใน Mastodon คุณสามารถติดตาม {name} เพื่อรับโพสต์ของเขาในฟีดหน้าแรกของคุณ",
  "interaction_modal.description.reblog": "ด้วยบัญชีใน Mastodon คุณสามารถดันโพสต์นี้เพื่อแบ่งปันโพสต์กับผู้ติดตามของคุณเอง",
  "interaction_modal.description.reply": "ด้วยบัญชีใน Mastodon คุณสามารถตอบกลับโพสต์นี้",
  "interaction_modal.login.action": "นำฉันกลับบ้าน",
  "interaction_modal.login.prompt": "โดเมนของเซิร์ฟเวอร์บ้านของคุณ เช่น mastodon.social",
  "interaction_modal.no_account_yet": "ไม่ได้อยู่ใน Mastodon?",
  "interaction_modal.on_another_server": "ในเซิร์ฟเวอร์อื่น",
  "interaction_modal.on_this_server": "ในเซิร์ฟเวอร์นี้",
  "interaction_modal.other_server_instructions": "คัดลอกแล้ววาง URL นี้ลงในช่องค้นหาของแอป Mastodon โปรดของคุณหรือส่วนติดต่อเว็บของเซิร์ฟเวอร์ Mastodon ของคุณ",
  "interaction_modal.preamble": "เนื่องจาก Mastodon เป็นแบบกระจายศูนย์ คุณสามารถใช้บัญชีที่มีอยู่ของคุณที่ได้รับการโฮสต์โดยเซิร์ฟเวอร์ Mastodon อื่นหรือแพลตฟอร์มที่เข้ากันได้หากคุณไม่มีบัญชีในเซิร์ฟเวอร์นี้",
  "interaction_modal.sign_in": "คุณไม่ได้เข้าสู่ระบบเซิร์ฟเวอร์นี้ บัญชีของคุณโฮสต์อยู่ที่ไหน?",
  "interaction_modal.sign_in_hint": "เคล็ดลับ: นั่นคือเว็บไซต์ที่คุณได้ลงทะเบียน หากคุณจำไม่ได้ มองหาอีเมลต้อนรับในกล่องขาเข้าของคุณ คุณยังสามารถป้อนชื่อผู้ใช้เต็มของคุณ! (เช่น @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "ชื่นชอบโพสต์ของ {name}",
  "interaction_modal.title.follow": "ติดตาม {name}",
  "interaction_modal.title.reblog": "ดันโพสต์ของ {name}",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "สถิติเซิร์ฟเวอร์:",
  "sign_in_banner.create_account": "สร้างบัญชี",
  "sign_in_banner.sign_in": "เข้าสู่ระบบ",
  "sign_in_banner.sso_redirect": "เข้าสู่ระบบหรือลงทะเบียน",
  "sign_in_banner.text": "เข้าสู่ระบบเพื่อติดตามโปรไฟล์หรือแฮชแท็ก ชื่นชอบ แบ่งปัน และตอบกลับโพสต์ คุณยังสามารถโต้ตอบจากบัญชีของคุณในเซิร์ฟเวอร์อื่น",
  "status.admin_account": "เปิดส่วนติดต่อการควบคุมสำหรับ @{name}",
  "status.admin_domain": "เปิดส่วนติดต่อการควบคุมสำหรับ {domain}",

M app/javascript/mastodon/locales/tr.json => app/javascript/mastodon/locales/tr.json +60 -54
@@ 60,7 60,7 @@
  "account.requested": "Onay bekleniyor. Takip isteğini iptal etmek için tıklayın",
  "account.requested_follow": "{name} size takip isteği gönderdi",
  "account.share": "@{name} adlı kişinin profilini paylaş",
  "account.show_reblogs": "@{name} kişisinin boostlarını göster",
  "account.show_reblogs": "@{name} kişisinin yeniden paylaşımlarını göster",
  "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",


@@ 109,11 109,11 @@
  "column.about": "Hakkında",
  "column.blocks": "Engellenen kullanıcılar",
  "column.bookmarks": "Yer İşaretleri",
  "column.community": "Yerel zaman tüneli",
  "column.community": "Yerel ağ akışı",
  "column.direct": "Özel değinmeler",
  "column.directory": "Profillere göz at",
  "column.domain_blocks": "Engellenen alan adları",
  "column.favourites": "Gözdeler",
  "column.favourites": "Favorilerin",
  "column.firehose": "Anlık Akışlar",
  "column.follow_requests": "Takip istekleri",
  "column.home": "Anasayfa",


@@ 121,7 121,7 @@
  "column.mutes": "Sessize alınmış kullanıcılar",
  "column.notifications": "Bildirimler",
  "column.pins": "Sabitlenmiş gönderiler",
  "column.public": "Federe zaman tüneli",
  "column.public": "Federe ağ akışı",
  "column_back_button.label": "Geri",
  "column_header.hide_settings": "Ayarları gizle",
  "column_header.moveLeft_settings": "Sütunu sola taşı",


@@ 138,7 138,7 @@
  "compose.published.body": "Gönderi yayınlandı.",
  "compose.published.open": "Aç",
  "compose_form.direct_message_warning_learn_more": "Daha fazla bilgi edinin",
  "compose_form.encryption_warning": "Mastodon gönderileri uçtan uca şifrelemeli değildir. Hassas olabilecek herhangi bir bilgiyi Mastodon'da paylaşmayın.",
  "compose_form.encryption_warning": "Mastodon gönderileri uçtan uca şifreli değildir. Hassas olabilecek herhangi bir bilgiyi Mastodon'da paylaşmayınız.",
  "compose_form.hashtag_warning": "Bu gönderi herkese açık olmadığı 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",


@@ 149,8 149,8 @@
  "compose_form.poll.remove_option": "Bu seçeneği kaldır",
  "compose_form.poll.switch_to_multiple": "Birden çok seçeneğe izin vermek için anketi değiştir",
  "compose_form.poll.switch_to_single": "Tek bir seçeneğe izin vermek için anketi değiştir",
  "compose_form.publish": "Tootla",
  "compose_form.publish_form": "Tootla",
  "compose_form.publish": "Gönder",
  "compose_form.publish_form": "Gönder",
  "compose_form.publish_loud": "{publish}!",
  "compose_form.save_changes": "Değişiklikleri kaydet",
  "compose_form.sensitive.hide": "{count, plural, one {Medyayı hassas olarak işaretle} other {Medyayı hassas olarak işaretle}}",


@@ 181,7 181,7 @@
  "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 Düzenle ve yeniden paylaş",
  "confirmations.redraft.message": "Bu gönderiyi silmek ve yeniden paylaşmak istediğinizden emin misiniz? Favoriler ve güncelemeler kaybolacak ve özgün gönderiye verilen yanıtlar silinecek.",
  "confirmations.redraft.message": "Bu gönderiyi silip taslak haline getirmek istediğinize emin misiniz? Mevcut favoriler ve boostlar silinecek ve gönderiye verilen yanıtlar başıboş kalacak.",
  "confirmations.reply.confirm": "Yanıtla",
  "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",


@@ 191,7 191,6 @@
  "conversation.open": "Sohbeti görüntüle",
  "conversation.with": "{names} ile",
  "copypaste.copied": "Kopyalandı",
  "copypaste.copy": "Kopyala",
  "copypaste.copy_to_clipboard": "Panoya kopyala",
  "directory.federated": "Bilinen fediverse'lerden",
  "directory.local": "Yalnızca {domain} adresinden",


@@ 204,7 203,7 @@
  "dismissable_banner.explore_links": "Bu haberler, merkeziyetsiz ağın bu ve diğer sunucularındaki insanlar tarafından şimdilerde konuşuluyor.",
  "dismissable_banner.explore_statuses": "Merkeziyetsiz ağın bu ve diğer sunucularındaki bu gönderiler, mevcut sunucuda şimdilerde ilgi çekiyorlar.",
  "dismissable_banner.explore_tags": "Bu etiketler, merkeziyetsiz ağda bulunan bu ve diğer sunuculardaki insanların şimdilerde ilgisini çekiyor.",
  "dismissable_banner.public_timeline": "Bunlar, {domain} üzeirndeki insanların, sosyal medyada takip ettiği insanlarca gönderilen en son herkese açık gönderilerdir.",
  "dismissable_banner.public_timeline": "Bunlar, {domain} üzerindeki insanların, sosyal ağ da takip ettiği insanlarca gönderilen en son ve herkese açık gönderilerdir.",
  "embed.instructions": "Aşağıdaki kodu kopyalayarak bu durumu sitenize gömün.",
  "embed.preview": "İşte nasıl görüneceği:",
  "emoji_button.activity": "Aktivite",


@@ 231,7 230,7 @@
  "empty_column.direct": "Henüz doğrudan değinmeniz yok. Bir tane gönderdiğinizde veya aldığınızda burada listelenecekler.",
  "empty_column.domain_blocks": "Henüz engellenmiş bir alan adı yok.",
  "empty_column.explore_statuses": "Şu an öne çıkan birşey yok. Daha sonra tekrar bakın!",
  "empty_column.favourited_statuses": "Henüz gözde gönderileriniz yok. En sevdiğin zaman, burada görünecek.",
  "empty_column.favourited_statuses": "Henüz bir gönderiyi favorilerinize eklememişsiniz. Bir gönderiyi favorilerinize eklediğinizde burada görünecek.",
  "empty_column.favourites": "Bu yazıyı henüz hiç kimse beğenmedi. Biri geldiğinde, buraya gelecekler.",
  "empty_column.follow_requests": "Hiç takip isteğiniz yok. Bir tane aldığınızda burada görünecek.",
  "empty_column.followed_tags": "Henüz hiç bir etiket takip etmiyorsunuz. Takip ettiğiniz etiketler burada görüntülenecek.",


@@ 258,7 257,7 @@
  "filter_modal.added.context_mismatch_title": "Bağlam uyumsuzluğu!",
  "filter_modal.added.expired_explanation": "Bu süzgeç kategorisinin süresi dolmuş, süzgeci uygulamak için bitiş tarihini değiştirmeniz gerekiyor.",
  "filter_modal.added.expired_title": "Süresi dolmuş süzgeç!",
  "filter_modal.added.review_and_configure": "Bu süzgeç kategorisini gözden geçirmek ve daha ayrıntılı bir şekilde yapılandırmak için {settings_link} adresine gidin.",
  "filter_modal.added.review_and_configure": "Bu filtre kategorisini gözden geçirmek ve daha ayrıntılı bir şekilde yapılandırmak için {settings_link} adresine gidin.",
  "filter_modal.added.review_and_configure_title": "Süzgeç ayarları",
  "filter_modal.added.settings_link": "ayarlar sayfası",
  "filter_modal.added.short_explanation": "Bu gönderi şu süzgeç kategorisine eklendi: {title}.",


@@ 275,7 274,7 @@
  "firehose.remote": "Diğer sunucular",
  "follow_request.authorize": "İzin Ver",
  "follow_request.reject": "Reddet",
  "follow_requests.unlocked_explanation": "Hesabınız kilitli olmasa bile, {domain} personeli bu hesaplardan gelen takip isteklerini gözden geçirmek isteyebileceğinizi düşündü.",
  "follow_requests.unlocked_explanation": "Hesabınız kilitli olmasa da, {domain} personeli bu hesaplardan gelen takip isteklerini gözden geçirmek isteyebileceğinizi düşündü.",
  "followed_tags": "Takip edilen etiketler",
  "footer.about": "Hakkında",
  "footer.directory": "Profil dizini",


@@ 296,43 295,49 @@
  "hashtag.column_settings.tag_mode.any": "Herhangi biri",
  "hashtag.column_settings.tag_mode.none": "Bunların hiçbiri",
  "hashtag.column_settings.tag_toggle": "Bu sütundaki ek etiketleri içer",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} katılımcı} other {{counter} katılımcı}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} gönderi} other {{counter} gönderi}}",
  "hashtag.counter_by_uses_today": "bugün {count, plural, one {{counter} gönderi} other {{counter} gönderi}}",
  "hashtag.follow": "Etiketi takip et",
  "hashtag.unfollow": "Etiketi takibi bırak",
  "home.actions.go_to_explore": "Öne çıkanları gör",
  "home.actions.go_to_suggestions": "Takip edecek kişileri bulun",
  "home.column_settings.basic": "Temel",
  "home.column_settings.show_reblogs": "Boostları göster",
  "home.column_settings.show_reblogs": "Yeniden paylaşımları göster",
  "home.column_settings.show_replies": "Yanıtları göster",
  "home.explore_prompt.body": "Ana sayfa akışınızda, takip etmeyi seçtiğiniz hashtag'lerden, takip etmeyi seçtiğiniz kişilerden ve öne çıkardıkları gönderilerden oluşan bir karışım bulunur. Şu anda oldukça sessiz görünüyor, peki ya:",
  "home.explore_prompt.body": "Ana sayfa akışınızda, takip etmeyi seçtiğiniz ETİKETlerden, takip etmeyi seçtiğiniz kişilerden ve öne çıkardıkları gönderilerden oluşan bir karışım bulunur. Şu anda oldukça sessiz görünüyor, gör ve takip et :",
  "home.explore_prompt.title": "Burası Mastodon'daki Anasayfanız.",
  "home.hide_announcements": "Duyuruları gizle",
  "home.show_announcements": "Duyuruları göster",
  "interaction_modal.description.favourite": "Mastodon'da bir hesapla, yazarı takdir ettiğinizi bildirmek ve daha sonraya saklamak için bu gönderiyi gözdelerinize ekleyebilirsiniz.",
  "interaction_modal.description.favourite": "Bir Mastodon hesabıyla bu gönderiyi favorilerinize ekleyerek yazara gönderiyi beğendiğinizi bildirebilir ve daha sonrası için kaydedebilirsiniz.",
  "interaction_modal.description.follow": "Mastodon'daki bir hesapla, {name} kişisini, ana akışınızdaki gönderilerini görmek üzere takip edebilirsiniz.",
  "interaction_modal.description.reblog": "Mastodon'daki bir hesapla, bu gönderiyi takipçilerinizle paylaşmak için tuşlayabilirsiniz.",
  "interaction_modal.description.reply": "Mastodon'daki bir hesapla, bu gönderiye yanıt verebilirsiniz.",
  "interaction_modal.login.action": "Anasayfaya geri dön",
  "interaction_modal.login.prompt": "Ev sunucunuzun etki alanı, örneğin mastodon.social",
  "interaction_modal.no_account_yet": "Mastodon açık değil?",
  "interaction_modal.on_another_server": "Farklı bir sunucuda",
  "interaction_modal.on_this_server": "Bu sunucuda",
  "interaction_modal.other_server_instructions": "Bu bağlamtıyı kopyalayıp gözde Mastodon uygulamanızın arama alanına veya Mastodon sunucunuzun web arayüzüne yapıştırın.",
  "interaction_modal.preamble": "Mastodon merkeziyetsiz olduğu için, bu sunucuda bir hesabınız yoksa bile başka bir Mastodon sunucusunda veya uyumlu bir platformda barındırılan mevcut hesabınızı kullanabilirsiniz.",
  "interaction_modal.title.favourite": "Gözde {name}'s gönderisi",
  "interaction_modal.sign_in": "Bu sunucuya giriş yapmadınız. Hesabınız nerede barındırılıyor?",
  "interaction_modal.sign_in_hint": "İpucu: Kaydolduğunuz web sitesi budur. Hatırlamıyorsanız, gelen kutunuzdaki hoş geldiniz e-postasını arayın. Tam kullanıcı adınızı da girebilirsiniz! (örneğin @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "{name} kişisinin gönderisini favorilerine ekle",
  "interaction_modal.title.follow": "{name} kişisini takip et",
  "interaction_modal.title.reblog": "{name} kişisinin gönderisini boostla",
  "interaction_modal.title.reblog": "{name} kişisinin gönderisini yeniden paylaş",
  "interaction_modal.title.reply": "{name} kişisinin gönderisine yanıt ver",
  "intervals.full.days": "{number, plural, one {# gün} other {# gün}}",
  "intervals.full.hours": "{number, plural, one {# saat} other {# saat}}",
  "intervals.full.minutes": "{number, plural, one {# dakika} other {# dakika}}",
  "keyboard_shortcuts.back": "Geriye git",
  "keyboard_shortcuts.blocked": "Engellenen kullanıcılar listesini aç",
  "keyboard_shortcuts.boost": "Gönderiyi boostla",
  "keyboard_shortcuts.boost": "Gönderiyi yeniden paylaş",
  "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": "özel değinmeler sütununu açmak için",
  "keyboard_shortcuts.down": "Listede aşağıya inmek için",
  "keyboard_shortcuts.enter": "gönderiyi aç",
  "keyboard_shortcuts.favourite": "Gözde gönderi",
  "keyboard_shortcuts.favourites": "Gözdendeki listeni aç",
  "keyboard_shortcuts.favourite": "Gönderiyi favorilerine ekle",
  "keyboard_shortcuts.favourites": "Favoriler listeni aç",
  "keyboard_shortcuts.federated": "Federe akışı aç",
  "keyboard_shortcuts.heading": "Klavye kısayolları",
  "keyboard_shortcuts.home": "Ana akışı aç",


@@ 389,14 394,14 @@
  "navigation_bar.advanced_interface": "Gelişmiş web arayüzünde aç",
  "navigation_bar.blocks": "Engellenen kullanıcılar",
  "navigation_bar.bookmarks": "Yer İşaretleri",
  "navigation_bar.community_timeline": "Yerel Zaman Tüneli",
  "navigation_bar.community_timeline": "Yerel ağ akışı",
  "navigation_bar.compose": "Yeni gönderi yaz",
  "navigation_bar.direct": "Özel değinmeler",
  "navigation_bar.discover": "Keşfet",
  "navigation_bar.domain_blocks": "Engellenen alan adları",
  "navigation_bar.edit_profile": "Profili düzenle",
  "navigation_bar.explore": "Keşfet",
  "navigation_bar.favourites": "Gözdelerin",
  "navigation_bar.favourites": "Favorilerin",
  "navigation_bar.filters": "Sessize alınmış kelimeler",
  "navigation_bar.follow_requests": "Takip istekleri",
  "navigation_bar.followed_tags": "Takip edilen etiketler",


@@ 407,19 412,19 @@
  "navigation_bar.personal": "Kişisel",
  "navigation_bar.pins": "Sabitlenmiş gönderiler",
  "navigation_bar.preferences": "Tercihler",
  "navigation_bar.public_timeline": "Federe zaman tüneli",
  "navigation_bar.public_timeline": "Federe ağ akışı",
  "navigation_bar.search": "Arama",
  "navigation_bar.security": "Güvenlik",
  "not_signed_in_indicator.not_signed_in": "Bu kaynağa erişmek için oturum açmanız gerekir.",
  "notification.admin.report": "{name}, {target} kişisini bildirdi",
  "notification.admin.sign_up": "{name} kaydoldu",
  "notification.favourite": "{name} gönderinizi beğendi",
  "notification.favourite": "{name} gönderinizden hoşlandı",
  "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} gönderini boostladı",
  "notification.reblog": "{name} gönderini yeniden paylaştı",
  "notification.status": "{name} az önce gönderdi",
  "notification.update": "{name} bir gönderiyi düzenledi",
  "notifications.clear": "Bildirimleri temizle",


@@ 427,16 432,16 @@
  "notifications.column_settings.admin.report": "Yeni bildirimler:",
  "notifications.column_settings.admin.sign_up": "Yeni kayıtlar:",
  "notifications.column_settings.alert": "Masaüstü bildirimleri",
  "notifications.column_settings.favourite": "Gözdelerin:",
  "notifications.column_settings.favourite": "Favorilerin:",
  "notifications.column_settings.filter_bar.advanced": "Tüm kategorileri görüntüle",
  "notifications.column_settings.filter_bar.category": "Hızlı filtre çubuğu",
  "notifications.column_settings.filter_bar.show_bar": "Süzme çubuğunu göster",
  "notifications.column_settings.filter_bar.category": "Hızlı süzgeç çubuğu",
  "notifications.column_settings.filter_bar.show_bar": "Süzgeç çubuğunu göster",
  "notifications.column_settings.follow": "Yeni takipçiler:",
  "notifications.column_settings.follow_request": "Yeni takip istekleri:",
  "notifications.column_settings.mention": "Değinmeler:",
  "notifications.column_settings.poll": "Anket sonuçları:",
  "notifications.column_settings.push": "Anlık bildirimler",
  "notifications.column_settings.reblog": "Boostlar:",
  "notifications.column_settings.reblog": "Yeniden paylaşanlar:",
  "notifications.column_settings.show": "Sütunda göster",
  "notifications.column_settings.sound": "Ses çal",
  "notifications.column_settings.status": "Yeni gönderiler:",


@@ 444,8 449,8 @@
  "notifications.column_settings.unread_notifications.highlight": "Okunmamış bildirimleri öne çıkar",
  "notifications.column_settings.update": "Düzenlemeler:",
  "notifications.filter.all": "Tümü",
  "notifications.filter.boosts": "Boostlar",
  "notifications.filter.favourites": "Gözdelerin",
  "notifications.filter.boosts": "Yeniden paylaşımlar",
  "notifications.filter.favourites": "Favorilerin",
  "notifications.filter.follows": "Takip edilenler",
  "notifications.filter.mentions": "Değinmeler",
  "notifications.filter.polls": "Anket sonuçları",


@@ 467,14 472,14 @@
  "onboarding.follows.empty": "Maalesef şu an bir sonuç gösterilemiyor. Takip edilecek kişileri bulmak için arama veya keşfet sayfasına gözatmayı kullanabilirsiniz veya daha sonra tekrar deneyin.",
  "onboarding.follows.lead": "Kendi ana akışınızı siz düzenliyorsunuz. Siz daha fazla insanı takip ettikçe, daha etkin ve ilgi çekici olacaktır. Bu profiller iyi bir başlangıç olabilir, isterseniz izlemeyi daha sonra bırakabilirsiniz:",
  "onboarding.follows.title": "Mastodon'da Popüler",
  "onboarding.share.lead": "Kullanıcılara Mastodon'da size nasıl ulaşabileceklerini söyleyin!",
  "onboarding.share.lead": "Kullanıcılara Mastodon'da size nasıl ulaşabileceklerini ifade edin!",
  "onboarding.share.message": "#Mastodon'da kullanıcı adım {username}! Beni takip etmek için {url} bağlantısını kullanın",
  "onboarding.share.next_steps": "Olası sonraki adımlar:",
  "onboarding.share.title": "Profilinizi paylaşın",
  "onboarding.start.lead": "Yeni Mastodon hesabınız kullanıma hazır. Ondan nasıl yararlanabilirsiniz:",
  "onboarding.start.skip": "Şimdilik bunların hepsini atlamak mı istiyorsunuz?",
  "onboarding.start.title": "Başardınız!",
  "onboarding.steps.follow_people.body": "Kendi akışınızı düzenliyorsunuz. Hadi onu ilginç insanlarla dolduralım.",
  "onboarding.steps.follow_people.body": "Kendi akışınızı düzenliyorsunuz. Hadi onu ilginç kullacılarla dolduralım.",
  "onboarding.steps.follow_people.title": "{count, plural, one {Bir kişiyi} other {# kişiyi}} takip edin",
  "onboarding.steps.publish_status.body": "Dünyaya merhaba deyin.",
  "onboarding.steps.publish_status.title": "İlk gönderinizi oluşturun",


@@ 482,7 487,7 @@
  "onboarding.steps.setup_profile.title": "Profilinizi özelleştirin",
  "onboarding.steps.share_profile.body": "Arkadaşlarınıza Mastodon'da size nasıl ulaşabileceklerini söyleyin!",
  "onboarding.steps.share_profile.title": "Profilinizi paylaşın",
  "onboarding.tips.2fa": "<strong>Biliyor muydunuz?</strong> Hesabınızı, hesap ayarlarında iki aşamalı doğrılamayı ayarlayarak güvenli kılabilirsiniz. Sizin seçiminiz olan herhangi bir TOTP uygulamasıyla çalışır, telefon numarası da gerekmiyor!",
  "onboarding.tips.2fa": "<strong>Biliyor muydunuz?</strong> Hesabınızı, hesap ayarlarında iki aşamalı doğrılamayı ayarlayarak güvenli kılabilirsiniz. Sizin seçiminiz olan herhangi bir İki Faktörlü TOTP uygulamasıyla çalışır, telefon numarası da gerekmiyor!",
  "onboarding.tips.accounts_from_other_servers": "<strong>Biliyor muydunuz?</strong> Mastodon ademi merkeziyetçi olduğu için, karşılaştığınız bazı profiller sizinkinden farklı bir sunucuda barındırılacaktır. Buna rağmen onlarla sorunsuz bir şekilde etkileşebilirsiniz! Sunucuları, kullanıcı adlarının ikinci yarısıdır!",
  "onboarding.tips.migration": "<strong>Biliyor muydunuz?</strong> Eğer gelecekte {domain} sunucusunu çok iyi bulmazsanız, takipçilerinizi kaybetmeden başka bir Mastodon sunucusuna taşınabilirsiniz. Kendi sunucunuzu bile oluşturabilirsiniz!",
  "onboarding.tips.verification": "<strong>Biliyor muydunuz?</strong> Hesabınızı, kendi web sitenize Mastodon profilinize bir bağlantı koyarak, sonra da web sitenizin bağlantısını profilinize ekleyerek doğrulayabilirsiniz. Ne ücret ne de bir belge gerekiyor!",


@@ 513,15 518,15 @@
  "refresh": "Yenile",
  "regeneration_indicator.label": "Yükleniyor…",
  "regeneration_indicator.sublabel": "Ana akışın hazırlanıyor!",
  "relative_time.days": "{number}g",
  "relative_time.days": "{number}d",
  "relative_time.full.days": "{number, plural, one {# gün} other {# gün}} önce",
  "relative_time.full.hours": "{number, plural, one {# saat} other {# saat}} önce",
  "relative_time.full.just_now": "şimdi",
  "relative_time.full.minutes": "{number, plural, one {# dakika} other {# dakika}} önce",
  "relative_time.full.seconds": "{number, plural, one {# saniye} other {# saniye}} önce",
  "relative_time.hours": "{number}s",
  "relative_time.hours": "{number}h",
  "relative_time.just_now": "şimdi",
  "relative_time.minutes": "{number}dk",
  "relative_time.minutes": "{number}m",
  "relative_time.seconds": "{number}sn",
  "relative_time.today": "bugün",
  "reply_indicator.cancel": "İptal",


@@ 542,7 547,7 @@
  "report.mute_explanation": "Gönderilerini göremeyeceksiniz. Sizi takip etmeyi sürdürebilir ve gönderilerinizi görebilirler ama sessize alındıklarını anlamayacaklar.",
  "report.next": "Sonraki",
  "report.placeholder": "Ek yorumlar",
  "report.reasons.dislike": "Beğenmedim",
  "report.reasons.dislike": "Hoşlanmadım",
  "report.reasons.dislike_description": "Görmek isteyeceğiniz bir şey değil",
  "report.reasons.legal": "Bu yasalara aykırı",
  "report.reasons.legal_description": "Kendi veya sunucunuzun ülkesinin yasalarını ihlal ettiğini düşünüyorsunuz",


@@ 575,9 580,9 @@
  "search.quick_action.account_search": "Eşleşen profiller {x}",
  "search.quick_action.go_to_account": "Profile git {x}",
  "search.quick_action.go_to_hashtag": "Etikete git {x}",
  "search.quick_action.open_url": "URL'yi Mastodon'da Aç",
  "search.quick_action.open_url": "Bağlantıyı Mastodon'da Aç",
  "search.quick_action.status_search": "Eşleşen gönderiler {x}",
  "search.search_or_paste": "Ara veya URL gir",
  "search.search_or_paste": "Ara veya Bağlantıyı yapıştır",
  "search_popout.quick_actions": "Hızlı eylemler",
  "search_popout.recent": "Son aramalar",
  "search_results.accounts": "Profiller",


@@ 596,14 601,15 @@
  "server_banner.server_stats": "Sunucu istatistikleri:",
  "sign_in_banner.create_account": "Hesap oluştur",
  "sign_in_banner.sign_in": "Giriş yap",
  "sign_in_banner.text": "Profilleri veya etiketleri takip etmek, gözdelerin, paylaşımlar ve gönderileri yanıtlamak için giriş yapın. Hesabınızdan farklı bir sunucuda da etkileşim içinde bulunabilirsiniz.",
  "sign_in_banner.sso_redirect": "Giriş yap veya kaydol",
  "sign_in_banner.text": "Profilleri ve hashtagleri takip etmek, gönderileri favorilerine eklemek, paylaşmak ve yanıtlamak için giriş yap. Farklı bir sunucudaki hesabınla da etkileşimde bulunabilirsin.",
  "status.admin_account": "@{name} için denetim arayüzünü açın",
  "status.admin_domain": "{domain} için denetim arayüzünü açın",
  "status.admin_status": "Denetim arayüzünde bu gönderiyi açın",
  "status.block": "@{name} adlı kişiyi engelle",
  "status.bookmark": "Yer işareti ekle",
  "status.cancel_reblog_private": "Boostu geri al",
  "status.cannot_reblog": "Bu gönderi boost edilemez",
  "status.cancel_reblog_private": "Yeniden paylaşımı geri al",
  "status.cannot_reblog": "Bu gönderi yeniden paylaşılamaz",
  "status.copy": "Bağlantı durumunu kopyala",
  "status.delete": "Sil",
  "status.detailed_status": "Ayrıntılı sohbet görünümü",


@@ 613,9 619,9 @@
  "status.edited": "{date} tarihinde düzenlenmiş",
  "status.edited_x_times": "{count, plural, one {{count} kez} other {{count} kez}} düzenlendi",
  "status.embed": "Gömülü",
  "status.favourite": "Gözdem",
  "status.filter": "Bu gönderiyi filtrele",
  "status.filtered": "Filtrelenmiş",
  "status.favourite": "Favori",
  "status.filter": "Bu gönderiyi süzgeçle",
  "status.filtered": "Süzgeçlenmiş",
  "status.hide": "Gönderiyi gizle",
  "status.history.created": "{name} oluşturdu {date}",
  "status.history.edited": "{name} düzenledi {date}",


@@ 631,11 637,11 @@
  "status.pin": "Profile sabitle",
  "status.pinned": "Sabitlenmiş gönderi",
  "status.read_more": "Devamını okuyun",
  "status.reblog": "Boostla",
  "status.reblog_private": "Orijinal görünürlük ile boostla",
  "status.reblogged_by": "{name} boostladı",
  "status.reblogs.empty": "Henüz hiç kimse bu Toot'u Boost'lamadı. Biri yaptığında burada görünecek.",
  "status.redraft": "Sil ve yeniden taslak yap",
  "status.reblog": "Yeniden paylaş",
  "status.reblog_private": "Özgün görünürlük ile yeniden paylaş",
  "status.reblogged_by": "{name} yeniden paylaştı",
  "status.reblogs.empty": "Henüz hiç kimse bu Gönderiyi Yeniden Paylaşmadı. Herhangi bir kullanıcı yeniden paylaştığında burada görüntülenecek.",
  "status.redraft": "Sil,Düzenle ve Yeniden paylaş",
  "status.remove_bookmark": "Yer işaretini kaldır",
  "status.replied_to": "{name} kullanıcısına yanıt verildi",
  "status.reply": "Yanıtla",

M app/javascript/mastodon/locales/tt.json => app/javascript/mastodon/locales/tt.json +0 -2
@@ 175,7 175,6 @@
  "conversation.open": "Сөйләшүне карау",
  "conversation.with": "{names} белән",
  "copypaste.copied": "Күчереп алынган",
  "copypaste.copy": "Күчереп алу",
  "copypaste.copy_to_clipboard": "Алмашу буферына күчереп алу",
  "directory.federated": "Билгеле галәмнән",
  "directory.local": "Кемнән {domain} гына",


@@ 259,7 258,6 @@
  "interaction_modal.description.reply": "Mastodon аккаунты белән сез бу язмага җавап бирә аласыз.",
  "interaction_modal.on_another_server": "Башка серверда",
  "interaction_modal.on_this_server": "Бу серверда",
  "interaction_modal.preamble": "Mastodon үзәкләштерелмәгәнгә, Сез үзегезнең Mastodon серверына урнаштырылган счетыгызны яки бу серверда счетыгыз булмаса, платформага туры килгән платформаны куллана аласыз.",
  "interaction_modal.title.follow": "Иярү {name}",
  "interaction_modal.title.reblog": "Арттыру {name} сак",
  "interaction_modal.title.reply": "Җавап {name} сак",

M app/javascript/mastodon/locales/uk.json => app/javascript/mastodon/locales/uk.json +10 -4
@@ 191,7 191,6 @@
  "conversation.open": "Переглянути бесіду",
  "conversation.with": "З {names}",
  "copypaste.copied": "Скопійовано",
  "copypaste.copy": "Копіювати",
  "copypaste.copy_to_clipboard": "Копіювати до буфера обміну",
  "directory.federated": "З відомого федесвіту",
  "directory.local": "Лише з домену {domain}",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Який-небудь зі списку",
  "hashtag.column_settings.tag_mode.none": "Жоден зі списку",
  "hashtag.column_settings.tag_toggle": "Додати додаткові теґи до цього стовпчика",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} учасник} few {{counter} учасники} many {{counter} учасників} other {{counter} учасник}}",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} допис} few {{counter} дописи} many {{counter} дописів} other {{counter} допис}}",
  "hashtag.counter_by_uses_today": "{count, plural, one {{counter} допис} few {{counter} дописи} many {{counter} дописів} other {{counter} допис}} сьогодні",
  "hashtag.follow": "Стежити за хештегом",
  "hashtag.unfollow": "Не стежити за хештегом",
  "home.actions.go_to_explore": "Переглянути тенденції",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "Основні",
  "home.column_settings.show_reblogs": "Показувати поширення",
  "home.column_settings.show_replies": "Показувати відповіді",
  "home.explore_prompt.body": "Ваша домашня стрічка буде сумішшю дописів з обраних для стеження хештегів, людей і поширених ними дописів. Зараз тут досить порожньо, тож:",
  "home.explore_prompt.body": "Ваша домашня стрічка буде сумішшю дописів з обраних для стеження хештегів, людей і поширених ними дописів. Якщо цього замало, ви також можете:",
  "home.explore_prompt.title": "Це ваша домашня база у Mastodon.",
  "home.hide_announcements": "Приховати оголошення",
  "home.show_announcements": "Показати оголошення",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "Маючи обліковий запис на Mastodon, ви можете підписатися на {name}, щоб отримувати дописи цього користувача у свою стрічку.",
  "interaction_modal.description.reblog": "Маючи обліковий запис на Mastodon, ви можете поширити цей допис, щоб поділитися ним зі своїми підписниками.",
  "interaction_modal.description.reply": "Маючи обліковий запис на Mastodon, ви можете відповісти на цей допис.",
  "interaction_modal.login.action": "На домашню сторінку",
  "interaction_modal.login.prompt": "Домен вашого домашнього сервера, наприклад, mastodon.social",
  "interaction_modal.no_account_yet": "Не зареєстровані в Mastodon?",
  "interaction_modal.on_another_server": "На іншому сервері",
  "interaction_modal.on_this_server": "На цьому сервері",
  "interaction_modal.other_server_instructions": "Скопіюйте та вставте цю URL-адресу в поле пошуку вашого улюбленого застосунку Mastodon або вебінтерфейсу вашого сервера Mastodon.",
  "interaction_modal.preamble": "Оскільки Mastodon децентралізований, ви можете використовувати свій наявний обліковий запис, розміщений на іншому сервері Mastodon або сумісній платформі, якщо у вас немає облікового запису на цьому сервері.",
  "interaction_modal.sign_in": "Ви не ввійшли на цей сервер. Де розміщений ваш обліковий запис?",
  "interaction_modal.sign_in_hint": "Підказка: це сайт, на якому ви зареєструвалися. Якщо ви не пам'ятаєте, знайдіть привітальний електронний лист у теці \"Вхідні\". Ви також можете ввести повне ім'я користувача! (наприклад, @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Уподобати допис {name}",
  "interaction_modal.title.follow": "Підписатися на {name}",
  "interaction_modal.title.reblog": "Поширити допис {name}",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "Статистика сервера:",
  "sign_in_banner.create_account": "Створити обліковий запис",
  "sign_in_banner.sign_in": "Увійти",
  "sign_in_banner.sso_redirect": "Увійдіть або зареєструйтесь",
  "sign_in_banner.text": "Увійдіть, щоб слідкувати за профілями або хештегами, вподобаними, ділитися і відповідати на дописи. Ви також можете взаємодіяти з вашого облікового запису на іншому сервері.",
  "status.admin_account": "Відкрити інтерфейс модерації для @{name}",
  "status.admin_domain": "Відкрити інтерфейс модерації для {domain}",

M app/javascript/mastodon/locales/ur.json => app/javascript/mastodon/locales/ur.json +27 -1
@@ 1,52 1,73 @@
{
  "about.blocks": "معتدل سرورز",
  "about.contact": "رابطہ:",
  "about.disclaimer": "میسٹادان مفت، اوپن سورس سافٹ ویئر ہے، اور میسٹادان غیر منافع بخش کا ٹریڈ مارک ہے۔",
  "about.domain_blocks.no_reason_available": "وجوہات نہیں دستیاب",
  "about.domain_blocks.silenced.title": "محدود",
  "about.domain_blocks.suspended.title": "معطل شدہ",
  "about.rules": "سرور کے اصول",
  "account.account_note_header": "نوٹ",
  "account.add_or_remove_from_list": "فہرست میں شامل یا برطرف کریں",
  "account.badges.bot": "روبوٹ",
  "account.badges.group": "گروپ",
  "account.block": "مسدود @{name}",
  "account.block_domain": "{domain} سے سب چھپائیں",
  "account.block_short": "بلاک",
  "account.blocked": "مسدود کردہ",
  "account.browse_more_on_origin_server": "اصل پروفائل پر مزید براؤز کریں",
  "account.cancel_follow_request": "Withdraw follow request",
  "account.direct": "نجی طور پر @{name} کا ذکر کریں",
  "account.disable_notifications": "جب @{name} پوسٹ کرے تو مجھ مطلع نہ کریں",
  "account.domain_blocked": "پوشیدہ ڈومین",
  "account.edit_profile": "مشخص ترمیم کریں",
  "account.enable_notifications": "جب @{name} پوسٹ کرے تو مجھ مطلع کریں",
  "account.endorse": "مشکص پر نمایاں کریں",
  "account.featured_tags.last_status_at": "آخری پوسٹ {date} کو",
  "account.featured_tags.last_status_never": "کوئی مراسلہ نہیں",
  "account.featured_tags.title": "{name} کے نمایاں ہیش ٹیگز",
  "account.follow": "پیروی کریں",
  "account.followers": "پیروکار",
  "account.followers.empty": "\"ہنوز اس صارف کی کوئی پیروی نہیں کرتا\".",
  "account.followers_counter": "{count, plural,one {{counter} پیروکار} other {{counter} پیروکار}}",
  "account.following": "فالو کر رہے ہیں",
  "account.following_counter": "{count, plural, one {{counter} پیروی کر رہے ہیں} other {{counter} پیروی کر رہے ہیں}}",
  "account.follows.empty": "\"یہ صارف ہنوز کسی کی پیروی نہیں کرتا ہے\".",
  "account.follows_you": "آپ کا پیروکار ہے",
  "account.go_to_profile": "پروفائل پر جائیں",
  "account.hide_reblogs": "@{name} سے فروغ چھپائیں",
  "account.in_memoriam": "یادگار میں۔",
  "account.joined_short": "شمولیت",
  "account.languages": "سبسکرائب شدہ زبانیں بدلیں",
  "account.link_verified_on": "اس لنک کی ملکیت کی توثیق {date} پر کی گئی تھی",
  "account.locked_info": "اس اکاونٹ کا اخفائی ضابطہ مقفل ہے۔ صارف کی پیروی کون کر سکتا ہے اس کا جائزہ وہ خود لیتا ہے.",
  "account.media": "وسائل",
  "account.mention": "ذکر @{name}",
  "account.moved_to": "{name} نے اشارہ کیا ہے کہ ان کا نیا اکاؤنٹ اب ہے:",
  "account.mute": "خاموش @{name}",
  "account.mute_notifications_short": "نوٹیفیکیشنز کو خاموش کریں",
  "account.mute_short": "خاموش",
  "account.muted": "خاموش کردہ",
  "account.no_bio": "کوئی تفصیل نہیں دی گئی۔",
  "account.open_original_page": "اصل صفحہ کھولیں",
  "account.posts": "ٹوٹ",
  "account.posts_with_replies": "ٹوٹ اور جوابات",
  "account.report": "@{name} اطلاع کریں",
  "account.requested": "منظوری کا منتظر۔ درخواستِ پیروی منسوخ کرنے کیلئے کلک کریں",
  "account.requested_follow": "{name} آپ کو فالو کرنا چھاتا ہے۔",
  "account.share": "@{name} کے مشخص کو بانٹیں",
  "account.show_reblogs": "@{name} کی افزائشات کو دکھائیں",
  "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
  "account.unblock": "@{name} کو بحال کریں",
  "account.unblock_domain": "{domain} کو نہ چھپائیں",
  "account.unblock_short": "بلاک ختم کریں",
  "account.unendorse": "مشخص پر نمایاں نہ کریں",
  "account.unfollow": "پیروی ترک کریں",
  "account.unmute": "@{name} کو با آواز کریں",
  "account.unmute_notifications_short": "نوٹیفیکیشنز کو خاموش نہ کریں",
  "account.unmute_short": "کو خاموش نہ کریں",
  "account_note.placeholder": "Click to add a note",
  "admin.dashboard.retention.average": "اوسط",
  "admin.dashboard.retention.cohort_size": "نئے یسرز",
  "alert.rate_limited.message": "\"{retry_time, time, medium} کے بعد کوشش کریں\".",
  "alert.rate_limited.title": "محدود شرح",
  "alert.unexpected.message": "ایک غیر متوقع سہو ہوا ہے.",


@@ 54,7 75,11 @@
  "announcement.announcement": "اعلان",
  "autosuggest_hashtag.per_week": "{count} فی ہفتہ",
  "boost_modal.combo": "آئیندہ یہ نہ دیکھنے کیلئے آپ {combo} دبا سکتے ہیں",
  "bundle_column_error.error.title": "اوف، نہیں!",
  "bundle_column_error.network.title": "نیٹ ورک کی خرابی",
  "bundle_column_error.retry": "دوبارہ کوشش کریں",
  "bundle_column_error.return": "واپس گھر جاؤ",
  "bundle_column_error.routing.title": "۴۰۴",
  "bundle_modal_error.close": "بند کریں",
  "bundle_modal_error.message": "اس عنصر کو برآمد کرتے وقت کچھ خرابی پیش آئی ہے.",
  "bundle_modal_error.retry": "دوبارہ کوشش کریں",


@@ 64,6 89,7 @@
  "column.community": "مقامی زمانی جدول",
  "column.directory": "مشخصات کا مطالعہ کریں",
  "column.domain_blocks": "پوشیدہ ڈومین",
  "column.favourites": "پسندیدہ",
  "column.follow_requests": "پیروی درخواست",
  "column.home": "خانہ",
  "column.lists": "فہرستیں",


@@ 130,7 156,6 @@
  "conversation.mark_as_read": "بطور پڑھا ہوا دکھائیں",
  "conversation.open": "گفتگو دیکھیں",
  "conversation.with": "{names} کے ساتھ",
  "copypaste.copy": "کاپی کریں",
  "directory.federated": "معروف فیڈی ورس سے",
  "directory.local": "صرف {domain} سے",
  "directory.new_arrivals": "نئے آنے والے",


@@ 165,6 190,7 @@
  "errors.unexpected_crash.report_issue": "مسئلہ کی اطلاع کریں",
  "follow_request.authorize": "اجازت دیں",
  "follow_request.reject": "انکار کریں",
  "footer.about": "متعلق",
  "getting_started.heading": "آغاز کریں",
  "hashtag.column_header.tag_mode.all": "اور {additional}",
  "hashtag.column_header.tag_mode.any": "یا {additional}",

M app/javascript/mastodon/locales/uz.json => app/javascript/mastodon/locales/uz.json +0 -2
@@ 172,7 172,6 @@
  "conversation.open": "Suhbatni ko'rish",
  "conversation.with": "{names} bilan",
  "copypaste.copied": "Ko‘chirildi",
  "copypaste.copy": "Nusxa olish",
  "directory.federated": "Faqat bilingan fediversdan",
  "directory.local": "Faqat {domain}dan",
  "directory.new_arrivals": "Yangi kelganlar",


@@ 278,7 277,6 @@
  "interaction_modal.description.reply": "Mastodondagi akkaunt bilan siz ushbu xabarga javob berishingiz mumkin.",
  "interaction_modal.on_another_server": "Boshqa serverda",
  "interaction_modal.on_this_server": "Shu serverda",
  "interaction_modal.preamble": "Mastodon markazlashtirilmaganligi sababli, boshqa Mastodon serverida joylashgan mavjud hisob qaydnomangizdan yoki bu serverda akkauntingiz bo'lmasa, unga mos platformadan foydalanishingiz mumkin.",
  "interaction_modal.title.follow": "{name} ga ergashing",
  "interaction_modal.title.reblog": "{name}ning postini boost qilish",
  "interaction_modal.title.reply": "{name} postiga javob bering",

M app/javascript/mastodon/locales/vi.json => app/javascript/mastodon/locales/vi.json +33 -27
@@ 59,7 59,7 @@
  "account.report": "Báo cáo @{name}",
  "account.requested": "Đang chờ chấp thuận. Nhấp vào đây để hủy yêu cầu theo dõi",
  "account.requested_follow": "{name} yêu cầu theo dõi bạn",
  "account.share": "Chia sẻ trang @{name}",
  "account.share": "Chia sẻ @{name}",
  "account.show_reblogs": "Hiện tút do @{name} đăng lại",
  "account.statuses_counter": "{count, plural, one {{counter} Tút} other {{counter} Tút}}",
  "account.unblock": "Bỏ chặn @{name}",


@@ 104,8 104,8 @@
  "closed_registrations.other_server_instructions": "Vì Mastodon liên hợp nên bạn có thể tạo tài khoản trên máy chủ khác và vẫn tương tác với máy chủ này.",
  "closed_registrations_modal.description": "{domain} hiện tắt đăng ký, nhưng hãy lưu ý rằng bạn không cần một tài khoản riêng trên {domain} để sử dụng Mastodon.",
  "closed_registrations_modal.find_another_server": "Tìm máy chủ khác",
  "closed_registrations_modal.preamble": "Mastodon liên hợp, vì vậy bất kể bạn tạo tài khoản ở đâu, bạn sẽ có thể theo dõi và tương tác với bất kỳ ai trên máy chủ này. Bạn thậm chí có thể tự mở máy chủ!",
  "closed_registrations_modal.title": "Đăng ký trên Mastodon",
  "closed_registrations_modal.preamble": "Mastodon liên hợp nên bất kể bạn tạo tài khoản ở đâu, bạn cũng sẽ có thể theo dõi và tương tác với mọi người trên máy chủ này. Bạn thậm chí có thể tự mở máy chủ!",
  "closed_registrations_modal.title": "Đăng ký Mastodon",
  "column.about": "Giới thiệu",
  "column.blocks": "Người đã chặn",
  "column.bookmarks": "Đã lưu",


@@ 114,7 114,7 @@
  "column.directory": "Tìm người cùng sở thích",
  "column.domain_blocks": "Máy chủ đã chặn",
  "column.favourites": "Lượt thích",
  "column.firehose": "Bản tin trực tiếp",
  "column.firehose": "Bảng tin",
  "column.follow_requests": "Yêu cầu theo dõi",
  "column.home": "Bảng tin",
  "column.lists": "Danh sách",


@@ 191,7 191,6 @@
  "conversation.open": "Xem toàn bộ tin nhắn",
  "conversation.with": "Với {names}",
  "copypaste.copied": "Đã sao chép",
  "copypaste.copy": "Sao chép",
  "copypaste.copy_to_clipboard": "Sao chép vào bộ nhớ tạm",
  "directory.federated": "Từ mạng liên hợp",
  "directory.local": "Từ {domain}",


@@ 199,12 198,12 @@
  "directory.recently_active": "Hoạt động gần đây",
  "disabled_account_banner.account_settings": "Cài đặt tài khoản",
  "disabled_account_banner.text": "Tài khoản {disabledAccount} của bạn hiện không khả dụng.",
  "dismissable_banner.community_timeline": "Những tút gần đây của những người có tài khoản thuộc máy chủ {domain}.",
  "dismissable_banner.community_timeline": "Đây là những tút gần đây từ những người thuộc máy chủ {domain}.",
  "dismissable_banner.dismiss": "Bỏ qua",
  "dismissable_banner.explore_links": "Những sự kiện đang được thảo luận nhiều trên máy chủ này và những máy chủ khác thuộc mạng liên hợp của nó.",
  "dismissable_banner.explore_statuses": "Những tút đang phổ biến trên máy chủ này và mạng liên hợp của nó.",
  "dismissable_banner.explore_tags": "Những hashtag đang được sử dụng nhiều trên máy chủ này và những máy chủ khác thuộc mạng liên hợp của nó.",
  "dismissable_banner.public_timeline": "Đây là những tút công khai gần đây nhất của những người trong mạng liên hợp của {domain}.",
  "dismissable_banner.public_timeline": "Đây là những tút công khai gần đây từ những người trong mạng liên hợp của {domain}.",
  "embed.instructions": "Sao chép đoạn mã dưới đây và chèn vào trang web của bạn.",
  "embed.preview": "Nó sẽ hiển thị như vầy:",
  "emoji_button.activity": "Hoạt động",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "Một phần",
  "hashtag.column_settings.tag_mode.none": "Không chọn",
  "hashtag.column_settings.tag_toggle": "Bao gồm thêm hashtag cho cột này",
  "hashtag.counter_by_accounts": "{count, plural, other {{counter} người dùng}}",
  "hashtag.counter_by_uses": "{count, plural, other {{counter} tút}}",
  "hashtag.counter_by_uses_today": "{count, plural, other {{counter} tút}} hôm nay",
  "hashtag.follow": "Theo dõi hashtag",
  "hashtag.unfollow": "Ngưng theo dõi hashtag",
  "home.actions.go_to_explore": "Khám phá xu hướng",


@@ 308,13 310,16 @@
  "home.hide_announcements": "Ẩn thông báo máy chủ",
  "home.show_announcements": "Hiện thông báo máy chủ",
  "interaction_modal.description.favourite": "Với tài khoản Mastodon, bạn có thể cho người đăng biết bạn thích tút này và lưu lại tút.",
  "interaction_modal.description.follow": "Với tài khoản Mastodon, bạn có thể theo dõi {name} để nhận những tút của họ trên bảng tin của mình.",
  "interaction_modal.description.follow": "Với tài khoản Mastodon, bạn có thể theo dõi {name} để tút của họ hiện trên bảng tin của mình.",
  "interaction_modal.description.reblog": "Với tài khoản Mastodon, bạn có thể đăng lại tút này để chia sẻ nó với những người đang theo dõi bạn.",
  "interaction_modal.description.reply": "Với tài khoản Mastodon, bạn có thể bình luận tút này.",
  "interaction_modal.on_another_server": "Trên một máy chủ khác",
  "interaction_modal.description.reply": "Với tài khoản Mastodon, bạn có thể trả lời tút này.",
  "interaction_modal.login.action": "Đăng nhập ngay",
  "interaction_modal.login.prompt": "Địa chỉ máy chủ của bạn, vd: mastodon.social",
  "interaction_modal.no_account_yet": "Chưa có tài khoản Mastodon?",
  "interaction_modal.on_another_server": "Trên máy chủ khác",
  "interaction_modal.on_this_server": "Trên máy chủ này",
  "interaction_modal.other_server_instructions": "Sao chép và dán URL này vào thanh tìm kiếm của ứng dụng Mastodon hoặc giao diện web máy chủ Mastodon mà bạn hiện dùng.",
  "interaction_modal.preamble": "Do Mastodon phi tập trung, bạn có thể sử dụng tài khoản hiện có trên một máy chủ Mastodon khác hoặc một nền tảng tương thích nếu bạn chưa có tài khoản trên máy chủ này.",
  "interaction_modal.sign_in": "Bạn chưa đăng nhập. Bạn đã có tài khoản ở máy chủ khác?",
  "interaction_modal.sign_in_hint": "Mẹo: Đó là trang web nơi bạn đã đăng ký. Nếu không nhớ, lục lại trong email của bạn. Bạn cũng có thể nhập địa chỉ Mastodon đầy đủ! (vd: @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "Thích tút của {name}",
  "interaction_modal.title.follow": "Theo dõi {name}",
  "interaction_modal.title.reblog": "Đăng lại tút của {name}",


@@ 334,7 339,7 @@
  "keyboard_shortcuts.favourite": "Thích tút",
  "keyboard_shortcuts.favourites": "Mở lượt thích",
  "keyboard_shortcuts.federated": "mở mạng liên hợp",
  "keyboard_shortcuts.heading": "Các phím tắt",
  "keyboard_shortcuts.heading": "Danh sách phím tắt",
  "keyboard_shortcuts.home": "mở bảng tin",
  "keyboard_shortcuts.hotkey": "Phím tắt",
  "keyboard_shortcuts.legend": "hiện bảng hướng dẫn này",


@@ 526,22 531,22 @@
  "relative_time.today": "hôm nay",
  "reply_indicator.cancel": "Hủy bỏ",
  "report.block": "Chặn",
  "report.block_explanation": "Bạn sẽ không thấy tút của họ nữa. Họ cũng không thể theo dõi hoặc thấy tút của bạn. Họ sẽ biết là họ đã bị chặn.",
  "report.block_explanation": "Bạn sẽ không còn thấy tút của người này. Họ sẽ không thể thấy tút của bạn hoặc theo dõi bạn. Họ biết là bạn đã chặn họ.",
  "report.categories.other": "Khác",
  "report.categories.spam": "Spam",
  "report.categories.violation": "Vi phạm nội quy máy chủ",
  "report.category.subtitle": "Chọn mục gần khớp nhất",
  "report.category.title": "Có vấn đề gì với {type}",
  "report.category.subtitle": "Chọn lý do phù hợp nhất:",
  "report.category.title": "{type} này có vấn đề gì?",
  "report.category.title_account": "người này",
  "report.category.title_status": "tút",
  "report.close": "Xong",
  "report.comment.title": "Bạn nghĩ chúng tôi nên biết thêm điều gì?",
  "report.comment.title": "Có điều gì mà chúng tôi cần biết không?",
  "report.forward": "Chuyển đến {target}",
  "report.forward_hint": "Người này thuộc máy chủ khác. Gửi một báo cáo ẩn danh tới máy chủ đó?",
  "report.mute": "Ẩn",
  "report.mute_explanation": "Bạn sẽ không thấy tút của họ nữa. Họ cũng không thể theo dõi hoặc thấy tút của bạn. Họ sẽ không biết là họ đã bị bạn ẩn.",
  "report.mute_explanation": "Bạn sẽ không còn thấy tút của người này. Họ vẫn có thể thấy tút của bạn hoặc theo dõi bạn. Họ không biết là bạn đã chặn họ.",
  "report.next": "Tiếp theo",
  "report.placeholder": "Bổ sung thêm",
  "report.placeholder": "Thêm lưu ý",
  "report.reasons.dislike": "Tôi không thích nó",
  "report.reasons.dislike_description": "Đó không phải là thứ gì mà bạn muốn thấy",
  "report.reasons.legal": "Vi phạm pháp luật",


@@ 558,7 563,7 @@
  "report.statuses.title": "Bạn muốn báo cáo tút nào?",
  "report.submit": "Gửi đi",
  "report.target": "Báo cáo {target}",
  "report.thanks.take_action": "Đây là một số cách để kiểm soát thứ bạn nhìn thấy trên Mastodon:",
  "report.thanks.take_action": "Đây là cách kiểm soát những thứ mà bạn thấy:",
  "report.thanks.take_action_actionable": "Trong lúc chờ chúng tôi xem xét, bạn có thể áp dụng hành động với @{name}:",
  "report.thanks.title": "Không muốn xem thứ này?",
  "report.thanks.title_actionable": "Cảm ơn đã báo cáo, chúng tôi sẽ xem xét kỹ.",


@@ 572,18 577,18 @@
  "report_notification.open": "Mở báo cáo",
  "search.no_recent_searches": "Không có tìm kiếm gần đây",
  "search.placeholder": "Tìm kiếm",
  "search.quick_action.account_search": "Người trùng khớp {x}",
  "search.quick_action.account_search": "Người có tên {x}",
  "search.quick_action.go_to_account": "Xem trang {x}",
  "search.quick_action.go_to_hashtag": "Xem hashtag {x}",
  "search.quick_action.open_url": "Mở liên kết trong Mastodon",
  "search.quick_action.status_search": "Tút trùng khớp {x}",
  "search.quick_action.status_search": "Tút nhắc đến {x}",
  "search.search_or_paste": "Tìm kiếm hoặc nhập URL",
  "search_popout.quick_actions": "Thao tác nhanh",
  "search_popout.recent": "Tìm kiếm gần đây",
  "search_results.accounts": "Mọi người",
  "search_results.all": "Toàn bộ",
  "search_results.hashtags": "Hashtags",
  "search_results.nothing_found": "Không tìm thấy kết quả trùng khớp",
  "search_results.hashtags": "Hashtag",
  "search_results.nothing_found": "Không tìm thấy gì",
  "search_results.statuses": "Tút",
  "search_results.statuses_fts_disabled": "Máy chủ của bạn không bật tính năng tìm kiếm tút.",
  "search_results.title": "Tìm kiếm {q}",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "Thống kê:",
  "sign_in_banner.create_account": "Đăng ký",
  "sign_in_banner.sign_in": "Đăng nhập",
  "sign_in_banner.sso_redirect": "Đăng nhập",
  "sign_in_banner.text": "Đăng nhập để theo dõi người hoặc hashtag, thích, chia sẻ và trả lời tút. Bạn cũng có thể tương tác từ tài khoản của mình trên một máy chủ khác.",
  "status.admin_account": "Mở giao diện quản trị @{name}",
  "status.admin_domain": "Mở giao diện quản trị @{domain}",


@@ 627,7 633,7 @@
  "status.more": "Thêm",
  "status.mute": "Ẩn @{name}",
  "status.mute_conversation": "Không quan tâm nữa",
  "status.open": "Xem nguyên văn",
  "status.open": "Đọc tút",
  "status.pin": "Ghim lên hồ sơ",
  "status.pinned": "Tút đã ghim",
  "status.read_more": "Đọc tiếp",


@@ 637,9 643,9 @@
  "status.reblogs.empty": "Tút này chưa có ai đăng lại. Nếu có, nó sẽ hiển thị ở đây.",
  "status.redraft": "Xóa và viết lại",
  "status.remove_bookmark": "Bỏ lưu",
  "status.replied_to": "{name} viết tiếp",
  "status.replied_to": "Trả lời {name}",
  "status.reply": "Trả lời",
  "status.replyAll": "Trả lời người đăng tút",
  "status.replyAll": "Trả lời",
  "status.report": "Báo cáo @{name}",
  "status.sensitive_warning": "Nhạy cảm",
  "status.share": "Chia sẻ",

M app/javascript/mastodon/locales/zh-CN.json => app/javascript/mastodon/locales/zh-CN.json +10 -7
@@ 1,5 1,5 @@
{
  "about.blocks": "被限制的服务器",
  "about.blocks": "服务器被限制",
  "about.contact": "联系方式:",
  "about.disclaimer": "Mastodon 是自由的开源软件,商标由 Mastodon gGmbH 持有。",
  "about.domain_blocks.no_reason_available": "原因不可用",


@@ 172,7 172,7 @@
  "confirmations.discard_edit_media.confirm": "丢弃",
  "confirmations.discard_edit_media.message": "您还有未保存的媒体描述或预览修改,仍要丢弃吗?",
  "confirmations.domain_block.confirm": "屏蔽整个域名",
  "confirmations.domain_block.message": "你真的确定要屏蔽所有来自 {domain} 的内容吗?多数情况下,屏蔽或隐藏几个特定的用户就已经足够了。来自该网站的内容将不再出现在你的任何公共时间轴或通知列表里。来自该网站的关注者将会被移除。",
  "confirmations.domain_block.message": "你真的确定要屏蔽所有来自 {domain} 的内容吗?多数情况下,对几个特定的用户进行屏蔽或禁用对他们的消息提醒就足够了。屏蔽后,来自该域名的内容将不再出现在你任何的公共时间轴或通知列表里,你来自该域名下的关注者也将被移除。",
  "confirmations.edit.confirm": "编辑",
  "confirmations.edit.message": "编辑此消息将会覆盖当前正在撰写的信息。仍要继续吗?",
  "confirmations.logout.confirm": "退出登录",


@@ 191,7 191,6 @@
  "conversation.open": "查看对话",
  "conversation.with": "与 {names}",
  "copypaste.copied": "已复制",
  "copypaste.copy": "复制",
  "copypaste.copy_to_clipboard": "复制到剪贴板",
  "directory.federated": "来自已知联邦宇宙",
  "directory.local": "仅来自 {domain}",


@@ 303,7 302,7 @@
  "home.column_settings.basic": "基本设置",
  "home.column_settings.show_reblogs": "显示转嘟",
  "home.column_settings.show_replies": "显示回复",
  "home.explore_prompt.body": "你的主页动态会推送一系列关注的话题标签和用户,以及转发的嘟文。目前看起来比较清静,不妨试一下:",
  "home.explore_prompt.body": "你的主页动态会推送一系列关注的话题标签和用户,以及转发的嘟文。如果你觉得过于清净,不妨试一下:",
  "home.explore_prompt.title": "这是你在 Mastodon 的主页。",
  "home.hide_announcements": "隐藏公告",
  "home.show_announcements": "显示公告",


@@ 311,10 310,13 @@
  "interaction_modal.description.follow": "拥有一个 Mastodon 账号,你可以关注 {name} 并在自己的主页上接收对方的新嘟文。",
  "interaction_modal.description.reblog": "拥有一个 Mastodon 账号,你可以向自己的关注者们转发此嘟文。",
  "interaction_modal.description.reply": "拥有一个 Mastodon 账号,你可以回复此嘟文。",
  "interaction_modal.login.action": "转到主页",
  "interaction_modal.login.prompt": "您所入驻的服务器域名,如:mastodon.social",
  "interaction_modal.no_account_yet": "不在 Mastodon 上?",
  "interaction_modal.on_another_server": "在另一服务器",
  "interaction_modal.on_this_server": "在此服务器",
  "interaction_modal.other_server_instructions": "将此URL复制并粘贴到您喜欢的Mastodon应用程序的搜索栏中,或者粘贴到你的Mastodon实例的Web界面中。",
  "interaction_modal.preamble": "基于 Mastodon 去中心化的特性,如果你在本站没有账号,也可以使用在另一 Mastodon 服务器或其他兼容平台上的已有账号。",
  "interaction_modal.sign_in": "您尚未登录此服务器,您的账号托管在哪?",
  "interaction_modal.sign_in_hint": "提示:这是您注册的网站,如果您不记得了,请在邮箱的收件箱中查找欢迎邮件。您还可以输入完整的用户名!(例如 @Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "喜欢 {name} 的嘟文",
  "interaction_modal.title.follow": "关注 {name}",
  "interaction_modal.title.reblog": "转发 {name} 的嘟文",


@@ 596,6 598,7 @@
  "server_banner.server_stats": "服务器统计数据:",
  "sign_in_banner.create_account": "创建账户",
  "sign_in_banner.sign_in": "登录",
  "sign_in_banner.sso_redirect": "登录或注册",
  "sign_in_banner.text": "登录关注用户和话题标签,喜欢、分享和回复嘟文。您还可以与其他服务器上的用户进行互动。",
  "status.admin_account": "打开 @{name} 的管理界面",
  "status.admin_domain": "打开 {domain} 的管理界面",


@@ 667,7 670,7 @@
  "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.remote_resource_not_displayed": "不会显示来自其它服务器的{resource}",
  "timeline_hint.resources.followers": "关注者",
  "timeline_hint.resources.follows": "关注",
  "timeline_hint.resources.statuses": "更早的嘟文",

M app/javascript/mastodon/locales/zh-HK.json => app/javascript/mastodon/locales/zh-HK.json +0 -2
@@ 188,7 188,6 @@
  "conversation.open": "檢視對話",
  "conversation.with": "與 {names}",
  "copypaste.copied": "已複製",
  "copypaste.copy": "複製",
  "copypaste.copy_to_clipboard": "複製到剪貼簿",
  "directory.federated": "來自已知的聯盟網絡",
  "directory.local": "僅來自 {domain}",


@@ 301,7 300,6 @@
  "interaction_modal.description.reply": "在 Mastodon 上擁有帳號的話,您可以回覆此帖文。",
  "interaction_modal.on_another_server": "於不同伺服器",
  "interaction_modal.on_this_server": "於此伺服器",
  "interaction_modal.preamble": "由於 Mastodon 是去中心化的,即使您於此伺服器上沒有帳號,仍可以利用託管於其他 Mastodon 伺服器或相容平台上的既存帳號。",
  "interaction_modal.title.follow": "追蹤 {name}",
  "interaction_modal.title.reblog": "轉發 {name} 的帖文",
  "interaction_modal.title.reply": "回覆 {name} 的帖文",

M app/javascript/mastodon/locales/zh-TW.json => app/javascript/mastodon/locales/zh-TW.json +12 -6
@@ 33,9 33,9 @@
  "account.follow": "跟隨",
  "account.followers": "跟隨者",
  "account.followers.empty": "尚未有人跟隨這位使用者。",
  "account.followers_counter": "被 {count, plural,one {{counter} 人}other {{counter} 人}} 跟隨",
  "account.followers_counter": "被 {count, plural,one {{counter} 人}other {{counter} 人}}跟隨",
  "account.following": "跟隨中",
  "account.following_counter": "正在跟隨 {count, plural,one {{counter}}other {{counter} 人}}",
  "account.following_counter": "正在跟隨 {count, plural, one {{counter} 人} other {{counter} 人}}",
  "account.follows.empty": "這位使用者尚未跟隨任何人。",
  "account.follows_you": "跟隨了您",
  "account.go_to_profile": "前往個人檔案",


@@ 191,7 191,6 @@
  "conversation.open": "檢視對話",
  "conversation.with": "與 {names}",
  "copypaste.copied": "已複製",
  "copypaste.copy": "複製",
  "copypaste.copy_to_clipboard": "複製到剪貼簿",
  "directory.federated": "來自已知聯邦宇宙",
  "directory.local": "僅來自 {domain} 網域",


@@ 296,6 295,9 @@
  "hashtag.column_settings.tag_mode.any": "任一",
  "hashtag.column_settings.tag_mode.none": "全不",
  "hashtag.column_settings.tag_toggle": "將額外標籤加入到這個欄位",
  "hashtag.counter_by_accounts": "{count, plural, one {{counter} 名} other {{counter} 名}}參與者",
  "hashtag.counter_by_uses": "{count, plural, one {{counter} 則} other {{counter} 則}}嘟文",
  "hashtag.counter_by_uses_today": "本日有 {count, plural, one {{counter} 則} other {{counter} 則}}嘟文",
  "hashtag.follow": "追蹤主題標籤",
  "hashtag.unfollow": "取消追蹤主題標籤",
  "home.actions.go_to_explore": "看看發生什麼新鮮事",


@@ 303,7 305,7 @@
  "home.column_settings.basic": "基本設定",
  "home.column_settings.show_reblogs": "顯示轉嘟",
  "home.column_settings.show_replies": "顯示回覆",
  "home.explore_prompt.body": "您的首頁時間軸將由您所跟隨之主題標籤、帳號以及其轉嘟所組成。目前似乎有點空,是否要考慮這些:",
  "home.explore_prompt.body": "您的首頁時間軸將由您所跟隨之主題標籤、帳號以及其轉嘟所組成。若目前流速有點慢,您可以考慮以下幾點:",
  "home.explore_prompt.title": "這是您於 Mastodon 的基地",
  "home.hide_announcements": "隱藏公告",
  "home.show_announcements": "顯示公告",


@@ 311,10 313,13 @@
  "interaction_modal.description.follow": "在 Mastodon 上有個帳號的話,您可以跟隨 {name} 以於首頁時間軸接收他們的嘟文。",
  "interaction_modal.description.reblog": "在 Mastodon 上有個帳號的話,您可以轉嘟此嘟文以分享給您的跟隨者們。",
  "interaction_modal.description.reply": "在 Mastodon 上有個帳號的話,您可以回覆此嘟文。",
  "interaction_modal.login.action": "返回首頁",
  "interaction_modal.login.prompt": "您帳號所屬伺服器之網域,例如:mastodon.social",
  "interaction_modal.no_account_yet": "還沒有 Mastodon 帳號嗎?",
  "interaction_modal.on_another_server": "於不同伺服器",
  "interaction_modal.on_this_server": "於此伺服器",
  "interaction_modal.other_server_instructions": "複製貼上此 URL 至您愛用的 Mastodon 應用程式或您 Mastodon 伺服器網頁介面之搜尋欄。",
  "interaction_modal.preamble": "由於 Mastodon 是去中心化的,即便您於此沒有帳號,仍可以利用託管於其他 Mastodon 伺服器或相容平台上的既存帳號。",
  "interaction_modal.sign_in": "您未登入於此伺服器。您的帳號是於何方託管呢?",
  "interaction_modal.sign_in_hint": "提示:這是您所註冊之網站。若您無法回想起,請檢查您電子信箱收件夾內之歡迎信。您也能輸入完整帳號名稱!(如:@Mastodon@mastodon.social)",
  "interaction_modal.title.favourite": "將 {name} 之嘟文加入最愛",
  "interaction_modal.title.follow": "跟隨 {name}",
  "interaction_modal.title.reblog": "轉嘟 {name} 的嘟文",


@@ 596,6 601,7 @@
  "server_banner.server_stats": "伺服器統計:",
  "sign_in_banner.create_account": "新增帳號",
  "sign_in_banner.sign_in": "登入",
  "sign_in_banner.sso_redirect": "登入或註冊",
  "sign_in_banner.text": "登入以跟隨個人檔案和主題標籤,或收藏、分享和回覆嘟文。您也可以使用您的帳號在其他伺服器上進行互動。",
  "status.admin_account": "開啟 @{name} 的管理介面",
  "status.admin_domain": "開啟 {domain} 的管理介面",

M app/javascript/styles/mastodon-light/diff.scss => app/javascript/styles/mastodon-light/diff.scss +4 -0
@@ 424,6 424,10 @@ html {
  border-bottom: 0;
}

.column-settings__hashtags .column-select__option {
  color: $white;
}

.dashboard__quick-access,
.focal-point__preview strong,
.admin-wrapper .content__heading__tabs a.selected {

M app/javascript/styles/mastodon/components.scss => app/javascript/styles/mastodon/components.scss +47 -6
@@ 4249,16 4249,19 @@ a.status-card {
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba($black, 0.5);
    background: transparent;
    width: 100%;
    height: 100%;
    padding: 0;
    margin: 0;
    border: 0;
    border-radius: 4px;
    color: $white;

    &__label {
      background-color: rgba($black, 0.45);
      backdrop-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%);
      border-radius: 6px;
      padding: 10px 15px;
      display: flex;
      align-items: center;
      justify-content: center;


@@ 4272,6 4275,13 @@ a.status-card {
      font-weight: 400;
      font-size: 13px;
    }

    &:hover,
    &:focus {
      .spoiler-button__overlay__label {
        background-color: rgba($black, 0.9);
      }
    }
  }
}



@@ 5815,15 5825,16 @@ a.status-card {
  }

  .button.button-secondary {
    border-color: $ui-button-secondary-border-color;
    color: $ui-button-secondary-color;
    border-color: $inverted-text-color;
    color: $inverted-text-color;
    flex: 0 0 auto;

    &:hover,
    &:focus,
    &:active {
      border-color: $ui-button-secondary-focus-background-color;
      color: $ui-button-secondary-focus-color;
      background: transparent;
      border-color: $ui-button-background-color;
      color: $ui-button-background-color;
    }
  }



@@ 9220,3 9231,33 @@ noscript {
    background: rgba($ui-base-color, 0.85);
  }
}

.hashtag-header {
  border-bottom: 1px solid lighten($ui-base-color, 8%);
  padding: 15px;
  font-size: 17px;
  line-height: 22px;
  color: $darker-text-color;

  strong {
    font-weight: 700;
  }

  &__header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 15px;
    gap: 15px;

    h1 {
      color: $primary-text-color;
      white-space: nowrap;
      text-overflow: ellipsis;
      overflow: hidden;
      font-size: 22px;
      line-height: 33px;
      font-weight: 700;
    }
  }
}

M app/lib/link_details_extractor.rb => app/lib/link_details_extractor.rb +5 -0
@@ 113,6 113,7 @@ class LinkDetailsExtractor
      title: title || '',
      description: description || '',
      image_remote_url: image,
      image_description: image_alt || '',
      type: type,
      link_type: link_type,
      width: width || 0,


@@ 168,6 169,10 @@ class LinkDetailsExtractor
    valid_url_or_nil(opengraph_tag('og:image'))
  end

  def image_alt
    opengraph_tag('og:image:alt')
  end

  def canonical_url
    valid_url_or_nil(link_tag('canonical') || opengraph_tag('og:url'), same_origin_only: true) || @original_url.to_s
  end

M app/models/application_record.rb => app/models/application_record.rb +1 -1
@@ 5,7 5,7 @@ class ApplicationRecord < ActiveRecord::Base

  include Remotable

  connects_to database: { writing: :primary, reading: ENV['DB_REPLICA_NAME'] || ENV['READ_DATABASE_URL'] ? :read : :primary }
  connects_to database: { writing: :primary, reading: ENV['REPLICA_DB_NAME'] || ENV['REPLICA_DATABASE_URL'] ? :replica : :primary }

  class << self
    def update_index(_type_name, *_args, &_block)

M app/models/list.rb => app/models/list.rb +1 -1
@@ 10,7 10,7 @@
#  created_at     :datetime         not null
#  updated_at     :datetime         not null
#  replies_policy :integer          default("list"), not null
#  exclusive      :boolean          default(FALSE)
#  exclusive      :boolean          default(FALSE), not null
#

class List < ApplicationRecord

M app/models/preview_card.rb => app/models/preview_card.rb +1 -0
@@ 31,6 31,7 @@
#  trendable                    :boolean
#  link_type                    :integer
#  published_at                 :datetime
#  image_description            :string           default(""), not null
#

class PreviewCard < ApplicationRecord

M app/models/status.rb => app/models/status.rb +1 -1
@@ 169,7 169,7 @@ class Status < ApplicationRecord
  REAL_TIME_WINDOW = 6.hours

  def cache_key
    "v2:#{super}"
    "v3:#{super}"
  end

  def searchable_by(preloaded = nil)

M app/serializers/initial_state_serializer.rb => app/serializers/initial_state_serializer.rb +5 -0
@@ 46,6 46,7 @@ class InitialStateSerializer < ActiveModel::Serializer
      single_user_mode: Rails.configuration.x.single_user_mode,
      trends_as_landing_page: Setting.trends_as_landing_page,
      status_page_url: Setting.status_page_url,
      sso_redirect: sso_redirect,
    }

    if object.current_account


@@ 125,4 126,8 @@ class InitialStateSerializer < ActiveModel::Serializer
  def instance_presenter
    @instance_presenter ||= InstancePresenter.new
  end

  def sso_redirect
    "/auth/auth/#{Devise.omniauth_providers[0]}" if ENV['OMNIAUTH_ONLY'] == 'true' && Devise.omniauth_providers.length == 1
  end
end

M app/serializers/rest/preview_card_serializer.rb => app/serializers/rest/preview_card_serializer.rb +1 -1
@@ 6,7 6,7 @@ class REST::PreviewCardSerializer < ActiveModel::Serializer
  attributes :url, :title, :description, :language, :type,
             :author_name, :author_url, :provider_name,
             :provider_url, :html, :width, :height,
             :image, :embed_url, :blurhash, :published_at
             :image, :image_description, :embed_url, :blurhash, :published_at

  def image
    object.image? ? full_asset_url(object.image.url(:original)) : nil

M app/services/account_search_service.rb => app/services/account_search_service.rb +143 -88
@@ 8,6 8,143 @@ class AccountSearchService < BaseService
  # Min. number of characters to look for non-exact matches
  MIN_QUERY_LENGTH = 5

  class QueryBuilder
    def initialize(query, account, options = {})
      @query = query
      @account = account
      @options = options
    end

    def build
      AccountsIndex.query(
        bool: {
          must: {
            function_score: {
              query: {
                bool: {
                  must: must_clauses,
                },
              },

              functions: [
                reputation_score_function,
                followers_score_function,
                time_distance_function,
              ],
            },
          },

          should: should_clauses,
        }
      )
    end

    private

    def must_clauses
      if @account && @options[:following]
        [core_query, only_following_query]
      else
        [core_query]
      end
    end

    def should_clauses
      if @account && !@options[:following]
        [boost_following_query]
      else
        []
      end
    end

    # This function limits results to only the accounts the user is following
    def only_following_query
      {
        terms: {
          id: following_ids,
        },
      }
    end

    # This function promotes accounts the user is following
    def boost_following_query
      {
        terms: {
          id: following_ids,
          boost: 100,
        },
      }
    end

    # This function deranks accounts that follow more people than follow them
    def reputation_score_function
      {
        script_score: {
          script: {
            source: "(Math.max(doc['followers_count'].value, 0) + 0.0) / (Math.max(doc['followers_count'].value, 0) + Math.max(doc['following_count'].value, 0) + 1)",
          },
        },
      }
    end

    # This function promotes accounts that have more followers
    def followers_score_function
      {
        script_score: {
          script: {
            source: "(Math.max(doc['followers_count'].value, 0) / (Math.max(doc['followers_count'].value, 0) + 1))",
          },
        },
      }
    end

    # This function deranks accounts that haven't posted in a long time
    def time_distance_function
      {
        gauss: {
          last_status_at: {
            scale: '30d',
            offset: '30d',
            decay: 0.3,
          },
        },
      }
    end

    def following_ids
      @following_ids ||= @account.active_relationships.pluck(:target_account_id) + [@account.id]
    end
  end

  class AutocompleteQueryBuilder < QueryBuilder
    private

    def core_query
      {
        multi_match: {
          query: @query,
          type: 'bool_prefix',
          fields: %w(username username.* display_name display_name.*),
        },
      }
    end
  end

  class FullQueryBuilder < QueryBuilder
    private

    def core_query
      {
        multi_match: {
          query: @query,
          type: 'most_fields',
          fields: %w(username^2 display_name^2 text text.*),
          operator: 'and',
        },
      }
    end
  end

  def call(query, account = nil, options = {})
    @query   = query&.strip&.gsub(/\A@/, '')
    @limit   = options[:limit].to_i


@@ 71,27 208,15 @@ class AccountSearchService < BaseService
  end

  def from_elasticsearch
    must_clauses   = must_clause
    should_clauses = should_clause

    if account
      return [] if options[:following] && following_ids.empty?

      if options[:following]
        must_clauses << { terms: { id: following_ids } }
      elsif following_ids.any?
        should_clauses << { terms: { id: following_ids, boost: 100 } }
    query_builder = begin
      if options[:use_searchable_text]
        FullQueryBuilder.new(terms_for_query, account, options.slice(:following))
      else
        AutocompleteQueryBuilder.new(terms_for_query, account, options.slice(:following))
      end
    end

    query     = { bool: { must: must_clauses, should: should_clauses } }
    functions = [reputation_score_function, followers_score_function, time_distance_function]

    records = AccountsIndex.query(function_score: { query: query, functions: functions })
                           .limit(limit_for_non_exact_results)
                           .offset(offset)
                           .objects
                           .compact
    records = query_builder.build.limit(limit_for_non_exact_results).offset(offset).objects.compact

    ActiveRecord::Associations::Preloader.new(records: records, associations: :account_stat)



@@ 100,76 225,6 @@ class AccountSearchService < BaseService
    nil
  end

  def reputation_score_function
    {
      script_score: {
        script: {
          source: "(Math.max(doc['followers_count'].value, 0) + 0.0) / (Math.max(doc['followers_count'].value, 0) + Math.max(doc['following_count'].value, 0) + 1)",
        },
      },
    }
  end

  def followers_score_function
    {
      script_score: {
        script: {
          source: "Math.log10(Math.max(doc['followers_count'].value, 0) + 2)",
        },
      },
    }
  end

  def time_distance_function
    {
      gauss: {
        last_status_at: {
          scale: '30d',
          offset: '30d',
          decay: 0.3,
        },
      },
    }
  end

  def must_clause
    if options[:start_with_hashtag]
      fields = %w(text text.*)
    else
      fields = %w(username username.* display_name display_name.*)
      fields << 'text' << 'text.*' if options[:use_searchable_text]
    end

    [
      {
        multi_match: {
          query: terms_for_query,
          fields: fields,
          type: 'best_fields',
          operator: 'or',
        },
      },
    ]
  end

  def should_clause
    [
      {
        multi_match: {
          query: terms_for_query,
          fields: %w(username username.* display_name display_name.*),
          type: 'best_fields',
          operator: 'and',
          boost: 10,
        },
      },
    ]
  end

  def following_ids
    @following_ids ||= account.active_relationships.pluck(:target_account_id) + [account.id]
  end

  def limit_for_non_exact_results
    return 0 if @account.nil? && query.size < MIN_QUERY_LENGTH


M app/services/bulk_import_service.rb => app/services/bulk_import_service.rb +5 -2
@@ 162,10 162,9 @@ class BulkImportService < BaseService

  def import_lists!
    rows = @import.rows.to_a
    included_lists = rows.map { |row| row.data['list_name'] }.uniq

    if @import.overwrite?
      included_lists = rows.map { |row| row.data['list_name'] }.uniq

      @account.owned_lists.where.not(title: included_lists).destroy_all

      # As list membership changes do not retroactively change timeline


@@ 175,6 174,10 @@ class BulkImportService < BaseService
      end
    end

    included_lists.each do |title|
      @account.owned_lists.find_or_create_by!(title: title)
    end

    Import::RowWorker.push_bulk(rows) do |row|
      [row.id]
    end

M config/database.yml => config/database.yml +8 -8
@@ 15,7 15,7 @@ development:
    password: <%= (ENV['DB_PASS'] || '').to_json %>
    host: <%= ENV['DB_HOST'] %>
    port: <%= ENV['DB_PORT'] %>
  read:
  replica:
    <<: *default
    database: <%= ENV['DB_NAME'] || 'mastodon_development' %>
    username: <%= ENV['DB_USER'] %>


@@ 35,7 35,7 @@ test:
    password: <%= (ENV['DB_PASS'] || '').to_json %>
    host: <%= ENV['DB_HOST'] %>
    port: <%= ENV['DB_PORT'] %>
  read:
  replica:
    <<: *default
    database: <%= ENV['DB_NAME'] || 'mastodon' %>_test<%= ENV['TEST_ENV_NUMBER'] %>
    username: <%= ENV['DB_USER'] %>


@@ 53,12 53,12 @@ production:
    host: <%= ENV['DB_HOST'] || 'localhost' %>
    port: <%= ENV['DB_PORT'] || 5432 %>
    prepared_statements: <%= ENV['PREPARED_STATEMENTS'] || 'true' %>
  read:
  replica:
    <<: *default
    database: <%= ENV['DB_REPLICA_NAME'] ||ENV['DB_NAME'] || 'mastodon_production' %>
    username: <%= ENV['DB_REPLICA_USER'] ||ENV['DB_USER'] || 'mastodon' %>
    password: <%= (ENV['DB_REPLICA_PASS'] || ENV['DB_PASS'] || '').to_json %>
    host: <%= ENV['DB_REPLICA_HOST'] ||ENV['DB_HOST'] || 'localhost' %>
    port: <%= ENV['DB_REPLICA_PORT'] ||ENV['DB_PORT'] || 5432 %>
    database: <%= ENV['REPLICA_DB_NAME'] ||ENV['DB_NAME'] || 'mastodon_production' %>
    username: <%= ENV['REPLICA_DB_USER'] ||ENV['DB_USER'] || 'mastodon' %>
    password: <%= (ENV['REPLICA_DB_PASS'] || ENV['DB_PASS'] || '').to_json %>
    host: <%= ENV['REPLICA_DB_HOST'] ||ENV['DB_HOST'] || 'localhost' %>
    port: <%= ENV['REPLICA_DB_PORT'] ||ENV['DB_PORT'] || 5432 %>
    prepared_statements: <%= ENV['PREPARED_STATEMENTS'] || 'true' %>
    replica: true

M config/initializers/paperclip.rb => config/initializers/paperclip.rb +8 -2
@@ 90,13 90,19 @@ if ENV['S3_ENABLED'] == '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_FORCE_SINGLE_REQUEST'] == 'true'
  # and https://github.com/mastodon/mastodon/issues/26394
  if ENV['S3_FORCE_SINGLE_REQUEST'] == 'true' || ENV['S3_DISABLE_CHECKSUM_MODE'] == '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' })

            options = {}
            options[:mode] = 'single_request' if ENV['S3_FORCE_SINGLE_REQUEST'] == 'true'
            options[:checksum_mode] = 'DISABLED' if ENV['S3_DISABLE_CHECKSUM_MODE'] == 'true'

            s3_object(style).download_file(local_dest_path, options)
          rescue Aws::Errors::ServiceError => e
            warn("#{e} - cannot copy #{path(style)} to local file #{local_dest_path}")
            false

A config/initializers/statsd.rb => config/initializers/statsd.rb +15 -0
@@ 0,0 1,15 @@
# frozen_string_literal: true

if ENV['STATSD_ADDR'].present?
  host, port = ENV['STATSD_ADDR'].split(':')

  statsd = Statsd.new(host, port)
  statsd.namespace = ENV.fetch('STATSD_NAMESPACE') { ['Mastodon', Rails.env].join('.') }

  NSA.inform_statsd(statsd) do |informant|
    informant.collect(:action_controller, :web)
    informant.collect(:active_record, :db)
    informant.collect(:active_support_cache, :cache)
    informant.collect(:sidekiq, :sidekiq) if ENV['STATSD_SIDEKIQ'] == 'true'
  end
end

M config/locales/activerecord.cs.yml => config/locales/activerecord.cs.yml +4 -0
@@ 53,3 53,7 @@ cs:
            position:
              elevated: nemůže být vyšší než vaše aktuální role
              own_role: nelze změnit s vaší aktuální rolí
        webhook:
          attributes:
            events:
              invalid_permissions: nelze zahrnout události, k nimž nemáte práva

M config/locales/activerecord.ms.yml => config/locales/activerecord.ms.yml +4 -0
@@ 53,3 53,7 @@ ms:
            position:
              elevated: tidak boleh lebih tinggi daripada peranan semasa anda
              own_role: tidak boleh diubah dengan peranan semasa anda
        webhook:
          attributes:
            events:
              invalid_permissions: tidak boleh memasukkan acara yang anda tidak mempunyai hak untuk melakukannya

M config/locales/activerecord.nn.yml => config/locales/activerecord.nn.yml +4 -0
@@ 53,3 53,7 @@ nn:
            position:
              elevated: kan ikkje vere høgare enn di noverande rolle
              own_role: kan ikkje endrast med di noverande rolle
        webhook:
          attributes:
            events:
              invalid_permissions: kan ikkje inkludere hendingar du ikkje har rettar til

M config/locales/activerecord.no.yml => config/locales/activerecord.no.yml +7 -3
@@ 8,7 8,7 @@
      user:
        agreement: Tjenesteavtale
        email: E-postadresse
        locale: Landstandard
        locale: Språk
        password: Passord
      user/account:
        username: Brukernavn


@@ 24,11 24,11 @@
        admin/webhook:
          attributes:
            url:
              invalid: er ikke en gyldig nettadresse
              invalid: er ikke en gyldig lenke
        doorkeeper/application:
          attributes:
            website:
              invalid: er ikke en gyldig nettadresse
              invalid: er ikke en gyldig lenke
        import:
          attributes:
            data:


@@ 53,3 53,7 @@
            position:
              elevated: kan ikke være høyere enn din nåværende rolle
              own_role: kan ikke endres med din nåværende rolle
        webhook:
          attributes:
            events:
              invalid_permissions: kan ikke inkludere hendelser du ikke har rettigheter til

M config/locales/activerecord.ru.yml => config/locales/activerecord.ru.yml +4 -0
@@ 53,3 53,7 @@ ru:
            position:
              elevated: не может быть выше, чем ваша текущая роль
              own_role: невозможно изменить с вашей текущей ролью
        webhook:
          attributes:
            events:
              invalid_permissions: нельзя включать события, к которым у вас нет прав

M config/locales/ar.yml => config/locales/ar.yml +13 -0
@@ 779,6 779,7 @@ ar:
          approved: طلب الموافقة لازم عند إنشاء حساب
          none: لا أحد يمكنه إنشاء حساب
          open: يمكن للجميع إنشاء حساب
      title: إعدادات الخادم
    site_uploads:
      delete: احذف الملف الذي تم تحميله
      destroyed_msg: تم حذف التحميل مِن الموقع بنجاح!


@@ 1039,6 1040,7 @@ ar:
      back: العودة
      invited_by: 'يمكنك الانضمام إلى %{domain} بفضل الدعوة التي تلقيتها من:'
      preamble: يتم تعيين هذه القوانين وفرضها من قبل مشرفي %{domain}.
      preamble_invited: قبل المتابعة، يرجى قراءة القواعد الأساسية التي وضعها مشرفو %{domain}.
      title: بعض القواعد الأساسية.
      title_invited: لقد تلقيت دعوة.
    security: الأمان


@@ 1142,6 1144,7 @@ ar:
  domain_validator:
    invalid_domain: ليس بإسم نطاق صالح
  edit_profile:
    basic_information: معلومات أساسية
    other: أخرى
    safety_and_privacy: الأمان والخصوصية
  errors:


@@ 1264,12 1267,17 @@ ar:
      overwrite: إعادة الكتابة
      overwrite_long: استبدال التسجيلات الحالية بالجديدة
    preface: بإمكانك استيراد بيانات قد قُمتَ بتصديرها مِن مثيل خادم آخَر، كقوائم المستخدِمين الذين كنتَ تتابِعهم أو قُمتَ بحظرهم.
    states:
      finished: تم
      in_progress: قيد الإنجاز
    success: تم تحميل بياناتك بنجاح وسيتم معالجتها في الوقت المناسب
    type: نوع الاستيراد
    types:
      blocking: قائمة المحظورين
      bookmarks: الفواصل المرجعية
      domain_blocking: قائمة النطاقات المحظورة
      following: قائمة المستخدمين المتبوعين
      lists: القوائم
      muting: قائمة الكتم
    upload: تحميل
  invites:


@@ 1315,6 1323,7 @@ ar:
  mail_subscriptions:
    unsubscribe:
      complete: إلغاء الاشتراك
      title: إلغاء الاشتراك
  media_attachments:
    validations:
      images_and_video: ليس بالإمكان إرفاق فيديو في منشور يحتوي مسبقا على صور


@@ 1430,6 1439,7 @@ ar:
      expired: لقد انتهى استطلاع الرأي
      invalid_choice: خيار التصويت الذي قُمتَ يتحديده غير موجود
      over_character_limit: لا يمكن أن يكون أطول من %{max} حرف لكل واحد
      self_vote: لا يمكنك التصويت في استطلاعاتك الخاصة
      too_few_options: يجب أن يحتوي على أكثر من عنصر واحد
      too_many_options: لا يمكنه أن يحتوي أكثر مِن %{max} عناصر
  preferences:


@@ 1748,12 1758,15 @@ ar:
      title: أهلاً بك، %{name}!
  users:
    follow_limit_reached: لا يمكنك متابعة أكثر مِن %{limit} أشخاص
    go_to_sso_account_settings: انتقل إلى إعدادات حساب مزود الهوية الخاص بك
    invalid_otp_token: رمز المصادقة بخطوتين غير صالح
    otp_lost_help_html: إن فقدتَهُما ، يمكنك الاتصال بـ %{email}
    seamless_external_login: لقد قمت بتسجيل الدخول عبر خدمة خارجية، إنّ إعدادات الكلمة السرية و البريد الإلكتروني غير متوفرة.
    signed_in_as: 'تم تسجيل دخولك بصفة:'
  verification:
    here_is_how: إليك كيف ذلك
    verification: التحقق
    verified_links: روابطك التي تم التحقق منها
  webauthn_credentials:
    add: إضافة مفتاح أمان جديد
    create:

M config/locales/be.yml => config/locales/be.yml +5 -0
@@ 798,6 798,7 @@ be:
          approved: Для рэгістрацыі патрабуецца пацвярджэнне
          none: Нікому не магчыма зарэгістравацца
          open: Любому магчыма зарэгістравацца
      title: Налады сервера
    site_uploads:
      delete: Выдаліць запампаваны файл
      destroyed_msg: Загрузка сайту паспяхова выдалена!


@@ 1314,12 1315,14 @@ be:
      bookmarks_html: Вы збіраецеся <strong>замяніць свае закладкі</strong> на <strong>%{total_items} допісаў</strong> з файла <strong>%{filename}</strong>.
      domain_blocking_html: Вы збіраецеся <strong>замяніць свой спіс блакіроўкі даменаў</strong> на <strong>%{total_items} даменаў</strong> з файла <strong>%{filename}</strong>.
      following_html: Вы збіраецеся <strong>падпісацца</strong> на <strong>%{total_items} уліковых запісаў</strong> з файла <strong>%{filename}</strong> і <strong> адпісацца ад усіх іншых карыстальнікаў</strong>.
      lists_html: Вы збіраецеся <strong>замяніць свае спісы</strong> змесцівам з <strong>%{filename}</strong>. Да <strong>%{total_items} уліковых запісаў</strong> будуць дададзены ў новыя спісы.
      muting_html: Вы збіраецеся <strong>замяніць свой спіс ігнараваных уліковых запісаў</strong> на <strong>%{total_items} уліковых запісаў</strong> з файла <strong>%{filename}</strong>.
    preambles:
      blocking_html: Вы збіраецеся <strong>заблакіраваць</strong> да <strong>%{total_items} уліковых запісаў</strong> з файла<strong>%{filename}</strong>.
      bookmarks_html: Вы збіраецеся дадаць да <strong>%{total_items} паведамленняў</strong> з файла <strong>%{filename}</strong> у вашы <strong>закладкі</strong>.
      domain_blocking_html: Вы збіраецеся <strong>заблакіраваць</strong> да <strong>%{total_items} даменаў</strong> з файла <strong>%{filename}</strong>.
      following_html: Вы збіраецеся <strong>падпісацца </strong> на<strong>%{total_items} уліковых запісаў</strong> з файла <strong>%{filename}</strong>.
      lists_html: Вы збіраецеся дадаць да <strong>%{total_items} уліковых запісаў</strong> з <strong>%{filename}</strong> у вашы <strong>спісы</strong>. Новыя спісы будуць створаны, калі іх няма.
      muting_html: Вы збіраецеся <strong>ігнараваць</strong> да <strong>%{total_items} уліковых запісаў</strong> з файла <strong>%{filename}</strong>.
    preface: Вы можаце імпартаваць даныя, экспартаваныя вамі з іншага сервера, напрыклад, спіс людзей, на якіх вы падпісаны або якіх блакуеце.
    recent_imports: Нядаўнія імпарты


@@ 1336,6 1339,7 @@ be:
      bookmarks: Імпарт закладак
      domain_blocking: Імпарт заблакіраваных даменаў
      following: Імпарт падпісаных уліковых запісаў
      lists: Імпартаванне спісаў
      muting: Імпарт ігнараваных уліковых запісаў
    type: Тып імпарту
    type_groups:


@@ 1346,6 1350,7 @@ be:
      bookmarks: Закладкі
      domain_blocking: Спіс заблакіраваных даменаў
      following: Падпіскі
      lists: Спісы
      muting: Спіс ігнаравання
    upload: Запампаваць
  invites:

M config/locales/bn.yml => config/locales/bn.yml +16 -0
@@ 5,12 5,14 @@ bn:
    contact_missing: নেই
    contact_unavailable: প্রযোজ্য নয়
    hosted_on: এই মাস্টাডনটি আছে %{domain} এ
    title: পরিচিতি
  accounts:
    follow: যুক্ত
    followers:
      one: যুক্ত আছে
      other: যারা যুক্ত হয়েছে
    following: যুক্ত করা
    instance_actor_flash: এই অ্যাকাউন্টটি একটি ভার্চুয়াল সত্তা যা সার্ভারের প্রতিনিধিত্ব করতে ব্যবহৃত হয় এবং কোনও স্বতন্ত্র ব্যবহারকারী নয়। এটি ফেডারেশনের উদ্দেশ্যে ব্যবহার করা হয় এবং স্থগিত করা উচিত নয়.
    last_active: শেষ সক্রিয় ছিল
    link_verified_on: এই লিংকের মালিকানা শেষ চেক করা হয়  %{date} তারিখে
    nothing_here: এখানে কিছুই নেই!


@@ 31,21 33,32 @@ bn:
    accounts:
      add_email_domain_block: নিষিদ্ধ করা ই-মেইল ডোমেইন
      approve: অনুমোদন দিন
      approved_msg: "%{username}-এর অ্যাকাউন্ট সৃষ্টি আবেদন সফলভাবে অনুমোদিত হয়েছে"
      are_you_sure: আপনি কি নিশ্চিত ?
      avatar: অবতার
      by_domain: ওয়েবসাইট/কার্যক্ষেত্র
      change_email:
        changed_msg: ইমেল সফলভাবে পরিবর্তিত হয়েছে!
        current_email: এখনকার ইমেইল
        label: ইমেইল পরিবর্তন
        new_email: নতুন ইমেইল
        submit: ইমেইল পরিবর্তন
        title: "%{username} এর ইমেইল পরিবর্তন"
      change_role:
        changed_msg: ভূমিকা সফলভাবে পরিবর্তিত!
        label: ভূমিকা পরিবর্তন করুন
        no_role: কোন ভূমিকা বরাদ্দ করা হয়নি
        title: "%{username}-এর ভূমিকা পরিবর্তন করুন"
      confirm: নিশ্চিত করুন
      confirmed: নিশ্চিত হয়েছে
      confirming: নিশ্চিত করা হচ্ছে
      custom: বিশেষ
      delete: ডেটা মুছুন
      deleted: মুছে ফেলা হয়েছে
      demote: নিচের পদে দিন
      destroyed_msg: "%{username}-এর ডেটা এখন সারিবদ্ধভাবে মুছে ফেলা হবে"
      disable: বন্ধ করুন
      disable_sign_in_token_auth: ই-মেইল টোকেন প্রমাণীকরণ অক্ষম করুন
      disable_two_factor_authentication: দুই পদ্ধতির প্রমাণীকরণ(2FA) বন্ধ করুন
      disabled: বন্ধ করা হয়েছে
      display_name: দেখানোর জন্য নাম


@@ 54,11 67,14 @@ bn:
      email: ইমেইল
      email_status: ইমেইলের অবস্থা
      enable: চালু করুন
      enable_sign_in_token_auth: ই-মেইল টোকেন প্রমাণীকরণ সক্ষম করুন
      enabled: চালু করুন
      enabled_msg: "%{username}-এর অ্যাকাউন্ট সফলভাবে আনফ্রোজ করা হয়েছে"
      followers: অনুসরকারীরা
      follows: অনুসরণ করে
      header: শিরোলেখা
      inbox_url: চিঠি পাওয়ার বক্স লিংক
      invite_request_text: যোগদানের কারণ
      invited_by: আমন্ত্রণ করেছে
      ip: আইপি(IP)
      joined: যোগ দিয়েছে

M config/locales/br.yml => config/locales/br.yml +4 -0
@@ 289,8 289,10 @@ br:
    view_status: Gwelet ar c'hannad
  auth:
    delete_account: Dilemel ar gont
    delete_account_html: Ma fell deoc'h dilemel ho kont e c'hellit <a href="%{path}">klikañ amañ</a>. Goulennet e vo ganeoc'h kadarnaat an obererezh.
    login: Mont tre
    logout: Digennaskañ
    migrate_account_html: Ma fell deoc'h adkas ar gont-mañ war-zu unan all e c'hellit <a href="%{path}">arventenniñ an dra-se amañ</a>.
    providers:
      cas: CAS
      saml: SAML


@@ 390,6 392,8 @@ br:
    table:
      uses: Implijoù
    title: Pediñ tud
  migrations:
    incoming_migrations_html: Evit dilojañ ur gont all da homañ e rankit <a href="%{path}">sevel un alias</a> da gentañ.
  moderation:
    title: Habaskadur
  notification_mailer:

M config/locales/ca.yml => config/locales/ca.yml +10 -10
@@ 448,7 448,7 @@ ca:
      no_file: No s'ha seleccionat cap fitxer
    export_domain_blocks:
      import:
        description_html: Estàs a punt d'importar una llista de dominis blocats. Si us plau, revisa aquesta llista amb molta cura, especialment si no l'has creada tu mateix.
        description_html: Esteu a punt d'importar una llista de dominis blocats. Reviseu aquesta llista amb molta cura, especialment si no l'heu creada vós mateix.
        existing_relationships_warning: Relacions de seguiment existents
        private_comment_description_html: 'Per a ajudar-te a fer un seguiment d''on provenen els bloquejos importats, es crearan amb el següent comentari privat: <q>%{comment}</q>'
        private_comment_template: Importar des de %{source} el %{date}


@@ 458,7 458,7 @@ ca:
        title: Importa dominis bloquejats
      no_file: No s'ha seleccionat cap fitxer
    follow_recommendations:
      description_html: "<strong>Seguir les recomanacions ajuda als nous usuaris a trobar ràpidament contingut interessant</strong>. Quan un usuari no ha interactuat prou amb d'altres com per a formar a qui seguir personalment, aquests comptes li seran recomanats. Es recalculen a diari a partir d'una barreja de comptes amb els compromisos recents més alts i el nombre més alt de seguidors locals per a un idioma determinat."
      description_html: "<strong>Seguir les recomanacions ajuda als nous usuaris a trobar ràpidament contingut interessant</strong>. Quan un usuari no ha interactuat prou amb altres per a formar a qui seguir personalment, aquests comptes li seran recomanats. Es recalculen diàriament a partir d'una barreja de comptes amb els compromisos recents més alts i el nombre més alt de seguidors locals per a un idioma determinat."
      language: Per idioma
      status: Estat
      suppress: Suprimeix les recomanacions de seguiment


@@ 813,9 813,9 @@ ca:
      appeal_rejected: Apel·lació rebutjada
    system_checks:
      database_schema_check:
        message_html: Hi ha pendents migracions de la base de dades. Si us plau executa-les per a assegurar que l'aplicació es comporta com s'espera
        message_html: Hi ha pendents migracions de la base de dades. Executeu-les per a assegurar que l'aplicació es comporta com s'espera
      elasticsearch_running_check:
        message_html: No s'ha pogut connectar a Elasticsearch. Si us plau verifica que estigui funcionant o desactiva la cerca de text complet
        message_html: No s'ha pogut connectar a Elasticsearch. Verifiqueu que funciona o desactiveu la cerca de text complet
      elasticsearch_version_check:
        message_html: 'Versió incompatible de Elasticsearch: %{value}'
        version_comparison: Elasticsearch %{running_version} està funcionant mentre %{required_version} és requerida


@@ 823,7 823,7 @@ ca:
        action: Gestiona les normes del servidor
        message_html: No has definit cap norma del servidor.
      sidekiq_process_check:
        message_html: No hi ha cap procés de Sidekiq executant-se per a la cua (o cues) de %{value}. Si us plau revisa la teva configuració de Sidekiq
        message_html: No hi ha cap procés de Sidekiq executant-se per a la cua (o cues) de %{value}. Reviseu la configuració de Sidekiq
      upload_check_privacy_error:
        action: Consulta aquí per a més informació
        message_html: "<strong>El teu servidor no està ben configurat. La privacitat dels teus usuaris està en risc.</strong>"


@@ 1094,7 1094,7 @@ ca:
    proceed: Elimina el compte
    success_msg: El compte s'ha eliminat correctament
    warning:
      before: 'Abans de procedir si us plau llegeix amb cura aquestes notes:'
      before: 'Abans de procedir, llegiu amb cura aquestes notes:'
      caches: El contingut que ha estat memoritzat en la memòria cau per altres servidors pot persistir
      data_removal: Els teus tuts i altres dades seran permanentment eliminades
      email_change_html: Pots <a href="%{path}">canviar la teva adreça de correu electrònic</a> sense eliminar el teu compte


@@ 1244,7 1244,7 @@ ca:
    today: avui
    validation_errors:
      one: Alguna cosa no va bé! Si us plau, revisa l'error
      other: Alguna cosa no va bé! Si us plau, revisa %{count} errors més a baix
      other: Alguna cosa no va bé! Reviseu els %{count} errors següents
  imports:
    errors:
      empty: Fitxer CSV buit


@@ 1366,7 1366,7 @@ ca:
    cancelled_msg: Redirecció cancel·lada amb èxit.
    errors:
      already_moved: és el mateix compte al que ja t'has mogut
      missing_also_known_as: no fa referencia a aquest compte
      missing_also_known_as: no fa referència a aquest compte
      move_to_self: no pot ser el compte actual
      not_found: podria no ser trobat
      on_cooldown: Estàs en temps de refredament


@@ 1383,7 1383,7 @@ ca:
    set_redirect: Ajusta la redirecció
    warning:
      backreference_required: El compte nou primer ha de ser configurat per a referenciar aquest
      before: 'Abans de procedir si us plau llegeix amb cura aquestes notes:'
      before: 'Abans de procedir, llegiu amb cura aquestes notes:'
      cooldown: Després de moure't hi ha un període de recuperació durant el qual no seràs capaç de moure't un altre cop
      disabled_account: El teu compte actual no serà plenament utilitzable després. Tanmateix, tindràs accés a exportació de dades així com reactivació.
      followers: Aquesta acció mourà tots els seguidors des de l'actual al compte nou


@@ 1791,5 1791,5 @@ ca:
    nickname_hint: Introdueix el sobrenom de la teva clau de seguretat nova
    not_enabled: Encara no has activat WebAuthn
    not_supported: Aquest navegador no suporta claus de seguretat
    otp_required: Per emprar claus de seguretat si us plau activa primer l'autenticació de dos factors.
    otp_required: Per a usar claus de seguretat, activeu primer l'autenticació de dos factors.
    registered_on: Registrat en %{date}

M config/locales/cy.yml => config/locales/cy.yml +9 -5
@@ 845,7 845,7 @@ cy:
      language: Iaith
      media:
        title: Cyfryngau
      metadata: Metaddata
      metadata: Metadata
      no_status_selected: Heb newid postiad gan na ddewiswyd dim un
      open: Agor postiad
      original_status: Postiad gwreiddiol


@@ 1049,7 1049,7 @@ cy:
    notification_preferences: Newid gosodiadau e-bost
    salutation: "%{name},"
    settings: 'Newid gosodiadau e-bost: %{link}'
    unsubscribe: Datdanysgrifio
    unsubscribe: Dad-danysgrifio
    view: 'Gweld:'
    view_profile: Gweld proffil
    view_status: Gweld postiad


@@ 1321,7 1321,7 @@ cy:
      other: Mae pob un o'r <strong>%{count}</strong> eitem sy'n cyfateb i'ch chwiliad wedi'u dewis.
      two: Mae pob un o'r <strong>%{count}</strong> eitem sy'n cyfateb i'ch chwiliad wedi'u dewis.
      zero: Does <strong>%{count}</strong> o eitemau sy'n cyfateb i'ch chwiliad wedi'u dewis.
    cancel: Diddymu
    cancel: Canslo
    changes_saved_msg: Llwyddwyd i gadw'r newidiadau!
    confirm: Cadarnhau
    copy: Copïo


@@ 1365,12 1365,14 @@ cy:
      bookmarks_html: Rydych ar fin <strong>amnewid eich nodau tudalen</strong> gyda hyd at <strong>%{total_items} o bostiadau</strong> gan <strong>%{filename}</strong> .
      domain_blocking_html: Rydych ar fin <strong>amnewid eich rhestr rhwystro parth</strong> gyda hyd at <strong>%{total_items} parth</strong> o <strong>%{filename}</strong> .
      following_html: Rydych ar fin <strong>dilyn</strong> hyd at <strong>%{total_items} o gyfrifon</strong> o <strong>%{filename}</strong> a <strong>pheidio a ddilyn unrhyw un arall</strong> .
      lists_html: Rydych ar fin <strong>amnewid eich rhestrau</strong> gyda chynnwys <strong>%{filename}</strong> . Bydd hyd at <strong>%{total_items} o gyfrifon</strong> yn cael eu hychwanegu at restrau newydd.
      muting_html: Rydych ar fin <strong>amnewid eich rhestr o gyfrifon tawel</strong> gyda hyd at <strong>%{total_items} o gyfrifon</strong> o <strong>%{filename}</strong> .
    preambles:
      blocking_html: Rydych ar fin <strong>rhwystro</strong> hyd at <strong>%{total_items} o gyfrifon</strong> o <strong>%{filename}</strong> .
      bookmarks_html: Rydych ar fin ychwanegu hyd at <strong>%{total_items} o bostiadau</strong> o <strong>%{filename}</strong> at eich <strong>nodau tudalen</strong> .
      domain_blocking_html: Rydych ar fin <strong>rhwystro</strong> hyd at <strong>%{total_items} parth</strong> o <strong>%{filename}</strong> .
      following_html: Rydych ar fin <strong>dilyn</strong> hyd at <strong>%{total_items} cyfrif</strong> gan <strong>%{filename}</strong> .
      lists_html: Rydych ar fin ychwanegu hyd at <strong>%{total_items} o gyfrifon</strong> o <strong>%{filename}</strong> at eich <strong>rhestrau</strong> . Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati.
      muting_html: Rydych ar fin <strong>tewi</strong> hyd at <strong>%{total_items} cyfrif</strong> o <strong>%{filename}</strong> .
    preface: Gallwch fewnforio data rydych chi wedi'i allforio o weinydd arall, fel rhestr o'r bobl rydych chi'n eu dilyn neu'n eu blocio.
    recent_imports: Mewnforion diweddar


@@ 1387,6 1389,7 @@ cy:
      bookmarks: Mewnforio nodau tudalen
      domain_blocking: Mewnforio parthau sydd wedi'u rhwystro
      following: Mewnforio cyfrifon yn cael eu dilyn
      lists: Mewnforio rhestrau
      muting: Mewnforio cyfrifon wedi'u tewi
    type: Math o fewnforion
    type_groups:


@@ 1397,6 1400,7 @@ cy:
      bookmarks: Llyfrnodau
      domain_blocking: Rhestr rhwystro parth
      following: Rhestr ddilynion
      lists: Rhestrau
      muting: Rhestr tewi
    upload: Llwytho
  invites:


@@ 1453,7 1457,7 @@ cy:
          reblog: e-bost hysbysu hybu
      resubscribe_html: Os ydych wedi dad-danysgrifio trwy gamgymeriad, gallwch ail-danysgrifio o'ch <a href="%{settings_path}">gosodiadau hysbysiadau e-bost</a> .
      success_html: Os nad ydych bellach yn derbyn %{type} Mastodon %{domain} i'ch e-bost %{email}.
      title: Datdanysgrifio
      title: Dad-danysgrifio
  media_attachments:
    validations:
      images_and_video: Methu atodi fideo i bostiad sydd eisoes yn cynnwys delweddau


@@ 1679,7 1683,7 @@ cy:
    migrate: Mudo cyfrif
    notifications: Hysbysiadau
    preferences: Dewisiadau
    profile: Proffil
    profile: Proffil cyhoeddus
    relationships: Yn dilyn a dilynwyr
    statuses_cleanup: Dileu postiadau'n awtomatig
    strikes: Rhybuddion cymedroli

M config/locales/de.yml => config/locales/de.yml +77 -77
@@ 58,7 58,7 @@ de:
      demote: Zurückstufen
      destroyed_msg: Daten von %{username} wurden zum Löschen in die Warteschlange eingereiht
      disable: Einfrieren
      disable_sign_in_token_auth: Zwei-Faktor-Authentisierung (2FA) per E-Mail deaktivieren
      disable_sign_in_token_auth: E-Mail-Token-Authentisierung deaktivieren
      disable_two_factor_authentication: Zwei-Faktor-Authentisierung (2FA) deaktivieren
      disabled: Eingefroren
      display_name: Anzeigename


@@ 67,7 67,7 @@ de:
      email: E-Mail-Adresse
      email_status: Status der E-Mail-Adresse
      enable: Freischalten
      enable_sign_in_token_auth: Zwei-Faktor-Authentisierung (2FA) per E-Mail aktivieren
      enable_sign_in_token_auth: E-Mail-Token-Authentisierung aktivieren
      enabled: Freigegeben
      enabled_msg: Konto von %{username} erfolgreich freigegeben
      followers: Follower


@@ 200,10 200,10 @@ de:
        destroy_user_role: Rolle entfernen
        disable_2fa_user: 2FA deaktivieren
        disable_custom_emoji: Eigenes Emoji deaktivieren
        disable_sign_in_token_auth_user: Zwei-Faktor-Authentisierung (2FA) per E-Mail für diesen Account deaktivieren
        disable_sign_in_token_auth_user: E-Mail-Token-Authentisierung für dieses Konto deaktivieren
        disable_user: Benutzer*in deaktivieren
        enable_custom_emoji: Eigenes Emoji aktivieren
        enable_sign_in_token_auth_user: Zwei-Faktor-Authentisierung (2FA) per E-Mail für diesen Account aktivieren
        enable_sign_in_token_auth_user: E-Mail-Token-Authentisierung für dieses Konto aktivieren
        enable_user: Benutzer*in aktivieren
        memorialize_account: Gedenkkonto
        promote_user: Benutzer*in hochstufen


@@ 229,10 229,10 @@ de:
        update_status: Beitrag aktualisieren
        update_user_role: Rolle bearbeiten
      actions:
        approve_appeal_html: "%{name} genehmigte die Moderationsbeschlüsse von %{target}"
        approve_appeal_html: "%{name} hat den Einspruch gegen eine Moderationsentscheidung von %{target} genehmigt"
        approve_user_html: "%{name} genehmigte die Registrierung von %{target}"
        assigned_to_self_report_html: "%{name} wies sich die Meldung %{target} selbst zu"
        change_email_user_html: "%{name} hat die E-Mail-Adresse von %{target} geändert"
        change_email_user_html: "%{name} änderte die E-Mail-Adresse von %{target}"
        change_role_user_html: "%{name} hat die Rolle von %{target} geändert"
        confirm_user_html: "%{name} bestätigte die E-Mail-Adresse von %{target}"
        create_account_warning_html: "%{name} sendete eine Warnung an %{target}"


@@ 259,14 259,14 @@ de:
        destroy_user_role_html: "%{name} löschte die Rolle %{target}"
        disable_2fa_user_html: "%{name} deaktivierte die Zwei-Faktor-Authentisierung für %{target}"
        disable_custom_emoji_html: "%{name} deaktivierte das Emoji %{target}"
        disable_sign_in_token_auth_user_html: "%{name} hat die E-Mail-Token-Authentisierung für %{target} deaktiviert"
        disable_sign_in_token_auth_user_html: "%{name} deaktivierte die E-Mail-Token-Authentisierung für %{target}"
        disable_user_html: "%{name} deaktivierte den Zugang für %{target}"
        enable_custom_emoji_html: "%{name} aktivierte das Emoji %{target}"
        enable_sign_in_token_auth_user_html: "%{name} hat die E-Mail-Token-Authentifizierung für %{target} aktiviert"
        enable_sign_in_token_auth_user_html: "%{name} hat die E-Mail-Token-Authentisierung für %{target} aktiviert"
        enable_user_html: "%{name} aktivierte den Zugang für %{target}"
        memorialize_account_html: "%{name} wandelte das Konto von %{target} in eine Gedenkseite um"
        promote_user_html: "%{name} beförderte %{target}"
        reject_appeal_html: "%{name} hat den Moderations-Beschlussantrag von %{target} abgelehnt"
        reject_appeal_html: "%{name} hat den Einspruch gegen eine Moderationsentscheidung von %{target} abgelehnt"
        reject_user_html: "%{name} hat die Registrierung von %{target} abgelehnt"
        remove_avatar_user_html: "%{name} entfernte das Profilbild von %{target}"
        reopen_report_html: "%{name} öffnete die Meldung %{target} wieder"


@@ 348,20 348,20 @@ de:
      interactions: Interaktionen
      media_storage: Medien
      new_users: neue Profile
      opened_reports: ungelöste Meldungen
      opened_reports: eingereichte Meldungen
      pending_appeals_html:
        one: "<strong>%{count}</strong> ausstehender Einspruch"
        other: "<strong>%{count}</strong> ausstehende Einsprüche"
      pending_reports_html:
        one: "<strong>%{count}</strong> ausstehende Meldung"
        other: "<strong>%{count}</strong> ausstehende Meldungen"
        one: "<strong>%{count}</strong> offene Meldung"
        other: "<strong>%{count}</strong> offene Meldungen"
      pending_tags_html:
        one: "<strong>%{count}</strong> ausstehender Hashtag"
        other: "<strong>%{count}</strong> ausstehende Hashtags"
        one: "<strong>%{count}</strong> ungeprüfter Hashtag"
        other: "<strong>%{count}</strong> ungeprüfte Hashtags"
      pending_users_html:
        one: "<strong>%{count}</strong> unerledigte*r Benutzer*in"
        other: "<strong>%{count}</strong> unerledigte Benutzer*innen"
      resolved_reports: erledigte Meldungen
      resolved_reports: geklärte Meldungen
      software: Programme
      sources: Registrierungsort
      space: Speicherplatz


@@ 386,7 386,7 @@ de:
        cancel: Abbrechen
        confirm: Sperren
        permanent_action: Das Aufheben der Sperre wird keine Daten oder Beziehungen wiederherstellen.
        preamble_html: Du bist dabei, <strong>%{domain}</strong> und alle Subdomains zu sperren.
        preamble_html: Du bist dabei, <strong>%{domain}</strong> und seine Subdomains zu sperren.
        remove_all_data: Alle Inhalte, Medien und Profildaten werden für die Konten dieser Domain von deinem Server entfernt.
        stop_communication: Dein Server wird nicht länger mit diesen Servern kommunizieren.
        title: Sperre für Domain %{domain} bestätigen


@@ 501,7 501,7 @@ de:
        instance_follows_measure: deren Follower hier
        instance_languages_dimension: Häufigste Sprachen
        instance_media_attachments_measure: deren Medien hier im Cache
        instance_reports_measure: Meldungen zu deren Accounts
        instance_reports_measure: Meldungen zu deren Konten
        instance_statuses_measure: deren Beiträge hier im Cache
      delivery:
        all: Alle


@@ 591,8 591,8 @@ de:
        resolve_description_html: Es wird keine Maßnahme gegen das gemeldete Konto ergriffen und der Vorgang wird nicht aufgezeichnet – die Meldung wird hiermit geschlossen.
        silence_description_html: Das Konto wird nur für diejenigen sichtbar sein, die dem Konto bereits folgen oder es manuell suchen, was die Reichweite stark einschränkt. Kann jederzeit rückgängig gemacht werden. Alle Meldungen zu diesem Konto werden geschlossen.
        suspend_description_html: Das Konto und alle Inhalte werden unzugänglich und ggf. gelöscht. Eine Interaktion mit dem Konto wird unmöglich. Dies kann innerhalb von 30 Tagen rückgängig gemacht werden. Alle Meldungen zu diesem Konto werden geschlossen.
      actions_description_html: Entscheide, welche Maßnahmen zur Lösung dieses Berichts zu ergreifen sind. Wenn du eine Strafmaßnahme gegen das gemeldete Konto ergreifst, wird eine E-Mail-Benachrichtigung an diese gesendet, außer wenn die <strong>Spam</strong>-Kategorie ausgewählt ist.
      actions_description_remote_html: Entscheide, welche Maßnahmen du zur Lösung dieser Meldungen ergreifen möchtest. Dies wirkt sich lediglich darauf aus, wie <strong>dein</strong> Server mit diesem externen Konto kommuniziert und dessen Inhalt handhabt.
      actions_description_html: Entscheide, welche Maßnahmen du zum Klären dieser Meldung ergreifen möchtest. Wenn du eine Strafmaßnahme gegen das gemeldete Konto ergreifst, wird eine E-Mail-Benachrichtigung an dieses gesendet, außer wenn die <strong>Spam</strong>-Kategorie ausgewählt ist.
      actions_description_remote_html: Entscheide, welche Maßnahmen du zum Klären dieser Meldung ergreifen möchtest. Dies wirkt sich lediglich darauf aus, wie <strong>dein</strong> Server mit diesem externen Konto kommuniziert und dessen Inhalt handhabt.
      add_to_report: Meldung ergänzen
      are_you_sure: Bist du dir sicher?
      assign_to_self: Mir zuweisen


@@ 610,31 610,31 @@ de:
      delete_and_resolve: Beiträge löschen
      forwarded: Weitergeleitet
      forwarded_to: Weitergeleitet an %{domain}
      mark_as_resolved: Als gelöst markieren
      mark_as_resolved: Als geklärt markieren
      mark_as_sensitive: Mit einer Inhaltswarnung versehen
      mark_as_unresolved: Als ungelöst markieren
      mark_as_unresolved: Als ungeklärt markieren
      no_one_assigned: Niemand
      notes:
        create: Notiz hinzufügen
        create_and_resolve: Mit Notiz wieder lösen
        create_and_resolve: Mit Notiz als geklärt markieren
        create_and_unresolve: Mit Notiz wieder öffnen
        delete: Löschen
        placeholder: Bitte beschreibe, welche Maßnahmen bzw. Sanktionen ergriffen worden sind, und führe alles auf, was es Erwähnenswertes zu diesem Profil zu berichten gibt …
        title: Notizen
      notes_description_html: Notiz an dich und andere Moderator*innen hinterlassen
      processed_msg: 'Meldung #%{id} erfolgreich bearbeitet'
      quick_actions_description_html: 'Eine schnelle Aktion ausführen oder nach unten rolle, um gemeldete Inhalte zu sehen:'
      processed_msg: Meldung Nr. %{id} erfolgreich bearbeitet
      quick_actions_description_html: 'Führe eine schnelle Aktion aus oder scrolle nach unten, um gemeldete Inhalte zu sehen:'
      remote_user_placeholder: das externe Profil von %{instance}
      reopen: Meldung wieder eröffnen
      report: "%{id}. Meldung"
      reported_account: Gemeldetes Konto
      reported_by: Gemeldet von
      resolved: Gelöst
      resolved: Geklärt
      resolved_msg: Meldung erfolgreich geklärt!
      skip_to_actions: Zur Maßnahme springen
      status: Status
      statuses: Gemeldeter Inhalt
      statuses_description_html: Störende Inhalte werden in der Kommunikation mit dem gemeldeten Konto zitiert
      statuses_description_html: Beanstandete Inhalte werden in der Kommunikation mit dem gemeldeten Konto erwähnt
      summary:
        action_preambles:
          delete_html: 'Du bist dabei, einige Beiträge von <strong>@%{acct}</strong> zu <strong>entfernen</strong>. Dies wird:'


@@ 642,22 642,22 @@ de:
          silence_html: 'Du bist dabei, das Konto von <strong>@%{acct}</strong> <strong>einzuschränken</strong>. Dies wird:'
          suspend_html: 'Du bist dabei, das Konto von <strong>@%{acct}</strong> zu <strong>sperren</strong>. Dies wird:'
        actions:
          delete_html: Die anstößigen Beiträge entfernen
          mark_as_sensitive_html: Medien der anstößigen Beiträge mit einer Inhaltswarnung versehen
          delete_html: Die beanstandeten Beiträge entfernen
          mark_as_sensitive_html: Medien der beanstandeten Beiträge mit einer Inhaltswarnung versehen
          silence_html: Schränkt die Reichweite von <strong>@%{acct}</strong> stark ein, indem das Profil und dessen Inhalte nur für Personen sichtbar sind, die dem Profil bereits folgen oder es manuell aufrufen
          suspend_html: "<strong>@%{acct}</strong> sperren, sodass das Profil und dessen Inhalte nicht mehr zugänglich sind und keine Interaktion mehr möglich ist"
        close_report: Meldung Nr. %{id} als erledigt markieren
        close_reports_html: "<strong>Alle</strong> Meldungen gegen <strong>@%{acct}</strong> als erledigt markieren"
        delete_data_html: Das Profil und die Inhalte von <strong>@%{acct}</strong> werden in 30 Tagen gelöscht, es sei denn, sie werden in der Zwischenzeit entsperrt
        close_report: Meldung Nr. %{id} als geklärt markieren
        close_reports_html: "<strong>Alle</strong> Meldungen gegen <strong>@%{acct}</strong> als geklärt markieren"
        delete_data_html: Das Profil und die Inhalte von <strong>@%{acct}</strong> in 30 Tagen löschen, es sei denn, das Konto wird in der Zwischenzeit entsperrt
        preview_preamble_html: "<strong>@%{acct}</strong> wird eine Warnung mit folgenden Inhalten erhalten:"
        record_strike_html: Einen Verstoß gegen <strong>@%{acct}</strong> eintragen, um bei zukünftigen Verstößen desselben Kontos besser reagieren zu können
        send_email_html: "<strong>@%{acct}</strong> eine Verwarnung per E-Mail senden"
        warning_placeholder: Optional zusätzliche Begründung für die Moderationsmaßnahme.
        record_strike_html: Einen Verstoß gegen <strong>@%{acct}</strong> vermerken, um bei zukünftigen Verstößen desselben Kontos besser reagieren zu können
        send_email_html: "<strong>@%{acct}</strong> eine Warnung per E-Mail senden"
        warning_placeholder: "(Optional) Zusätzliche Begründung für die Moderationsaktion."
      target_origin: Domain des gemeldeten Kontos
      title: Meldungen
      unassign: Zuweisung aufheben
      unknown_action_msg: 'Unbekannte Aktion: %{action}'
      unresolved: Ungelöst
      unresolved: Ungeklärt
      updated_at: Aktualisiert
      view_profile: Profil anzeigen
    roles:


@@ 706,7 706,7 @@ de:
        manage_rules_description: Erlaubt es Benutzer*innen, Serverregeln zu ändern
        manage_settings: Einstellungen verwalten
        manage_settings_description: Erlaubt Nutzer*innen, Einstellungen dieses Servers zu ändern
        manage_taxonomies: Taxonomien verwalten
        manage_taxonomies: Hashtags verwalten
        manage_taxonomies_description: Ermöglicht Benutzer*innen, die Trends zu überprüfen und die Hashtag-Einstellungen zu aktualisieren
        manage_user_access: Kontozugriff verwalten
        manage_user_access_description: Erlaubt es Benutzer*innen, die Zwei-Faktor-Authentisierung (2FA) anderer zu deaktivieren, ihre E-Mail-Adresse zu ändern und ihr Passwort zurückzusetzen


@@ 754,7 754,7 @@ de:
        preamble: Das Auffinden interessanter Inhalte ist wichtig, um neue Nutzer einzubinden, die Mastodon noch nicht kennen. Bestimme, wie verschiedene Suchfunktionen auf deinem Server funktionieren.
        profile_directory: Profilverzeichnis
        public_timelines: Öffentliche Timeline
        publish_discovered_servers: Publish discovered servers
        publish_discovered_servers: Entdeckte Server offenlegen
        publish_statistics: Statistiken veröffentlichen
        title: Entdecken
        trends: Trends


@@ 804,7 804,7 @@ de:
        delete_statuses: "%{name} entfernte die Beiträge von %{target}"
        disable: "%{name} fror das Konto von %{target} ein"
        mark_statuses_as_sensitive: "%{name} hat die Beiträge von %{target} mit einer Inhaltswarnung versehen"
        none: "%{name} sendete eine Warnung an %{target}"
        none: "%{name} hat eine Warnung an %{target} gesendet"
        sensitive: "%{name} versah das Konto von %{target} mit einer Inhaltswarnung"
        silence: "%{name} schaltete das Konto von %{target} stumm"
        suspend: "%{name} sperrte das Konto von %{target}"


@@ 846,7 846,7 @@ de:
        disallow_provider: Herausgeber*in verbieten
        no_link_selected: Keine Links wurden geändert, da keine ausgewählt wurden
        publishers:
          no_publisher_selected: Keine Herausgeber wurden geändert, da keine ausgewählt wurden
          no_publisher_selected: Keine Herausgeber*innen wurden geändert, da keine ausgewählt wurden
        shared_by_over_week:
          one: In den vergangenen 7 Tagen von einem Profil geteilt
          other: In den vergangenen 7 Tagen von %{count} Profilen geteilt


@@ 874,16 874,16 @@ de:
          other: "%{friendly_count}-mal geteilt oder favorisiert"
        title: Angesagte Beiträge
      tags:
        current_score: Aktuelle Punktzahl %{score}
        current_score: 'Aktueller Score: %{score}'
        dashboard:
          tag_accounts_measure: eindeutige Verwendungen
          tag_accounts_measure: Profile
          tag_languages_dimension: Häufigste Sprachen
          tag_servers_dimension: Aktivste Server
          tag_servers_measure: verschiedene Server
          tag_uses_measure: Gesamtnutzungen
          tag_servers_measure: Server
          tag_uses_measure: insgesamt
        description_html: Diese Hashtags werden derzeit in vielen Beiträgen verwendet, die dein Server sieht. Dies kann deinen Nutzer*innen helfen, herauszufinden, worüber die Leute im Moment am meisten schreiben. Hashtags werden erst dann öffentlich angezeigt, wenn du sie genehmigst.
        listable: Kann vorgeschlagen werden
        no_tag_selected: Keine Tags wurden geändert, da keine ausgewählt wurden
        no_tag_selected: Keine Hashtags wurden geändert, da keine ausgewählt wurden
        not_listable: Wird nicht vorgeschlagen
        not_trendable: Wird in den Trends nicht angezeigt
        not_usable: Kann nicht verwendet werden


@@ 894,8 894,8 @@ de:
        usable: Darf verwendet werden
        usage_comparison: Heute %{today}-mal und gestern %{yesterday}-mal verwendet
        used_by_over_week:
          one: In der letzten Woche von einem Profil verwendet
          other: In der letzten Woche von %{count} Profilen verwendet
          one: In den vergangenen 7 Tagen von einem Profil verwendet
          other: In den vergangenen 7 Tagen von %{count} Profilen verwendet
      title: Trends
      trending: Angesagt
    warning_presets:


@@ 934,16 934,16 @@ de:
        sensitive: das Markieren des Kontos mit einer Inhaltswarnung
        silence: das Beschränken des Kontos
        suspend: um deren Konto zu sperren
      body: "%{target} hat etwas gegen eine Moderationsentscheidung von %{action_taken_by} vom %{date}, die %{type} war. Die Person schrieb:"
      next_steps: Du kannst dem Einspruch zustimmen, womit die Entscheidung der Moderation rückgängig gemacht wird, oder ihn ignorieren.
      subject: "%{username} hat Einspruch gegen eine Moderationsentscheidung von %{instance} eingelegt"
      body: "%{target} erhebt Einspruch gegen eine Moderationsentscheidung von %{action_taken_by} vom %{date} (%{type}). Folgendes wurde geschrieben:"
      next_steps: Du kannst dem Einspruch zustimmen, um die Moderationsentscheidung rückgängig zu machen, oder ihn ignorieren.
      subject: "%{username} hat Einspruch gegen eine Moderationsentscheidung auf %{instance} erhoben"
    new_pending_account:
      body: Die Details von diesem neuem Konto sind unten. Du kannst die Anfrage akzeptieren oder ablehnen.
      subject: Neues Konto zur Überprüfung auf %{instance} verfügbar (%{username})
    new_report:
      body: "%{reporter} hat %{target} gemeldet"
      body_remote: Jemand von %{domain} hat %{target} gemeldet
      subject: Neue Meldung auf %{instance} (#%{id})
      subject: Neue Meldung auf %{instance} (Nr. %{id})
    new_trends:
      body: 'Die folgenden Einträge müssen überprüft werden, bevor sie öffentlich angezeigt werden können:'
      new_trending_links:


@@ 959,9 959,9 @@ de:
    add_new: Alias erstellen
    created_msg: Neuer Alias erfolgreich erstellt. Du kannst nun den Umzug vom alten zum neuen Konto starten.
    deleted_msg: Der Alias wurde erfolgreich entfernt. Aus jenem Konto zu diesem zu verschieben, ist nicht mehr möglich.
    empty: Du hast keine Aliase.
    hint_html: Wenn du von einem anderen Konto auf dieses umziehen möchtest, dann kannst du hier einen Alias erstellen, der erforderlich ist, um deine Follower vom alten Konto auf dieses zu migrieren. Diese Aktion ist <strong>harmlos und wi­der­ruf­lich</strong>. <strong>Die Kontenmigration wird vom alten Konto aus eingeleitet</strong>.
    remove: Alle Aliase aufheben
    empty: Du hast keine Aliasse.
    hint_html: Wenn du von einem anderen Konto auf dieses umziehen möchtest, dann kannst du hier einen Alias erstellen, der erforderlich ist, um deine Follower vom alten Konto auf dieses zu migrieren. Diese Aktion ist <strong>harmlos und wi­der­ruf­lich</strong>. <strong>Der Kontoumzug wird vom alten Konto aus eingeleitet</strong>.
    remove: Alle Aliasse aufheben
  appearance:
    advanced_web_interface: Erweitertes Webinterface
    advanced_web_interface_hint: Wenn du mehr aus deiner Bildschirmbreite herausholen möchtest, kannst du mit dem erweiterten Webinterface weitere Spalten hinzufügen und dadurch mehr Informationen auf einmal sehen, z. B. deine Startseite, die Mitteilungen, die föderierte Timeline sowie beliebig viele deiner Listen und Hashtags.


@@ 1000,7 1000,7 @@ de:
    delete_account: Konto löschen
    delete_account_html: Falls du dein Konto endgültig löschen möchtest, kannst du das <a href="%{path}">hier vornehmen</a>. Du musst dies zusätzlich bestätigen.
    description:
      prefix_invited_by_user: "@%{name} lädt dich ein, diesem Server von Mastodon beizutreten!"
      prefix_invited_by_user: "@%{name} lädt dich ein, diesem Mastodon-Server beizutreten!"
      prefix_sign_up: Registriere dich noch heute bei Mastodon!
      suffix: Mit einem Konto kannst du Profilen folgen, neue Beiträge veröffentlichen, Nachrichten mit Personen von jedem Mastodon-Server austauschen und vieles mehr!
    didnt_get_confirmation: Keinen Bestätigungslink erhalten?


@@ 1018,7 1018,7 @@ de:
    privacy_policy_agreement_html: Ich habe die <a href="%{privacy_policy_path}" target="_blank">Datenschutzerklärung</a> gelesen und stimme ihr zu
    progress:
      confirm: E-Mail-Adresse bestätigen
      details: Deine Details
      details: Deine Daten
      review: Unsere Überprüfung
      rules: Regeln akzeptieren
    providers:


@@ 1050,7 1050,7 @@ de:
    sign_up:
      manual_review: Registrierungen für den Server %{domain} werden manuell durch unsere Moderator*innen überprüft. Um uns dabei zu unterstützen, schreibe etwas über dich und sage uns, weshalb du ein Konto auf %{domain} anlegen möchtest.
      preamble: Mit einem Konto auf diesem Mastodon-Server kannst du jeder anderen Person im Netzwerk folgen, unabhängig davon, wo ihr Konto registriert ist.
      title: Okay, lass uns mit %{domain} anfangen.
      title: Lass uns dein Konto auf %{domain} einrichten.
    status:
      account_status: Kontostatus
      confirming: Auf die Bestätigung deiner E-Mail-Adresse wird gewartet.


@@ 1094,7 1094,7 @@ de:
    proceed: Konto löschen
    success_msg: Dein Konto wurde erfolgreich gelöscht
    warning:
      before: 'Bevor du fortfährst, lies bitte diese Punkte sorgfältig durch:'
      before: 'Bevor du fortfährst, lies bitte diese Hinweise sorgfältig durch:'
      caches: Inhalte, die von anderen Servern zwischengespeichert wurden, können fortbestehen
      data_removal: Deine Beiträge und alle anderen Daten werden für immer entfernt
      email_change_html: Du kannst <a href="%{path}">deine E-Mail-Adresse ändern</a>, ohne dein Konto zu löschen


@@ 1127,7 1127,7 @@ de:
        delete_statuses: Beitragsentfernung
        disable: Konto einfrieren
        mark_statuses_as_sensitive: Beiträge mit einer Inhaltswarnung versehen
        none: Verwarnung
        none: Warnung
        sensitive: Profil mit einer Inhaltswarnung versehen
        silence: Kontobeschränkung
        suspend: Kontosperre


@@ 1335,10 1335,10 @@ de:
      sign_in_token: E-Mail-Sicherheitscode
      webauthn: Sicherheitsschlüssel
    description_html: Wenn du verdächtige Aktivitäten bemerkst, die du nicht verstehst oder zuordnen kannst, solltest du dringend dein Passwort ändern und ungeachtet dessen die Zwei-Faktor-Authentisierung (2FA) aktivieren.
    empty: Kein Authentisierungsverlauf 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: Authentisierungsverlauf
    empty: Kein Anmeldeverlauf verfügbar
    failed_sign_in_html: Fehlgeschlagener Anmeldeversuch mit %{method} von %{ip} (%{browser})
    successful_sign_in_html: Erfolgreiches Anmelden mit %{method} von %{ip} (%{browser})
    title: Anmeldeverlauf
  mail_subscriptions:
    unsubscribe:
      action: Ja, abbestellen


@@ 1366,7 1366,7 @@ de:
    cancelled_msg: Die Weiterleitung wurde erfolgreich beendet.
    errors:
      already_moved: ist das gleiche Konto, zu dem du bereits umgezogen bist
      missing_also_known_as: referenziert nicht zurück auf dieses Konto
      missing_also_known_as: ist kein Alias für dieses Konto
      move_to_self: darf nicht das aktuelles Konto sein
      not_found: konnte nicht gefunden werden
      on_cooldown: Die Abklingzeit läuft gerade


@@ 1434,8 1434,8 @@ de:
      subject: "%{name} bearbeitete einen Beitrag"
  notifications:
    email_events: Benachrichtigungen per E-Mail
    email_events_hint: 'Bitte die Ereignisse auswählen, für die du Benachrichtigungen erhalten möchtest:'
    other_settings: Weitere Einstellungen
    email_events_hint: 'Bitte die Ereignisse auswählen, für die du Benachrichtigungen per E-Mail erhalten möchtest:'
    other_settings: Erweitere Einstellungen
  number:
    human:
      decimal_units:


@@ 1565,7 1565,7 @@ de:
  settings:
    account: Konto
    account_settings: Kontoeinstellungen
    aliases: Kontoaliase
    aliases: Konto-Aliasse
    appearance: Design
    authorized_apps: Autorisierte Anwendungen
    back: Zurück zu Mastodon


@@ 1579,7 1579,7 @@ de:
    migrate: Kontoumzug
    notifications: Benachrichtigungen
    preferences: Einstellungen
    profile: Öffentliches Profil
    profile: Profil
    relationships: Follower und Folge ich
    statuses_cleanup: Automatische Löschung
    strikes: Maßnahmen


@@ 1628,8 1628,8 @@ de:
    title: "%{name}: „%{quote}“"
    visibilities:
      direct: Direktnachricht
      private: Nur eigene Follower
      private_long: Nur für deine eigenen Follower sichtbar
      private: Nur Follower
      private_long: Nur für deine Follower sichtbar
      public: Öffentlich
      public_long: Für alle sichtbar
      unlisted: Nicht gelistet


@@ 1643,8 1643,8 @@ de:
    ignore_reblogs: Geteilte Beiträge ignorieren
    interaction_exceptions: Ausnahmen basierend auf Interaktionen
    interaction_exceptions_explanation: Beachte, dass Beiträge nicht gelöscht werden, sobald deine Grenzwerte für Favoriten oder geteilte Beiträge einmal überschritten wurden – auch dann nicht, wenn diese Schwellenwerte mittlerweile nicht mehr erreicht werden.
    keep_direct: Direktnachrichten behalten
    keep_direct_hint: Löscht keine deiner privaten Nachrichten
    keep_direct: Private Nachrichten behalten
    keep_direct_hint: Löscht keinen deiner Beiträge, die nur für erwähnte Profile sichtbar sind
    keep_media: Beiträge mit Medien behalten
    keep_media_hint: Löscht keinen deiner Beiträge mit Medieninhalten
    keep_pinned: Angeheftete Beiträge behalten


@@ 1728,11 1728,11 @@ de:
        spam: Spam
        violation: Inhalt verstößt gegen die folgenden Serverregeln
      explanation:
        delete_statuses: Einige deiner Beiträge wurden als Verstoß gegen eine oder mehrere Serverregeln erkannt und von den Moderator*innen von %{instance} entfernt.
        delete_statuses: Einige deiner Beiträge haben gegen eine oder mehrere Serverregeln verstoßen und wurden daher von den Moderator*innen von %{instance} entfernt.
        disable: Du kannst dein Konto nicht mehr verwenden, aber dein Profil und deine anderen Daten bleiben erhalten. Du kannst eine Sicherung deiner Daten anfordern, die Kontoeinstellungen ändern oder dein Konto löschen.
        mark_statuses_as_sensitive: Ein oder mehrere deiner Beiträge wurden von den Moderator*innen von %{instance} mit einer Inhaltswarnung versehen. Das bedeutet, dass Besucher*innen diese Medien in den Beiträgen zunächst antippen müssen, um die Vorschau anzuzeigen. Beim Verfassen der nächsten Beiträge kannst du auch selbst eine Inhaltswarnung für hochgeladene Medien festlegen.
        mark_statuses_as_sensitive: Ein oder mehrere deiner Beiträge wurden von den Moderator*innen von %{instance} mit einer Inhaltswarnung versehen. Das bedeutet, dass die Medien in den Beiträgen erst angeklickt werden müssen, bevor sie angezeigt werden. Beim Verfassen der nächsten Beiträge kannst du auch selbst eine Inhaltswarnung für hochgeladene Medien festlegen.
        sensitive: Von nun an werden alle deine hochgeladenen Medieninhalte mit einer Inhaltswarnung versehen und hinter einer Warnung versteckt.
        silence: Du kannst dein Konto weiterhin verwenden, aber nur Personen, die dir bereits folgen, sehen deine Beiträge auf diesem Server. Ebenso kannst du von verschiedenen Entdeckungsfunktionen ausgeschlossen werden. Andere können dir jedoch weiterhin manuell folgen.
        silence: Du kannst dein Konto weiterhin verwenden, aber nur Personen, die dir bereits folgen, sehen deine Beiträge auf diesem Server. Ebenso kannst du aus verschiedenen Suchfunktionen ausgeschlossen werden. Andere können dir jedoch weiterhin manuell folgen.
        suspend: Du kannst dein Konto nicht mehr verwenden und dein Profil und andere Daten sind nicht mehr verfügbar. Du kannst dich immer noch anmelden, um eine Sicherung deiner Daten anzufordern, bis die Daten innerhalb von 30 Tagen vollständig gelöscht wurden. Allerdings werden wir einige Daten speichern, um zu verhindern, dass du die Sperrung umgehst.
      reason: 'Begründung:'
      statuses: 'Betroffene Beiträge:'


@@ 1770,10 1770,10 @@ de:
    seamless_external_login: Du bist über einen externen Dienst angemeldet, daher sind Passwort- und E-Mail-Einstellungen nicht verfügbar.
    signed_in_as: 'Angemeldet als:'
  verification:
    extra_instructions_html: <strong>Tipp:</strong> Der Link auf deiner Website kann unsichtbar sein. Der wichtige Teil ist <code>rel="me"</code>, wodurch das Nachahmen von Personen auf Websites mit nutzergenerierten Inhalten verhindert wird. Du kannst auch ein <code>link</code>-Tag statt <code>a</code> im Header auf der Seite verwenden, jedoch muss der HTML-Code ohne das Ausführen von JavaScript zugänglich sein.
    extra_instructions_html: <strong>Hinweis:</strong> Der Link auf deiner Website kann unsichtbar sein. Der wichtige Teil ist <code>rel="me"</code>, wodurch das Nachahmen von Personen auf Websites mit nutzergenerierten Inhalten verhindert wird. Du kannst auch ein <code>link</code>-Tag statt <code>a</code> im Header auf der Seite verwenden, jedoch muss der HTML-Code ohne das Ausführen von JavaScript zugänglich sein.
    here_is_how: So funktioniert's
    hint_html: "<strong>Alle können ihre Identität auf Mastodon verifizieren.</strong> Basierend auf offenen Standards – jetzt und für immer kostenlos. Alles, was du brauchst, ist eine eigene Website. Wenn du von deinem Profil auf diese Website verlinkst, überprüfen wir, ob die Website zu deinem Profil zurückverlinkt und zeigen einen visuellen Hinweis an."
    instructions_html: Kopiere und füge den untenstehenden Code in das HTML deiner Website ein. Füge anschließend die Adresse deiner Website in ein Zusatzfeld auf deinem Profil hinzu und speichere die Änderungen. Die Zusatzfelder befinden sich im Reiter „Profil bearbeiten“.
    hint_html: "<strong>Alle können ihre Identität auf Mastodon verifizieren.</strong> Basierend auf offenen Standards – jetzt und für immer kostenlos. Alles, was du brauchst, ist eine eigene Website. Wenn du von deinem Profil auf diese Website verlinkst, überprüfen wir, ob die Website zu deinem Profil zurückverlinkt, und zeigen einen visuellen Hinweis an."
    instructions_html: Kopiere den unten stehenden Code und füge ihn in das HTML deiner Website ein. Trage anschließend diese Website-Adresse in eines der Felder für die Metadaten deines Profils ein – und speichere die Änderungen.
    verification: Verifizierung
    verified_links: Deine verifizierten Links
  webauthn_credentials:

M config/locales/devise.ca.yml => config/locales/devise.ca.yml +1 -1
@@ 24,7 24,7 @@ ca:
        action_with_app: Confirma i torna a %{app}
        explanation: Has creat un compte a %{host} amb aquesta adreça de correu electrònic. Estàs a un sol clic d'activar-lo. Si no ho has fet tu, ignora aquest correu electrònic.
        explanation_when_pending: Has sol·licitat una invitació a %{host} amb aquesta adreça-e. Revisarem la sol·licitud quan la confirmis. Pots iniciar la sessió per canviar els detalls o eliminar el compte, però no pots accedir a la majoria de les funcions fins que s'hagi aprovat. Si es rebutja la sol·licitud, les teves dades s’eliminaran, de manera que no se t’exigirà cap acció més. Si tu no has fet aquesta sol·licitud, ignora aquest correu-e.
        extra_html: Si us plau, consulta també a <a href="%{terms_path}"> les regles del servidor</a> i a <a href="%{policy_path}"> les nostres condicions de servei</a>.
        extra_html: Consulteu també a <a href="%{terms_path}"> les regles del servidor</a> i a <a href="%{policy_path}"> les nostres condicions de servei</a>.
        subject: 'Mastodon: Instruccions de confirmació de %{instance}'
        title: Verifica l'adreça-e
      email_changed:

M config/locales/devise.de.yml => config/locales/devise.de.yml +4 -4
@@ 82,8 82,8 @@ de:
      success: Du hast dich erfolgreich mit deinem Konto %{kind} angemeldet.
    passwords:
      no_token: Du kannst diese Seite nur über den Link aus der E-Mail zum Zurücksetzen des Passworts aufrufen. Wenn du einen solchen Link aufgerufen hast, vergewissere dich bitte, dass du die vollständige Adresse aufrufst.
      send_instructions: Du erhältst in wenigen Minuten eine E-Mail. Darin wird erklärt, wie du dein Passwort zurücksetzen kannst.
      send_paranoid_instructions: Falls deine E-Mail-Adresse in unserer Datenbank hinterlegt ist, erhältst du in wenigen Minuten eine E-Mail. Darin wird erklärt, wie du dein Passwort zurücksetzen kannst.
      send_instructions: Du erhältst in wenigen Minuten eine E-Mail, sofern deine Adresse unserer Datenbank bekannt ist. In dieser Nachricht befindet sich ein Link. Wenn du diesen aufrufst, kannst du dein Passwort zurücksetzen. Sollte die E-Mail nicht im Posteingangsordner landen, überprüfe auch deinen Spam-/Junk-Ordner.
      send_paranoid_instructions: Du erhältst in wenigen Minuten eine E-Mail, sofern deine Adresse unserer Datenbank bekannt ist. In dieser Nachricht befindet sich ein Link. Wenn du diesen aufrufst, kannst du dein Passwort zurücksetzen. Sollte die E-Mail nicht im Posteingangsordner landen, überprüfe auch deinen Spam-/Junk-Ordner.
      updated: Dein Passwort wurde erfolgreich geändert. Du bist jetzt angemeldet.
      updated_not_active: Dein Passwort wurde erfolgreich geändert.
    registrations:


@@ 100,8 100,8 @@ de:
      signed_in: Erfolgreich angemeldet.
      signed_out: Erfolgreich abgemeldet.
    unlocks:
      send_instructions: Du erhältst in wenigen Minuten eine E-Mail. Darin wird erklärt, wie du dein Konto entsperren kannst.
      send_paranoid_instructions: Falls deine E-Mail-Adresse in unserer Datenbank hinterlegt ist, erhältst du in wenigen Minuten eine E-Mail. Darin wird erklärt, wie du dein Konto entsperren kannst.
      send_instructions: Du erhältst in wenigen Minuten eine E-Mail. Darin wird erklärt, wie du dein Konto entsperren kannst. Sollte die E-Mail nicht im Posteingangsordner landen, überprüfe auch deinen Spam-/Junk-Ordner.
      send_paranoid_instructions: Falls deine E-Mail-Adresse in unserer Datenbank hinterlegt ist, erhältst du in wenigen Minuten eine E-Mail. Darin wird erklärt, wie du dein Konto entsperren kannst. Sollte die E-Mail nicht im Posteingangsordner landen, überprüfe auch deinen Spam-/Junk-Ordner.
      unlocked: Dein Konto wurde erfolgreich entsperrt. Bitte melde dich an, um fortzufahren.
  errors:
    messages:

M config/locales/devise.ms.yml => config/locales/devise.ms.yml +22 -0
@@ 81,17 81,39 @@ ms:
      failure: Tidak dapat mengesahkan anda daripada %{kind} disebabkan oleh “%{reason}”.
      success: Berjaya disahkan daripada akaun %{kind}.
    passwords:
      no_token: Anda tidak boleh mengakses halaman ini tanpa datang daripada e-mel tetapan semula kata laluan. Jika anda datang daripada e-mel tetapan semula kata laluan, sila pastikan anda menggunakan URL penuh yang disediakan.
      send_instructions: Jika alamat e-mel anda wujud dalam pangkalan data kami, anda akan menerima pautan pemulihan kata laluan di alamat e-mel anda dalam beberapa minit. Sila semak folder spam anda jika anda tidak menerima e-mel ini.
      send_paranoid_instructions: Jika alamat e-mel anda wujud dalam pangkalan data kami, anda akan menerima pautan pemulihan kata laluan di alamat e-mel anda dalam beberapa minit. Sila semak folder spam anda jika anda tidak menerima e-mel ini.
      updated: Kata laluan anda telah berjaya ditukar. Anda telah didaftar masuk.
      updated_not_active: Kata laluan anda telah berjaya ditukar.
    registrations:
      destroyed: Selamat tinggal! Akaun anda telah berjaya dibatalkan. Kami harap berjumpa lagi.
      signed_up: Selamat datang! Anda telah berjaya mendaftar.
      signed_up_but_inactive: Anda telah berjaya mendaftar. Namun, kami tidak dapat mendaftar masuk anda kerana akaun anda belum diaktifkan.
      signed_up_but_locked: Anda telah berjaya mendaftar. Walau bagaimanapun, kami tidak dapat melog masuk anda kerana akaun anda dikunci.
      signed_up_but_pending: Mesej dengan pautan pengesahan telah dihantar ke alamat e-mel anda. Selepas anda mengklik pautan, kami akan menyemak permohonan anda. Anda akan dimaklumkan jika ia diluluskan.
      signed_up_but_unconfirmed: Mesej dengan pautan pengesahan telah dihantar ke alamat e-mel anda. Sila ikuti pautan untuk mengaktifkan akaun anda. Sila semak folder spam anda jika anda tidak menerima e-mel ini.
      update_needs_confirmation: Anda berjaya mengemas kini akaun anda, tetapi kami perlu mengesahkan alamat e-mel baharu anda. Sila semak e-mel anda dan ikuti pautan pengesahan untuk mengesahkan alamat e-mel baharu anda. Sila semak folder spam anda jika anda tidak menerima e-mel ini.
      updated: Akaun anda telah berjaya dikemas kini.
    sessions:
      already_signed_out: Daftar keluar berjaya.
      signed_in: Daftar masuk berjaya.
      signed_out: Daftar keluar berjaya.
    unlocks:
      send_instructions: Anda akan menerima e-mel dengan arahan tentang cara membuka kunci akaun anda dalam beberapa minit. Sila semak folder spam anda jika anda tidak menerima e-mel ini.
      send_paranoid_instructions: Jika akaun anda wujud, anda akan menerima e-mel dengan arahan cara membuka kuncinya dalam beberapa minit. Sila semak folder spam anda jika anda tidak menerima e-mel ini.
      unlocked: Akaun anda telah berjaya dibuka. Sila log masuk untuk meneruskan.
  errors:
    messages:
      already_confirmed: sudah disahkan, sila cuba mendaftar masuk
      confirmation_period_expired: perlu disahkan dalam %{period}, sila minta yang baharu
      expired: telah tamat tempoh, sila minta yang baharu
      not_found: tidak dijumpai
      not_locked: tidak dikunci
      not_saved:
        other: |-
          satu
          1 ralat melarang %{resource} ini daripada disimpan:

          Lain-lain
          %{count} ralat melarang %{resource} ini daripada disimpan:

M config/locales/doorkeeper.ar.yml => config/locales/doorkeeper.ar.yml +1 -0
@@ 127,6 127,7 @@ ar:
        bookmarks: الفواصل المرجعية
        conversations: المحادثات
        crypto: التشفير من الطرف إلى نهاية الطرف
        favourites: المفضلة
        filters: عوامل التصفية
        follow: الإشتراكات والحسابات المكتومة والحسابات المحجوبة
        follows: الإشتراكات

M config/locales/doorkeeper.be.yml => config/locales/doorkeeper.be.yml +3 -0
@@ 127,6 127,7 @@ be:
        bookmarks: Закладкі
        conversations: Размовы
        crypto: Скразное шыфраванне
        favourites: Упадабанае
        filters: Фільтры
        follow: Падпіскі, ігнараванне і блакіроўка
        follows: Падпіскі


@@ 169,6 170,7 @@ be:
      read:accounts: бачыць інфармацыю аб уліковых запісах
      read:blocks: бачыць свае блакіроўкі
      read:bookmarks: бачыць свае закладкі
      read:favourites: бачыць сваё упадабанае
      read:filters: бачыць свае фільтры
      read:follows: бачыць свае падпіскі
      read:lists: бачыць свае спісы


@@ 182,6 184,7 @@ be:
      write:blocks: блакіраваць уліковыя запісы і дамены
      write:bookmarks: закладкі допісаў
      write:conversations: ігнараваць і выдаляць размовы
      write:favourites: упадабаныя допісы
      write:filters: ствараць фільтры
      write:follows: Сачыць за людзьмі
      write:lists: ствараць спiсы

M config/locales/doorkeeper.ca.yml => config/locales/doorkeeper.ca.yml +5 -5
@@ 150,11 150,11 @@ ca:
      admin:read: llegeix totes les dades en el servidor
      admin:read:accounts: llegir informació confidencial de tots els comptes
      admin:read:canonical_email_blocks: llegeix informació sensible de tots els blocs canònics de correu-e
      admin:read:domain_allows: llegeix informació sensible de tots els dominis permesos
      admin:read:domain_blocks: llegeix informació sensible de tots els blocs de domini
      admin:read:email_domain_blocks: llegeix informació sensible de tots els blocs de domini de correu-e
      admin:read:ip_blocks: llegeix informació sensible de tots els blocs d'IP
      admin:read:reports: llegir informació confidencial de tots els informes i comptes reportats
      admin:read:domain_allows: llegeix informació confidencial de tots els dominis permesos
      admin:read:domain_blocks: llegeix informació confidencial de tots els blocs de domini
      admin:read:email_domain_blocks: llegeix informació confidencial de tots els blocs de domini de correu-e
      admin:read:ip_blocks: llegeix informació confidencial de tots els blocs d'IP
      admin:read:reports: llegeix informació confidencial de tots els informes i comptes reportats
      admin:write: modificar totes les dades en el servidor
      admin:write:accounts: fer l'acció de moderació en els comptes
      admin:write:canonical_email_blocks: executa accions de moderació en blocs canònics de correu-e

M config/locales/doorkeeper.cs.yml => config/locales/doorkeeper.cs.yml +3 -0
@@ 127,6 127,7 @@ cs:
        bookmarks: Záložky
        conversations: Konverzace
        crypto: End-to-end šifrování
        favourites: Oblíbené
        filters: Filtry
        follow: Sledování, ztlumení a blokování
        follows: Sledovaní


@@ 169,6 170,7 @@ cs:
      read:accounts: vidět informace o účtech
      read:blocks: vidět vaše blokace
      read:bookmarks: vidět vaše záložky
      read:favourites: zobrazit vaše oblíbené
      read:filters: vidět vaše filtry
      read:follows: vidět vaše sledování
      read:lists: vidět vaše seznamy


@@ 182,6 184,7 @@ cs:
      write:blocks: blokovat účty a domény
      write:bookmarks: přidávat příspěvky do záložek
      write:conversations: skrývat a mazat konverzace
      write:favourites: oblíbené příspěvky
      write:filters: vytvářet filtry
      write:follows: sledovat lidi
      write:lists: vytvářet seznamy

M config/locales/doorkeeper.es-MX.yml => config/locales/doorkeeper.es-MX.yml +3 -0
@@ 127,6 127,7 @@ es-MX:
        bookmarks: Marcadores
        conversations: Conversaciones
        crypto: Cifrado de extremo a extremo
        favourites: Favoritos
        filters: Filtros
        follow: Seguimientos, silenciados y bloqueos
        follows: Seguidos


@@ 169,6 170,7 @@ es-MX:
      read:accounts: ver información de cuentas
      read:blocks: ver a quién has bloqueado
      read:bookmarks: ver tus marcadores
      read:favourites: ver tus favoritos
      read:filters: ver tus filtros
      read:follows: ver a quién sigues
      read:lists: ver tus listas


@@ 182,6 184,7 @@ es-MX:
      write:blocks: bloquear cuentas y dominios
      write:bookmarks: guardar estados como marcadores
      write:conversations: silenciar y eliminar conversaciones
      write:favourites: marcar publicaciones como favoritas
      write:filters: crear filtros
      write:follows: seguir usuarios
      write:lists: crear listas

M config/locales/doorkeeper.es.yml => config/locales/doorkeeper.es.yml +3 -0
@@ 127,6 127,7 @@ es:
        bookmarks: Marcadores
        conversations: Conversaciones
        crypto: Cifrado de extremo a extremo
        favourites: Favoritos
        filters: Filtros
        follow: Seguimientos, silenciados y bloqueos
        follows: Seguidos


@@ 169,6 170,7 @@ es:
      read:accounts: ver información de cuentas
      read:blocks: ver a quién has bloqueado
      read:bookmarks: ver tus marcadores
      read:favourites: ver tus favoritos
      read:filters: ver tus filtros
      read:follows: ver a quién sigues
      read:lists: ver tus listas


@@ 182,6 184,7 @@ es:
      write:blocks: bloquear cuentas y dominios
      write:bookmarks: guardar publicaciones como marcadores
      write:conversations: silenciar y eliminar conversaciones
      write:favourites: marcar publicaciones como favoritas
      write:filters: crear filtros
      write:follows: seguir usuarios
      write:lists: crear listas

M config/locales/doorkeeper.gd.yml => config/locales/doorkeeper.gd.yml +46 -43
@@ 127,6 127,7 @@ gd:
        bookmarks: Comharran-lìn
        conversations: Còmhraidhean
        crypto: Crioptachadh o cheann gu ceann
        favourites: Annsachdan
        filters: Criathragan
        follow: Leantainn, mùchaidhean is bacaidhean
        follows: Leantainn


@@ 146,47 147,49 @@ gd:
      application:
        title: Tha feum air ùghdarrachadh OAuth
    scopes:
      admin:read: dàta sam bith a leughadh air an fhrithealaiche
      admin:read:accounts: fiosrachadh dìomhair air a h-uile cunntas a leughadh
      admin:read:canonical_email_blocks: fiosrachadh dìomhair air a h-uile bacadh puist-d gnàthach a leughadh
      admin:read:domain_allows: fiosrachadh dìomhair air a h-uile cead àrainne a leughadh
      admin:read:domain_blocks: fiosrachadh dìomhair air a h-uile bacadh àrainne a leughadh
      admin:read:email_domain_blocks: fiosrachadh dìomhair air a h-uile bacadh àrainn puist-d a leughadh
      admin:read:ip_blocks: fiosrachadh dìomhair air a h-uile bacadh IP a leughadh
      admin:read:reports: fiosrachadh dìomhair air a h-uile gearan is cunntasan a chaidh a ghearan mun dèidhinn a leughadh
      admin:write: dàta sam bith atharrachadh air an fhrithealaiche
      admin:write:accounts: gnìomhan na maorsainneachd a ghabhail air cunntasan
      admin:write:canonical_email_blocks: gnìomhan na maorsainneachd a ghabhail air bacaidhean puist-d gnàthach
      admin:write:domain_allows: gnìomhan na maorsainneachd a ghabhail air ceadan àrainn
      admin:write:domain_blocks: gnìomhan na maorsainneachd a ghabhail air bacaidhean àrainne
      admin:write:email_domain_blocks: gnìomhan na maorsainneachd a ghabhail air bacaidhean àrainn puist-d
      admin:write:ip_blocks: gnìomhan na maorsainneachd a ghabhail air bacaidhean IP
      admin:write:reports: gnìomhan na maorsainneachd a ghabhail air gearanan
      crypto: crioptachadh o cheann gu ceann a chleachdadh
      follow: dàimhean chunntasan atharrachadh
      push: na brathan putaidh agad fhaighinn
      read: dàta sam bith a’ cunntais agad a leughadh
      read:accounts: fiosrachadh nan cunntasan fhaicinn
      read:blocks: na bacaidhean agad fhaicinn
      read:bookmarks: na comharran-lìn agad fhaicinn
      read:filters: na criathragan agad fhaicinn
      read:follows: faicinn cò a tha thu a’ leantainn
      read:lists: na liostaichean agad fhaicinn
      read:mutes: na mùchaidhean agad fhaicinn
      read:notifications: na brathan agad faicinn
      read:reports: na gearanan agad fhaicinn
      read:search: lorg a dhèanamh às do leth
      read:statuses: na postaichean uile fhaicinn
      write: dàta sam bith a’ cunntais agad atharrachadh
      write:accounts: a’ phròifil agad atharrachadh
      write:blocks: cunntasan is àrainnean a bhacadh
      write:bookmarks: comharran-lìn a dhèanamh de phostaichean
      write:conversations: còmhraidhean a mhùchadh is a sguabadh às
      write:filters: criathragan a chruthachadh
      admin:read: leughadh dàta sam bith air an fhrithealaiche
      admin:read:accounts: leughadh fiosrachaidh dhìomhair air a h-uile cunntas
      admin:read:canonical_email_blocks: leughadh fiosrachaidh dhìomhair air a h-uile bacadh puist-d gnàthach
      admin:read:domain_allows: leughadh fiosrachaidh dhìomhair air a h-uile cead àrainne
      admin:read:domain_blocks: leughadh fiosrachaidh dhìomhair air a h-uile bacadh àrainne
      admin:read:email_domain_blocks: leughadh fiosrachaidh dhìomhair air a h-uile bacadh àrainn puist-d
      admin:read:ip_blocks: leughadh fiosrachaidh dhìomhair air a h-uile bacadh IP
      admin:read:reports: leughadh fiosrachaidh dhìomhair air a h-uile gearan is cunntasan a chaidh a ghearan mun dèidhinn
      admin:write: atharrachadh dàta sam bith air an fhrithealaiche
      admin:write:accounts: gnìomhan na maorsainneachd air cunntasan
      admin:write:canonical_email_blocks: gnìomhan na maorsainneachd air bacaidhean puist-d gnàthach
      admin:write:domain_allows: gnìomhan na maorsainneachd air ceadan àrainn
      admin:write:domain_blocks: gnìomhan na maorsainneachd air bacaidhean àrainne
      admin:write:email_domain_blocks: gnìomhan na maorsainneachd air bacaidhean àrainn puist-d
      admin:write:ip_blocks: gnìomhan na maorsainneachd air bacaidhean IP
      admin:write:reports: gnìomhan na maorsainneachd air gearanan
      crypto: cleachdadh crioptachaidh o cheann gu ceann
      follow: atharrachadh dàimhean chunntasan
      push: faighinn nam brathan putaidh agad
      read: leughadh dàta sam bith a’ cunntais agad
      read:accounts: sealltainn fiosrachadh nan cunntasan
      read:blocks: sealltainn nam bacaidhean agad
      read:bookmarks: sealltainn nan comharran-lìn agad
      read:favourites: sealltainn nan annsachdan agad
      read:filters: sealltainn nan criathragan agad
      read:follows: sealltainn cò a tha thu a’ leantainn
      read:lists: sealltainn nan liostaichean agad
      read:mutes: sealltainn nam mùchaidhean agad
      read:notifications: sealltainn nam brathan agad
      read:reports: sealltainn nan gearanan agad
      read:search: lorg às do leth
      read:statuses: sealltainn nam postaichean uile
      write: atharrachadh dàta sam bith a’ cunntais agad
      write:accounts: atharrachadh na pròifile agad
      write:blocks: bacadh chunntasan is àrainnean
      write:bookmarks: cruthachadh chomharran-lìn de phostaichean
      write:conversations: mùchadh is sguabadh às chòmhraidhean
      write:favourites: cur phostaichean ris na h-annsachdan
      write:filters: cruthachadh chriathragan
      write:follows: leantainn dhaoine
      write:lists: liostaichean a chruthachadh
      write:media: faidhlichean meadhain a luchdadh suas
      write:mutes: daoine is còmhraidhean a mhùchadh
      write:notifications: na brathan agad fhalamhachadh
      write:reports: gearan a dhèanamh mu chàch
      write:statuses: postaichean fhoillseachadh
      write:lists: cruthachadh liostaichean
      write:media: luchdadh suas fhaidhlichean meadhain
      write:mutes: mùchadh dhaoine is chòmhraidhean
      write:notifications: falamhachadh nam brathan agad
      write:reports: gearan mu chàch
      write:statuses: foillseachadh phostaichean

M config/locales/doorkeeper.ms.yml => config/locales/doorkeeper.ms.yml +144 -0
@@ 4,21 4,103 @@ ms:
    attributes:
      doorkeeper/application:
        name: Nama aplikasi
        redirect_uri: Ubah hala URI
        scopes: Skop
        website: Laman web permohonan
    errors:
      models:
        doorkeeper/application:
          attributes:
            redirect_uri:
              fragment_present: tidak boleh mengandungi serpihan.
              invalid_uri: mestilah URI yang sah.
              relative_uri: mestilah URI mutlak.
              secured_uri: mestilah URI HTTPS/SSL.
  doorkeeper:
    applications:
      buttons:
        authorize: Benarkan
        cancel: Batal
        destroy: Musnah
        edit: Sunting
        submit: Hantar
      confirmations:
        destroy: Anda pasti?
      edit:
        title: Mengedit permohonan
      form:
        error: Alamak! Semak borang anda untuk kemungkinan kesilapan
      help:
        native_redirect_uri: Gunakan %{native_redirect_uri} untuk ujian tempatan
        redirect_uri: Gunakan satu barisan setiap URI
        scopes: Asingkan skop dengan ruang. Biarkan kosong untuk menggunakan skop lalai.
      index:
        application: Aplikasi
        callback_url: URL callback
        delete: Padam
        empty: Anda tidak mempunyai aplikasi.
        name: Nama
        new: Aplikasi baru
        scopes: Skop
        show: Paparkan
        title: Aplikasi anda
      new:
        title: Aplikasi baru
      show:
        actions: Tindakan
        application_id: Kunci klien
        callback_urls: URLs Callback
        scopes: Skop
        secret: Rahsia klien
        title: 'Aplikasi: %{name}'
    authorizations:
      buttons:
        authorize: Benarkan
        deny: Nafikan
      error:
        title: Ralat telah berlaku
      new:
        prompt_html: "%{client_name} ingin mendapatkan kebenaran untuk mengakses akaun anda. Ia adalah aplikasi pihak ketiga. <strong>Jika anda tidak mempercayainya, maka anda tidak seharusnya membenarkannya.</strong>"
        review_permissions: Semak kebenaran
        title: Kebenaran diperlukan
      show:
        title: Salin kod kebenaran ini dan tampalkannya pada aplikasi.
    authorized_applications:
      buttons:
        revoke: Batalkan
      confirmations:
        revoke: Adakah anda pasti?
      index:
        authorized_at: Dibenarkan on %{date}
        description_html: Ini adalah aplikasi yang boleh mengakses akaun lalui kegunaan API. Jika terdapat aplikasi yang anda tidak kenali di sini, atau aplikasi tidak berfungsi, anda boleh membatalkan aksesnya.
        last_used_at: Terakhir digunakan pada %{date}
        never_used: Tidak pernah digunakan
        scopes: Kebenaran
        superapp: Dalaman
        title: Aplikasi anda your dibenarkan
    errors:
      messages:
        access_denied: Pemilik sumber atau server kebenaran menolak permintaan.
        credential_flow_not_configured: Carian Pemilik Sumber gagal kerana Doorkeeper.configure.resource_owner_authenticator tidak dikonfigurasikan.
        invalid_client: Pengesahan pelanggan gagal disebabkan oleh pelanggan yang tidak diketahui, tiada pengesahan pelanggan disertakan atau kaedah pengesahan yang tidak disokong.
        invalid_grant: Pemberian kebenaran yang diberikan adalah tidak sah, tamat tempoh, dibatalkan, tidak sepadan dengan URI pengalihan yang digunakan dalam permintaan kebenaran atau telah dikeluarkan kepada klien lain.
        invalid_redirect_uri: Uri ubah hala yang disertakan tidak sah.
        invalid_request:
          missing_param: 'Parameter yang diperlukan hilang: %{value}.'
          request_not_authorized: Permintaan perlu dibenarkan. Parameter yang diperlukan untuk membenarkan permintaan tiada atau tidak sah.
          unknown: Permintaan itu tidak mempunyai parameter yang diperlukan, termasuk nilai parameter yang tidak disokong, atau sebaliknya salah bentuk.
        invalid_resource_owner: Bukti kelayakan pemilik sumber yang diberikan tidak sah atau pemilik sumber tidak dapat ditemui
        invalid_scope: Skop yang diminta tidak sah, tidak diketahui atau salah bentuk.
        invalid_token:
          expired: Token akses telah tamat tempoh
          revoked: Token akses telah dibatalkan
          unknown: Token akses tidak sah
        resource_owner_authenticator_not_configured: Carian Pemilik Sumber gagal kerana Doorkeeper.configure.resource_owner_authenticator tidak dikonfigurasikan.
        server_error: Server kebenaran mengalami keadaan yang tidak dijangka yang menghalangnya daripada memenuhi permintaan.
        temporarily_unavailable: Server kebenaran pada masa ini tidak dapat mengendalikan permintaan kerana beban berlebihan sementara atau penyelenggaraan server.
        unauthorized_client: Klien tidak dibenarkan untuk melaksanakan permintaan ini menggunakan kaedah ini.
        unsupported_grant_type: Jenis pemberian kebenaran tidak disokong oleh server kebenaran.
        unsupported_response_type: Server kebenaran tidak menyokong jenis respons ini.
    flash:
      applications:
        create:


@@ 27,25 109,87 @@ ms:
          notice: Aplikasi dipadamkan.
        update:
          notice: Aplikasi dikemaskini.
      authorized_applications:
        destroy:
          notice: Aplikasi dipadamkan.
    grouped_scopes:
      access:
        read: Akses baca sahaja
        read/write: Akses baca dan tulis
        write: Akses tulis sahaja
      title:
        accounts: Akaun
        admin/accounts: Pengurusan akaun
        admin/all: Semua fungsi pengurusan
        admin/reports: Pengurusan laporan
        all: Akses penuh ke akaun Mastodon anda
        blocks: Blok
        bookmarks: Penanda buku
        conversations: Perbualan
        crypto: Penyulitan hujung ke hujung
        favourites: Kegemaran
        filters: Penapis
        follow: Ikut, Senyap dan Blok
        follows: Ikutan
        lists: Senarai
        media: Lampiran media
        mutes: Senyapkan
        notifications: Pemberitahuan
        push: Pemberitahuan segera
        reports: Laporan
        search: Cari
        statuses: Hantaran
    layouts:
      admin:
        nav:
          applications: Aplikasi
          oauth2_provider: Pembekal OAuth2
      application:
        title: Keizinan OAuth diperlukan
    scopes:
      admin:read: baca semua data pada pelayan
      admin:read:accounts: baca maklumat sensitif untuk semua akaun
      admin:read:canonical_email_blocks: baca maklumat sensitif semua blok e-mel kanonik
      admin:read:domain_allows: baca maklumat sensitif semua domain yang dibenarkan
      admin:read:domain_blocks: baca maklumat sensitif semua blok domain
      admin:read:email_domain_blocks: baca maklumat sensitif semua blok domain e-mel
      admin:read:ip_blocks: baca maklumat sensitif semua blok IP
      admin:read:reports: baca maklumat sensitif untuk semua laporan dan akaun-akaun yang dilaporkan
      admin:write: mengubah semua data pada pelayan
      admin:write:accounts: melakukan tindakan penyederhanaan pada akaun
      admin:write:canonical_email_blocks: melakukan tindakan penyederhanaan pada blok e-mel kanonik
      admin:write:domain_allows: melakukan tindakan penyederhanaan pada domain yang dibenarkan
      admin:write:domain_blocks: melakukan tindakan penyederhanaan pada blok domain
      admin:write:email_domain_blocks: melakukan tindakan penyederhanaan pada blok domain e-mel
      admin:write:ip_blocks: melakukan tindakan penyederhanaan pada blok IP
      admin:write:reports: melakukan tindakan penyederhanaan ke atas laporan
      crypto: gunakan penyulitan hujung ke hujung
      follow: mengubah suai perhubungan akaun
      push: terima pemberitahuan tolak anda
      read: baca semua data akaun anda
      read:accounts: lihat maklumat akaun
      read:blocks: lihat blok anda
      read:bookmarks: lihat penanda halaman anda
      read:favourites: lihat kegemaran anda
      read:filters: lihat penapis anda
      read:follows: lihat senarai yang anda ikuti
      read:lists: lihat senarai anda
      read:mutes: lihat senarai yang anda senyapkan
      read:notifications: lihat notifikasi anda
      read:reports: lihat laporan anda
      read:search: cari bagi pihak anda
      read:statuses: lihat semua hantaran
      write: ubahsuai semua data akaun anda
      write:accounts: ubaisuai profail anda
      write:blocks: domain dan akaun blok
      write:bookmarks: menandabuku hantaran
      write:conversations: senyapkan dan padamkan perbualan
      write:favourites: pos kesukaan
      write:filters: cipta penapis
      write:follows: ikut orang
      write:lists: cipta senarai
      write:media: memuat naik fail media
      write:mutes: membisukan orang dan perbualan
      write:notifications: kosongkan pemberitahuan anda
      write:reports: melaporkan orang lain
      write:statuses: terbitkan hantaran

M config/locales/doorkeeper.nn.yml => config/locales/doorkeeper.nn.yml +3 -0
@@ 127,6 127,7 @@ nn:
        bookmarks: Bokmerke
        conversations: Samtalar
        crypto: Ende-til-ende-kryptering
        favourites: Favorittar
        filters: Filter
        follow: Dei du fylgjer, målbind og blokkerer
        follows: Fylgjer


@@ 169,6 170,7 @@ nn:
      read:accounts: sjå informasjon om kontoar
      read:blocks: sjå dine blokkeringar
      read:bookmarks: sjå bokmerka dine
      read:favourites: sjå favorittane dine
      read:filters: sjå filtera dine
      read:follows: sjå fylgjarane dine
      read:lists: sjå listene dine


@@ 182,6 184,7 @@ nn:
      write:blocks: blokker kontoar og domene
      write:bookmarks: bokmerk innlegg
      write:conversations: målbind og slett samtalar
      write:favourites: favorittmarker innlegg
      write:filters: lag filter
      write:follows: fylg folk
      write:lists: lag lister

M config/locales/doorkeeper.no.yml => config/locales/doorkeeper.no.yml +3 -0
@@ 127,6 127,7 @@
        bookmarks: Bokmerker
        conversations: Samtaler
        crypto: Ende-til-ende-kryptering
        favourites: Favoritter
        filters: Filtre
        follow: Hvem du følger, demper og blokkerer
        follows: Følger


@@ 169,6 170,7 @@
      read:accounts: se informasjon om kontoer
      read:blocks: se blokkeringene dine
      read:bookmarks: se bokmerkene dine
      read:favourites: se favorittene dine
      read:filters: se filtrene dine
      read:follows: se hvem du følger
      read:lists: se listene dine


@@ 182,6 184,7 @@
      write:blocks: blokkere kontoer og domener
      write:bookmarks: bokmerke innlegg
      write:conversations: dempe og slette samtaler
      write:favourites: favorittmarker innlegg
      write:filters: opprette filtre
      write:follows: følge personer
      write:lists: opprette lister

M config/locales/doorkeeper.sv.yml => config/locales/doorkeeper.sv.yml +1 -0
@@ 127,6 127,7 @@ sv:
        bookmarks: Bokmärken
        conversations: Konversationer
        crypto: Ände-till-ände-kryptering
        favourites: Favoriter
        filters: Filter
        follow: Följare, mjutade och blockerade
        follows: Följer

M config/locales/es-MX.yml => config/locales/es-MX.yml +4 -0
@@ 1265,12 1265,14 @@ es-MX:
      bookmarks_html: Estás a punto de <strong>reemplazar tus marcadores</strong> por hasta <strong>%{total_items} publicaciones</strong> provenientes de <strong>%{filename}</strong>.
      domain_blocking_html: Estás a punto de <strong>reemplazar tu lista de bloqueos de dominio</strong> por hasta <strong>%{total_items} dominios</strong> provenientes de <strong>%{filename}</strong>.
      following_html: Estás a punto de <strong>seguir</strong> hasta <strong>%{total_items} cuentas</strong> provenientes de <strong>%{filename}</strong> y <strong>dejar de seguir a cualquier otra cuenta</strong>.
      lists_html: Estás a punto de <strong>reemplazar tus listas</strong> con contenidos de <strong>%{filename}</strong>. Se añadirán <strong>%{total_items} cuentas</strong> a nuevas listas.
      muting_html: Estás a punto de <strong>reemplazar tu lista de cuentas silenciadas</strong> con hasta <strong>%{total_items} cuentas</strong> proveninetes de <strong>%{filename}</strong>.
    preambles:
      blocking_html: Estás a punto de <strong>bloquear</strong> hasta <strong>%{total_items} cuentas</strong> proveninetes de <strong>%{filename}</strong>.
      bookmarks_html: Estás a punto de añadir hasta <strong>%{total_items} publicaciones</strong> proveninetes de <strong>%{filename}</strong> a tus <strong>marcadores</strong>.
      domain_blocking_html: Estás a punto de <strong>bloquear</strong> hasta <strong>%{total_items} dominios</strong> provenientes de <strong>%{filename}</strong>.
      following_html: Estás a punto de <strong>seguir</strong> hasta <strong>cuentas%{total_items}</strong> provenientes de <strong>%{filename}</strong>.
      lists_html: Estás a punto de añadir <strong>%{total_items} cuentas</strong> desde <strong>%{filename}</strong> a tus <strong>listas</strong>. Se crearán nuevas listas si no hay listas para añadirlas.
      muting_html: Estás a punto de <strong>silenciar</strong> hasta <strong>%{total_items} cuentas</strong> provenientes de <strong>%{filename}</strong>.
    preface: Puedes importar ciertos datos, como todas las personas que estás siguiendo o bloqueando en tu cuenta en esta instancia, desde archivos exportados de otra instancia.
    recent_imports: Importaciones recientes


@@ 1287,6 1289,7 @@ es-MX:
      bookmarks: Importando marcadores
      domain_blocking: Importando dominios bloqueados
      following: Importando cuentas seguidas
      lists: Importando listas
      muting: Importando cuentas silenciadas
    type: Importar tipo
    type_groups:


@@ 1297,6 1300,7 @@ es-MX:
      bookmarks: Marcadores
      domain_blocking: Lista de dominios bloqueados
      following: Lista de seguidos
      lists: Listas
      muting: Lista de silenciados
    upload: Cargar
  invites:

M config/locales/es.yml => config/locales/es.yml +4 -0
@@ 1265,12 1265,14 @@ es:
      bookmarks_html: Estás a punto de <strong>reemplazar tus marcadores</strong> por hasta <strong>%{total_items} publicaciones</strong> provenientes de <strong>%{filename}</strong>.
      domain_blocking_html: Estás a punto de <strong>reemplazar tu lista de bloqueos de dominio</strong> por hasta <strong>%{total_items} dominios</strong> provenientes de <strong>%{filename}</strong>.
      following_html: Estás a punto de <strong>seguir</strong> hasta <strong>%{total_items} cuentas</strong> provenientes de <strong>%{filename}</strong> y <strong>dejar de seguir a cualquier otra cuenta</strong>.
      lists_html: Estás a punto de <strong>reemplazar tus listas</strong> con contenidos de <strong>%{filename}</strong>. Se añadirán <strong>%{total_items} cuentas</strong> a nuevas listas.
      muting_html: Estás a punto de <strong>reemplazar tu lista de cuentas silenciadas</strong> con hasta <strong>%{total_items} cuentas</strong> proveninetes de <strong>%{filename}</strong>.
    preambles:
      blocking_html: Estás a punto de <strong>bloquear</strong> hasta <strong>%{total_items} cuentas</strong> proveninetes de <strong>%{filename}</strong>.
      bookmarks_html: Está a punto de añadir hasta <strong>%{total_items} publicaciones</strong> proveninetes de <strong>%{filename}</strong> a tus <strong>marcadores</strong>.
      domain_blocking_html: Estás a punto de <strong>bloquear</strong> hasta <strong>%{total_items} dominios</strong> provenientes de <strong>%{filename}</strong>.
      following_html: Estás a punto de <strong>seguir</strong> hasta <strong>cuentas%{total_items}</strong> provenientes de <strong>%{filename}</strong>.
      lists_html: Estás a punto de añadir <strong>%{total_items} cuentas</strong> desde <strong>%{filename}</strong> a tus <strong>listas</strong>. Se crearán nuevas listas si no hay listas para añadirlas.
      muting_html: Estás a punto de <strong>silenciar</strong> hasta <strong>%{total_items} cuentas</strong> provenientes de <strong>%{filename}</strong>.
    preface: Puedes importar ciertos datos, como todas las personas que estás siguiendo o bloqueando en tu cuenta en esta instancia, desde archivos exportados de otra instancia.
    recent_imports: Importaciones recientes


@@ 1287,6 1289,7 @@ es:
      bookmarks: Importando marcadores
      domain_blocking: Importando dominios bloqueados
      following: Importando cuentas seguidas
      lists: Importando listas
      muting: Importando cuentas silenciadas
    type: Importar tipo
    type_groups:


@@ 1297,6 1300,7 @@ es:
      bookmarks: Marcadores
      domain_blocking: Lista de dominios bloqueados
      following: Lista de seguidos
      lists: Listas
      muting: Lista de silenciados
    upload: Cargar
  invites:

M config/locales/fi.yml => config/locales/fi.yml +8 -1
@@ 387,7 387,7 @@ fi:
        confirm: Jäädytä
        permanent_action: Jäädytyksen kumoaminen ei palauta mitään tietoja tai suhteita.
        preamble_html: Olet jäädyttämässä verkkotunnuksen <strong>%{domain}</strong> ja sen aliverkkotunnukset.
        remove_all_data: Tämä poistaa palvelimeltasi kaiken sisällön, median ja profiilitiedot tämän verkkotunnuksen tileiltä.
        remove_all_data: Tämä toiminto poistaa palvelimeltasi kaiken sisällön, median ja profiilitiedot tämän palvelun tileiltä.
        stop_communication: Palvelimesi lopettaa näiden palvelinten viestinnän.
        title: Vahvista verkkotunnuksen %{domain} esto
        undo_relationships: Tämä kumoaa näiden palvelimien ja sinun tilien välisen seurannan.


@@ 1343,6 1343,7 @@ fi:
    unsubscribe:
      action: Kyllä, peru tilaus
      complete: Tilaus lopetettiin
      confirmation_html: Olethan varma, että haluat lopettaa %{type} -aiheisten Mastodonin sähköposti-ilmoitusten vastaanoton palvelimelta %{domain} osoitteeseesi %{email}? Voit toki milloin tahansa ottaa jälleen käyttöön muun muassa nämä viestit <a href="%{settings_path}">sähköposti-ilmoitusasetusten</a> kautta.
      emails:
        notification_emails:
          favourite: sähköpostit ilmoituksille


@@ 1350,6 1351,8 @@ fi:
          follow_request: seuraa pyyntöjä sähköpostiin
          mention: mainitse sähköpostin ilmoitukset
          reblog: tehosta sähköpostien ilmoituksia
      resubscribe_html: Jos olet perunut ilmoitusviestien vastaanottamisen suotta, pääset jälleentilaamaan ilmoitusviestejä <a href="%{settings_path}">sähköposti-ilmoitusasetusten</a> kautta.
      success_html: Sinulle ei vastedes lähetetä %{type} -aihepiirin Mastodon-sähköposti-ilmoituksia palvelimelta %{domain} osoitteeseen %{email}.
      title: Lopeta tilaus
  media_attachments:
    validations:


@@ 1767,6 1770,10 @@ fi:
    seamless_external_login: Olet kirjautunut ulkoisen palvelun kautta, joten salasana- ja sähköpostiasetukset eivät ole käytettävissä.
    signed_in_as: 'Kirjautunut tilillä:'
  verification:
    extra_instructions_html: <strong>Vinkki:</strong> Tämä linkitys verkkosivustollasi voidaan toteuttaa myös näkymättömänä. Tärkeä osuus on <code>rel="me"</code> -määre, jolla ehkäistään valeprofiilikäyttötarkoituksia sivustoilla, joiden sisältö perustuu käyttäjiensä julkaisuihin. Voit siis käyttää linkkiviittauselementtiä <code>link</code> HTML-lähdekoodin otsakeosassa (head) sen sijaan, että käyttäisit näkyvää hyperlinkkielementtiä <code>a</code>. HTML-lähdekoodin tulee tuolta osin kuitenkin olla JavaScriptistä riippumatonta.
    here_is_how: Näin voit tehdä sen
    hint_html: "<strong>Mastodonissa henkilöllisyyden vahventaminen on jokaisen käyttäjän ulottuvilla.</strong> Tämä perustuu avoimiin standardeihin, maksuttomasti nyt ja aina. Kaikki mitä tarvitset on henkilökohtainen verkkosivusto, jonka avulla sinut voidaan tunnistaa. Kun Mastodon-profiilistasi on linkki kyseiselle verkkosivustollesi, ja sieltä löytyy vastaviittaus tai -linkitys profiiliisi, näkyy profiilissasi vahvistustunniste."
    instructions_html: Kopioi ja liitä alla oleva koodi verkkosivusi HTML-lähdekoodiin. Lisää sitten verkkosivustosi osoite johonkin ylimääräisistä kentistä profiiliasetuksissa, "Muokkaa profiilia" -välilehdestä, ja tallenna muutokset.
    verification: Vahvistus
    verified_links: Vahvistetut linkkisi
  webauthn_credentials:

M config/locales/gd.yml => config/locales/gd.yml +5 -0
@@ 798,6 798,7 @@ gd:
          approved: Tha aontachadh riatanach airson clàradh
          none: Chan fhaod neach sam bith clàradh
          open: "’S urrainn do neach sam bith clàradh"
      title: Roghainnean an fhrithealaiche
    site_uploads:
      delete: Sguab às am faidhle a chaidh a luchdadh suas
      destroyed_msg: Chaidh an luchdadh suas dhan làrach a sguabadh às!


@@ 1314,12 1315,14 @@ gd:
      bookmarks_html: Tha thu an impis suas ri <strong>%{total_items} post(aichean)</strong> o <strong>%{filename}</strong> a chur <strong>an àite nan comharra-lìn</strong> agad.
      domain_blocking_html: Tha thu an impis suas ri <strong>%{total_items} àrainn(ean)</strong> o <strong>%{filename}</strong> a chur <strong>an àite liosta nam bacaidhean àrainne</strong> agad.
      following_html: Tha thu an impis suas ri <strong>%{total_items} cunntas(an)</strong> o <strong>%{filename}</strong> <strong>a leantainn</strong> agus <strong>sguiridh tu a leantainn duine sam bith eile</strong>.
      lists_html: Tha thu an impis susbaint <strong>%{filename}</strong> a chur <strong>an àite nan liostaichean agad</strong>. Thèid suas ri <strong>%{total_items}cunntas(an)</strong> a chur ri liostaichean ùra.
      muting_html: Tha thu an impis suas ri <strong>%{total_items} cunntas(an)</strong> o <strong>%{filename}</strong> a chur <strong>an àite liosta nan cunntasan mùchte</strong> agad.
    preambles:
      blocking_html: Tha thu an impis suas ri <strong>%{total_items} cunntas(an)</strong> o <strong>%{filename}</strong> a <strong>bhacadh</strong>.
      bookmarks_html: Tha thu an impis suas ri <strong>%{total_items} post(aichean)</strong> o <strong>%{filename}</strong> a chur ris na h-<strong>annsachdan</strong> agad.
      domain_blocking_html: Tha thu an impis suas ri <strong>%{total_items} àrainn(ean)</strong> o <strong>%{filename}</strong> a <strong>bhacadh</strong>.
      following_html: Tha thu an impis suas ri <strong>%{total_items} cunntas(an)</strong> o <strong>%{filename}</strong> a <strong>leantainn</strong>.
      lists_html: Tha thu an impis suas ri <strong>%{total_items} cunntas(an)</strong> o <strong>%{filename}</strong> a chur ris na <strong>liostaichean</strong> agad. Thèid liostaichean ùra a chruthachadh mur eil liostaichean ann airson nan cunntasan a chur ris.
      muting_html: Tha thu an impis suas ri <strong>%{total_items} cunntas(an)</strong> o <strong>%{filename}</strong> a <strong>mhùchadh</strong>.
    preface: "’S urrainn dhut dàta ion-phortadh a dh’às-phortaich thu o fhrithealaiche eile, can liosta nan daoine a leanas tu no a tha thu a’ bacadh."
    recent_imports: Ion-phortaidhean o chionn goirid


@@ 1336,6 1339,7 @@ gd:
      bookmarks: Ag ion-phortadh comharran-leabhair
      domain_blocking: Ag ion-phortadh àrainnean bacte
      following: Ion-phortaich cunntasan ’gan leantainn
      lists: Ag ion-phortadh liostaichean
      muting: Ag ion-phortadh cunntasan mùchte
    type: Seòrsa an ion-phortaidh
    type_groups:


@@ 1346,6 1350,7 @@ gd:
      bookmarks: Comharran-lìn
      domain_blocking: Liosta-bhacaidh àrainnean
      following: Liosta dhen fheadhainn a leanas tu
      lists: Liostaichean
      muting: Liosta a’ mhùchaidh
    upload: Luchdaich suas
  invites:

M config/locales/ko.yml => config/locales/ko.yml +10 -10
@@ 269,7 269,7 @@ ko:
        reopen_report_html: "%{name} 님이 신고 %{target}을 다시 열었습니다"
        resend_user_html: "%{name} 님이 %{target} 님에 대한 확인 메일을 다시 보냈습니다"
        reset_password_user_html: "%{name} 님이 사용자 %{target}의 암호를 초기화했습니다"
        resolve_report_html: "%{name} 님이 신고 %{target}를 처리됨으로 변경하였습니다"
        resolve_report_html: "%{name} 중재자가 %{target}번 신고를 해결로 변경하였습니다"
        sensitive_account_html: "%{name} 님이 %{target}의 미디어를 민감함으로 표시했습니다"
        silence_account_html: "%{name} 님이 %{target}의 계정을 제한시켰습니다"
        suspend_account_html: "%{name} 님이 %{target}의 계정을 정지시켰습니다"


@@ 354,7 354,7 @@ ko:
        other: "<strong>%{count}</strong>개의 대기 중인 해시태그"
      pending_users_html:
        other: "<strong>%{count}</strong>명의 대기 중인 사용자"
      resolved_reports: 신고 해결됨
      resolved_reports: 해결된 신고
      software: 소프트웨어
      sources: 가입 출처
      space: 디스크 사용량


@@ 600,7 600,7 @@ ko:
      delete_and_resolve: 게시물 삭제
      forwarded: 전달됨
      forwarded_to: "%{domain}에게 전달됨"
      mark_as_resolved: 해결 완료 처리
      mark_as_resolved: 해결로 표시
      mark_as_sensitive: 민감함으로 설정
      mark_as_unresolved: 미해결로 표시
      no_one_assigned: 아무도 없음


@@ 619,7 619,7 @@ ko:
      report: '신고 #%{id}'
      reported_account: 신고 대상 계정
      reported_by: 신고자
      resolved: 해결됨
      resolved: 해결
      resolved_msg: 신고를 잘 해결했습니다!
      skip_to_actions: 작업으로 건너뛰기
      status: 상태


@@ 712,7 712,7 @@ ko:
    rules:
      add_new: 규칙 추가
      delete: 삭제
      description_html: 대부분의 경우 사람들이 이용약관을 반드시 읽고 동의하도록 하지만, 보통의 사람들은 문제가 일어나기 전까지는 읽지 않습니다. <strong>여러분의 서버 규칙을 목록으로 정리해서 한 번에 읽기 쉽게 만드세요.</strong> 규칙 각각을 짧고 단순하게 만들고, 하나를 여러 개로 쪼개지도 마세요.
      description_html: 대부분의 사람들은 서비스 약관을 읽고 동의한다고 밝힙니다만, 대개 문제가 발생하기 전까지는 약관을 자세히 읽어보지 않습니다. <strong>서버의 운영원칙을 단일한 글머리 기호 목록으로 제공하여 한 눈에 쉽게 확인할 수 있도록 하세요.</strong> 각 규칙을 짧고 간결하게 유지하되, 많은 항목으로 나누지 않도록 하세요.
      edit: 규칙 수정
      empty: 아직 정의된 서버 규칙이 없습니다.
      title: 서버 규칙


@@ 851,7 851,7 @@ ko:
      statuses:
        allow: 게시물 허용
        allow_account: 작성자 허용
        description_html: 당신의 서버가 알기로 현재 많은 수의 공유와 좋아요가 되고 있는 게시물들입니다. 새로운 사용자나 돌아오는 사용자들이 팔로우 할 사람들을 찾는 데 도움이 될 수 있습니다. 작성자를 승인하고, 작성자가 그들의 계정이 다른 계정에게 탐색되도록 설정하지 않는 한 게시물들은 공개적으로 표시되지 않습니다. 또한 각각의 게시물을 별개로 거절할 수도 있습니다.
        description_html: 여러분의 서버가 알기로 현재 많은 수의 공유와 좋아요가 되고 있는 게시물들입니다. 새로운 사용자나 돌아오는 사용자들이 팔로우 할 사람들을 찾는 데 도움이 될 수 있습니다. 작성자를 승인하고, 작성자가 그들의 계정이 다른 계정에게 탐색되도록 설정하지 않는 한 게시물들은 공개적으로 표시되지 않습니다. 또한 각각의 게시물을 별개로 거절할 수도 있습니다.
        disallow: 게시물 비허용
        disallow_account: 작성자 비허용
        no_status_selected: 아무 것도 선택 되지 않아 어떤 유행중인 게시물도 바뀌지 않았습니다


@@ 1229,7 1229,7 @@ ko:
      invalid_csv_file: '올바르지 않은 CSV 파일입니다. 오류: %{error}'
      over_rows_processing_limit: "%{count}개 이상의 열을 포함합니다"
      too_large: 파일이 너무 큼
    failures: 실패함
    failures: 실패
    imported: 가져옴
    mismatched_types_warning: 가져오기할 때 잘못된 유형을 선택했을 수 있으니, 꼭 두 번 체크해주세요.
    modes:


@@ 1276,9 1276,9 @@ ko:
      blocking: 차단한 계정 목록
      bookmarks: 북마크
      domain_blocking: 도메인 차단 목록
      following: 팔로우 중인 계정 목록
      following: 팔로잉 목록
      lists: 리스트
      muting: 뮤트 중인 계정 목록
      muting: 뮤트한 계정 목록
    upload: 업로드
  invites:
    delete: 비활성화


@@ 1363,7 1363,7 @@ ko:
      cooldown: 이주 뒤에는 새로운 이주를 하지 못하는 휴식기간이 존재합니다
      disabled_account: 이 계정은 완전한 사용이 불가능하게 됩니다. 하지만, 데이터 내보내기나 재활성화를 위해 접근할 수 있습니다.
      followers: 이 행동은 현재 계정의 모든 팔로워를 새 계정으로 이동시킵니다
      only_redirect_html: 대신, <a href="%{path}">프로필에 리디렉션만 표시</a>할 수 있습니다.
      only_redirect_html: 대신, <a href="%{path}">프로필에 리디렉션만 표시</a>할 수도 있습니다.
      other_data: 다른 어떤 데이터도 자동적으로 옮겨지지 않을 것입니다
      redirect: 현재 계정 프로필은 리다이렉트 알림과 함께 업데이트 되며 검색에서 제외 됩니다
  moderation:

M config/locales/lt.yml => config/locales/lt.yml +10 -0
@@ 3,9 3,16 @@ lt:
  about:
    about_mastodon_html: Mastodon, tai socialinis tinklas pagrįstas atviro kodo programavimu, ir atvirais web protokolais. Visiškai nemokamas. Ši sistema decantrilizuota kaip jūsų elektroninis paštas.
    contact_missing: Nenustatyta
    contact_unavailable: Nėra duomenų
    hosted_on: Mastodon palaikomas naudojantis %{domain} talpinimu
    title: Apie
  accounts:
    follow: Sekti
    followers:
      few: Sekėjai
      many: Sekėjai
      one: Sekėjas
      other: Sekėjai
    following: Sekami
    last_active: paskutinį kartą aktyvus
    link_verified_on: Nuorodos nuosavybė paskutinį kartą tikrinta %{date}


@@ 22,6 29,7 @@ lt:
      created_msg: Moderavimo žinutė sėkimngai sukurta!
      destroyed_msg: Moderacijos žinutė sėkmingai ištrinta!
    accounts:
      approve: Patvirtinti
      are_you_sure: Ar esate įsitikinęs?
      avatar: Profilio nuotrauka
      by_domain: Domenas


@@ 51,6 59,7 @@ lt:
      header: Antraštė
      inbox_url: Gautųjų URL
      invited_by: Pakvietė
      ip: IP
      joined: Prisijungė
      location:
        all: Visi


@@ 84,6 93,7 @@ lt:
      reset_password: Atkurti slaptažodį
      resubscribe: Per prenumeruoti
      search: Ieškoti
      sensitized: Pažymėti kaip jautrią informaciją
      shared_inbox_url: Bendroji gautųjų URL
      show:
        created_reports: Parašyti raportai

M config/locales/ml.yml => config/locales/ml.yml +8 -0
@@ 76,6 76,14 @@ ml:
    invites:
      filter:
        all: എല്ലാം
  errors:
    '400': The request you submitted was invalid or malformed.
    '403': You don't have permission to view this page.
    '404': The page you are looking for isn't here.
    '406': This page is not available in the requested format.
    '410': The page you were looking for doesn't exist here anymore.
    '429': Too many requests
    '503': The page could not be served due to a temporary server failure.
  filters:
    contexts:
      notifications: അറിയിപ്പുകൾ

M config/locales/ms.yml => config/locales/ms.yml +79 -0
@@ 89,6 89,7 @@ ms:
      moderation:
        active: Aktif
        all: Semua
        disabled: Dimatikan
        pending: Menunggu
        silenced: Terhad
        suspended: Digantungkan


@@ 113,12 114,15 @@ ms:
      redownloaded_msg: Berjaya segarkan semula profil %{username} daripada asalnya
      reject: Tolak
      rejected_msg: Berjaya menolak permohonan pendaftaran %{username}
      remote_suspension_irreversible: Data akaun ini telah dipadamkan secara tidak dapat dipulihkan.
      remove_avatar: Buang avatar
      remove_header: Buang pengepala
      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 pautan pengesahan
        success: Pautan pengesahan berjaya dihantar!
      reset: Tetapkan semula
      reset_password: Tetapkan semula kata laluan
      resubscribe: Langgan semula


@@ 126,6 130,7 @@ ms:
      search: Cari
      search_same_email_domain: Pengguna lain dengan domain e-mel yang sama
      search_same_ip: Pengguna lain dengan alamat IP yang sama
      security: Keselamatan
      security_measures:
        only_password: Kata laluan sahaja
        password_and_2fa: Kata laluan dan 2FA


@@ 369,6 374,12 @@ ms:
      undo: Buang kebenaran persekutuan dengan domain
    domain_blocks:
      add_new: Tambah penyekatan domain baharu
      confirm_suspension:
        cancel: Batal
        confirm: Gantung
        permanent_action: Membuat asal penggantungan tidak akan memulihkan sebarang data atau perhubungan.
        preamble_html: Anda akan menggantung <strong>%{domain}</strong> dan subdomainnya.
        remove_all_data: Ini akan mengalih keluar semua kandungan, media dan data profil untuk akaun domain ini daripada sever anda.
      created_msg: Sekatan domain sedang diproses
      destroyed_msg: Sekatan domain telah diundurkan
      domain: Domain


@@ 414,6 425,7 @@ ms:
        resolve: Menyelesaikan domain
        title: Sekat domain e-mel baharu
      no_email_domain_block_selected: Tiada sekatan domain e-mel diubah kerana tiada yang dipilih
      not_permitted: Tidak dibenarkan
      resolved_through_html: Diselesaikan melalui %{domain}
      title: Domain e-mel disekat
    export_domain_allows:


@@ 423,6 435,9 @@ ms:
    export_domain_blocks:
      import:
        existing_relationships_warning: Hubungan ikut sedia ada
        title: Import blok domain
      new:
        title: Import blok domain
      no_file: Tiada fail yang dipilih
    follow_recommendations:
      description_html: "<strong>Saranan ikutan membantu pengguna baharu mencari kandungan menarik dengan cepat</strong>. 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."


@@ 444,7 459,10 @@ ms:
      content_policies:
        comment: Catatan dalaman
        policies:
          reject_media: Tolak media
          reject_reports: Tolak laporan
          silence: Hadkan
          suspend: Gantung
        policy: Dasar
        reason: Sebab awam
        title: Dasar kandungan


@@ 454,6 472,7 @@ ms:
        instance_followers_measure: pengikut kami di situ
        instance_follows_measure: pengikut mereka di sini
        instance_languages_dimension: Bahasa teratas
        instance_media_attachments_measure: lampiran media yang disimpan
        instance_reports_measure: laporan mengenai mereka
        instance_statuses_measure: Hantaran yang disimpan
      delivery:


@@ 467,6 486,8 @@ ms:
      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


@@ 538,9 559,11 @@ ms:
      assign_to_self: Menugaskan kepada saya
      assigned: Penyederhana yang ditugaskan
      by_target_domain: Domain bagi akaun yang dilaporkan
      cancel: Batal
      category: Kumpulan
      comment:
        none: Tiada
      confirm: Konfirm
      created_at: Dilaporkan
      delete_and_resolve: Padam hantaran
      forwarded: Dipanjangkan


@@ 556,6 579,7 @@ ms:
        delete: Padam
        placeholder: Terangkan tindakan apa yang telah diambil, atau sebarang kemas kini lain yang berkaitan...
        title: Catatan
      processed_msg: 'Laporan #%{id} berjaya diproses'
      reopen: Buka semula laporan
      report: 'Laporan #%{id}'
      reported_account: Akaun yang dilaporkan


@@ 669,6 693,8 @@ ms:
      destroyed_msg: Muat naik tapak berjaya dihapuskan!
    statuses:
      account: Penulis
      batch:
        report: Laporan
      deleted: Dipadamkan
      favourites: Gemaran
      history: Sejarah versi


@@ 694,16 720,27 @@ ms:
        suspend: "%{name} telah menggantungkan akaun %{target}"
      appeal_approved: Dirayu
      appeal_pending: Rayuan yang belum selesai
    system_checks:
      sidekiq_process_check:
        message_html: Tiada proses Sidekiq berjalan untuk baris gilir %{value}. Sila semak konfigurasi Sidekiq anda
      upload_check_privacy_error:
        message_html: "<strong>Server web anda salah konfigurasi. Privasi pengguna anda berisiko</strong>"
      upload_check_privacy_error_object_storage:
        message_html: "<strong>Ruang objek anda salah konfigurasi. Privasi pengguna anda berisiko</strong>"
    tags:
      review: Semak status
    title: Pentadbiran
    trends:
      allow: Izin
      approved: Diluluskan
      disallow: Tidak membenarkan
      links:
        allow: Membenarkan pautan
        allow_provider: Membenarkan penerbit
        disallow: Tidak membenarkan pautan
        title: Pautan yang sedang sohor kini
      not_allowed_to_trend: Tidak dibenarkan menjadi trend
      only_allowed: Hanya dibenarkan
      preview_card_providers:
        rejected: Pautan daripada penerbit ini tidak akan menjadi sohor kini
        title: Penerbit


@@ 735,6 772,7 @@ ms:
      delete: Padam
    webhooks:
      delete: Padam
      empty: You don't have any webhook endpoints configured yet.
      enable: Dayakan
      enabled: Aktif
  admin_mailer:


@@ 742,15 780,24 @@ ms:
      actions:
        silence: untuk mengehadkan akaun mereka
  appearance:
    advanced_web_interface_hint: 'Jika anda ingin menggunakan keseluruhan lebar skrin anda, antara muka web lanjutan membolehkan anda mengkonfigurasi banyak lajur berbeza untuk melihat seberapa banyak maklumat pada masa yang sama seperti yang anda mahu: Laman Utama, pemberitahuan, garis masa bersekutu, sebarang bilangan senarai dan hashteg.'
    discovery: Penemuan
    localization:
      guide_link_text: Sesiapa sahaja boleh memberi sumbangan.
    sensitive_content: Kandungan sensitif
  application_mailer:
    notification_preferences: Tukar keutamaan e-mel
    salutation: "%{name},"
    view: 'Lihat:'
    view_profile: Lihat profil
    view_status: Lihat hantaran
  applications:
    logout: Log keluar
    your_token: Token akses anda
  auth:
    apply_for_account: Minta akaun
    captcha_confirmation:
      title: Pemeriksaan keselamatan
    delete_account: Padam akaun
    description:
      prefix_sign_up: Daftar pada Mastodon hari ini!


@@ 759,9 806,19 @@ ms:
    login: Daftar masuk
    logout: Daftar keluar
    migrate_account: Pindah kepada akaun lain
    migrate_account_html: Jika anda ingin mengubah hala akaun ini kepada akaun lain, anda boleh <a href="%{path}">konfigurasikannya di sini</a>.
    or_log_in_with: Atau daftar masuk dengan
    progress:
      confirm: Sahkan E-mel
      details: Maklumat anda
    providers:
      cas: CAS
      saml: SAML
    register: Daftar
    registration_closed: "%{instance} tidak menerima ahli-ahli baru"
    rules:
      accept: Terima
      back: Kembali
    security: Keselamatan
    status:
      account_status: Status akaun


@@ 774,6 831,7 @@ ms:
  datetime:
    distance_in_words:
      half_a_minute: Sebentar tadi
      less_than_x_seconds: Baru sahaja
  deletes:
    proceed: Padam akaun
  disputes:


@@ 818,8 876,11 @@ ms:
    '503': Halaman tidak dapat disampaikan kerana kegagalan pelayan sementara.
  exports:
    archive_takeout:
      date: Tarikh
      in_progress: Mengkompil arkib anda...
      request: Minta arkib anda
      size: Saiz
    blocks: Blok anda
    csv: CSV
    domain_blocks: Domain disekat
    lists: Senarai


@@ 832,6 893,7 @@ ms:
      keywords: Kata kunci
      title: Sunting penapis
    index:
      delete: Padam
      empty: Anda tiada penapis.
      keywords:
        other: "%{count} kata kunci"


@@ 852,8 914,18 @@ ms:
    deselect: Nyahpilih semua
    none: Tiada
  imports:
    errors:
      too_large: Fail terlalu besar
    states:
      finished: Selesai
      in_progress: Dalam proses
      scheduled: Dijadualkan
    status: Status
    types:
      lists: Senarai
    upload: Muat naik
  invites:
    expired: Tamat tempoh
    expires_in:
      '1800': 30 minit
      '21600': 6 jam


@@ 867,9 939,16 @@ ms:
      password: kata laluan
      sign_in_token: e-mel kod keselamatan
      webauthn: kunci keselamatan
  mail_subscriptions:
    unsubscribe:
      title: Hentikan langganan
  migrations:
    acct: Dipindah ke
    errors:
      not_found: tidak dapat dicarikan
    proceed_with_move: Pindah pengikut
    warning:
      backreference_required: Akaun baharu mesti terlebih dahulu dikonfigurasikan untuk merujuk semula akaun ini
  notification_mailer:
    follow:
      title: Pengikut baru

M config/locales/nn.yml => config/locales/nn.yml +49 -19
@@ 385,7 385,12 @@ nn:
      confirm_suspension:
        cancel: Avbryt
        confirm: Suspender
        permanent_action: Å oppheve suspensjonen vil ikke gjenopprette noe data eller koblinger.
        permanent_action: Å oppheve suspensjonen vil ikkje gjenopprette data eller koplingar.
        preamble_html: Du er i ferd med å suspendera <strong>%{domain}</strong> inkludert underdomener.
        remove_all_data: Dette vil fjerna alt innhald, media og profildata for kontoar som tilhøyrer dette domenet frå din tenar.
        stop_communication: Tenaren din vil slutta å kommunisera med desse tenarane.
        title: Stadfest domeneblokkering for %{domain}
        undo_relationships: Dette vil oppheve alle følgar-relasjonar mellom kontoane dine og kontoar på desse tenerane.
      created_msg: Domeneblokkering blir nå behandlet
      destroyed_msg: Domeneblokkering har nå blitt angret
      domain: Domene


@@ 735,6 740,9 @@ nn:
      branding:
        preamble: Profileringa av tenaren din skil den frå andre tenarar i nettverket. Informasjonen kan bli vist ulike stadar, til dømes i Mastodon sitt web-grensesnitt, i eigne applikasjonar, i førehandsvisningar på andre nettsider, i meldingsappar og så bortetter. På grunn av dette er det best å halde informasjonen enkel, kort og treffande.
        title: Profilering
      captcha_enabled:
        desc_html: Dette baserer seg på eksterne skript frå hCaptcha, noko som kan vera eit tryggleiks- og personvernsproblem. <strong>I tillegg kan dette gjera registreringsprosessen monaleg mindre tilgjengeleg (særleg for folk med nedsett funksjonsevne)</strong>. Dette gjer at du bør du vurdera alternative tiltak, som til dømes godkjennings- eller invitasjonsbasert registrering.
        title: Krev at nye brukarar løyser ein CAPTCHA for å bekrefte kontoen sin
      content_retention:
        preamble: Styr korleis brukargenerert innhald blir lagra i Mastodon.
        title: Bevaring av innhald


@@ 762,6 770,7 @@ nn:
          approved: Godkjenning kreves for påmelding
          none: Ingen kan melda seg inn
          open: Kven som helst kan melda seg inn
      title: Tenarinstillingar
    site_uploads:
      delete: Slett opplasta fil
      destroyed_msg: Vellukka sletting av sideopplasting!


@@ 968,7 977,7 @@ nn:
    notification_preferences: Endr e-post-innstillingane
    salutation: Hei %{name},
    settings: 'Endr e-post-innstillingar: %{link}'
    unsubscribe: Avslutt abonnement
    unsubscribe: Meld av
    view: 'Sjå:'
    view_profile: Sjå profil
    view_status: Sjå status


@@ 983,7 992,9 @@ nn:
  auth:
    apply_for_account: Søk om ein konto
    captcha_confirmation:
      title: Sikkerhetskontroll
      help_html: Om du har problem med å løyse CAPTCHA, kan kontakte oss på %{email} og vi kan hjelpe deg.
      hint_html: Berre ein ting til! Vi må bekrefte at du er et menneske (så vi kan halde spam ute!). Løys CAPTCHA-en nedanfor og klikk "Fortsett".
      title: Sikkerheitssjekk
    confirmations:
      wrong_email_hint: Viss epostadressa er feil, kan du endra ho i kontoinnstillingane.
    delete_account: Slett konto


@@ 1020,9 1031,9 @@ nn:
    rules:
      accept: Godkjenn
      back: Attende
      invited_by: 'Du kan bli med %{domain} takket være invitasjonen du fikk fra:'
      invited_by: 'Du kan bli med i %{domain} takka vere invitasjonen du har fått frå:'
      preamble: Disse angis og håndheves av %{domain}-moderatorene.
      preamble_invited: Før du fortsetter, vennligst gå gjennom reglene som er satt av moderatorene av %{domain}.
      preamble_invited: Før du held fram, ver snill og sjå gjennom reglane bestemt av moderatorane av %{domain}.
      title: Noen grunnregler.
      title_invited: Du har blitt invitert.
    security: Tryggleik


@@ 1126,10 1137,10 @@ nn:
  domain_validator:
    invalid_domain: er ikkje eit gangbart domenenamn
  edit_profile:
    basic_information: Grunnleggende informasjon
    hint_html: "<strong>Tilpass hva folk ser på din offentlige profil og ved siden av dine innlegg.</strong> Det er mer sannsynlig at andre mennesker følger deg tilbake og samhandler med deg når du har fylt ut en profil og et profilbilde."
    other: Annet
    safety_and_privacy: Sikkerhet og personvern
    basic_information: Grunnleggande informasjon
    hint_html: "<strong>Tilpass kva folk ser på den offentlege profilen din og ved sida av innlegga dine.</strong> Andre vil i større grad fylgja og samhandla med deg når du har eit profilbilete og har fyllt ut profilen din."
    other: Anna
    safety_and_privacy: Sikkerheit og personvern
  errors:
    '400': Søknaden du sende var ugyldig eller sett opp feil.
    '403': Du har ikkje løyve til å sjå denne sida.


@@ 1193,6 1204,12 @@ nn:
      keywords:
        one: "%{count} stikkord"
        other: "%{count} stikkord"
      statuses:
        one: "%{count} innlegg"
        other: "%{count} innlegg"
      statuses_long:
        one: "%{count} individuelt innlegg er gøymd"
        other: "%{count} individuelle innlegg er gøymde"
      title: Filter
    new:
      save: Lagre nytt filter


@@ 1206,6 1223,12 @@ nn:
        title: Filtrerte innlegg
  generic:
    all: Alle
    all_items_on_page_selected_html:
      one: Du har valt <strong>%{count}</strong> element på denne sida.
      other: Du har valt <strong>%{count}</strong> element på denne sida.
    all_matching_items_selected_html:
      one: "<strong>%{count}</strong> element som passar til søket ditt er vald."
      other: Du har valt <strong>%{count}</strong> element som passar til søket ditt.
    cancel: Avbryt
    changes_saved_msg: Alle endringane vart lagra!
    confirm: Stadfest


@@ 1215,6 1238,9 @@ nn:
    none: Ingen
    order_by: Sorter etter
    save_changes: Lagr endringar
    select_all_matching_items:
      one: Vel %{count} element som passar til søket ditt.
      other: Vel %{count} element som passar til søket ditt.
    today: i dag
    validation_errors:
      one: Noe er ikke helt riktig ennå. Vennligst se etter en gang til


@@ 1239,12 1265,14 @@ nn:
      bookmarks_html: Du skal til å <strong>byta ut bokmerka dine</strong> med opp til <strong>%{total_items} innlegg</strong> frå <strong>%{filename}</strong>.
      domain_blocking_html: Du skal til å <strong>byta ut domeneblokkeringslista di</strong> med opp til <strong>%{total_items} domene</strong> frå <strong>%{filename}</strong>.
      following_html: Du skal til å <strong>fylgja</strong> opp til <strong>%{total_items} brukarkontoar</strong> frå <strong>%{filename}</strong> og <strong>slutta å fylgja alle andre</strong>.
      lists_html: Du er i ferd med å <strong>erstatta listene dine</strong> med innhaldet i <strong>%{filename}</strong>. Opptil <strong>%{total_items} kontoar</strong> vil bli lagt til i nye lister.
      muting_html: Du skal til å <strong>byta ut lista di over dempa brukarkontoar</strong> med opp til <strong>%{total_items} brukarkontoar</strong> frå <strong>%{filename}</strong>.
    preambles:
      blocking_html: Du skal til å <strong>blokkera</strong> opp til <strong>%{total_items} brukarkontoar</strong> frå <strong>%{filename}</strong>.
      bookmarks_html: Du skal til å leggja til opp til <strong>%{total_items} innlegg</strong> frå <strong>%{filename}</strong> til <strong>bokmerka dine</strong>.
      domain_blocking_html: Du skal til å <strong>blokkera</strong> opp til <strong>%{total_items} domene</strong> frå <strong>%{filename}</strong>.
      following_html: Du skal til å <strong>fylgja</strong> opp til <strong>%{total_items} brukarkontoar</strong> frå <strong>%{filename}</strong>.
      lists_html: Du er i ferd med å leggja til opptil <strong>%{total_items} kontoar</strong> frå <strong>%{filename}</strong> til i <strong>listene</strong> dine. Nye lister vil blir oppretta om ingen lister finst frå før.
      muting_html: Du skal til å <strong>dempa</strong> opp til <strong>%{total_items} brukarkontoar</strong> frå <strong>%{filename}</strong>.
    preface: Du kan henta inn data som du har eksportert frå ein annan tenar, som t.d. ei liste over folka du fylgjer eller blokkerer.
    recent_imports: Siste importar


@@ 1261,6 1289,7 @@ nn:
      bookmarks: Importerer bokmerke
      domain_blocking: Importerer blokkerte domene
      following: Importerer fylgde brukarkontoar
      lists: Importerer lister
      muting: Importerer dempa brukarkontoar
    type: Type import
    type_groups:


@@ 1271,6 1300,7 @@ nn:
      bookmarks: Bokmerker
      domain_blocking: Liste over blokkerte domene
      following: Fylgjeliste
      lists: Lister
      muting: Dempeliste
    upload: Last opp
  invites:


@@ 1311,19 1341,19 @@ nn:
    title: Autentiseringshistorikk
  mail_subscriptions:
    unsubscribe:
      action: Ja, avslutt abonnement
      complete: Abonnement avsluttet
      confirmation_html: Er du sikker på at du vil slutte å motta %{type} fra Mastodon %{domain} i e-posten din på %{email}? Du kan når som helst gjenoppta i <a href="%{settings_path}">innstillinger for e-postvarsling</a>.
      action: Ja, meld av
      complete: Meldt av
      confirmation_html: Er du sikker på at du ikkje lenger ynskjer å motta %{type} frå Mastodon på %{domain} til e-posten din %{email}? Du kan alltids gjera om på dette i <a href="%{settings_path}">innstillingar for e-postvarsling</a>.
      emails:
        notification_emails:
          favourite: e-poster om favorittmarkeringer
          follow: e-poster om følgere
          follow_request: e-poster om følgeforespørsler
          favourite: e-postar om favorittmarkeringar
          follow: e-postar om nye fylgjarar
          follow_request: e-postar om fylgjeførespurnadar
          mention: e-poster om nevninger
          reblog: e-poster om fremhevinger
      resubscribe_html: Hvis du har avsluttet abonnementet ved en feiltakelse, kan du abonnere på nytt i <a href="%{settings_path}">innstillinger for e-postvarsling</a>.
      success_html: Du vil ikke lenger motta %{type} fra Mastodon på %{domain} i e-posten din på %{email}.
      title: Avslutt abonnement
      title: Meld av
  media_attachments:
    validations:
      images_and_video: Kan ikkje leggja ved video til status som allereie inneheld bilete


@@ 1439,7 1469,7 @@ nn:
      expired: Denne rundspørjinga er allereie ferdig
      invalid_choice: Det valgte stemmealternativet eksisterer ikke
      over_character_limit: kan ikkje vera lengre enn %{max} teikn kvar
      self_vote: Du kan ikke stemme i dine egne avstemninger
      self_vote: Du kan ikkje stemme i di eiga avstemming
      too_few_options: må ha meir enn eitt element
      too_many_options: kan ikkje ha meir enn %{max} element
  preferences:


@@ 1741,11 1771,11 @@ nn:
    signed_in_as: 'Logga inn som:'
  verification:
    extra_instructions_html: <strong>Tips:</strong> Lenken på din nettside kan være usynlig. Den viktige delen er <code>rel="me"</code> som sikrer at nettsteder med brukergenerert innhold ikke kan utgi seg for å være deg. Du kan til og med bruke en <code>link</code> lenke i sidens topptekst i stedet for <code>a</code>, men HTML-koden må være tilgjengelig uten å kjøre JavaScript.
    here_is_how: Slik gjør du
    here_is_how: Slik gjer du
    hint_html: "<strong>Verifisering av identiteten din på Mastodon er for alle.</strong> Basert på åpne nettstandarder, gratis nå og for alltid. Alt du trenger er en personlig nettside som gjør at folk kjenner deg igjen. Når du lenker til dette nettstedet fra din profil, vil vi sjekke at nettstedet lenker tilbake til profilen din og viser dette på profilen din."
    instructions_html: Kopier og lim inn koden nedenfor i HTML til ditt nettsted. Deretter legger du til adressen til nettstedet ditt i et av ekstrafeltene på profilen din fra fanen "Rediger profil" og lagre endringer.
    verification: Stadfesting
    verified_links: Dine bekreftede lenker
    verified_links: Dine verifiserte lenker
  webauthn_credentials:
    add: Legg til ny sikkerhetsnøkkel
    create:

M config/locales/no.yml => config/locales/no.yml +83 -0
@@ 386,6 386,11 @@
        cancel: Avbryt
        confirm: Suspender
        permanent_action: Å oppheve suspensjonen vil ikke gjenopprette noe data eller koblinger.
        preamble_html: Du er i ferd med å suspendere <strong>%{domain}</strong> og dens underdomener.
        remove_all_data: Dette vil fjerne alt innhold, medier og profildata for domenets kontoer på serveren din.
        stop_communication: Serveren din vil slutte å kommunisere med disse serverne.
        title: Bekreft domene blokkering for %{domain}
        undo_relationships: Dette vil angre ethvert følgeforhold mellom kontoene til disse serverne og dine.
      created_msg: Domeneblokkering blir nå behandlet
      destroyed_msg: Domeneblokkering har nå blitt angret
      domain: Domene


@@ 636,9 641,22 @@
          mark_as_sensitive_html: 'Du er i ferd med å <strong>markere</strong> noen av <strong>@%{acct}</strong> sine innlegg som <strong>sensitivt</strong>. Dette vil:'
          silence_html: 'Du er i ferd med å <strong>avgrense</strong> <strong>@%{acct}</strong> sin konto. Dette vil:'
          suspend_html: 'Du er i ferd med å <strong>stoppe</strong> <strong>@%{acct}</strong> sin konto. Dette vil:'
        actions:
          delete_html: Fjerne fornærmede innlegg
          mark_as_sensitive_html: Merk fornærmede innlegg medier som sensitivt
          silence_html: Sterkt begrense <strong>@%{acct}</strong>ved å gjøre deres profil og innhold kun synlig for personer som allerede følger dem, eller manuelt ser etter den
          suspend_html: Suspender <strong>@%{acct}</strong>, og gjøre profilen og innholdet utilgjengelig og umulig å samhandle med
        close_report: 'Marker rapport #%{id} som løst'
        close_reports_html: Merk <strong>alle</strong> rapporter mot <strong>@%{acct}</strong> som løst
        delete_data_html: Slett <strong>@%{acct}</strong> sin profil og innhold 30 dager fra nå med mindre de blir suspendert i mellomtiden
        preview_preamble_html: "<strong>@%{acct}</strong> vil motta en advarsel med følgende innhold:"
        record_strike_html: Ta opp en streik mot <strong>@%{acct}</strong> for å hjelpe deg med å eskalere fremtidige brudd fra denne kontoen
        send_email_html: Send <strong>@%{acct}</strong> en advarsels e-post
        warning_placeholder: Valgfritt ytterligere resonnement for moderasjonstiltaket.
      target_origin: Opprinnelse for innrapportert konto
      title: Rapporter
      unassign: Fjern tilegning
      unknown_action_msg: 'Ukjent handling: %{action}'
      unresolved: Uløst
      updated_at: Oppdatert
      view_profile: Vis profil


@@ 670,7 688,10 @@
        invite_users_description: Lar brukere invitere nye personer til serveren
        manage_announcements: Behandle Kunngjøringer
        manage_announcements_description: Lar brukere endre kunngjøringer på serveren
        manage_appeals: Behandle klager
        manage_appeals_description: Lar brukere gjennomgå klager mot modereringsaktiviteter
        manage_blocks: Behandle Blokker
        manage_blocks_description: Lar brukere blokkere e-postleverandører og IP-adresser
        manage_custom_emojis: Administrer egendefinerte Emojier
        manage_custom_emojis_description: Lar brukere endre egendefinert emojis på serveren
        manage_federation: Administrer Føderasjon


@@ 680,15 701,21 @@
        manage_reports: Administrer Rapporter
        manage_reports_description: Lar brukere se på rapporter og utføre moderasjonshandlinger mot dem
        manage_roles: Behandle Roller
        manage_roles_description: Lar brukere administrere og tildele roller under sine rettigheter
        manage_rules: Administrer Regler
        manage_rules_description: La brukere endre serverregler
        manage_settings: Administrer Innstillinger
        manage_settings_description: La brukere endre sideinnstillinger
        manage_taxonomies: Administrer taksonomier
        manage_taxonomies_description: Lar brukere gjennomgå populære innhold og oppdatere emneknagg innstillinger
        manage_user_access: Administrer Brukertilgang
        manage_user_access_description: Lar brukere deaktivere andre brukeres 2-trinnsinnlogging, endre sin e-postadresse, og tilbakestille passordet deres
        manage_users: Behandle Brukere
        manage_users_description: Lar brukere se detaljer om andre brukere og utføre moderasjonshandlinger mot dem
        manage_webhooks: Administrer Webhooks
        manage_webhooks_description: Lar brukere sette opp webhooks for administrative hendelser
        view_audit_log: Vis overvåkingslogg
        view_audit_log_description: La brukere se en logg over administrative handlinger på serveren
        view_dashboard: Vis dashbord
        view_dashboard_description: Gir brukere tilgang til dashbordet og ulike metrikker
        view_devops: DevOps


@@ 711,15 738,24 @@
        preamble: Tilpass Mastodons webgrensesnitt.
        title: Utseende
      branding:
        preamble: Serverens merkevarebygging skiller den fra andre servere i nettverket. Denne informasjonen kan vises på tvers av en rekke miljøer, for eksempel Mastodons webgrensesnitt, native applikasjoner, i forhåndsvisning av lenker på andre nettsteder og i meldingsapper, osv. Av denne grunn er det best å holde denne informasjonen klar, kort og kortfattet.
        title: Merkevare
      captcha_enabled:
        desc_html: Dette er avhengig av eksterne skript fra hCaptcha, som kan være et sikkerhets- og personvernproblem.<strong> I tillegg kan dette gjøre registreringsprosessen betydelig mindre tilgjengelig for noen (spesielt funksjonshemmede) personer</strong>. Av disse grunnene bør du vurdere alternative tiltak som godkjenningsbasert eller invitasjonsbasert registrering.
        title: Krev at nye brukere løser en CAPTCHA for å bekrefte kontoen sin
      content_retention:
        preamble: Kontroller hvordan brukergenerert innhold lagres i Mastodon.
        title: Oppbevaring av innhold
      default_noindex:
        desc_html: Påvirker alle brukerne som ikke selv har justert denne innstillingen
        title: Ikke la brukere indekseres av søkemotorer som standard
      discovery:
        follow_recommendations: Følg anbefalinger
        preamble: Overflater interessant innhold er medvirkende til ombordstigning av nye brukere som kanskje ikke kjenner noen Mastodon. Kontroller hvordan ulike oppdagelsesfunksjoner fungerer på serveren.
        profile_directory: Profilkatalog
        public_timelines: Offentlige tidslinjer
        publish_discovered_servers: Publiser liste over oppdagede servere
        publish_statistics: Publiser statistikk
        title: Oppdagelse
        trends: Trender
      domain_blocks:


@@ 734,6 770,7 @@
          approved: Godkjenning kreves for påmelding
          none: Ingen kan melde seg inn
          open: Hvem som helst kan melde seg inn
      title: Serverinnstillinger
    site_uploads:
      delete: Slett den opplastede filen
      destroyed_msg: Vellykket sletting av sideopplasting!


@@ 820,6 857,7 @@
      pending_review: Avventer gjennomgang
      preview_card_providers:
        allowed: Lenker fra denne utgiveren kan "trende"
        description_html: Dette er domener som lenker ofte deles fra på serveren din. Lenker vil ikke bli populært offentlig med mindre domenet til lenken er godkjent. Din godkjenning (eller avvisning) strekker seg til underdomener.
        rejected: Lenker fra denne utgiveren vil ikke "trende"
        title: Utgivere
      rejected: Avvist


@@ 829,6 867,11 @@
        description_html: Dette er innlegg som serveren din vet om at de blir delt og favorisert for øyeblikket. Dette kan hjelpe dine nye og returnerede brukere med å finne flere å følge. Ingen innlegg vises offentlig før du godkjenner forfatteren, og forfatteren tillater at kontoen deres foreslås til andre. Du kan også tillate eller avvise individuelle innlegg.
        disallow: Ikke tillat innlegg
        disallow_account: Forby forfatter
        no_status_selected: Ingen populære innlegg ble endret da ingen ble valgt
        not_discoverable: Forfatter har valgt å ikke være synlig
        shared_by:
          one: Delt eller lagt til som favoritt én gang
          other: Delt og favorittmarkert %{friendly_count} ganger
        title: Populære innlegg
      tags:
        current_score: Gjeldende poengsum %{score}


@@ 840,10 883,16 @@
          tag_uses_measure: samlet bruk
        description_html: Dette er emneknagger som for øyeblikket vises i mange innlegg som serveren din ser. Det kan hjelpe dine brukere med å finne ut hva folk snakker mest om i øyeblikket. Ingen emneknagger vises offentlig før du godkjenner dem.
        listable: Kan bli foreslått
        no_tag_selected: Ingen emneknagger ble endret da ingen ble valgt
        not_listable: Vil ikke bli foreslått
        not_trendable: Kunne ikke vises under trender
        not_usable: Kan ikke brukes
        peaked_on_and_decaying: Høyeste på %{date}, nå faller
        title: Populære emneknagger
        trendable: Kan vises under populært
        trending_rank: 'Populært #%{rank}'
        usable: Kan brukes
        usage_comparison: Brukt %{today} ganger i dag, sammenlignet med %{yesterday} i går
        used_by_over_week:
          one: Brukt av en person i løpet av siste uke
          other: Brukes av %{count} personer i løpet av den siste uken


@@ 869,7 918,12 @@
        one: 1 aktivert hendelse
        other: "%{count} aktiverte hendelser"
      events: Hendelser
      new: Ny webhook
      rotate_secret: Roter hemmelighet
      secret: Signer hemmelighet
      status: Status
      title: Webhooks
      webhook: Webhook
  admin_mailer:
    new_appeal:
      actions:


@@ 880,6 934,9 @@
        sensitive: å merke kontoen sin som følsom
        silence: for å begrense deres konto
        suspend: for å avslutte kontoen
      body: "%{target} klager på en moderasjonsbeslutning av %{action_taken_by} fra %{date}, noe som var %{type}. De skrev:"
      next_steps: Du kan godkjenne anken for å angre på moderasjonsvedtaket eller ignorere det.
      subject: "%{username} klager på en moderasjonsbeslutning for %{instance}"
    new_pending_account:
      body: Detaljer om den nye kontoen er nedenfor. Du kan godkjenne eller avvise denne søknaden.
      subject: Ny konto opp til vurdering på %{instance} (%{username})


@@ 888,11 945,14 @@
      body_remote: Noen fra %{domain} har rapportert %{target}
      subject: Ny rapport for %{instance} (#%{id})
    new_trends:
      body: 'Følgende elementer trenger en gjennomgang før de kan vises offentlig:'
      new_trending_links:
        title: Populære lenker
      new_trending_statuses:
        title: Populære innlegg
      new_trending_tags:
        no_approved_tags: Det er for øyeblikket ingen godkjente populære emneknagger.
        requirements: 'Enhver av disse kandidatene kan overgå #%{rank} godkjent populære emneknagger, som for øyeblikket er #%{lowest_tag_name} med en poengsum på %{lowest_tag_score}.'
        title: Populære emneknagger
      subject: Ny trender for gjennomsyn av %{instance}
  aliases:


@@ 932,7 992,11 @@
  auth:
    apply_for_account: Be om en konto
    captcha_confirmation:
      help_html: Hvis du har problemer med å løse CAPTCHA, kan du komme i kontakt med oss via %{email} og vi kan hjelpe deg.
      hint_html: Bare en ting til! Vi må bekrefte at du er et menneske (dette er slik at vi kan holde spam ute!). Løs CAPTCHA nedenfor og klikk "Fortsett".
      title: Sikkerhetskontroll
    confirmations:
      wrong_email_hint: Hvis e-postadressen ikke er riktig, kan du endre den i kontoinnstillingene.
    delete_account: Slett konto
    delete_account_html: Hvis du ønsker å slette kontoen din, kan du <a href="%{path}">gå hit</a>. Du vil bli spurt om bekreftelse.
    description:


@@ 962,6 1026,7 @@
      saml: SAML
    register: Meld deg på
    registration_closed: "%{instance} tar ikke imot nye medlemmer"
    resend_confirmation: Send bekreftelse lenke på nytt
    reset_password: Tilbakestill passord
    rules:
      accept: Godta


@@ 973,10 1038,17 @@
      title_invited: Du har blitt invitert.
    security: Sikkerhet
    set_new_password: Angi nytt passord
    setup:
      email_below_hint_html: Sjekk søppelpostmappen din, eller be om en ny. Du kan korrigere e-postadressen din hvis den er feil.
      email_settings_hint_html: Klikk på lenken vi sendte deg for å bekrefte %{email}. Vi venter her.
      link_not_received: Fikk du ikke lenken?
      new_confirmation_instructions_sent: Du vil motta en ny e-post med bekreftelse lenke om noen minutter!
      title: Sjekk innboksen din
    sign_in:
      preamble_html: Logg inn med ditt <strong>%{domain}</strong> brukeropplysninger. Hvis kontoen din er plassert på en annen server, vil du ikke kunne logge inn her.
      title: Logg inn på %{domain}
    sign_up:
      manual_review: Registreringer på %{domain} går gjennom manuell gjennomgang av moderatorene våre. For å hjelpe oss med å behandle registreringen din, skriv litt om deg selv og hvorfor du vil ha en konto på %{domain}.
      preamble: Med en konto på denne Mastodon-tjeneren vil du kunne følge andre personer på nettverket, uansett hvor kontoen deres holder til.
      title: La oss få deg satt i gang på %{domain}.
    status:


@@ 1118,7 1190,11 @@
      add_keyword: Legg til stikkord
      keywords: Nøkkelord
      statuses: Individuelle innlegg
      statuses_hint_html: Dette filteret gjelder for utvalgte enkeltinnlegg, uavhengig av om de samsvarer med søkeordene nedenfor.<a href="%{path}">Se gjennom eller fjern innlegg fra filteret.</a>.
      title: Rediger filter
    errors:
      deprecated_api_multiple_keywords: Disse parameterne kan ikke endres fra dette programmet fordi de gjelder for mer enn ett filter nøkkelord. Bruk et nyere program eller webgrensesnittet.
      invalid_context: Ingen eller ugyldig kontekst angitt
    index:
      contexts: Filtre i %{contexts}
      delete: Slett


@@ 1189,12 1265,14 @@
      bookmarks_html: Du er i ferd med å <strong>erstatte dine bokmerker</strong> med inntil <strong>%{total_items} innlegg</strong> fra <strong>%{filename}</strong>.
      domain_blocking_html: Du er i ferd med å <strong>erstatte din domene-blokkeringsliste</strong> med inntil <strong>%{total_items} domener</strong> fra <strong>%{filename}</strong>.
      following_html: Du er i ferd med å <strong>følge</strong> inntil <strong>%{total_items} kontoer</strong> fra <strong>%{filename}</strong> og <strong>slutte å følge alle andre</strong>.
      lists_html: Du er i ferd med å <strong>erstatte dine lister</strong> med innholdet i <strong>%{filename}</strong>. Inntil <strong>%{total_items} kontoer</strong> legges til i nye lister.
      muting_html: Du er i ferd med å <strong>erstatte listen over dempede kontoer</strong> med inntil <strong>%{total_items} kontoer</strong> fra <strong>%{filename}</strong>.
    preambles:
      blocking_html: Du er i ferd med å <strong>blokkere</strong> inntil <strong>%{total_items} kontoer</strong> fra <strong>%{filename}</strong>.
      bookmarks_html: Du er i ferd med å legge til inntil <strong>%{total_items} innlegg</strong> fra <strong>%{filename}</strong> til dine <strong>bokmerker</strong>.
      domain_blocking_html: Du er i ferd med å <strong>blokkere</strong> inntil <strong>%{total_items} domener</strong> fra <strong>%{filename}</strong>.
      following_html: Du er i ferd med å <strong>følge</strong> inntil <strong>%{total_items} kontoer</strong> fra <strong>%{filename}</strong>.
      lists_html: Du er i ferd med å legge inntil <strong>%{total_items} kontoer</strong> fra <strong>%{filename}</strong> til dine <strong>lister</strong>. Nye lister vil bli opprettet hvis det ikke finnes noen liste å legge til.
      muting_html: Du er i ferd med å <strong>dempe</strong> inntil <strong>%{total_items} kontoer</strong> fra <strong>%{filename}</strong>.
    preface: Du kan importere data om brukere du følger eller blokkerer til kontoen din på denne instansen med eksportfiler fra andre instanser.
    recent_imports: Siste importer


@@ 1211,6 1289,7 @@
      bookmarks: Importerer bokmerker
      domain_blocking: Importerer blokkerte domener
      following: Importerer fulgte kontoer
      lists: Importerer lister
      muting: Importerer dempede kontoer
    type: Type import
    type_groups:


@@ 1221,6 1300,7 @@
      bookmarks: Bokmerker
      domain_blocking: Domeneblokkeringsliste
      following: Følgeliste
      lists: Lister
      muting: Dempeliste
    upload: Opplastning
  invites:


@@ 1404,6 1484,9 @@
      unrecognized_emoji: er ikke en gjenkjent emoji
  relationships:
    activity: Kontoaktivitet
    confirm_follow_selected_followers: Er du sikker på at du vil følge utvalgte følgere?
    confirm_remove_selected_followers: Er du sikker på at du vil fjerne valgte følgere?
    confirm_remove_selected_follows: Er du sikker på at du vil fjerne valgte følger?
    dormant: Dormende
    follow_failure: Kunne ikke følge noen av de valgte kontoene.
    follow_selected_followers: Følg valgte tilhengere

M config/locales/pt-PT.yml => config/locales/pt-PT.yml +4 -0
@@ 1265,12 1265,14 @@ pt-PT:
      bookmarks_html: Está prestes a <strong>substituir os seus marcadores</strong> com até <strong>%{total_items} publicações</strong> de <strong>%{filename}</strong>.
      domain_blocking_html: Está prestes a <strong>substituir a sua lista de bloqueios de domínio</strong> com até <strong>%{total_items} domínios</strong> de <strong>%{filename}</strong>.
      following_html: Está prestes a <strong>seguir</strong> até <strong>%{total_items} contas</strong> de <strong>%{filename}</strong> e <strong>parar de seguir quaisquer outras contas</strong>.
      lists_html: Está prestes a substituir <strong>as suas listas</strong> pelo conteúdo de <strong>%{filename}</strong>. Até <strong>%{total_items} contas</strong> serão adicionadas a novas listas.
      muting_html: Está prestes a <strong>substituir a sua lista de contas silenciadas</strong> com até <strong>%{total_items} contas</strong> de <strong>%{filename}</strong>.
    preambles:
      blocking_html: Está prestes a <strong>bloquear</strong> até <strong>%{total_items} contas</strong> de <strong>%{filename}</strong>.
      bookmarks_html: Está prestes a adicionar até <strong>%{total_items} publicações</strong> de <strong>%{filename}</strong> aos seus <strong>marcadores</strong>.
      domain_blocking_html: Está prestes a <strong>bloquear</strong> até <strong>%{total_items} domínios</strong> de <strong>%{filename}</strong>.
      following_html: Está prestes a <strong>seguir</strong> até <strong>%{total_items} contas</strong> de <strong>%{filename}</strong>.
      lists_html: Está prestes a adicionar até <strong>%{total_items} contas</strong> do ficheiro <strong>%{filename}</strong> para <strong>as suas listas</strong>. Novas listas serão criadas se não existir uma lista onde as adicionar.
      muting_html: Está prestes a <strong>silenciar</strong> até <strong>%{total_items} contas</strong> de <strong>%{filename}</strong>.
    preface: Podes importar dados que tenhas exportado de outra instância, como a lista de pessoas que segues ou bloqueadas.
    recent_imports: Importações recentes


@@ 1287,6 1289,7 @@ pt-PT:
      bookmarks: Importando marcadores
      domain_blocking: Importando domínios bloqueados
      following: Importando contas seguidas
      lists: A importar listas
      muting: Importando contas silenciadas
    type: Tipo de importação
    type_groups:


@@ 1297,6 1300,7 @@ pt-PT:
      bookmarks: Itens salvos
      domain_blocking: Lista de domínios bloqueados
      following: Lista de pessoas que estás a seguir
      lists: Listas
      muting: Lista de utilizadores silenciados
    upload: Carregar
  invites:

M config/locales/ru.yml => config/locales/ru.yml +24 -0
@@ 1069,7 1069,9 @@ ru:
      back: Назад
      invited_by: 'Вы можете присоединиться к %{domain} благодаря приглашению полученному от:'
      preamble: Они устанавливаются и применяются модераторами %{domain}.
      preamble_invited: Прежде чем продолжить, ознакомьтесь с основными правилами, установленными модераторами сервера %{domain}.
      title: Несколько основных правил.
      title_invited: Вы были приглашены.
    security: Безопасность
    set_new_password: Задать новый пароль
    setup:


@@ 1170,6 1172,11 @@ ru:
      your_appeal_rejected: Ваша апелляция отклонена
  domain_validator:
    invalid_domain: не является корректным доменным именем
  edit_profile:
    basic_information: Основная информация
    hint_html: "<strong>Настройте то, что люди видят в вашем публичном профиле и рядом с вашими сообщениями.</strong> Другие люди с большей вероятностью подпишутся на Вас и будут взаимодействовать с вами, если у Вас заполнен профиль и добавлено изображение."
    other: Прочее
    safety_and_privacy: Безопасность и приватность
  errors:
    '400': Ваш запрос был недействительным или неправильным.
    '403': У Вас нет доступа к просмотру этой страницы.


@@ 1384,6 1391,20 @@ ru:
    failed_sign_in_html: Неудачная попытка входа используя %{method} через %{browser} (%{ip})
    successful_sign_in_html: Успешный вход используя %{method} через %{browser} (%{ip})
    title: История входов
  mail_subscriptions:
    unsubscribe:
      action: Да, отписаться
      complete: Подписка отменена
      confirmation_html: Вы уверены, что хотите отписаться от получения на ваш адрес электронной почты %{email} %{type} от Сообщества Mastodon %{domain}?  Вы всегда можете заново подписаться на уведомления по электронной почте в разделе настройки <a href="%{settings_path}"></a>.
      emails:
        notification_emails:
          favourite: Избранные уведомления по электронной почте
          follow: подписаться на уведомления по электронной почте
          follow_request: Уведомлять по электронной почте о новых запросах
          mention: получать уведомления с упоминаниями
          reblog: подписаться на уведомления по электронной почте
      resubscribe_html: Если вы отказались от подписки по ошибке, вы всегда можете заново подписаться на уведомления по электронной почте по этой ссылке <a href="%{settings_path}"></a>.
      title: Отписаться
  media_attachments:
    validations:
      images_and_video: Нельзя добавить видео к посту с изображениями


@@ 1499,6 1520,7 @@ ru:
      expired: Опрос уже завершился
      invalid_choice: Выбранного варианта голосования не существует
      over_character_limit: каждый не вариант не может быть длиннее %{max} символов
      self_vote: Вы не можете голосовать в своих опросах
      too_few_options: должно быть больше 1 варианта
      too_many_options: может содержать не больше %{max} вариантов
  preferences:


@@ 1811,7 1833,9 @@ ru:
    seamless_external_login: Вы залогинены через сторонний сервис, поэтому настройки e-mail и пароля недоступны.
    signed_in_as: 'Выполнен вход под именем:'
  verification:
    instructions_html: Скопируйте и вставьте код ниже в HTML вашего сайта. Затем, добавьте адрес вашего  веб сайта в одно из дополнительных полей на вкладке "Редактировать профиль" и сохраните изменения.
    verification: Верификация ссылок
    verified_links: Ваши ссылки подтверждения
  webauthn_credentials:
    add: Добавить новый ключ безопасности
    create:

M config/locales/simple_form.ca.yml => config/locales/simple_form.ca.yml +3 -3
@@ 38,8 38,8 @@ ca:
        avatar: PNG, GIF o JPG de com a màxim %{size}. S'escalarà a %{dimensions}px
        bot: Notifica que aquest compte realitza principalment accions automatitzades i que pot estar no monitorat
        context: Un o diversos contextos en què s'ha d'aplicar el filtre
        current_password: Per motius de seguretat, introdueix la contrasenya del compte actual
        current_username: Per a confirmar, si us plau entra el nom d'usuari del compte actual
        current_password: Per motius de seguretat, introduïu la contrasenya del compte actual
        current_username: Per a confirmar, entreu el nom d'usuari del compte actual
        digest: Només s'envia després d'un llarg període d'inactivitat i només si has rebut algun missatge personal durant la teva absència
        discoverable: Permet que el teu compte sigui descobert per desconeguts a través de recomanacions, etiquetes i altres característiques
        email: Se t'enviarà un correu electrònic de confirmació


@@ 85,7 85,7 @@ ca:
        custom_css: Pots aplicar estils personalitzats en la versió web de Mastodon.
        mascot: Anul·la la il·lustració en la interfície web avançada.
        media_cache_retention_period: Els fitxers multimèdia descarregats s'esborraran després del nombre de dies especificat quan el valor configurat és positiu, i tornats a descarregats sota demanda.
        peers_api_enabled: Una llista de noms de domini que aquest servidor ha trobat al fedivers. No inclou cap dada sobre si estàs federat amb un servidor determinat, només si el teu en sap res. La fan servir, en un sentit general, serveis que recoŀlecten estadístiques sobre la federació.
        peers_api_enabled: Una llista de noms de domini que aquest servidor ha trobat al fedivers. No inclou cap dada sobre si estàs federat amb un servidor determinat, només si el teu en sap res. La fan servir, en un sentit general, serveis que recol·lecten estadístiques sobre la federació.
        profile_directory: El directori de perfils llista tots els usuaris que tenen activat ser descoberts.
        require_invite_text: Quan el registre requereixi aprovació manual, fes que sigui obligatori en lloc d'opcional d'escriure el text de la sol·licitud d'invitació "Per què vols unir-te?"
        site_contact_email: Com pot la gent comunicar amb tu per a consultes legals o de recolzament.

M config/locales/simple_form.cs.yml => config/locales/simple_form.cs.yml +7 -0
@@ 2,6 2,10 @@
cs:
  simple_form:
    hints:
      account:
        display_name: Vaše celé jméno nebo přezdívka.
        fields: Vaše domovská stránka, zájmena, věk, cokoliv chcete.
        note: 'Můžete @zmínit jiné osoby nebo #hashtagy.'
      account_alias:
        acct: Zadejte svůj účet, ze kterého se chcete přesunout jinam, ve formátu přezdívka@doména
      account_migration:


@@ 130,6 134,7 @@ cs:
        position: Vyšší role rozhoduje o řešení konfliktů v určitých situacích. Některé akce lze provádět pouze na rolích s nižší prioritou
      webhook:
        events: Zvolte odesílané události
        template: Sestavte si vlastní JSON payload pomocí interpolace proměnných. Pro výchozí JSON ponechte prázdné.
        url: Kam budou události odesílány
    labels:
      account:


@@ 294,6 299,7 @@ cs:
        usable: Povolit používat tento hashtag v příspěvcích
      user:
        role: Role
        time_zone: Časové pásmo
      user_role:
        color: Barva odznaku
        highlighted: Zobrazit roli jako odznak na profilech uživatelů


@@ 302,6 308,7 @@ cs:
        position: Priorita
      webhook:
        events: Zapnuté události
        template: Šablona payloadu
        url: URL koncového bodu
    'no': Ne
    not_recommended: Nedoporučuje se

M config/locales/simple_form.de.yml => config/locales/simple_form.de.yml +10 -10
@@ 20,7 20,7 @@ de:
        type_html: Wähle aus, wie mit <strong>%{acct}</strong> vorgegangen werden soll
        types:
          disable: Benutzer*in daran hindern, das Konto verwenden zu können, aber die Inhalte nicht löschen oder ausblenden.
          none: Dem Konto eine Verwarnung zusenden, ohne dabei eine andere Aktion vorzunehmen.
          none: Dem Konto eine Warnung zusenden, ohne dabei eine andere Aktion vorzunehmen.
          sensitive: Erzwingen, dass alle Medieninhalte dieses Profils mit einer Inhaltswarnung versehen werden.
          silence: Verhindert, dass dieses Profil öffentlich sichtbare Beiträge verfassen kann, und verbirgt alle Beiträge und Benachrichtigungen vor Personen, die diesem Profil nicht folgen. Alle Meldungen zu diesem Konto werden geschlossen.
          suspend: Verhindert jegliche Interaktion von oder zu diesem Konto und löscht dessen Inhalt. Dies kann innerhalb von 30 Tagen rückgängig gemacht werden. Alle Meldungen zu diesem Konto werden geschlossen.


@@ 40,7 40,7 @@ de:
        context: Orte, an denen der Filter aktiv sein soll
        current_password: Gib aus Sicherheitsgründen bitte das Passwort des aktuellen Kontos ein
        current_username: Um das zu bestätigen, gib den Profilnamen des aktuellen Kontos ein
        digest: Wenn du eine längere Zeit inaktiv bist oder du in deiner Abwesenheit eine Direktnachricht erhalten hast
        digest: Wenn du eine längere Zeit inaktiv bist oder du während deiner Abwesenheit in einer privaten Nachricht erwähnt worden bist
        discoverable: Dein Konto kann von Fremden durch Empfehlungen, Trends und andere Funktionen entdeckt werden
        email: Du wirst eine E-Mail zur Verifizierung dieser E-Mail-Adresse erhalten
        header: PNG, GIF oder JPG. Höchstens %{size} groß. Wird auf %{dimensions} px verkleinert


@@ 51,7 51,7 @@ de:
        password: Verwende mindestens 8 Zeichen
        phrase: Wird unabhängig von der Groß- und Kleinschreibung im Text oder der Inhaltswarnung eines Beitrags abgeglichen
        scopes: Welche Schnittstellen der Applikation erlaubt sind. Wenn du einen Top-Level-Scope auswählst, dann musst du nicht jeden einzelnen darunter auswählen.
        setting_aggregate_reblogs: Keine geteilten Beiträge anzeigen, die bereits kürzlich geteilt wurden (wirkt sich nur auf zukünftige geteilte Beiträge aus)
        setting_aggregate_reblogs: Beiträge, die erst kürzlich geteilt wurden, werden nicht noch einmal angezeigt (wirkt sich nur auf zukünftige geteilte Beiträge aus)
        setting_always_send_emails: Normalerweise werden Benachrichtigungen nicht per E-Mail versendet, wenn du gerade auf Mastodon aktiv bist
        setting_default_sensitive: Medien, die mit einer Inhaltswarnung versehen worden sind, werden – je nach Einstellung – erst nach einem zusätzlichen Klick angezeigt
        setting_display_media_default: Medien mit Inhaltswarnung ausblenden


@@ 151,7 151,7 @@ de:
      admin_account_action:
        include_statuses: Gemeldete Beiträge der E-Mail beifügen
        send_email_notification: Benachrichtigung per E-Mail
        text: Individuelle Verwarnung
        text: Individuelle Warnung
        type: Aktion
        types:
          disable: Einfrieren


@@ 182,7 182,7 @@ de:
        display_name: Anzeigename
        email: E-Mail-Adresse
        expires_in: Läuft ab
        fields: Zusatzfelder
        fields: Metadaten
        header: Titelbild
        honeypot: "%{label} (nicht ausfüllen)"
        inbox_url: Inbox-URL des Relais


@@ 226,7 226,7 @@ de:
        type: Typ
        username: Profilname
        username_or_email: Profilname oder E-Mail
        whole_word: Phrasensuche mit exakter Zeichenfolge erzwingen
        whole_word: Exakte Zeichenfolge
      email_domain_block:
        with_dns_records: MX-Einträge und IP-Adressen der Domain einbeziehen
      featured_tag:


@@ 259,14 259,14 @@ de:
        status_page_url: Statusseite (URL)
        theme: Standard-Design
        thumbnail: Vorschaubild des Servers
        timeline_preview: Nicht-authentifizierten Zugriff auf die öffentliche Timeline gestatten
        timeline_preview: Nicht-authentisierten Zugriff auf öffentliche Timelines gestatten
        trendable_by_default: Trends ohne vorherige Überprüfung erlauben
        trends: Trends aktivieren
        trends_as_landing_page: Trends als Landingpage verwenden
      interactions:
        must_be_follower: Benachrichtigungen von Profilen unterdrücken, die mir nicht folgen
        must_be_following: Benachrichtigungen von Profilen unterdrücken, denen ich nicht folge
        must_be_following_dm: Direktnachrichten von Profilen, denen ich nicht folge, ablehnen
        must_be_follower: Benachrichtigungen von Profilen, die mir nicht folgen, ausblenden
        must_be_following: Benachrichtigungen von Profilen, denen ich nicht folge, ausblenden
        must_be_following_dm: Private Nachrichten von Profilen, denen ich nicht folge, ausblenden
      invite:
        comment: Kommentar
      invite_request:

M config/locales/simple_form.et.yml => config/locales/simple_form.et.yml +2 -0
@@ 134,6 134,7 @@ et:
        position: Kõrgem roll otsustab teatud olukordades konfliktide lahendamise. Teatud toiminguid saab teha ainult madalama prioriteediga rollidega
      webhook:
        events: Saadetavate sündmuste valik
        template: Koosta oma JSON manus kasutades muutujateasendust. Jäta tühaks tavalise JSONi jaoks.
        url: Kuhu sündmused saadetakse
    labels:
      account:


@@ 307,6 308,7 @@ et:
        position: Positsioon
      webhook:
        events: Lubatud sündmused
        template: Manuse mall
        url: Lõpp-punkti URL
    'no': Ei
    not_recommended: Pole soovitatav

M config/locales/simple_form.fi.yml => config/locales/simple_form.fi.yml +2 -0
@@ 134,6 134,7 @@ fi:
        position: Korkeampi rooli ratkaisee konfliktit tietyissä tilanteissa. Tiettyjä toimintoja voidaan suorittaa vain rooleille, joiden prioriteetti on pienempi
      webhook:
        events: Valitse lähetettävät tapahtumat
        template: Luo oma JSON-hyötykuorma käyttäen muuttujainterpolointia. Jättäessäsi kentän tyhjäksi, käytetään vakio-JSON-kuormaa.
        url: Mihin tapahtumat lähetetään
    labels:
      account:


@@ 307,6 308,7 @@ fi:
        position: Prioriteetti
      webhook:
        events: Tapahtumat käytössä
        template: Hyötykuormapohja
        url: Päätepisteen URL
    'no': Ei
    not_recommended: Ei suositella

M config/locales/simple_form.ms.yml => config/locales/simple_form.ms.yml +4 -0
@@ 2,6 2,8 @@
ms:
  simple_form:
    hints:
      account:
        display_name: Nama penuh anda atau nama anda yang menyeronokkan.
      account_alias:
        acct: Tentukan namapengguna@domain akaun yang ingin anda alihkan daripada
      account_migration:


@@ 44,6 46,8 @@ ms:
        site_contact_username: Bagaimana orang boleh menghubungi anda pada Mastodon.
        site_extended_description: Apa-apa maklumat tambahan yang mungkin berguna untuk pelawat dan pengguna anda. Boleh distruktur dengan sintaks Markdown.
        site_terms: Gunakan dasar polisi anda atau biarkan kosong untuk menggunakan lalai. Boleh distruktur dengan sintaks Markdown.
        site_title: Bagaimana orang boleh merujuk kepada server anda selain nama domainnya.
        status_page_url: URL halaman yang membolehkan orang ramai melihat status server ini semasa gangguan
      form_challenge:
        current_password: Anda sedang memasuki kawasan selamat
      imports:

M config/locales/simple_form.nn.yml => config/locales/simple_form.nn.yml +7 -0
@@ 2,6 2,10 @@
nn:
  simple_form:
    hints:
      account:
        display_name: Ditt fulle namn eller ditt tøysenamn.
        fields: Heimesida di, pronomen, alder, eller kva du måtte ynskje.
        note: 'Du kan @nemne folk eller #emneknaggar.'
      account_alias:
        acct: Angi brukarnamn@domene til brukaren du ynskjer å flytta frå
      account_migration:


@@ 130,6 134,7 @@ nn:
        position: Høgare rolle avgjer konfliktløysing i visse situasjonar. Visse handlingar kan kun utførast på rollar med lågare prioritet
      webhook:
        events: Vel hendingar å senda
        template: Skriv di eiga JSON nyttelast ved å bruka variabel interpolering. La stå tom for standard JSON.
        url: Kvar hendingar skal sendast
    labels:
      account:


@@ 294,6 299,7 @@ nn:
        usable: Gje tut lov til å nytta denne emneknaggen
      user:
        role: Rolle
        time_zone: Tidssone
      user_role:
        color: Emblemfarge
        highlighted: Vis rolle som emblem på brukarprofil


@@ 302,6 308,7 @@ nn:
        position: Prioritet
      webhook:
        events: Aktiverte hendingar
        template: Nyttelastmal
        url: Endepunkts-URL
    'no': Nei
    not_recommended: Ikkje anbefalt

M config/locales/simple_form.no.yml => config/locales/simple_form.no.yml +26 -0
@@ 2,6 2,10 @@
'no':
  simple_form:
    hints:
      account:
        display_name: Ditt fulle navn eller ditt morsomme navn.
        fields: Din hjemmeside, uttalelse, alder, eller alt annet du vil.
        note: 'Du kan @nevne andre eller #emneknagger.'
      account_alias:
        acct: Spesifiser brukernavn@domene til brukeren du vil flytte fra
      account_migration:


@@ 18,6 22,8 @@
          disable: Forhindre brukeren fra å bruke kontoen sin, men ikke slett eller skjul 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 merket som følsomme.
          silence: Forhindre at brukeren kan legge ut innlegg med offentlig synlighet, skjule innleggene og varslene sine fra folk som ikke følger dem. Lukker alle rapporter mot denne kontoen.
          suspend: Forhindre interaksjon fra eller til denne kontoen og slett innholdet. Tilbakestiller innholdet innen 30 dager. Lukk alle rapporter mot denne kontoen.
        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


@@ 56,6 62,7 @@
        setting_show_application: Appen du bruker til å publisere innlegg vil bli vist i den detaljerte visningen til innleggene dine
        setting_use_blurhash: Gradientene er basert på fargene til de skjulte visualitetene, men gjør alle detaljer uklare
        setting_use_pending_items: Skjul tidslinjeoppdateringer bak et klikk, i stedet for å automatisk la strømmen skrolle
        username: Du kan bruke bokstaver, tall og understrekingstegn
        whole_word: Når søkeordet eller setningen bare er alfanumerisk, aktiveres det bare hvis det samsvarer med hele ordet
      domain_allow:
        domain: Dette domenet vil være i stand til å hente data fra denne serveren og dets innkommende data vil bli prosessert og lagret


@@ 70,6 77,7 @@
          hide: Skjul filtrert innhold fullstendig, som om det ikke eksisterte
          warn: Skjul det filtrerte innholdet bak et varsel som omtaler filterets tittel
      form_admin_settings:
        activity_api_enabled: Teller med lokale publiserte innlegg, aktive brukere og nye registreringer i ukentlige bøtter
        backups_retention_period: Behold genererte brukerarkiv i det angitte antall dager.
        bootstrap_timeline_accounts: Disse kontoene vil bli festet til toppen av nye brukeres følge-anbefalinger.
        closed_registrations_message: Vises når det er stengt for registrering


@@ 77,6 85,7 @@
        custom_css: Du kan bruke egendefinerte stiler på nettversjonen av Mastodon.
        mascot: Overstyrer illustrasjonen i det avanserte webgrensesnittet.
        media_cache_retention_period: Mediafiler som lastes ned vil bli slettet etter det angitte antall dager når det settes til en positiv verdi, og blir lastet ned på nytt ved behov.
        peers_api_enabled: En liste over domenenavn denne serveren har oppstått i fødiverset. Det finnes ikke data om du føderer med en gitt server, for akkurat det serveren din vet om. Dette brukes av tjenester som i all hovedsak innhenter føderasjonsstatistikk.
        profile_directory: Profilkatalogen viser alle brukere som har valgt å kunne bli oppdaget.
        require_invite_text: Når registreringer krever manuell godkjenning, må du gjøre «Hvorfor vil du bli med?»-tekstinput obligatorisk i stedet for valgfritt
        site_contact_email: Hvordan mennesker får tak i deg for rettslige spørsmål eller brukerstøtte.


@@ 87,6 96,11 @@
        site_title: Hva man kan kalle tjeneren din utover domenenavnet.
        status_page_url: URL-adressen til en side hvor folk kan se tilstanden til denne tjeneren under et avbrudd
        theme: Tema som vises for nye brukere og besøkende som ikke er logget inn.
        thumbnail: Et omtrent 2:1 bilde vist sammen med serverinformasjonen din.
        timeline_preview: Logget ut besøkende vil kunne bla gjennom de siste offentlige innlegg tilgjengelig på serveren.
        trendable_by_default: Hopp over manuell gjennomgang av populære innhold. Individuelle elementer kan fjernes fra populært etter faktaen.
        trends: Trender viser hvilke innlegg, emneknagger og nyheter som får trekkraft på serveren din.
        trends_as_landing_page: Vis populære innhold til innloggede brukere og besøkende i stedet for en beskrivelse av tjeneren. Krever populært for å bli aktivert.
      form_challenge:
        current_password: Du går inn i et sikkert område
      imports:


@@ 106,10 120,12 @@
        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.
        webauthn: Hvis det er en USB-nøkkel må du sette den inn og om nødvendig trykke på den.
      tag:
        name: Du kan bare forandre bruken av store/små bokstaver, f.eks. for å gjøre det mer lesbart
      user:
        chosen_languages: Hvis noen av dem er valgt, vil kun innlegg i de valgte språkene bli vist i de offentlige tidslinjene
        role: Rollekontroller som bestemmer rettigheter brukeren har
      user_role:
        color: Farge som skal brukes for rollen gjennom hele UI, som RGB i hex-format
        highlighted: Dette gjør rollen offentlig synlig


@@ 118,6 134,7 @@
        position: Høyere rolle bestemmer konfliktløsning i visse situasjoner. Enkelte tiltak kan bare utføres på roller med lavere prioritet
      webhook:
        events: Velg hendelser som skal sendes
        template: Skriv din egen JSON nyttelast ved å bruke variabel interpolering. La stå tom for standard JSON.
        url: Hvor hendelser vil bli sendt til
    labels:
      account:


@@ 219,12 236,15 @@
          hide: Skjul fullstendig
          warn: Skjul med en advarsel
      form_admin_settings:
        activity_api_enabled: Publiser samlet statistikk om brukeraktivitet i API
        backups_retention_period: Brukers oppbevaringsperiode for arkiv
        bootstrap_timeline_accounts: Anbefaler alltid disse kontoene til nye brukere
        closed_registrations_message: Egendefinert melding når registrering ikke er tilgjengelig
        content_cache_retention_period: Oppbevaringsperiode for innholdsbuffer
        custom_css: Egendefinert CSS
        mascot: Egendefinert maskot (legacy)
        media_cache_retention_period: Oppbevaringsperiode for mediebuffer
        peers_api_enabled: Publiser liste over oppdagede instanser i API
        profile_directory: Aktiver profilkatalog
        registrations_mode: Hvem kan opprette konto
        require_invite_text: Krev en grunn for å bli med


@@ 236,10 256,13 @@
        site_short_description: Beskrivelse av server
        site_terms: Retningslinjer for personvern
        site_title: Servernavn
        status_page_url: Status side lenke
        theme: Standard tema
        thumbnail: Miniatyrbilde til server
        timeline_preview: Tillat uautentisert tilgang til offentlige tidslinjer
        trendable_by_default: Tillat trender uten foregående vurdering
        trends: Aktiver trender
        trends_as_landing_page: Bruk trender som landingsside
      interactions:
        must_be_follower: Blokker varslinger fra ikke-følgere
        must_be_following: Blokker varslinger fra personer du ikke følger


@@ 276,6 299,7 @@
        usable: Tillat innlegg å bruke denne emneknaggen
      user:
        role: Rolle
        time_zone: Tidssone
      user_role:
        color: Merkefarge
        highlighted: Vis rolle som merke på brukerprofiler


@@ 284,6 308,8 @@
        position: Prioritet
      webhook:
        events: Aktiverte hendelser
        template: Nyttelast mal
        url: Endepunkt lenke
    'no': Nei
    not_recommended: Ikke anbefalt
    recommended: Anbefalt

M config/locales/simple_form.sl.yml => config/locales/simple_form.sl.yml +2 -0
@@ 134,6 134,7 @@ sl:
        position: Višja vloga se odloča o razrešitvi sporov v določenih situacijah. Določena dejanja lahko izvede le na vlogah z nižjo prioriteto
      webhook:
        events: Izberite dogodke za pošiljanje
        template: Sestavite svojo obremenitev JSON z uporabo interpolacije spremenljivk. Za privzeti JSON pustite prazno.
        url: Kam bodo poslani dogodki
    labels:
      account:


@@ 307,6 308,7 @@ sl:
        position: Prioriteta
      webhook:
        events: Omogočeni dogodki
        template: Predloga obremenitev
        url: URL končne točke
    'no': Ne
    not_recommended: Ni priporočeno

M config/locales/simple_form.vi.yml => config/locales/simple_form.vi.yml +1 -1
@@ 62,7 62,7 @@ vi:
        setting_show_application: Tên ứng dụng bạn dùng để đăng tút sẽ hiện trong chi tiết của tút
        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 nhấn vào
        username: Chỉ chấp nhận ký tự, số và dấu gạch dưới
        username: Chỉ dùng ký tự, số và dấu gạch dưới
        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:
        domain: Máy chủ này sẽ tiếp nhận dữ liệu, rồi sau đó xử lý và lưu trữ

M config/locales/sk.yml => config/locales/sk.yml +1 -1
@@ 945,7 945,7 @@ sk:
    carry_mutes_over_text: Tento užívateľ sa presunul z účtu %{acct}, ktorý si mal/a stíšený.
  notification_mailer:
    favourite:
      body: 'Tvoj príspevok bol uložený medzi obľúbené užívateľa %{name}:'
      body: 'Tvoj príspevok bol obľúbený užívateľom %{name}:'
      subject: "%{name} si obľúbil/a tvoj príspevok"
      title: Novo obľúbené
    follow:

M config/locales/sl.yml => config/locales/sl.yml +3 -0
@@ 399,6 399,7 @@ sl:
      confirm_suspension:
        cancel: Prekliči
        confirm: Suspendiraj
        permanent_action: Z razveljavitvijo suzpenza ne boste obnovili nobenih podatkov ali razmerij.
        stop_communication: Vaš strežnik bo prenehal komunicirati s temi strežniki.
        title: Potrdi domenski blok za %{domain}
      created_msg: Domenski blok se sedaj obdeluje


@@ 791,6 792,7 @@ sl:
          approved: Potrebna je odobritev za prijavo
          none: Nihče se ne more prijaviti
          open: Vsakdo se lahko prijavi
      title: Nastavitve strežnika
    site_uploads:
      delete: Izbriši naloženo datoteko
      destroyed_msg: Prenos na strežnik uspešno izbrisan!


@@ 1798,6 1800,7 @@ sl:
    signed_in_as: 'Vpisani kot:'
  verification:
    here_is_how: Kako to poteka
    instructions_html: Spodnjo kodo kopirajte in prilepite v HTML svojega spletnega mesta. Nato dodajte naslov svoje spletne strani v eno od dodatnih polj v svojem profilu v zavihku »Uredi profil« in shranite spremembe.
    verification: Potrditev
    verified_links: Vaše preverjene povezave
  webauthn_credentials:

M config/locales/sr-Latn.yml => config/locales/sr-Latn.yml +4 -4
@@ 466,7 466,7 @@ sr-Latn:
        title: Uvezi blokirane domene
      no_file: Nijedan fajl nije odabran
    follow_recommendations:
      description_html: "<strong>Predlozi za praćenje pomažu novim korisnicima da brzo pronađu zanimljiv sadržaj</strong>. Kada korisnik nije dovoljno interagovao sa ostalima da bi se za njega formirali personalizovani predlozi za praćenje, ovi nalozi će biti preporučeni umesto toga. Oni se generišu na dnevnoj bazi iz skupa naloga sa najviše nedavnih angažovanja i najviše lokalnih pratilaca za jedan jezik."
      description_html: "<strong>Predlozi za praćenje pomažu novim korisnicima da brzo pronađu zanimljiv sadržaj</strong>. Kada korisnik nije dovoljno komunicirao sa drugima da bi se za njega formirali personalizovani predlozi za praćenje, ovi nalozi će biti preporučeni umesto toga. Oni se generišu na dnevnoj bazi iz skupa naloga sa najviše nedavnih angažovanja i najviše lokalnih pratilaca za jedan jezik."
      language: Za jezik
      status: Status
      suppress: Potisni preporuke za praćenje


@@ 1200,7 1200,7 @@ sr-Latn:
  filters:
    contexts:
      account: Profili
      home: Vremenska linija početne
      home: Početna stranica i liste
      notifications: Obaveštenja
      public: Javne vremenske linije
      thread: Razgovori


@@ 1631,8 1631,8 @@ sr-Latn:
    default_language: Isto kao jezik okruženja
    disallowed_hashtags:
      few: 'sadrži zabranjene heštegove: %{tags}'
      one: 'sadrži zabranjeni hešteg: %{tags}'
      other: 'sadrži zabranjene heštegove: %{tags}'
      one: 'sadrži zabranjenu heš oznaku: %{tags}'
      other: 'sadrži zabranjene heš oznake: %{tags}'
    edited_at_html: Izmenjeno %{date}
    errors:
      in_reply_not_found: Objava na koju pokušavate da odgovorite naizgled ne postoji.

M config/locales/sr.yml => config/locales/sr.yml +5 -5
@@ 466,7 466,7 @@ sr:
        title: Увези блокиране домене
      no_file: Ниједан фајл није одабран
    follow_recommendations:
      description_html: "<strong>Предлози за праћење помажу новим корисницима да брзо пронађу занимљив садржај</strong>. Када корисник није довољно интераговао са осталима да би се за њега формирали персонализовани предлози за праћење, ови налози ће бити препоручени уместо тога. Они се генеришу на дневној бази из скупа налога са највише недавних ангажовања и највише локалних пратилаца за један језик."
      description_html: "<strong>Предлози за праћење помажу новим корисницима да брзо пронађу занимљив садржај</strong>. Када корисник није довољно комуницирао са другима да би се за њега формирали персонализовани предлози за праћење, ови налози ће бити препоручени уместо тога. Они се генеришу на дневној бази из скупа налога са највише недавних ангажовања и највише локалних пратилаца за један језик."
      language: За језик
      status: Статус
      suppress: Потисни препоруке за праћење


@@ 1200,7 1200,7 @@ sr:
  filters:
    contexts:
      account: Профили
      home: Временска линија почетне
      home: Почетна страница и листе
      notifications: Обавештења
      public: Јавне временске линије
      thread: Разговори


@@ 1630,9 1630,9 @@ sr:
    content_warning: 'Упозорење на садржај: %{warning}'
    default_language: Исто као језик окружења
    disallowed_hashtags:
      few: 'садржи забрањене хештегове: %{tags}'
      one: 'садржи забрањени хештег: %{tags}'
      other: 'садржи забрањене хештегове: %{tags}'
      few: 'садржи забрањене хеш ознаке: %{tags}'
      one: 'садржи забрањену хеш ознаку: %{tags}'
      other: 'садржи забрањене хеш ознаке: %{tags}'
    edited_at_html: Измењено %{date}
    errors:
      in_reply_not_found: Објава на коју покушавате да одговорите наизглед не постоји.

M config/locales/th.yml => config/locales/th.yml +2 -2
@@ 1650,9 1650,9 @@ th:
    mastodon-light: Mastodon (สว่าง)
  time:
    formats:
      default: "%d %b %Y, %H:%M"
      default: "%d %b %Y %H:%M น."
      month: "%b %Y"
      time: "%H:%M"
      time: "%H:%M น."
  two_factor_authentication:
    add: เพิ่ม
    disable: ปิดใช้งาน 2FA

M config/locales/tt.yml => config/locales/tt.yml +2 -0
@@ 337,6 337,8 @@ tt:
      accept: Кабул итү
      back: Кире
    security: Хәвефсезлек
    status:
      account_status: Хисап халәте
  challenge:
    confirm: Дәвам итү
  date:

M config/locales/vi.yml => config/locales/vi.yml +8 -8
@@ 31,7 31,7 @@ vi:
    accounts:
      add_email_domain_block: Chặn tên miền email
      approve: Phê duyệt
      approved_msg: Đã phê duyệt %{username} đăng ký thành công
      approved_msg: Đã phê duyệt đăng ký %{username}
      are_you_sure: Bạn có chắc không?
      avatar: Ảnh đại diện
      by_domain: Máy chủ


@@ 964,7 964,7 @@ vi:
    view_profile: Xem trang hồ sơ
    view_status: Xem tút
  applications:
    created: Đơn đăng ký được tạo thành công
    created: Đã gửi yêu cầu đăng ký
    destroyed: Đã xóa đơn đăng ký
    logout: Đăng xuất
    regenerate_token: Tạo lại mã truy cập


@@ 1000,7 1000,7 @@ vi:
    privacy_policy_agreement_html: Tôi đã đọc và đồng ý <a href="%{privacy_policy_path}" target="_blank">chính sách bảo mật</a>
    progress:
      confirm: Xác minh email
      details: Thông tin của bạn
      details: Điền thông tin
      review: Đợi duyệt
      rules: Đọc nội quy
    providers:


@@ 1021,18 1021,18 @@ vi:
    security: Bảo mật
    set_new_password: Đặt mật khẩu mới
    setup:
      email_below_hint_html: Kiểm tra thư rác của bạn hoặc yêu cầu gửi lại. Bạn có thể sửa địa chỉ email của mình nếu sai.
      email_below_hint_html: Kiểm tra hộp thư rác hoặc yêu cầu gửi lại. Bạn có thể sửa địa chỉ email của mình nếu sai.
      email_settings_hint_html: Nhấn vào liên kết chúng tôi vừa gửi để xác minh %{email}. Nhanh nhé bạn.
      link_not_received: Không nhận được mã?
      new_confirmation_instructions_sent: Bạn sẽ nhận được một email mới với liên kết xác nhận sau vài phút!
      title: Kiểm tra hộp thư của bạn
      title: Kiểm tra email của bạn
    sign_in:
      preamble_html: Đăng nhập bằng tài khoản <strong>%{domain}</strong>. Nếu tài khoản của bạn được lưu trữ trên một máy chủ khác, bạn sẽ không thể đăng nhập tại đây.
      title: Đăng nhập %{domain}
    sign_up:
      manual_review: Đăng ký trên %{domain} cần duyệt thủ công. Để giúp chúng tôi xử lý nhanh, hãy viết một chút về bản thân và lý do bạn muốn có một tài khoản trên %{domain}.
      manual_review: "%{domain} sẽ duyệt đăng ký thủ công. Để giúp chúng tôi duyệt nhanh, hãy viết một chút về bản thân và lý do bạn muốn có một tài khoản trên %{domain}."
      preamble: Với tài khoản trên máy chủ Mastodon này, bạn sẽ có thể theo dõi bất kỳ người nào trên các máy chủ khác, bất kể tài khoản của họ ở đâu.
      title: Cho phép bạn đăng ký trên %{domain}.
      title: Đang đăng ký trên %{domain}.
    status:
      account_status: Trạng thái tài khoản
      confirming: Đang chờ xác minh email.


@@ 1592,7 1592,7 @@ vi:
    show_more: Đọc thêm
    show_newer: Mới hơn
    show_older: Cũ hơn
    show_thread: Trích nguyên văn
    show_thread: Nội dung gốc
    title: '%{name}: "%{quote}"'
    visibilities:
      direct: Nhắn riêng

M config/locales/zh-TW.yml => config/locales/zh-TW.yml +1 -1
@@ 810,7 810,7 @@ zh-TW:
        message_html: 不相容的 Elasticsearch 版本:%{value}
        version_comparison: Elasticsearch %{running_version} 版正在執行,需要 %{required_version} 版。
      rules_check:
        action: 管理服务器规则
        action: 管理伺服器規則
        message_html: 您尚未定義任何伺服器規則。
      sidekiq_process_check:
        message_html: 沒有佇列 %{value} 的 Sidekiq 行程,請檢查您的 Sidekiq 設定組態

M db/migrate/20170105224407_add_shortcode_to_media_attachments.rb => db/migrate/20170105224407_add_shortcode_to_media_attachments.rb +8 -1
@@ 1,12 1,19 @@
# frozen_string_literal: true

class AddShortcodeToMediaAttachments < ActiveRecord::Migration[5.0]
  class MigrationMediaAttachment < ApplicationRecord
    self.table_name = :media_attachments
    scope :local, -> { where(remote_url: '') }
  end

  def up
    add_column :media_attachments, :shortcode, :string, null: true, default: nil
    add_index :media_attachments, :shortcode, unique: true

    MigrationMediaAttachment.reset_column_information

    # Migrate old links
    MediaAttachment.local.update_all('shortcode = id')
    MigrationMediaAttachment.local.update_all('shortcode = id')
  end

  def down

M db/migrate/20170304202101_add_type_to_media_attachments.rb => db/migrate/20170304202101_add_type_to_media_attachments.rb +15 -2
@@ 1,11 1,24 @@
# frozen_string_literal: true

class AddTypeToMediaAttachments < ActiveRecord::Migration[5.0]
  class MigrationMediaAttachment < ApplicationRecord
    self.table_name = :media_attachments
    enum type: [:image, :gifv, :video]
    IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze
    VIDEO_MIME_TYPES = ['video/webm', 'video/mp4'].freeze
  end

  def up
    add_column :media_attachments, :type, :integer, default: 0, null: false

    MediaAttachment.where(file_content_type: MediaAttachment::IMAGE_MIME_TYPES).update_all(type: MediaAttachment.types[:image])
    MediaAttachment.where(file_content_type: MediaAttachment::VIDEO_MIME_TYPES).update_all(type: MediaAttachment.types[:video])
    MigrationMediaAttachment.reset_column_information

    MigrationMediaAttachment
      .where(file_content_type: MigrationMediaAttachment::IMAGE_MIME_TYPES)
      .update_all(type: MigrationMediaAttachment.types[:image])
    MigrationMediaAttachment
      .where(file_content_type: MigrationMediaAttachment::VIDEO_MIME_TYPES)
      .update_all(type: MigrationMediaAttachment.types[:video])
  end

  def down

M db/migrate/20181024224956_migrate_account_conversations.rb => db/migrate/20181024224956_migrate_account_conversations.rb +37 -15
@@ 7,9 7,29 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]

  disable_ddl_transaction!

  class Mention < ApplicationRecord
    belongs_to :account, inverse_of: :mentions
    belongs_to :status, -> { unscope(where: :deleted_at) }
  class MigrationAccount < ApplicationRecord
    self.table_name = :accounts
    has_many :mentions, inverse_of: :account, dependent: :destroy, class_name: 'MigrationMention', foreign_key: :account_id
  end

  class MigrationConversation < ApplicationRecord
    self.table_name = :conversations
  end

  class MigrationStatus < ApplicationRecord
    self.table_name = :statuses
    belongs_to :account, class_name: 'MigrationAccount'
    has_many :mentions, dependent: :destroy, inverse_of: :status, class_name: 'MigrationMention', foreign_key: :status_id
    scope :local, -> { where(local: true).or(where(uri: nil)) }
    enum visibility: { public: 0, unlisted: 1, private: 2, direct: 3, limited: 4 }, _suffix: :visibility
    has_many :active_mentions, -> { active }, class_name: 'MigrationMention', inverse_of: :status, foreign_key: :status_id
  end

  class MigrationMention < ApplicationRecord
    self.table_name = :mentions
    belongs_to :account, inverse_of: :mentions, class_name: 'MigrationAccount'
    belongs_to :status, -> { unscope(where: :deleted_at) }, class_name: 'MigrationStatus'
    scope :active, -> { where(silent: false) }

    delegate(
      :username,


@@ 19,22 39,24 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
    )
  end

  class Notification < ApplicationRecord
    belongs_to :account, optional: true
  class MigrationNotification < ApplicationRecord
    self.table_name = :notifications
    belongs_to :account, optional: true, class_name: 'MigrationAccount'
    belongs_to :activity, polymorphic: true, optional: true

    belongs_to :status,  foreign_key: 'activity_id', optional: true
    belongs_to :mention, foreign_key: 'activity_id', optional: true
    belongs_to :status,  foreign_key: 'activity_id', optional: true, class_name: 'MigrationStatus'
    belongs_to :mention, foreign_key: 'activity_id', optional: true, class_name: 'MigrationMention'

    def target_status
      mention&.status
    end
  end

  class AccountConversation < ApplicationRecord
    belongs_to :account
    belongs_to :conversation
    belongs_to :last_status, -> { unscope(where: :deleted_at) }, class_name: 'Status'
  class MigrationAccountConversation < ApplicationRecord
    self.table_name = :account_conversations
    belongs_to :account, class_name: 'MigrationAccount'
    belongs_to :conversation, class_name: 'MigrationConversation'
    belongs_to :last_status, -> { unscope(where: :deleted_at) }, class_name: 'MigrationStatus'

    before_validation :set_last_status



@@ 74,7 96,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
    last_time = Time.zone.now

    local_direct_statuses.includes(:account, mentions: :account).find_each do |status|
      AccountConversation.add_status(status.account, status)
      MigrationAccountConversation.add_status(status.account, status)
      migrated += 1

      if Time.zone.now - last_time > 1


@@ 84,7 106,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
    end

    notifications_about_direct_statuses.includes(:account, mention: { status: [:account, mentions: :account] }).find_each do |notification|
      AccountConversation.add_status(notification.account, notification.target_status)
      MigrationAccountConversation.add_status(notification.account, notification.target_status)
      migrated += 1

      if Time.zone.now - last_time > 1


@@ 103,10 125,10 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
  end

  def local_direct_statuses
    Status.unscoped.local.where(visibility: :direct)
    MigrationStatus.unscoped.local.where(visibility: :direct)
  end

  def notifications_about_direct_statuses
    Notification.joins('INNER JOIN mentions ON mentions.id = notifications.activity_id INNER JOIN statuses ON statuses.id = mentions.status_id').where(activity_type: 'Mention', statuses: { visibility: :direct })
    MigrationNotification.joins('INNER JOIN mentions ON mentions.id = notifications.activity_id INNER JOIN statuses ON statuses.id = mentions.status_id').where(activity_type: 'Mention', statuses: { visibility: :direct })
  end
end

M db/migrate/20181116173541_copy_account_stats.rb => db/migrate/20181116173541_copy_account_stats.rb +6 -2
@@ 3,6 3,10 @@
class CopyAccountStats < ActiveRecord::Migration[5.2]
  disable_ddl_transaction!

  class MigrationAccount < ApplicationRecord
    self.table_name = :accounts
  end

  def up
    safety_assured do
      if supports_upsert?


@@ 27,7 31,7 @@ class CopyAccountStats < ActiveRecord::Migration[5.2]
  def up_fast
    say 'Upsert is available, importing counters using the fast method'

    Account.unscoped.select('id').find_in_batches(batch_size: 5_000) do |accounts|
    MigrationAccount.unscoped.select('id').find_in_batches(batch_size: 5_000) do |accounts|
      execute <<-SQL.squish
        INSERT INTO account_stats (account_id, statuses_count, following_count, followers_count, created_at, updated_at)
        SELECT id, statuses_count, following_count, followers_count, created_at, updated_at


@@ 44,7 48,7 @@ class CopyAccountStats < ActiveRecord::Migration[5.2]

    # We cannot use bulk INSERT or overarching transactions here because of possible
    # uniqueness violations that we need to skip over
    Account.unscoped.select('id, statuses_count, following_count, followers_count, created_at, updated_at').find_each do |account|
    MigrationAccount.unscoped.select('id, statuses_count, following_count, followers_count, created_at, updated_at').find_each do |account|
      params = [account.id, account[:statuses_count], account[:following_count], account[:followers_count], account.created_at, account.updated_at]
      exec_insert('INSERT INTO account_stats (account_id, statuses_count, following_count, followers_count, created_at, updated_at) VALUES ($1, $2, $3, $4, $5, $6)', nil, params)
    rescue ActiveRecord::RecordNotUnique

A db/migrate/20230725213448_add_image_description_to_preview_cards.rb => db/migrate/20230725213448_add_image_description_to_preview_cards.rb +17 -0
@@ 0,0 1,17 @@
# frozen_string_literal: true

require Rails.root.join('lib', 'mastodon', 'migration_helpers')

class AddImageDescriptionToPreviewCards < ActiveRecord::Migration[7.0]
  include Mastodon::MigrationHelpers

  disable_ddl_transaction!

  def up
    safety_assured { add_column_with_default :preview_cards, :image_description, :string, default: '', allow_null: false }
  end

  def down
    remove_column :preview_cards, :image_description
  end
end

M db/post_migrate/20201017234926_fill_account_suspension_origin.rb => db/post_migrate/20201017234926_fill_account_suspension_origin.rb +8 -1
@@ 3,8 3,15 @@
class FillAccountSuspensionOrigin < ActiveRecord::Migration[5.2]
  disable_ddl_transaction!

  class MigrationAccount < ApplicationRecord
    self.table_name = :accounts
    scope :suspended, -> { where.not(suspended_at: nil) }
    enum suspension_origin: { local: 0, remote: 1 }, _prefix: true
  end

  def up
    Account.suspended.where(suspension_origin: nil).in_batches.update_all(suspension_origin: :local)
    MigrationAccount.reset_column_information
    MigrationAccount.suspended.where(suspension_origin: nil).in_batches.update_all(suspension_origin: :local)
  end

  def down; end

M db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb => db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb +1 -1
@@ 18,7 18,7 @@ class AddUniqueIndexOnPreviewCardsStatuses < ActiveRecord::Migration[6.1]
  def deduplicate_and_reindex!
    deduplicate_preview_cards!

    safety_assured { execute 'REINDEX INDEX preview_cards_statuses_pkey' }
    safety_assured { execute 'REINDEX INDEX CONCURRENTLY preview_cards_statuses_pkey' }
  rescue ActiveRecord::RecordNotUnique
    retry
  end

M db/schema.rb => db/schema.rb +1 -0
@@ 802,6 802,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_08_03_112520) do
    t.boolean "trendable"
    t.integer "link_type"
    t.datetime "published_at"
    t.string "image_description", default: "", null: false
    t.index ["url"], name: "index_preview_cards_on_url", unique: true
  end


M dist/mastodon-streaming.service => dist/mastodon-streaming.service +4 -43
@@ 1,51 1,12 @@
[Unit]
Description=mastodon-streaming
After=network.target
Wants=mastodon-streaming@4000.service

[Service]
Type=simple
User=mastodon
WorkingDirectory=/home/mastodon/live
Environment="NODE_ENV=production"
Environment="PORT=4000"
ExecStart=/usr/bin/node ./streaming
TimeoutSec=15
Restart=always
LimitNOFILE=65536
# Proc filesystem
ProcSubset=pid
ProtectProc=invisible
# Capabilities
CapabilityBoundingSet=
# Security
NoNewPrivileges=true
# Sandboxing
ProtectSystem=strict
PrivateTmp=true
PrivateDevices=true
PrivateUsers=true
ProtectHostname=true
ProtectKernelLogs=true
ProtectKernelModules=true
ProtectKernelTunables=true
ProtectControlGroups=true
RestrictAddressFamilies=AF_INET
RestrictAddressFamilies=AF_INET6
RestrictAddressFamilies=AF_NETLINK
RestrictAddressFamilies=AF_UNIX
RestrictNamespaces=true
LockPersonality=true
RestrictRealtime=true
RestrictSUIDSGID=true
RemoveIPC=true
PrivateMounts=true
ProtectClock=true
# System Call Filtering
SystemCallArchitectures=native
SystemCallFilter=~@cpu-emulation @debug @keyring @ipc @memlock @mount @obsolete @privileged @resources @setuid
SystemCallFilter=pipe
SystemCallFilter=pipe2
ReadWritePaths=/home/mastodon/live
Type=oneshot
ExecStart=/bin/echo "mastodon-streaming exists only to collectively start and stop mastodon-streaming@ instances, shimming over the migration to templated mastodon-streaming systemd unit"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

A dist/mastodon-streaming@.service => dist/mastodon-streaming@.service +54 -0
@@ 0,0 1,54 @@
[Unit]
Description=mastodon-streaming on port %I
After=network.target
# handles using `systemctl restart mastodon-streaming`
PartOf=mastodon-streaming.service
ReloadPropagatedFrom=mastodon-streaming.service

[Service]
Type=simple
User=mastodon
WorkingDirectory=/home/mastodon/live
Environment="NODE_ENV=production"
Environment="PORT=%i"
ExecStart=/usr/bin/node ./streaming
TimeoutSec=15
Restart=always
LimitNOFILE=65536
# Proc filesystem
ProcSubset=pid
ProtectProc=invisible
# Capabilities
CapabilityBoundingSet=
# Security
NoNewPrivileges=true
# Sandboxing
ProtectSystem=strict
PrivateTmp=true
PrivateDevices=true
PrivateUsers=true
ProtectHostname=true
ProtectKernelLogs=true
ProtectKernelModules=true
ProtectKernelTunables=true
ProtectControlGroups=true
RestrictAddressFamilies=AF_INET
RestrictAddressFamilies=AF_INET6
RestrictAddressFamilies=AF_NETLINK
RestrictAddressFamilies=AF_UNIX
RestrictNamespaces=true
LockPersonality=true
RestrictRealtime=true
RestrictSUIDSGID=true
RemoveIPC=true
PrivateMounts=true
ProtectClock=true
# System Call Filtering
SystemCallArchitectures=native
SystemCallFilter=~@cpu-emulation @debug @keyring @ipc @memlock @mount @obsolete @privileged @resources @setuid
SystemCallFilter=pipe
SystemCallFilter=pipe2
ReadWritePaths=/home/mastodon/live

[Install]
WantedBy=multi-user.target mastodon-streaming.service

M dist/nginx.conf => dist/nginx.conf +8 -0
@@ 8,7 8,15 @@ upstream backend {
}

upstream streaming {
    # Instruct nginx to send connections to the server with the least number of connections
    # to ensure load is distributed evenly.
    least_conn;

    server 127.0.0.1:4000 fail_timeout=0;
    # Uncomment these lines for load-balancing multiple instances of streaming for scaling,
    # this assumes your running the streaming server on ports 4000, 4001, and 4002:
    # server 127.0.0.1:4001 fail_timeout=0;
    # server 127.0.0.1:4002 fail_timeout=0;
}

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=CACHE:10m inactive=7d max_size=1g;

M lib/mastodon/cli/search.rb => lib/mastodon/cli/search.rb +1 -1
@@ 15,7 15,7 @@ module Mastodon::CLI

    option :concurrency, type: :numeric, default: 5, aliases: [:c], desc: 'Workload will be split between this number of threads'
    option :batch_size, type: :numeric, default: 100, aliases: [:b], desc: 'Number of records in each batch'
    option :only, type: :array, enum: %w(accounts tags statuses), desc: 'Only process these indices'
    option :only, type: :array, enum: %w(instances accounts tags statuses), desc: 'Only process these indices'
    option :import, type: :boolean, default: true, desc: 'Import data from the database to the index'
    option :clean, type: :boolean, default: true, desc: 'Remove outdated documents from the index'
    desc 'deploy', 'Create or upgrade Elasticsearch indices and populate them'

M lib/mastodon/migration_helpers.rb => lib/mastodon/migration_helpers.rb +13 -1
@@ 195,7 195,14 @@ module Mastodon
    def supports_drop_index_concurrently?
      version = select_one("SELECT current_setting('server_version_num') AS v")['v'].to_i

      version >= 90200
      version >= 90_200
    end

    # Only available on Postgresql >= 11
    def supports_add_column_with_default?
      version = select_one("SELECT current_setting('server_version_num') AS v")['v'].to_i

      version >= 11_000
    end

    # Adds a foreign key with only minimal locking on the tables involved.


@@ 414,6 421,11 @@ module Mastodon
    # This method can also take a block which is passed directly to the
    # `update_column_in_batches` method.
    def add_column_with_default(table, column, type, default:, limit: nil, allow_null: false, &block)
      if supports_add_column_with_default?
        add_column(table, column, type, default: default, limit: limit, null: allow_null)
        return
      end

      if transaction_open?
        raise 'add_column_with_default can not be run inside a transaction, ' \
          'you can disable transactions by calling disable_ddl_transaction! ' \

M lib/mastodon/version.rb => lib/mastodon/version.rb +3 -3
@@ 9,15 9,15 @@ module Mastodon
    end

    def minor
      1
      2
    end

    def patch
      6
      0
    end

    def flags
      ENV.fetch('MASTODON_VERSION_FLAGS', '')
      ENV.fetch('MASTODON_VERSION_FLAGS', '-beta1')
    end

    def suffix

M package.json => package.json +5 -4
@@ 97,6 97,7 @@
    "pg-connection-string": "^2.6.0",
    "postcss": "^8.4.24",
    "postcss-loader": "^4.3.0",
    "prom-client": "^14.2.0",
    "prop-types": "^15.8.1",
    "punycode": "^2.3.0",
    "react": "^18.2.0",


@@ 123,7 124,7 @@
    "redux": "^4.2.1",
    "redux-immutable": "^4.0.0",
    "redux-thunk": "^2.4.2",
    "regenerator-runtime": "^0.13.11",
    "regenerator-runtime": "^0.14.0",
    "requestidlecallback": "^0.3.0",
    "reselect": "^4.1.8",
    "rimraf": "^5.0.1",


@@ 191,15 192,15 @@
    "@typescript-eslint/parser": "^6.0.0",
    "babel-jest": "^29.5.0",
    "eslint": "^8.41.0",
    "eslint-config-prettier": "^8.8.0",
    "eslint-config-prettier": "^9.0.0",
    "eslint-import-resolver-typescript": "^3.5.5",
    "eslint-plugin-formatjs": "^4.10.1",
    "eslint-plugin-import": "~2.27.5",
    "eslint-plugin-import": "~2.28.0",
    "eslint-plugin-jsdoc": "^46.1.0",
    "eslint-plugin-jsx-a11y": "~6.7.1",
    "eslint-plugin-prettier": "^5.0.0",
    "eslint-plugin-promise": "~6.1.1",
    "eslint-plugin-react": "~7.32.2",
    "eslint-plugin-react": "~7.33.0",
    "eslint-plugin-react-hooks": "^4.6.0",
    "husky": "^8.0.3",
    "jest": "^29.5.0",

M public/robots.txt => public/robots.txt +3 -0
@@ 1,5 1,8 @@
# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file

User-agent: GPTBot
Disallow: /

User-agent: *
Disallow: /media_proxy/
Disallow: /interact/

R spec/fabricators/fabricators_spec.rb => spec/fabrication/fabricators_spec.rb +0 -0
M spec/features/admin/domain_blocks_spec.rb => spec/features/admin/domain_blocks_spec.rb +24 -0
@@ 57,6 57,30 @@ describe 'blocking domains through the moderation interface' do
    end
  end

  context 'when suspending a subdomain of an already-silenced domain' do
    it 'presents a confirmation screen before suspending the domain' do
      domain_block = Fabricate(:domain_block, domain: 'example.com', severity: 'silence')

      visit new_admin_domain_block_path

      fill_in 'domain_block_domain', with: 'subdomain.example.com'
      select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
      click_on I18n.t('admin.domain_blocks.new.create')

      # It presents a confirmation screen
      expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'subdomain.example.com'))

      # Confirming creates the block
      click_on I18n.t('admin.domain_blocks.confirm_suspension.confirm')

      expect(DomainBlock.where(domain: 'subdomain.example.com', severity: 'suspend')).to exist

      # And leaves the previous block alone
      expect(domain_block.reload.severity).to eq 'silence'
      expect(domain_block.reload.domain).to eq 'example.com'
    end
  end

  context 'when editing a domain block' do
    it 'presents a confirmation screen before suspending the domain' do
      domain_block = Fabricate(:domain_block, domain: 'example.com', severity: 'silence')

M spec/fixtures/files/attachment.gif => spec/fixtures/files/attachment.gif +0 -0
M spec/fixtures/files/attachment.webm => spec/fixtures/files/attachment.webm +0 -0
M spec/lib/admin/system_check/elasticsearch_check_spec.rb => spec/lib/admin/system_check/elasticsearch_check_spec.rb +9 -5
@@ 49,11 49,7 @@ describe Admin::SystemCheck::ElasticsearchCheck do
      end

      context 'when running version is missing' do
        before do
          client = instance_double(Elasticsearch::Transport::Client)
          allow(client).to receive(:info).and_raise(Elasticsearch::Transport::Transport::Error)
          allow(Chewy).to receive(:client).and_return(client)
        end
        before { stub_elasticsearch_error }

        it 'returns false' do
          expect(check.pass?).to be false


@@ 86,6 82,8 @@ describe Admin::SystemCheck::ElasticsearchCheck do
    end

    context 'when running version is missing' do
      before { stub_elasticsearch_error }

      it 'sends class name symbol to message instance' do
        allow(Admin::SystemCheck::Message).to receive(:new)
          .with(:elasticsearch_running_check)


@@ 97,4 95,10 @@ describe Admin::SystemCheck::ElasticsearchCheck do
      end
    end
  end

  def stub_elasticsearch_error
    client = instance_double(Elasticsearch::Transport::Client)
    allow(client).to receive(:info).and_raise(Elasticsearch::Transport::Transport::Error)
    allow(Chewy).to receive(:client).and_return(client)
  end
end

M spec/lib/link_details_extractor_spec.rb => spec/lib/link_details_extractor_spec.rb +219 -88
@@ 3,33 3,31 @@
require 'rails_helper'

RSpec.describe LinkDetailsExtractor do
  subject { described_class.new(original_url, html, html_charset) }
  subject { described_class.new(original_url, html, nil) }

  let(:original_url) { '' }
  let(:html) { '' }
  let(:html_charset) { nil }
  let(:original_url) { 'https://example.com/dog.html?tracking=123' }

  describe '#canonical_url' do
    let(:original_url) { 'https://foo.com/article?bar=baz123' }
    let(:html) { "<!doctype html><link rel='canonical' href='#{url}'>" }

    context 'when canonical URL points to another host' do
      let(:html) { '<!doctype html><link rel="canonical" href="https://bar.com/different-article" />' }
    context 'when canonical URL points to the same host' do
      let(:url) { 'https://example.com/dog.html' }

      it 'ignores the canonical URLs' do
        expect(subject.canonical_url).to eq original_url
        expect(subject.canonical_url).to eq 'https://example.com/dog.html'
      end
    end

    context 'when canonical URL points to the same host' do
      let(:html) { '<!doctype html><link rel="canonical" href="https://foo.com/article" />' }
    context 'when canonical URL points to another host' do
      let(:url) { 'https://different.example.net/dog.html' }

      it 'ignores the canonical URLs' do
        expect(subject.canonical_url).to eq 'https://foo.com/article'
        expect(subject.canonical_url).to eq original_url
      end
    end

    context 'when canonical URL is set to "null"' do
      let(:html) { '<!doctype html><link rel="canonical" href="null" />' }
      let(:url) { 'null' }

      it 'ignores the canonical URLs' do
        expect(subject.canonical_url).to eq original_url


@@ 37,124 35,257 @@ RSpec.describe LinkDetailsExtractor do
    end
  end

  context 'when structured data is present' do
    let(:original_url) { 'https://example.com/page.html' }
  context 'when only basic metadata is present' do
    let(:html) { <<~HTML }
      <!doctype html>
      <html lang="en">
      <head>
        <title>Man bites dog</title>
        <meta name="description" content="A dog&#39;s tale">
      </head>
      </html>
    HTML

    context 'when is wrapped in CDATA tags' do
      let(:html) { <<~HTML }
        <!doctype html>
        <html>
        <head>
          <script type="application/ld+json">
          //<![CDATA[
          {"@context":"http://schema.org","@type":"NewsArticle","mainEntityOfPage":"https://example.com/page.html","headline":"Foo","datePublished":"2022-01-31T19:53:00+00:00","url":"https://example.com/page.html","description":"Bar","author":{"@type":"Person","name":"Hoge"},"publisher":{"@type":"Organization","name":"Baz"}}
          //]]>
          </script>
        </head>
        </html>
      HTML
    describe '#title' do
      it 'returns the title from title tag' do
        expect(subject.title).to eq 'Man bites dog'
      end
    end

    describe '#description' do
      it 'returns the description from meta tag' do
        expect(subject.description).to eq "A dog's tale"
      end
    end

    describe '#language' do
      it 'returns the language from lang attribute' do
        expect(subject.language).to eq 'en'
      end
    end
  end

  context 'when structured data is present' do
    let(:ld_json) do
      {
        '@context' => 'https://schema.org',
        '@type' => 'NewsArticle',
        'headline' => 'Man bites dog',
        'description' => "A dog's tale",
        'datePublished' => '2022-01-31T19:53:00+00:00',
        'author' => {
          '@type' => 'Organization',
          'name' => 'Charlie Brown',
        },
        'publisher' => {
          '@type' => 'NewsMediaOrganization',
          'name' => 'Pet News',
          'url' => 'https://example.com',
        },
      }.to_json
    end

    shared_examples 'structured data' do
      describe '#title' do
        it 'returns the title from structured data' do
          expect(subject.title).to eq 'Foo'
          expect(subject.title).to eq 'Man bites dog'
        end
      end

      describe '#description' do
        it 'returns the description from structured data' do
          expect(subject.description).to eq 'Bar'
          expect(subject.description).to eq "A dog's tale"
        end
      end

      describe '#provider_name' do
        it 'returns the provider name from structured data' do
          expect(subject.provider_name).to eq 'Baz'
      describe '#published_at' do
        it 'returns the publicaton time from structured data' do
          expect(subject.published_at).to eq '2022-01-31T19:53:00+00:00'
        end
      end

      describe '#author_name' do
        it 'returns the author name from structured data' do
          expect(subject.author_name).to eq 'Hoge'
          expect(subject.author_name).to eq 'Charlie Brown'
        end
      end

      describe '#provider_name' do
        it 'returns the provider name from structured data' do
          expect(subject.provider_name).to eq 'Pet News'
        end
      end
    end

    context 'when is wrapped in CDATA tags' do
      let(:html) { <<~HTML }
        <!doctype html>
        <html>
          <head>
            <script type="application/ld+json">
              //<![CDATA[
              #{ld_json}
              //]]>
            </script>
          </head>
        </html>
      HTML

      include_examples 'structured data'
    end

    context 'with the first tag is invalid JSON' do
      let(:html) { <<~HTML }
        <!doctype html>
        <html>
        <body>
          <script type="application/ld+json">
            {
              "@context":"https://schema.org",
              "@type":"ItemList",
              "url":"https://example.com/page.html",
              "name":"Foo",
              "description":"Bar"
            },
            {
              "@context": "https://schema.org",
              "@type": "BreadcrumbList",
              "itemListElement":[
                {
                  "@type":"ListItem",
                  "position":1,
                  "item":{
                    "@id":"https://www.example.com",
                    "name":"Baz"
                  }
                }
              ]
            }
            invalid LD+JSON
          </script>
          <script type="application/ld+json">
            {
              "@context":"https://schema.org",
              "@type":"NewsArticle",
              "mainEntityOfPage": {
                "@type":"WebPage",
                "@id": "http://example.com/page.html"
              },
              "headline": "Foo",
              "description": "Bar",
              "datePublished": "2022-01-31T19:46:00+00:00",
              "author": {
                "@type": "Organization",
                "name": "Hoge"
            #{ld_json}
          </script>
        </body>
        </html>
      HTML

      include_examples 'structured data'
    end

    context 'with preceding block of unsupported LD+JSON' do
      let(:html) { <<~HTML }
        <!doctype html>
        <html>
        <body>
          <script type="application/ld+json">
            [
              {
                "@context": "https://schema.org",
                "@type": "ItemList",
                "url": "https://example.com/cat.html",
                "name": "Man bites cat",
                "description": "A cat's tale"
              },
              "publisher": {
                "@type": "NewsMediaOrganization",
                "name":"Baz",
                "url":"https://example.com/"
              {
                "@context": "https://schema.org",
                "@type": "BreadcrumbList",
                "itemListElement":[
                  {
                    "@type": "ListItem",
                    "position": 1,
                    "item": {
                      "@id": "https://www.example.com",
                      "name": "Cat News"
                    }
                  }
                ]
              }
            }
            ]
          </script>
          <script type="application/ld+json">
            #{ld_json}
          </script>
        </body>
        </html>
      HTML

      describe '#title' do
        it 'returns the title from structured data' do
          expect(subject.title).to eq 'Foo'
        end
      include_examples 'structured data'
    end

    context 'with unsupported in same block LD+JSON' do
      let(:html) { <<~HTML }
        <!doctype html>
        <html>
        <body>
          <script type="application/ld+json">
            [
              {
                "@context": "https://schema.org",
                "@type": "ItemList",
                "url": "https://example.com/cat.html",
                "name": "Man bites cat",
                "description": "A cat's tale"
              },
              #{ld_json}
            ]
          </script>
        </body>
        </html>
      HTML

      include_examples 'structured data'
    end
  end

  context 'when Open Graph protocol data is present' do
    let(:html) { <<~HTML }
      <!doctype html>
      <html>
      <head>
        <meta property="og:url" content="https://example.com/dog.html">
        <meta property="og:title" content="Man bites dog">
        <meta property="og:description" content="A dog's tale">
        <meta property="article:published_time" content="2022-01-31T19:53:00+00:00">
        <meta property="og:author" content="Charlie Brown">
        <meta property="og:locale" content="en">
        <meta property="og:image" content="https://example.com/snoopy.jpg">
        <meta property="og:image:alt" content="A good boy">
        <meta property="og:site_name" content="Pet News">
      </head>
      </html>
    HTML

    describe '#canonical_url' do
      it 'returns the URL from Open Graph protocol data' do
        expect(subject.canonical_url).to eq 'https://example.com/dog.html'
      end
    end

      describe '#description' do
        it 'returns the description from structured data' do
          expect(subject.description).to eq 'Bar'
        end
    describe '#title' do
      it 'returns the title from Open Graph protocol data' do
        expect(subject.title).to eq 'Man bites dog'
      end
    end

      describe '#provider_name' do
        it 'returns the provider name from structured data' do
          expect(subject.provider_name).to eq 'Baz'
        end
    describe '#description' do
      it 'returns the description from Open Graph protocol data' do
        expect(subject.description).to eq "A dog's tale"
      end
    end

      describe '#author_name' do
        it 'returns the author name from structured data' do
          expect(subject.author_name).to eq 'Hoge'
        end
    describe '#published_at' do
      it 'returns the publicaton time from Open Graph protocol data' do
        expect(subject.published_at).to eq '2022-01-31T19:53:00+00:00'
      end
    end

    describe '#author_name' do
      it 'returns the author name from Open Graph protocol data' do
        expect(subject.author_name).to eq 'Charlie Brown'
      end
    end

    describe '#language' do
      it 'returns the language from Open Graph protocol data' do
        expect(subject.language).to eq 'en'
      end
    end

    describe '#image' do
      it 'returns the image from Open Graph protocol data' do
        expect(subject.image).to eq 'https://example.com/snoopy.jpg'
      end
    end

    describe '#image:alt' do
      it 'returns the image description from Open Graph protocol data' do
        expect(subject.image_alt).to eq 'A good boy'
      end
    end

    describe '#provider_name' do
      it 'returns the provider name from Open Graph protocol data' do
        expect(subject.provider_name).to eq 'Pet News'
      end
    end
  end

M spec/models/media_attachment_spec.rb => spec/models/media_attachment_spec.rb +35 -61
@@ 6,7 6,7 @@ RSpec.describe MediaAttachment, paperclip_processing: true do
  describe 'local?' do
    subject { media_attachment.local? }

    let(:media_attachment) { Fabricate(:media_attachment, remote_url: remote_url) }
    let(:media_attachment) { described_class.new(remote_url: remote_url) }

    context 'when remote_url is blank' do
      let(:remote_url) { '' }


@@ 28,7 28,7 @@ RSpec.describe MediaAttachment, paperclip_processing: true do
  describe 'needs_redownload?' do
    subject { media_attachment.needs_redownload? }

    let(:media_attachment) { Fabricate(:media_attachment, remote_url: remote_url, file: file) }
    let(:media_attachment) { described_class.new(remote_url: remote_url, file: file) }

    context 'when file is blank' do
      let(:file) { nil }


@@ 64,11 64,11 @@ RSpec.describe MediaAttachment, paperclip_processing: true do
  end

  describe '#to_param' do
    let(:media_attachment) { Fabricate(:media_attachment, shortcode: shortcode) }
    let(:shortcode)        { nil }
    let(:media_attachment) { Fabricate.build(:media_attachment, shortcode: shortcode, id: id) }

    context 'when media attachment has a shortcode' do
      let(:shortcode) { 'foo' }
      let(:id) { 123 }

      it 'returns shortcode' do
        expect(media_attachment.to_param).to eq shortcode


@@ 77,9 77,10 @@ RSpec.describe MediaAttachment, paperclip_processing: true do

    context 'when media attachment does not have a shortcode' do
      let(:shortcode) { nil }
      let(:id) { 123 }

      it 'returns string representation of id' do
        expect(media_attachment.to_param).to eq media_attachment.id.to_s
        expect(media_attachment.to_param).to eq id.to_s
      end
    end
  end


@@ 89,38 90,33 @@ RSpec.describe MediaAttachment, paperclip_processing: true do
      media.destroy
    end

    it 'saves media attachment' do
    it 'saves media attachment with correct file metadata' do
      expect(media.persisted?).to be true
      expect(media.file).to_not be_nil
    end

    it 'completes processing' do
      # completes processing
      expect(media.processing_complete?).to be true
    end

    it 'sets type' do
      # sets type
      expect(media.type).to eq 'image'
    end

    it 'sets content type' do
      # sets content type
      expect(media.file_content_type).to eq content_type
    end

    it 'sets file extension' do
      # sets file extension
      expect(media.file_file_name).to end_with extension
    end

    it 'strips original file name' do
    it 'saves media attachment with correct size metadata' do
      # strips original file name
      expect(media.file_file_name).to_not start_with '600x400'
    end

    it 'sets meta for original' do
      # sets meta for original
      expect(media.file.meta['original']['width']).to eq 600
      expect(media.file.meta['original']['height']).to eq 400
      expect(media.file.meta['original']['aspect']).to eq 1.5
    end

    it 'sets meta for thumbnail' do
      # sets meta for thumbnail
      expect(media.file.meta['small']['width']).to eq 588
      expect(media.file.meta['small']['height']).to eq 392
      expect(media.file.meta['small']['aspect']).to eq 1.5


@@ 128,54 124,48 @@ RSpec.describe MediaAttachment, paperclip_processing: true do
  end

  describe 'jpeg' do
    let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('600x400.jpeg')) }
    let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400.jpeg')) }

    it_behaves_like 'static 600x400 image', 'image/jpeg', '.jpeg'
  end

  describe 'png' do
    let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('600x400.png')) }
    let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400.png')) }

    it_behaves_like 'static 600x400 image', 'image/png', '.png'
  end

  describe 'webp' do
    let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('600x400.webp')) }
    let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400.webp')) }

    it_behaves_like 'static 600x400 image', 'image/webp', '.webp'
  end

  describe 'avif' do
    let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('600x400.avif')) }
    let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400.avif')) }

    it_behaves_like 'static 600x400 image', 'image/jpeg', '.jpeg'
  end

  describe 'heic' do
    let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('600x400.heic')) }
    let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400.heic')) }

    it_behaves_like 'static 600x400 image', 'image/jpeg', '.jpeg'
  end

  describe 'base64-encoded image' do
    let(:base64_attachment) { "data:image/jpeg;base64,#{Base64.encode64(attachment_fixture('600x400.jpeg').read)}" }
    let(:media) { described_class.create(account: Fabricate(:account), file: base64_attachment) }
    let(:media) { Fabricate(:media_attachment, file: base64_attachment) }

    it_behaves_like 'static 600x400 image', 'image/jpeg', '.jpeg'
  end

  describe 'animated gif' do
    let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('avatar.gif')) }
    let(:media) { Fabricate(:media_attachment, file: attachment_fixture('avatar.gif')) }

    it 'sets type to gifv' do
    it 'sets correct file metadata' do
      expect(media.type).to eq 'gifv'
    end

    it 'converts original file to mp4' do
      expect(media.file_content_type).to eq 'video/mp4'
    end

    it 'sets meta' do
      expect(media.file.meta['original']['width']).to eq 128
      expect(media.file.meta['original']['height']).to eq 128
    end


@@ 189,17 179,11 @@ RSpec.describe MediaAttachment, paperclip_processing: true do

    fixtures.each do |fixture|
      context fixture[:filename] do
        let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture(fixture[:filename])) }
        let(:media) { Fabricate(:media_attachment, file: attachment_fixture(fixture[:filename])) }

        it 'sets type to image' do
        it 'sets correct file metadata' do
          expect(media.type).to eq 'image'
        end

        it 'leaves original file as-is' do
          expect(media.file_content_type).to eq 'image/gif'
        end

        it 'sets meta' do
          expect(media.file.meta['original']['width']).to eq fixture[:width]
          expect(media.file.meta['original']['height']).to eq fixture[:height]
          expect(media.file.meta['original']['aspect']).to eq fixture[:aspect]


@@ 209,31 193,19 @@ RSpec.describe MediaAttachment, paperclip_processing: true do
  end

  describe 'ogg with cover art' do
    let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('boop.ogg')) }
    let(:media) { Fabricate(:media_attachment, file: attachment_fixture('boop.ogg')) }

    it 'detects it as an audio file' do
    it 'sets correct file metadata' 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 be 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 'mp3 with large cover art' do
    let(:media) { described_class.create(account: Fabricate(:account), file: attachment_fixture('boop.mp3')) }
    let(:media) { Fabricate(:media_attachment, file: attachment_fixture('boop.mp3')) }

    it 'detects it as an audio file' do
      expect(media.type).to eq 'audio'


@@ 253,34 225,36 @@ RSpec.describe MediaAttachment, paperclip_processing: true do
  end

  it 'is invalid without file' do
    media = described_class.new(account: Fabricate(:account))
    media = described_class.new

    expect(media.valid?).to be false
    expect(media).to model_have_error_on_field(:file)
  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 { described_class.create!(account: Fabricate(:account), file: attachment_fixture('attachment.webm')) }.to raise_error(ActiveRecord::RecordInvalid)
      expect { Fabricate(:media_attachment, 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 = described_class.create!(account: Fabricate(:account), file: attachment_fixture('attachment.webm'))
      media = Fabricate(:media_attachment, 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 { described_class.create!(account: Fabricate(:account), file: attachment_fixture('attachment.jpg')) }.to raise_error(ActiveRecord::RecordInvalid)
      expect { Fabricate(:media_attachment, 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 = described_class.create!(account: Fabricate(:account), file: attachment_fixture('attachment.jpg'))
      media = Fabricate(:media_attachment, file: attachment_fixture('attachment.jpg'))
      expect(media.valid?).to be true
    end
  end

M spec/services/bulk_import_row_service_spec.rb => spec/services/bulk_import_row_service_spec.rb +6 -0
@@ 161,6 161,12 @@ RSpec.describe BulkImportRowService do
        end

        include_examples 'common behavior'

        it 'does not create a new list' do
          account.follow!(target_account)

          expect { subject.call(import_row) }.to_not(change { List.where(title: 'my list').count })
        end
      end
    end
  end

M streaming/index.js => streaming/index.js +167 -63
@@ 10,6 10,7 @@ const { JSDOM } = require('jsdom');
const log = require('npmlog');
const pg = require('pg');
const dbUrlToConfig = require('pg-connection-string').parse;
const metrics = require('prom-client');
const redis = require('redis');
const uuid = require('uuid');
const WebSocket = require('ws');


@@ 183,6 184,73 @@ const startServer = async () => {
  const redisSubscribeClient = await redisUrlToClient(redisParams, redisUrl);
  const redisClient = await redisUrlToClient(redisParams, redisUrl);

  // Collect metrics from Node.js
  metrics.collectDefaultMetrics();

  new metrics.Gauge({
    name: 'pg_pool_total_connections',
    help: 'The total number of clients existing within the pool',
    collect() {
      this.set(pgPool.totalCount);
    },
  });

  new metrics.Gauge({
    name: 'pg_pool_idle_connections',
    help: 'The number of clients which are not checked out but are currently idle in the pool',
    collect() {
      this.set(pgPool.idleCount);
    },
  });

  new metrics.Gauge({
    name: 'pg_pool_waiting_queries',
    help: 'The number of queued requests waiting on a client when all clients are checked out',
    collect() {
      this.set(pgPool.waitingCount);
    },
  });

  const connectedClients = new metrics.Gauge({
    name: 'connected_clients',
    help: 'The number of clients connected to the streaming server',
    labelNames: ['type'],
  });

  connectedClients.set({ type: 'websocket' }, 0);
  connectedClients.set({ type: 'eventsource' }, 0);

  const connectedChannels = new metrics.Gauge({
    name: 'connected_channels',
    help: 'The number of channels the streaming server is streaming to',
    labelNames: [ 'type', 'channel' ]
  });

  const redisSubscriptions = new metrics.Gauge({
    name: 'redis_subscriptions',
    help: 'The number of Redis channels the streaming server is subscribed to',
  });

  // When checking metrics in the browser, the favicon is requested this
  // prevents the request from falling through to the API Router, which would
  // error for this endpoint:
  app.get('/favicon.ico', (req, res) => res.status(404).end());

  app.get('/api/v1/streaming/health', (req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('OK');
  });

  app.get('/metrics', async (req, res) => {
    try {
      res.set('Content-Type', metrics.register.contentType);
      res.end(await metrics.register.metrics());
    } catch (ex) {
      log.error(ex);
      res.status(500).end();
    }
  });

  /**
   * @param {string[]} channels
   * @returns {function(): void}


@@ 240,6 308,7 @@ const startServer = async () => {
    if (subs[channel].length === 0) {
      log.verbose(`Subscribe ${channel}`);
      redisSubscribeClient.subscribe(channel, onRedisMessage);
      redisSubscriptions.inc();
    }

    subs[channel].push(callback);


@@ 261,6 330,7 @@ const startServer = async () => {
    if (subs[channel].length === 0) {
      log.verbose(`Unsubscribe ${channel}`);
      redisSubscribeClient.unsubscribe(channel);
      redisSubscriptions.dec();
      delete subs[channel];
    }
  };


@@ 434,7 504,7 @@ const startServer = async () => {

  /**
   * @param {any} req
   * @param {string} channelName
   * @param {string|undefined} channelName
   * @returns {Promise.<void>}
   */
  const checkScopes = (req, channelName) => new Promise((resolve, reject) => {


@@ 537,10 607,14 @@ const startServer = async () => {
    res.on('close', () => {
      unsubscribe(`${redisPrefix}${accessTokenChannelId}`, listener);
      unsubscribe(`${redisPrefix}${systemChannelId}`, listener);

      connectedChannels.labels({ type: 'eventsource', channel: 'system' }).dec(2);
    });

    subscribe(`${redisPrefix}${accessTokenChannelId}`, listener);
    subscribe(`${redisPrefix}${systemChannelId}`, listener);

    connectedChannels.labels({ type: 'eventsource', channel: 'system' }).inc(2);
  };

  /**


@@ 554,7 628,19 @@ const startServer = async () => {
      return;
    }

    accountFromRequest(req).then(() => checkScopes(req, channelNameFromPath(req))).then(() => {
    const channelName = channelNameFromPath(req);

    // If no channelName can be found for the request, then we should terminate
    // the connection, as there's nothing to stream back
    if (!channelName) {
      const err = new Error('Unknown channel requested');
      err.status = 400;

      next(err);
      return;
    }

    accountFromRequest(req).then(() => checkScopes(req, channelName)).then(() => {
      subscribeHttpToSystemChannel(req, res);
    }).then(() => {
      next();


@@ 856,6 942,15 @@ const startServer = async () => {
  const streamToHttp = (req, res) => {
    const accountId = req.accountId || req.remoteAddress;

    const channelName = channelNameFromPath(req);

    connectedClients.labels({ type: 'eventsource' }).inc();

    // In theory we'll always have a channel name, but channelNameFromPath can return undefined:
    if (typeof channelName === 'string') {
      connectedChannels.labels({ type: 'eventsource', channel: channelName }).inc();
    }

    res.setHeader('Content-Type', 'text/event-stream');
    res.setHeader('Cache-Control', 'no-store');
    res.setHeader('Transfer-Encoding', 'chunked');


@@ 866,6 961,14 @@ const startServer = async () => {

    req.on('close', () => {
      log.verbose(req.requestId, `Ending stream for ${accountId}`);
      // We decrement these counters here instead of in streamHttpEnd as in that
      // method we don't have knowledge of the channel names
      connectedClients.labels({ type: 'eventsource' }).dec();
      // In theory we'll always have a channel name, but channelNameFromPath can return undefined:
      if (typeof channelName === 'string') {
        connectedChannels.labels({ type: 'eventsource', channel: channelName }).dec();
      }

      clearInterval(heartbeat);
    });



@@ 920,40 1023,18 @@ const startServer = async () => {
    res.end(JSON.stringify({ error: 'Not found' }));
  };

  app.use(setRequestId);
  app.use(setRemoteAddress);
  app.use(allowCrossDomain);
  const api = express.Router();

  app.get('/api/v1/streaming/health', (req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('OK');
  });
  app.use(api);

  api.use(setRequestId);
  api.use(setRemoteAddress);
  api.use(allowCrossDomain);

  app.get('/metrics', (req, res) => server.getConnections((err, count) => {
    res.writeHeader(200, { 'Content-Type': 'application/openmetrics-text; version=1.0.0; charset=utf-8' });
    res.write('# TYPE connected_clients gauge\n');
    res.write('# HELP connected_clients The number of clients connected to the streaming server\n');
    res.write(`connected_clients ${count}.0\n`);
    res.write('# TYPE connected_channels gauge\n');
    res.write('# HELP connected_channels The number of Redis channels the streaming server is subscribed to\n');
    res.write(`connected_channels ${Object.keys(subs).length}.0\n`);
    res.write('# TYPE pg_pool_total_connections gauge\n');
    res.write('# HELP pg_pool_total_connections The total number of clients existing within the pool\n');
    res.write(`pg_pool_total_connections ${pgPool.totalCount}.0\n`);
    res.write('# TYPE pg_pool_idle_connections gauge\n');
    res.write('# HELP pg_pool_idle_connections The number of clients which are not checked out but are currently idle in the pool\n');
    res.write(`pg_pool_idle_connections ${pgPool.idleCount}.0\n`);
    res.write('# TYPE pg_pool_waiting_queries gauge\n');
    res.write('# HELP pg_pool_waiting_queries The number of queued requests waiting on a client when all clients are checked out\n');
    res.write(`pg_pool_waiting_queries ${pgPool.waitingCount}.0\n`);
    res.write('# EOF\n');
    res.end();
  }));

  app.use(authenticationMiddleware);
  app.use(errorMiddleware);

  app.get('/api/v1/streaming/*', (req, res) => {
  api.use(authenticationMiddleware);
  api.use(errorMiddleware);

  api.get('/api/v1/streaming/*', (req, res) => {
    channelNameToIds(req, channelNameFromPath(req), req.query).then(({ channelIds, options }) => {
      const onSend = streamToHttp(req, res);
      const onEnd = streamHttpEnd(req, subscriptionHeartbeat(channelIds));


@@ 1162,15 1243,16 @@ const startServer = async () => {
   * @typedef WebSocketSession
   * @property {any} socket
   * @property {any} request
   * @property {Object.<string, { listener: SubscriptionListener, stopHeartbeat: function(): void }>} subscriptions
   * @property {Object.<string, { channelName: string, listener: SubscriptionListener, stopHeartbeat: function(): void }>} subscriptions
   */

  /**
   * @param {WebSocketSession} session
   * @param {string} channelName
   * @param {StreamParams} params
   * @returns {void}
   */
  const subscribeWebsocketToChannel = ({ socket, request, subscriptions }, channelName, params) =>
  const subscribeWebsocketToChannel = ({ socket, request, subscriptions }, channelName, params) => {
    checkScopes(request, channelName).then(() => channelNameToIds(request, channelName, params)).then(({
      channelIds,
      options,


@@ 1183,7 1265,10 @@ const startServer = async () => {
      const stopHeartbeat = subscriptionHeartbeat(channelIds);
      const listener = streamFrom(channelIds, request, onSend, undefined, options.needsFiltering, options.allowLocalOnly);

      connectedChannels.labels({ type: 'websocket', channel: channelName }).inc();

      subscriptions[channelIds.join(';')] = {
        channelName,
        listener,
        stopHeartbeat,
      };


@@ 1191,35 1276,47 @@ const startServer = async () => {
      log.verbose(request.requestId, 'Subscription error:', err.toString());
      socket.send(JSON.stringify({ error: err.toString() }));
    });
  }


  const removeSubscription = (subscriptions, channelIds, request) => {
    log.verbose(request.requestId, `Ending stream from ${channelIds.join(', ')} for ${request.accountId}`);

    const subscription = subscriptions[channelIds.join(';')];

    if (!subscription) {
      return;
    }

    channelIds.forEach(channelId => {
      unsubscribe(`${redisPrefix}${channelId}`, subscription.listener);
    });

    connectedChannels.labels({ type: 'websocket', channel: subscription.channelName }).dec();
    subscription.stopHeartbeat();

    delete subscriptions[channelIds.join(';')];
  }

  /**
   * @param {WebSocketSession} session
   * @param {string} channelName
   * @param {StreamParams} params
   * @returns {void}
   */
  const unsubscribeWebsocketFromChannel = ({ socket, request, subscriptions }, channelName, params) =>
  const unsubscribeWebsocketFromChannel = ({ socket, request, subscriptions }, channelName, params) => {
    channelNameToIds(request, channelName, params).then(({ channelIds }) => {
      log.verbose(request.requestId, `Ending stream from ${channelIds.join(', ')} for ${request.accountId}`);

      const subscription = subscriptions[channelIds.join(';')];
      removeSubscription(subscriptions, channelIds, request);
    }).catch(err => {
      log.verbose(request.requestId, 'Unsubscribe error:', err);

      if (!subscription) {
        return;
      // If we have a socket that is alive and open still, send the error back to the client:
      // FIXME: In other parts of the code ws === socket
      if (socket.isAlive && socket.readyState === socket.OPEN) {
        socket.send(JSON.stringify({ error: "Error unsubscribing from channel" }));
      }

      const { listener, stopHeartbeat } = subscription;

      channelIds.forEach(channelId => {
        unsubscribe(`${redisPrefix}${channelId}`, listener);
      });

      stopHeartbeat();

      delete subscriptions[channelIds.join(';')];
    }).catch(err => {
      log.verbose(request.requestId, 'Unsubscription error:', err);
      socket.send(JSON.stringify({ error: err.toString() }));
    });
  }

  /**
   * @param {WebSocketSession} session


@@ 1240,16 1337,20 @@ const startServer = async () => {
    subscribe(`${redisPrefix}${systemChannelId}`, listener);

    subscriptions[accessTokenChannelId] = {
      channelName: 'system',
      listener,
      stopHeartbeat: () => {
      },
    };

    subscriptions[systemChannelId] = {
      channelName: 'system',
      listener,
      stopHeartbeat: () => {
      },
    };

    connectedChannels.labels({ type: 'websocket', channel: 'system' }).inc(2);
  };

  /**


@@ 1276,6 1377,8 @@ const startServer = async () => {
      ws.isAlive = true;
    });

    connectedClients.labels({ type: 'websocket' }).inc();

    /**
     * @type {WebSocketSession}
     */


@@ 1286,17 1389,18 @@ const startServer = async () => {
    };

    const onEnd = () => {
      const keys = Object.keys(session.subscriptions);
      const subscriptions = Object.keys(session.subscriptions);

      keys.forEach(channelIds => {
        const { listener, stopHeartbeat } = session.subscriptions[channelIds];
      subscriptions.forEach(channelIds => {
        removeSubscription(session.subscriptions, channelIds.split(';'), req)
      });

        channelIds.split(';').forEach(channelId => {
          unsubscribe(`${redisPrefix}${channelId}`, listener);
        });
      // ensure garbage collection:
      session.socket = null;
      session.request = null;
      session.subscriptions = {};

        stopHeartbeat();
      });
      connectedClients.labels({ type: 'websocket' }).dec();
    };

    ws.on('close', onEnd);

M yarn.lock => yarn.lock +902 -883
@@ 2,10 2,15 @@
# yarn lockfile v1


"@aashutoshrathi/word-wrap@^1.2.3":
  version "1.2.6"
  resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
  integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==

"@adobe/css-tools@^4.0.1":
  version "4.2.0"
  resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.2.0.tgz#e1a84fca468f4b337816fcb7f0964beb620ba855"
  integrity sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==
  version "4.3.0"
  resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.0.tgz#1991d273fb29edbd2f63060f5bdaf0af26aa64e3"
  integrity sha512-+RNNcQvw2V1bmnBTPAtOLfW/9mhH2vC67+rUSi5T8EtEWt6lEnGNY2GuhZ1/YwbgikT1TkhvidCDmN5Q5YCo/w==

"@ampproject/remapping@^2.2.0":
  version "2.2.1"


@@ 24,7 29,15 @@
    jsonpointer "^5.0.0"
    leven "^3.1.0"

"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.5":
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5":
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3"
  integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==
  dependencies:
    "@babel/highlight" "^7.22.10"
    chalk "^2.4.2"

"@babel/code-frame@^7.10.4":
  version "7.22.5"
  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658"
  integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==


@@ 37,52 50,32 @@
  integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==

"@babel/core@^7.10.4", "@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.22.1":
  version "7.22.9"
  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.9.tgz#bd96492c68822198f33e8a256061da3cf391f58f"
  integrity sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.10.tgz#aad442c7bcd1582252cb4576747ace35bc122f35"
  integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==
  dependencies:
    "@ampproject/remapping" "^2.2.0"
    "@babel/code-frame" "^7.22.5"
    "@babel/generator" "^7.22.9"
    "@babel/helper-compilation-targets" "^7.22.9"
    "@babel/code-frame" "^7.22.10"
    "@babel/generator" "^7.22.10"
    "@babel/helper-compilation-targets" "^7.22.10"
    "@babel/helper-module-transforms" "^7.22.9"
    "@babel/helpers" "^7.22.6"
    "@babel/parser" "^7.22.7"
    "@babel/helpers" "^7.22.10"
    "@babel/parser" "^7.22.10"
    "@babel/template" "^7.22.5"
    "@babel/traverse" "^7.22.8"
    "@babel/types" "^7.22.5"
    "@babel/traverse" "^7.22.10"
    "@babel/types" "^7.22.10"
    convert-source-map "^1.7.0"
    debug "^4.1.0"
    gensync "^1.0.0-beta.2"
    json5 "^2.2.2"
    semver "^6.3.1"

"@babel/generator@^7.22.5":
  version "7.22.7"
  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.7.tgz#a6b8152d5a621893f2c9dacf9a4e286d520633d5"
  integrity sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ==
"@babel/generator@^7.22.10", "@babel/generator@^7.22.5", "@babel/generator@^7.7.2":
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.10.tgz#c92254361f398e160645ac58831069707382b722"
  integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==
  dependencies:
    "@babel/types" "^7.22.5"
    "@jridgewell/gen-mapping" "^0.3.2"
    "@jridgewell/trace-mapping" "^0.3.17"
    jsesc "^2.5.1"

"@babel/generator@^7.22.7", "@babel/generator@^7.22.9":
  version "7.22.9"
  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d"
  integrity sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==
  dependencies:
    "@babel/types" "^7.22.5"
    "@jridgewell/gen-mapping" "^0.3.2"
    "@jridgewell/trace-mapping" "^0.3.17"
    jsesc "^2.5.1"

"@babel/generator@^7.7.2":
  version "7.22.5"
  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7"
  integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==
  dependencies:
    "@babel/types" "^7.22.5"
    "@babel/types" "^7.22.10"
    "@jridgewell/gen-mapping" "^0.3.2"
    "@jridgewell/trace-mapping" "^0.3.17"
    jsesc "^2.5.1"


@@ 95,11 88,11 @@
    "@babel/types" "^7.22.5"

"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5":
  version "7.22.5"
  resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz#a3f4758efdd0190d8927fcffd261755937c71878"
  integrity sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz#573e735937e99ea75ea30788b57eb52fab7468c9"
  integrity sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==
  dependencies:
    "@babel/types" "^7.22.5"
    "@babel/types" "^7.22.10"

"@babel/helper-builder-react-jsx@^7.22.5":
  version "7.22.5"


@@ 109,10 102,10 @@
    "@babel/helper-annotate-as-pure" "^7.22.5"
    "@babel/types" "^7.22.5"

"@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.22.9":
  version "7.22.9"
  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz#f9d0a7aaaa7cd32a3f31c9316a69f5a9bcacb892"
  integrity sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==
"@babel/helper-compilation-targets@^7.22.10", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6":
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz#01d648bbc25dd88f513d862ee0df27b7d4e67024"
  integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==
  dependencies:
    "@babel/compat-data" "^7.22.9"
    "@babel/helper-validator-option" "^7.22.5"


@@ 121,9 114,9 @@
    semver "^6.3.1"

"@babel/helper-create-class-features-plugin@^7.22.5":
  version "7.22.9"
  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz#c36ea240bb3348f942f08b0fbe28d6d979fab236"
  integrity sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz#dd2612d59eac45588021ac3d6fa976d08f4e95a3"
  integrity sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==
  dependencies:
    "@babel/helper-annotate-as-pure" "^7.22.5"
    "@babel/helper-environment-visitor" "^7.22.5"


@@ 144,10 137,10 @@
    regexpu-core "^5.3.1"
    semver "^6.3.1"

"@babel/helper-define-polyfill-provider@^0.4.1":
  version "0.4.1"
  resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz#af1429c4a83ac316a6a8c2cc8ff45cb5d2998d3a"
  integrity sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A==
"@babel/helper-define-polyfill-provider@^0.4.2":
  version "0.4.2"
  resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7"
  integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==
  dependencies:
    "@babel/helper-compilation-targets" "^7.22.6"
    "@babel/helper-plugin-utils" "^7.22.5"


@@ 212,7 205,7 @@
  resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295"
  integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==

"@babel/helper-remap-async-to-generator@^7.22.5":
"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9":
  version "7.22.9"
  resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82"
  integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==


@@ 267,41 260,36 @@
  integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==

"@babel/helper-wrap-function@^7.22.9":
  version "7.22.9"
  resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz#189937248c45b0182c1dcf32f3444ca153944cb9"
  integrity sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz#d845e043880ed0b8c18bd194a12005cb16d2f614"
  integrity sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==
  dependencies:
    "@babel/helper-function-name" "^7.22.5"
    "@babel/template" "^7.22.5"
    "@babel/types" "^7.22.5"
    "@babel/types" "^7.22.10"

"@babel/helpers@^7.22.6":
  version "7.22.6"
  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.6.tgz#8e61d3395a4f0c5a8060f309fb008200969b5ecd"
  integrity sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==
"@babel/helpers@^7.22.10":
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.10.tgz#ae6005c539dfbcb5cd71fb51bfc8a52ba63bc37a"
  integrity sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==
  dependencies:
    "@babel/template" "^7.22.5"
    "@babel/traverse" "^7.22.6"
    "@babel/types" "^7.22.5"
    "@babel/traverse" "^7.22.10"
    "@babel/types" "^7.22.10"

"@babel/highlight@^7.22.5":
  version "7.22.5"
  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031"
  integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==
"@babel/highlight@^7.22.10", "@babel/highlight@^7.22.5":
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7"
  integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==
  dependencies:
    "@babel/helper-validator-identifier" "^7.22.5"
    chalk "^2.0.0"
    chalk "^2.4.2"
    js-tokens "^4.0.0"

"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7":
  version "7.22.5"
  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea"
  integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==

"@babel/parser@^7.22.5", "@babel/parser@^7.22.7":
  version "7.22.7"
  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae"
  integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==
"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.10", "@babel/parser@^7.22.5":
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55"
  integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==

"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5":
  version "7.22.5"


@@ 324,14 312,6 @@
  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703"
  integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==

"@babel/plugin-proposal-unicode-property-regex@^7.4.4":
  version "7.18.6"
  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e"
  integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==
  dependencies:
    "@babel/helper-create-regexp-features-plugin" "^7.18.6"
    "@babel/helper-plugin-utils" "^7.18.6"

"@babel/plugin-syntax-async-generators@^7.8.4":
  version "7.8.4"
  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"


@@ 487,14 467,14 @@
  dependencies:
    "@babel/helper-plugin-utils" "^7.22.5"

"@babel/plugin-transform-async-generator-functions@^7.22.7":
  version "7.22.7"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz#053e76c0a903b72b573cb1ab7d6882174d460a1b"
  integrity sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==
"@babel/plugin-transform-async-generator-functions@^7.22.10":
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz#45946cd17f915b10e65c29b8ed18a0a50fc648c8"
  integrity sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==
  dependencies:
    "@babel/helper-environment-visitor" "^7.22.5"
    "@babel/helper-plugin-utils" "^7.22.5"
    "@babel/helper-remap-async-to-generator" "^7.22.5"
    "@babel/helper-remap-async-to-generator" "^7.22.9"
    "@babel/plugin-syntax-async-generators" "^7.8.4"

"@babel/plugin-transform-async-to-generator@^7.22.5":


@@ 513,10 493,10 @@
  dependencies:
    "@babel/helper-plugin-utils" "^7.22.5"

"@babel/plugin-transform-block-scoping@^7.22.5":
  version "7.22.5"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz#8bfc793b3a4b2742c0983fadc1480d843ecea31b"
  integrity sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==
"@babel/plugin-transform-block-scoping@^7.22.10":
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz#88a1dccc3383899eb5e660534a76a22ecee64faa"
  integrity sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==
  dependencies:
    "@babel/helper-plugin-utils" "^7.22.5"



@@ 560,14 540,14 @@
    "@babel/helper-plugin-utils" "^7.22.5"
    "@babel/template" "^7.22.5"

"@babel/plugin-transform-destructuring@^7.22.5":
  version "7.22.5"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz#d3aca7438f6c26c78cdd0b0ba920a336001b27cc"
  integrity sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==
"@babel/plugin-transform-destructuring@^7.22.10":
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz#38e2273814a58c810b6c34ea293be4973c4eb5e2"
  integrity sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==
  dependencies:
    "@babel/helper-plugin-utils" "^7.22.5"

"@babel/plugin-transform-dotall-regex@^7.22.5", "@babel/plugin-transform-dotall-regex@^7.4.4":
"@babel/plugin-transform-dotall-regex@^7.22.5":
  version "7.22.5"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165"
  integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==


@@ 745,10 725,10 @@
    "@babel/helper-plugin-utils" "^7.22.5"
    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"

"@babel/plugin-transform-optional-chaining@^7.22.5", "@babel/plugin-transform-optional-chaining@^7.22.6":
  version "7.22.6"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz#4bacfe37001fe1901117672875e931d439811564"
  integrity sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==
"@babel/plugin-transform-optional-chaining@^7.22.10", "@babel/plugin-transform-optional-chaining@^7.22.5":
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz#076d28a7e074392e840d4ae587d83445bac0372a"
  integrity sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==
  dependencies:
    "@babel/helper-plugin-utils" "^7.22.5"
    "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"


@@ 834,13 814,13 @@
    "@babel/helper-annotate-as-pure" "^7.22.5"
    "@babel/helper-plugin-utils" "^7.22.5"

"@babel/plugin-transform-regenerator@^7.22.5":
  version "7.22.5"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz#cd8a68b228a5f75fa01420e8cc2fc400f0fc32aa"
  integrity sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==
"@babel/plugin-transform-regenerator@^7.22.10":
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca"
  integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==
  dependencies:
    "@babel/helper-plugin-utils" "^7.22.5"
    regenerator-transform "^0.15.1"
    regenerator-transform "^0.15.2"

"@babel/plugin-transform-reserved-words@^7.22.5":
  version "7.22.5"


@@ 850,15 830,15 @@
    "@babel/helper-plugin-utils" "^7.22.5"

"@babel/plugin-transform-runtime@^7.22.4":
  version "7.22.9"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.9.tgz#a87b11e170cbbfb018e6a2bf91f5c6e533b9e027"
  integrity sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ==
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz#89eda6daf1d3af6f36fb368766553054c8d7cd46"
  integrity sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA==
  dependencies:
    "@babel/helper-module-imports" "^7.22.5"
    "@babel/helper-plugin-utils" "^7.22.5"
    babel-plugin-polyfill-corejs2 "^0.4.4"
    babel-plugin-polyfill-corejs3 "^0.8.2"
    babel-plugin-polyfill-regenerator "^0.5.1"
    babel-plugin-polyfill-corejs2 "^0.4.5"
    babel-plugin-polyfill-corejs3 "^0.8.3"
    babel-plugin-polyfill-regenerator "^0.5.2"
    semver "^6.3.1"

"@babel/plugin-transform-shorthand-properties@^7.22.5":


@@ 907,10 887,10 @@
    "@babel/helper-plugin-utils" "^7.22.5"
    "@babel/plugin-syntax-typescript" "^7.22.5"

"@babel/plugin-transform-unicode-escapes@^7.22.5":
  version "7.22.5"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz#ce0c248522b1cb22c7c992d88301a5ead70e806c"
  integrity sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==
"@babel/plugin-transform-unicode-escapes@^7.22.10":
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9"
  integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==
  dependencies:
    "@babel/helper-plugin-utils" "^7.22.5"



@@ 939,12 919,12 @@
    "@babel/helper-plugin-utils" "^7.22.5"

"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.22.4":
  version "7.22.9"
  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.9.tgz#57f17108eb5dfd4c5c25a44c1977eba1df310ac7"
  integrity sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.10.tgz#3263b9fe2c8823d191d28e61eac60a79f9ce8a0f"
  integrity sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==
  dependencies:
    "@babel/compat-data" "^7.22.9"
    "@babel/helper-compilation-targets" "^7.22.9"
    "@babel/helper-compilation-targets" "^7.22.10"
    "@babel/helper-plugin-utils" "^7.22.5"
    "@babel/helper-validator-option" "^7.22.5"
    "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5"


@@ 969,15 949,15 @@
    "@babel/plugin-syntax-top-level-await" "^7.14.5"
    "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
    "@babel/plugin-transform-arrow-functions" "^7.22.5"
    "@babel/plugin-transform-async-generator-functions" "^7.22.7"
    "@babel/plugin-transform-async-generator-functions" "^7.22.10"
    "@babel/plugin-transform-async-to-generator" "^7.22.5"
    "@babel/plugin-transform-block-scoped-functions" "^7.22.5"
    "@babel/plugin-transform-block-scoping" "^7.22.5"
    "@babel/plugin-transform-block-scoping" "^7.22.10"
    "@babel/plugin-transform-class-properties" "^7.22.5"
    "@babel/plugin-transform-class-static-block" "^7.22.5"
    "@babel/plugin-transform-classes" "^7.22.6"
    "@babel/plugin-transform-computed-properties" "^7.22.5"
    "@babel/plugin-transform-destructuring" "^7.22.5"
    "@babel/plugin-transform-destructuring" "^7.22.10"
    "@babel/plugin-transform-dotall-regex" "^7.22.5"
    "@babel/plugin-transform-duplicate-keys" "^7.22.5"
    "@babel/plugin-transform-dynamic-import" "^7.22.5"


@@ 1000,38 980,36 @@
    "@babel/plugin-transform-object-rest-spread" "^7.22.5"
    "@babel/plugin-transform-object-super" "^7.22.5"
    "@babel/plugin-transform-optional-catch-binding" "^7.22.5"
    "@babel/plugin-transform-optional-chaining" "^7.22.6"
    "@babel/plugin-transform-optional-chaining" "^7.22.10"
    "@babel/plugin-transform-parameters" "^7.22.5"
    "@babel/plugin-transform-private-methods" "^7.22.5"
    "@babel/plugin-transform-private-property-in-object" "^7.22.5"
    "@babel/plugin-transform-property-literals" "^7.22.5"
    "@babel/plugin-transform-regenerator" "^7.22.5"
    "@babel/plugin-transform-regenerator" "^7.22.10"
    "@babel/plugin-transform-reserved-words" "^7.22.5"
    "@babel/plugin-transform-shorthand-properties" "^7.22.5"
    "@babel/plugin-transform-spread" "^7.22.5"
    "@babel/plugin-transform-sticky-regex" "^7.22.5"
    "@babel/plugin-transform-template-literals" "^7.22.5"
    "@babel/plugin-transform-typeof-symbol" "^7.22.5"
    "@babel/plugin-transform-unicode-escapes" "^7.22.5"
    "@babel/plugin-transform-unicode-escapes" "^7.22.10"
    "@babel/plugin-transform-unicode-property-regex" "^7.22.5"
    "@babel/plugin-transform-unicode-regex" "^7.22.5"
    "@babel/plugin-transform-unicode-sets-regex" "^7.22.5"
    "@babel/preset-modules" "^0.1.5"
    "@babel/types" "^7.22.5"
    babel-plugin-polyfill-corejs2 "^0.4.4"
    babel-plugin-polyfill-corejs3 "^0.8.2"
    babel-plugin-polyfill-regenerator "^0.5.1"
    "@babel/preset-modules" "0.1.6-no-external-plugins"
    "@babel/types" "^7.22.10"
    babel-plugin-polyfill-corejs2 "^0.4.5"
    babel-plugin-polyfill-corejs3 "^0.8.3"
    babel-plugin-polyfill-regenerator "^0.5.2"
    core-js-compat "^3.31.0"
    semver "^6.3.1"

"@babel/preset-modules@^0.1.5":
  version "0.1.5"
  resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9"
  integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==
"@babel/preset-modules@0.1.6-no-external-plugins":
  version "0.1.6-no-external-plugins"
  resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a"
  integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==
  dependencies:
    "@babel/helper-plugin-utils" "^7.0.0"
    "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
    "@babel/plugin-transform-dotall-regex" "^7.4.4"
    "@babel/types" "^7.4.4"
    esutils "^2.0.2"



@@ 1071,11 1049,11 @@
    regenerator-runtime "^0.12.0"

"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.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.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.22.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
  version "7.22.6"
  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438"
  integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682"
  integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==
  dependencies:
    regenerator-runtime "^0.13.11"
    regenerator-runtime "^0.14.0"

"@babel/template@^7.22.5", "@babel/template@^7.3.3":
  version "7.22.5"


@@ 1086,7 1064,7 @@
    "@babel/parser" "^7.22.5"
    "@babel/types" "^7.22.5"

"@babel/traverse@7", "@babel/traverse@^7.7.2":
"@babel/traverse@7":
  version "7.22.5"
  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1"
  integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==


@@ 1102,23 1080,32 @@
    debug "^4.1.0"
    globals "^11.1.0"

"@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8":
  version "7.22.8"
  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.8.tgz#4d4451d31bc34efeae01eac222b514a77aa4000e"
  integrity sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==
"@babel/traverse@^7.22.10":
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.10.tgz#20252acb240e746d27c2e82b4484f199cf8141aa"
  integrity sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==
  dependencies:
    "@babel/code-frame" "^7.22.5"
    "@babel/generator" "^7.22.7"
    "@babel/code-frame" "^7.22.10"
    "@babel/generator" "^7.22.10"
    "@babel/helper-environment-visitor" "^7.22.5"
    "@babel/helper-function-name" "^7.22.5"
    "@babel/helper-hoist-variables" "^7.22.5"
    "@babel/helper-split-export-declaration" "^7.22.6"
    "@babel/parser" "^7.22.7"
    "@babel/types" "^7.22.5"
    "@babel/parser" "^7.22.10"
    "@babel/types" "^7.22.10"
    debug "^4.1.0"
    globals "^11.1.0"

"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.12.11", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
  version "7.22.10"
  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03"
  integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==
  dependencies:
    "@babel/helper-string-parser" "^7.22.5"
    "@babel/helper-validator-identifier" "^7.22.5"
    to-fast-properties "^2.0.0"

"@babel/types@^7.0.0-beta.49", "@babel/types@^7.12.11", "@babel/types@^7.12.6":
  version "7.22.5"
  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe"
  integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==


@@ 1133,19 1120,19 @@
  integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==

"@csstools/css-parser-algorithms@^2.3.0":
  version "2.3.0"
  resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.0.tgz#0cc3a656dc2d638370ecf6f98358973bfbd00141"
  integrity sha512-dTKSIHHWc0zPvcS5cqGP+/TPFUJB0ekJ9dGKvMAFoNuBFhDPBt9OMGNZiIA5vTiNdGHHBeScYPXIGBMnVOahsA==
  version "2.3.1"
  resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz#ec4fc764ba45d2bb7ee2774667e056aa95003f3a"
  integrity sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==

"@csstools/css-tokenizer@^2.1.1":
  version "2.1.1"
  resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.1.1.tgz#07ae11a0a06365d7ec686549db7b729bc036528e"
  integrity sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA==
  version "2.2.0"
  resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz#9d70e6dcbe94e44c7400a2929928db35c4de32b5"
  integrity sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==

"@csstools/media-query-list-parser@^2.1.2":
  version "2.1.2"
  resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.2.tgz#6ef642b728d30c1009bfbba3211c7e4c11302728"
  integrity sha512-M8cFGGwl866o6++vIY7j1AKuq9v57cf+dGepScwCcbut9ypJNr4Cj+LLTWligYUZ0uyhEoJDKt5lvyBfh2L3ZQ==
  version "2.1.4"
  resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz#0017f99945f6c16dd81a7aacf6821770933c3a5c"
  integrity sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==

"@csstools/selector-specificity@^3.0.0":
  version "3.0.0"


@@ 1245,35 1232,35 @@
  resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6"
  integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==

"@es-joy/jsdoccomment@~0.39.4":
  version "0.39.4"
  resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.39.4.tgz#6b8a62e9b3077027837728818d3c4389a898b392"
  integrity sha512-Jvw915fjqQct445+yron7Dufix9A+m9j1fCJYlCo1FWlRvTxa3pjJelxdSTdaLWcTwRU6vbL+NYjO4YuNIS5Qg==
"@es-joy/jsdoccomment@~0.40.1":
  version "0.40.1"
  resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.40.1.tgz#13acd77fb372ed1c83b7355edd865a3b370c9ec4"
  integrity sha512-YORCdZSusAlBrFpZ77pJjc5r1bQs5caPWtAu+WWmiSo+8XaUzseapVrfAtiRFbQWnrBxxLLEwF6f6ZG/UgCQCg==
  dependencies:
    comment-parser "1.3.1"
    comment-parser "1.4.0"
    esquery "^1.5.0"
    jsdoc-type-pratt-parser "~4.0.0"

"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.3.0":
"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
  version "4.4.0"
  resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
  integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
  dependencies:
    eslint-visitor-keys "^3.3.0"

"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.0":
  version "4.5.1"
  resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884"
  integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==
"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1":
  version "4.6.2"
  resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8"
  integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==

"@eslint/eslintrc@^2.0.3":
  version "2.0.3"
  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331"
  integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==
"@eslint/eslintrc@^2.1.1":
  version "2.1.1"
  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.1.tgz#18d635e24ad35f7276e8a49d135c7d3ca6a46f93"
  integrity sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==
  dependencies:
    ajv "^6.12.4"
    debug "^4.3.2"
    espree "^9.5.2"
    espree "^9.6.0"
    globals "^13.19.0"
    ignore "^5.2.0"
    import-fresh "^3.2.1"


@@ 1281,10 1268,10 @@
    minimatch "^3.1.2"
    strip-json-comments "^3.1.1"

"@eslint/js@8.42.0":
  version "8.42.0"
  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.42.0.tgz#484a1d638de2911e6f5a30c12f49c7e4a3270fb6"
  integrity sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==
"@eslint/js@^8.46.0":
  version "8.46.0"
  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.46.0.tgz#3f7802972e8b6fe3f88ed1aabc74ec596c456db6"
  integrity sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==

"@floating-ui/core@^1.3.1":
  version "1.3.1"


@@ 1457,28 1444,28 @@
  resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
  integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==

"@jest/console@^29.5.0":
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.5.0.tgz#593a6c5c0d3f75689835f1b3b4688c4f8544cb57"
  integrity sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==
"@jest/console@^29.6.2":
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.6.2.tgz#bf1d4101347c23e07c029a1b1ae07d550f5cc541"
  integrity sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==
  dependencies:
    "@jest/types" "^29.5.0"
    "@jest/types" "^29.6.1"
    "@types/node" "*"
    chalk "^4.0.0"
    jest-message-util "^29.5.0"
    jest-util "^29.5.0"
    jest-message-util "^29.6.2"
    jest-util "^29.6.2"
    slash "^3.0.0"

"@jest/core@^29.5.0":
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.5.0.tgz#76674b96904484e8214614d17261cc491e5f1f03"
  integrity sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==
  dependencies:
    "@jest/console" "^29.5.0"
    "@jest/reporters" "^29.5.0"
    "@jest/test-result" "^29.5.0"
    "@jest/transform" "^29.5.0"
    "@jest/types" "^29.5.0"
"@jest/core@^29.6.2":
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.6.2.tgz#6f2d1dbe8aa0265fcd4fb8082ae1952f148209c8"
  integrity sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==
  dependencies:
    "@jest/console" "^29.6.2"
    "@jest/reporters" "^29.6.2"
    "@jest/test-result" "^29.6.2"
    "@jest/transform" "^29.6.2"
    "@jest/types" "^29.6.1"
    "@types/node" "*"
    ansi-escapes "^4.2.1"
    chalk "^4.0.0"


@@ 1486,81 1473,81 @@
    exit "^0.1.2"
    graceful-fs "^4.2.9"
    jest-changed-files "^29.5.0"
    jest-config "^29.5.0"
    jest-haste-map "^29.5.0"
    jest-message-util "^29.5.0"
    jest-config "^29.6.2"
    jest-haste-map "^29.6.2"
    jest-message-util "^29.6.2"
    jest-regex-util "^29.4.3"
    jest-resolve "^29.5.0"
    jest-resolve-dependencies "^29.5.0"
    jest-runner "^29.5.0"
    jest-runtime "^29.5.0"
    jest-snapshot "^29.5.0"
    jest-util "^29.5.0"
    jest-validate "^29.5.0"
    jest-watcher "^29.5.0"
    jest-resolve "^29.6.2"
    jest-resolve-dependencies "^29.6.2"
    jest-runner "^29.6.2"
    jest-runtime "^29.6.2"
    jest-snapshot "^29.6.2"
    jest-util "^29.6.2"
    jest-validate "^29.6.2"
    jest-watcher "^29.6.2"
    micromatch "^4.0.4"
    pretty-format "^29.5.0"
    pretty-format "^29.6.2"
    slash "^3.0.0"
    strip-ansi "^6.0.0"

"@jest/environment@^29.5.0":
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.5.0.tgz#9152d56317c1fdb1af389c46640ba74ef0bb4c65"
  integrity sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==
"@jest/environment@^29.6.2":
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.6.2.tgz#794c0f769d85e7553439d107d3f43186dc6874a9"
  integrity sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==
  dependencies:
    "@jest/fake-timers" "^29.5.0"
    "@jest/types" "^29.5.0"
    "@jest/fake-timers" "^29.6.2"
    "@jest/types" "^29.6.1"
    "@types/node" "*"
    jest-mock "^29.5.0"
    jest-mock "^29.6.2"

"@jest/expect-utils@^29.5.0":
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036"
  integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==
"@jest/expect-utils@^29.6.2":
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.6.2.tgz#1b97f290d0185d264dd9fdec7567a14a38a90534"
  integrity sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==
  dependencies:
    jest-get-type "^29.4.3"

"@jest/expect@^29.5.0":
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.5.0.tgz#80952f5316b23c483fbca4363ce822af79c38fba"
  integrity sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==
"@jest/expect@^29.6.2":
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.6.2.tgz#5a2ad58bb345165d9ce0a1845bbf873c480a4b28"
  integrity sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==
  dependencies:
    expect "^29.5.0"
    jest-snapshot "^29.5.0"
    expect "^29.6.2"
    jest-snapshot "^29.6.2"

"@jest/fake-timers@^29.5.0":
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.5.0.tgz#d4d09ec3286b3d90c60bdcd66ed28d35f1b4dc2c"
  integrity sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==
"@jest/fake-timers@^29.6.2":
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.6.2.tgz#fe9d43c5e4b1b901168fe6f46f861b3e652a2df4"
  integrity sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==
  dependencies:
    "@jest/types" "^29.5.0"
    "@jest/types" "^29.6.1"
    "@sinonjs/fake-timers" "^10.0.2"
    "@types/node" "*"
    jest-message-util "^29.5.0"
    jest-mock "^29.5.0"
    jest-util "^29.5.0"
    jest-message-util "^29.6.2"
    jest-mock "^29.6.2"
    jest-util "^29.6.2"

"@jest/globals@^29.5.0":
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.5.0.tgz#6166c0bfc374c58268677539d0c181f9c1833298"
  integrity sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==
"@jest/globals@^29.6.2":
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.6.2.tgz#74af81b9249122cc46f1eb25793617eec69bf21a"
  integrity sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==
  dependencies:
    "@jest/environment" "^29.5.0"
    "@jest/expect" "^29.5.0"
    "@jest/types" "^29.5.0"
    jest-mock "^29.5.0"
    "@jest/environment" "^29.6.2"
    "@jest/expect" "^29.6.2"
    "@jest/types" "^29.6.1"
    jest-mock "^29.6.2"

"@jest/reporters@^29.5.0":
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.5.0.tgz#985dfd91290cd78ddae4914ba7921bcbabe8ac9b"
  integrity sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==
"@jest/reporters@^29.6.2":
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.6.2.tgz#524afe1d76da33d31309c2c4a2c8062d0c48780a"
  integrity sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==
  dependencies:
    "@bcoe/v8-coverage" "^0.2.3"
    "@jest/console" "^29.5.0"
    "@jest/test-result" "^29.5.0"
    "@jest/transform" "^29.5.0"
    "@jest/types" "^29.5.0"
    "@jridgewell/trace-mapping" "^0.3.15"
    "@jest/console" "^29.6.2"
    "@jest/test-result" "^29.6.2"
    "@jest/transform" "^29.6.2"
    "@jest/types" "^29.6.1"
    "@jridgewell/trace-mapping" "^0.3.18"
    "@types/node" "*"
    chalk "^4.0.0"
    collect-v8-coverage "^1.0.0"


@@ 1572,77 1559,77 @@
    istanbul-lib-report "^3.0.0"
    istanbul-lib-source-maps "^4.0.0"
    istanbul-reports "^3.1.3"
    jest-message-util "^29.5.0"
    jest-util "^29.5.0"
    jest-worker "^29.5.0"
    jest-message-util "^29.6.2"
    jest-util "^29.6.2"
    jest-worker "^29.6.2"
    slash "^3.0.0"
    string-length "^4.0.1"
    strip-ansi "^6.0.0"
    v8-to-istanbul "^9.0.1"

"@jest/schemas@^29.4.3":
  version "29.4.3"
  resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788"
  integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==
"@jest/schemas@^29.6.0":
  version "29.6.0"
  resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.0.tgz#0f4cb2c8e3dca80c135507ba5635a4fd755b0040"
  integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==
  dependencies:
    "@sinclair/typebox" "^0.25.16"
    "@sinclair/typebox" "^0.27.8"

"@jest/source-map@^29.4.3":
  version "29.4.3"
  resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.4.3.tgz#ff8d05cbfff875d4a791ab679b4333df47951d20"
  integrity sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==
"@jest/source-map@^29.6.0":
  version "29.6.0"
  resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.0.tgz#bd34a05b5737cb1a99d43e1957020ac8e5b9ddb1"
  integrity sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==
  dependencies:
    "@jridgewell/trace-mapping" "^0.3.15"
    "@jridgewell/trace-mapping" "^0.3.18"
    callsites "^3.0.0"
    graceful-fs "^4.2.9"

"@jest/test-result@^29.5.0":
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.5.0.tgz#7c856a6ca84f45cc36926a4e9c6b57f1973f1408"
  integrity sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==
"@jest/test-result@^29.6.2":
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.6.2.tgz#fdd11583cd1608e4db3114e8f0cce277bf7a32ed"
  integrity sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==
  dependencies:
    "@jest/console" "^29.5.0"
    "@jest/types" "^29.5.0"
    "@jest/console" "^29.6.2"
    "@jest/types" "^29.6.1"
    "@types/istanbul-lib-coverage" "^2.0.0"
    collect-v8-coverage "^1.0.0"

"@jest/test-sequencer@^29.5.0":
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz#34d7d82d3081abd523dbddc038a3ddcb9f6d3cc4"
  integrity sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==
"@jest/test-sequencer@^29.6.2":
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz#585eff07a68dd75225a7eacf319780cb9f6b9bf4"
  integrity sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==
  dependencies:
    "@jest/test-result" "^29.5.0"
    "@jest/test-result" "^29.6.2"
    graceful-fs "^4.2.9"
    jest-haste-map "^29.5.0"
    jest-haste-map "^29.6.2"
    slash "^3.0.0"

"@jest/transform@^29.5.0":
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.5.0.tgz#cf9c872d0965f0cbd32f1458aa44a2b1988b00f9"
  integrity sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==
"@jest/transform@^29.6.2":
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.6.2.tgz#522901ebbb211af08835bc3bcdf765ab778094e3"
  integrity sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==
  dependencies:
    "@babel/core" "^7.11.6"
    "@jest/types" "^29.5.0"
    "@jridgewell/trace-mapping" "^0.3.15"
    "@jest/types" "^29.6.1"
    "@jridgewell/trace-mapping" "^0.3.18"
    babel-plugin-istanbul "^6.1.1"
    chalk "^4.0.0"
    convert-source-map "^2.0.0"
    fast-json-stable-stringify "^2.1.0"
    graceful-fs "^4.2.9"
    jest-haste-map "^29.5.0"
    jest-haste-map "^29.6.2"
    jest-regex-util "^29.4.3"
    jest-util "^29.5.0"
    jest-util "^29.6.2"
    micromatch "^4.0.4"
    pirates "^4.0.4"
    slash "^3.0.0"
    write-file-atomic "^4.0.2"

"@jest/types@^29.5.0":
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593"
  integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==
"@jest/types@^29.6.1":
  version "29.6.1"
  resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.1.tgz#ae79080278acff0a6af5eb49d063385aaa897bf2"
  integrity sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==
  dependencies:
    "@jest/schemas" "^29.4.3"
    "@jest/schemas" "^29.6.0"
    "@types/istanbul-lib-coverage" "^2.0.0"
    "@types/istanbul-reports" "^3.0.0"
    "@types/node" "*"


@@ 1658,10 1645,10 @@
    "@jridgewell/sourcemap-codec" "^1.4.10"
    "@jridgewell/trace-mapping" "^0.3.9"

"@jridgewell/resolve-uri@3.1.0":
  version "3.1.0"
  resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
  integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
"@jridgewell/resolve-uri@^3.1.0":
  version "3.1.1"
  resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
  integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==

"@jridgewell/set-array@^1.0.1":
  version "1.1.2"


@@ 1676,34 1663,24 @@
    "@jridgewell/gen-mapping" "^0.3.0"
    "@jridgewell/trace-mapping" "^0.3.9"

"@jridgewell/sourcemap-codec@1.4.14":
  version "1.4.14"
  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
  integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==

"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13":
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14":
  version "1.4.15"
  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
  integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==

"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
  version "0.3.18"
  resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
  integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9":
  version "0.3.19"
  resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811"
  integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==
  dependencies:
    "@jridgewell/resolve-uri" "3.1.0"
    "@jridgewell/sourcemap-codec" "1.4.14"
    "@jridgewell/resolve-uri" "^3.1.0"
    "@jridgewell/sourcemap-codec" "^1.4.14"

"@material-design-icons/svg@^0.14.10":
  version "0.14.10"
  resolved "https://registry.yarnpkg.com/@material-design-icons/svg/-/svg-0.14.10.tgz#25804b66d0740b0bf8d6841fa343dfdd60f22e82"
  integrity sha512-rXxfqj5Su8i51aG8s8QRIe7mX1gB+C/ZCroLu3JvIsO3+Vx6PcWP97HLwIl7AQH/jYIHQlKq0E6OMqU91u5fCg==

"@nicolo-ribaudo/semver-v6@^6.3.3":
  version "6.3.3"
  resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz#ea6d23ade78a325f7a52750aab1526b02b628c29"
  integrity sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==

"@nodelib/fs.scandir@2.1.5":
  version "2.1.5"
  resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"


@@ 1769,9 1746,9 @@
  integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==

"@rails/ujs@^7.0.6":
  version "7.0.6"
  resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-7.0.6.tgz#fd8937c92335f3da9495e07292511ad5f7547a6a"
  integrity sha512-s5v3AC6AywOIFMz0RIMW83Xc8FPIvKMkP3ZHFlM4ISNkhdUwP9HdhVtxxo6z3dIhe9vI0Our2A8kN/QpUV02Qg==
  version "7.0.7"
  resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-7.0.7.tgz#54af8d66160a8a7bf7d8f184703d2bf4b3fab914"
  integrity sha512-J2v5Ca7HgejO7diGKiDylaVDQKmbQ5FJih6Oo3hXuBKEuXlcaccJu64lj8MNVLaPVyZx0g4gaOQZQz95QEb/hg==

"@redis/bloom@1.2.0":
  version "1.2.0"


@@ 1861,10 1838,10 @@
    estree-walker "^1.0.1"
    picomatch "^2.2.2"

"@sinclair/typebox@^0.25.16":
  version "0.25.24"
  resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718"
  integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==
"@sinclair/typebox@^0.27.8":
  version "0.27.8"
  resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
  integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==

"@sinonjs/commons@^3.0.0":
  version "3.0.0"


@@ 1874,9 1851,9 @@
    type-detect "4.0.8"

"@sinonjs/fake-timers@^10.0.2":
  version "10.2.0"
  resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz#b3e322a34c5f26e3184e7f6115695f299c1b1194"
  integrity sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==
  version "10.3.0"
  resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66"
  integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==
  dependencies:
    "@sinonjs/commons" "^3.0.0"



@@ 2008,9 1985,9 @@
    pretty-format "^27.0.2"

"@testing-library/jest-dom@^5.16.5":
  version "5.16.5"
  resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e"
  integrity sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==
  version "5.17.0"
  resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz#5e97c8f9a15ccf4656da00fecab505728de81e0c"
  integrity sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==
  dependencies:
    "@adobe/css-tools" "^4.0.1"
    "@babel/runtime" "^7.9.2"


@@ 2211,9 2188,9 @@
    "@types/istanbul-lib-report" "*"

"@types/jest@*", "@types/jest@^29.5.2":
  version "29.5.2"
  resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.2.tgz#86b4afc86e3a8f3005b297ed8a72494f89e6395b"
  integrity sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg==
  version "29.5.3"
  resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.3.tgz#7a35dc0044ffb8b56325c6802a4781a626b05777"
  integrity sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==
  dependencies:
    expect "^29.0.0"
    pretty-format "^29.0.0"


@@ 2232,7 2209,7 @@
    "@types/tough-cookie" "*"
    parse5 "^7.0.0"

"@types/json-schema@*", "@types/json-schema@^7.0.11", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8":
"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8":
  version "7.0.12"
  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb"
  integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==


@@ 2248,9 2225,9 @@
  integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==

"@types/lodash@^4.14.195":
  version "4.14.195"
  resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.195.tgz#bafc975b252eb6cea78882ce8a7b6bf22a6de632"
  integrity sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==
  version "4.14.197"
  resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.197.tgz#e95c5ddcc814ec3e84c891910a01e0c8a378c54b"
  integrity sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==

"@types/mime@*":
  version "3.0.1"


@@ 2273,9 2250,9 @@
  integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==

"@types/node@*":
  version "20.3.1"
  resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe"
  integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==
  version "20.4.9"
  resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.9.tgz#c7164e0f8d3f12dfae336af0b1f7fdec8c6b204f"
  integrity sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ==

"@types/node@14 || 16 || 17":
  version "17.0.45"


@@ 2316,11 2293,6 @@
  resolved "https://registry.yarnpkg.com/@types/picomatch/-/picomatch-2.3.0.tgz#75db5e75a713c5a83d5b76780c3da84a82806003"
  integrity sha512-O397rnSS9iQI4OirieAtsDqvCj4+3eY1J+EPdNTKuHuRWIfUoGyzX294o8C4KJYaLqgSrd2o60c5EqCU8Zv02g==

"@types/prettier@^2.1.5":
  version "2.7.3"
  resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f"
  integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==

"@types/prop-types@*", "@types/prop-types@^15.7.5":
  version "15.7.5"
  resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"


@@ 2346,13 2318,20 @@
  resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
  integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==

"@types/react-dom@^18.0.0", "@types/react-dom@^18.2.4":
"@types/react-dom@^18.0.0":
  version "18.2.5"
  resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.5.tgz#5c5f13548bda23cd98f50ca4a59107238bfe18f3"
  integrity sha512-sRQsOS/sCLnpQhR4DSKGTtWFE3FZjpQa86KPVbhUqdYMRZ9FEFcfAytKhR/vUG2rH1oFbOOej6cuD7MFSobDRQ==
  dependencies:
    "@types/react" "*"

"@types/react-dom@^18.2.4":
  version "18.2.7"
  resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.7.tgz#67222a08c0a6ae0a0da33c3532348277c70abb63"
  integrity sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==
  dependencies:
    "@types/react" "*"

"@types/react-helmet@^6.1.6":
  version "6.1.6"
  resolved "https://registry.yarnpkg.com/@types/react-helmet/-/react-helmet-6.1.6.tgz#7d1afd8cbf099616894e8240e9ef70e3c6d7506d"


@@ 2448,7 2427,7 @@
  dependencies:
    "@types/react" "*"

"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@>=16.9.11", "@types/react@^18.0.26", "@types/react@^18.2.7":
"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@>=16.9.11", "@types/react@^18.0.26":
  version "18.2.12"
  resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.12.tgz#95d584338610b78bb9ba0415e3180fb03debdf97"
  integrity sha512-ndmBMLCgn38v3SntMeoJaIrO6tGHYKMEBohCUmw8HoLLQdRMOIGXfeYaBTLe2lsFaSB3MOK1VXscYFnmLtTSmw==


@@ 2457,6 2436,15 @@
    "@types/scheduler" "*"
    csstype "^3.0.2"

"@types/react@^18.2.7":
  version "18.2.20"
  resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.20.tgz#1605557a83df5c8a2cc4eeb743b3dfc0eb6aaeb2"
  integrity sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==
  dependencies:
    "@types/prop-types" "*"
    "@types/scheduler" "*"
    csstype "^3.0.2"

"@types/redux-immutable@^4.0.3":
  version "4.0.3"
  resolved "https://registry.yarnpkg.com/@types/redux-immutable/-/redux-immutable-4.0.3.tgz#db92a281aa9a55a7b63bc1f20a233790305a1f06"


@@ 2482,7 2470,7 @@
  resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5"
  integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==

"@types/semver@^7.3.12":
"@types/semver@^7.5.0":
  version "7.5.0"
  resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a"
  integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==


@@ 2519,9 2507,9 @@
  integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==

"@types/testing-library__jest-dom@^5.9.1":
  version "5.14.6"
  resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.6.tgz#4887f6e1af11215428ab02777873bcede98a53b0"
  integrity sha512-FkHXCb+ikSoUP4Y4rOslzTdX5sqYwMxfefKh1GmZ8ce1GOkEHntSp6b5cGadmNfp5e4BMEWOMx+WSKd5/MqlDA==
  version "5.14.9"
  resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz#0fb1e6a0278d87b6737db55af5967570b67cb466"
  integrity sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==
  dependencies:
    "@types/jest" "*"



@@ 2591,50 2579,49 @@
    "@types/yargs-parser" "*"

"@typescript-eslint/eslint-plugin@^6.0.0":
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.0.0.tgz#19ff4f1cab8d6f8c2c1825150f7a840bc5d9bdc4"
  integrity sha512-xuv6ghKGoiq856Bww/yVYnXGsKa588kY3M0XK7uUW/3fJNNULKRfZfSBkMTSpqGG/8ZCXCadfh8G/z/B4aqS/A==
  dependencies:
    "@eslint-community/regexpp" "^4.5.0"
    "@typescript-eslint/scope-manager" "6.0.0"
    "@typescript-eslint/type-utils" "6.0.0"
    "@typescript-eslint/utils" "6.0.0"
    "@typescript-eslint/visitor-keys" "6.0.0"
  version "6.3.0"
  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.3.0.tgz#e751e148aab7ccaf8a7bfd370f7ce9e6bdd1f3f4"
  integrity sha512-IZYjYZ0ifGSLZbwMqIip/nOamFiWJ9AH+T/GYNZBWkVcyNQOFGtSMoWV7RvY4poYCMZ/4lHzNl796WOSNxmk8A==
  dependencies:
    "@eslint-community/regexpp" "^4.5.1"
    "@typescript-eslint/scope-manager" "6.3.0"
    "@typescript-eslint/type-utils" "6.3.0"
    "@typescript-eslint/utils" "6.3.0"
    "@typescript-eslint/visitor-keys" "6.3.0"
    debug "^4.3.4"
    grapheme-splitter "^1.0.4"
    graphemer "^1.4.0"
    ignore "^5.2.4"
    natural-compare "^1.4.0"
    natural-compare-lite "^1.4.0"
    semver "^7.5.0"
    semver "^7.5.4"
    ts-api-utils "^1.0.1"

"@typescript-eslint/parser@^6.0.0":
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.0.0.tgz#46b2600fd1f67e62fc00a28093a75f41bf7effc4"
  integrity sha512-TNaufYSPrr1U8n+3xN+Yp9g31vQDJqhXzzPSHfQDLcaO4tU+mCfODPxCwf4H530zo7aUBE3QIdxCXamEnG04Tg==
  version "6.3.0"
  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.3.0.tgz#359684c443f4f848db3c4f14674f544f169c8f46"
  integrity sha512-ibP+y2Gr6p0qsUkhs7InMdXrwldjxZw66wpcQq9/PzAroM45wdwyu81T+7RibNCh8oc0AgrsyCwJByncY0Ongg==
  dependencies:
    "@typescript-eslint/scope-manager" "6.0.0"
    "@typescript-eslint/types" "6.0.0"
    "@typescript-eslint/typescript-estree" "6.0.0"
    "@typescript-eslint/visitor-keys" "6.0.0"
    "@typescript-eslint/scope-manager" "6.3.0"
    "@typescript-eslint/types" "6.3.0"
    "@typescript-eslint/typescript-estree" "6.3.0"
    "@typescript-eslint/visitor-keys" "6.3.0"
    debug "^4.3.4"

"@typescript-eslint/scope-manager@6.0.0":
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.0.0.tgz#8ede47a37cb2b7ed82d329000437abd1113b5e11"
  integrity sha512-o4q0KHlgCZTqjuaZ25nw5W57NeykZT9LiMEG4do/ovwvOcPnDO1BI5BQdCsUkjxFyrCL0cSzLjvIMfR9uo7cWg==
"@typescript-eslint/scope-manager@6.3.0":
  version "6.3.0"
  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.3.0.tgz#6b74e338c4b88d5e1dfc1a28c570dd5cf8c86b09"
  integrity sha512-WlNFgBEuGu74ahrXzgefiz/QlVb+qg8KDTpknKwR7hMH+lQygWyx0CQFoUmMn1zDkQjTBBIn75IxtWss77iBIQ==
  dependencies:
    "@typescript-eslint/types" "6.0.0"
    "@typescript-eslint/visitor-keys" "6.0.0"
    "@typescript-eslint/types" "6.3.0"
    "@typescript-eslint/visitor-keys" "6.3.0"

"@typescript-eslint/type-utils@6.0.0":
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.0.0.tgz#0478d8a94f05e51da2877cc0500f1b3c27ac7e18"
  integrity sha512-ah6LJvLgkoZ/pyJ9GAdFkzeuMZ8goV6BH7eC9FPmojrnX9yNCIsfjB+zYcnex28YO3RFvBkV6rMV6WpIqkPvoQ==
"@typescript-eslint/type-utils@6.3.0":
  version "6.3.0"
  resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.3.0.tgz#3bf89ccd36621ddec1b7f8246afe467c67adc247"
  integrity sha512-7Oj+1ox1T2Yc8PKpBvOKWhoI/4rWFd1j7FA/rPE0lbBPXTKjdbtC+7Ev0SeBjEKkIhKWVeZSP+mR7y1Db1CdfQ==
  dependencies:
    "@typescript-eslint/typescript-estree" "6.0.0"
    "@typescript-eslint/utils" "6.0.0"
    "@typescript-eslint/typescript-estree" "6.3.0"
    "@typescript-eslint/utils" "6.3.0"
    debug "^4.3.4"
    ts-api-utils "^1.0.1"



@@ 2643,10 2630,10 @@
  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.0.tgz#3fcdac7dbf923ec5251545acdd9f1d42d7c4fe32"
  integrity sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA==

"@typescript-eslint/types@6.0.0":
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.0.0.tgz#19795f515f8decbec749c448b0b5fc76d82445a1"
  integrity sha512-Zk9KDggyZM6tj0AJWYYKgF0yQyrcnievdhG0g5FqyU3Y2DRxJn4yWY21sJC0QKBckbsdKKjYDV2yVrrEvuTgxg==
"@typescript-eslint/types@6.3.0":
  version "6.3.0"
  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.3.0.tgz#84517f1427923e714b8418981e493b6635ab4c9d"
  integrity sha512-K6TZOvfVyc7MO9j60MkRNWyFSf86IbOatTKGrpTQnzarDZPYPVy0oe3myTMq7VjhfsUAbNUW8I5s+2lZvtx1gg==

"@typescript-eslint/typescript-estree@5.59.0":
  version "5.59.0"


@@ 2661,32 2648,31 @@
    semver "^7.3.7"
    tsutils "^3.21.0"

"@typescript-eslint/typescript-estree@6.0.0":
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.0.0.tgz#1e09aab7320e404fb9f83027ea568ac24e372f81"
  integrity sha512-2zq4O7P6YCQADfmJ5OTDQTP3ktajnXIRrYAtHM9ofto/CJZV3QfJ89GEaM2BNGeSr1KgmBuLhEkz5FBkS2RQhQ==
"@typescript-eslint/typescript-estree@6.3.0":
  version "6.3.0"
  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.3.0.tgz#20e1e10e2f51cdb9e19a2751215cac92c003643c"
  integrity sha512-Xh4NVDaC4eYKY4O3QGPuQNp5NxBAlEvNQYOqJquR2MePNxO11E5K3t5x4M4Mx53IZvtpW+mBxIT0s274fLUocg==
  dependencies:
    "@typescript-eslint/types" "6.0.0"
    "@typescript-eslint/visitor-keys" "6.0.0"
    "@typescript-eslint/types" "6.3.0"
    "@typescript-eslint/visitor-keys" "6.3.0"
    debug "^4.3.4"
    globby "^11.1.0"
    is-glob "^4.0.3"
    semver "^7.5.0"
    semver "^7.5.4"
    ts-api-utils "^1.0.1"

"@typescript-eslint/utils@6.0.0":
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.0.0.tgz#27a16d0d8f2719274a39417b9782f7daa3802db0"
  integrity sha512-SOr6l4NB6HE4H/ktz0JVVWNXqCJTOo/mHnvIte1ZhBQ0Cvd04x5uKZa3zT6tiodL06zf5xxdK8COiDvPnQ27JQ==
  dependencies:
    "@eslint-community/eslint-utils" "^4.3.0"
    "@types/json-schema" "^7.0.11"
    "@types/semver" "^7.3.12"
    "@typescript-eslint/scope-manager" "6.0.0"
    "@typescript-eslint/types" "6.0.0"
    "@typescript-eslint/typescript-estree" "6.0.0"
    eslint-scope "^5.1.1"
    semver "^7.5.0"
"@typescript-eslint/utils@6.3.0":
  version "6.3.0"
  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.3.0.tgz#0898c5e374372c2092ca1b979ea7ee9cc020ce84"
  integrity sha512-hLLg3BZE07XHnpzglNBG8P/IXq/ZVXraEbgY7FM0Cnc1ehM8RMdn9mat3LubJ3KBeYXXPxV1nugWbQPjGeJk6Q==
  dependencies:
    "@eslint-community/eslint-utils" "^4.4.0"
    "@types/json-schema" "^7.0.12"
    "@types/semver" "^7.5.0"
    "@typescript-eslint/scope-manager" "6.3.0"
    "@typescript-eslint/types" "6.3.0"
    "@typescript-eslint/typescript-estree" "6.3.0"
    semver "^7.5.4"

"@typescript-eslint/visitor-keys@5.59.0":
  version "5.59.0"


@@ 2696,12 2682,12 @@
    "@typescript-eslint/types" "5.59.0"
    eslint-visitor-keys "^3.3.0"

"@typescript-eslint/visitor-keys@6.0.0":
  version "6.0.0"
  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.0.0.tgz#0b49026049fbd096d2c00c5e784866bc69532a31"
  integrity sha512-cvJ63l8c0yXdeT5POHpL0Q1cZoRcmRKFCtSjNGJxPkcP571EfZMcNbzWAc7oK3D1dRzm/V5EwtkANTZxqvuuUA==
"@typescript-eslint/visitor-keys@6.3.0":
  version "6.3.0"
  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.3.0.tgz#8d09aa3e389ae0971426124c155ac289afbe450a"
  integrity sha512-kEhRRj7HnvaSjux1J9+7dBen15CdWmDnwrpyiHsFX6Qx2iW5LOBUgNefOFeh2PjWPlNwN8TOn6+4eBU3J/gupw==
  dependencies:
    "@typescript-eslint/types" "6.0.0"
    "@typescript-eslint/types" "6.3.0"
    eslint-visitor-keys "^3.4.1"

"@webassemblyjs/ast@1.9.0":


@@ 2907,11 2893,16 @@ acorn@^6.4.1:
  resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
  integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==

acorn@^8.0.4, acorn@^8.1.0, acorn@^8.8.0, acorn@^8.8.1, acorn@^8.8.2:
acorn@^8.0.4, acorn@^8.8.2:
  version "8.8.2"
  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
  integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==

acorn@^8.1.0, acorn@^8.8.1, acorn@^8.9.0:
  version "8.10.0"
  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
  integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==

agent-base@6:
  version "6.0.2"
  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"


@@ 2937,7 2928,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
  integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==

ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5:
ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5:
  version "6.12.6"
  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==


@@ 3071,7 3062,14 @@ aria-query@5.1.3:
  dependencies:
    deep-equal "^2.0.5"

aria-query@^5.0.0, aria-query@^5.1.3:
aria-query@^5.0.0:
  version "5.3.0"
  resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e"
  integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==
  dependencies:
    dequal "^2.0.3"

aria-query@^5.1.3:
  version "5.2.1"
  resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.2.1.tgz#bc285d9d654d1df121bcd0c134880d415ca67c15"
  integrity sha512-7uFg4b+lETFgdaJyETnILsXgnnzVnkHcgRbwbPwevm5x/LmUlt3MjczMRe1zg824iBgXZNRPTBftNYyRSKLp2g==


@@ 3144,6 3142,17 @@ array-unique@^0.3.2:
  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
  integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==

array.prototype.findlastindex@^1.2.2:
  version "1.2.2"
  resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz#bc229aef98f6bd0533a2bc61ff95209875526c9b"
  integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==
  dependencies:
    call-bind "^1.0.2"
    define-properties "^1.1.4"
    es-abstract "^1.20.4"
    es-shim-unscopables "^1.0.0"
    get-intrinsic "^1.1.3"

array.prototype.flat@^1.3.1:
  version "1.3.1"
  resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2"


@@ 3328,12 3337,12 @@ axobject-query@^3.1.1:
  dependencies:
    dequal "^2.0.3"

babel-jest@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.5.0.tgz#3fe3ddb109198e78b1c88f9ebdecd5e4fc2f50a5"
  integrity sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==
babel-jest@^29.5.0, babel-jest@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.6.2.tgz#cada0a59e07f5acaeb11cbae7e3ba92aec9c1126"
  integrity sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==
  dependencies:
    "@jest/transform" "^29.5.0"
    "@jest/transform" "^29.6.2"
    "@types/babel__core" "^7.1.14"
    babel-plugin-istanbul "^6.1.1"
    babel-preset-jest "^29.5.0"


@@ 3409,29 3418,29 @@ babel-plugin-macros@^3.0.1, babel-plugin-macros@^3.1.0:
    cosmiconfig "^7.0.0"
    resolve "^1.19.0"

babel-plugin-polyfill-corejs2@^0.4.4:
  version "0.4.4"
  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz#9f9a0e1cd9d645cc246a5e094db5c3aa913ccd2b"
  integrity sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA==
babel-plugin-polyfill-corejs2@^0.4.5:
  version "0.4.5"
  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c"
  integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==
  dependencies:
    "@babel/compat-data" "^7.22.6"
    "@babel/helper-define-polyfill-provider" "^0.4.1"
    "@nicolo-ribaudo/semver-v6" "^6.3.3"
    "@babel/helper-define-polyfill-provider" "^0.4.2"
    semver "^6.3.1"

babel-plugin-polyfill-corejs3@^0.8.2:
  version "0.8.2"
  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz#d406c5738d298cd9c66f64a94cf8d5904ce4cc5e"
  integrity sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ==
babel-plugin-polyfill-corejs3@^0.8.3:
  version "0.8.3"
  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52"
  integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==
  dependencies:
    "@babel/helper-define-polyfill-provider" "^0.4.1"
    "@babel/helper-define-polyfill-provider" "^0.4.2"
    core-js-compat "^3.31.0"

babel-plugin-polyfill-regenerator@^0.5.1:
  version "0.5.1"
  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz#ace7a5eced6dff7d5060c335c52064778216afd3"
  integrity sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw==
babel-plugin-polyfill-regenerator@^0.5.2:
  version "0.5.2"
  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326"
  integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==
  dependencies:
    "@babel/helper-define-polyfill-provider" "^0.4.1"
    "@babel/helper-define-polyfill-provider" "^0.4.2"

babel-plugin-preval@^5.1.0:
  version "5.1.0"


@@ 3534,6 3543,11 @@ bindings@^1.5.0:
  dependencies:
    file-uri-to-path "1.0.0"

bintrees@1.0.2:
  version "1.0.2"
  resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.2.tgz#49f896d6e858a4a499df85c38fb399b9aff840f8"
  integrity sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==

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"


@@ 3716,13 3730,13 @@ browserslist@^4.0.0, browserslist@^4.21.4, browserslist@^4.21.5:
    update-browserslist-db "^1.0.11"

browserslist@^4.21.9:
  version "4.21.9"
  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635"
  integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==
  version "4.21.10"
  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0"
  integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==
  dependencies:
    caniuse-lite "^1.0.30001503"
    electron-to-chromium "^1.4.431"
    node-releases "^2.0.12"
    caniuse-lite "^1.0.30001517"
    electron-to-chromium "^1.4.477"
    node-releases "^2.0.13"
    update-browserslist-db "^1.0.11"

bser@2.1.1:


@@ 3895,17 3909,17 @@ caniuse-lite@^1.0.30001502:
  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz#418aefeed9d024cd3129bfae0ccc782d4cb8f12b"
  integrity sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==

caniuse-lite@^1.0.30001503:
  version "1.0.30001516"
  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001516.tgz#621b1be7d85a8843ee7d210fd9d87b52e3daab3a"
  integrity sha512-Wmec9pCBY8CWbmI4HsjBeQLqDTqV91nFVR83DnZpYyRnPI1wePDsTg0bGLPC5VU/3OIZV1fmxEea1b+tFKe86g==
caniuse-lite@^1.0.30001517:
  version "1.0.30001519"
  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz#3e7b8b8a7077e78b0eb054d69e6edf5c7df35601"
  integrity sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==

chalk@5.2.0:
  version "5.2.0"
  resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3"
  integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==

chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
chalk@^2.4.1, chalk@^2.4.2:
  version "2.4.2"
  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==


@@ 4092,9 4106,9 @@ cocoon-js-vanilla@^1.3.0:
  integrity sha512-rMnbfW6oFhvELUg141vfqZKzsowfLJRxs5FksfmDr1ZBs6LTNVYE63NQyvgRqyYUOK54cKKbI+V83dQKeeRuPg==

collect-v8-coverage@^1.0.0:
  version "1.0.1"
  resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
  integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==
  version "1.0.2"
  resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9"
  integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==

collection-visit@^1.0.0:
  version "1.0.0"


@@ 4175,10 4189,10 @@ commander@^7.2.0:
  resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
  integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==

comment-parser@1.3.1:
  version "1.3.1"
  resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.3.1.tgz#3d7ea3adaf9345594aedee6563f422348f165c1b"
  integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==
comment-parser@1.4.0:
  version "1.4.0"
  resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.0.tgz#0f8c560f59698193854f12884c20c0e39a26d32c"
  integrity sha512-QLyTNiZ2KDOibvFPlZ6ZngVsZ/0gYnE6uTXi5aoDg8ed3AkJAz4sEje3Y8a29hQ1s6A99MZXe47fLAXQ1rTqaw==

common-tags@^1.8.0:
  version "1.8.2"


@@ 4289,9 4303,9 @@ copy-descriptor@^0.1.0:
  integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==

core-js-compat@^3.31.0:
  version "3.31.1"
  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.1.tgz#5084ad1a46858df50ff89ace152441a63ba7aae0"
  integrity sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==
  version "3.32.0"
  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.0.tgz#f41574b6893ab15ddb0ac1693681bd56c8550a90"
  integrity sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==
  dependencies:
    browserslist "^4.21.9"



@@ 4301,9 4315,9 @@ core-js@^2.5.0:
  integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==

core-js@^3.30.2:
  version "3.31.1"
  resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.31.1.tgz#f2b0eea9be9da0def2c5fece71064a7e5d687653"
  integrity sha512-2sKLtfq1eFST7l7v62zaqXacPc7uG8ZAya8ogijLhTtaKNcpzpB4TMoTw2Si+8GYKRwFPMMtUT0263QFWFfqyQ==
  version "3.32.0"
  resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.32.0.tgz#7643d353d899747ab1f8b03d2803b0312a0fb3b6"
  integrity sha512-rd4rYZNlF3WuoYuRIDEmbR/ga9CeuWX9U05umAvgrrZoHY4Z++cp/xwPQMvUpBB4Ag6J8KfD80G0zwCyaSxDww==

core-util-is@~1.0.0:
  version "1.0.3"


@@ 4416,10 4430,10 @@ css-declaration-sorter@^6.3.1:
  resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad"
  integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==

css-functions-list@^3.1.0:
  version "3.1.0"
  resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.1.0.tgz#cf5b09f835ad91a00e5959bcfc627cd498e1321b"
  integrity sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==
css-functions-list@^3.2.0:
  version "3.2.0"
  resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.0.tgz#8290b7d064bf483f48d6559c10e98dc4d1ad19ee"
  integrity sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==

css-loader@^5.2.7:
  version "5.2.7"


@@ 4678,10 4692,10 @@ decode-uri-component@^0.2.0:
  resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
  integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==

dedent@^0.7.0:
  version "0.7.0"
  resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
  integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==
dedent@^1.0.0:
  version "1.5.1"
  resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff"
  integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==

deep-equal@^1.0.1:
  version "1.1.1"


@@ 4719,7 4733,7 @@ deep-equal@^2.0.5:
    which-collection "^1.0.1"
    which-typed-array "^1.1.9"

deep-is@^0.1.3, deep-is@~0.1.3:
deep-is@^0.1.3:
  version "0.1.4"
  resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
  integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==


@@ 5038,10 5052,10 @@ electron-to-chromium@^1.4.428:
  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.457.tgz#3fdc7b4f97d628ac6b51e8b4b385befb362fe343"
  integrity sha512-/g3UyNDmDd6ebeWapmAoiyy+Sy2HyJ+/X8KyvNeHfKRFfHaA2W8oF5fxD5F3tjBDcjpwo0iek6YNgxNXDBoEtA==

electron-to-chromium@^1.4.431:
  version "1.4.461"
  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.461.tgz#6b14af66042732bf883ab63a4d82cac8f35eb252"
  integrity sha512-1JkvV2sgEGTDXjdsaQCeSwYYuhLRphRpc+g6EHTFELJXEiznLt3/0pZ9JuAOQ5p2rI3YxKTbivtvajirIfhrEQ==
electron-to-chromium@^1.4.477:
  version "1.4.490"
  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.490.tgz#d99286f6e915667fa18ea4554def1aa60eb4d5f1"
  integrity sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A==

elliptic@^6.5.3:
  version "6.5.4"


@@ 5311,21 5325,20 @@ escape-string-regexp@^4.0.0:
  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==

escodegen@^2.0.0:
  version "2.0.0"
  resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
  integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==
  version "2.1.0"
  resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17"
  integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==
  dependencies:
    esprima "^4.0.1"
    estraverse "^5.2.0"
    esutils "^2.0.2"
    optionator "^0.8.1"
  optionalDependencies:
    source-map "~0.6.1"

eslint-config-prettier@^8.8.0:
  version "8.8.0"
  resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348"
  integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==
eslint-config-prettier@^9.0.0:
  version "9.0.0"
  resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f"
  integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==

eslint-import-resolver-node@^0.3.7:
  version "0.3.7"


@@ 5337,20 5350,19 @@ eslint-import-resolver-node@^0.3.7:
    resolve "^1.22.1"

eslint-import-resolver-typescript@^3.5.5:
  version "3.5.5"
  resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d"
  integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==
  version "3.6.0"
  resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz#36f93e1eb65a635e688e16cae4bead54552e3bbd"
  integrity sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==
  dependencies:
    debug "^4.3.4"
    enhanced-resolve "^5.12.0"
    eslint-module-utils "^2.7.4"
    fast-glob "^3.3.1"
    get-tsconfig "^4.5.0"
    globby "^13.1.3"
    is-core-module "^2.11.0"
    is-glob "^4.0.3"
    synckit "^0.8.5"

eslint-module-utils@^2.7.4:
eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0:
  version "2.8.0"
  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49"
  integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==


@@ 5374,40 5386,43 @@ eslint-plugin-formatjs@^4.10.1:
    typescript "^4.7 || 5"
    unicode-emoji-utils "^1.1.1"

eslint-plugin-import@~2.27.5:
  version "2.27.5"
  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65"
  integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==
eslint-plugin-import@~2.28.0:
  version "2.28.0"
  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz#8d66d6925117b06c4018d491ae84469eb3cb1005"
  integrity sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==
  dependencies:
    array-includes "^3.1.6"
    array.prototype.findlastindex "^1.2.2"
    array.prototype.flat "^1.3.1"
    array.prototype.flatmap "^1.3.1"
    debug "^3.2.7"
    doctrine "^2.1.0"
    eslint-import-resolver-node "^0.3.7"
    eslint-module-utils "^2.7.4"
    eslint-module-utils "^2.8.0"
    has "^1.0.3"
    is-core-module "^2.11.0"
    is-core-module "^2.12.1"
    is-glob "^4.0.3"
    minimatch "^3.1.2"
    object.fromentries "^2.0.6"
    object.groupby "^1.0.0"
    object.values "^1.1.6"
    resolve "^1.22.1"
    semver "^6.3.0"
    tsconfig-paths "^3.14.1"
    resolve "^1.22.3"
    semver "^6.3.1"
    tsconfig-paths "^3.14.2"

eslint-plugin-jsdoc@^46.1.0:
  version "46.2.6"
  resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.2.6.tgz#f25590d371859f20691d65b5dcd4cbe370d65564"
  integrity sha512-zIaK3zbSrKuH12bP+SPybPgcHSM6MFzh3HFeaODzmsF1N8C1l8dzJ22cW1aq4g0+nayU1VMjmNf7hg0dpShLrA==
  version "46.4.6"
  resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.4.6.tgz#5226461eda61b5920297cbe02c3b17bc9423cf0b"
  integrity sha512-z4SWYnJfOqftZI+b3RM9AtWL1vF/sLWE/LlO9yOKDof9yN2+n3zOdOJTGX/pRE/xnPsooOLG2Rq6e4d+XW3lNw==
  dependencies:
    "@es-joy/jsdoccomment" "~0.39.4"
    "@es-joy/jsdoccomment" "~0.40.1"
    are-docs-informative "^0.0.2"
    comment-parser "1.3.1"
    comment-parser "1.4.0"
    debug "^4.3.4"
    escape-string-regexp "^4.0.0"
    esquery "^1.5.0"
    is-builtin-module "^3.2.1"
    semver "^7.5.1"
    semver "^7.5.4"
    spdx-expression-parse "^3.0.1"

eslint-plugin-jsx-a11y@~6.7.1:


@@ 5450,10 5465,10 @@ eslint-plugin-react-hooks@^4.6.0:
  resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3"
  integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==

eslint-plugin-react@~7.32.2:
  version "7.32.2"
  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10"
  integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==
eslint-plugin-react@~7.33.0:
  version "7.33.1"
  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz#bc27cccf860ae45413a4a4150bf0977345c1ceab"
  integrity sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==
  dependencies:
    array-includes "^3.1.6"
    array.prototype.flatmap "^1.3.1"


@@ 5468,7 5483,7 @@ eslint-plugin-react@~7.32.2:
    object.values "^1.1.6"
    prop-types "^15.8.1"
    resolve "^2.0.0-next.4"
    semver "^6.3.0"
    semver "^6.3.1"
    string.prototype.matchall "^4.0.8"

eslint-scope@^4.0.3:


@@ 5479,48 5494,40 @@ eslint-scope@^4.0.3:
    esrecurse "^4.1.0"
    estraverse "^4.1.1"

eslint-scope@^5.1.1:
  version "5.1.1"
  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
  integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
  dependencies:
    esrecurse "^4.3.0"
    estraverse "^4.1.1"

eslint-scope@^7.2.0:
  version "7.2.0"
  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b"
  integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==
eslint-scope@^7.2.2:
  version "7.2.2"
  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
  integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
  dependencies:
    esrecurse "^4.3.0"
    estraverse "^5.2.0"

eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1:
  version "3.4.1"
  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994"
  integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.2:
  version "3.4.2"
  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz#8c2095440eca8c933bedcadf16fefa44dbe9ba5f"
  integrity sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==

eslint@^8.41.0:
  version "8.42.0"
  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.42.0.tgz#7bebdc3a55f9ed7167251fe7259f75219cade291"
  integrity sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==
  version "8.46.0"
  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.46.0.tgz#a06a0ff6974e53e643acc42d1dcf2e7f797b3552"
  integrity sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==
  dependencies:
    "@eslint-community/eslint-utils" "^4.2.0"
    "@eslint-community/regexpp" "^4.4.0"
    "@eslint/eslintrc" "^2.0.3"
    "@eslint/js" "8.42.0"
    "@eslint-community/regexpp" "^4.6.1"
    "@eslint/eslintrc" "^2.1.1"
    "@eslint/js" "^8.46.0"
    "@humanwhocodes/config-array" "^0.11.10"
    "@humanwhocodes/module-importer" "^1.0.1"
    "@nodelib/fs.walk" "^1.2.8"
    ajv "^6.10.0"
    ajv "^6.12.4"
    chalk "^4.0.0"
    cross-spawn "^7.0.2"
    debug "^4.3.2"
    doctrine "^3.0.0"
    escape-string-regexp "^4.0.0"
    eslint-scope "^7.2.0"
    eslint-visitor-keys "^3.4.1"
    espree "^9.5.2"
    eslint-scope "^7.2.2"
    eslint-visitor-keys "^3.4.2"
    espree "^9.6.1"
    esquery "^1.4.2"
    esutils "^2.0.2"
    fast-deep-equal "^3.1.3"


@@ 5530,7 5537,6 @@ eslint@^8.41.0:
    globals "^13.19.0"
    graphemer "^1.4.0"
    ignore "^5.2.0"
    import-fresh "^3.0.0"
    imurmurhash "^0.1.4"
    is-glob "^4.0.0"
    is-path-inside "^3.0.3"


@@ 5540,17 5546,16 @@ eslint@^8.41.0:
    lodash.merge "^4.6.2"
    minimatch "^3.1.2"
    natural-compare "^1.4.0"
    optionator "^0.9.1"
    optionator "^0.9.3"
    strip-ansi "^6.0.1"
    strip-json-comments "^3.1.0"
    text-table "^0.2.0"

espree@^9.5.2:
  version "9.5.2"
  resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b"
  integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==
espree@^9.6.0, espree@^9.6.1:
  version "9.6.1"
  resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
  integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
  dependencies:
    acorn "^8.8.0"
    acorn "^8.9.0"
    acorn-jsx "^5.3.2"
    eslint-visitor-keys "^3.4.1"



@@ 5654,7 5659,22 @@ execa@^5.0.0:
    signal-exit "^3.0.3"
    strip-final-newline "^2.0.0"

execa@^7.0.0, execa@^7.1.1:
execa@^7.0.0:
  version "7.2.0"
  resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9"
  integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==
  dependencies:
    cross-spawn "^7.0.3"
    get-stream "^6.0.1"
    human-signals "^4.3.0"
    is-stream "^3.0.0"
    merge-stream "^2.0.0"
    npm-run-path "^5.1.0"
    onetime "^6.0.0"
    signal-exit "^3.0.7"
    strip-final-newline "^3.0.0"

execa@^7.1.1:
  version "7.1.1"
  resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43"
  integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==


@@ 5699,16 5719,17 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2:
  dependencies:
    homedir-polyfill "^1.0.1"

expect@^29.0.0, expect@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7"
  integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==
expect@^29.0.0, expect@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/expect/-/expect-29.6.2.tgz#7b08e83eba18ddc4a2cf62b5f2d1918f5cd84521"
  integrity sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==
  dependencies:
    "@jest/expect-utils" "^29.5.0"
    "@jest/expect-utils" "^29.6.2"
    "@types/node" "*"
    jest-get-type "^29.4.3"
    jest-matcher-utils "^29.5.0"
    jest-message-util "^29.5.0"
    jest-util "^29.5.0"
    jest-matcher-utils "^29.6.2"
    jest-message-util "^29.6.2"
    jest-util "^29.6.2"

express@^4.17.1, express@^4.18.2:
  version "4.18.2"


@@ 5786,7 5807,7 @@ fast-diff@^1.1.2:
  resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0"
  integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==

fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9:
fast-glob@^3.2.12:
  version "3.2.12"
  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
  integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==


@@ 5797,10 5818,10 @@ fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9:
    merge2 "^1.3.0"
    micromatch "^4.0.4"

fast-glob@^3.3.0:
  version "3.3.0"
  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0"
  integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==
fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1:
  version "3.3.1"
  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4"
  integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==
  dependencies:
    "@nodelib/fs.stat" "^2.0.2"
    "@nodelib/fs.walk" "^1.2.3"


@@ 5813,7 5834,7 @@ fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==

fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
fast-levenshtein@^2.0.6:
  version "2.0.6"
  resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
  integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==


@@ 6162,9 6183,9 @@ get-symbol-description@^1.0.0:
    get-intrinsic "^1.1.1"

get-tsconfig@^4.5.0:
  version "4.6.0"
  resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.0.tgz#e977690993a42f3e320e932427502a40f7af6d05"
  integrity sha512-lgbo68hHTQnFddybKbbs/RDRJnJT5YyGy2kQzVwbq+g67X73i+5MVTval34QxGkOe9X5Ujf1UYpCaphLyltjEg==
  version "4.7.0"
  resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.0.tgz#06ce112a1463e93196aa90320c35df5039147e34"
  integrity sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==
  dependencies:
    resolve-pkg-maps "^1.0.0"



@@ 6285,17 6306,6 @@ globby@^11.1.0:
    merge2 "^1.4.1"
    slash "^3.0.0"

globby@^13.1.3:
  version "13.1.4"
  resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317"
  integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==
  dependencies:
    dir-glob "^3.0.1"
    fast-glob "^3.2.11"
    ignore "^5.2.0"
    merge2 "^1.4.1"
    slash "^4.0.0"

globby@^6.1.0:
  version "6.1.0"
  resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"


@@ 6324,11 6334,6 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0,
  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==

grapheme-splitter@^1.0.4:
  version "1.0.4"
  resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
  integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==

graphemer@^1.4.0:
  version "1.4.0"
  resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"


@@ 6671,11 6676,11 @@ immutable@^3.8.2:
  integrity sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==

immutable@^4.0.0, immutable@^4.0.0-rc.1, immutable@^4.3.0:
  version "4.3.1"
  resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.1.tgz#17988b356097ab0719e2f741d56f3ec6c317f9dc"
  integrity sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A==
  version "4.3.2"
  resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.2.tgz#f89d910f8dfb6e15c03b2cae2faaf8c1f66455fe"
  integrity sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA==

import-fresh@^3.0.0, import-fresh@^3.2.1:
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==


@@ 6903,7 6908,14 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
  resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
  integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==

is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.9.0:
is-core-module@^2.11.0, is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.5.0:
  version "2.13.0"
  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db"
  integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==
  dependencies:
    has "^1.0.3"

is-core-module@^2.9.0:
  version "2.12.1"
  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
  integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==


@@ 7263,12 7275,12 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0:
    semver "^6.3.0"

istanbul-lib-report@^3.0.0:
  version "3.0.0"
  resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"
  integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==
  version "3.0.1"
  resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d"
  integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==
  dependencies:
    istanbul-lib-coverage "^3.0.0"
    make-dir "^3.0.0"
    make-dir "^4.0.0"
    supports-color "^7.1.0"

istanbul-lib-source-maps@^4.0.0:


@@ 7281,9 7293,9 @@ istanbul-lib-source-maps@^4.0.0:
    source-map "^0.6.1"

istanbul-reports@^3.1.3:
  version "3.1.5"
  resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae"
  integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==
  version "3.1.6"
  resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a"
  integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==
  dependencies:
    html-escaper "^2.0.0"
    istanbul-lib-report "^3.0.0"


@@ 7315,87 7327,87 @@ jest-changed-files@^29.5.0:
    execa "^5.0.0"
    p-limit "^3.1.0"

jest-circus@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.5.0.tgz#b5926989449e75bff0d59944bae083c9d7fb7317"
  integrity sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==
jest-circus@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.6.2.tgz#1e6ffca60151ac66cad63fce34f443f6b5bb4258"
  integrity sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==
  dependencies:
    "@jest/environment" "^29.5.0"
    "@jest/expect" "^29.5.0"
    "@jest/test-result" "^29.5.0"
    "@jest/types" "^29.5.0"
    "@jest/environment" "^29.6.2"
    "@jest/expect" "^29.6.2"
    "@jest/test-result" "^29.6.2"
    "@jest/types" "^29.6.1"
    "@types/node" "*"
    chalk "^4.0.0"
    co "^4.6.0"
    dedent "^0.7.0"
    dedent "^1.0.0"
    is-generator-fn "^2.0.0"
    jest-each "^29.5.0"
    jest-matcher-utils "^29.5.0"
    jest-message-util "^29.5.0"
    jest-runtime "^29.5.0"
    jest-snapshot "^29.5.0"
    jest-util "^29.5.0"
    jest-each "^29.6.2"
    jest-matcher-utils "^29.6.2"
    jest-message-util "^29.6.2"
    jest-runtime "^29.6.2"
    jest-snapshot "^29.6.2"
    jest-util "^29.6.2"
    p-limit "^3.1.0"
    pretty-format "^29.5.0"
    pretty-format "^29.6.2"
    pure-rand "^6.0.0"
    slash "^3.0.0"
    stack-utils "^2.0.3"

jest-cli@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.5.0.tgz#b34c20a6d35968f3ee47a7437ff8e53e086b4a67"
  integrity sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==
jest-cli@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.6.2.tgz#edb381763398d1a292cd1b636a98bfa5644b8fda"
  integrity sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==
  dependencies:
    "@jest/core" "^29.5.0"
    "@jest/test-result" "^29.5.0"
    "@jest/types" "^29.5.0"
    "@jest/core" "^29.6.2"
    "@jest/test-result" "^29.6.2"
    "@jest/types" "^29.6.1"
    chalk "^4.0.0"
    exit "^0.1.2"
    graceful-fs "^4.2.9"
    import-local "^3.0.2"
    jest-config "^29.5.0"
    jest-util "^29.5.0"
    jest-validate "^29.5.0"
    jest-config "^29.6.2"
    jest-util "^29.6.2"
    jest-validate "^29.6.2"
    prompts "^2.0.1"
    yargs "^17.3.1"

jest-config@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.5.0.tgz#3cc972faec8c8aaea9ae158c694541b79f3748da"
  integrity sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==
jest-config@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.6.2.tgz#c68723f06b31ca5e63030686e604727d406cd7c3"
  integrity sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==
  dependencies:
    "@babel/core" "^7.11.6"
    "@jest/test-sequencer" "^29.5.0"
    "@jest/types" "^29.5.0"
    babel-jest "^29.5.0"
    "@jest/test-sequencer" "^29.6.2"
    "@jest/types" "^29.6.1"
    babel-jest "^29.6.2"
    chalk "^4.0.0"
    ci-info "^3.2.0"
    deepmerge "^4.2.2"
    glob "^7.1.3"
    graceful-fs "^4.2.9"
    jest-circus "^29.5.0"
    jest-environment-node "^29.5.0"
    jest-circus "^29.6.2"
    jest-environment-node "^29.6.2"
    jest-get-type "^29.4.3"
    jest-regex-util "^29.4.3"
    jest-resolve "^29.5.0"
    jest-runner "^29.5.0"
    jest-util "^29.5.0"
    jest-validate "^29.5.0"
    jest-resolve "^29.6.2"
    jest-runner "^29.6.2"
    jest-util "^29.6.2"
    jest-validate "^29.6.2"
    micromatch "^4.0.4"
    parse-json "^5.2.0"
    pretty-format "^29.5.0"
    pretty-format "^29.6.2"
    slash "^3.0.0"
    strip-json-comments "^3.1.1"

jest-diff@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63"
  integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==
jest-diff@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.6.2.tgz#c36001e5543e82a0805051d3ceac32e6825c1c46"
  integrity sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==
  dependencies:
    chalk "^4.0.0"
    diff-sequences "^29.4.3"
    jest-get-type "^29.4.3"
    pretty-format "^29.5.0"
    pretty-format "^29.6.2"

jest-docblock@^29.4.3:
  version "29.4.3"


@@ 7404,108 7416,108 @@ jest-docblock@^29.4.3:
  dependencies:
    detect-newline "^3.0.0"

jest-each@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.5.0.tgz#fc6e7014f83eac68e22b7195598de8554c2e5c06"
  integrity sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==
jest-each@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.6.2.tgz#c9e4b340bcbe838c73adf46b76817b15712d02ce"
  integrity sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==
  dependencies:
    "@jest/types" "^29.5.0"
    "@jest/types" "^29.6.1"
    chalk "^4.0.0"
    jest-get-type "^29.4.3"
    jest-util "^29.5.0"
    pretty-format "^29.5.0"
    jest-util "^29.6.2"
    pretty-format "^29.6.2"

jest-environment-jsdom@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.5.0.tgz#cfe86ebaf1453f3297b5ff3470fbe94739c960cb"
  integrity sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.6.2.tgz#4fc68836a7774a771819a2f980cb47af3b1629da"
  integrity sha512-7oa/+266AAEgkzae8i1awNEfTfjwawWKLpiw2XesZmaoVVj9u9t8JOYx18cG29rbPNtkUlZ8V4b5Jb36y/VxoQ==
  dependencies:
    "@jest/environment" "^29.5.0"
    "@jest/fake-timers" "^29.5.0"
    "@jest/types" "^29.5.0"
    "@jest/environment" "^29.6.2"
    "@jest/fake-timers" "^29.6.2"
    "@jest/types" "^29.6.1"
    "@types/jsdom" "^20.0.0"
    "@types/node" "*"
    jest-mock "^29.5.0"
    jest-util "^29.5.0"
    jest-mock "^29.6.2"
    jest-util "^29.6.2"
    jsdom "^20.0.0"

jest-environment-node@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.5.0.tgz#f17219d0f0cc0e68e0727c58b792c040e332c967"
  integrity sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==
jest-environment-node@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.6.2.tgz#a9ea2cabff39b08eca14ccb32c8ceb924c8bb1ad"
  integrity sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==
  dependencies:
    "@jest/environment" "^29.5.0"
    "@jest/fake-timers" "^29.5.0"
    "@jest/types" "^29.5.0"
    "@jest/environment" "^29.6.2"
    "@jest/fake-timers" "^29.6.2"
    "@jest/types" "^29.6.1"
    "@types/node" "*"
    jest-mock "^29.5.0"
    jest-util "^29.5.0"
    jest-mock "^29.6.2"
    jest-util "^29.6.2"

jest-get-type@^29.4.3:
  version "29.4.3"
  resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5"
  integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==

jest-haste-map@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.5.0.tgz#69bd67dc9012d6e2723f20a945099e972b2e94de"
  integrity sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==
jest-haste-map@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.6.2.tgz#298c25ea5255cfad8b723179d4295cf3a50a70d1"
  integrity sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==
  dependencies:
    "@jest/types" "^29.5.0"
    "@jest/types" "^29.6.1"
    "@types/graceful-fs" "^4.1.3"
    "@types/node" "*"
    anymatch "^3.0.3"
    fb-watchman "^2.0.0"
    graceful-fs "^4.2.9"
    jest-regex-util "^29.4.3"
    jest-util "^29.5.0"
    jest-worker "^29.5.0"
    jest-util "^29.6.2"
    jest-worker "^29.6.2"
    micromatch "^4.0.4"
    walker "^1.0.8"
  optionalDependencies:
    fsevents "^2.3.2"

jest-leak-detector@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz#cf4bdea9615c72bac4a3a7ba7e7930f9c0610c8c"
  integrity sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==
jest-leak-detector@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz#e2b307fee78cab091c37858a98c7e1d73cdf5b38"
  integrity sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==
  dependencies:
    jest-get-type "^29.4.3"
    pretty-format "^29.5.0"
    pretty-format "^29.6.2"

jest-matcher-utils@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5"
  integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==
jest-matcher-utils@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz#39de0be2baca7a64eacb27291f0bd834fea3a535"
  integrity sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==
  dependencies:
    chalk "^4.0.0"
    jest-diff "^29.5.0"
    jest-diff "^29.6.2"
    jest-get-type "^29.4.3"
    pretty-format "^29.5.0"
    pretty-format "^29.6.2"

jest-message-util@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e"
  integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==
jest-message-util@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.2.tgz#af7adc2209c552f3f5ae31e77cf0a261f23dc2bb"
  integrity sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==
  dependencies:
    "@babel/code-frame" "^7.12.13"
    "@jest/types" "^29.5.0"
    "@jest/types" "^29.6.1"
    "@types/stack-utils" "^2.0.0"
    chalk "^4.0.0"
    graceful-fs "^4.2.9"
    micromatch "^4.0.4"
    pretty-format "^29.5.0"
    pretty-format "^29.6.2"
    slash "^3.0.0"
    stack-utils "^2.0.3"

jest-mock@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.5.0.tgz#26e2172bcc71d8b0195081ff1f146ac7e1518aed"
  integrity sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==
jest-mock@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.6.2.tgz#ef9c9b4d38c34a2ad61010a021866dad41ce5e00"
  integrity sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==
  dependencies:
    "@jest/types" "^29.5.0"
    "@jest/types" "^29.6.1"
    "@types/node" "*"
    jest-util "^29.5.0"
    jest-util "^29.6.2"

jest-pnp-resolver@^1.2.2:
  version "1.2.3"


@@ 7517,149 7529,146 @@ jest-regex-util@^29.4.3:
  resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8"
  integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==

jest-resolve-dependencies@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz#f0ea29955996f49788bf70996052aa98e7befee4"
  integrity sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==
jest-resolve-dependencies@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz#36435269b6672c256bcc85fb384872c134cc4cf2"
  integrity sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==
  dependencies:
    jest-regex-util "^29.4.3"
    jest-snapshot "^29.5.0"
    jest-snapshot "^29.6.2"

jest-resolve@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.5.0.tgz#b053cc95ad1d5f6327f0ac8aae9f98795475ecdc"
  integrity sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==
jest-resolve@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.6.2.tgz#f18405fe4b50159b7b6d85e81f6a524d22afb838"
  integrity sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==
  dependencies:
    chalk "^4.0.0"
    graceful-fs "^4.2.9"
    jest-haste-map "^29.5.0"
    jest-haste-map "^29.6.2"
    jest-pnp-resolver "^1.2.2"
    jest-util "^29.5.0"
    jest-validate "^29.5.0"
    jest-util "^29.6.2"
    jest-validate "^29.6.2"
    resolve "^1.20.0"
    resolve.exports "^2.0.0"
    slash "^3.0.0"

jest-runner@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.5.0.tgz#6a57c282eb0ef749778d444c1d758c6a7693b6f8"
  integrity sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==
  dependencies:
    "@jest/console" "^29.5.0"
    "@jest/environment" "^29.5.0"
    "@jest/test-result" "^29.5.0"
    "@jest/transform" "^29.5.0"
    "@jest/types" "^29.5.0"
jest-runner@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.6.2.tgz#89e8e32a8fef24781a7c4c49cd1cb6358ac7fc01"
  integrity sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==
  dependencies:
    "@jest/console" "^29.6.2"
    "@jest/environment" "^29.6.2"
    "@jest/test-result" "^29.6.2"
    "@jest/transform" "^29.6.2"
    "@jest/types" "^29.6.1"
    "@types/node" "*"
    chalk "^4.0.0"
    emittery "^0.13.1"
    graceful-fs "^4.2.9"
    jest-docblock "^29.4.3"
    jest-environment-node "^29.5.0"
    jest-haste-map "^29.5.0"
    jest-leak-detector "^29.5.0"
    jest-message-util "^29.5.0"
    jest-resolve "^29.5.0"
    jest-runtime "^29.5.0"
    jest-util "^29.5.0"
    jest-watcher "^29.5.0"
    jest-worker "^29.5.0"
    jest-environment-node "^29.6.2"
    jest-haste-map "^29.6.2"
    jest-leak-detector "^29.6.2"
    jest-message-util "^29.6.2"
    jest-resolve "^29.6.2"
    jest-runtime "^29.6.2"
    jest-util "^29.6.2"
    jest-watcher "^29.6.2"
    jest-worker "^29.6.2"
    p-limit "^3.1.0"
    source-map-support "0.5.13"

jest-runtime@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.5.0.tgz#c83f943ee0c1da7eb91fa181b0811ebd59b03420"
  integrity sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==
  dependencies:
    "@jest/environment" "^29.5.0"
    "@jest/fake-timers" "^29.5.0"
    "@jest/globals" "^29.5.0"
    "@jest/source-map" "^29.4.3"
    "@jest/test-result" "^29.5.0"
    "@jest/transform" "^29.5.0"
    "@jest/types" "^29.5.0"
jest-runtime@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.6.2.tgz#692f25e387f982e89ab83270e684a9786248e545"
  integrity sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==
  dependencies:
    "@jest/environment" "^29.6.2"
    "@jest/fake-timers" "^29.6.2"
    "@jest/globals" "^29.6.2"
    "@jest/source-map" "^29.6.0"
    "@jest/test-result" "^29.6.2"
    "@jest/transform" "^29.6.2"
    "@jest/types" "^29.6.1"
    "@types/node" "*"
    chalk "^4.0.0"
    cjs-module-lexer "^1.0.0"
    collect-v8-coverage "^1.0.0"
    glob "^7.1.3"
    graceful-fs "^4.2.9"
    jest-haste-map "^29.5.0"
    jest-message-util "^29.5.0"
    jest-mock "^29.5.0"
    jest-haste-map "^29.6.2"
    jest-message-util "^29.6.2"
    jest-mock "^29.6.2"
    jest-regex-util "^29.4.3"
    jest-resolve "^29.5.0"
    jest-snapshot "^29.5.0"
    jest-util "^29.5.0"
    jest-resolve "^29.6.2"
    jest-snapshot "^29.6.2"
    jest-util "^29.6.2"
    slash "^3.0.0"
    strip-bom "^4.0.0"

jest-snapshot@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.5.0.tgz#c9c1ce0331e5b63cd444e2f95a55a73b84b1e8ce"
  integrity sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==
jest-snapshot@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.6.2.tgz#9b431b561a83f2bdfe041e1cab8a6becdb01af9c"
  integrity sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==
  dependencies:
    "@babel/core" "^7.11.6"
    "@babel/generator" "^7.7.2"
    "@babel/plugin-syntax-jsx" "^7.7.2"
    "@babel/plugin-syntax-typescript" "^7.7.2"
    "@babel/traverse" "^7.7.2"
    "@babel/types" "^7.3.3"
    "@jest/expect-utils" "^29.5.0"
    "@jest/transform" "^29.5.0"
    "@jest/types" "^29.5.0"
    "@types/babel__traverse" "^7.0.6"
    "@types/prettier" "^2.1.5"
    "@jest/expect-utils" "^29.6.2"
    "@jest/transform" "^29.6.2"
    "@jest/types" "^29.6.1"
    babel-preset-current-node-syntax "^1.0.0"
    chalk "^4.0.0"
    expect "^29.5.0"
    expect "^29.6.2"
    graceful-fs "^4.2.9"
    jest-diff "^29.5.0"
    jest-diff "^29.6.2"
    jest-get-type "^29.4.3"
    jest-matcher-utils "^29.5.0"
    jest-message-util "^29.5.0"
    jest-util "^29.5.0"
    jest-matcher-utils "^29.6.2"
    jest-message-util "^29.6.2"
    jest-util "^29.6.2"
    natural-compare "^1.4.0"
    pretty-format "^29.5.0"
    semver "^7.3.5"
    pretty-format "^29.6.2"
    semver "^7.5.3"

jest-util@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f"
  integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==
jest-util@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.2.tgz#8a052df8fff2eebe446769fd88814521a517664d"
  integrity sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==
  dependencies:
    "@jest/types" "^29.5.0"
    "@jest/types" "^29.6.1"
    "@types/node" "*"
    chalk "^4.0.0"
    ci-info "^3.2.0"
    graceful-fs "^4.2.9"
    picomatch "^2.2.3"

jest-validate@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.5.0.tgz#8e5a8f36178d40e47138dc00866a5f3bd9916ffc"
  integrity sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==
jest-validate@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.6.2.tgz#25d972af35b2415b83b1373baf1a47bb266c1082"
  integrity sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==
  dependencies:
    "@jest/types" "^29.5.0"
    "@jest/types" "^29.6.1"
    camelcase "^6.2.0"
    chalk "^4.0.0"
    jest-get-type "^29.4.3"
    leven "^3.1.0"
    pretty-format "^29.5.0"
    pretty-format "^29.6.2"

jest-watcher@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.5.0.tgz#cf7f0f949828ba65ddbbb45c743a382a4d911363"
  integrity sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==
jest-watcher@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.6.2.tgz#77c224674f0620d9f6643c4cfca186d8893ca088"
  integrity sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==
  dependencies:
    "@jest/test-result" "^29.5.0"
    "@jest/types" "^29.5.0"
    "@jest/test-result" "^29.6.2"
    "@jest/types" "^29.6.1"
    "@types/node" "*"
    ansi-escapes "^4.2.1"
    chalk "^4.0.0"
    emittery "^0.13.1"
    jest-util "^29.5.0"
    jest-util "^29.6.2"
    string-length "^4.0.1"

jest-worker@^26.2.1, jest-worker@^26.5.0:


@@ 7671,25 7680,25 @@ jest-worker@^26.2.1, jest-worker@^26.5.0:
    merge-stream "^2.0.0"
    supports-color "^7.0.0"

jest-worker@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d"
  integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==
jest-worker@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.6.2.tgz#682fbc4b6856ad0aa122a5403c6d048b83f3fb44"
  integrity sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==
  dependencies:
    "@types/node" "*"
    jest-util "^29.5.0"
    jest-util "^29.6.2"
    merge-stream "^2.0.0"
    supports-color "^8.0.0"

jest@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/jest/-/jest-29.5.0.tgz#f75157622f5ce7ad53028f2f8888ab53e1f1f24e"
  integrity sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/jest/-/jest-29.6.2.tgz#3bd55b9fd46a161b2edbdf5f1d1bd0d1eab76c42"
  integrity sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==
  dependencies:
    "@jest/core" "^29.5.0"
    "@jest/types" "^29.5.0"
    "@jest/core" "^29.6.2"
    "@jest/types" "^29.6.1"
    import-local "^3.0.2"
    jest-cli "^29.5.0"
    jest-cli "^29.6.2"

jpeg-autorotate@^7.1.1:
  version "7.1.1"


@@ 7934,14 7943,6 @@ levn@^0.4.1:
    prelude-ls "^1.2.1"
    type-check "~0.4.0"

levn@~0.3.0:
  version "0.3.0"
  resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
  integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==
  dependencies:
    prelude-ls "~1.1.2"
    type-check "~0.3.2"

lilconfig@2.1.0, lilconfig@^2.1.0:
  version "2.1.0"
  resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"


@@ 7953,9 7954,9 @@ lines-and-columns@^1.1.6:
  integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==

lint-staged@^13.2.2:
  version "13.2.2"
  resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.2.tgz#5e711d3139c234f73402177be2f8dd312e6508ca"
  integrity sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA==
  version "13.2.3"
  resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.3.tgz#f899aad6c093473467e9c9e316e3c2d8a28f87a7"
  integrity sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg==
  dependencies:
    chalk "5.2.0"
    cli-truncate "^3.1.0"


@@ 8157,13 8158,20 @@ magic-string@^0.30.0:
  dependencies:
    "@jridgewell/sourcemap-codec" "^1.4.13"

make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
make-dir@^3.0.2, make-dir@^3.1.0:
  version "3.1.0"
  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
  integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
  dependencies:
    semver "^6.0.0"

make-dir@^4.0.0:
  version "4.0.0"
  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e"
  integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==
  dependencies:
    semver "^7.5.3"

makeerror@1.0.12:
  version "1.0.12"
  resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"


@@ 8639,7 8647,7 @@ node-libs-browser@^2.2.1:
    util "^0.11.0"
    vm-browserify "^1.0.1"

node-releases@^2.0.12:
node-releases@^2.0.12, node-releases@^2.0.13:
  version "2.0.13"
  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d"
  integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==


@@ 8716,7 8724,12 @@ nth-check@^2.0.1:
  dependencies:
    boolbase "^1.0.0"

nwsapi@^2.2.2, nwsapi@^2.2.4:
nwsapi@^2.2.2:
  version "2.2.7"
  resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30"
  integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==

nwsapi@^2.2.4:
  version "2.2.5"
  resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.5.tgz#a52744c61b3889dd44b0a158687add39b8d935e2"
  integrity sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==


@@ 8799,6 8812,16 @@ object.getownpropertydescriptors@^2.1.0:
    es-abstract "^1.21.2"
    safe-array-concat "^1.0.0"

object.groupby@^1.0.0:
  version "1.0.0"
  resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.0.tgz#cb29259cf90f37e7bac6437686c1ea8c916d12a9"
  integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==
  dependencies:
    call-bind "^1.0.2"
    define-properties "^1.2.0"
    es-abstract "^1.21.2"
    get-intrinsic "^1.2.1"

object.hasown@^1.1.2:
  version "1.1.2"
  resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92"


@@ 8888,29 8911,17 @@ opn@^5.5.0:
  dependencies:
    is-wsl "^1.1.0"

optionator@^0.8.1:
  version "0.8.3"
  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
  integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
  dependencies:
    deep-is "~0.1.3"
    fast-levenshtein "~2.0.6"
    levn "~0.3.0"
    prelude-ls "~1.1.2"
    type-check "~0.3.2"
    word-wrap "~1.2.3"

optionator@^0.9.1:
  version "0.9.1"
  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
  integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
optionator@^0.9.3:
  version "0.9.3"
  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
  integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
  dependencies:
    "@aashutoshrathi/word-wrap" "^1.2.3"
    deep-is "^0.1.3"
    fast-levenshtein "^2.0.6"
    levn "^0.4.1"
    prelude-ls "^1.2.1"
    type-check "^0.4.0"
    word-wrap "^1.2.3"

os-browserify@^0.3.0:
  version "0.3.0"


@@ 9147,10 9158,10 @@ pg-cloudflare@^1.1.1:
  resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98"
  integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==

pg-connection-string@^2.6.0, pg-connection-string@^2.6.1:
  version "2.6.1"
  resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.1.tgz#78c23c21a35dd116f48e12e23c0965e8d9e2cbfb"
  integrity sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg==
pg-connection-string@^2.6.0, pg-connection-string@^2.6.2:
  version "2.6.2"
  resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475"
  integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==

pg-int8@1.0.1:
  version "1.0.1"


@@ 9197,13 9208,13 @@ pg-types@^4.0.1:
    postgres-range "^1.1.1"

pg@^8.5.0:
  version "8.11.1"
  resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.1.tgz#297e0eb240306b1e9e4f55af8a3bae76ae4810b1"
  integrity sha512-utdq2obft07MxaDg0zBJI+l/M3mBRfIpEN3iSemsz0G5F2/VXx+XzqF4oxrbIZXQxt2AZzIUzyVg/YM6xOP/WQ==
  version "8.11.2"
  resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.2.tgz#1a23f6de7bfb65ba56e4dd15df96668d319900c4"
  integrity sha512-l4rmVeV8qTIrrPrIR3kZQqBgSN93331s9i6wiUiLOSk0Q7PmUxZD/m1rQI622l3NfqBby9Ar5PABfS/SulfieQ==
  dependencies:
    buffer-writer "2.0.0"
    packet-reader "1.0.0"
    pg-connection-string "^2.6.1"
    pg-connection-string "^2.6.2"
    pg-pool "^3.6.1"
    pg-protocol "^1.6.0"
    pg-types "^2.1.0"


@@ 9261,9 9272,9 @@ pinkie@^2.0.0:
  integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==

pirates@^4.0.4:
  version "4.0.5"
  resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
  integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
  version "4.0.6"
  resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
  integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==

pkg-dir@^3.0.0:
  version "3.0.0"


@@ 9561,7 9572,7 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
  resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
  integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==

postcss@^8.2.15, postcss@^8.4.24:
postcss@^8.2.15, postcss@^8.4.24, postcss@^8.4.25:
  version "8.4.27"
  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057"
  integrity sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==


@@ 9624,11 9635,6 @@ prelude-ls@^1.2.1:
  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
  integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==

prelude-ls@~1.1.2:
  version "1.1.2"
  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
  integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==

prettier-linter-helpers@^1.0.0:
  version "1.0.0"
  resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"


@@ 9637,9 9643,9 @@ prettier-linter-helpers@^1.0.0:
    fast-diff "^1.1.2"

prettier@^3.0.0:
  version "3.0.0"
  resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.0.tgz#e7b19f691245a21d618c68bc54dc06122f6105ae"
  integrity sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==
  version "3.0.1"
  resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.1.tgz#65271fc9320ce4913c57747a70ce635b30beaa40"
  integrity sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==

pretty-bytes@^5.3.0, pretty-bytes@^5.4.1:
  version "5.6.0"


@@ 9655,12 9661,12 @@ pretty-format@^27.0.2:
    ansi-styles "^5.0.0"
    react-is "^17.0.1"

pretty-format@^29.0.0, pretty-format@^29.5.0:
  version "29.5.0"
  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a"
  integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==
pretty-format@^29.0.0, pretty-format@^29.6.2:
  version "29.6.2"
  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.2.tgz#3d5829261a8a4d89d8b9769064b29c50ed486a47"
  integrity sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==
  dependencies:
    "@jest/schemas" "^29.4.3"
    "@jest/schemas" "^29.6.0"
    ansi-styles "^5.0.0"
    react-is "^18.0.0"



@@ 9674,6 9680,13 @@ process@^0.11.10:
  resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
  integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==

prom-client@^14.2.0:
  version "14.2.0"
  resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-14.2.0.tgz#ca94504e64156f6506574c25fb1c34df7812cf11"
  integrity sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA==
  dependencies:
    tdigest "^0.1.1"

promise-inflight@^1.0.1:
  version "1.0.1"
  resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"


@@ 9960,9 9973,9 @@ react-redux-loading-bar@^5.0.4:
    react-lifecycles-compat "^3.0.4"

react-redux@^8.0.4:
  version "8.1.1"
  resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.1.1.tgz#8e740f3fd864a4cd0de5ba9cdc8ad39cc9e7c81a"
  integrity sha512-5W0QaKtEhj+3bC0Nj0NkqkhIv8gLADH/2kYFMTHxCVqQILiWzLv6MaLuV5wJU3BQEdHKzTfcvPN0WMS6SC1oyA==
  version "8.1.2"
  resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.1.2.tgz#9076bbc6b60f746659ad6d51cb05de9c5e1e9188"
  integrity sha512-xJKYI189VwfsFc4CJvHqHlDrzyFTY/3vZACbE+rr/zQ34Xx1wQfB4OTOSeOSNrF6BDVe8OOdxIrAnMGXA3ggfw==
  dependencies:
    "@babel/runtime" "^7.12.1"
    "@types/hoist-non-react-statics" "^3.3.1"


@@ 10241,15 10254,20 @@ 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.11, regenerator-runtime@^0.13.3:
regenerator-runtime@^0.13.3:
  version "0.13.11"
  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
  integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==

regenerator-transform@^0.15.1:
  version "0.15.1"
  resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56"
  integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==
regenerator-runtime@^0.14.0:
  version "0.14.0"
  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45"
  integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==

regenerator-transform@^0.15.2:
  version "0.15.2"
  resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4"
  integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==
  dependencies:
    "@babel/runtime" "^7.8.4"



@@ 10396,7 10414,16 @@ resolve.exports@^2.0.0:
  resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800"
  integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==

resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1:
resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.3:
  version "1.22.4"
  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34"
  integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==
  dependencies:
    is-core-module "^2.13.0"
    path-parse "^1.0.7"
    supports-preserve-symlinks-flag "^1.0.0"

resolve@^1.19.0, resolve@^1.22.1:
  version "1.22.2"
  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
  integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==


@@ 10567,9 10594,9 @@ sass-loader@^10.2.0:
    semver "^7.3.2"

sass@^1.62.1:
  version "1.64.1"
  resolved "https://registry.yarnpkg.com/sass/-/sass-1.64.1.tgz#6a46f6d68e0fa5ad90aa59ce025673ddaa8441cf"
  integrity sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==
  version "1.65.1"
  resolved "https://registry.yarnpkg.com/sass/-/sass-1.65.1.tgz#8f283b0c26335a88246a448d22e1342ba2ea1432"
  integrity sha512-9DINwtHmA41SEd36eVPQ9BJKpn7eKDQmUHmpI0y5Zv2Rcorrh0zS+cFrt050hdNbmmCNKTW3hV5mWfuegNRsEA==
  dependencies:
    chokidar ">=3.0.0 <4.0.0"
    immutable "^4.0.0"


@@ 10646,24 10673,19 @@ semver@^5.5.0:
  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==

semver@^6.0.0:
  version "6.3.0"
  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==

semver@^6.3.0, semver@^6.3.1:
semver@^6.0.0, semver@^6.3.0, semver@^6.3.1:
  version "6.3.1"
  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
  integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==

semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.1:
semver@^7.3.2, semver@^7.3.7:
  version "7.5.1"
  resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec"
  integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==
  dependencies:
    lru-cache "^6.0.0"

semver@^7.5.0:
semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4:
  version "7.5.4"
  resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
  integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==


@@ 10815,9 10837,9 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
  integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==

signal-exit@^4.0.1:
  version "4.0.2"
  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967"
  integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==
  version "4.1.0"
  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
  integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==

sirv@^1.0.7:
  version "1.0.19"


@@ 10838,11 10860,6 @@ slash@^3.0.0:
  resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
  integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==

slash@^4.0.0:
  version "4.0.0"
  resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
  integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==

slice-ansi@^3.0.0:
  version "3.0.0"
  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"


@@ 11165,7 11182,6 @@ string-length@^4.0.1:
    strip-ansi "^6.0.0"

"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
  name string-width-cjs
  version "4.2.3"
  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==


@@ 11264,7 11280,6 @@ stringz@^2.1.0:
    char-regex "^1.0.2"

"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
  name strip-ansi-cjs
  version "6.0.1"
  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==


@@ 11336,7 11351,7 @@ strip-indent@^4.0.0:
  dependencies:
    min-indent "^1.0.1"

strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
strip-json-comments@^3.1.1:
  version "3.1.1"
  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
  integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==


@@ 11394,9 11409,9 @@ stylelint-scss@^5.0.0:
    postcss-value-parser "^4.2.0"

stylelint@^15.10.1:
  version "15.10.1"
  resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.10.1.tgz#93f189958687e330c106b010cbec0c41dcae506d"
  integrity sha512-CYkzYrCFfA/gnOR+u9kJ1PpzwG10WLVnoxHDuBA/JiwGqdM9+yx9+ou6SE/y9YHtfv1mcLo06fdadHTOx4gBZQ==
  version "15.10.2"
  resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.10.2.tgz#0ee5a8371d3a2e1ff27fefd48309d3ddef7c3405"
  integrity sha512-UxqSb3hB74g4DTO45QhUHkJMjKKU//lNUAOWyvPBVPZbCknJ5HjOWWZo+UDuhHa9FLeVdHBZXxu43eXkjyIPWg==
  dependencies:
    "@csstools/css-parser-algorithms" "^2.3.0"
    "@csstools/css-tokenizer" "^2.1.1"


@@ 11405,7 11420,7 @@ stylelint@^15.10.1:
    balanced-match "^2.0.0"
    colord "^2.9.3"
    cosmiconfig "^8.2.0"
    css-functions-list "^3.1.0"
    css-functions-list "^3.2.0"
    css-tree "^2.3.1"
    debug "^4.3.4"
    fast-glob "^3.3.0"


@@ 11425,7 11440,7 @@ stylelint@^15.10.1:
    micromatch "^4.0.5"
    normalize-path "^3.0.0"
    picocolors "^1.0.0"
    postcss "^8.4.24"
    postcss "^8.4.25"
    postcss-resolve-nested-selector "^0.1.1"
    postcss-safe-parser "^6.0.0"
    postcss-selector-parser "^6.0.13"


@@ 11577,6 11592,13 @@ tar@^6.0.2:
    mkdirp "^1.0.3"
    yallist "^4.0.0"

tdigest@^0.1.1:
  version "0.1.2"
  resolved "https://registry.yarnpkg.com/tdigest/-/tdigest-0.1.2.tgz#96c64bac4ff10746b910b0e23b515794e12faced"
  integrity sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==
  dependencies:
    bintrees "1.0.2"

temp-dir@^2.0.0:
  version "2.0.0"
  resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e"


@@ 11795,7 11817,7 @@ ts-api-utils@^1.0.1:
  resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.1.tgz#8144e811d44c749cd65b2da305a032510774452d"
  integrity sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==

tsconfig-paths@^3.14.1:
tsconfig-paths@^3.14.2:
  version "3.14.2"
  resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088"
  integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==


@@ 11815,7 11837,12 @@ tslib@^1.8.1:
  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
  integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==

tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0:
tslib@^2.1.0:
  version "2.6.1"
  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410"
  integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==

tslib@^2.4.0, tslib@^2.5.0:
  version "2.5.3"
  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913"
  integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==


@@ 11854,13 11881,6 @@ type-check@^0.4.0, type-check@~0.4.0:
  dependencies:
    prelude-ls "^1.2.1"

type-check@~0.3.2:
  version "0.3.2"
  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
  integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==
  dependencies:
    prelude-ls "~1.1.2"

type-detect@4.0.8:
  version "4.0.8"
  resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"


@@ 11933,11 11953,16 @@ typed-array-length@^1.0.4:
    for-each "^0.3.3"
    is-typed-array "^1.1.9"

"typescript@^4.7 || 5", typescript@^5.0.4:
"typescript@^4.7 || 5":
  version "5.1.3"
  resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.3.tgz#8d84219244a6b40b6fb2b33cc1c062f715b9e826"
  integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==

typescript@^5.0.4:
  version "5.1.6"
  resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274"
  integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==

unbox-primitive@^1.0.2:
  version "1.0.2"
  resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"


@@ 12571,11 12596,6 @@ wildcard@^2.0.0:
  resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
  integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==

word-wrap@^1.2.3, word-wrap@~1.2.3:
  version "1.2.3"
  resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
  integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==

workbox-background-sync@7.0.0:
  version "7.0.0"
  resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-7.0.0.tgz#2b84b96ca35fec976e3bd2794b70e4acec46b3a5"


@@ 12746,7 12766,6 @@ workbox-window@7.0.0, workbox-window@^7.0.0:
    workbox-core "7.0.0"

"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
  name wrap-ansi-cjs
  version "7.0.0"
  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
  integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==